xref: /freebsd/lib/libpam/modules/pam_permit/pam_permit.c (revision 04f71c5352de62224d77b93e4e34d795a0c3e076)
11642eb1aSMark Murray /*-
21642eb1aSMark Murray  * Copyright 2001 Mark R V Murray
31642eb1aSMark Murray  * All rights reserved.
41642eb1aSMark Murray  *
51642eb1aSMark Murray  * Redistribution and use in source and binary forms, with or without
61642eb1aSMark Murray  * modification, are permitted provided that the following conditions
71642eb1aSMark Murray  * are met:
81642eb1aSMark Murray  * 1. Redistributions of source code must retain the above copyright
91642eb1aSMark Murray  *    notice, this list of conditions and the following disclaimer.
101642eb1aSMark Murray  * 2. Redistributions in binary form must reproduce the above copyright
111642eb1aSMark Murray  *    notice, this list of conditions and the following disclaimer in the
121642eb1aSMark Murray  *    documentation and/or other materials provided with the distribution.
131642eb1aSMark Murray  *
141642eb1aSMark Murray  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
151642eb1aSMark Murray  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
161642eb1aSMark Murray  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
171642eb1aSMark Murray  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
181642eb1aSMark Murray  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
191642eb1aSMark Murray  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
201642eb1aSMark Murray  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
211642eb1aSMark Murray  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
221642eb1aSMark Murray  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
231642eb1aSMark Murray  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
241642eb1aSMark Murray  * SUCH DAMAGE.
251642eb1aSMark Murray  */
261642eb1aSMark Murray 
27ceaf33f5SMatthew Dillon #include <sys/cdefs.h>
28ceaf33f5SMatthew Dillon __FBSDID("$FreeBSD$");
29ceaf33f5SMatthew Dillon 
3004f71c53SDag-Erling Smørgrav #include <stddef.h>
310ae5018bSDag-Erling Smørgrav 
321642eb1aSMark Murray #define	PAM_SM_AUTH
331642eb1aSMark Murray #define	PAM_SM_ACCOUNT
341642eb1aSMark Murray #define	PAM_SM_SESSION
351642eb1aSMark Murray #define	PAM_SM_PASSWORD
361642eb1aSMark Murray 
378c66575dSDag-Erling Smørgrav #include <security/pam_appl.h>
381642eb1aSMark Murray #include <security/pam_modules.h>
398c66575dSDag-Erling Smørgrav #include <security/pam_mod_misc.h>
401642eb1aSMark Murray 
411642eb1aSMark Murray #define NOBODY "nobody"
421642eb1aSMark Murray 
431642eb1aSMark Murray PAM_EXTERN int
44c2065008SMark Murray pam_sm_authenticate(pam_handle_t *pamh, int flags __unused, int argc, const char **argv)
451642eb1aSMark Murray {
461642eb1aSMark Murray 	struct options options;
471642eb1aSMark Murray 	int retval;
481642eb1aSMark Murray 	const char *user;
491642eb1aSMark Murray 
501642eb1aSMark Murray 	pam_std_option(&options, NULL, argc, argv);
511642eb1aSMark Murray 
521642eb1aSMark Murray 	PAM_LOG("Options processed");
531642eb1aSMark Murray 
541642eb1aSMark Murray 	/* We always need to know who the user is */
551642eb1aSMark Murray 	user = NULL;
561642eb1aSMark Murray 	retval = pam_get_user(pamh, &user, NULL);
571642eb1aSMark Murray 	if (retval != PAM_SUCCESS)
581642eb1aSMark Murray 		PAM_RETURN(retval);
591642eb1aSMark Murray 
601642eb1aSMark Murray 	PAM_LOG("Got user: %s", user);
611642eb1aSMark Murray 
621642eb1aSMark Murray 	if (user == NULL || *user == '\0')
631642eb1aSMark Murray 		pam_set_item(pamh, PAM_USER, (const void *)NOBODY);
641642eb1aSMark Murray 	user = NULL;
651642eb1aSMark Murray 
661642eb1aSMark Murray 	PAM_RETURN(PAM_SUCCESS);
671642eb1aSMark Murray }
681642eb1aSMark Murray 
691642eb1aSMark Murray PAM_EXTERN int
70c2065008SMark Murray pam_sm_setcred(pam_handle_t *pamh __unused, int flags __unused, int argc, const char **argv)
711642eb1aSMark Murray {
721642eb1aSMark Murray 	struct options options;
731642eb1aSMark Murray 
741642eb1aSMark Murray 	pam_std_option(&options, NULL, argc, argv);
751642eb1aSMark Murray 
761642eb1aSMark Murray 	PAM_LOG("Options processed");
771642eb1aSMark Murray 
781642eb1aSMark Murray 	PAM_RETURN(PAM_SUCCESS);
791642eb1aSMark Murray }
801642eb1aSMark Murray 
811642eb1aSMark Murray PAM_EXTERN int
82c2065008SMark Murray pam_sm_acct_mgmt(pam_handle_t *pamh __unused, int flags __unused, int argc ,const char **argv)
831642eb1aSMark Murray {
841642eb1aSMark Murray 	struct options options;
851642eb1aSMark Murray 
861642eb1aSMark Murray 	pam_std_option(&options, NULL, argc, argv);
871642eb1aSMark Murray 
881642eb1aSMark Murray 	PAM_LOG("Options processed");
891642eb1aSMark Murray 
901642eb1aSMark Murray 	PAM_RETURN(PAM_SUCCESS);
911642eb1aSMark Murray }
921642eb1aSMark Murray 
931642eb1aSMark Murray PAM_EXTERN int
94c2065008SMark Murray pam_sm_chauthtok(pam_handle_t *pamh __unused, int flags __unused, int argc, const char **argv)
951642eb1aSMark Murray {
961642eb1aSMark Murray 	struct options options;
971642eb1aSMark Murray 
981642eb1aSMark Murray 	pam_std_option(&options, NULL, argc, argv);
991642eb1aSMark Murray 
1001642eb1aSMark Murray 	PAM_LOG("Options processed");
1011642eb1aSMark Murray 
1021642eb1aSMark Murray 	PAM_RETURN(PAM_SUCCESS);
1031642eb1aSMark Murray }
1041642eb1aSMark Murray 
1051642eb1aSMark Murray PAM_EXTERN int
106c2065008SMark Murray pam_sm_open_session(pam_handle_t *pamh __unused, int flags __unused, int argc, const char **argv)
1071642eb1aSMark Murray {
1081642eb1aSMark Murray 	struct options options;
1091642eb1aSMark Murray 
1101642eb1aSMark Murray 	pam_std_option(&options, NULL, argc, argv);
1111642eb1aSMark Murray 
1121642eb1aSMark Murray 	PAM_LOG("Options processed");
1131642eb1aSMark Murray 
1141642eb1aSMark Murray 	PAM_RETURN(PAM_SUCCESS);
1151642eb1aSMark Murray }
1161642eb1aSMark Murray 
1171642eb1aSMark Murray PAM_EXTERN int
118c2065008SMark Murray pam_sm_close_session(pam_handle_t *pamh __unused, int flags __unused, int argc, const char **argv)
1191642eb1aSMark Murray {
1201642eb1aSMark Murray 	struct options options;
1211642eb1aSMark Murray 
1221642eb1aSMark Murray 	pam_std_option(&options, NULL, argc, argv);
1231642eb1aSMark Murray 
1241642eb1aSMark Murray 	PAM_LOG("Options processed");
1251642eb1aSMark Murray 
1261642eb1aSMark Murray 	PAM_RETURN(PAM_SUCCESS);
1271642eb1aSMark Murray }
1281642eb1aSMark Murray 
1291642eb1aSMark Murray PAM_MODULE_ENTRY("pam_permit");
130