*/
#define GUM_PERM 0777
+#define MAX_STRERROR_LEN 256
static gboolean
_set_smack64_attr (
FILE *fp = NULL;
if (!fn || !(fp = fopen (fn, mode))) {
if (!fp)
- WARN ("Could not open file '%s', error: %s", fn, strerror(errno));
+ {
+ char buf[MAX_STRERROR_LEN];;
+ WARN ("Could not open file '%s', error: %s", fn, strerror_r(errno, buf, MAX_STRERROR_LEN));
+ }
return NULL;
}
return fp;
if (peer_group && GUMD_IS_DBUS_GROUP_ADAPTER(peer_group->dbus_group)) {
g_object_weak_unref (G_OBJECT (peer_group->dbus_group),
_on_dbus_group_adapter_disposed, group_data);
- _dbus_peer_group_free (peer_group, NULL);
self->priv->peer_groups = g_list_remove (self->priv->peer_groups,
(gpointer)peer_group);
+ _dbus_peer_group_free (peer_group, NULL);
}
}
DBG ("removing dbus group '%p' from cache", peer_group->dbus_group);
g_object_weak_unref (G_OBJECT (peer_group->dbus_group),
_on_dbus_group_adapter_disposed, peer_group->group_service);
- _dbus_peer_group_free (peer_group, NULL);
group_data->group_service->priv->peer_groups = g_list_remove (
group_data->group_service->priv->peer_groups,
(gpointer)peer_group);
+ _dbus_peer_group_free (peer_group, NULL);
}
}
if (peer_group->dbus_group == group_data->dbus_group) {
DBG ("removing dbus group '%p' from cache", peer_group->dbus_group);
peer_group->dbus_group = NULL;
- _dbus_peer_group_free (peer_group, NULL);
group_data->group_service->priv->peer_groups = g_list_remove (
group_data->group_service->priv->peer_groups,
(gpointer)peer_group);
+ _dbus_peer_group_free (peer_group, NULL);
}
}
#define GUMD_DBUS_SERVER_P2P_GET_PRIV(obj) G_TYPE_INSTANCE_GET_PRIVATE ((obj),\
GUMD_TYPE_DBUS_SERVER_P2P, GumdDbusServerP2PPrivate)
+#define MAX_STRERROR_LEN 256
+
static void
_set_property (
GObject *object,
path = g_strstr_len(server->priv->address, -1, "unix:path=") + 10;
if (path) {
if (g_chmod (path, S_IRUSR | S_IWUSR) < 0) {
+ gchar buf[MAX_STRERROR_LEN];
WARN("Setting server socket permission failed with error '%s'",
- strerror(errno));
+ strerror_r(errno, buf, MAX_STRERROR_LEN));
}
}
}
gchar *base_path = g_path_get_dirname (file_path);
if (g_mkdir_with_parents (base_path, S_IRUSR | S_IWUSR | S_IXUSR)
== -1) {
+ gchar buf[MAX_STRERROR_LEN];
WARN ("Could not create '%s', error: %s", base_path,
- strerror(errno));
+ strerror_r(errno, buf, MAX_STRERROR_LEN));
}
g_free (base_path);
}
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,
(gpointer)peer_user);
+ _dbus_peer_user_free (peer_user, NULL);
}
}
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 (
user_data->user_service->priv->peer_users,
(gpointer)peer_user);
+ _dbus_peer_user_free (peer_user, NULL);
}
}
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,
(gpointer)peer_user);
+ _dbus_peer_user_free (peer_user, NULL);
}
}
gid_t daemon_gid;
struct group *daemon_group = NULL;
+ struct group buf_group;
+ gchar *buf = NULL;
+ gchar *tmp = NULL;
+ gsize buflen = sysconf(_SC_GETGR_R_SIZE_MAX);
+ if (buflen<sizeof(struct group))
+ buflen = 1024;
#if !GLIB_CHECK_VERSION (2, 36, 0)
g_type_init ();
DBG ("Before set: r-gid %d e-gid %d", getgid (), getegid ());
daemon_gid = getgid ();
- daemon_group = getgrnam ("gumd");
+
+ for (; NULL != (tmp = g_realloc(buf, buflen)); buflen*=2)
+ {
+ buf = tmp;
+ if (ERANGE == getgrnam_r("gumd", &buf_group, buf, buflen, &daemon_group))
+ continue;
+ else
+ break;
+ }
if (daemon_group)
daemon_gid = daemon_group->gr_gid;
+
+ if (buf)
+ g_free(buf);
+
if (setegid (daemon_gid))
WARN ("setegid() failed");
DBG ("After set: r-gid %d e-gid %d", getgid (), getegid ());
_service_dbus_proxy_callback (
gpointer user_data)
{
- g_return_if_fail (user_data && GUM_IS_USER_SERVICE (user_data));
+ g_return_val_if_fail (user_data && GUM_IS_USER_SERVICE (user_data), FALSE);
const gchar *env = NULL;
GumDbusUserService *dbus_service = NULL;
GDBusConnection *connection = NULL;