diff --git a/src/bin/login/main.c b/src/bin/login/main.c index 705ad1a..62ff855 100755 --- a/src/bin/login/main.c +++ b/src/bin/login/main.c @@ -27,30 +27,47 @@ #include #include +struct passwd { + char username[32]; + char password[32]; + int uid; + int gid; + char shell[128]; + char realname[256]; + }; + int main() { - int shellPid = 0; + FILE *fd; + int shellPid = 0,i = 0x0; char userName[32]; - char passWord[128]; - while (1) { - printf("\nUbixOS/IA-32 (devel.ubixos.com) (console)\n\n"); - login: - printf("Login: "); - gets((char *)&userName); - printf("Password: "); - gets((char *)&passWord); - if ((0 == memcmp(userName,"root",4)) && (0 == memcmp(passWord,"root",4))) { - shellPid = fork(); - if (!shellPid) { - exec("shell"); + char passWord[32]; + struct passwd *data = (struct passwd *)malloc(4096); + if (!(fd = fopen("userdb","r"))) { + printf("Error Opening File"); + } + fread(data,4096,0,fd); + fclose(fd); + printf("\nUbixOS/IA-32 (devel.ubixos.com) (console)\n\n"); + login: + printf("Login: "); + gets((char *)&userName); + printf("Password: "); + gets((char *)&passWord); + for (i=0;i<(4096/sizeof(struct passwd));i++) { + if (0 == memcmp(userName,data[i].username,4)) { + if (0 == memcmp(passWord,data[i].password,4)) { + shellPid = fork(); + if (!shellPid) { + exec(data[i].shell); + } + else { + while (pidStatus(shellPid)) { asm("nop"); } + goto login; + } } - else { - while (pidStatus(shellPid)) { asm("nop"); } - } - } - else { - printf("Login Incorrect!\n"); - goto login; } } + printf("Login Incorrect!\n"); + goto login; exit(1); } diff --git a/src/lib/libc/stdio/fgetc.c b/src/lib/libc/stdio/fgetc.c index 3c0b10c..08671ae 100755 --- a/src/lib/libc/stdio/fgetc.c +++ b/src/lib/libc/stdio/fgetc.c @@ -28,7 +28,7 @@ asm( "int %0" : - : "i" (0x80),"a" (5),"b" (&ch),"c" (fd-fd) + : "i" (0x80),"a" (5),"b" (&ch),"c" (fd) ); return(ch); } \ No newline at end of file diff --git a/src/sys/kernel/syscall.c b/src/sys/kernel/syscall.c index 7282945..cbb118a 100755 --- a/src/sys/kernel/syscall.c +++ b/src/sys/kernel/syscall.c @@ -142,16 +142,6 @@ ); } -void sysFgetc() { - int fd; - int *ptr; - asm("": "=b" (ptr),"=c" (fd)); - asm("sti"); - if (fd == 0) { - ptr[0] = getch(); - } - } - void sysCheckPid() { int *ptr; asm("": "=b" (ptr)); diff --git a/src/sys/ubixfs/file.c b/src/sys/ubixfs/file.c index 5149f4c..57e8d76 100755 --- a/src/sys/ubixfs/file.c +++ b/src/sys/ubixfs/file.c @@ -166,7 +166,6 @@ if (tmpFd == fd) { ch = getFileByte(tmpFd,tmpFd->offset); tmpFd->offset++; - //kprintf("[%i]",ch); return(ch); } } @@ -184,11 +183,9 @@ void sysFopen() { char *file = 0x0,*flags = 0x0; userFileDescriptor *userFd = 0x0; - fileDescriptor *tmpFd = 0x0; asm("":"=b" (file),"=c" (flags),"=d" (userFd)); asm("sti"); - tmpFd = fopen(file,flags); - userFd->fd = tmpFd; + userFd->fd = fopen(file,flags); //Return return; } @@ -230,4 +227,20 @@ *status = fclose(userFd->fd); //Return return; - } \ No newline at end of file + } + +void sysFgetc() { + int *ptr = 0x0; + userFileDescriptor *userFd = 0x0; + fileDescriptor *tmpFd = 0x0; + asm("": "=b" (ptr),"=c" (userFd)); + asm("sti"); + tmpFd = userFd->fd; + if (userFd->fd == 0) { + ptr[0] = getch(); + } + else { + ptr[0] = fgetc(tmpFd); + } + } + \ No newline at end of file diff --git a/src/sys/ubixfs/ubixfs.c b/src/sys/ubixfs/ubixfs.c index a6dc975..5d7f443 100755 --- a/src/sys/ubixfs/ubixfs.c +++ b/src/sys/ubixfs/ubixfs.c @@ -66,7 +66,6 @@ if(*str1 == *str2) return 0; if(*str1 > *str2) return 1; if(*str1 < *str2) return -1; - return -1; } /* int readFile(char *file) { diff --git a/src/tools/Makefile b/src/tools/Makefile index 0275735..182f24f 100755 --- a/src/tools/Makefile +++ b/src/tools/Makefile @@ -49,7 +49,7 @@ (cp ../bin/ls/ls ./) (cp ../bin/pwd/pwd ./) (cp ../bin/login/login ./) - (./format 257 2000 init shell test ls pwd login) + (./format 257 2000 init shell test ls pwd userdb login) (rm init) (rm shell) (rm test) diff --git a/src/tools/format.c b/src/tools/format.c index 1018dc1..97e6a29 100755 --- a/src/tools/format.c +++ b/src/tools/format.c @@ -91,6 +91,11 @@ fputc(fgetc(fileFd),driveFd); counter++; } + i = 0; + while((counter + i)%512) { + fputc(0x0,driveFd); + i++; + } fclose(fileFd); dirEntry[file].size = counter; sprintf(dirEntry[file].fileName,"%s",argv[x]); diff --git a/src/tools/userdb b/src/tools/userdb new file mode 100755 index 0000000..c0ce06c --- /dev/null +++ b/src/tools/userdb Binary files differ