X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Flogin_src%2Fmain.c;h=8774298a7612e28a348b46b701653439bb3fd55a;hb=refs%2Ftags%2Frel0.10;hp=2e4906d109cccee90667bcab6a9e25aea3741f5b;hpb=ab47641a5334988563520c66f5097dd6d687ea48;p=tpg%2Facess2.git diff --git a/Usermode/Applications/login_src/main.c b/Usermode/Applications/login_src/main.c index 2e4906d1..8774298a 100644 --- a/Usermode/Applications/login_src/main.c +++ b/Usermode/Applications/login_src/main.c @@ -18,16 +18,24 @@ int main(int argc, char *argv[]) int status = 0; tUserInfo *uinfo; + printf("\x1B[2J"); // Clear Screen + for(;;) { - printf("\x1B[2J"); // Clear Screen // Validate User - do { - if(uid == -1) printf("\n"); + for(;;) + { sUsername = GetUsername(); sPassword = GetPassword(); - printf("\n"); - } while( (uid = ValidateUser(sUsername, sPassword)) == -1 ); + if( (uid = ValidateUser(sUsername, sPassword)) == -1 ) + { + printf("\nInvalid username or password\n"); + free(sUsername); + free(sPassword); + } + else + break; + } printf("\n"); // Create child process @@ -38,6 +46,8 @@ int main(int argc, char *argv[]) return -1; } + printf("pid = %i\n", pid); + // Spawn shell in a child process if(pid == 0) { @@ -50,7 +60,8 @@ int main(int argc, char *argv[]) child_argv[0] = uinfo->Shell; // Set Environment setgid(uinfo->GID); - setuid(uid); + //setuid(uid); + setuid(uinfo->UID); execve(uinfo->Shell, child_argv, child_envp); exit(-1); @@ -68,7 +79,7 @@ int main(int argc, char *argv[]) */ char *GetUsername() { - char ret[BUFLEN]; + char ret[BUFLEN] = {0}; int pos = 0; char ch; @@ -79,6 +90,7 @@ char *GetUsername() while( (ch = fgetc(stdin)) != -1 && ch != '\n' ) { if(ch == '\b') { + if( pos <= 0 ) continue; pos --; ret[pos] = '\0'; } @@ -114,6 +126,7 @@ char *GetPassword() while( (ch = fgetc(stdin)) != -1 && ch != '\n' ) { if(ch == '\b') { + if( pos <= 0 ) continue; pos --; ret[pos] = '\0'; }