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;
}
const char *username, *id, *object_path, *runtime_path, *service = NULL, *tty = NULL, *display = NULL, *remote_user = NULL, *remote_host = NULL, *seat = NULL, *type = NULL, *class = NULL, *class_pam = NULL, *cvtnr = NULL;
DBusError error;
uint32_t uid, pid;
- DBusMessageIter iter;
+ DBusMessageIter iter, sub;
int session_fd = -1;
DBusConnection *bus = NULL;
DBusMessage *m = NULL, *reply = NULL;
dbus_error_init(&error);
- /* pam_syslog(handle, LOG_INFO, "pam-systemd initializing"); */
+ if (debug)
+ pam_syslog(handle, LOG_INFO, "pam-systemd initializing");
/* Make this a NOP on non-logind systems */
if (!logind_running())
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;
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;
dbus_message_iter_init_append(m, &iter);
+ if (!dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, "(sv)", &sub) ||
+ !dbus_message_iter_close_container(&iter, &sub)) {
+ pam_syslog(handle, LOG_ERR, "Could not attach parameters to message.");
+ r = PAM_BUF_ERR;
+ goto finish;
+ }
+
if (debug)
pam_syslog(handle, LOG_DEBUG, "Asking logind to create session: "
"uid=%u pid=%u service=%s type=%s class=%s seat=%s vtnr=%u tty=%s display=%s remote=%s remote_user=%s remote_host=%s",