91
set_gdm_uid_child_setup ()
97
pwent = getpwnam (GDM_USERNAME);
98
// --shutdown take into account the resuid/resgid and HOME whereas
99
// --get --set take the euid/egid
100
setenv("HOME", pwent->pw_dir, 1);
101
gdm_uid = pwent->pw_uid;
102
gdm_gid = pwent->pw_gid;
103
setresgid (gdm_gid, gdm_gid, gdm_gid);
104
setresuid (gdm_uid, gdm_uid, gdm_uid);
109
gdm_settings_get_gconf_value (gchar *gconf_key, gchar **value) {
111
GError *error = NULL;
112
char *shutdown_command[] = { "gconftool-2", "--shutdown", NULL };
113
char *get_command[] = { "gconftool-2", "--direct", "-g", gconf_key, "--config-source", NULL, NULL };
115
struct passwd *pwent;
116
gboolean success = FALSE;
118
pwent = getpwnam (GDM_USERNAME);
119
if G_UNLIKELY (pwent == NULL)
120
g_warning ("Can't access to 'gdm' user name in passwd");
122
get_command[5] = g_strdup_printf("xml:readwrite:%s/.gconf", pwent->pw_dir);
123
res = g_spawn_sync (NULL,
127
(GSpawnChildSetupFunc)set_gdm_uid_child_setup,
135
g_warning ("Unable to shutdown gconf: %s", error->message);
136
g_error_free (error);
139
g_warning ("Unable to shutdown gconf: unknown error");
142
res = g_spawn_sync (NULL,
145
G_SPAWN_SEARCH_PATH | G_SPAWN_STDERR_TO_DEV_NULL,
146
(GSpawnChildSetupFunc)set_gdm_uid_child_setup,
154
g_warning ("Unable to get event key to gconf: %s", error->message);
155
g_error_free (error);
158
g_warning ("Unable to get event key to gconf: unknown error");
162
g_warning ("Unable to get event key to gconf: %s", error->message);
163
g_error_free (error);
166
g_debug ("gconftool call returning: %s", *value);
179
gdm_settings_get_bool_gconf_value (gchar *gconf_key, gboolean *enabled) {
182
gboolean result = FALSE;
184
if (gdm_settings_get_gconf_value(gconf_key, &value)) {
186
if (strstr(value, "false") != NULL)
188
else if (strstr(value, "true") != NULL)
201
gdm_settings_set_gconf_value (gchar *gconf_key, gchar *type, gchar *value) {
203
GError *error = NULL;
204
char *shutdown_command[] = { "gconftool-2", "--shutdown", NULL };
205
char *set_command[] = { "gconftool-2", "--direct", "-s", gconf_key, "--config-source", NULL, "-t", type, value, NULL };
207
struct passwd *pwent;
208
gboolean success = FALSE;
210
pwent = getpwnam (GDM_USERNAME);
211
if G_UNLIKELY (pwent == NULL)
212
g_warning ("Can't access to 'gdm' user name in passwd");
214
set_command[5] = g_strdup_printf("xml:readwrite:%s/.gconf", pwent->pw_dir);
215
res = g_spawn_sync (NULL,
219
(GSpawnChildSetupFunc)set_gdm_uid_child_setup,
227
g_warning ("Unable to shutdown gconf: %s", error->message);
228
g_error_free (error);
231
g_warning ("Unable to shutdown gconf: unknown error");
234
res = g_spawn_async (NULL,
238
| G_SPAWN_STDOUT_TO_DEV_NULL
239
| G_SPAWN_STDERR_TO_DEV_NULL,
240
(GSpawnChildSetupFunc)set_gdm_uid_child_setup,
246
g_warning ("Unable to set event key to gconf: %s", error->message);
247
g_error_free (error);
250
g_warning ("Unable to set event key to gconf: unknown error");
261
gdm_settings_set_bool_gconf_value (gchar *gconf_key, gboolean enabled) {
263
gchar *value = g_strdup_printf ("%i", enabled);
266
result = gdm_settings_set_gconf_value (gconf_key, "bool", value);
275
86
dbus-send --system --print-reply --dest=org.gnome.DisplayManager /org/gnome/DisplayManager/Settings org.gnome.DisplayManager.Settings.GetValue string:"xdmcp/Enable"
304
dbus-send --system --print-reply --dest=org.gnome.DisplayManager /org/gnome/DisplayManager/Settings org.gnome.DisplayManager.Settings.GetSoundEnabled
308
gdm_settings_get_sound_enabled (GdmSettings *settings,
313
g_debug ("Trying to get sound");
315
g_return_val_if_fail (GDM_IS_SETTINGS (settings), FALSE);
318
res = gdm_settings_get_bool_gconf_value (GCONF_SOUND_EVENT_KEY, enabled);
320
g_debug ("get sound returned: %i", *enabled);
327
dbus-send --system --print-reply --dest=org.gnome.DisplayManager /org/gnome/DisplayManager/Settings org.gnome.DisplayManager.Settings.GetFaceBrowserEnabled
331
gdm_settings_get_face_browser_enabled (GdmSettings *settings,
337
g_return_val_if_fail (GDM_IS_SETTINGS (settings), FALSE);
340
res = gdm_settings_get_bool_gconf_value (GCONF_FACE_BROWSER_DISABLE_KEY, enabled);
342
*enabled = !*enabled;
348
unlock_auth_cb (PolkitAuthority *authority,
349
GAsyncResult *result,
350
DBusGMethodInvocation *context)
352
PolkitAuthorizationResult *auth_result;
353
GError *error = NULL;
355
auth_result = polkit_authority_check_authorization_finish (authority, result, &error);
358
dbus_g_method_return_error (context, error);
360
dbus_g_method_return (context,
361
polkit_authorization_result_get_is_authorized (auth_result));
365
g_object_unref (auth_result);
367
g_error_free (error);
371
gdm_settings_unlock (GdmSettings *settings,
372
DBusGMethodInvocation *context)
374
polkit_authority_check_authorization (polkit_authority_get (),
375
polkit_system_bus_name_new (dbus_g_method_get_sender (context)),
376
"org.gnome.displaymanager.settings.write",
378
POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION,
380
(GAsyncReadyCallback) unlock_auth_cb,
386
GdmSettings *settings;
387
DBusGMethodInvocation *context;
393
DBusGMethodInvocation *context;
395
} SetGConfBooleanData;
398
set_value_auth_cb (PolkitAuthority *authority,
399
GAsyncResult *result,
402
PolkitAuthorizationResult *auth_result;
403
GError *error = NULL;
405
auth_result = polkit_authority_check_authorization_finish (authority, result, &error);
408
dbus_g_method_return_error (data->context, error);
410
if (polkit_authorization_result_get_is_authorized (auth_result)) {
413
result = gdm_settings_backend_set_value (data->settings->priv->backend,
418
dbus_g_method_return (data->context);
420
dbus_g_method_return_error (data->context, error);
423
error = g_error_new (DBUS_GERROR_REMOTE_EXCEPTION, 0, "Not authorized");
424
dbus_g_method_return_error (data->context, error);
429
g_object_unref (auth_result);
431
g_error_free (error);
433
g_free (data->value);
438
114
dbus-send --system --print-reply --dest=org.gnome.DisplayManager /org/gnome/DisplayManager/Settings org.gnome.DisplayManager.Settings.SetValue string:"xdmcp/Enable" string:"false"
442
118
gdm_settings_set_value (GdmSettings *settings,
444
120
const char *value,
445
DBusGMethodInvocation *context)
449
126
g_return_val_if_fail (GDM_IS_SETTINGS (settings), FALSE);
450
127
g_return_val_if_fail (key != NULL, FALSE);
452
129
g_debug ("Setting value %s", key);
454
/* Authorize with PolicyKit */
455
data = g_malloc (sizeof(SetValueData));
456
data->settings = settings;
457
data->context = context;
458
data->key = g_strdup(key);
459
data->value = g_strdup(value);
460
polkit_authority_check_authorization (polkit_authority_get (),
461
polkit_system_bus_name_new (dbus_g_method_get_sender (context)),
462
"org.gnome.displaymanager.settings.write",
464
POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION,
466
(GAsyncReadyCallback) set_value_auth_cb,
472
set_sound_enabled_auth_cb (PolkitAuthority *authority,
473
GAsyncResult *result,
474
SetGConfBooleanData *data)
476
PolkitAuthorizationResult *auth_result;
477
GError *error = NULL;
479
auth_result = polkit_authority_check_authorization_finish (authority, result, &error);
482
dbus_g_method_return_error (data->context, error);
484
if (polkit_authorization_result_get_is_authorized (auth_result)) {
485
if (!gdm_settings_set_bool_gconf_value (GCONF_SOUND_EVENT_KEY, data->enabled))
486
g_warning ("set new value for sound failed");
487
dbus_g_method_return (data->context);
490
error = g_error_new (DBUS_GERROR_REMOTE_EXCEPTION, 0, "Not authorized");
491
dbus_g_method_return_error (data->context, error);
496
g_object_unref (auth_result);
498
g_error_free (error);
504
dbus-send --system --print-reply --dest=org.gnome.DisplayManager /org/gnome/DisplayManager/Settings org.gnome.DisplayManager.Settings.SetSoundEnabled boolean:false
508
gdm_settings_set_sound_enabled (GdmSettings *settings,
510
DBusGMethodInvocation *context)
512
SetGConfBooleanData *data;
514
g_return_val_if_fail (GDM_IS_SETTINGS (settings), FALSE);
517
g_debug ("Setting sound enabled to %s", enabled ? "true" : "false");
519
/* Authorize with PolicyKit */
520
data = g_malloc (sizeof(SetGConfBooleanData));
521
data->context = context;
522
data->enabled = enabled;
523
polkit_authority_check_authorization (polkit_authority_get (),
524
polkit_system_bus_name_new (dbus_g_method_get_sender (context)),
525
"org.gnome.displaymanager.settings.write",
527
POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION,
529
(GAsyncReadyCallback) set_sound_enabled_auth_cb,
535
set_face_browser_enabled_auth_cb (PolkitAuthority *authority,
536
GAsyncResult *result,
537
SetGConfBooleanData *data)
539
PolkitAuthorizationResult *auth_result;
540
GError *error = NULL;
542
auth_result = polkit_authority_check_authorization_finish (authority, result, &error);
545
dbus_g_method_return_error (data->context, error);
547
if (polkit_authorization_result_get_is_authorized (auth_result)) {
548
if (!gdm_settings_set_bool_gconf_value (GCONF_FACE_BROWSER_DISABLE_KEY, !data->enabled))
549
g_warning ("set new value for face browser failed");
550
dbus_g_method_return (data->context);
553
error = g_error_new (DBUS_GERROR_REMOTE_EXCEPTION, 0, "Not authorized");
554
dbus_g_method_return_error (data->context, error);
559
g_object_unref (auth_result);
561
g_error_free (error);
567
dbus-send --system --print-reply --dest=org.gnome.DisplayManager /org/gnome/DisplayManager/Settings org.gnome.DisplayManager.Settings.SetFaceBrowserEnabled boolean:true
571
gdm_settings_set_face_browser_enabled (GdmSettings *settings,
573
DBusGMethodInvocation *context)
575
SetGConfBooleanData *data;
577
g_return_val_if_fail (GDM_IS_SETTINGS (settings), FALSE);
579
/* Authorize with PolicyKit */
580
data = g_malloc (sizeof(SetGConfBooleanData));
581
data->context = context;
582
data->enabled = enabled;
583
polkit_authority_check_authorization (polkit_authority_get (),
584
polkit_system_bus_name_new (dbus_g_method_get_sender (context)),
585
"org.gnome.displaymanager.settings.write",
587
POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION,
589
(GAsyncReadyCallback) set_face_browser_enabled_auth_cb,
132
res = gdm_settings_backend_set_value (settings->priv->backend,
137
g_propagate_error (error, local_error);