diff options
author | William Jon McCann <jmccann@redhat.com> | 2008-03-05 19:46:55 +0000 |
---|---|---|
committer | William Jon McCann <mccann@src.gnome.org> | 2008-03-05 19:46:55 +0000 |
commit | 029de70f067240226a64d14cf9c1586950061d59 (patch) | |
tree | 77fc91ddfdc324acc9dd1c59727885c05ff93e02 | |
parent | 318b7777a0a513dc206c22065e2354c5aaa472c6 (diff) | |
download | gdm-029de70f067240226a64d14cf9c1586950061d59.tar.gz |
Try a little harder to not keep sensitive data in memory.
2008-03-05 William Jon McCann <jmccann@redhat.com>
* daemon/gdm-session-worker.c: (script_execute), (my_strchrnul),
(gdm_session_execute), (gdm_session_worker_process_pam_message),
(gdm_session_worker_pam_new_messages_handler):
* gui/simple-greeter/gdm-greeter-login-window.c:
(delete_entry_text), (reset_dialog),
(gdm_greeter_login_window_info_query),
(gdm_greeter_login_window_secret_info_query):
Try a little harder to not keep sensitive data in memory.
svn path=/trunk/; revision=5933
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | daemon/gdm-session-worker.c | 22 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-greeter-login-window.c | 21 |
3 files changed, 44 insertions, 10 deletions
@@ -1,3 +1,14 @@ +2008-03-05 William Jon McCann <jmccann@redhat.com> + + * daemon/gdm-session-worker.c: (script_execute), (my_strchrnul), + (gdm_session_execute), (gdm_session_worker_process_pam_message), + (gdm_session_worker_pam_new_messages_handler): + * gui/simple-greeter/gdm-greeter-login-window.c: + (delete_entry_text), (reset_dialog), + (gdm_greeter_login_window_info_query), + (gdm_greeter_login_window_secret_info_query): + Try a little harder to not keep sensitive data in memory. + 2008-03-05 Ray Strode <rstrode@redhat.com> * gui/simple-greeter/gdm-cell-renderer-timer.c diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c index e241fc25..f8bce596 100644 --- a/daemon/gdm-session-worker.c +++ b/daemon/gdm-session-worker.c @@ -164,8 +164,9 @@ script_execute (const gchar *file, /* Count the arguments. */ int argc = 0; - while (argv[argc]) + while (argv[argc]) { ++argc; + } /* Construct an argument list for the shell. */ { @@ -181,10 +182,11 @@ script_execute (const gchar *file, } /* Execute the shell. */ - if (envp) + if (envp) { execve (new_argv[0], new_argv, envp); - else + } else { execv (new_argv[0], new_argv); + } g_free (new_argv); } @@ -194,8 +196,9 @@ static char * my_strchrnul (const char *str, char c) { char *p = (char*) str; - while (*p && (*p != c)) + while (*p && (*p != c)) { ++p; + } return p; } @@ -215,13 +218,15 @@ gdm_session_execute (const char *file, if (!search_path || strchr (file, '/') != NULL) { /* Don't search when it contains a slash. */ - if (envp) + if (envp) { execve (file, argv, envp); - else + } else { execv (file, argv); + } - if (errno == ENOEXEC) + if (errno == ENOEXEC) { script_execute (file, argv, envp, FALSE); + } } else { gboolean got_eacces = 0; const char *path, *p; @@ -756,6 +761,7 @@ gdm_session_worker_process_pam_message (GdmSessionWorker *worker, *response_text = strdup (user_answer); } + memset (user_answer, '\0', strlen (user_answer)); g_free (user_answer); g_debug ("GdmSessionWorker: trying to get updated username"); @@ -807,6 +813,8 @@ gdm_session_worker_pam_new_messages_handler (int number_o messages[i], &response_text); if (!got_response) { + memset (response_text, '\0', strlen (response_text)); + g_free (response_text); goto out; } diff --git a/gui/simple-greeter/gdm-greeter-login-window.c b/gui/simple-greeter/gdm-greeter-login-window.c index 358bfc25..0c3756f3 100644 --- a/gui/simple-greeter/gdm-greeter-login-window.c +++ b/gui/simple-greeter/gdm-greeter-login-window.c @@ -529,6 +529,19 @@ do_cancel (GdmGreeterLoginWindow *login_window) } static void +delete_entry_text (GtkWidget *entry) +{ + const char *typed_text; + char *null_text; + + /* try to scrub out any secret info */ + typed_text = gtk_entry_get_text (GTK_ENTRY (entry)); + null_text = g_strnfill (strlen (typed_text) + 1, '\b'); + gtk_entry_set_text (GTK_ENTRY (entry), null_text); + gtk_entry_set_text (GTK_ENTRY (entry), ""); +} + +static void reset_dialog (GdmGreeterLoginWindow *login_window) { GtkWidget *entry; @@ -537,7 +550,9 @@ reset_dialog (GdmGreeterLoginWindow *login_window) g_debug ("GdmGreeterLoginWindow: Resetting dialog"); entry = glade_xml_get_widget (GDM_GREETER_LOGIN_WINDOW (login_window)->priv->xml, "auth-prompt-entry"); - gtk_entry_set_text (GTK_ENTRY (entry), ""); + + delete_entry_text (entry); + gtk_entry_set_visibility (GTK_ENTRY (entry), TRUE); set_message (login_window, ""); @@ -617,7 +632,7 @@ gdm_greeter_login_window_info_query (GdmGreeterLoginWindow *login_window, g_debug ("GdmGreeterLoginWindow: info query: %s", text); entry = glade_xml_get_widget (GDM_GREETER_LOGIN_WINDOW (login_window)->priv->xml, "auth-prompt-entry"); - gtk_entry_set_text (GTK_ENTRY (entry), ""); + delete_entry_text (entry); gtk_entry_set_visibility (GTK_ENTRY (entry), TRUE); set_log_in_button_mode (login_window, LOGIN_BUTTON_ANSWER_QUERY); @@ -642,7 +657,7 @@ gdm_greeter_login_window_secret_info_query (GdmGreeterLoginWindow *login_window, g_return_val_if_fail (GDM_IS_GREETER_LOGIN_WINDOW (login_window), FALSE); entry = glade_xml_get_widget (GDM_GREETER_LOGIN_WINDOW (login_window)->priv->xml, "auth-prompt-entry"); - gtk_entry_set_text (GTK_ENTRY (entry), ""); + delete_entry_text (entry); gtk_entry_set_visibility (GTK_ENTRY (entry), FALSE); set_log_in_button_mode (login_window, LOGIN_BUTTON_ANSWER_QUERY); |