From 28bc924ad101bca3c7d73d9928665c2f5dad4190 Mon Sep 17 00:00:00 2001 From: Imran Zaman Date: Wed, 21 May 2014 18:33:24 +0300 Subject: [PATCH] Fixed Bug # TIVI-2988 Bug is caused by invalid free. Besides logs are updated. Change-Id: I9b32322b1045ef639f28624edb547ded263b0806 Signed-off-by: Imran Zaman --- dists/rpm/gum-suse.spec | 8 ++ dists/rpm/tizen/packaging/gumd.changes | 4 + docs/html/GumConfig.html | 6 +- docs/html/GumDisposable.html | 2 +- docs/html/ch01.html | 2 +- docs/html/ch02.html | 2 +- docs/html/ch03.html | 2 +- docs/html/ch04.html | 2 +- docs/html/ch05.html | 2 +- docs/html/gumd-examples.html | 24 ++--- docs/html/um-intro.html | 2 +- packaging/gumd.changes | 4 + src/common/gum-disposable.c | 14 ++- src/common/gum-file.c | 2 +- src/daemon/dbus/gumd-dbus-user-adapter.c | 22 +--- src/daemon/dbus/gumd-dbus-user-adapter.h | 5 - src/daemon/dbus/gumd-dbus-user-service-adapter.c | 101 ++++++++++-------- src/daemon/gumd-daemon-user.c | 4 +- test/data/gum-test.conf | 126 ----------------------- 19 files changed, 107 insertions(+), 227 deletions(-) delete mode 100644 test/data/gum-test.conf diff --git a/dists/rpm/gum-suse.spec b/dists/rpm/gum-suse.spec index a85acf8..d997794 100644 --- a/dists/rpm/gum-suse.spec +++ b/dists/rpm/gum-suse.spec @@ -131,6 +131,14 @@ groupadd -f -r gumd %changelog +* Wed May 21 2014 Imran Zaman +- Fixed Bug # TIVI-2988 +- Updated logs + +* Tue May 20 2014 Imran Zaman +- Fixed bug#TIVI-3170 (fixed smack labels for newly created files and folders + as reported in https://bugs.tizen.org/jira/browse/TIVI-3170) + * Wed Feb 12 2014 Imran Zaman - Simplified gumd packages diff --git a/dists/rpm/tizen/packaging/gumd.changes b/dists/rpm/tizen/packaging/gumd.changes index 5185824..e2ad92c 100644 --- a/dists/rpm/tizen/packaging/gumd.changes +++ b/dists/rpm/tizen/packaging/gumd.changes @@ -1,3 +1,7 @@ +* Wed May 21 2014 Imran Zaman +- Fixed Bug # TIVI-2988 +- Updated logs + * Tue May 20 2014 Imran Zaman - Fixed bug#TIVI-3170 (fixed smack labels for newly created files and folders as reported in https://bugs.tizen.org/jira/browse/TIVI-3170) diff --git a/docs/html/GumConfig.html b/docs/html/GumConfig.html index 09d2792..0b1c35f 100644 --- a/docs/html/GumConfig.html +++ b/docs/html/GumConfig.html @@ -87,7 +87,7 @@ for where the file is searched for.

-

Usage

+

Usage

Following code snippet demonstrates how to create and use config object: @@ -105,7 +105,7 @@ g_object_unref(config);

-

Where the configuration file is searched for

+

Where the configuration file is searched for

@@ -127,7 +127,7 @@ $(sysconfdir) + "gum.conf"

-

Example configuration file

+

Example configuration file

diff --git a/docs/html/GumDisposable.html b/docs/html/GumDisposable.html index 1beaa92..03a47b7 100644 --- a/docs/html/GumDisposable.html +++ b/docs/html/GumDisposable.html @@ -90,7 +90,7 @@ be required to destory after some period of inactivity.

-

Usage

+

Usage

Following code snippet demonstrates how to derive and use GumDisposable: diff --git a/docs/html/ch01.html b/docs/html/ch01.html index aefd811..60953d4 100644 --- a/docs/html/ch01.html +++ b/docs/html/ch01.html @@ -21,7 +21,7 @@

