5: #include <string.h>

  6: #include <time.h>

  7: #include <sys/time.h>

  8: #include <sys/types.h>

  9: #include <sys/socket.h>

 10: #include <netinet/in.h>

 11: #include <arpa/inet.h>

 12: #include <utmp.h>

 13: #include <popt.h>

 14:

 15: void print_utmp_entry(struct utmp * u) {

 16:  struct tm *tp;

 17:  char * type;

 18:  char addrtext[INET6_ADDRSTRLEN];

 19:

 20:  switch (u->ut_type) {

 21:  case EMPTY: type = 'EMPTY'; break;

 22:  case RUN_LVL: type = 'RUN_LVL'; break;

 23:  case BOOT_TIME: type = 'BOOT_TIME'; break;

 24:  case NEW_TIME: type = 'NEW_TIME'; break;

 25:  case OLD_TIME: type = 'OLD_TIME'; break;

 26:  case INIT_PROCESS: type = 'INIT_PROCESS'; break;

 27:  case LOGIN_PROCESS: type = 'LOGIN_PROCESS'; break;

 28:  case USER_PROCESS: type = 'USER_PROCESS'; break;

 29:  case DEAD_PROCESS: type = 'DEAD_PROCESS'; break;

 30:  case ACCOUNTING: type = 'ACCOUNTING '; break;

 31:  }

 32:  printf('%-13s:', type);

 33:  switch (u->ut_type) {

 34:  case LOGIN_PROCESS:

 35:  case USER_PROCESS:

 36:  case DEAD_PROCESS:

 37:   printf(' line: %s', u->ut_line);

 38:   /* fall through */

 39:  case INIT_PROCESS:

 40:   printf(' pid: %6d id: %4.4s', u->ut_pid, u->ut_id);

 41:  }

 42:  printf (' ');

 43:  tp = gmtime(&u->ut_tv.tv_sec);

 44:  printf('time: %24.24s.%lu ', asctime(tp), u->ut_tv.tv_usec);

 45:  switch (u->ut_type) {

 46:  case USER_PROCESS:

 47:  case LOGIN_PROCESS:

 48:  case RUN_LVL:

 49:  case BOOT_TIME:

 50:   printf('пользователь: %s ', u->ut_user);

 51:  }

 52:  if (u->ut_type == USER_PROCESS) {

 53:   if (u->ut_session)

 54:    printf(' сеанс: %lu ', u->ut_session);

 55:   if (u->ut_host)

 56:    printf (' хост: %s ', u->ut_host);

 57:   if (u->ut_addr_v6[0]) {

 58:    if (!(u->ut_addr_v6[1] |

 59:     u->ut_addr_v6[2] |

 60:     u->ut_addr_v6[3])) {

 61:     /* заполнение только первой группы означает адрес IPV4 */

 62:     inet_ntop(AF_INET, u->ut_addr_v6,

 63:     addrtext, sizeof(addrtext));

 64:     printf(' IPV4: %s ', addrtext);

 65:    } else {

 66:     inet_ntop(AF_INET_6, u->ut_addr_v6,

 67:      addrtext, sizeof(addrtext));

 68:     printf (' IPV6: %s ', addrtext);

 69:    }

 70:   }

 71:  }

 72:  if (u->ut_type == DEAD_PROCESS) {

 73:   printf(' завершение : %u: %u ',

 74:    u->ut_exit.e_termination,

 75:    u->ut_exit.e_exit);

 76:  }

 77:  printf(' ');

 78: }

 79:

 80: struct utmp * get_next_line (char * id, char * line) {

 81:  struct utmp request;

 82:

 83:  if (!id && !line)

 84:   return getutent();

 85:

 86:  memset(&request, 0, sizeof(request));

 87:

 88:  if (line) {

 89:   strncpy(&request.ut_line[0], line, UT_LINESIZE);

 90:   return getutline(&request);

 91:  }

 92:

 93:  request.ut_type = INIT_PROCESS;

 94:  strncpy(&request.ut_id[0], id, 4);

 95:  return getutid(&request);

 96: }

 97:

 98: void print_file(char * name, char * id, char * line) {

 99:  struct utmp * u;

100:

101:  if (utmpname(name)) {

102:   fprintf (stderr, 'сбой при открытии базы данных utmp %s ', name);

103:   return;

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату