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 * $FreeBSD$ 271642eb1aSMark Murray */ 281642eb1aSMark Murray 291642eb1aSMark Murray #define PAM_SM_AUTH 301642eb1aSMark Murray #define PAM_SM_ACCOUNT 311642eb1aSMark Murray #define PAM_SM_SESSION 321642eb1aSMark Murray #define PAM_SM_PASSWORD 331642eb1aSMark Murray 341642eb1aSMark Murray #include <security/pam_modules.h> 351642eb1aSMark Murray #include <security/_pam_macros.h> 361642eb1aSMark Murray #include "pam_mod_misc.h" 371642eb1aSMark Murray 381642eb1aSMark Murray #define NOBODY "nobody" 391642eb1aSMark Murray 401642eb1aSMark Murray PAM_EXTERN int 411642eb1aSMark Murray pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv) 421642eb1aSMark Murray { 431642eb1aSMark Murray struct options options; 441642eb1aSMark Murray int retval; 451642eb1aSMark Murray const char *user; 461642eb1aSMark Murray 471642eb1aSMark Murray pam_std_option(&options, NULL, argc, argv); 481642eb1aSMark Murray 491642eb1aSMark Murray PAM_LOG("Options processed"); 501642eb1aSMark Murray 511642eb1aSMark Murray /* We always need to know who the user is */ 521642eb1aSMark Murray user = NULL; 531642eb1aSMark Murray retval = pam_get_user(pamh, &user, NULL); 541642eb1aSMark Murray if (retval != PAM_SUCCESS) 551642eb1aSMark Murray PAM_RETURN(retval); 561642eb1aSMark Murray 571642eb1aSMark Murray PAM_LOG("Got user: %s", user); 581642eb1aSMark Murray 591642eb1aSMark Murray if (user == NULL || *user == '\0') 601642eb1aSMark Murray pam_set_item(pamh, PAM_USER, (const void *)NOBODY); 611642eb1aSMark Murray user = NULL; 621642eb1aSMark Murray 631642eb1aSMark Murray PAM_RETURN(PAM_SUCCESS); 641642eb1aSMark Murray } 651642eb1aSMark Murray 661642eb1aSMark Murray PAM_EXTERN int 671642eb1aSMark Murray pam_sm_setcred(pam_handle_t *pamh, int flags, int argc, const char **argv) 681642eb1aSMark Murray { 691642eb1aSMark Murray struct options options; 701642eb1aSMark Murray 711642eb1aSMark Murray pam_std_option(&options, NULL, argc, argv); 721642eb1aSMark Murray 731642eb1aSMark Murray PAM_LOG("Options processed"); 741642eb1aSMark Murray 751642eb1aSMark Murray PAM_RETURN(PAM_SUCCESS); 761642eb1aSMark Murray } 771642eb1aSMark Murray 781642eb1aSMark Murray PAM_EXTERN int 791642eb1aSMark Murray pam_sm_acct_mgmt(pam_handle_t *pamh, int flags, int argc ,const char **argv) 801642eb1aSMark Murray { 811642eb1aSMark Murray struct options options; 821642eb1aSMark Murray 831642eb1aSMark Murray pam_std_option(&options, NULL, argc, argv); 841642eb1aSMark Murray 851642eb1aSMark Murray PAM_LOG("Options processed"); 861642eb1aSMark Murray 871642eb1aSMark Murray PAM_RETURN(PAM_SUCCESS); 881642eb1aSMark Murray } 891642eb1aSMark Murray 901642eb1aSMark Murray PAM_EXTERN int 911642eb1aSMark Murray pam_sm_chauthtok(pam_handle_t *pamh, int flags, int argc, const char **argv) 921642eb1aSMark Murray { 931642eb1aSMark Murray struct options options; 941642eb1aSMark Murray 951642eb1aSMark Murray pam_std_option(&options, NULL, argc, argv); 961642eb1aSMark Murray 971642eb1aSMark Murray PAM_LOG("Options processed"); 981642eb1aSMark Murray 991642eb1aSMark Murray PAM_RETURN(PAM_SUCCESS); 1001642eb1aSMark Murray } 1011642eb1aSMark Murray 1021642eb1aSMark Murray PAM_EXTERN int 1031642eb1aSMark Murray pam_sm_open_session(pam_handle_t *pamh, int flags, int argc, const char **argv) 1041642eb1aSMark Murray { 1051642eb1aSMark Murray struct options options; 1061642eb1aSMark Murray 1071642eb1aSMark Murray pam_std_option(&options, NULL, argc, argv); 1081642eb1aSMark Murray 1091642eb1aSMark Murray PAM_LOG("Options processed"); 1101642eb1aSMark Murray 1111642eb1aSMark Murray PAM_RETURN(PAM_SUCCESS); 1121642eb1aSMark Murray } 1131642eb1aSMark Murray 1141642eb1aSMark Murray PAM_EXTERN int 1151642eb1aSMark Murray pam_sm_close_session(pam_handle_t *pamh, int flags, int argc, const char **argv) 1161642eb1aSMark Murray { 1171642eb1aSMark Murray struct options options; 1181642eb1aSMark Murray 1191642eb1aSMark Murray pam_std_option(&options, NULL, argc, argv); 1201642eb1aSMark Murray 1211642eb1aSMark Murray PAM_LOG("Options processed"); 1221642eb1aSMark Murray 1231642eb1aSMark Murray PAM_RETURN(PAM_SUCCESS); 1241642eb1aSMark Murray } 1251642eb1aSMark Murray 1261642eb1aSMark Murray PAM_MODULE_ENTRY("pam_permit"); 127