This is looking good! Please keep a close eye on style (there is at least one assignment in an if () statement that needs to move out. :-)
M > --=-=-= > > Dag-Erling Smorgrav <[EMAIL PROTECTED]> writes: > > Umm, you can't use opiechallenge() for that. You're not supposed to > > call opiechallenge() without also calling opieverify() (plus, I think > > opiechallenge() "consumes" a challenge). Use opielookup() instead. > > Even better, opie_haskey() (which is a wrapper around opielookup()). > New patch attached. > > DES > -- > Dag-Erling Smorgrav - [EMAIL PROTECTED] > > > --=-=-= > Content-Type: text/x-patch > Content-Disposition: attachment; filename=pam_opieaccess.diff > > Index: Makefile > =================================================================== > RCS file: /home/ncvs/src/lib/libpam/modules/Makefile,v > retrieving revision 1.15 > diff -u -r1.15 Makefile > --- Makefile 5 Dec 2001 15:55:14 -0000 1.15 > +++ Makefile 21 Jan 2002 00:46:54 -0000 > @@ -34,6 +34,7 @@ > .endif > SUBDIR+= pam_nologin > SUBDIR+= pam_opie > +SUBDIR+= pam_opieaccess > SUBDIR+= pam_permit > SUBDIR+= pam_radius > SUBDIR+= pam_rootok > Index: pam_opie/pam_opie.8 > =================================================================== > RCS file: /home/ncvs/src/lib/libpam/modules/pam_opie/pam_opie.8,v > retrieving revision 1.4 > diff -u -r1.4 pam_opie.8 > --- pam_opie/pam_opie.8 14 Jul 2001 08:38:24 -0000 1.4 > +++ pam_opie/pam_opie.8 21 Jan 2002 01:18:58 -0000 > @@ -1,5 +1,13 @@ > .\" Copyright (c) 2001 Mark R V Murray > .\" All rights reserved. > +.\" Copyright (c) 2002 Networks Associates Technologies, 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 > @@ -9,6 +17,9 @@ > .\" 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 > @@ -47,6 +58,13 @@ > .Dq Li auth > feature. > It also provides a null function for session management. > +.Pp > +Note that this module does not enforce > +.Xr opieaccess 5 > +checks. > +There is a separate module, > +.Xr pam_opieaccess 8 , > +for this purpose. > .Ss OPIE Authentication Module > The OPIE authentication component > provides functions to verify the identity of a user > Index: pam_opieaccess/Makefile > =================================================================== > RCS file: pam_opieaccess/Makefile > diff -N pam_opieaccess/Makefile > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ pam_opieaccess/Makefile 21 Jan 2002 00:53:49 -0000 > @@ -0,0 +1,10 @@ > +# $FreeBSD$ > + > +LIB= pam_opieaccess > +SHLIB_NAME= ${LIB}.so > +SRCS= ${LIB}.c > +DPADD= ${LIBOPIE} > +LDADD= -lopie > +MAN= pam_opieaccess.8 > + > +.include <bsd.lib.mk> > Index: pam_opieaccess/pam_opieaccess.8 > =================================================================== > RCS file: pam_opieaccess/pam_opieaccess.8 > diff -N pam_opieaccess/pam_opieaccess.8 > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ pam_opieaccess/pam_opieaccess.8 21 Jan 2002 13:07:06 -0000 > @@ -0,0 +1,116 @@ > +.\" Copyright (c) 2001 Mark R V Murray > +.\" All rights reserved. > +.\" Copyright (c) 2002 Networks Associates Technologies, 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 January 21, 2002 > +.Dt PAM_OPIEACCESS 8 > +.Os > +.Sh NAME > +.Nm pam_opieaccess > +.Nd OPIEAccess PAM module > +.Sh SYNOPSIS > +.Op Ar service-name > +.Ar module-type > +.Ar control-flag > +.Pa pam_self > +.Op Ar options > +.Sh DESCRIPTION > +The > +.Nm > +module is used in conjunction with the > +.Xr pam_opie 8 > +PAM module to ascertain that authentication can proceed by other means > +(such as the > +.Xr pam_unix 8 > +module) even if OPIE authentication failed. > +To properly use this module, > +.Xr pam_opie 8 > +should be marked > +.Dq Li sufficient , > +and > +.Nm > +should be listed right below it and marked > +.Dq Li requisite . > +.Pp > +The > +.Nm > +module provides functionality for only one PAM category: > +authentication. > +In terms of the > +.Ar module-type > +parameter, this is the > +.Dq Li auth > +feature. > +It also provides null functions for the remaining module types. > +.Ss OPIEAccess Authentication Module > +The authentication component > +.Pq Fn pam_sm_authenticate , > +returns > +.Dv PAM_IGNORE > +in two cases: > +.Bl -enum > +.It > +The user does not have OPIE enabled. > +.It > +The user has OPIE enabled, and the remote host is listed as a trusted > +host in > +.Pa /etc/opieaccess , > +and the user does not have a file named > +.Pa opiealways > +in his home directory. > +.El > +.Pp > +Otherwise, it returns > +.Dv PAM_AUTH_ERR . > +.Pp > +The following options may be passed to the authentication module: > +.Bl -tag -width ".Cm no_warn" > +.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. > +.El > +.Sh SEE ALSO > +.Xr opie 4 , > +.Xr opieaccess 5 , > +.Xr pam_opie 8 , > +.Xr pam.conf 5 , > +.Xr pam 8 > Index: pam_opieaccess/pam_opieaccess.c > =================================================================== > RCS file: pam_opieaccess/pam_opieaccess.c > diff -N pam_opieaccess/pam_opieaccess.c > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ pam_opieaccess/pam_opieaccess.c 21 Jan 2002 12:59:31 -0000 > @@ -0,0 +1,153 @@ > +/*- > + * Copyright (c) 2002 Networks Associates Technologies, 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. > + * > + * $FreeBSD$ > + */ > + > +#include <sys/cdefs.h> > +__FBSDID("$FreeBSD$"); > + > +#define _BSD_SOURCE > + > +#include <opie.h> > +#include <pwd.h> > +#include <unistd.h> > +#include <syslog.h> > + > +#define PAM_SM_AUTH > +#define PAM_SM_ACCOUNT > +#define PAM_SM_SESSION > +#define PAM_SM_PASSWORD > + > +#include <security/pam_modules.h> > +#include <pam_mod_misc.h> > + > +PAM_EXTERN int > +pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv) > +{ > + struct options options; > + struct passwd *pwent; > + char *luser, *rhost; > + int r; > + > + pam_std_option(&options, NULL, argc, argv); > + > + PAM_LOG("Options processed"); > + > + r = pam_get_item(pamh, PAM_USER, (const void **)&luser); > + if (r != PAM_SUCCESS) > + PAM_RETURN(r); > + if (luser == NULL) > + PAM_RETURN(PAM_SERVICE_ERR); > + > + if ((pwent = getpwnam(luser)) == NULL) > + PAM_RETURN(PAM_USER_UNKNOWN); > + > + if (opie_haskey(luser) != 0) > + PAM_RETURN(PAM_IGNORE); > + > + r = pam_get_item(pamh, PAM_RHOST, (const void **)&rhost); > + if (r != PAM_SUCCESS) > + PAM_RETURN(r); > + if (rhost == NULL) > + PAM_RETURN(PAM_SERVICE_ERR); > + > + if (opieaccessfile(rhost) && opiealways(pwent->pw_dir) != 0) > + PAM_RETURN(PAM_IGNORE); > + > + PAM_VERBOSE_ERROR("Refused; remote host is not in opieaccess"); > + > + PAM_RETURN(PAM_AUTH_ERR); > +} > + > +PAM_EXTERN int > +pam_sm_setcred(pam_handle_t *pamh, int flags, int argc, const char **argv) > +{ > + struct options options; > + > + pam_std_option(&options, NULL, argc, argv); > + > + PAM_LOG("Options processed"); > + > + PAM_RETURN(PAM_SUCCESS); > +} > + > +PAM_EXTERN int > +pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc ,const char **argv) > +{ > + struct options options; > + > + pam_std_option(&options, NULL, argc, argv); > + > + PAM_LOG("Options processed"); > + > + PAM_RETURN(PAM_IGNORE); > +} > + > +PAM_EXTERN int > +pam_sm_chauthtok(pam_handle_t *pamh, int flags, int argc, const char **argv) > +{ > + struct options options; > + > + pam_std_option(&options, NULL, argc, argv); > + > + PAM_LOG("Options processed"); > + > + PAM_RETURN(PAM_IGNORE); > +} > + > +PAM_EXTERN int > +pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv) > +{ > + struct options options; > + > + pam_std_option(&options, NULL, argc, argv); > + > + PAM_LOG("Options processed"); > + > + PAM_RETURN(PAM_IGNORE); > +} > + > +PAM_EXTERN int > +pam_sm_close_session(pam_handle_t *pamh, int flags, int argc, const char **argv) > +{ > + struct options options; > + > + pam_std_option(&options, NULL, argc, argv); > + > + PAM_LOG("Options processed"); > + > + PAM_RETURN(PAM_IGNORE); > +} > + > +PAM_MODULE_ENTRY("pam_opieaccess"); > > --=-=-=-- -- o Mark Murray \_ FreeBSD Services Limited O.\_ Warning: this .sig is umop ap!sdn To Unsubscribe: send mail to [EMAIL PROTECTED] with "unsubscribe freebsd-current" in the body of the message