summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Jon McCann <jmccann@redhat.com>2008-03-05 19:46:55 +0000
committerWilliam Jon McCann <mccann@src.gnome.org>2008-03-05 19:46:55 +0000
commit029de70f067240226a64d14cf9c1586950061d59 (patch)
tree77fc91ddfdc324acc9dd1c59727885c05ff93e02
parent318b7777a0a513dc206c22065e2354c5aaa472c6 (diff)
downloadgdm-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--ChangeLog11
-rw-r--r--daemon/gdm-session-worker.c22
-rw-r--r--gui/simple-greeter/gdm-greeter-login-window.c21
3 files changed, 44 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index b0ba6304..3dc1d9a3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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);