-Daemon (gumd) configuration

+Daemon (gumd) configuration
GumConfig — gum configuration information diff --git a/docs/html/ch02.html b/docs/html/ch02.html index dd746a1..838b83b 100644 --- a/docs/html/ch02.html +++ b/docs/html/ch02.html @@ -21,7 +21,7 @@

-Common

+Common
GumDictionary — a dictionary container holding string keys and variant diff --git a/docs/html/ch03.html b/docs/html/ch03.html index a0983fd..488900e 100644 --- a/docs/html/ch03.html +++ b/docs/html/ch03.html @@ -21,7 +21,7 @@

-Client library (libgum) interface

+Client library (libgum) interface
GumUser — provides interface for managing user's account diff --git a/docs/html/ch04.html b/docs/html/ch04.html index 70f625f..44990a4 100644 --- a/docs/html/ch04.html +++ b/docs/html/ch04.html @@ -54,7 +54,7 @@

-Appendices

+Appendices

C

GumConfig, struct in GumConfig diff --git a/docs/html/ch05.html b/docs/html/ch05.html index e39dd8f..be4372d 100644 --- a/docs/html/ch05.html +++ b/docs/html/ch05.html @@ -21,7 +21,7 @@

-Deprecated APIs

+Deprecated APIs
-

Add User

+

Add User

User can be added with flag --add-user:

@@ -74,7 +74,7 @@

-

Delete User

+

Delete User

User can be deleted with flag --delete-user:

@@ -89,7 +89,7 @@

-

Update User

+

Update User

User can be update with flag --update-user:

@@ -113,7 +113,7 @@

-

Get User

+

Get User

User data can be retrieved with flag --get-user:

@@ -128,7 +128,7 @@

-

Get User By Name

+

Get User By Name

User data can be retrieved with flag --get-user-by-name:

@@ -143,7 +143,7 @@

-

Add Group

+

Add Group

Group can be added with flag --add-group:

@@ -162,7 +162,7 @@

-

Delete Group

+

Delete Group

Group can be deleted with flag --delete-group:

@@ -177,7 +177,7 @@

-

Update Group

+

Update Group

Group can be updated with flag --udpate-group:

@@ -194,7 +194,7 @@

-

Get Group

+

Get Group

Group data can be retrieved with flag --get-group:

@@ -209,7 +209,7 @@

-

Get Group By Name

+

Get Group By Name

Group data can be retrieved with flag --get-group-by-name:

@@ -224,7 +224,7 @@

-

Add member To Group

+

Add member To Group

New member can be added to a group with flag --add-member:

@@ -240,7 +240,7 @@

-

Delete member From Group

+

Delete member From Group

A member can be removed from the group with flag --delete-member:

diff --git a/docs/html/um-intro.html b/docs/html/um-intro.html index aeb02d9..ae99b5e 100644 --- a/docs/html/um-intro.html +++ b/docs/html/um-intro.html @@ -22,7 +22,7 @@
-

What is gumd/libgum?

+

What is gumd/libgum?

