<option>skel=<replaceable>/path/to/skel/directory</replaceable></option>
</term>
<listitem>
---- Linux-PAM-1.2.0/modules/pam_mkhomedir/pam_mkhomedir.c~ 2015-04-30 12:15:42.000000000 +0300
-+++ Linux-PAM-1.2.0/modules/pam_mkhomedir/pam_mkhomedir.c 2015-04-30 12:16:09.350939182 +0300
-@@ -61,8 +61,11 @@
- #define MAX_FD_NO 10000
+--- Linux-PAM-1.4.0/modules/pam_mkhomedir/pam_mkhomedir.c.orig 2020-06-08 12:17:27.000000000 +0200
++++ Linux-PAM-1.4.0/modules/pam_mkhomedir/pam_mkhomedir.c 2020-08-25 19:45:06.233402760 +0200
+@@ -53,8 +53,11 @@
+ #include "pam_inline.h"
/* argument parsing */
-#define MKHOMEDIR_DEBUG 020 /* be verbose about things */
struct options_t {
int ctrl;
-@@ -75,7 +78,7 @@
+@@ -67,7 +70,7 @@
_pam_parse (const pam_handle_t *pamh, int flags, int argc, const char **argv,
options_t *opt)
{
opt->umask = "0022";
opt->skeldir = "/etc/skel";
-@@ -94,7 +97,16 @@
- opt->umask = *argv+6;
- } else if (!strncmp(*argv,"skel=",5)) {
- opt->skeldir = *argv+5;
-+ } else if (!strncmp(*argv,"notfound=",9)) {
-+ if (!strcmp(*argv + 9, "create"))
+@@ -88,6 +91,15 @@
+ opt->umask = str;
+ } else if ((str = pam_str_skip_prefix(*argv, "skel=")) != NULL) {
+ opt->skeldir = str;
++ } else if ((str = pam_str_skip_prefix(*argv, "notfound=")) != NULL) {
++ if (!strcmp(str, "create"))
+ opt->ctrl = (opt->ctrl | HOMEDIR_CREATE) & ~HOMEDIR_DENY;
-+ else if (!strcmp(*argv + 9, "deny"))
++ else if (!strcmp(str, "deny"))
+ opt->ctrl = (opt->ctrl | HOMEDIR_DENY) & ~HOMEDIR_CREATE;
-+ else if (!strcmp(*argv + 9, "ignore"))
++ else if (!strcmp(str, "ignore"))
+ opt->ctrl &= ~(HOMEDIR_CREATE | HOMEDIR_DENY);
+ else
-+ pam_syslog(pamh, LOG_ERR, "unknown parameter for \"create\" option: %s", *argv + 9);
++ pam_syslog(pamh, LOG_ERR, "unknown parameter for \"create\" option: %s", str);
} else {
pam_syslog(pamh, LOG_ERR, "unknown option: %s", *argv);
}
- }
-@@ -235,7 +235,12 @@
+@@ -221,7 +233,12 @@
return PAM_SUCCESS;
}