summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/libpam/modules/modules.inc1
-rw-r--r--lib/libpam/modules/pam_ftpusers/Makefile7
-rw-r--r--lib/libpam/modules/pam_ftpusers/pam_ftpusers.899
-rw-r--r--lib/libpam/modules/pam_ftpusers/pam_ftpusers.c115
4 files changed, 222 insertions, 0 deletions
diff --git a/lib/libpam/modules/modules.inc b/lib/libpam/modules/modules.inc
index 290ae01..6009106 100644
--- a/lib/libpam/modules/modules.inc
+++ b/lib/libpam/modules/modules.inc
@@ -3,6 +3,7 @@
MODULES =
MODULES += pam_deny
MODULES += pam_ftp
+MODULES += pam_ftpusers
.if defined(MAKE_KERBEROS4) && !defined(NOCRYPT) && !defined(NO_OPENSSL)
MODULES += pam_kerberosIV
.endif
diff --git a/lib/libpam/modules/pam_ftpusers/Makefile b/lib/libpam/modules/pam_ftpusers/Makefile
new file mode 100644
index 0000000..07e84ec
--- /dev/null
+++ b/lib/libpam/modules/pam_ftpusers/Makefile
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+LIB= pam_ftpusers
+SRCS= pam_ftpusers.c
+MAN= pam_ftpusers.8
+
+.include <bsd.lib.mk>
diff --git a/lib/libpam/modules/pam_ftpusers/pam_ftpusers.8 b/lib/libpam/modules/pam_ftpusers/pam_ftpusers.8
new file mode 100644
index 0000000..0489d93
--- /dev/null
+++ b/lib/libpam/modules/pam_ftpusers/pam_ftpusers.8
@@ -0,0 +1,99 @@
+.\" Copyright (c) 2001 Mark R V Murray
+.\" All rights reserved.
+.\" Copyright (c) 2002 Networks Associates Technology, Inc.
+.\" All rights reserved.
+.\"
+.\" Portions of this software were developed for the FreeBSD Project by
+.\" ThinkSec AS and NAI Labs, the Security Research Division of Network
+.\" Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035
+.\" ("CBOSS"), as part of the DARPA CHATS research program.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. The name of the author may not be used to endorse or promote
+.\" products derived from this software without specific prior written
+.\" permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd April 17, 2002
+.Dt PAM_FTPUSERS 8
+.Os
+.Sh NAME
+.Nm pam_ftpusers
+.Nd ftpusers PAM module
+.Sh SYNOPSIS
+.Op Ar service-name
+.Ar module-type
+.Ar control-flag
+.Pa pam_ftpusers
+.Op Ar options
+.Sh DESCRIPTION
+The
+.Pa ftpusers
+service module for PAM,
+.Nm
+provides functionality for only one PAM category:
+account management.
+In terms of the
+.Ar module-type
+parameter, this is the
+.Dq Li account
+feature.
+.Ss Ftpusers Account Management Module
+The
+.Pa ftpusers
+account management component
+.Pq Fn pam_sm_acct_mgmt ,
+succeeds if and only if the user is listed in
+.Pa /etc/ftpusers .
+.Pp
+The following options may be passed to the authentication module:
+.Bl -tag -width ".Cm disallow"
+.It Cm debug
+.Xr syslog 3
+debugging information at
+.Dv LOG_DEBUG
+level.
+.It Cm no_warn
+suppress warning messages to the user.
+These messages include reasons why the user's authentication attempt
+was declined.
+.It Cm disallow
+reverse the semantics;
+.Nm
+will succeed if and only if the user is not listed in
+.Pa /etc/ftpusers .
+.El
+.Sh SEE ALSO
+.Xr ftpusers 5 ,
+.Xr pam.conf 5 ,
+.Xr pam 8
+.Sh AUTHORS
+The
+.Nm
+module and this manual page were developed for the
+.Fx
+Project by
+ThinkSec AS and NAI Labs, the Security Research Division of Network
+Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035
+.Pq Dq CBOSS ,
+as part of the DARPA CHATS research program.
diff --git a/lib/libpam/modules/pam_ftpusers/pam_ftpusers.c b/lib/libpam/modules/pam_ftpusers/pam_ftpusers.c
new file mode 100644
index 0000000..421955a
--- /dev/null
+++ b/lib/libpam/modules/pam_ftpusers/pam_ftpusers.c
@@ -0,0 +1,115 @@
+/*-
+ * Copyright (c) 2001 Networks Associates Technology, Inc.
+ * All rights reserved.
+ *
+ * This software was developed for the FreeBSD Project by ThinkSec AS and
+ * NAI Labs, the Security Research Division of Network Associates, Inc.
+ * under DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the
+ * DARPA CHATS research program.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ * products derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <ctype.h>
+#include <grp.h>
+#include <paths.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define PAM_SM_ACCOUNT
+
+#include <security/pam_appl.h>
+#include <security/pam_modules.h>
+#include <security/pam_mod_misc.h>
+#include <security/openpam.h>
+
+PAM_EXTERN int
+pam_sm_acct_mgmt(pam_handle_t *pamh, int flags __unused,
+ int argc __unused, const char *argv[] __unused)
+{
+ struct passwd *pwd;
+ struct group *grp;
+ const char *user;
+ int pam_err, found, allow;
+ char *line, *name, **mem;
+ size_t len, ulen;
+ FILE *f;
+
+ pam_err = pam_get_user(pamh, &user, NULL);
+ if (pam_err != PAM_SUCCESS)
+ return (pam_err);
+ if (user == NULL || (pwd = getpwnam(user)) == NULL)
+ return (PAM_SERVICE_ERR);
+
+ found = 0;
+ ulen = strlen(user);
+ if ((f = fopen(_PATH_FTPUSERS, "r")) == NULL) {
+ PAM_LOG("%s: %m", _PATH_FTPUSERS);
+ goto done;
+ }
+ while (!found && (line = fgetln(f, &len)) != NULL) {
+ if (*line == '#')
+ continue;
+ while (len > 0 && isspace(line[len - 1]))
+ --len;
+ if (len == 0)
+ continue;
+ /* simple case first */
+ if (*line != '@') {
+ if (len == ulen && strncmp(user, line, len) == 0)
+ found = 1;
+ continue;
+ }
+ /* member of specified group? */
+ asprintf(&name, "%.*s", (int)len - 1, line + 1);
+ if (name == NULL) {
+ fclose(f);
+ return (PAM_BUF_ERR);
+ }
+ grp = getgrnam(name);
+ free(name);
+ if (grp == NULL)
+ continue;
+ for (mem = grp->gr_mem; mem && *mem && !found; ++mem)
+ if (strcmp(user, *mem) == 0)
+ found = 1;
+ }
+ done:
+ allow = (openpam_get_option(pamh, "disallow") == NULL);
+ if (found)
+ pam_err = allow ? PAM_SUCCESS : PAM_AUTH_ERR;
+ else
+ pam_err = allow ? PAM_AUTH_ERR : PAM_SUCCESS;
+ if (f != NULL)
+ fclose(f);
+ return (pam_err);
+}
+
+PAM_MODULE_ENTRY("pam_ftpusers");
OpenPOWER on IntegriCloud