gumd and libgum together provides a framework for creating, deleting and modifying user and groups in the system. gumd is a daemon that diff --git a/packaging/gumd.changes b/packaging/gumd.changes index 5185824..e2ad92c 100644 --- a/packaging/gumd.changes +++ b/packaging/gumd.changes @@ -1,3 +1,7 @@ +* Wed May 21 2014 Imran Zaman +- Fixed Bug # TIVI-2988 +- Updated logs + * Tue May 20 2014 Imran Zaman - Fixed bug#TIVI-3170 (fixed smack labels for newly created files and folders as reported in https://bugs.tizen.org/jira/browse/TIVI-3170) diff --git a/src/common/gum-disposable.c b/src/common/gum-disposable.c index 01ef7b8..c6c3001 100644 --- a/src/common/gum-disposable.c +++ b/src/common/gum-disposable.c @@ -281,7 +281,7 @@ gum_disposable_init ( self->priv->delete_later = FALSE; g_atomic_int_set(&self->priv->keep_obj_counter, 0); - DBG ("INIT"); + DBG ("init %p", self); } static gboolean @@ -293,7 +293,7 @@ _auto_dispose ( GumDisposable *self = GUM_DISPOSABLE (user_data); g_signal_emit (self, signals[SIG_DISPOSING], 0); /* destroy object */ - DBG ("%s AUTO DISPOSE %d", G_OBJECT_TYPE_NAME (self), + DBG ("%s (%p) auto dispose %d", G_OBJECT_TYPE_NAME (self), self, G_OBJECT (self)->ref_count); g_object_unref (G_OBJECT (self)); return FALSE; @@ -306,7 +306,7 @@ _timer_dispose ( g_return_val_if_fail (user_data && GUM_IS_DISPOSABLE (user_data), FALSE); GumDisposable *self = GUM_DISPOSABLE (user_data); - DBG ("%s TIMER DISPOSE", G_OBJECT_TYPE_NAME (self)); + DBG ("%s (%p) timer dispose", G_OBJECT_TYPE_NAME (self), self); /* clear out timer since we are already inside timer cb */ self->priv->timer_id = 0; @@ -317,6 +317,8 @@ static void _update_timer ( GumDisposable *self) { + if (self->priv->delete_later) return; + DBG("%s (%p): keep_obj_counter : %d, timeout : %d delete_later %d", G_OBJECT_TYPE_NAME(self), self, @@ -324,11 +326,8 @@ _update_timer ( self->priv->timeout, self->priv->delete_later); - if (self->priv->delete_later) return; - if (g_atomic_int_get(&self->priv->keep_obj_counter) == 0) { if (self->priv->timeout) { - DBG("Setting object timeout to %d", self->priv->timeout); self->priv->timer_id = g_timeout_add_seconds (self->priv->timeout, _timer_dispose, self); @@ -397,8 +396,7 @@ gum_disposable_delete_later ( if (self->priv->timer_id) g_source_remove (self->priv->timer_id); - INFO ("Object '%s' (%p) about to dispose...", - G_OBJECT_TYPE_NAME (self), self); + DBG ("object (%p) '%s' about to dispose", self, G_OBJECT_TYPE_NAME (self)); self->priv->timer_id = g_idle_add (_auto_dispose, self); self->priv->delete_later = TRUE; } diff --git a/src/common/gum-file.c b/src/common/gum-file.c index 8fe4df8..e47a142 100644 --- a/src/common/gum-file.c +++ b/src/common/gum-file.c @@ -120,9 +120,9 @@ _set_smack64_attr ( config = gum_config_new (); const gchar *smack_label = gum_config_get_string (config, key); if (smack_label) { + len = strlen (smack_label); DBG ("Set smack label %s for path %s with len %d",smack_label, path, (int)len); - len = strlen (smack_label); } /* * Set smack64 extended attribute (when provided in the config file) diff --git a/src/daemon/dbus/gumd-dbus-user-adapter.c b/src/daemon/dbus/gumd-dbus-user-adapter.c index 7ba9f5d..45f6b79 100644 --- a/src/daemon/dbus/gumd-dbus-user-adapter.c +++ b/src/daemon/dbus/gumd-dbus-user-adapter.c @@ -114,6 +114,7 @@ _dispose ( GObject *object) { GumdDbusUserAdapter *self = GUMD_DBUS_USER_ADAPTER (object); + DBG ("user adapter (%p) dispose beg", object); GUM_OBJECT_UNREF (self->priv->daemon); GUM_OBJECT_UNREF (self->priv->user); @@ -132,6 +133,7 @@ _dispose ( GUM_OBJECT_UNREF (self->priv->connection); G_OBJECT_CLASS (gumd_dbus_user_adapter_parent_class)->dispose (object); + DBG ("user adapter (%p) dispose", object); } static void @@ -139,7 +141,7 @@ _finalize ( GObject *object) { //GumdDbusUserAdapter *self = GUMD_DBUS_USER_ADAPTER (object); - + DBG ("user adapter (%p) finalize", object); G_OBJECT_CLASS (gumd_dbus_user_adapter_parent_class)->finalize (object); } @@ -354,24 +356,6 @@ gumd_dbus_user_adapter_init ( } GumdDbusUserAdapter * -gumd_dbus_user_adapter_new ( - GumdDaemonUser *user, - guint timeout) -{ - GError *error = NULL; - GDBusConnection *connection = g_bus_get_sync (GUM_BUS_TYPE, NULL, - &error); - if (error) { - WARN("failed to connect to session bus : %s", error->message); - g_error_free (error); - return NULL; - } - - return gumd_dbus_user_adapter_new_with_connection (connection, user, - timeout); -} - -GumdDbusUserAdapter * gumd_dbus_user_adapter_new_with_connection ( GDBusConnection *bus_connection, GumdDaemonUser *user, diff --git a/src/daemon/dbus/gumd-dbus-user-adapter.h b/src/daemon/dbus/gumd-dbus-user-adapter.h index 55ca2c7..6088969 100644 --- a/src/daemon/dbus/gumd-dbus-user-adapter.h +++ b/src/daemon/dbus/gumd-dbus-user-adapter.h @@ -67,11 +67,6 @@ gumd_dbus_user_adapter_get_type ( void) G_GNUC_CONST; GumdDbusUserAdapter * -gumd_dbus_user_adapter_new ( - GumdDaemonUser *user, - guint timeout); - -GumdDbusUserAdapter * gumd_dbus_user_adapter_new_with_connection ( GDBusConnection *connection, GumdDaemonUser *user, diff --git a/src/daemon/dbus/gumd-dbus-user-service-adapter.c b/src/daemon/dbus/gumd-dbus-user-service-adapter.c index c5fb263..8e8683a 100644 --- a/src/daemon/dbus/gumd-dbus-user-service-adapter.c +++ b/src/daemon/dbus/gumd-dbus-user-service-adapter.c @@ -49,7 +49,7 @@ static GParamSpec *properties[N_PROPERTIES]; typedef struct { gchar *peer_name; - GumdDbusUserAdapter *dbus_user; + GumdDbusUserAdapter *user_adapter; GumdDbusUserServiceAdapter *user_service; }PeerUserService; @@ -189,11 +189,11 @@ static PeerUserService * _dbus_peer_user_new ( GumdDbusUserServiceAdapter *self, gchar *peer_name, - GumdDbusUserAdapter *dbus_user) + GumdDbusUserAdapter *user_adapter) { PeerUserService *peer_user = g_malloc0 (sizeof (PeerUserService)); peer_user->peer_name = peer_name; - peer_user->dbus_user = dbus_user; + peer_user->user_adapter = user_adapter; peer_user->user_service = self; return peer_user; } @@ -205,7 +205,7 @@ _dbus_peer_user_free ( { if (peer_user) { GUM_STR_FREE (peer_user->peer_name); - GUM_OBJECT_UNREF (peer_user->dbus_user); + GUM_OBJECT_UNREF (peer_user->user_adapter); peer_user->user_service = NULL; g_free (peer_user); } @@ -218,8 +218,8 @@ _dbus_peer_user_remove ( { GumdDbusUserServiceAdapter *self = GUMD_DBUS_USER_SERVICE_ADAPTER ( user_data); - if (peer_user && GUMD_IS_DBUS_USER_ADAPTER(peer_user->dbus_user)) { - g_object_weak_unref (G_OBJECT (peer_user->dbus_user), + if (peer_user && GUMD_IS_DBUS_USER_ADAPTER(peer_user->user_adapter)) { + g_object_weak_unref (G_OBJECT (peer_user->user_adapter), _on_dbus_user_adapter_disposed, user_data); _dbus_peer_user_free (peer_user, NULL); self->priv->peer_users = g_list_remove (self->priv->peer_users, @@ -233,7 +233,7 @@ _dispose ( { GumdDbusUserServiceAdapter *self = GUMD_DBUS_USER_SERVICE_ADAPTER (object); - DBG("- unregistering dbus user service. %d", + DBG("- unregistering dbus user service adapter (%p). %d", object, G_OBJECT (self->priv->daemon)->ref_count); if (self->priv->peer_users) { @@ -261,6 +261,7 @@ _dispose ( G_OBJECT_CLASS (gumd_dbus_user_service_adapter_parent_class)->dispose ( object); + DBG ("user service adapter (%p) dispose end", object); } static void @@ -268,12 +269,14 @@ _finalize ( GObject *object) { GumdDbusUserServiceAdapter *self = GUMD_DBUS_USER_SERVICE_ADAPTER (object); + DBG ("user service adapter (%p) finalise beg", object); if (self->priv->peer_users) { g_list_free (self->priv->peer_users); self->priv->peer_users = NULL; } + DBG ("user service adapter (%p) finalize end", object); G_OBJECT_CLASS (gumd_dbus_user_service_adapter_parent_class)->finalize ( object); } @@ -337,12 +340,12 @@ _clear_cache_for_peer_name ( PeerUserService *user_data) { g_return_if_fail (peer_user && user_data); - g_return_if_fail (GUMD_IS_DBUS_USER_ADAPTER (peer_user->dbus_user)); + g_return_if_fail (GUMD_IS_DBUS_USER_ADAPTER (peer_user->user_adapter)); if (g_strcmp0 (peer_user->peer_name, user_data->peer_name) == 0) { DBG ("removing dbus user '%p' for peer name %s from cache", - peer_user->dbus_user, peer_user->peer_name); - g_object_weak_unref (G_OBJECT (peer_user->dbus_user), + peer_user->user_adapter, peer_user->peer_name); + g_object_weak_unref (G_OBJECT (peer_user->user_adapter), _on_dbus_user_adapter_disposed, peer_user->user_service); _dbus_peer_user_free (peer_user, NULL); user_data->user_service->priv->peer_users = g_list_remove ( @@ -367,7 +370,7 @@ _on_bus_name_lost ( DBG ("(-)peer disappeared : %s", peer_name); peer_user.peer_name = (gchar *)peer_name; - peer_user.dbus_user = NULL; + peer_user.user_adapter = NULL; peer_user.user_service = self; g_list_foreach (self->priv->peer_users, (GFunc)_clear_cache_for_peer_name, (gpointer)&peer_user); @@ -378,7 +381,7 @@ _on_bus_name_lost ( static void _add_bus_name_watcher ( GumdDbusUserServiceAdapter *self, - GumdDbusUserAdapter *dbus_user, + GumdDbusUserAdapter *user_adapter, GDBusMethodInvocation *invocation) { if (self->priv->dbus_server_type == GUMD_DBUS_SERVER_BUSTYPE_MSG_BUS) { @@ -402,11 +405,12 @@ _clear_cache_for_user ( PeerUserService *user_data) { g_return_if_fail (peer_user && user_data); - g_return_if_fail (GUMD_IS_DBUS_USER_ADAPTER (peer_user->dbus_user)); + g_return_if_fail (GUMD_IS_DBUS_USER_ADAPTER (peer_user->user_adapter)); - if (peer_user->dbus_user == user_data->dbus_user) { - DBG ("removing dbus user '%p' from cache", peer_user->dbus_user); - peer_user->dbus_user = NULL; + if (peer_user->user_adapter == user_data->user_adapter) { + DBG ("removing dbus user adapter '%p' from cache", + peer_user->user_adapter); + peer_user->user_adapter = NULL; _dbus_peer_user_free (peer_user, NULL); user_data->user_service->priv->peer_users = g_list_remove ( user_data->user_service->priv->peer_users, @@ -425,7 +429,7 @@ _on_dbus_user_adapter_disposed ( DBG ("Dbus user adapter object %p disposed", object); - peer_user.dbus_user = GUMD_DBUS_USER_ADAPTER (object); + peer_user.user_adapter = GUMD_DBUS_USER_ADAPTER (object); peer_user.user_service = self; g_list_foreach (self->priv->peer_users, (GFunc)_clear_cache_for_user, (gpointer)&peer_user); @@ -454,7 +458,7 @@ _get_sender ( } static GumdDbusUserAdapter * -_create_and_cache_dbus_user ( +_create_and_cache_user_adapter ( GumdDbusUserServiceAdapter *self, GumdDaemonUser *user, GDBusMethodInvocation *invocation) @@ -462,7 +466,7 @@ _create_and_cache_dbus_user ( GDBusConnection *connection = g_dbus_method_invocation_get_connection ( invocation); - GumdDbusUserAdapter *dbus_user = + GumdDbusUserAdapter *user_adapter = gumd_dbus_user_adapter_new_with_connection ( g_object_ref (connection), user, gumd_daemon_get_user_timeout (self->priv->daemon)); @@ -473,23 +477,24 @@ _create_and_cache_dbus_user ( self->priv->peer_users = g_list_append (self->priv->peer_users, _dbus_peer_user_new (self, _get_sender (self, invocation), - dbus_user)); - g_object_weak_ref (G_OBJECT (dbus_user), _on_dbus_user_adapter_disposed, + user_adapter)); + g_object_weak_ref (G_OBJECT (user_adapter), _on_dbus_user_adapter_disposed, self); /* watchers used for msg-bus only */ - _add_bus_name_watcher (self, dbus_user, invocation); + _add_bus_name_watcher (self, user_adapter, invocation); - return dbus_user; + DBG ("created user adapter %p for user %p", user_adapter, user); + return user_adapter; } static GumdDbusUserAdapter * -_get_dbus_user_from_cache ( +_get_user_adapter_from_cache ( GumdDbusUserServiceAdapter *self, GDBusMethodInvocation *invocation, uid_t uid) { - GumdDbusUserAdapter *dbus_user = NULL; + GumdDbusUserAdapter *user_adapter = NULL; PeerUserService *peer_user = NULL; GList *list = self->priv->peer_users; gchar *peer_name = NULL; @@ -504,19 +509,20 @@ _get_dbus_user_from_cache ( for ( ; list != NULL; list = g_list_next (list)) { peer_user = (PeerUserService *) list->data; if (g_strcmp0 (peer_name, peer_user->peer_name) == 0 && - gumd_dbus_user_adapter_get_uid (peer_user->dbus_user) == uid) { + gumd_dbus_user_adapter_get_uid (peer_user->user_adapter) == uid) { - g_object_get (G_OBJECT (peer_user->dbus_user), "delete-later", + g_object_get (G_OBJECT (peer_user->user_adapter), "delete-later", &delete_later, NULL); if (!delete_later) { - dbus_user = peer_user->dbus_user; + user_adapter = peer_user->user_adapter; break; } } } g_free (peer_name); - return dbus_user; + DBG ("user adapter %p", user_adapter); + return user_adapter; } static gboolean @@ -530,16 +536,17 @@ _handle_create_new_user ( g_return_val_if_fail (self && GUMD_IS_DBUS_USER_SERVICE_ADAPTER(self), FALSE); + DBG (""); gum_disposable_set_auto_dispose (GUM_DISPOSABLE (self), FALSE); user = gumd_daemon_user_new (gumd_daemon_get_config (self->priv->daemon)); if (user) { - GumdDbusUserAdapter *dbus_user = _create_and_cache_dbus_user (self, - user, invocation); + GumdDbusUserAdapter *user_adapter = _create_and_cache_user_adapter ( + self, user, invocation); gum_dbus_user_service_complete_create_new_user ( self->priv->dbus_user_service, invocation, - gumd_dbus_user_adapter_get_object_path (dbus_user)); + gumd_dbus_user_adapter_get_object_path (user_adapter)); } else { g_dbus_method_invocation_return_gerror (invocation, error); g_error_free (error); @@ -558,21 +565,24 @@ _handle_get_user ( { GumdDaemonUser *user = NULL; GError *error = NULL; - GumdDbusUserAdapter *dbus_user = NULL; + GumdDbusUserAdapter *user_adapter = NULL; + DBG ("uid %d", uid); gum_disposable_set_auto_dispose (GUM_DISPOSABLE (self), FALSE); - dbus_user = _get_dbus_user_from_cache (self, invocation, uid); - if (!dbus_user) { + user_adapter = _get_user_adapter_from_cache (self, invocation, uid); + if (!user_adapter) { user = gumd_daemon_get_user (self->priv->daemon, (uid_t)uid, &error); if (user) { - dbus_user = _create_and_cache_dbus_user (self, user, invocation); + user_adapter = _create_and_cache_user_adapter (self, user, + invocation); } } - if (dbus_user) { + if (user_adapter) { gum_dbus_user_service_complete_get_user (self->priv->dbus_user_service, - invocation, gumd_dbus_user_adapter_get_object_path (dbus_user)); + invocation, gumd_dbus_user_adapter_get_object_path ( + user_adapter)); } else { if (!error) { error = GUM_GET_ERROR_FOR_ID (GUM_ERROR_USER_NOT_FOUND, @@ -596,26 +606,29 @@ _handle_get_user_by_name ( { GumdDaemonUser *user = NULL; GError *error = NULL; - GumdDbusUserAdapter *dbus_user = NULL; + GumdDbusUserAdapter *user_adapter = NULL; uid_t uid = GUM_USER_INVALID_UID; + DBG ("username %s", username); + gum_disposable_set_auto_dispose (GUM_DISPOSABLE (self), FALSE); uid = gumd_daemon_user_get_uid_by_name (username, gumd_daemon_get_config ( self->priv->daemon)); - dbus_user = _get_dbus_user_from_cache (self, invocation, uid); - if (!dbus_user) { + user_adapter = _get_user_adapter_from_cache (self, invocation, uid); + if (!user_adapter) { user = gumd_daemon_get_user (self->priv->daemon, (uid_t)uid, &error); if (user) { - dbus_user = _create_and_cache_dbus_user (self, user, invocation); + user_adapter = _create_and_cache_user_adapter (self, user, + invocation); } } - if (dbus_user) { + if (user_adapter) { gum_dbus_user_service_complete_get_user_by_name ( self->priv->dbus_user_service, invocation, - gumd_dbus_user_adapter_get_object_path (dbus_user)); + gumd_dbus_user_adapter_get_object_path (user_adapter)); } else { if (!error) { error = GUM_GET_ERROR_FOR_ID (GUM_ERROR_USER_NOT_FOUND, diff --git a/src/daemon/gumd-daemon-user.c b/src/daemon/gumd-daemon-user.c index a3213c7..f4e4bb6 100644 --- a/src/daemon/gumd-daemon-user.c +++ b/src/daemon/gumd-daemon-user.c @@ -968,7 +968,7 @@ _lock_shadow_entry ( gboolean lock = *((gboolean *)user_data); struct spwd *spent = g_malloc0 (sizeof (struct spwd)); _copy_shadow_struct (entry, spent, FALSE); - g_free (spent->sp_pwdp); + GUM_STR_FREE (spent->sp_pwdp); if (lock && entry->sp_pwdp[0] != '!') { /* entry is unlocked, lock it */ spent->sp_pwdp = g_strdup_printf ("!%s",entry->sp_pwdp); @@ -1357,7 +1357,7 @@ _terminate_user ( proxy = g_dbus_proxy_new_sync (connection, G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, NULL, - "org.freedesktop.login1", //destintation + "org.freedesktop.login1", //destination "/org/freedesktop/login1", //path "org.freedesktop.login1.Manager", //interface NULL, &error); diff --git a/test/data/gum-test.conf b/test/data/gum-test.conf deleted file mode 100644 index 325554c..0000000 --- a/test/data/gum-test.conf +++ /dev/null @@ -1,126 +0,0 @@ -# -# gumd Configuration file. -# - -# -# This group contains top-level settings. -# -[General] - -# Comma separate listed of groups, which every user (other than system user) -# will be added to at the time of user account creation. Default value is: -# '' -DEFAULT_USR_GROUPS= - -# Comma separate listed of groups, which admin user will be added to at the -# time of user account creation. Default value is: '' -#DEFAULT_ADMIN_GROUPS= - -# Path to passwd file which represents user information. Default is -# /etc/passwd. More information about the file format can be read at the -# manpages for 'passwd'. -# Can be overriden in debug builds by setting UM_PASSWD_FILE -# environment variable. -#PASSWD_FILE=/etc/passwd - -# Path to shadow file which represents user shadowed password information. -# Default is /etc/shadow. More information about the file format can be read -# at the manpages for 'shadow'. -# Can be overriden in debug builds by setting UM_SHADOW_FILE -# environment variable. -#SHADOW_FILE=/etc/shadow - -# Path to group file which represents group information. Default is /etc/group. -# More information about the file format can be read at the manpages for -# 'group'. -# Can be overriden in debug builds by setting UM_GROUP_FILE -# environment variable. -#GROUP_FILE=/etc/group - -# Path to group file which represents shadowed group information. -# Default is /etc/gshadow. More information about the file format can be read -# at the manpages for 'gshadow'. -# Can be overriden in debug builds by setting UM_GSHADOW_FILE -# environment variable. -#GSHADOW_FILE=/etc/gshadow - -# Prefix to be used when creating home directory for the user. For example, -# with prefix '/home', user 'newu' home directory will be created as -# '/home/newu'. Default value is '/home' -# Can be overriden in debug builds by setting UM_HOMEDIR_PREFIX -# environment variable. -#HOME_DIR=/home - -# Path to user shell executable. Default value is '/bin/bash' -#SHELL=/bin/bash - -# Path to skeleton folder. When new users are created, contents of the skel -# folder is copied to user home directory. Default value is '/etc/skel' -# Can be overriden in debug builds by setting UM_SKEL_DIR -# environment variable. -#SKEL_DIR=/etc/skel - -# Minimum value for the automatic uid selection. Default value is: 2000 -#UID_MIN=2000 - -# Maximum value for the automatic uid selection. Default value is: 60000 -#UID_MAX=60000 - -# Minimum value for the automatic uid selection for system user. Default -# value is: 200 -#SYS_UID_MIN=200 - -# Maximum value for the automatic uid selection for system user. Default value -# is: 999 -#SYS_UID_MAX=999 - -# Minimum value for the automatic gid selection. Default value is: 2000 -#GID_MIN=2000 - -# Maximum value for the automatic gid selection. Default value is: 60000 -#GID_MAX=60000 - -# Minimum value for the automatic gid selection for system user. Default value -# is: 200 -#SYS_GID_MIN=200 - -# Maximum value for the automatic gid selection for system user. Default value -# is: 999 -#SYS_GID_MAX=999 - -# Minimum number of days a password may be used. Default value is: 0 -#PASS_MIN_DAYS=0 - -# Maximum number of days allowed between password changes. Default value is: -# 99999 -#PASS_MAX_DAYS=99999 - -# Number of days warning given before a password expires. Default value is: -# 7 -#PASS_WARN_AGE=7 - -# Value used to set the mode of home directories created for new users. -# Default value is: 022 -#UMASK=022 - -# Value used to set the encryption algorithm. Default -# value is: 'SHA512' (other supported options are: 'MD5', 'SHA256', 'DES') -#ENCRYPT_METHOD=SHA512 - -# -# D-Bus related settings. -# -[ObjectTimeouts] - -# Timeout in seconds for the daemon. Daemon will exit after specified idle time. -# If not set (or set to 0), the daemon will not exit. Has no effect if P2P DBus -# is in use. -DAEMON_TIMEOUT=7 - -# Timeout in seconds for user dbus objects. If not set (or set to 0), the dbus -# objects will persist -#USER_TIMEOUT=5 - -# Timeout in seconds for group dbus objects. If not set (or set to 0), the dbus -# objects will persist -#GROUP_TIMEOUT=5 -- 2.7.4