Replace rand() implementation - fixes threading lockups
[tpg/acess2.git] / Usermode / Applications / login_src / main.c
index 2e4906d..2bafe3b 100644 (file)
@@ -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 for '%s'\n", sUsername);
+                               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';
                }

UCC git Repository :: git.ucc.asn.au