Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
424 volume VI os16<br />
Sorgenti delle applicazioni 425<br />
4300030 | char *user_uid;<br />
4300031 | char *user_gid;<br />
4300032 | char *user_description;<br />
4300033 | char *user_home;<br />
4300034 | char *user_shell;<br />
4300035 | uid_t uid;<br />
4300036 | uid_t euid;<br />
4300037 | int fd;<br />
4300038 | ssize_t size_read;<br />
4300039 | int b; // Index inside buffer.<br />
4300040 | int loop;<br />
4300041 | char *exec_argv[2];<br />
4300042 | int status;<br />
4300043 | char *tty_path;<br />
4300044 | //<br />
4300045 | // Check if login is running correctly.<br />
4300046 | //<br />
4300047 | euid = geteuid ();<br />
4300048 | uid = geteuid ();<br />
4300049 | // //<br />
4300050 | // // Show process info.<br />
4300051 | // //<br />
4300052 | // heap_clear ();<br />
4300053 | // process_info ();<br />
4300054 | //<br />
4300055 | // Check privileges.<br />
4300056 | //<br />
4300057 | if (!(uid == 0 && euid == 0))<br />
4300058 | {<br />
4300059 | printf ("%s: can only run with root privileges!\n", argv[0]);<br />
4300060 | exit (-1);<br />
4300061 | }<br />
4300062 | //<br />
4300063 | // Prepare arguments for the shell call.<br />
4300064 | //<br />
4300065 | exec_argv[0] = "-";<br />
4300066 | exec_argv[1] = NULL;<br />
4300067 | //<br />
4300068 | // Login.<br />
4300069 | //<br />
4300070 | while (1)<br />
4300071 | {<br />
4300072 | fd = open ("/etc/passwd", O_RDONLY);<br />
4300073 | //<br />
4300074 | if (fd < 0)<br />
4300075 | {<br />
4300076 | perror ("Cannot open file ‘/etc/passwd’");<br />
4300077 | exit (-1);<br />
4300078 | }<br />
4300079 | //<br />
4300080 | printf ("Log in as \"root\" or \"user\" "<br />
4300081 | "with password \"ciao\" :-)\n");<br />
4300082 | input_line (login, "login:", LOGIN_MAX, INPUT_LINE_ECHO);<br />
4300083 | //<br />
4300084 | //<br />
4300085 | //<br />
4300086 | loop = 1;<br />
4300087 | while (loop)<br />
4300088 | {<br />
4300089 | for (b = 0; b < LINE_MAX; b++)<br />
4300090 | {<br />
4300091 | size_read = read (fd, &buffer[b], (size_t) 1);<br />
4300092 | if (size_read