14 int main(int argc, char *argv[])
16 char *sUsername, *sPassword;
21 printf("\x1B[?25h"); // Re-enable the cursor
22 // printf("\x1B[2J"); // Clear Screen
29 sUsername = GetUsername();
30 if(!sUsername) continue;
31 sPassword = GetPassword();
32 if(!sPassword) continue;
33 if( (uid = ValidateUser(sUsername, sPassword)) == -1 )
35 printf("\nInvalid username or password\n");
36 _SysDebug("Auth failure: '%s':'%s'", sUsername, sPassword);
45 uinfo = GetUserInfo(uid);
46 struct s_sys_spawninfo spawninfo;
48 spawninfo.gid = uinfo->GID;
49 spawninfo.uid = uinfo->UID;
50 const char *child_argv[2] = {"-", 0};
51 const char **child_envp = NULL;
52 int fds[] = {0, 1, 2};
53 pid = _SysSpawn(uinfo->Shell, child_argv, child_envp, 3, fds, &spawninfo);
56 fprintf(stderr, "Unable to fork the login process!\n");
60 // Wait for child to terminate
61 _SysWaitTID(pid, &status);
67 char *_GetString(int bEcho)
74 while( (ch = fgetc(stdin)) != -1 && ch != '\n' )
78 if( pos <= 0 ) continue;
83 else if( ch == 'c'-'a'+1)
86 else if( ch == 'u'-'a'+1)
94 // Don't echo out to the screen
100 if(pos == BUFLEN-1) break;
110 * \fn char *GetUsername()
114 char ret[BUFLEN] = {0};
119 printf("Username: ");
122 return _GetString(1);
126 * \fn char *GetPassword()
131 printf("Password: ");
134 return _GetString(0);