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