diff options
author | Matthias Clasen <mclasen@redhat.com> | 2010-03-30 08:42:24 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2010-03-30 08:42:24 -0400 |
commit | a1d944672acb3c350abacf461f13f020aff87057 (patch) | |
tree | 0c56a1f3745ea88fbecefc996e6a44005df6cebe | |
parent | b303bb698393bd592809b32c9aa4e6d77e2adcf7 (diff) |
Don't pass untrusted data in a printf format string
-rw-r--r-- | src/util.c | 21 |
1 files changed, 14 insertions, 7 deletions
@@ -122,7 +122,11 @@ sys_log (DBusGMethodInvocation *context, ...) { va_list args; - gchar *real_format; + gchar *msg; + + va_start (args, format); + msg = g_strdup_vprintf (format, args); + va_end (args); if (context) { PolkitSubject *subject; @@ -130,27 +134,30 @@ sys_log (DBusGMethodInvocation *context, gchar *id; gint pid = 0; gint uid = 0; + gchar *tmp; subject = polkit_system_bus_name_new (dbus_g_method_get_sender (context)); id = polkit_subject_to_string (subject); cmdline = _polkit_subject_get_cmdline (subject, &pid, &uid); + if (cmdline == NULL) { - real_format = g_strdup_printf ("request by %s: %s", id, format); + tmp = g_strdup_printf ("request by %s: %s", id, msg); } else { - real_format = g_strdup_printf ("request by %s [%s pid:%d uid:%d]: %s", id, cmdline, pid, uid, format); + tmp = g_strdup_printf ("request by %s [%s pid:%d uid:%d]: %s", id, cmdline, pid, uid, msg); } + g_free (msg); + msg = tmp; + g_free (id); g_free (cmdline); g_object_unref (subject); } - va_start (args, format); - vsyslog (LOG_NOTICE, real_format, args); - va_end (args); + syslog (LOG_NOTICE, "%s", msg); - g_free (real_format); + g_free (msg); } static void |