From 05a049cc44d1c7eadfab104eea15b13f0207ab40 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Thu, 31 Oct 2013 00:58:25 -0400 Subject: [PATCH] systemd_pam: treat debug as debug=1 and parse all params systemd_pam would ignore all params after the first invalid one. Instead ignore just this one, and parse the rest. There's just one now, but as a matter of principle ;) Also, allow debug as an alias for debug=1, and don't treat invalid debug= options as fatal. --- man/pam_systemd.xml | 7 ++++--- src/login/pam-module.c | 33 ++++++++++++--------------------- 2 files changed, 16 insertions(+), 24 deletions(-) diff --git a/man/pam_systemd.xml b/man/pam_systemd.xml index 0e25a4ac9..d3edc32d2 100644 --- a/man/pam_systemd.xml +++ b/man/pam_systemd.xml @@ -131,10 +131,11 @@ - + - Takes a boolean - argument. If yes, the module will log + Takes an optional + boolean argument. If yes or without + the argument, the module will log debugging information as it operates. diff --git a/src/login/pam-module.c b/src/login/pam-module.c index 81ec15f93..3b6b163a4 100644 --- a/src/login/pam-module.c +++ b/src/login/pam-module.c @@ -51,30 +51,26 @@ static int parse_argv(pam_handle_t *handle, assert(argc >= 0); assert(argc == 0 || argv); - for (i = 0; i < (unsigned) argc; i++) { - int k; - + for (i = 0; i < (unsigned) argc; i++) if (startswith(argv[i], "class=")) { - if (class) *class = argv[i] + 6; - } else if (startswith(argv[i], "debug=")) { - k = parse_boolean(argv[i] + 6); + } else if (streq(argv[i], "debug")) { + if (debug) + *debug = true; - if (k < 0) { - pam_syslog(handle, LOG_ERR, "Failed to parse debug= argument."); - return k; - } + } else if (startswith(argv[i], "debug=")) { + int k; - if (debug) + k = parse_boolean(argv[i] + 6); + if (k < 0) + pam_syslog(handle, LOG_WARNING, "Failed to parse debug= argument, ignoring."); + else if (debug) *debug = k; - } else { + } else pam_syslog(handle, LOG_WARNING, "Unknown parameter '%s', ignoring", argv[i]); - return 0; - } - } return 0; } @@ -226,7 +222,7 @@ _public_ PAM_EXTERN int pam_sm_open_session( pam_get_item(handle, PAM_SERVICE, (const void**) &service); if (streq_ptr(service, "systemd-user")) { - char *p, *rt = NULL; + _cleanup_free_ char *p = NULL, *rt = NULL; if (asprintf(&p, "/run/systemd/users/%lu", (unsigned long) pw->pw_uid) < 0) { r = PAM_BUF_ERR; @@ -236,18 +232,13 @@ _public_ PAM_EXTERN int pam_sm_open_session( r = parse_env_file(p, NEWLINE, "RUNTIME", &rt, NULL); - free(p); - if (r < 0 && r != -ENOENT) { r = PAM_SESSION_ERR; - free(rt); goto finish; } if (rt) { r = pam_misc_setenv(handle, "XDG_RUNTIME_DIR", rt, 0); - free(rt); - if (r != PAM_SUCCESS) { pam_syslog(handle, LOG_ERR, "Failed to set runtime dir."); goto finish; -- 2.30.2