add _dbus_geteuid to fix EXTERNAL authentication in setuid applications
authorJohn (J5) Palmieri <johnp@redhat.com>
Mon, 14 Jan 2008 20:07:48 +0000 (15:07 -0500)
committerJohn (J5) Palmieri <johnp@redhat.com>
Mon, 14 Jan 2008 20:07:48 +0000 (15:07 -0500)
2008-01-14  John (J5) Palmieri  <johnp@redhat.com>

* Patch by Andrea Luzzardi  <scox at sig11 dot org>: creates a
_dbus_geteuid function to fix EXTERNAL authentication in setuid
applications

*  dbus/dbus-sysdeps-unix.c (_dbus_geteuid): used to get the effective
uid of the running program
(_dbus_credentials_add_from_current_process): use geteuid instead of
getuid
(_dbus_append_user_from_current_process): use geteuid instead of
getuid

* dbus/dbus-sysdeps-util-unix.c (_dbus_change_to_daemon_user): use
geteuid instead of getuid
(_dbus_unix_user_is_at_console): use geteuid instead of getuid

* dbus/dbus-sysdeps-win.c (_dbus_geteuid): add a windows equivilant
that returns DBUS_UID_UNSET

ChangeLog
dbus/dbus-sysdeps-unix.c
dbus/dbus-sysdeps-unix.h
dbus/dbus-sysdeps-util-unix.c
dbus/dbus-sysdeps-win.c

index 35e35a7cfb08fe647594df3dff21b16a03797734..8c30e1027975d4f57fe7ace6371b4f6f7ec3d4f6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,23 @@
+2008-01-14  John (J5) Palmieri  <johnp@redhat.com>
+
+       * Patch by Andrea Luzzardi  <scox at sig11 dot org>: creates a
+       _dbus_geteuid function to fix EXTERNAL authentication in setuid
+       applications
+
+       *  dbus/dbus-sysdeps-unix.c (_dbus_geteuid): used to get the effective
+       uid of the running program
+       (_dbus_credentials_add_from_current_process): use geteuid instead of
+       getuid
+       (_dbus_append_user_from_current_process): use geteuid instead of
+       getuid
+
+       * dbus/dbus-sysdeps-util-unix.c (_dbus_change_to_daemon_user): use
+       geteuid instead of getuid
+       (_dbus_unix_user_is_at_console): use geteuid instead of getuid
+
+       * dbus/dbus-sysdeps-win.c (_dbus_geteuid): add a windows equivilant
+       that returns DBUS_UID_UNSET
+
 2007-12-18  Havoc Pennington  <hp@redhat.com>
 
        * dbus/dbus-connection.c (_dbus_connection_block_pending_call):
index 2ce7427b34dfa67f3673fe8b813903bfe3c26aeb..c4866bbbb215487e0a711b6e812abd2a6fed7179 100644 (file)
@@ -1643,7 +1643,7 @@ _dbus_credentials_add_from_current_process (DBusCredentials *credentials)
 
   if (!_dbus_credentials_add_unix_pid(credentials, _dbus_getpid()))
     return FALSE;
-  if (!_dbus_credentials_add_unix_uid(credentials, _dbus_getuid()))
+  if (!_dbus_credentials_add_unix_uid(credentials, _dbus_geteuid()))
     return FALSE;
 
   return TRUE;
@@ -1664,7 +1664,7 @@ dbus_bool_t
 _dbus_append_user_from_current_process (DBusString *str)
 {
   return _dbus_string_append_uint (str,
-                                   _dbus_getuid ());
+                                   _dbus_geteuid ());
 }
 
 /**
@@ -1686,6 +1686,15 @@ _dbus_getuid (void)
   return getuid ();
 }
 
+/** Gets our effective UID
+ * @returns process effective UID
+ */
+dbus_uid_t
+_dbus_geteuid (void)
+{
+  return geteuid ();
+}
+
 /**
  * The only reason this is separate from _dbus_getpid() is to allow it
  * on Windows for logging but not for other purposes.
index 9123185be32be850c95ad134e2b1d084d462a79e..0005cd87b6bdcb46878497e3b84b7c49c66d4cd7 100644 (file)
@@ -121,6 +121,7 @@ dbus_bool_t _dbus_group_info_fill_gid (DBusGroupInfo    *info,
 void        _dbus_group_info_free     (DBusGroupInfo    *info);
 
 dbus_uid_t    _dbus_getuid (void);
+dbus_uid_t    _dbus_geteuid (void);
 dbus_gid_t    _dbus_getgid (void);
 
 dbus_bool_t _dbus_parse_uid (const DBusString  *uid_str,
index 49965d9a0287bc6a88e918dc7784b86e9bc294e0..9ff3fbc1a62e8de54a8bb3a535e72dd1c677ced6 100644 (file)
@@ -332,7 +332,7 @@ _dbus_change_to_daemon_user  (const char    *user,
     }
   
 #ifdef HAVE_LIBAUDIT
-  we_were_root = _dbus_getuid () == 0;
+  we_were_root = _dbus_geteuid () == 0;
   new_caps = NULL;
   /* have a tmp set of caps that we use to transition to the usr/grp dbus should
    * run as ... doesn't really help. But keeps people happy.
@@ -990,7 +990,7 @@ _dbus_unix_user_is_at_console (dbus_uid_t         uid,
 dbus_bool_t
 _dbus_unix_user_is_process_owner (dbus_uid_t uid)
 {
-  return uid == _dbus_getuid ();
+  return uid == _dbus_geteuid ();
 }
 
 /**
index 3c6c31be976250f77cd6f20aea3a47265e4b0323..a67e502a3ea285d01f0a95cb5ee761017ae2250f 100644 (file)
@@ -834,7 +834,16 @@ out1:
  * @returns process UID
  */
 dbus_uid_t
-_dbus_getuid(void)
+_dbus_getuid (void)
+{
+       return DBUS_UID_UNSET;
+}
+
+/** Gets our effective UID
+ * @returns process effective UID
+ */
+dbus_uid_t
+_dbus_geteuid (void)
 {
        return DBUS_UID_UNSET;
 }