24.01.2014 Views

Codice

Codice

Codice

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!