From 0567131f52bb7bb232682af9452be4016600fb97 Mon Sep 17 00:00:00 2001 From: Alessandro Bono Date: Wed, 9 Nov 2022 12:26:00 +0100 Subject: gdm-session-worker: Use g_auto* --- daemon/gdm-session-worker.c | 160 +++++++++++++++++--------------------------- 1 file changed, 60 insertions(+), 100 deletions(-) (limited to 'daemon/gdm-session-worker.c') diff --git a/daemon/gdm-session-worker.c b/daemon/gdm-session-worker.c index c179687d..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 @@ -634,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, @@ -656,7 +651,7 @@ convert_to_utf8 (const char *str) } } - return utf8; + return g_steal_pointer (&utf8); } static gboolean @@ -664,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; @@ -688,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); @@ -706,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: @@ -732,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; } @@ -1384,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); @@ -1403,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 * @@ -1574,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; @@ -1663,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; @@ -1827,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) { @@ -1839,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); @@ -1857,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); @@ -1899,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); @@ -1943,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); @@ -2013,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 @@ -2092,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') { @@ -2101,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); @@ -2110,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); @@ -2289,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", @@ -2323,7 +2292,7 @@ set_up_for_current_vt (GdmSessionWorker *worker, GDM_SESSION_WORKER_ERROR, GDM_SESSION_WORKER_ERROR_AUTHENTICATING, ""); - goto out; + return FALSE; } } #endif @@ -2331,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", @@ -2342,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); } @@ -2356,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); @@ -2412,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: @@ -2547,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, @@ -2606,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; } @@ -2614,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); @@ -2635,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; } @@ -2643,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; } @@ -2663,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; } @@ -2755,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) { @@ -2769,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; } @@ -2777,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; } @@ -2966,9 +2932,9 @@ 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_with_free_func (g_free); @@ -2984,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 @@ -3213,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) { @@ -3228,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; } @@ -3400,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, @@ -3408,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, @@ -3416,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); } @@ -3429,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); } -- cgit v1.2.1