Bug is caused by invalid free. Besides logs are updated.
Change-Id: I9b32322b1045ef639f28624edb547ded263b0806
Signed-off-by: Imran Zaman <imran.zaman@intel.com>
%changelog
+* Wed May 21 2014 Imran Zaman <imran.zaman@intel.com>
+- Fixed Bug # TIVI-2988
+- Updated logs
+
+* Tue May 20 2014 Imran Zaman <imran.zaman@intel.com>
+- 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 <imran.zaman@intel.com>
- Simplified gumd packages
+* Wed May 21 2014 Imran Zaman <imran.zaman@intel.com>
+- Fixed Bug # TIVI-2988
+- Updated logs
+
* Tue May 20 2014 Imran Zaman <imran.zaman@intel.com>
- Fixed bug#TIVI-3170 (fixed smack labels for newly created files and folders
as reported in https://bugs.tizen.org/jira/browse/TIVI-3170)
<p>
</p>
<div class="refsect1">
-<a name="idp7559152"></a><h2>Usage</h2>
+<a name="idp8632144"></a><h2>Usage</h2>
</div>
<p>
Following code snippet demonstrates how to create and use config object:
<p>
</p>
<div class="refsect1">
-<a name="idp1785408"></a><h2>Where the configuration file is searched for</h2>
+<a name="idp10621104"></a><h2>Where the configuration file is searched for</h2>
</div>
<p>
</p>
<p>
</p>
<div class="refsect1">
-<a name="idp6614192"></a><h2>Example configuration file</h2>
+<a name="idp6130512"></a><h2>Example configuration file</h2>
</div>
<p>
</p>
<p>
</p>
<div class="refsect1">
-<a name="idp11399872"></a><h2>Usage</h2>
+<a name="idp9661872"></a><h2>Usage</h2>
</div>
<p>
Following code snippet demonstrates how to derive and use <a class="link" href="GumDisposable.html" title="GumDisposable"><span class="type">GumDisposable</span></a>:
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h2 class="title">
-<a name="idp4276848"></a>Daemon (gumd) configuration</h2></div></div></div>
+<a name="idp2867440"></a>Daemon (gumd) configuration</h2></div></div></div>
<div class="toc"><dl>
<dt>
<span class="refentrytitle"><a href="GumConfig.html">GumConfig</a></span><span class="refpurpose"> — gum configuration information</span>
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h2 class="title">
-<a name="idp4483936"></a>Common</h2></div></div></div>
+<a name="idp4039472"></a>Common</h2></div></div></div>
<div class="toc"><dl>
<dt>
<span class="refentrytitle"><a href="gumd-GumDictionary.html">GumDictionary</a></span><span class="refpurpose"> — a dictionary container holding string keys and variant
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h2 class="title">
-<a name="idp5022160"></a>Client library (libgum) interface</h2></div></div></div>
+<a name="idp3972112"></a>Client library (libgum) interface</h2></div></div></div>
<div class="toc"><dl>
<dt>
<span class="refentrytitle"><a href="GumUser.html">GumUser</a></span><span class="refpurpose"> — provides interface for managing user's account</span>
</table>
<div class="chapter">
<div class="titlepage"><div><div><h2 class="title">
-<a name="idp3801520"></a>Appendices</h2></div></div></div>
+<a name="idp3804032"></a>Appendices</h2></div></div></div>
<a name="idx"></a><a name="idxC"></a><h3 class="title">C</h3>
<dt>
<a class="link" href="GumConfig.html#GumConfig-struct" title="struct GumConfig">GumConfig</a>, struct in <a class="link" href="GumConfig.html" title="GumConfig">GumConfig</a>
</tr></table>
<div class="chapter">
<div class="titlepage"><div><div><h2 class="title">
-<a name="idp2313728"></a>Deprecated APIs</h2></div></div></div>
+<a name="idp2507456"></a>Deprecated APIs</h2></div></div></div>
<a name="idx"></a>
</div>
<div class="footer">
</p>
</div>
<div class="refsect1">
-<a name="idp10497856"></a><h2>Add User</h2>
+<a name="idp10710240"></a><h2>Add User</h2>
<p>
User can be added with flag <strong class="userinput"><code>--add-user</code></strong>:
</p>
</p>
</div>
<div class="refsect1">
-<a name="idp7388144"></a><h2>Delete User</h2>
+<a name="idp10525904"></a><h2>Delete User</h2>
<p>
User can be deleted with flag <strong class="userinput"><code>--delete-user</code></strong>:
</p>
</p>
</div>
<div class="refsect1">
-<a name="idp11509824"></a><h2>Update User</h2>
+<a name="idp9269376"></a><h2>Update User</h2>
<p>
User can be update with flag <strong class="userinput"><code>--update-user</code></strong>:
</p>
</p>
</div>
<div class="refsect1">
-<a name="idp14110128"></a><h2>Get User</h2>
+<a name="idp14484976"></a><h2>Get User</h2>
<p>
User data can be retrieved with flag <strong class="userinput"><code>--get-user</code></strong>:
</p>
</p>
</div>
<div class="refsect1">
-<a name="idp14114688"></a><h2>Get User By Name</h2>
+<a name="idp13118528"></a><h2>Get User By Name</h2>
<p>
User data can be retrieved with flag <strong class="userinput"><code>--get-user-by-name</code></strong>:
</p>
</p>
</div>
<div class="refsect1">
-<a name="idp14047984"></a><h2>Add Group</h2>
+<a name="idp13123040"></a><h2>Add Group</h2>
<p>
Group can be added with flag <strong class="userinput"><code>--add-group</code></strong>:
</p>
</p>
</div>
<div class="refsect1">
-<a name="idp13000656"></a><h2>Delete Group</h2>
+<a name="idp14060912"></a><h2>Delete Group</h2>
<p>
Group can be deleted with flag <strong class="userinput"><code>--delete-group</code></strong>:
</p>
</p>
</div>
<div class="refsect1">
-<a name="idp13005168"></a><h2>Update Group</h2>
+<a name="idp14065424"></a><h2>Update Group</h2>
<p>
Group can be updated with flag <strong class="userinput"><code>--udpate-group</code></strong>:
</p>
</p>
</div>
<div class="refsect1">
-<a name="idp14051792"></a><h2>Get Group</h2>
+<a name="idp14070016"></a><h2>Get Group</h2>
<p>
Group data can be retrieved with flag <strong class="userinput"><code>--get-group</code></strong>:
</p>
</p>
</div>
<div class="refsect1">
-<a name="idp12475616"></a><h2>Get Group By Name</h2>
+<a name="idp14074528"></a><h2>Get Group By Name</h2>
<p>
Group data can be retrieved with flag <strong class="userinput"><code>--get-group-by-name</code></strong>:
</p>
</p>
</div>
<div class="refsect1">
-<a name="idp12480128"></a><h2>Add member To Group</h2>
+<a name="idp12776176"></a><h2>Add member To Group</h2>
<p>
New member can be added to a group with flag <strong class="userinput"><code>--add-member</code></strong>:
</p>
</p>
</div>
<div class="refsect1">
-<a name="idp12484688"></a><h2>Delete member From Group</h2>
+<a name="idp12780736"></a><h2>Delete member From Group</h2>
<p>
A member can be removed from the group with flag <strong class="userinput"><code>--delete-member</code></strong>:
</p>
<div class="refentry">
<a name="um-intro"></a><div class="titlepage"></div>
<div class="refsect1">
-<a name="idp7646560"></a><h2>What is gumd/libgum?</h2>
+<a name="idp10274512"></a><h2>What is gumd/libgum?</h2>
<p>
gumd and libgum together provides a framework for creating, deleting
and modifying user and groups in the system. gumd is a daemon that
+* Wed May 21 2014 Imran Zaman <imran.zaman@intel.com>
+- Fixed Bug # TIVI-2988
+- Updated logs
+
* Tue May 20 2014 Imran Zaman <imran.zaman@intel.com>
- Fixed bug#TIVI-3170 (fixed smack labels for newly created files and folders
as reported in https://bugs.tizen.org/jira/browse/TIVI-3170)
self->priv->delete_later = FALSE;
g_atomic_int_set(&self->priv->keep_obj_counter, 0);
- DBG ("INIT");
+ DBG ("init %p", self);
}
static gboolean
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;
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;
_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,
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);
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;
}
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)
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);
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
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);
}
}
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,
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,
typedef struct
{
gchar *peer_name;
- GumdDbusUserAdapter *dbus_user;
+ GumdDbusUserAdapter *user_adapter;
GumdDbusUserServiceAdapter *user_service;
}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;
}
{
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);
}
{
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,
{
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) {
G_OBJECT_CLASS (gumd_dbus_user_service_adapter_parent_class)->dispose (
object);
+ DBG ("user service adapter (%p) dispose end", object);
}
static void
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);
}
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 (
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);
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) {
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,
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);
}
static GumdDbusUserAdapter *
-_create_and_cache_dbus_user (
+_create_and_cache_user_adapter (
GumdDbusUserServiceAdapter *self,
GumdDaemonUser *user,
GDBusMethodInvocation *invocation)
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));
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;
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
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);
{
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,
{
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,
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);
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);
+++ /dev/null
-#
-# 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