commit e7207d3a29b79c6de20e0eac80d0ec5cec19b1af Author: Maximiliano Curia Date: Fri Oct 15 14:13:25 2010 -0300 Missing g_free diff --git a/daemon/gdm-session-record.c b/daemon/gdm-session-record.c index 49237fa..0ff2c25 100644 --- a/daemon/gdm-session-record.c +++ b/daemon/gdm-session-record.c @@ -209,6 +209,7 @@ record_set_line (UTMP *u, u->ut_line[sizeof (u->ut_line) - 1] = '\0'; } } + g_free(hostname); } } g_debug ("using ut_line %.*s", (int) sizeof (u->ut_line), u->ut_line); commit db8dfa01f888bbf4b63d52f5d9e3d3766b9ade51 Author: Maximiliano Curia Date: Wed Oct 21 13:26:23 2009 -0300 Replacing a one time while with a simple if diff --git a/daemon/gdm-session-record.c b/daemon/gdm-session-record.c index 8ca0e4f..49237fa 100644 --- a/daemon/gdm-session-record.c +++ b/daemon/gdm-session-record.c @@ -328,14 +328,9 @@ gdm_session_record_logout (GPid session_pid, #if defined(HAVE_GETUTXENT) setutxent (); - while ((u = getutxline (&session_record)) != NULL) { + if ((u = getutxline (&session_record)) != NULL) { g_debug ("Removing utmp record"); - if (u->ut_pid == session_pid && - u->ut_type == DEAD_PROCESS) { - /* Already done */ - break; - } u->ut_type = DEAD_PROCESS; #if defined(HAVE_UT_UT_TV) commit 1121c86629798f294c56d131fd8e33f937df5db8 Author: Maximiliano Curia Date: Wed Oct 21 13:14:32 2009 -0300 Removing unneeded call to getutxent diff --git a/daemon/gdm-session-record.c b/daemon/gdm-session-record.c index e65c79e..8ca0e4f 100644 --- a/daemon/gdm-session-record.c +++ b/daemon/gdm-session-record.c @@ -328,8 +328,7 @@ gdm_session_record_logout (GPid session_pid, #if defined(HAVE_GETUTXENT) setutxent (); - while ((u = getutxent ()) != NULL && - (u = getutxline (&session_record)) != NULL) { + while ((u = getutxline (&session_record)) != NULL) { g_debug ("Removing utmp record"); if (u->ut_pid == session_pid && commit 1725094cadcf2896a8fed59313494f92d3f0d8f9 Author: Maximiliano Curia Date: Wed Oct 21 12:35:51 2009 -0300 Remote display utmp fix diff --git a/daemon/gdm-session-record.c b/daemon/gdm-session-record.c index 4ed60a1..e65c79e 100644 --- a/daemon/gdm-session-record.c +++ b/daemon/gdm-session-record.c @@ -136,36 +136,38 @@ record_set_id (UTMP *u, #endif } -static void -record_set_host (UTMP *u, - const char *x11_display_name, - const char *host_name) +static char *get_hostname(const char* x11_display_name, const char* host_name) { - char *hostname; - -#if defined(HAVE_UT_UT_HOST) - hostname = NULL; - /* - * Set ut_host to hostname:$DISPLAY if remote, otherwise set + * Returns hostname:$DISPLAY if remote, otherwise set * to $DISPLAY */ if (host_name != NULL && x11_display_name != NULL && g_str_has_prefix (x11_display_name, ":")) { - hostname = g_strdup_printf ("%s%s", host_name, x11_display_name); - } else { - hostname = g_strdup (x11_display_name); + return g_strdup_printf ("%s%s", host_name, x11_display_name); } + return g_strdup (x11_display_name); +} + +static void +record_set_host (UTMP *u, + const char *x11_display_name, + const char *host_name) +{ + char *hostname; + +#if defined(HAVE_UT_UT_HOST) + hostname = get_hostname(x11_display_name, host_name); if (hostname != NULL) { strncpy (u->ut_host, hostname, sizeof (u->ut_host)); g_debug ("using ut_host %.*s", (int) sizeof (u->ut_host), u->ut_host); - g_free (hostname); #ifdef HAVE_UT_UT_SYSLEN u->ut_syslen = MIN (strlen (hostname), sizeof (u->ut_host)); #endif + g_free (hostname); } #endif } @@ -173,7 +175,8 @@ record_set_host (UTMP *u, static void record_set_line (UTMP *u, const char *display_device, - const char *x11_display_name) + const char *x11_display_name, + const char *host_name) { /* * Set ut_line to the device name associated with this display @@ -185,13 +188,29 @@ record_set_line (UTMP *u, strncpy (u->ut_line, display_device + strlen ("/dev/"), sizeof (u->ut_line)); - } else if (x11_display_name != NULL - && g_str_has_prefix (x11_display_name, ":")) { - strncpy (u->ut_line, - x11_display_name, - sizeof (u->ut_line)); - } - + } else { + char *hostname = get_hostname(x11_display_name, host_name); + if ( hostname != NULL ) { + strncpy (u->ut_line, hostname, sizeof (u->ut_line)); + + /* If the hostname was too long put the display at the end */ + if ( strlen(hostname)+1 > sizeof(u->ut_line) ) { + size_t len_display = 0; + char *sep = strrchr(hostname,':'); + len_display = strlen(sep); + + if ( sep && ( len_display+1 < sizeof (u->ut_line) ) ) + { + strncpy(u->ut_line + sizeof (u->ut_line) - + (len_display+1), sep, len_display+1 ); + } else { + /* if no display was found (or display was too + * long), make sure it's a string */ + u->ut_line[sizeof (u->ut_line) - 1] = '\0'; + } + } + } + } g_debug ("using ut_line %.*s", (int) sizeof (u->ut_line), u->ut_line); } @@ -218,9 +237,11 @@ gdm_session_record_login (GPid session_pid, record_set_pid (&session_record, session_pid); /* Set ut_id to the $DISPLAY value */ - record_set_id (&session_record, x11_display_name); + /* Don't, leave it as all \0s */ + /* record_set_id (&session_record, x11_display_name); */ record_set_host (&session_record, x11_display_name, host_name); - record_set_line (&session_record, display_device, x11_display_name); + record_set_line (&session_record, display_device, x11_display_name, + host_name); /* Handle wtmp */ g_debug ("Writing wtmp session record to " GDM_NEW_SESSION_RECORDS_FILE); @@ -286,9 +307,11 @@ gdm_session_record_logout (GPid session_pid, record_set_timestamp (&session_record); record_set_pid (&session_record, session_pid); /* Set ut_id to the $DISPLAY value */ - record_set_id (&session_record, x11_display_name); + /* Don't, leave it as all \0s */ + /* record_set_id (&session_record, x11_display_name); */ record_set_host (&session_record, x11_display_name, host_name); - record_set_line (&session_record, display_device, x11_display_name); + record_set_line (&session_record, display_device, x11_display_name, + host_name); /* Handle wtmp */ @@ -306,7 +329,7 @@ gdm_session_record_logout (GPid session_pid, setutxent (); while ((u = getutxent ()) != NULL && - (u = getutxid (&session_record)) != NULL) { + (u = getutxline (&session_record)) != NULL) { g_debug ("Removing utmp record"); if (u->ut_pid == session_pid &&