Bug 339983 – gnome-pty-helper should log username Patch from Brian
authorBehdad Esfahbod <behdad@gnome.org>
Tue, 11 Jul 2006 15:52:08 +0000 (15:52 +0000)
committerBehdad Esfahbod <behdad@src.gnome.org>
Tue, 11 Jul 2006 15:52:08 +0000 (15:52 +0000)
2006-07-11  Behdad Esfahbod  <behdad@gnome.org>

        Bug 339983 – gnome-pty-helper should log username
        Patch from Brian Cameron

        * gnome-pty-helper/gnome-pty-helper.c (pty_remove), (shutdown_pty),
        (pty_add), (open_ptys):
        * gnome-pty-helper/gnome-pty.h:
        * gnome-pty-helper/gnome-utmp.c (write_logout_record):
        Log username if system supports it.

ChangeLog
gnome-pty-helper/gnome-pty-helper.c
gnome-pty-helper/gnome-pty.h
gnome-pty-helper/gnome-utmp.c

index 6644c4e..67cc641 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2006-07-11  Behdad Esfahbod  <behdad@gnome.org>
+
+       Bug 339983 – gnome-pty-helper should log username
+       Patch from Brian Cameron
+
+       * gnome-pty-helper/gnome-pty-helper.c (pty_remove), (shutdown_pty),
+       (pty_add), (open_ptys):
+       * gnome-pty-helper/gnome-pty.h:
+       * gnome-pty-helper/gnome-utmp.c (write_logout_record):
+       Log username if system supports it.
+
 2006-07-10  Behdad Esfahbod  <behdad@gnome.org>
 
        Released vte-0.13.3.
 2006-07-10  Behdad Esfahbod  <behdad@gnome.org>
 
        Released vte-0.13.3.
index 48c68ea..cd34446 100644 (file)
@@ -67,6 +67,7 @@ static char login_name_buffer [48];
 static char *login_name, *display_name;
 
 struct pty_info {
 static char *login_name, *display_name;
 
 struct pty_info {
+       char   *login_name;
        struct pty_info *next;
        char   *line;
        void   *data;
        struct pty_info *next;
        char   *line;
        void   *data;
@@ -221,6 +222,7 @@ pty_remove (pty_info *pi)
                        else
                                last->next = pi->next;
                        free (pi->line);
                        else
                                last->next = pi->next;
                        free (pi->line);
+                       free (pi->login_name);
                        pty_free (pi);
                        return;
                }
                        pty_free (pi);
                        return;
                }
@@ -235,7 +237,7 @@ shutdown_pty (pty_info *pi)
 {
        if (pi->utmp || pi->wtmp || pi->lastlog)
                if (pi->data)
 {
        if (pi->utmp || pi->wtmp || pi->lastlog)
                if (pi->data)
-                       write_logout_record (pi->data, pi->utmp, pi->wtmp);
+                       write_logout_record (pi->login_name, pi->data, pi->utmp, pi->wtmp);
 
        pty_remove (pi);
 }
 
        pty_remove (pi);
 }
@@ -250,7 +252,7 @@ shutdown_helper (void)
 }
 
 static pty_info *
 }
 
 static pty_info *
-pty_add (int utmp, int wtmp, int lastlog, char *line)
+pty_add (int utmp, int wtmp, int lastlog, char *line, char *login_name)
 {
        pty_info *pi = malloc (sizeof (pty_info));
 
 {
        pty_info *pi = malloc (sizeof (pty_info));
 
@@ -275,6 +277,7 @@ pty_add (int utmp, int wtmp, int lastlog, char *line)
        pi->utmp = utmp;
        pi->wtmp = wtmp;
        pi->lastlog = lastlog;
        pi->utmp = utmp;
        pi->wtmp = wtmp;
        pi->lastlog = lastlog;
+       pi->login_name = strdup (login_name);
 
        pty_list = pi;
 
 
        pty_list = pi;
 
@@ -524,7 +527,7 @@ open_ptys (int utmp, int wtmp, int lastlog)
        /* revoke(term_name); */
 
        /* add pty to the list of allocated by us */
        /* revoke(term_name); */
 
        /* add pty to the list of allocated by us */
-       p = pty_add (utmp, wtmp, lastlog, term_name);
+       p = pty_add (utmp, wtmp, lastlog, term_name, login_name);
        result = 1;
 
        if (n_write (STDIN_FILENO, &result, sizeof (result)) != sizeof (result) ||
        result = 1;
 
        if (n_write (STDIN_FILENO, &result, sizeof (result)) != sizeof (result) ||
index 186b81a..53de25a 100644 (file)
@@ -16,6 +16,6 @@ typedef enum {
 
 void *update_dbs         (int utmp, int wtmp, int lastlog, char *login_name, char *display_name, char *term_name);
 void *write_login_record (char *login_name, char *display_name, char *term_name, int utmp, int wtmp, int lastlog);
 
 void *update_dbs         (int utmp, int wtmp, int lastlog, char *login_name, char *display_name, char *term_name);
 void *write_login_record (char *login_name, char *display_name, char *term_name, int utmp, int wtmp, int lastlog);
-void write_logout_record (void *data, int utmp, int wtmp);
+void write_logout_record (char *login_name, void *data, int utmp, int wtmp);
 
 #endif
 
 #endif
index 833a121..d25b712 100644 (file)
@@ -230,7 +230,7 @@ update_lastlog(char* login_name, UTMP *ut)
 #endif /* HAVE_LASTLOG */
 
 void
 #endif /* HAVE_LASTLOG */
 
 void
-write_logout_record (void *data, int utmp, int wtmp)
+write_logout_record (char *login_name, void *data, int utmp, int wtmp)
 {
        UTMP put, *ut = data;
 
 {
        UTMP put, *ut = data;
 
@@ -251,6 +251,12 @@ write_logout_record (void *data, int utmp, int wtmp)
        time (&put.ut_time);
 #endif
 
        time (&put.ut_time);
 #endif
 
+#if defined(HAVE_UT_UT_NAME)
+       strncpy (put.ut_name, login_name, sizeof (put.ut_name));
+#elif defined(HAVE_UT_UT_USER)
+       strncpy (put.ut_user, login_name, sizeof (put.ut_user));
+#endif
+
        if (utmp)
                update_utmp (&put);
 
        if (utmp)
                update_utmp (&put);