summaryrefslogtreecommitdiff
path: root/daemon
diff options
context:
space:
mode:
authorAlessandro Bono <alessandro.bono369@gmail.com>2022-11-09 12:26:00 +0100
committerRay Strode <halfline@gmail.com>2023-04-28 19:41:28 +0000
commit0567131f52bb7bb232682af9452be4016600fb97 (patch)
tree5a064312bec57337b3ade015bf4b92bcc06b5469 /daemon
parent5e7cc22db4623799d92fa367ebac16c7acf26d0b (diff)
downloadgdm-0567131f52bb7bb232682af9452be4016600fb97.tar.gz
gdm-session-worker: Use g_auto*
Diffstat (limited to 'daemon')
-rw-r--r--daemon/gdm-session-worker.c160
1 files changed, 60 insertions, 100 deletions
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);
}