X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Usermode%2FApplications%2Flogin_src%2Fmain.c;h=2866dbd68c51c2214bb75912e2a49e47a8521821;hb=45f9a29e481ce9ea7ca7121541f0e0f90147f5b1;hp=54532837d5bbd17a4bb0b081c14357b0dd68c324;hpb=c13663104076a7780d1bbbaf77273416733cbb58;p=tpg%2Facess2.git diff --git a/Usermode/Applications/login_src/main.c b/Usermode/Applications/login_src/main.c index 54532837..2866dbd6 100644 --- a/Usermode/Applications/login_src/main.c +++ b/Usermode/Applications/login_src/main.c @@ -14,22 +14,28 @@ char *GetPassword(); int main(int argc, char *argv[]) { char *sUsername, *sPassword; - int pid, uid; + int pid, uid = 0; int status = 0; tUserInfo *uinfo; - putchar('\n'); for(;;) { + printf("\x1B[2J"); // Clear Screen // Validate User - do { + for(;;) + { sUsername = GetUsername(); sPassword = GetPassword(); - } while( (uid = ValidateUser(sUsername, sPassword)) == -1 ); - putchar('\n'); - - // Get user information - uinfo = GetUserInfo(uid); + if( (uid = ValidateUser(sUsername, sPassword)) == -1 ) + { + printf("\nInvalid username or password for '%s'\n", sUsername); + free(sUsername); + free(sPassword); + } + else + break; + } + printf("\n"); // Create child process pid = clone(CLONE_VM, 0); @@ -42,12 +48,19 @@ int main(int argc, char *argv[]) // Spawn shell in a child process if(pid == 0) { - char *argv[2] = {uinfo->Shell, 0}; - char **envp = NULL; + char *child_argv[2] = {NULL, 0}; + char **child_envp = NULL; + + // Get user information + uinfo = GetUserInfo(uid); + + child_argv[0] = uinfo->Shell; + // Set Environment setgid(uinfo->GID); - setuid(uid); + //setuid(uid); + setuid(uinfo->UID); - execve(uinfo->Shell, argv, envp); + execve(uinfo->Shell, child_argv, child_envp); exit(-1); } @@ -63,7 +76,7 @@ int main(int argc, char *argv[]) */ char *GetUsername() { - char ret[BUFLEN]; + char ret[BUFLEN] = {0}; int pos = 0; char ch;