diff -urN Linux-PAM-0.99.7.1.orig/modules/pam_mkhomedir/pam_mkhomedir.8.xml Linux-PAM-0.99.7.1/modules/pam_mkhomedir/pam_mkhomedir.8.xml
--- Linux-PAM-0.99.7.1.orig/modules/pam_mkhomedir/pam_mkhomedir.8.xml 2006-05-30 15:03:09.000000000 +0200
+++ Linux-PAM-0.99.7.1/modules/pam_mkhomedir/pam_mkhomedir.8.xml 2007-02-03 22:09:37.942620000 +0100
@@ -29,6 +29,9 @@
umask=mode
+ notfound=[create|deny|ignore]
+
+
skel=skeldir
@@ -82,6 +94,20 @@
+
+
+
+
+ What to do if home directory is not found or it is not a directory.
+ create - default, make home directory;
+ deny - deny access;
+ ignore - do nothing
+
+
+
+
+
+
--- 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
/* argument parsing */
-#define MKHOMEDIR_DEBUG 020 /* be verbose about things */
-#define MKHOMEDIR_QUIET 040 /* keep quiet about things */
+#define MKHOMEDIR_DEBUG 0x10 /* be verbose about things */
+#define MKHOMEDIR_QUIET 0x20 /* keep quiet about things */
+/* what to do, if home directory does not exist? */
+#define HOMEDIR_CREATE 0x40 /* create it */
+#define HOMEDIR_DENY 0x80 /* deny access */
struct options_t {
int ctrl;
@@ -75,7 +78,7 @@
_pam_parse (const pam_handle_t *pamh, int flags, int argc, const char **argv,
options_t *opt)
{
- opt->ctrl = 0;
+ opt->ctrl = HOMEDIR_CREATE;
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"))
+ opt->ctrl = (opt->ctrl | HOMEDIR_CREATE) & ~HOMEDIR_DENY;
+ else if (!strcmp(*argv + 9, "deny"))
+ opt->ctrl = (opt->ctrl | HOMEDIR_DENY) & ~HOMEDIR_CREATE;
+ else if (!strcmp(*argv + 9, "ignore"))
+ opt->ctrl &= ~(HOMEDIR_CREATE | HOMEDIR_DENY);
+ else
+ pam_syslog(pamh, LOG_ERR, "unknown parameter for \"create\" option: %s", *argv + 9);
} else {
pam_syslog(pamh, LOG_ERR, "unknown option: %s", *argv);
}
}
@@ -235,7 +235,12 @@
return PAM_SUCCESS;
}
- return create_homedir(pamh, &opt, user, pwd->pw_dir);
+ if (opt.ctrl & HOMEDIR_CREATE)
+ return create_homedir(pamh, &opt, user, pwd->pw_dir);
+ else if (opt.ctrl & HOMEDIR_DENY)
+ return PAM_PERM_DENIED;
+ else
+ return PAM_SUCCESS;
}
/* Ignore */