PATCH: get unix user speed up

John (J5) Palmieri johnp at redhat.com
Mon Oct 17 18:37:30 PDT 2005


Looks good, thanks.

On Tue, 2005-10-18 at 00:56 +0100, Michael Krivoruchko wrote:
> Hi,
> 
> the attached patch reduces round trip time for GetConnectionUnixUser by
> avoiding repetitive calls to system specific authentication API behind
> dbus_connection_get_unix_user.
> 
> Misha
> --
> plain text document attachment (dbus-get-unix-user.diff)
> diff -ruN dbus/bus/connection.c dbus-get-unix-user/bus/connection.c
> --- dbus/bus/connection.c	2005-08-03 18:42:56.000000000 +0100
> +++ dbus-get-unix-user/bus/connection.c	2005-10-18 00:27:45.000000000 +0100
> @@ -71,6 +71,7 @@
>    DBusList *match_rules;
>    int n_match_rules;
>    char *name;
> +  dbus_uid_t unix_user;
>    DBusList *transaction_messages; /**< Stuff we need to send as part of a transaction */
>    DBusMessage *oom_message;
>    DBusPreallocatedSend *oom_preallocated;
> @@ -377,7 +378,9 @@
>    d = BUS_CONNECTION_DATA (connection);
>  
>    _dbus_assert (d != NULL);
> -  
> +
> +  d->unix_user = uid;
> +
>    return bus_context_allow_user (d->connections->context, uid);
>  }
>  
> @@ -550,7 +553,9 @@
>  
>    d->connections = connections;
>    d->connection = connection;
> -  
> +
> +  d->unix_user = DBUS_UID_UNSET;
> +
>    _dbus_get_current_time (&d->connection_tv_sec,
>                            &d->connection_tv_usec);
>    
> @@ -1042,6 +1047,27 @@
>  }
>  
>  /**
> + * Retrives unix user id of the connection.
> + *
> + * @param connection the connection
> + * @returns unix user id or #DBUS_UID_UNSET if the connection has not been authenticated.
> + */
> +dbus_uid_t
> +bus_connection_get_unix_user (DBusConnection *connection)
> +{
> +  BusConnectionData *d;
> +
> +  d = BUS_CONNECTION_DATA (connection);
> +
> +  _dbus_assert (d != NULL);
> +
> +  if (d->unix_user == DBUS_UID_UNSET)
> +    dbus_connection_get_unix_user (connection, &(d->unix_user));
> +
> +  return d->unix_user;
> +}
> +
> +/**
>   * Checks whether the connection is registered with the message bus.
>   *
>   * @param connection the connection
> diff -ruN dbus/bus/connection.h dbus-get-unix-user/bus/connection.h
> --- dbus/bus/connection.h	2004-08-10 04:06:59.000000000 +0100
> +++ dbus-get-unix-user/bus/connection.h	2005-10-17 22:57:56.000000000 +0100
> @@ -51,6 +51,7 @@
>  BusActivation*  bus_connection_get_activation     (DBusConnection               *connection);
>  BusMatchmaker*  bus_connection_get_matchmaker     (DBusConnection               *connection);
>  BusSELinuxID*   bus_connection_get_selinux_id     (DBusConnection               *connection);
> +dbus_uid_t      bus_connection_get_unix_user      (DBusConnection               *connection);
>  dbus_bool_t     bus_connections_check_limits      (BusConnections               *connections,
>                                                     DBusConnection               *requesting_completion,
>                                                     DBusError                    *error);
> diff -ruN dbus/bus/driver.c dbus-get-unix-user/bus/driver.c
> --- dbus/bus/driver.c	2005-10-03 20:55:56.000000000 +0100
> +++ dbus-get-unix-user/bus/driver.c	2005-10-17 23:23:23.000000000 +0100
> @@ -907,7 +907,8 @@
>    if (reply == NULL)
>      goto oom;
>  
> -  if (!dbus_connection_get_unix_user (conn, &uid))
> +  uid = bus_connection_get_unix_user (conn);
> +  if (uid == DBUS_UID_UNSET)
>      {
>        dbus_set_error (error,
>                        DBUS_ERROR_FAILED,
> diff -ruN dbus/dbus/dbus-transport.c dbus-get-unix-user/dbus/dbus-transport.c
> --- dbus/dbus/dbus-transport.c	2005-05-05 23:02:11.000000000 +0100
> +++ dbus-get-unix-user/dbus/dbus-transport.c	2005-10-17 22:13:23.000000000 +0100
> @@ -967,7 +967,7 @@
>  {
>    DBusCredentials auth_identity;
>  
> -  *uid = _DBUS_INT32_MAX; /* better than some root or system user in
> +  *uid = DBUS_UID_UNSET;  /* better than some root or system user in
>                             * case of bugs in the caller. Caller should
>                             * never use this value on purpose, however.
>                             */
> _______________________________________________
> dbus mailing list
> dbus at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dbus
-- 
John (J5) Palmieri <johnp at redhat.com>



More information about the dbus mailing list