diff options
-rw-r--r-- | common/gdm-address.c | 10 | ||||
-rw-r--r-- | common/gdm-common.c | 3 | ||||
-rw-r--r-- | common/gdm-profile.c | 7 | ||||
-rw-r--r-- | common/gdm-settings-desktop-backend.c | 81 | ||||
-rw-r--r-- | common/gdm-settings-direct.c | 25 | ||||
-rw-r--r-- | daemon/gdm-dbus-util.c | 39 | ||||
-rw-r--r-- | daemon/gdm-display-access-file.c | 62 | ||||
-rw-r--r-- | daemon/gdm-display.c | 92 | ||||
-rw-r--r-- | daemon/gdm-launch-environment.c | 59 | ||||
-rw-r--r-- | daemon/gdm-legacy-display.c | 29 | ||||
-rw-r--r-- | daemon/gdm-local-display-factory.c | 8 | ||||
-rw-r--r-- | daemon/gdm-local-display.c | 4 | ||||
-rw-r--r-- | daemon/gdm-manager.c | 13 | ||||
-rw-r--r-- | daemon/gdm-server.c | 13 | ||||
-rw-r--r-- | daemon/gdm-session-linux-auditor.c | 10 | ||||
-rw-r--r-- | daemon/gdm-session-record.c | 5 | ||||
-rw-r--r-- | daemon/gdm-session-settings.c | 13 | ||||
-rw-r--r-- | daemon/gdm-session-worker-job.c | 49 | ||||
-rw-r--r-- | daemon/gdm-session-worker.c | 167 | ||||
-rw-r--r-- | daemon/gdm-session.c | 2 |
20 files changed, 219 insertions, 472 deletions
diff --git a/common/gdm-address.c b/common/gdm-address.c index 66dc5904..d64bb2ee 100644 --- a/common/gdm-address.c +++ b/common/gdm-address.c @@ -236,19 +236,15 @@ _gdm_address_debug (GdmAddress *address, void gdm_address_debug (GdmAddress *address) { - char *hostname = NULL; - char *host = NULL; - char *port = NULL; + g_autofree char *hostname = NULL; + g_autofree char *host = NULL; + g_autofree char *port = NULL; g_return_if_fail (address != NULL); gdm_address_get_numeric_info (address, &host, &port); _gdm_address_debug (address, host, port); - - g_free (hostname); - g_free (host); - g_free (port); } gboolean diff --git a/common/gdm-common.c b/common/gdm-common.c index 3e31f426..741c4a8c 100644 --- a/common/gdm-common.c +++ b/common/gdm-common.c @@ -578,7 +578,7 @@ gdm_get_script_environment (const char *username, GHashTable *hash; struct passwd *pwent; - env = g_ptr_array_new (); + env = g_ptr_array_new_with_free_func (g_free); /* create a hash table of current environment, then update keys has necessary */ hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); @@ -724,7 +724,6 @@ gdm_run_script (const char *dir, &status, &error); - g_ptr_array_foreach (env, (GFunc)g_free, NULL); g_ptr_array_free (env, TRUE); g_strfreev (argv); diff --git a/common/gdm-profile.c b/common/gdm-profile.c index 1a37d325..ea9c0fe0 100644 --- a/common/gdm-profile.c +++ b/common/gdm-profile.c @@ -41,8 +41,8 @@ _gdm_profile_log (const char *func, ...) { va_list args; - char *str; - char *formatted; + g_autofree char *str = NULL; + g_autofree char *formatted = NULL; const char *prgname; if (format == NULL) { @@ -68,8 +68,5 @@ _gdm_profile_log (const char *func, formatted); } - g_free (formatted); - g_access (str, F_OK); - g_free (str); } diff --git a/common/gdm-settings-desktop-backend.c b/common/gdm-settings-desktop-backend.c index cdc287ad..276bb04f 100644 --- a/common/gdm-settings-desktop-backend.c +++ b/common/gdm-settings-desktop-backend.c @@ -62,15 +62,14 @@ _gdm_settings_desktop_backend_set_file_name (GdmSettingsDesktopBackend *backend, const char *filename) { gboolean res; - GError *error; - char *contents; + g_autoptr(GError) error = NULL; + g_autofree char *contents = NULL; g_free (backend->filename); backend->filename = g_strdup (filename); backend->key_file = g_key_file_new (); - error = NULL; res = g_key_file_load_from_file (backend->key_file, backend->filename, G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS, @@ -83,7 +82,6 @@ _gdm_settings_desktop_backend_set_file_name (GdmSettingsDesktopBackend *backend, if (contents != NULL) { g_debug ("GdmSettings: %s is:\n%s\n", backend->filename, contents); - g_free (contents); } } @@ -135,21 +133,18 @@ parse_key_string (const char *keystring, char **locale, char **value) { - char **split1; - char **split2; + g_auto(GStrv) split1 = NULL; + g_auto(GStrv) split2 = NULL; char *g; char *k; char *l; char *v; char *tmp1; char *tmp2; - gboolean ret; g_return_val_if_fail (keystring != NULL, FALSE); - ret = FALSE; g = k = v = l = NULL; - split1 = split2 = NULL; if (group != NULL) { *group = g; @@ -173,7 +168,7 @@ parse_key_string (const char *keystring, || split1 [0][0] == '\0' || split1 [1][0] == '\0') { g_warning ("GdmSettingsDesktopBackend: invalid key: %s", keystring); - goto out; + return FALSE; } g = split1 [0]; @@ -194,8 +189,6 @@ parse_key_string (const char *keystring, *tmp1 = '\0'; } - ret = TRUE; - if (group != NULL) { *group = g_strdup (g); } @@ -208,12 +201,8 @@ parse_key_string (const char *keystring, if (value != NULL) { *value = g_strdup (v); } - out: - g_strfreev (split1); - g_strfreev (split2); - - return ret; + return TRUE; } static gboolean @@ -222,55 +211,44 @@ gdm_settings_desktop_backend_get_value (GdmSettingsBackend *backend, char **value, GError **error) { - GError *local_error; - char *val; - char *g; - char *k; - char *l; - gboolean ret; + g_autoptr(GError) local_error = NULL; + g_autofree char *val = NULL; + g_autofree char *g = NULL; + g_autofree char *k = NULL; + g_autofree char *l = NULL; g_return_val_if_fail (GDM_IS_SETTINGS_BACKEND (backend), FALSE); g_return_val_if_fail (key != NULL, FALSE); g_return_val_if_fail (value != NULL, FALSE); - ret = FALSE; *value = NULL; - val = g = k = l = NULL; /*GDM_SETTINGS_BACKEND_CLASS (gdm_settings_desktop_backend_parent_class)->get_value (display);*/ if (! parse_key_string (key, &g, &k, &l, NULL)) { g_set_error (error, GDM_SETTINGS_BACKEND_ERROR, GDM_SETTINGS_BACKEND_ERROR_KEY_NOT_FOUND, "Key not found"); - goto out; + return FALSE; } /*g_debug ("Getting key: %s %s %s", g, k, l);*/ - local_error = NULL; val = g_key_file_get_value (GDM_SETTINGS_DESKTOP_BACKEND (backend)->key_file, g, k, &local_error); if (local_error != NULL) { - g_error_free (local_error); g_set_error (error, GDM_SETTINGS_BACKEND_ERROR, GDM_SETTINGS_BACKEND_ERROR_KEY_NOT_FOUND, "Key not found"); - goto out; + return FALSE; } *value = g_strdup (val); - ret = TRUE; - out: - g_free (val); - g_free (g); - g_free (k); - g_free (l); - - return ret; + + return TRUE; } static void save_settings (GdmSettingsDesktopBackend *backend) { - GError *local_error; - char *contents; + g_autoptr(GError) local_error = NULL; + g_autofree char *contents = NULL; gsize length; if (! backend->dirty) { @@ -279,28 +257,21 @@ save_settings (GdmSettingsDesktopBackend *backend) g_debug ("Saving settings to %s", backend->filename); - local_error = NULL; contents = g_key_file_to_data (backend->key_file, &length, &local_error); if (local_error != NULL) { g_warning ("Unable to save settings: %s", local_error->message); - g_error_free (local_error); return; } - local_error = NULL; g_file_set_contents (backend->filename, contents, length, &local_error); if (local_error != NULL) { g_warning ("Unable to save settings: %s", local_error->message); - g_error_free (local_error); - g_free (contents); return; } - g_free (contents); - backend->dirty = FALSE; } @@ -333,11 +304,10 @@ gdm_settings_desktop_backend_set_value (GdmSettingsBackend *backend, const char *value, GError **error) { - GError *local_error; - char *old_val; - char *g; - char *k; - char *l; + g_autofree char *old_val = NULL; + g_autofree char *g = NULL; + g_autofree char *k = NULL; + g_autofree char *l = NULL; g_return_val_if_fail (GDM_IS_SETTINGS_BACKEND (backend), FALSE); g_return_val_if_fail (key != NULL, FALSE); @@ -349,17 +319,12 @@ gdm_settings_desktop_backend_set_value (GdmSettingsBackend *backend, return FALSE; } - local_error = NULL; old_val = g_key_file_get_value (GDM_SETTINGS_DESKTOP_BACKEND (backend)->key_file, g, k, - &local_error); - if (local_error != NULL) { - g_error_free (local_error); - } + NULL); /*g_debug ("Setting key: %s %s %s", g, k, l);*/ - local_error = NULL; g_key_file_set_value (GDM_SETTINGS_DESKTOP_BACKEND (backend)->key_file, g, k, @@ -370,8 +335,6 @@ gdm_settings_desktop_backend_set_value (GdmSettingsBackend *backend, gdm_settings_backend_value_changed (backend, key, old_val, value); - g_free (old_val); - return TRUE; } diff --git a/common/gdm-settings-direct.c b/common/gdm-settings-direct.c index b6954fb0..c5435e8b 100644 --- a/common/gdm-settings-direct.c +++ b/common/gdm-settings-direct.c @@ -68,18 +68,11 @@ static gboolean get_value (const char *key, char **value) { - GError *error; - char *str; + g_autofree char *str = NULL; gboolean res; - error = NULL; - res = gdm_settings_get_value (settings_object, key, &str, &error); + res = gdm_settings_get_value (settings_object, key, &str, NULL); if (! res) { - if (error != NULL) { - g_error_free (error); - } else { - } - return FALSE; } @@ -87,8 +80,6 @@ get_value (const char *key, *value = g_strdup (str); } - g_free (str); - return TRUE; } @@ -99,7 +90,7 @@ gdm_settings_direct_get_int (const char *key, GdmSettingsEntry *entry; gboolean ret; gboolean res; - char *str; + g_autofree char *str = NULL; g_return_val_if_fail (key != NULL, FALSE); g_return_val_if_fail (value != NULL, FALSE); @@ -118,8 +109,6 @@ gdm_settings_direct_get_int (const char *key, ret = gdm_settings_parse_value_as_integer (str, value); - g_free (str); - return ret; } @@ -150,7 +139,7 @@ gdm_settings_direct_get_boolean (const char *key, GdmSettingsEntry *entry; gboolean ret; gboolean res; - char *str; + g_autofree char *str = NULL; g_return_val_if_fail (key != NULL, FALSE); g_return_val_if_fail (value != NULL, FALSE); @@ -169,8 +158,6 @@ gdm_settings_direct_get_boolean (const char *key, ret = gdm_settings_parse_value_as_boolean (str, value); - g_free (str); - return ret; } @@ -181,7 +168,7 @@ gdm_settings_direct_get_string (const char *key, GdmSettingsEntry *entry; gboolean ret; gboolean res; - char *str; + g_autofree char *str = NULL; g_return_val_if_fail (key != NULL, FALSE); g_return_val_if_fail (value != NULL, FALSE); @@ -202,8 +189,6 @@ gdm_settings_direct_get_string (const char *key, *value = g_strdup (str); - g_free (str); - return ret; } diff --git a/daemon/gdm-dbus-util.c b/daemon/gdm-dbus-util.c index 678fe7c9..4600dad8 100644 --- a/daemon/gdm-dbus-util.c +++ b/daemon/gdm-dbus-util.c @@ -52,8 +52,8 @@ handle_connection (GDBusServer *server, GDBusConnection *new_connection, gpointer user_data) { + g_autoptr(GDBusNodeInfo) bus_info = NULL; GDBusInterfaceVTable bus_vtable = { handle_bus_method }; - GDBusNodeInfo *bus_info; bus_info = g_dbus_node_info_new_for_xml (dbus_introspection, NULL); @@ -65,7 +65,6 @@ handle_connection (GDBusServer *server, bus_info->interfaces[0], &bus_vtable, NULL, NULL, NULL); - g_dbus_node_info_unref (bus_info); /* We're not handling the signal */ return FALSE; @@ -75,9 +74,9 @@ GDBusServer * gdm_dbus_setup_private_server (GDBusAuthObserver *observer, GError **error) { - char *guid; + g_autofree char *guid = NULL; const char *client_address; - GDBusServer *server; + g_autoptr(GDBusServer) server = NULL; guid = g_dbus_generate_guid (); @@ -99,9 +98,7 @@ gdm_dbus_setup_private_server (GDBusAuthObserver *observer, G_CALLBACK (handle_connection), NULL); - g_free (guid); - - return server; + return g_steal_pointer (&server); } gboolean @@ -109,9 +106,8 @@ gdm_dbus_get_pid_for_name (const char *system_bus_name, pid_t *out_pid, GError **error) { - GDBusConnection *bus; - GVariant *reply; - gboolean retval = FALSE; + g_autoptr(GDBusConnection) bus = NULL; + g_autoptr(GVariant) reply = NULL; unsigned int v; g_return_val_if_fail (system_bus_name != NULL, FALSE); @@ -133,18 +129,13 @@ gdm_dbus_get_pid_for_name (const char *system_bus_name, -1, NULL, error); if (reply == NULL) { - goto out; + return FALSE; } g_variant_get (reply, "(u)", &v); *out_pid = v; - g_variant_unref (reply); - - retval = TRUE; - out: - g_object_unref (bus); - return retval; + return TRUE; } gboolean @@ -152,9 +143,8 @@ gdm_dbus_get_uid_for_name (const char *system_bus_name, uid_t *out_uid, GError **error) { - GDBusConnection *bus; - GVariant *reply; - gboolean retval = FALSE; + g_autoptr(GDBusConnection) bus = NULL; + g_autoptr(GVariant) reply = NULL; unsigned int v; g_return_val_if_fail (system_bus_name != NULL, FALSE); @@ -176,18 +166,13 @@ gdm_dbus_get_uid_for_name (const char *system_bus_name, -1, NULL, error); if (reply == NULL) { - goto out; + return FALSE; } g_variant_get (reply, "(u)", &v); *out_uid = v; - g_variant_unref (reply); - - retval = TRUE; - out: - g_object_unref (bus); - return retval; + return TRUE; } void diff --git a/daemon/gdm-display-access-file.c b/daemon/gdm-display-access-file.c index d0dd5cc8..28d7b7b2 100644 --- a/daemon/gdm-display-access-file.c +++ b/daemon/gdm-display-access-file.c @@ -222,7 +222,7 @@ _get_uid_and_gid_for_user (const char *username, static void clean_up_stale_auth_subdirs (void) { - GDir *dir; + g_autoptr(GDir) dir = NULL; const char *filename; dir = g_dir_open (GDM_XAUTH_DIR, 0, NULL); @@ -232,16 +232,14 @@ clean_up_stale_auth_subdirs (void) } while ((filename = g_dir_read_name (dir)) != NULL) { - char *path; + g_autofree char *path = NULL; path = g_build_filename (GDM_XAUTH_DIR, filename, NULL); /* Will only succeed if the directory is empty */ g_rmdir (path); - g_free (path); } - g_dir_close (dir); } static FILE * @@ -249,9 +247,9 @@ _create_xauth_file_for_user (const char *username, char **filename, GError **error) { - char *template; + g_autofree char *template = NULL; + g_autofree char *auth_filename = NULL; const char *dir_name; - char *auth_filename; int fd; FILE *fp; uid_t uid; @@ -261,11 +259,6 @@ _create_xauth_file_for_user (const char *username, *filename = NULL; - template = NULL; - auth_filename = NULL; - fp = NULL; - fd = -1; - /* Create directory if not exist, then set permission 0711 and ownership root:gdm */ if (g_file_test (GDM_XAUTH_DIR, G_FILE_TEST_IS_DIR) == FALSE) { g_remove (GDM_XAUTH_DIR); @@ -274,7 +267,7 @@ _create_xauth_file_for_user (const char *username, G_FILE_ERROR, g_file_error_from_errno (errno), g_strerror (errno)); - goto out; + return NULL; } g_chmod (GDM_XAUTH_DIR, 0711); @@ -284,7 +277,7 @@ _create_xauth_file_for_user (const char *username, GDM_DISPLAY_ERROR_GETTING_USER_INFO, _("Could not find user ā%sā on system"), GDM_USERNAME); - goto out; + return NULL; } if (chown (GDM_XAUTH_DIR, 0, gid) != 0) { @@ -305,8 +298,7 @@ _create_xauth_file_for_user (const char *username, GDM_DISPLAY_ERROR_GETTING_USER_INFO, _("Could not find user ā%sā on system"), username); - goto out; - + return NULL; } template = g_strdup_printf (GDM_XAUTH_DIR @@ -324,7 +316,7 @@ _create_xauth_file_for_user (const char *username, "Unable to create temp dir from tempalte '%s': %s", template, g_strerror (errno)); - goto out; + return NULL; } g_debug ("GdmDisplayAccessFile: chowning %s to %u:%u", @@ -337,7 +329,7 @@ _create_xauth_file_for_user (const char *username, "Unable to change permission of '%s': %s", dir_name, g_strerror (errno)); - goto out; + return NULL; } auth_filename = g_build_filename (dir_name, "database", NULL); @@ -356,7 +348,7 @@ _create_xauth_file_for_user (const char *username, "Unable to open '%s': %s", auth_filename, g_strerror (errno)); - goto out; + return NULL; } g_debug ("GdmDisplayAccessFile: chowning %s to %u:%u", auth_filename, (guint)uid, (guint)gid); @@ -369,8 +361,7 @@ _create_xauth_file_for_user (const char *username, auth_filename, g_strerror (errno)); close (fd); - fd = -1; - goto out; + return NULL; } /* now open up permissions on per-session directory */ @@ -385,22 +376,12 @@ _create_xauth_file_for_user (const char *username, g_file_error_from_errno (errno), g_strerror (errno)); close (fd); - fd = -1; - goto out; + return NULL; } - *filename = auth_filename; - auth_filename = NULL; - - /* don't close it */ - fd = -1; -out: - g_free (template); - g_free (auth_filename); - if (fd != -1) { - close (fd); - } + *filename = g_steal_pointer (&auth_filename); + /* don't close fd on purpose */ return fp; } @@ -408,19 +389,18 @@ gboolean gdm_display_access_file_open (GdmDisplayAccessFile *file, GError **error) { - GError *create_error; + g_autoptr(GError) create_error = NULL; g_return_val_if_fail (GDM_IS_DISPLAY_ACCESS_FILE (file), FALSE); g_return_val_if_fail (file->fp == NULL, FALSE); g_return_val_if_fail (file->path == NULL, FALSE); - create_error = NULL; file->fp = _create_xauth_file_for_user (file->username, &file->path, &create_error); if (file->fp == NULL) { - g_propagate_error (error, create_error); + g_propagate_error (error, g_steal_pointer (&create_error)); return FALSE; } @@ -477,7 +457,7 @@ gdm_display_access_file_add_display (GdmDisplayAccessFile *file, gsize *cookie_size, GError **error) { - GError *add_error; + g_autoptr(GError) add_error = NULL; gboolean display_added; g_return_val_if_fail (GDM_IS_DISPLAY_ACCESS_FILE (file), FALSE); @@ -485,12 +465,11 @@ gdm_display_access_file_add_display (GdmDisplayAccessFile *file, g_return_val_if_fail (display != NULL, FALSE); g_return_val_if_fail (cookie != NULL, FALSE); - add_error = NULL; *cookie = gdm_generate_random_bytes (GDM_DISPLAY_ACCESS_COOKIE_SIZE, &add_error); if (*cookie == NULL) { - g_propagate_error (error, add_error); + g_propagate_error (error, g_steal_pointer (&add_error)); return FALSE; } @@ -503,7 +482,7 @@ gdm_display_access_file_add_display (GdmDisplayAccessFile *file, if (!display_added) { g_free (*cookie); *cookie = NULL; - g_propagate_error (error, add_error); + g_propagate_error (error, g_steal_pointer (&add_error)); return FALSE; } @@ -574,7 +553,7 @@ gdm_display_access_file_add_display_with_cookie (GdmDisplayAccessFile *file, void gdm_display_access_file_close (GdmDisplayAccessFile *file) { - char *auth_dir; + g_autofree char *auth_dir = NULL; g_return_if_fail (GDM_IS_DISPLAY_ACCESS_FILE (file)); g_return_if_fail (file->fp != NULL); @@ -598,7 +577,6 @@ gdm_display_access_file_close (GdmDisplayAccessFile *file) auth_dir, g_strerror (errno)); } - g_free (auth_dir); } g_free (file->path); diff --git a/daemon/gdm-display.c b/daemon/gdm-display.c index dd617227..39430a5b 100644 --- a/daemon/gdm-display.c +++ b/daemon/gdm-display.c @@ -193,8 +193,8 @@ gboolean gdm_display_create_authority (GdmDisplay *self) { GdmDisplayPrivate *priv; - GdmDisplayAccessFile *access_file; - GError *error; + g_autoptr(GdmDisplayAccessFile) access_file = NULL; + g_autoptr(GError) error = NULL; gboolean res; g_return_val_if_fail (GDM_IS_DISPLAY (self), FALSE); @@ -202,12 +202,10 @@ gdm_display_create_authority (GdmDisplay *self) priv = gdm_display_get_instance_private (self); g_return_val_if_fail (priv->access_file == NULL, FALSE); - error = NULL; access_file = _create_access_file_for_user (self, GDM_USERNAME, &error); if (access_file == NULL) { g_critical ("could not create display access file: %s", error->message); - g_error_free (error); return FALSE; } @@ -220,15 +218,12 @@ gdm_display_create_authority (GdmDisplay *self) &error); if (! res) { - g_critical ("could not add display to access file: %s", error->message); - g_error_free (error); gdm_display_access_file_close (access_file); - g_object_unref (access_file); return FALSE; } - priv->access_file = access_file; + priv->access_file = g_steal_pointer (&access_file); return TRUE; } @@ -254,8 +249,8 @@ gdm_display_add_user_authorization (GdmDisplay *self, GError **error) { GdmDisplayPrivate *priv; - GdmDisplayAccessFile *access_file; - GError *access_file_error; + g_autoptr(GdmDisplayAccessFile) access_file = NULL; + g_autoptr(GError) access_file_error = NULL; gboolean res; int i; @@ -280,13 +275,12 @@ gdm_display_add_user_authorization (GdmDisplay *self, g_debug ("GdmDisplay: Adding user authorization for %s", username); - access_file_error = NULL; access_file = _create_access_file_for_user (self, username, &access_file_error); if (access_file == NULL) { - g_propagate_error (error, access_file_error); + g_propagate_error (error, g_steal_pointer (&access_file_error)); return FALSE; } @@ -299,14 +293,13 @@ gdm_display_add_user_authorization (GdmDisplay *self, g_debug ("GdmDisplay: Unable to add user authorization for %s: %s", username, access_file_error->message); - g_propagate_error (error, access_file_error); + g_propagate_error (error, g_steal_pointer (&access_file_error)); gdm_display_access_file_close (access_file); - g_object_unref (access_file); return FALSE; } *filename = gdm_display_access_file_get_path (access_file); - priv->user_access_file = access_file; + priv->user_access_file = g_steal_pointer (&access_file); g_debug ("GdmDisplay: Added user authorization for %s: %s", username, *filename); /* Remove access for the programs run by greeter now that the @@ -1080,13 +1073,12 @@ handle_get_id (GdmDBusDisplay *skeleton, GDBusMethodInvocation *invocation, GdmDisplay *self) { - char *id; + g_autofree char *id = NULL; gdm_display_get_id (self, &id, NULL); gdm_dbus_display_complete_get_id (skeleton, invocation, id); - g_free (id); return TRUE; } @@ -1095,7 +1087,7 @@ handle_get_remote_hostname (GdmDBusDisplay *skeleton, GDBusMethodInvocation *invocation, GdmDisplay *self) { - char *hostname; + g_autofree char *hostname = NULL; gdm_display_get_remote_hostname (self, &hostname, NULL); @@ -1103,7 +1095,6 @@ handle_get_remote_hostname (GdmDBusDisplay *skeleton, invocation, hostname ? hostname : ""); - g_free (hostname); return TRUE; } @@ -1112,9 +1103,8 @@ handle_get_seat_id (GdmDBusDisplay *skeleton, GDBusMethodInvocation *invocation, GdmDisplay *self) { - char *seat_id; + g_autofree char *seat_id = NULL; - seat_id = NULL; gdm_display_get_seat_id (self, &seat_id, NULL); if (seat_id == NULL) { @@ -1122,7 +1112,6 @@ handle_get_seat_id (GdmDBusDisplay *skeleton, } gdm_dbus_display_complete_get_seat_id (skeleton, invocation, seat_id); - g_free (seat_id); return TRUE; } @@ -1131,13 +1120,12 @@ handle_get_x11_display_name (GdmDBusDisplay *skeleton, GDBusMethodInvocation *invocation, GdmDisplay *self) { - char *name; + g_autofree char *name = NULL; gdm_display_get_x11_display_name (self, &name, NULL); gdm_dbus_display_complete_get_x11_display_name (skeleton, invocation, name); - g_free (name); return TRUE; } @@ -1173,15 +1161,13 @@ static gboolean register_display (GdmDisplay *self) { GdmDisplayPrivate *priv; - GError *error = NULL; + g_autoptr(GError) error = NULL; priv = gdm_display_get_instance_private (self); - error = NULL; priv->connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error); if (priv->connection == NULL) { g_critical ("error getting system bus: %s", error->message); - g_error_free (error); exit (EXIT_FAILURE); } @@ -1485,12 +1471,11 @@ static void on_launch_environment_session_opened (GdmLaunchEnvironment *launch_environment, GdmDisplay *self) { - char *session_id; + g_autofree char *session_id = NULL; g_debug ("GdmDisplay: Greeter session opened"); session_id = gdm_launch_environment_get_session_id (launch_environment); _gdm_display_set_session_id (self, session_id); - g_free (session_id); } static void @@ -1543,14 +1528,12 @@ on_launch_environment_session_died (GdmLaunchEnvironment *launch_environment, static gboolean can_create_environment (const char *session_id) { - char *path; + g_autofree char *path = NULL; gboolean session_exists; path = g_strdup_printf (GNOME_SESSION_SESSIONS_PATH "/%s.session", session_id); session_exists = g_file_test (path, G_FILE_TEST_EXISTS); - g_free (path); - return session_exists; } @@ -1570,9 +1553,9 @@ kernel_cmdline_initial_setup_argument (const gchar *contents, gchar **initial_setup_argument, GError **error) { - GRegex *regex = NULL; - GMatchInfo *match_info = NULL; - gchar *match_group = NULL; + g_autoptr(GRegex) regex = NULL; + g_autoptr(GMatchInfo) match_info = NULL; + g_autofree gchar *match_group = NULL; g_return_val_if_fail (initial_setup_argument != NULL, FALSE); @@ -1582,9 +1565,6 @@ kernel_cmdline_initial_setup_argument (const gchar *contents, return FALSE; if (!g_regex_match (regex, contents, 0, &match_info)) { - g_free (match_info); - g_free (regex); - g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Could not match gnome.initial-setup= in kernel cmdline"); @@ -1594,19 +1574,13 @@ kernel_cmdline_initial_setup_argument (const gchar *contents, match_group = g_match_info_fetch (match_info, 1); if (!match_group) { - g_free (match_info); - g_free (regex); - g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, "Could not match gnome.initial-setup= in kernel cmdline"); return FALSE; } - *initial_setup_argument = match_group; - - g_free (match_info); - g_free (regex); + *initial_setup_argument = g_steal_pointer (&match_group); return TRUE; } @@ -1616,16 +1590,15 @@ kernel_cmdline_initial_setup_argument (const gchar *contents, static gboolean kernel_cmdline_initial_setup_force_state (gboolean *force_state) { - GError *error = NULL; - gchar *contents = NULL; - gchar *setup_argument = NULL; + g_autoptr(GError) error = NULL; + g_autofree gchar *contents = NULL; + g_autofree gchar *setup_argument = NULL; g_return_val_if_fail (force_state != NULL, FALSE); if (!g_file_get_contents ("/proc/cmdline", &contents, NULL, &error)) { g_debug ("GdmDisplay: Could not check kernel parameters, not forcing initial setup: %s", error->message); - g_clear_error (&error); return FALSE; } @@ -1633,16 +1606,12 @@ kernel_cmdline_initial_setup_force_state (gboolean *force_state) if (!kernel_cmdline_initial_setup_argument (contents, &setup_argument, &error)) { g_debug ("GdmDisplay: Failed to read kernel commandline: %s", error->message); - g_clear_pointer (&contents, g_free); return FALSE; } - g_clear_pointer (&contents, g_free); - /* Poor-man's check for truthy or falsey values */ *force_state = setup_argument[0] == '1'; - g_free (setup_argument); return TRUE; } @@ -1697,10 +1666,10 @@ gdm_display_start_greeter_session (GdmDisplay *self) { GdmDisplayPrivate *priv; GdmSession *session; - char *display_name; - char *seat_id; - char *hostname; - char *auth_file = NULL; + g_autofree char *display_name = NULL; + g_autofree char *seat_id = NULL; + g_autofree char *hostname = NULL; + g_autofree char *auth_file = NULL; g_return_if_fail (GDM_IS_DISPLAY (self)); @@ -1709,10 +1678,6 @@ gdm_display_start_greeter_session (GdmDisplay *self) g_debug ("GdmDisplay: Running greeter"); - display_name = NULL; - seat_id = NULL; - hostname = NULL; - g_object_get (self, "x11-display-name", &display_name, "seat-id", &seat_id, @@ -1758,11 +1723,6 @@ gdm_display_start_greeter_session (GdmDisplay *self) "display-is-initial", priv->is_initial, "supported-session-types", priv->supported_session_types, NULL); - - g_free (display_name); - g_free (seat_id); - g_free (hostname); - g_free (auth_file); } void diff --git a/daemon/gdm-launch-environment.c b/daemon/gdm-launch-environment.c index 507d6de7..91dd396e 100644 --- a/daemon/gdm-launch-environment.c +++ b/daemon/gdm-launch-environment.c @@ -160,7 +160,7 @@ build_launch_environment (GdmLaunchEnvironment *launch_environment, "XDG_CONFIG_DIRS", NULL }; - char *system_data_dirs; + g_autofree char *system_data_dirs = NULL; g_auto (GStrv) supported_session_types = NULL; int i; @@ -244,7 +244,6 @@ build_launch_environment (GdmLaunchEnvironment *launch_environment, DATADIR "/gdm/greeter", DATADIR, system_data_dirs)); - g_free (system_data_dirs); g_object_get (launch_environment->session, "supported-session-types", @@ -262,7 +261,7 @@ on_session_setup_complete (GdmSession *session, const char *service_name, GdmLaunchEnvironment *launch_environment) { - GHashTable *hash; + g_autoptr(GHashTable) hash = NULL; GHashTableIter iter; gpointer key, value; @@ -272,7 +271,6 @@ on_session_setup_complete (GdmSession *session, while (g_hash_table_iter_next (&iter, &key, &value)) { gdm_session_set_environment_variable (launch_environment->session, key, value); } - g_hash_table_destroy (hash); } static void @@ -331,8 +329,8 @@ on_conversation_started (GdmSession *session, const char *service_name, GdmLaunchEnvironment *launch_environment) { - char *log_path; - char *log_file; + g_autofree char *log_path = NULL; + g_autofree char *log_file = NULL; if (launch_environment->x11_display_name != NULL) log_file = g_strdup_printf ("%s-greeter.log", launch_environment->x11_display_name); @@ -340,13 +338,11 @@ on_conversation_started (GdmSession *session, log_file = g_strdup ("greeter.log"); log_path = g_build_filename (LOGDIR, log_file, NULL); - g_free (log_file); gdm_session_setup_for_program (launch_environment->session, "gdm-launch-environment", launch_environment->user_name, log_path); - g_free (log_path); } static void @@ -354,10 +350,9 @@ on_conversation_stopped (GdmSession *session, const char *service_name, GdmLaunchEnvironment *launch_environment) { - GdmSession *conversation_session; + g_autoptr(GdmSession) conversation_session = NULL; - conversation_session = launch_environment->session; - launch_environment->session = NULL; + conversation_session = g_steal_pointer (&launch_environment->session); g_debug ("GdmLaunchEnvironment: conversation stopped"); @@ -368,7 +363,6 @@ on_conversation_stopped (GdmSession *session, if (conversation_session != NULL) { gdm_session_close (conversation_session); - g_object_unref (conversation_session); } } @@ -402,9 +396,7 @@ ensure_directory_with_uid_gid (const char *path, gboolean gdm_launch_environment_start (GdmLaunchEnvironment *launch_environment) { - gboolean res = FALSE; - GError *local_error = NULL; - GError **error = &local_error; + g_autoptr(GError) error = NULL; struct passwd *passwd_entry; uid_t uid; gid_t gid; @@ -414,10 +406,8 @@ gdm_launch_environment_start (GdmLaunchEnvironment *launch_environment) g_debug ("GdmLaunchEnvironment: Starting..."); if (!gdm_get_pwent_for_name (launch_environment->user_name, &passwd_entry)) { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "Unknown user %s", - launch_environment->user_name); - goto out; + g_critical ("GdmLaunchEnvironment: Unknown user %s", launch_environment->user_name); + return FALSE; } uid = passwd_entry->pw_uid; @@ -425,13 +415,16 @@ gdm_launch_environment_start (GdmLaunchEnvironment *launch_environment) g_debug ("GdmLaunchEnvironment: Setting up run time dir %s", launch_environment->runtime_dir); - if (!ensure_directory_with_uid_gid (launch_environment->runtime_dir, uid, gid, error)) { - goto out; + if (!ensure_directory_with_uid_gid (launch_environment->runtime_dir, uid, gid, &error)) { + g_critical ("GdmLaunchEnvironment: %s", error->message); + return FALSE; } /* Create the home directory too */ - if (!ensure_directory_with_uid_gid (passwd_entry->pw_dir, uid, gid, error)) - goto out; + if (!ensure_directory_with_uid_gid (passwd_entry->pw_dir, uid, gid, &error)) { + g_critical ("GdmLaunchEnvironment: %s", error->message); + return FALSE; + } launch_environment->session = gdm_session_new (launch_environment->verification_mode, uid, @@ -494,13 +487,7 @@ gdm_launch_environment_start (GdmLaunchEnvironment *launch_environment) NULL); } - res = TRUE; - out: - if (local_error) { - g_critical ("GdmLaunchEnvironment: %s", local_error->message); - g_clear_error (&local_error); - } - return res; + return TRUE; } gboolean @@ -916,8 +903,6 @@ gdm_launch_environment_finalize (GObject *object) launch_environment = GDM_LAUNCH_ENVIRONMENT (object); - g_return_if_fail (launch_environment != NULL); - gdm_launch_environment_stop (launch_environment); if (launch_environment->session) { @@ -949,10 +934,10 @@ create_gnome_session_environment (const char *session_id, gboolean display_is_local) { gboolean debug = FALSE; - char *command; GdmLaunchEnvironment *launch_environment; - char **argv; - GPtrArray *args; + g_autoptr(GPtrArray) args = NULL; + g_autofree char **argv = NULL; + g_autofree char *command = NULL; gdm_settings_direct_get_boolean (GDM_KEY_DEBUG, &debug); @@ -973,9 +958,8 @@ create_gnome_session_environment (const char *session_id, g_ptr_array_add (args, NULL); - argv = (char **) g_ptr_array_free (args, FALSE); + argv = (char **) g_ptr_array_steal (args, NULL); command = g_strjoinv (" ", argv); - g_free (argv); launch_environment = g_object_new (GDM_TYPE_LAUNCH_ENVIRONMENT, "command", command, @@ -989,7 +973,6 @@ create_gnome_session_environment (const char *session_id, "runtime-dir", GDM_SCREENSHOT_DIR, NULL); - g_free (command); return launch_environment; } diff --git a/daemon/gdm-legacy-display.c b/daemon/gdm-legacy-display.c index e53d82b2..9301d9fd 100644 --- a/daemon/gdm-legacy-display.c +++ b/daemon/gdm-legacy-display.c @@ -93,14 +93,11 @@ static gboolean gdm_legacy_display_prepare (GdmDisplay *display) { GdmLegacyDisplay *self = GDM_LEGACY_DISPLAY (display); - GdmLaunchEnvironment *launch_environment; - char *display_name; - char *seat_id; + g_autoptr(GdmLaunchEnvironment) launch_environment = NULL; + g_autofree char *display_name = NULL; + g_autofree gchar *seat_id = NULL; gboolean doing_initial_setup = FALSE; - display_name = NULL; - seat_id = NULL; - g_object_get (self, "x11-display-name", &display_name, "seat-id", &seat_id, @@ -122,7 +119,6 @@ gdm_legacy_display_prepare (GdmDisplay *display) } g_object_set (self, "launch-environment", launch_environment, NULL); - g_object_unref (launch_environment); if (!gdm_display_create_authority (display)) { g_warning ("Unable to set up access control for display %s", @@ -145,8 +141,8 @@ on_server_ready (GdmServer *server, g_debug ("GdmDisplay: could not connect to display"); gdm_display_unmanage (GDM_DISPLAY (self)); } else { - GdmLaunchEnvironment *launch_environment; - char *display_device; + g_autoptr(GdmLaunchEnvironment) launch_environment = NULL; + g_autofree char *display_device = NULL; display_device = gdm_server_get_display_device (server); @@ -157,8 +153,6 @@ on_server_ready (GdmServer *server, "x11-display-device", display_device, NULL); - g_clear_pointer(&display_device, g_free); - g_clear_object (&launch_environment); g_debug ("GdmDisplay: connected to display"); g_object_set (G_OBJECT (self), "status", GDM_DISPLAY_MANAGED, NULL); @@ -191,9 +185,9 @@ static void gdm_legacy_display_manage (GdmDisplay *display) { GdmLegacyDisplay *self = GDM_LEGACY_DISPLAY (display); - char *display_name; - char *auth_file; - char *seat_id; + g_autofree char *display_name = NULL; + g_autofree char *auth_file = NULL; + g_autofree char *seat_id = NULL; gboolean is_initial; gboolean res; gboolean disable_tcp; @@ -207,10 +201,6 @@ gdm_legacy_display_manage (GdmDisplay *display) self->server = gdm_server_new (display_name, seat_id, auth_file, is_initial); - g_free (display_name); - g_free (auth_file); - g_free (seat_id); - disable_tcp = TRUE; if (gdm_settings_direct_get_boolean (GDM_KEY_DISALLOW_TCP, &disable_tcp)) { g_object_set (self->server, @@ -290,14 +280,13 @@ GdmDisplay * gdm_legacy_display_new (int display_number) { GObject *object; - char *x11_display; + g_autofree char *x11_display = NULL; x11_display = g_strdup_printf (":%d", display_number); object = g_object_new (GDM_TYPE_LEGACY_DISPLAY, "x11-display-number", display_number, "x11-display-name", x11_display, NULL); - g_free (x11_display); return GDM_DISPLAY (object); } diff --git a/daemon/gdm-local-display-factory.c b/daemon/gdm-local-display-factory.c index 471e1b46..0b7e8928 100644 --- a/daemon/gdm-local-display-factory.c +++ b/daemon/gdm-local-display-factory.c @@ -1142,18 +1142,18 @@ on_vt_changed (GIOChannel *source, GdmLocalDisplayFactory *factory) { GdmDisplayStore *store; - GIOStatus status; g_autofree char *tty_of_active_vt = NULL; g_autofree char *login_session_id = NULL; - g_autofree char *active_session_id = NULL; unsigned int previous_vt, new_vt, login_window_vt = 0; - int ret, n_returned; + int n_returned; g_debug ("GdmLocalDisplayFactory: received VT change event"); g_io_channel_seek_position (source, 0, G_SEEK_SET, NULL); if (condition & G_IO_PRI) { g_autoptr (GError) error = NULL; + GIOStatus status; + status = g_io_channel_read_line (source, &tty_of_active_vt, NULL, NULL, &error); if (error != NULL) { @@ -1216,7 +1216,7 @@ on_vt_changed (GIOChannel *source, /* if the old VT was running a wayland login screen kill it */ if (gdm_get_login_window_session_id ("seat0", &login_session_id)) { - ret = sd_session_get_vt (login_session_id, &login_window_vt); + int ret = sd_session_get_vt (login_session_id, &login_window_vt); if (ret == 0 && login_window_vt != 0) { g_debug ("GdmLocalDisplayFactory: VT of login window is %u", login_window_vt); if (login_window_vt == previous_vt) { diff --git a/daemon/gdm-local-display.c b/daemon/gdm-local-display.c index 69945d95..8d90a20a 100644 --- a/daemon/gdm-local-display.c +++ b/daemon/gdm-local-display.c @@ -93,7 +93,6 @@ gdm_local_display_prepare (GdmDisplay *display) char *session_class; char *session_type; gboolean doing_initial_setup = FALSE; - gboolean failed = FALSE; seat_id = NULL; @@ -132,9 +131,6 @@ out: g_free (session_class); g_free (session_type); - if (failed) { - return FALSE; - } return GDM_DISPLAY_CLASS (gdm_local_display_parent_class)->prepare (display); } diff --git a/daemon/gdm-manager.c b/daemon/gdm-manager.c index 7f44eb48..8611e2ed 100644 --- a/daemon/gdm-manager.c +++ b/daemon/gdm-manager.c @@ -979,7 +979,7 @@ on_reauthentication_client_rejected (GdmSession *session, if (pid != pid_of_client) { const char *session_id; - char *client_session_id; + g_autofree char *client_session_id = NULL; /* rejected client isn't the process that started the * transient reauthentication session. If it's not even from the @@ -1506,7 +1506,7 @@ on_display_status_changed (GdmDisplay *display, { int status; int display_number = -1; - char *session_type = NULL; + g_autofree char *session_type = NULL; gboolean doing_initial_setup = FALSE; #ifdef WITH_PLYMOUTH gboolean display_is_local = FALSE; @@ -1531,14 +1531,13 @@ on_display_status_changed (GdmDisplay *display, case GDM_DISPLAY_MANAGED: if ((display_number == -1 && status == GDM_DISPLAY_PREPARED) || (display_number != -1 && status == GDM_DISPLAY_MANAGED)) { - char *session_class; + g_autofree char *session_class = NULL; g_object_get (display, "session-class", &session_class, NULL); if (g_strcmp0 (session_class, "greeter") == 0) set_up_session (manager, display); - g_free (session_class); } break; case GDM_DISPLAY_FAILED: @@ -1609,14 +1608,14 @@ start_user_session (GdmManager *manager, display = get_display_for_user_session (operation->session); if (display != NULL) { - char *auth_file; - const char *username; gboolean is_connected = FALSE; g_object_get (G_OBJECT (display), "is-connected", &is_connected, NULL); if (is_connected) { - auth_file = NULL; + char *auth_file = NULL; + const char *username; + username = gdm_session_get_username (operation->session); gdm_display_add_user_authorization (display, username, diff --git a/daemon/gdm-server.c b/daemon/gdm-server.c index ebd0a78b..e9ed14ca 100644 --- a/daemon/gdm-server.c +++ b/daemon/gdm-server.c @@ -428,15 +428,9 @@ gdm_server_setup_journal_fds (GdmServer *server) #ifdef ENABLE_SYSTEMD_JOURNAL if (sd_booted () > 0) { int out, err; - const char *prefix = "gdm-Xorg-"; - char *identifier; - gsize size; + g_autofree char *identifier = NULL; - size = strlen (prefix) + strlen (server->display_name) + 1; - identifier = g_alloca (size); - strcpy (identifier, prefix); - strcat (identifier, server->display_name); - identifier[size - 1] = '\0'; + identifier = g_strdup_printf("gdm-Xorg-%s", server->display_name); out = sd_journal_stream_fd (identifier, LOG_INFO, FALSE); if (out < 0) @@ -816,8 +810,7 @@ gdm_server_stop (GdmServer *server) g_debug ("GdmServer: Stopping server"); res = gdm_signal_pid (server->pid, SIGTERM); - if (res < 0) { - } else { + if (res >= 0) { server_died (server); } diff --git a/daemon/gdm-session-linux-auditor.c b/daemon/gdm-session-linux-auditor.c index 0390adea..6b2e554d 100644 --- a/daemon/gdm-session-linux-auditor.c +++ b/daemon/gdm-session-linux-auditor.c @@ -54,9 +54,9 @@ log_user_message (GdmSessionAuditor *auditor, { GdmSessionLinuxAuditor *linux_auditor; char buf[512]; - char *username; - char *hostname; - char *display_device; + g_autofree char *username = NULL; + g_autofree char *hostname = NULL; + g_autofree char *display_device = NULL; struct passwd *pw; linux_auditor = GDM_SESSION_LINUX_AUDITOR (auditor); @@ -83,10 +83,6 @@ log_user_message (GdmSessionAuditor *auditor, buf, hostname, NULL, display_device, result); } - - g_free (username); - g_free (hostname); - g_free (display_device); } static void diff --git a/daemon/gdm-session-record.c b/daemon/gdm-session-record.c index ca2fc2bc..f913dee3 100644 --- a/daemon/gdm-session-record.c +++ b/daemon/gdm-session-record.c @@ -114,11 +114,9 @@ record_set_host (UTMP *u, const char *x11_display_name, const char *host_name) { - char *hostname; + g_autofree char *hostname = NULL; #if defined(HAVE_UT_UT_HOST) - hostname = NULL; - /* * Set ut_host to hostname:$DISPLAY if remote, otherwise set * to $DISPLAY @@ -137,7 +135,6 @@ record_set_host (UTMP *u, #ifdef HAVE_UT_UT_SYSLEN u->ut_syslen = MIN (strlen (hostname), sizeof (u->ut_host)); #endif - g_free (hostname); } #endif } diff --git a/daemon/gdm-session-settings.c b/daemon/gdm-session-settings.c index baa08f5f..8a09381c 100644 --- a/daemon/gdm-session-settings.c +++ b/daemon/gdm-session-settings.c @@ -338,27 +338,19 @@ gboolean gdm_session_settings_load (GdmSessionSettings *settings, const char *username) { - ActUser *old_user; - g_return_val_if_fail (GDM_IS_SESSION_SETTINGS (settings), FALSE); g_return_val_if_fail (username != NULL, FALSE); g_return_val_if_fail (!gdm_session_settings_is_loaded (settings), FALSE); if (settings->user != NULL) { - old_user = settings->user; - g_signal_handlers_disconnect_by_func (G_OBJECT (settings->user), G_CALLBACK (on_user_is_loaded_changed), settings); - } else { - old_user = NULL; } settings->user = act_user_manager_get_user (settings->user_manager, username); - g_clear_object (&old_user); - if (!act_user_is_loaded (settings->user)) { g_signal_connect (settings->user, "notify::is-loaded", @@ -376,7 +368,7 @@ gboolean gdm_session_settings_save (GdmSessionSettings *settings, const char *username) { - ActUser *user; + g_autoptr(ActUser) user = NULL; g_return_val_if_fail (GDM_IS_SESSION_SETTINGS (settings), FALSE); g_return_val_if_fail (username != NULL, FALSE); @@ -387,7 +379,6 @@ gdm_session_settings_save (GdmSessionSettings *settings, if (!act_user_is_loaded (user)) { - g_object_unref (user); return FALSE; } @@ -410,12 +401,10 @@ gdm_session_settings_save (GdmSessionSettings *settings, if (error != NULL) { g_debug ("GdmSessionSettings: Could not locally cache remote user: %s", error->message); - g_object_unref (user); return FALSE; } } - g_object_unref (user); return TRUE; } diff --git a/daemon/gdm-session-worker-job.c b/daemon/gdm-session-worker-job.c index 27878c02..7466d1fc 100644 --- a/daemon/gdm-session-worker-job.c +++ b/daemon/gdm-session-worker-job.c @@ -172,7 +172,7 @@ static void copy_environment_to_hash (GdmSessionWorkerJob *job, GHashTable *hash) { - char **environment; + g_auto(GStrv) environment = NULL; gint i; if (job->environment != NULL) { @@ -182,58 +182,50 @@ copy_environment_to_hash (GdmSessionWorkerJob *job, } for (i = 0; environment[i]; i++) { - char **parts; + g_auto(GStrv) parts = NULL; parts = g_strsplit (environment[i], "=", 2); if (parts[0] != NULL && parts[1] != NULL) { g_hash_table_insert (hash, g_strdup (parts[0]), g_strdup (parts[1])); } - - g_strfreev (parts); } - - g_strfreev (environment); } static GPtrArray * get_job_arguments (GdmSessionWorkerJob *job, const char *name) { - GPtrArray *args; - GError *error; - char **argv; + g_autoptr(GPtrArray) args = NULL; + g_autoptr(GError) error = NULL; + g_auto(GStrv) argv = NULL; int i; args = NULL; - argv = NULL; - error = NULL; if (!g_shell_parse_argv (job->command, NULL, &argv, &error)) { g_warning ("Could not parse command: %s", error->message); - g_error_free (error); - goto out; + return NULL; } - args = g_ptr_array_new (); + args = g_ptr_array_new_with_free_func (g_free); g_ptr_array_add (args, g_strdup (argv[0])); g_ptr_array_add (args, g_strdup (name)); for (i = 1; argv[i] != NULL; i++) { g_ptr_array_add (args, g_strdup (argv[i])); } - g_strfreev (argv); g_ptr_array_add (args, NULL); -out: - return args; + + return g_steal_pointer (&args); } static GPtrArray * get_job_environment (GdmSessionWorkerJob *job) { - GPtrArray *env; - GHashTable *hash; + g_autoptr(GPtrArray) env = NULL; + g_autoptr(GHashTable) hash = NULL; - env = g_ptr_array_new (); + env = g_ptr_array_new_with_free_func (g_free); /* create a hash table of current environment, then update keys has necessary */ hash = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); @@ -246,21 +238,20 @@ get_job_environment (GdmSessionWorkerJob *job) } g_hash_table_foreach (hash, (GHFunc)listify_hash, env); - g_hash_table_destroy (hash); g_ptr_array_add (env, NULL); - return env; + return g_steal_pointer (&env); } static gboolean gdm_session_worker_job_spawn (GdmSessionWorkerJob *session_worker_job, const char *name) { - GError *error; + g_autoptr(GError) error = NULL; + g_autoptr(GPtrArray) args = NULL; + g_autoptr(GPtrArray) env = NULL; gboolean ret; - GPtrArray *args; - GPtrArray *env; g_debug ("GdmSessionWorkerJob: Running session_worker_job process: %s %s", name != NULL? name : "", session_worker_job->command); @@ -272,7 +263,6 @@ gdm_session_worker_job_spawn (GdmSessionWorkerJob *session_worker_job, } env = get_job_environment (session_worker_job); - error = NULL; ret = g_spawn_async_with_pipes (NULL, (char **) args->pdata, (char **)env->pdata, @@ -285,17 +275,10 @@ gdm_session_worker_job_spawn (GdmSessionWorkerJob *session_worker_job, NULL, &error); - g_ptr_array_foreach (args, (GFunc)g_free, NULL); - g_ptr_array_free (args, TRUE); - - g_ptr_array_foreach (env, (GFunc)g_free, NULL); - g_ptr_array_free (env, TRUE); - if (! ret) { g_warning ("Could not start command '%s': %s", session_worker_job->command, error->message); - g_error_free (error); } else { g_debug ("GdmSessionWorkerJob: : SessionWorkerJob on pid %d", (int)session_worker_job->pid); } diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c index b062fdd7..13e259c3 100644 --- a/daemon/gdm-session-worker.c +++ b/daemon/gdm-session-worker.c @@ -439,10 +439,9 @@ attempt_to_load_user_settings (GdmSessionWorker *worker, static void gdm_session_worker_update_username (GdmSessionWorker *worker) { - char *username; + g_autofree char *username = NULL; gboolean res; - username = NULL; res = gdm_session_worker_get_username (worker, &username); if (res) { g_debug ("GdmSessionWorker: old-username='%s' new-username='%s'", @@ -455,13 +454,12 @@ gdm_session_worker_update_username (GdmSessionWorker *worker) if ((worker->username == username) || ((worker->username != NULL) && (username != NULL) && (strcmp (worker->username, username) == 0))) - goto out; + return; g_debug ("GdmSessionWorker: setting username to '%s'", username); g_free (worker->username); - worker->username = username; - username = NULL; + worker->username = g_steal_pointer (&username); gdm_dbus_worker_emit_username_changed (GDM_DBUS_WORKER (worker), worker->username); @@ -476,9 +474,6 @@ gdm_session_worker_update_username (GdmSessionWorker *worker) attempt_to_load_user_settings (worker, worker->username); } } - - out: - g_free (username); } static gboolean @@ -536,9 +531,9 @@ gdm_session_worker_ask_list_of_choices (GdmSessionWorker *worker, GdmChoiceList *list, char **answerp) { + g_autoptr(GVariant) choices_as_variant = NULL; + g_autoptr(GError) error = NULL; GVariantBuilder builder; - GVariant *choices_as_variant; - GError *error = NULL; gboolean res; size_t i; @@ -569,7 +564,6 @@ gdm_session_worker_ask_list_of_choices (GdmSessionWorker *worker, if (! res) { g_debug ("GdmSessionWorker: list request failed: %s", error->message); - g_clear_error (&error); } else { g_debug ("GdmSessionWorker: user selected '%s'", *answerp); } @@ -635,7 +629,7 @@ gdm_session_worker_process_extended_pam_message (GdmSessionWorker *work static char * convert_to_utf8 (const char *str) { - char *utf8; + g_autofree char *utf8 = NULL; utf8 = g_locale_to_utf8 (str, -1, NULL, @@ -657,7 +651,7 @@ convert_to_utf8 (const char *str) } } - return utf8; + return g_steal_pointer (&utf8); } static gboolean @@ -665,10 +659,10 @@ gdm_session_worker_process_pam_message (GdmSessionWorker *worker, const struct pam_message *query, char **response) { - char *user_answer; + g_autofree char *user_answer = NULL; + g_autofree char *utf8_msg = NULL; + g_autofree char *msg = NULL; gboolean res; - char *utf8_msg; - char *msg; if (response != NULL) { *response = NULL; @@ -689,7 +683,6 @@ gdm_session_worker_process_pam_message (GdmSessionWorker *worker, worker->cancelled = FALSE; worker->timed_out = FALSE; - user_answer = NULL; switch (query->msg_style) { case PAM_PROMPT_ECHO_ON: res = gdm_session_worker_ask_question (worker, utf8_msg, &user_answer); @@ -707,7 +700,6 @@ gdm_session_worker_process_pam_message (GdmSessionWorker *worker, case PAM_RADIO_TYPE: msg = g_strdup_printf ("%s (yes/no)", utf8_msg); res = gdm_session_worker_ask_question (worker, msg, &user_answer); - g_free (msg); break; #endif default: @@ -733,15 +725,12 @@ gdm_session_worker_process_pam_message (GdmSessionWorker *worker, } memset (user_answer, '\0', strlen (user_answer)); - g_free (user_answer); g_debug ("GdmSessionWorker: trying to get updated username"); res = TRUE; } - g_free (utf8_msg); - return res; } @@ -1385,8 +1374,8 @@ gdm_session_worker_set_environment_variable (GdmSessionWorker *worker, const char *key, const char *value) { + g_autofree char *environment_entry = NULL; int error_code; - char *environment_entry; if (value != NULL) { environment_entry = g_strdup_printf ("%s=%s", key, value); @@ -1404,7 +1393,6 @@ gdm_session_worker_set_environment_variable (GdmSessionWorker *worker, pam_strerror (worker->pam_handle, error_code)); } g_debug ("GdmSessionWorker: Set PAM environment variable: '%s'", environment_entry); - g_free (environment_entry); } static char * @@ -1575,19 +1563,16 @@ static gboolean gdm_session_worker_accredit_user (GdmSessionWorker *worker, GError **error) { + g_autofree char *shell = NULL; + g_autofree char *home = NULL; gboolean ret; gboolean res; uid_t uid; gid_t gid; - char *shell; - char *home; int error_code; ret = FALSE; - home = NULL; - shell = NULL; - if (worker->username == NULL) { g_debug ("GdmSessionWorker: Username not set"); error_code = PAM_USER_UNKNOWN; @@ -1664,8 +1649,6 @@ gdm_session_worker_accredit_user (GdmSessionWorker *worker, ret = TRUE; out: - g_free (home); - g_free (shell); if (ret) { g_debug ("GdmSessionWorker: state ACCREDITED"); ret = TRUE; @@ -1828,8 +1811,8 @@ rotate_logs (const char *path, int i; for (i = n_copies - 1; i > 0; i--) { - char *name_n; - char *name_n1; + g_autofree char *name_n = NULL; + g_autofree char *name_n1 = NULL; name_n = g_strdup_printf ("%s.%d", path, i); if (i > 1) { @@ -1840,9 +1823,6 @@ rotate_logs (const char *path, g_unlink (name_n); g_rename (name_n1, name_n); - - g_free (name_n1); - g_free (name_n); } g_unlink (path); @@ -1858,20 +1838,18 @@ _open_program_session_log (const char *filename) fd = g_open (filename, O_WRONLY | O_APPEND | O_CREAT, 0600); if (fd < 0) { - char *temp_name; + g_autofree char *temp_name = NULL; temp_name = g_strdup_printf ("%s.XXXXXXXX", filename); fd = g_mkstemp (temp_name); if (fd < 0) { - g_free (temp_name); goto out; } g_warning ("session log '%s' is not appendable, logging session to '%s' instead.\n", filename, temp_name); - g_free (temp_name); } else { if (ftruncate (fd, 0) < 0) { close (fd); @@ -1900,36 +1878,32 @@ static int _open_user_session_log (const char *dir) { int fd; - char *filename; + g_autofree char *filename = NULL; filename = g_build_filename (dir, GDM_SESSION_LOG_FILENAME, NULL); if (g_access (dir, R_OK | W_OK | X_OK) == 0 && _is_loggable_file (filename)) { - char *filename_old; + g_autofree char *filename_old = NULL; filename_old = g_strdup_printf ("%s.old", filename); g_rename (filename, filename_old); - g_free (filename_old); } fd = g_open (filename, O_RDWR | O_APPEND | O_CREAT, 0600); if (fd < 0) { - char *temp_name; + g_autofree char *temp_name = NULL; temp_name = g_strdup_printf ("%s.XXXXXXXX", filename); fd = g_mkstemp (temp_name); if (fd < 0) { - g_free (temp_name); goto out; } g_warning ("session log '%s' is not appendable, logging session to '%s' instead.\n", filename, temp_name); - g_free (filename); - filename = temp_name; } else { if (ftruncate (fd, 0) < 0) { close (fd); @@ -1944,10 +1918,7 @@ _open_user_session_log (const char *dir) goto out; } - out: - g_free (filename); - if (fd < 0) { g_warning ("unable to log session"); fd = g_open ("/dev/null", O_RDWR); @@ -2014,8 +1985,8 @@ gdm_session_worker_start_session (GdmSessionWorker *worker, } if (session_pid == 0) { + g_autofree char *home_dir = NULL; const char * const * environment; - char *home_dir; int stdin_fd = -1, stdout_fd = -1, stderr_fd = -1; gboolean has_journald = FALSE, needs_controlling_terminal = FALSE; /* Leak the TTY into the session as stdin so that it stays open @@ -2093,8 +2064,8 @@ gdm_session_worker_start_session (GdmSessionWorker *worker, #endif if (!has_journald && !worker->is_program_session) { if (home_dir != NULL && home_dir[0] != '\0') { - char *cache_dir; - char *log_dir; + g_autofree char *cache_dir = NULL; + g_autofree char *log_dir = NULL; cache_dir = gdm_session_worker_get_environment_variable (worker, "XDG_CACHE_HOME"); if (cache_dir == NULL || cache_dir[0] == '\0') { @@ -2102,7 +2073,6 @@ gdm_session_worker_start_session (GdmSessionWorker *worker, } log_dir = g_build_filename (cache_dir, "gdm", NULL); - g_free (cache_dir); if (g_mkdir_with_parents (log_dir, S_IRWXU) == 0) { stdout_fd = _open_user_session_log (log_dir); @@ -2111,13 +2081,11 @@ gdm_session_worker_start_session (GdmSessionWorker *worker, stdout_fd = open ("/dev/null", O_RDWR); stderr_fd = dup (stdout_fd); } - g_free (log_dir); } else { stdout_fd = open ("/dev/null", O_RDWR); stderr_fd = dup (stdout_fd); } } - g_free (home_dir); if (stdout_fd != -1) { dup2 (stdout_fd, STDOUT_FILENO); @@ -2290,31 +2258,31 @@ set_up_for_current_vt (GdmSessionWorker *worker, #ifdef PAM_XAUTHDATA struct pam_xauth_data *pam_xauth; #endif - int error_code = PAM_SUCCESS; - char *pam_tty; + g_autofree char *pam_tty = NULL; /* set TTY */ pam_tty = _get_tty_for_pam (worker->x11_display_name, worker->display_device); if (pam_tty != NULL && pam_tty[0] != '\0') { - error_code = pam_set_item (worker->pam_handle, PAM_TTY, pam_tty); + int error_code; + error_code = pam_set_item (worker->pam_handle, PAM_TTY, pam_tty); if (error_code != PAM_SUCCESS) { g_debug ("error informing authentication system of user's console %s: %s", pam_tty, pam_strerror (worker->pam_handle, error_code)); - g_free (pam_tty); g_set_error_literal (error, GDM_SESSION_WORKER_ERROR, GDM_SESSION_WORKER_ERROR_AUTHENTICATING, ""); - goto out; + return FALSE; } } - g_free (pam_tty); #ifdef PAM_XDISPLAY /* set XDISPLAY */ if (worker->x11_display_name != NULL && worker->x11_display_name[0] != '\0') { + int error_code; + error_code = pam_set_item (worker->pam_handle, PAM_XDISPLAY, worker->x11_display_name); if (error_code != PAM_SUCCESS) { g_debug ("error informing authentication system of display string %s: %s", @@ -2324,7 +2292,7 @@ set_up_for_current_vt (GdmSessionWorker *worker, GDM_SESSION_WORKER_ERROR, GDM_SESSION_WORKER_ERROR_AUTHENTICATING, ""); - goto out; + return FALSE; } } #endif @@ -2332,6 +2300,8 @@ set_up_for_current_vt (GdmSessionWorker *worker, /* set XAUTHDATA */ pam_xauth = _get_xauth_for_pam (worker->x11_authority_file); if (pam_xauth != NULL) { + int error_code; + error_code = pam_set_item (worker->pam_handle, PAM_XAUTHDATA, pam_xauth); if (error_code != PAM_SUCCESS) { g_debug ("error informing authentication system of display string %s: %s", @@ -2343,7 +2313,7 @@ set_up_for_current_vt (GdmSessionWorker *worker, GDM_SESSION_WORKER_ERROR, GDM_SESSION_WORKER_ERROR_AUTHENTICATING, ""); - goto out; + return FALSE; } g_free (pam_xauth); } @@ -2357,17 +2327,15 @@ set_up_for_current_vt (GdmSessionWorker *worker, } return TRUE; -out: - return FALSE; } static gboolean gdm_session_worker_open_session (GdmSessionWorker *worker, GError **error) { + g_autofree char *session_id = NULL; int error_code; int flags; - char *session_id = NULL; g_assert (worker->state == GDM_SESSION_WORKER_STATE_ACCOUNT_DETAILS_SAVED); g_assert (geteuid () == 0); @@ -2413,7 +2381,7 @@ gdm_session_worker_open_session (GdmSessionWorker *worker, if (session_id != NULL) { g_free (worker->session_id); - worker->session_id = session_id; + worker->session_id = g_steal_pointer (&session_id); } out: @@ -2548,50 +2516,46 @@ gdm_session_worker_handle_set_language_name (GdmDBusWorker *object, static void on_saved_language_name_read (GdmSessionWorker *worker) { - char *language_name; + g_autofree char *language_name = NULL; language_name = gdm_session_settings_get_language_name (worker->user_settings); g_debug ("GdmSessionWorker: Saved language is %s", language_name); gdm_dbus_worker_emit_saved_language_name_read (GDM_DBUS_WORKER (worker), language_name); - g_free (language_name); } static void on_saved_session_name_read (GdmSessionWorker *worker) { - char *session_name; + g_autofree char *session_name = NULL; session_name = gdm_session_settings_get_session_name (worker->user_settings); g_debug ("GdmSessionWorker: Saved session is %s", session_name); gdm_dbus_worker_emit_saved_session_name_read (GDM_DBUS_WORKER (worker), session_name); - g_free (session_name); } static void on_saved_session_type_read (GdmSessionWorker *worker) { - char *session_type; + g_autofree char *session_type = NULL; session_type = gdm_session_settings_get_session_type (worker->user_settings); g_debug ("GdmSessionWorker: Saved session type is %s", session_type); gdm_dbus_worker_emit_saved_session_type_read (GDM_DBUS_WORKER (worker), session_type); - g_free (session_type); } static void do_setup (GdmSessionWorker *worker) { - GError *error; + g_autoptr(GError) error = NULL; gboolean res; - error = NULL; res = gdm_session_worker_initialize_pam (worker, worker->service, (const char **) worker->extensions, @@ -2607,7 +2571,8 @@ do_setup (GdmSessionWorker *worker) if (res) { g_dbus_method_invocation_return_value (worker->pending_invocation, NULL); } else { - g_dbus_method_invocation_take_error (worker->pending_invocation, error); + g_dbus_method_invocation_take_error (worker->pending_invocation, + g_steal_pointer (&error)); } worker->pending_invocation = NULL; } @@ -2615,12 +2580,11 @@ do_setup (GdmSessionWorker *worker) static void do_authenticate (GdmSessionWorker *worker) { - GError *error; + g_autoptr(GError) error = NULL; gboolean res; /* find out who the user is and ensure they are who they say they are */ - error = NULL; res = gdm_session_worker_authenticate_user (worker, worker->password_is_required, &error); @@ -2636,7 +2600,8 @@ do_authenticate (GdmSessionWorker *worker) gdm_dbus_worker_complete_authenticate (GDM_DBUS_WORKER (worker), worker->pending_invocation); } else { g_debug ("GdmSessionWorker: Unable to verify user"); - g_dbus_method_invocation_take_error (worker->pending_invocation, error); + g_dbus_method_invocation_take_error (worker->pending_invocation, + g_steal_pointer (&error)); } worker->pending_invocation = NULL; } @@ -2644,19 +2609,19 @@ do_authenticate (GdmSessionWorker *worker) static void do_authorize (GdmSessionWorker *worker) { - GError *error; + g_autoptr(GError) error = NULL; gboolean res; /* make sure the user is allowed to log in to this system */ - error = NULL; res = gdm_session_worker_authorize_user (worker, worker->password_is_required, &error); if (res) { gdm_dbus_worker_complete_authorize (GDM_DBUS_WORKER (worker), worker->pending_invocation); } else { - g_dbus_method_invocation_take_error (worker->pending_invocation, error); + g_dbus_method_invocation_take_error (worker->pending_invocation, + g_steal_pointer (&error)); } worker->pending_invocation = NULL; } @@ -2664,18 +2629,18 @@ do_authorize (GdmSessionWorker *worker) static void do_accredit (GdmSessionWorker *worker) { - GError *error; + g_autoptr(GError) error = NULL; gboolean res; /* get kerberos tickets, setup group lists, etc */ - error = NULL; res = gdm_session_worker_accredit_user (worker, &error); if (res) { gdm_dbus_worker_complete_establish_credentials (GDM_DBUS_WORKER (worker), worker->pending_invocation); } else { - g_dbus_method_invocation_take_error (worker->pending_invocation, error); + g_dbus_method_invocation_take_error (worker->pending_invocation, + g_steal_pointer (&error)); } worker->pending_invocation = NULL; } @@ -2756,10 +2721,9 @@ do_save_account_details_when_ready (GdmSessionWorker *worker) static void do_open_session (GdmSessionWorker *worker) { - GError *error; + g_autoptr(GError) error = NULL; gboolean res; - error = NULL; res = gdm_session_worker_open_session (worker, &error); if (res) { @@ -2770,7 +2734,8 @@ do_open_session (GdmSessionWorker *worker) gdm_dbus_worker_complete_open (GDM_DBUS_WORKER (worker), worker->pending_invocation, session_id); } else { - g_dbus_method_invocation_take_error (worker->pending_invocation, error); + g_dbus_method_invocation_take_error (worker->pending_invocation, + g_steal_pointer (&error)); } worker->pending_invocation = NULL; } @@ -2778,17 +2743,17 @@ do_open_session (GdmSessionWorker *worker) static void do_start_session (GdmSessionWorker *worker) { - GError *error; + g_autoptr(GError) error = NULL; gboolean res; - error = NULL; res = gdm_session_worker_start_session (worker, &error); if (res) { gdm_dbus_worker_complete_start_program (GDM_DBUS_WORKER (worker), worker->pending_invocation, worker->child_pid); } else { - g_dbus_method_invocation_take_error (worker->pending_invocation, error); + g_dbus_method_invocation_take_error (worker->pending_invocation, + g_steal_pointer (&error)); } worker->pending_invocation = NULL; } @@ -2967,11 +2932,11 @@ gdm_session_worker_handle_open (GdmDBusWorker *object, static char ** filter_extensions (const char * const *extensions) { + g_autoptr(GPtrArray) array = NULL; + g_auto(GStrv) filtered_extensions = NULL; size_t i, j; - GPtrArray *array = NULL; - char **filtered_extensions = NULL; - array = g_ptr_array_new (); + array = g_ptr_array_new_with_free_func (g_free); for (i = 0; extensions[i] != NULL; i++) { for (j = 0; gdm_supported_pam_extensions[j] != NULL; j++) { @@ -2985,9 +2950,7 @@ filter_extensions (const char * const *extensions) filtered_extensions = g_strdupv ((char **) array->pdata); - g_ptr_array_free (array, TRUE); - - return filtered_extensions; + return g_steal_pointer (&filtered_extensions); } static gboolean @@ -3214,7 +3177,7 @@ gdm_session_worker_handle_start_program (GdmDBusWorker *object, const char *text) { GdmSessionWorker *worker = GDM_SESSION_WORKER (object); - GError *parse_error = NULL; + g_autoptr(GError) parse_error = NULL; validate_state_change (worker, invocation, GDM_SESSION_WORKER_STATE_SESSION_STARTED); if (worker->is_reauth_session) { @@ -3229,7 +3192,8 @@ gdm_session_worker_handle_start_program (GdmDBusWorker *object, g_clear_pointer (&worker->arguments, g_strfreev); if (! g_shell_parse_argv (text, NULL, &worker->arguments, &parse_error)) { - g_dbus_method_invocation_take_error (invocation, parse_error); + g_dbus_method_invocation_take_error (invocation, + g_steal_pointer (&parse_error)); return TRUE; } @@ -3401,7 +3365,7 @@ gdm_session_worker_constructor (GType type, GObjectConstructParam *construct_properties) { GdmSessionWorker *worker; - GError *error; + g_autoptr(GError) error = NULL; worker = GDM_SESSION_WORKER (G_OBJECT_CLASS (gdm_session_worker_parent_class)->constructor (type, n_construct_properties, @@ -3409,7 +3373,6 @@ gdm_session_worker_constructor (GType type, g_debug ("GdmSessionWorker: connecting to address: %s", worker->server_address); - error = NULL; worker->connection = g_dbus_connection_new_for_address_sync (worker->server_address, G_DBUS_CONNECTION_FLAGS_AUTHENTICATION_CLIENT, NULL, @@ -3417,8 +3380,6 @@ gdm_session_worker_constructor (GType type, &error); if (worker->connection == NULL) { g_warning ("error opening connection: %s", error->message); - g_clear_error (&error); - exit (EXIT_FAILURE); } @@ -3430,8 +3391,6 @@ gdm_session_worker_constructor (GType type, &error)); if (worker->manager == NULL) { g_warning ("error creating session proxy: %s", error->message); - g_clear_error (&error); - exit (EXIT_FAILURE); } diff --git a/daemon/gdm-session.c b/daemon/gdm-session.c index 4b8ba156..0b438651 100644 --- a/daemon/gdm-session.c +++ b/daemon/gdm-session.c @@ -3187,7 +3187,7 @@ gdm_session_get_display_seat_id (GdmSession *self) { g_return_val_if_fail (GDM_IS_SESSION (self), NULL); - return g_strdup (self->display_seat_id); + return self->display_seat_id; } const char * |