From 36ad5e6b2fd030e75cf82f8e1d1fc37038b8f04f28bffdfc77db7189ad87e3d7 Mon Sep 17 00:00:00 2001 From: Sascha Peilicke Date: Thu, 18 Aug 2011 07:53:20 +0000 Subject: [PATCH] Accepting request 79121 from Linux-PAM - Add pam_systemd.patch: Add pam_systemd support (forwarded request 79119 from fcrozat) OBS-URL: https://build.opensuse.org/request/show/79121 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/pam-config?expand=0&rev=47 --- pam-config.changes | 5 ++ pam-config.spec | 4 ++ pam_systemd.patch | 166 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 175 insertions(+) create mode 100644 pam_systemd.patch diff --git a/pam-config.changes b/pam-config.changes index 7c5bdd5..66e0b84 100644 --- a/pam-config.changes +++ b/pam-config.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Wed Aug 17 09:51:02 UTC 2011 - fcrozat@suse.com + +- Add pam_systemd.patch: Add pam_systemd support + ------------------------------------------------------------------- Tue May 10 12:57:34 CEST 2011 - kukuk@suse.de diff --git a/pam-config.spec b/pam-config.spec index 5b49602..25b33d2 100644 --- a/pam-config.spec +++ b/pam-config.spec @@ -28,6 +28,7 @@ PreReq: pam >= 0.99 Requires: pam-modules >= 10.2 Group: System/Management Source: %{name}-%{version}.tar.bz2 +Patch0: pam_systemd.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -41,8 +42,11 @@ add/adjust/remove other PAM modules and their options. %prep %setup -q +%patch0 -p1 %build +#needed by patch0 +autoreconf %configure make %{?jobs:-j%jobs}; diff --git a/pam_systemd.patch b/pam_systemd.patch new file mode 100644 index 0000000..de85800 --- /dev/null +++ b/pam_systemd.patch @@ -0,0 +1,166 @@ +Index: pam-config-0.79/src/Makefile.am +=================================================================== +--- pam-config-0.79.orig/src/Makefile.am ++++ pam-config-0.79/src/Makefile.am +@@ -30,7 +30,7 @@ pam_config_SOURCES = pam-config.c load_c + mod_pam_group.c mod_pam_time.c mod_pam_ssh.c mod_pam_succeed_if.c \ + mod_pam_csync.c mod_pam_fp.c mod_pam_fprint.c mod_pam_pwhistory.c \ + mod_pam_selinux.c mod_pam_gnome_keyring.c mod_pam_passwdqc.c \ +- mod_pam_exec.c mod_pam_sss.c mod_pam_fprintd.c ++ mod_pam_exec.c mod_pam_sss.c mod_pam_fprintd.c mod_pam_systemd.c + + noinst_HEADERS = pam-config.h pam-module.h + +Index: pam-config-0.79/src/mod_pam_systemd.c +=================================================================== +--- /dev/null ++++ pam-config-0.79/src/mod_pam_systemd.c +@@ -0,0 +1,120 @@ ++/* Copyright (C) 2011 Frederic Crozat ++ Author: Frederic Crozat ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License version 2 as ++ published by the Free Software Foundation. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software Foundation, ++ Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ++ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++#include ++#include ++ ++#include "pam-config.h" ++#include "pam-module.h" ++ ++static int ++write_config_systemd (pam_module_t *this, enum write_type op, FILE *fp) ++{ ++ option_set_t *opt_set = this->get_opt_set (this, op); ++ char *opt; ++ ++ if (debug) ++ debug_write_call (this, op); ++ ++ if (op != SESSION || !opt_set->is_enabled (opt_set, "is_enabled")) ++ return 0; ++ ++ fprintf (fp, "session\toptional\tpam_systemd.so"); ++ ++ if (opt_set->is_enabled (opt_set, "debug")) ++ fprintf(fp, " debug"); ++ if ((opt = opt_set->get_opt (opt_set, "kill_session_processes"))) ++ fprintf(fp, " kill-session-processes=%s",opt); ++ if ((opt = opt_set->get_opt (opt_set, "kill_only_users"))) ++ fprintf(fp, " kill-only-users=%s",opt); ++ if ((opt = opt_set->get_opt (opt_set, "kill_exclude_users"))) ++ fprintf(fp, " kill-exclude-users=%s",opt); ++ if ((opt = opt_set->get_opt (opt_set, "controllers"))) ++ fprintf(fp, " controllers=%s",opt); ++ if ((opt = opt_set->get_opt (opt_set, "reset_controllers"))) ++ fprintf(fp, " reset-controllers=%s",opt); ++ ++ fprintf(fp, "\n"); ++ return 0; ++ ++} ++ ++static int ++parse_config_systemd (pam_module_t *this, char *args, write_type_t type) ++{ ++ option_set_t *opt_set = this->get_opt_set (this, type); ++ ++ if (debug) ++ printf ("**** parse_config_%s (%s): '%s'\n", this->name, ++ type2string (type), args ? args : ""); ++ ++ opt_set->enable (opt_set, "is_enabled", TRUE); ++ ++ while (args && strlen (args) > 0) ++ { ++ char *cp = strsep (&args, " \t"); ++ ++ if (args) ++ while (isspace ((int) *args)) ++ ++args; ++ ++ if (strcmp (cp, "debug") == 0) ++ opt_set->enable (opt_set, "debug", TRUE); ++ else if (strncmp (cp, "kill-session-processes=", 13) == 0) ++ opt_set->set_opt (opt_set, "kill_session_processes", strdup(&cp[13])); ++ else if (strncmp (cp, "kill-only-users=", 16) == 0) ++ opt_set->set_opt (opt_set, "kill_only_users", strdup (&cp[16])); ++ else if (strncmp (cp, "kill-exclude-users=", 19) == 0) ++ opt_set->set_opt (opt_set, "kill_exclude_users", strdup (&cp[19])); ++ else if (strncmp (cp, "controllers=", 12) == 0) ++ opt_set->set_opt (opt_set, "controllers", strdup (&cp[12])); ++ else if (strncmp (cp, "reset-controllers=", 18) == 0) ++ opt_set->set_opt (opt_set, "reset_controllers", strdup (&cp[18])); ++ else ++ print_unknown_option_error ("pam_systemd.so", cp); ++ } ++ return 1; ++} ++ ++GETOPT_START_1(SESSION) ++GETOPT_END_1(SESSION) ++ ++PRINT_ARGS("systemd") ++PRINT_XMLHELP("systemd") ++ ++/* ---- contruct module object ---- */ ++DECLARE_BOOL_OPTS_2 (is_enabled, debug); ++DECLARE_STRING_OPTS_5 (kill_session_processes, kill_only_users, kill_exclude_users, controllers, reset_controllers); ++DECLARE_OPT_SETS; ++ ++static module_helptext_t helptext[] = {{NULL, NULL, NULL}}; ++ ++ ++/* at last construct the complete module object */ ++pam_module_t mod_pam_systemd = { "pam_systemd.so", opt_sets, helptext, ++ &parse_config_systemd, ++ &def_print_module, ++ &write_config_systemd, ++ &get_opt_set, ++ &getopt, ++ &print_args, ++ &print_xmlhelp}; +Index: pam-config-0.79/src/supported-modules.h +=================================================================== +--- pam-config-0.79.orig/src/supported-modules.h ++++ pam-config-0.79/src/supported-modules.h +@@ -39,6 +39,7 @@ extern pam_module_t mod_pam_cryptpass; + extern pam_module_t mod_pam_csync; + extern pam_module_t mod_pam_loginuid; + extern pam_module_t mod_pam_mount; ++extern pam_module_t mod_pam_systemd; + + pam_module_t *common_module_list[] = { + &mod_pam_apparmor, +@@ -67,6 +68,7 @@ pam_module_t *common_module_list[] = { + &mod_pam_ssh, + &mod_pam_sss, + &mod_pam_succeed_if, ++ &mod_pam_systemd, + &mod_pam_thinkfinger, + &mod_pam_umask, + &mod_pam_unix, +@@ -143,6 +145,7 @@ static pam_module_t *module_list_session + &mod_pam_nam, + &mod_pam_umask, + &mod_pam_ssh, ++ &mod_pam_systemd, + &mod_pam_selinux, + &mod_pam_gnome_keyring, + &mod_pam_exec,