[Bug c++/34237] New: Weird error with getpass and crypt

jlarsen at fsu dot edu gcc-bugzilla@gcc.gnu.org
Mon Nov 26 14:37:00 GMT 2007


compile with g++ -lcrypt

#include <iostream>
#include <string>
#include <utility>
#include <pwd.h>

using namespace std;

int main()
{
string username;
char salt[] = "$1$########";
char * passwordold = new char [100];
char * passwordnew = new char [100];
cout << "Enter username    : ";
cin >> username;
passwordold = getpass("Enter password    : ");
passwordnew = getpass("Enter new password: ");
string *strold = new string(crypt(passwordold,salt));
*strold = strold->substr(12,22);
string *strnew = new string(crypt(passwordnew,salt));
*strnew = strnew->substr(12,22);
cout << "cryptold: " << *strold << endl;
cout << "cryptnew: " << *strnew << endl;
return 1;
}

for input of passwords blah and blah2 it outputs
cryptold: oj.L0Tu9xXqtV9lyKLmdv0
cryptnew: oj.L0Tu9xXqtV9lyKLmdv0

which is the encrpytion of blah2  whatever I put into both the second one is
encryped.  If I change it to cin >>  instead of getpass it works.
if out cout << passwordold << passwordnew  it still knows the correct passwords
entered.
The only fix I can find is reordering   putting the request for the new
password after its calculated the old crypt, but that doesn't solve the fact
that somethign very wrong is going on here.


-- 
           Summary: Weird error with getpass and crypt
           Product: gcc
           Version: 3.4.3
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: jlarsen at fsu dot edu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34237



More information about the Gcc-bugs mailing list