15c1eca55SDag-Erling Smørgrav /*- 231c521e9SDag-Erling Smørgrav * Copyright (c) 2002-2003 Networks Associates Technology, Inc. 3*f3b0ac34SDag-Erling Smørgrav * Copyright (c) 2004-2015 Dag-Erling Smørgrav 45c1eca55SDag-Erling Smørgrav * All rights reserved. 55c1eca55SDag-Erling Smørgrav * 65c1eca55SDag-Erling Smørgrav * This software was developed for the FreeBSD Project by ThinkSec AS and 7ee02aaa9SDag-Erling Smørgrav * Network Associates Laboratories, the Security Research Division of 8ee02aaa9SDag-Erling Smørgrav * Network Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035 9ee02aaa9SDag-Erling Smørgrav * ("CBOSS"), as part of the DARPA CHATS research program. 105c1eca55SDag-Erling Smørgrav * 115c1eca55SDag-Erling Smørgrav * Redistribution and use in source and binary forms, with or without 125c1eca55SDag-Erling Smørgrav * modification, are permitted provided that the following conditions 135c1eca55SDag-Erling Smørgrav * are met: 145c1eca55SDag-Erling Smørgrav * 1. Redistributions of source code must retain the above copyright 155c1eca55SDag-Erling Smørgrav * notice, this list of conditions and the following disclaimer. 165c1eca55SDag-Erling Smørgrav * 2. Redistributions in binary form must reproduce the above copyright 175c1eca55SDag-Erling Smørgrav * notice, this list of conditions and the following disclaimer in the 185c1eca55SDag-Erling Smørgrav * documentation and/or other materials provided with the distribution. 195c1eca55SDag-Erling Smørgrav * 3. The name of the author may not be used to endorse or promote 205c1eca55SDag-Erling Smørgrav * products derived from this software without specific prior written 215c1eca55SDag-Erling Smørgrav * permission. 225c1eca55SDag-Erling Smørgrav * 235c1eca55SDag-Erling Smørgrav * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 245c1eca55SDag-Erling Smørgrav * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 255c1eca55SDag-Erling Smørgrav * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 265c1eca55SDag-Erling Smørgrav * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 275c1eca55SDag-Erling Smørgrav * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 285c1eca55SDag-Erling Smørgrav * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 295c1eca55SDag-Erling Smørgrav * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 305c1eca55SDag-Erling Smørgrav * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 315c1eca55SDag-Erling Smørgrav * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 325c1eca55SDag-Erling Smørgrav * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 335c1eca55SDag-Erling Smørgrav * SUCH DAMAGE. 345c1eca55SDag-Erling Smørgrav * 35*f3b0ac34SDag-Erling Smørgrav * $Id: openpam.h 890 2016-01-11 16:22:09Z des $ 365c1eca55SDag-Erling Smørgrav */ 375c1eca55SDag-Erling Smørgrav 38fe980754SDag-Erling Smørgrav #ifndef SECURITY_OPENPAM_H_INCLUDED 39fe980754SDag-Erling Smørgrav #define SECURITY_OPENPAM_H_INCLUDED 405c1eca55SDag-Erling Smørgrav 415c1eca55SDag-Erling Smørgrav /* 425c1eca55SDag-Erling Smørgrav * Annoying but necessary header pollution 435c1eca55SDag-Erling Smørgrav */ 445c1eca55SDag-Erling Smørgrav #include <stdarg.h> 455c1eca55SDag-Erling Smørgrav 46fe980754SDag-Erling Smørgrav #include <security/openpam_attr.h> 47fe980754SDag-Erling Smørgrav 485c1eca55SDag-Erling Smørgrav #ifdef __cplusplus 495c1eca55SDag-Erling Smørgrav extern "C" { 505c1eca55SDag-Erling Smørgrav #endif 515c1eca55SDag-Erling Smørgrav 5293889be5SDag-Erling Smørgrav struct passwd; 5393889be5SDag-Erling Smørgrav 545c1eca55SDag-Erling Smørgrav /* 555c1eca55SDag-Erling Smørgrav * API extensions 565c1eca55SDag-Erling Smørgrav */ 5793889be5SDag-Erling Smørgrav int 5893889be5SDag-Erling Smørgrav openpam_borrow_cred(pam_handle_t *_pamh, 59fe980754SDag-Erling Smørgrav const struct passwd *_pwd) 60fe980754SDag-Erling Smørgrav OPENPAM_NONNULL((1,2)); 6193889be5SDag-Erling Smørgrav 627f106882SDag-Erling Smørgrav int 637f106882SDag-Erling Smørgrav openpam_subst(const pam_handle_t *_pamh, 647f106882SDag-Erling Smørgrav char *_buf, 657f106882SDag-Erling Smørgrav size_t *_bufsize, 667f106882SDag-Erling Smørgrav const char *_template); 677f106882SDag-Erling Smørgrav 6893889be5SDag-Erling Smørgrav void 6993889be5SDag-Erling Smørgrav openpam_free_data(pam_handle_t *_pamh, 7093889be5SDag-Erling Smørgrav void *_data, 7193889be5SDag-Erling Smørgrav int _status); 7293889be5SDag-Erling Smørgrav 73b33ab329SDag-Erling Smørgrav void 74b33ab329SDag-Erling Smørgrav openpam_free_envlist(char **_envlist); 75b33ab329SDag-Erling Smørgrav 7646acc370SDag-Erling Smørgrav const char * 7746acc370SDag-Erling Smørgrav openpam_get_option(pam_handle_t *_pamh, 7846acc370SDag-Erling Smørgrav const char *_option); 7946acc370SDag-Erling Smørgrav 8046acc370SDag-Erling Smørgrav int 81fe980754SDag-Erling Smørgrav openpam_restore_cred(pam_handle_t *_pamh) 82fe980754SDag-Erling Smørgrav OPENPAM_NONNULL((1)); 8393889be5SDag-Erling Smørgrav 8493889be5SDag-Erling Smørgrav int 8546acc370SDag-Erling Smørgrav openpam_set_option(pam_handle_t *_pamh, 8646acc370SDag-Erling Smørgrav const char *_option, 8746acc370SDag-Erling Smørgrav const char *_value); 8846acc370SDag-Erling Smørgrav 895c1eca55SDag-Erling Smørgrav int 90fe980754SDag-Erling Smørgrav pam_error(const pam_handle_t *_pamh, 915c1eca55SDag-Erling Smørgrav const char *_fmt, 92fe980754SDag-Erling Smørgrav ...) 93fe980754SDag-Erling Smørgrav OPENPAM_FORMAT ((__printf__, 2, 3)) 94fe980754SDag-Erling Smørgrav OPENPAM_NONNULL((1,2)); 955c1eca55SDag-Erling Smørgrav 965c1eca55SDag-Erling Smørgrav int 975c1eca55SDag-Erling Smørgrav pam_get_authtok(pam_handle_t *_pamh, 9811d144d3SDag-Erling Smørgrav int _item, 995c1eca55SDag-Erling Smørgrav const char **_authtok, 100fe980754SDag-Erling Smørgrav const char *_prompt) 101fe980754SDag-Erling Smørgrav OPENPAM_NONNULL((1,3)); 1025c1eca55SDag-Erling Smørgrav 1035c1eca55SDag-Erling Smørgrav int 104fe980754SDag-Erling Smørgrav pam_info(const pam_handle_t *_pamh, 1055c1eca55SDag-Erling Smørgrav const char *_fmt, 106fe980754SDag-Erling Smørgrav ...) 107fe980754SDag-Erling Smørgrav OPENPAM_FORMAT ((__printf__, 2, 3)) 108fe980754SDag-Erling Smørgrav OPENPAM_NONNULL((1,2)); 1095c1eca55SDag-Erling Smørgrav 1105c1eca55SDag-Erling Smørgrav int 111fe980754SDag-Erling Smørgrav pam_prompt(const pam_handle_t *_pamh, 1125c1eca55SDag-Erling Smørgrav int _style, 1135c1eca55SDag-Erling Smørgrav char **_resp, 1145c1eca55SDag-Erling Smørgrav const char *_fmt, 115fe980754SDag-Erling Smørgrav ...) 116fe980754SDag-Erling Smørgrav OPENPAM_FORMAT ((__printf__, 4, 5)) 117fe980754SDag-Erling Smørgrav OPENPAM_NONNULL((1,4)); 1185c1eca55SDag-Erling Smørgrav 1195c1eca55SDag-Erling Smørgrav int 1205c1eca55SDag-Erling Smørgrav pam_setenv(pam_handle_t *_pamh, 1215c1eca55SDag-Erling Smørgrav const char *_name, 1225c1eca55SDag-Erling Smørgrav const char *_value, 123fe980754SDag-Erling Smørgrav int _overwrite) 124fe980754SDag-Erling Smørgrav OPENPAM_NONNULL((1,2,3)); 1255c1eca55SDag-Erling Smørgrav 1265c1eca55SDag-Erling Smørgrav int 127fe980754SDag-Erling Smørgrav pam_vinfo(const pam_handle_t *_pamh, 1285c1eca55SDag-Erling Smørgrav const char *_fmt, 129fe980754SDag-Erling Smørgrav va_list _ap) 130fe980754SDag-Erling Smørgrav OPENPAM_FORMAT ((__printf__, 2, 0)) 131fe980754SDag-Erling Smørgrav OPENPAM_NONNULL((1,2)); 1325c1eca55SDag-Erling Smørgrav 1335c1eca55SDag-Erling Smørgrav int 134fe980754SDag-Erling Smørgrav pam_verror(const pam_handle_t *_pamh, 1355c1eca55SDag-Erling Smørgrav const char *_fmt, 136fe980754SDag-Erling Smørgrav va_list _ap) 137fe980754SDag-Erling Smørgrav OPENPAM_FORMAT ((__printf__, 2, 0)) 138fe980754SDag-Erling Smørgrav OPENPAM_NONNULL((1,2)); 1395c1eca55SDag-Erling Smørgrav 1405c1eca55SDag-Erling Smørgrav int 141fe980754SDag-Erling Smørgrav pam_vprompt(const pam_handle_t *_pamh, 1425c1eca55SDag-Erling Smørgrav int _style, 1435c1eca55SDag-Erling Smørgrav char **_resp, 1445c1eca55SDag-Erling Smørgrav const char *_fmt, 145fe980754SDag-Erling Smørgrav va_list _ap) 146fe980754SDag-Erling Smørgrav OPENPAM_FORMAT ((__printf__, 4, 0)) 147fe980754SDag-Erling Smørgrav OPENPAM_NONNULL((1,4)); 1485c1eca55SDag-Erling Smørgrav 1495c1eca55SDag-Erling Smørgrav /* 15031c521e9SDag-Erling Smørgrav * Read cooked lines. 151ca236e63SDag-Erling Smørgrav * Checking for _IOFBF is a fairly reliable way to detect the presence 152ca236e63SDag-Erling Smørgrav * of <stdio.h>, as SUSv3 requires it to be defined there. 15331c521e9SDag-Erling Smørgrav */ 154ca236e63SDag-Erling Smørgrav #ifdef _IOFBF 15531c521e9SDag-Erling Smørgrav char * 15631c521e9SDag-Erling Smørgrav openpam_readline(FILE *_f, 15731c521e9SDag-Erling Smørgrav int *_lineno, 158fe980754SDag-Erling Smørgrav size_t *_lenp) 159fe980754SDag-Erling Smørgrav OPENPAM_NONNULL((1)); 1602f3ed619SDag-Erling Smørgrav 1612f3ed619SDag-Erling Smørgrav char ** 1622f3ed619SDag-Erling Smørgrav openpam_readlinev(FILE *_f, 1632f3ed619SDag-Erling Smørgrav int *_lineno, 1642f3ed619SDag-Erling Smørgrav int *_lenp) 1652f3ed619SDag-Erling Smørgrav OPENPAM_NONNULL((1)); 1662f3ed619SDag-Erling Smørgrav 1672f3ed619SDag-Erling Smørgrav char * 1682f3ed619SDag-Erling Smørgrav openpam_readword(FILE *_f, 1692f3ed619SDag-Erling Smørgrav int *_lineno, 1702f3ed619SDag-Erling Smørgrav size_t *_lenp) 1712f3ed619SDag-Erling Smørgrav OPENPAM_NONNULL((1)); 17231c521e9SDag-Erling Smørgrav #endif 17331c521e9SDag-Erling Smørgrav 1742f3ed619SDag-Erling Smørgrav int 1752f3ed619SDag-Erling Smørgrav openpam_straddch(char **_str, 1762f3ed619SDag-Erling Smørgrav size_t *_sizep, 1772f3ed619SDag-Erling Smørgrav size_t *_lenp, 1782f3ed619SDag-Erling Smørgrav int ch) 1792f3ed619SDag-Erling Smørgrav OPENPAM_NONNULL((1)); 1802f3ed619SDag-Erling Smørgrav 1812f3ed619SDag-Erling Smørgrav /* 1822f3ed619SDag-Erling Smørgrav * Enable / disable optional features 1832f3ed619SDag-Erling Smørgrav */ 1842f3ed619SDag-Erling Smørgrav enum { 1852f3ed619SDag-Erling Smørgrav OPENPAM_RESTRICT_SERVICE_NAME, 1862f3ed619SDag-Erling Smørgrav OPENPAM_VERIFY_POLICY_FILE, 1872f3ed619SDag-Erling Smørgrav OPENPAM_RESTRICT_MODULE_NAME, 1882f3ed619SDag-Erling Smørgrav OPENPAM_VERIFY_MODULE_FILE, 189*f3b0ac34SDag-Erling Smørgrav OPENPAM_FALLBACK_TO_OTHER, 1902f3ed619SDag-Erling Smørgrav OPENPAM_NUM_FEATURES 1912f3ed619SDag-Erling Smørgrav }; 1922f3ed619SDag-Erling Smørgrav 1932f3ed619SDag-Erling Smørgrav int 1942f3ed619SDag-Erling Smørgrav openpam_set_feature(int _feature, int _onoff); 1952f3ed619SDag-Erling Smørgrav 1962f3ed619SDag-Erling Smørgrav int 1972f3ed619SDag-Erling Smørgrav openpam_get_feature(int _feature, int *_onoff); 1982f3ed619SDag-Erling Smørgrav 19931c521e9SDag-Erling Smørgrav /* 2005c1eca55SDag-Erling Smørgrav * Log levels 2015c1eca55SDag-Erling Smørgrav */ 2025c1eca55SDag-Erling Smørgrav enum { 2032f3ed619SDag-Erling Smørgrav PAM_LOG_LIBDEBUG = -1, 2045c1eca55SDag-Erling Smørgrav PAM_LOG_DEBUG, 2055c1eca55SDag-Erling Smørgrav PAM_LOG_VERBOSE, 2065c1eca55SDag-Erling Smørgrav PAM_LOG_NOTICE, 2075c1eca55SDag-Erling Smørgrav PAM_LOG_ERROR 2085c1eca55SDag-Erling Smørgrav }; 2095c1eca55SDag-Erling Smørgrav 2105c1eca55SDag-Erling Smørgrav /* 2115c1eca55SDag-Erling Smørgrav * Log to syslog 2125c1eca55SDag-Erling Smørgrav */ 21311d144d3SDag-Erling Smørgrav void 21411d144d3SDag-Erling Smørgrav _openpam_log(int _level, 2155c1eca55SDag-Erling Smørgrav const char *_func, 2165c1eca55SDag-Erling Smørgrav const char *_fmt, 217e10ae022SDag-Erling Smørgrav ...) 218fe980754SDag-Erling Smørgrav OPENPAM_FORMAT ((__printf__, 3, 4)) 219fe980754SDag-Erling Smørgrav OPENPAM_NONNULL((3)); 2205c1eca55SDag-Erling Smørgrav 22155e3fbc9SDag-Erling Smørgrav #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) 22255e3fbc9SDag-Erling Smørgrav #define openpam_log(lvl, ...) \ 22355e3fbc9SDag-Erling Smørgrav _openpam_log((lvl), __func__, __VA_ARGS__) 22455e3fbc9SDag-Erling Smørgrav #elif defined(__GNUC__) && (__GNUC__ >= 3) 22555e3fbc9SDag-Erling Smørgrav #define openpam_log(lvl, ...) \ 22655e3fbc9SDag-Erling Smørgrav _openpam_log((lvl), __func__, __VA_ARGS__) 22711d144d3SDag-Erling Smørgrav #elif defined(__GNUC__) && (__GNUC__ >= 2) && (__GNUC_MINOR__ >= 95) 2288d38dc9dSDag-Erling Smørgrav #define openpam_log(lvl, fmt...) \ 229bdcb69e2SDag-Erling Smørgrav _openpam_log((lvl), __func__, ##fmt) 23011d144d3SDag-Erling Smørgrav #elif defined(__GNUC__) && defined(__FUNCTION__) 2315c1eca55SDag-Erling Smørgrav #define openpam_log(lvl, fmt...) \ 23211d144d3SDag-Erling Smørgrav _openpam_log((lvl), __FUNCTION__, ##fmt) 2335c1eca55SDag-Erling Smørgrav #else 23411d144d3SDag-Erling Smørgrav void 23511d144d3SDag-Erling Smørgrav openpam_log(int _level, 23611d144d3SDag-Erling Smørgrav const char *_format, 237fe980754SDag-Erling Smørgrav ...) 238fe980754SDag-Erling Smørgrav OPENPAM_FORMAT ((__printf__, 2, 3)) 239fe980754SDag-Erling Smørgrav OPENPAM_NONNULL((2)); 2405c1eca55SDag-Erling Smørgrav #endif 2415c1eca55SDag-Erling Smørgrav 2425c1eca55SDag-Erling Smørgrav /* 2435c1eca55SDag-Erling Smørgrav * Generic conversation function 2445c1eca55SDag-Erling Smørgrav */ 2455c1eca55SDag-Erling Smørgrav struct pam_message; 2465c1eca55SDag-Erling Smørgrav struct pam_response; 2475c1eca55SDag-Erling Smørgrav int openpam_ttyconv(int _n, 2485c1eca55SDag-Erling Smørgrav const struct pam_message **_msg, 2495c1eca55SDag-Erling Smørgrav struct pam_response **_resp, 2505c1eca55SDag-Erling Smørgrav void *_data); 2515c1eca55SDag-Erling Smørgrav 252ca236e63SDag-Erling Smørgrav extern int openpam_ttyconv_timeout; 253ca236e63SDag-Erling Smørgrav 2545c1eca55SDag-Erling Smørgrav /* 255ac7e3b9dSDag-Erling Smørgrav * Null conversation function 256ac7e3b9dSDag-Erling Smørgrav */ 257ac7e3b9dSDag-Erling Smørgrav int openpam_nullconv(int _n, 258ac7e3b9dSDag-Erling Smørgrav const struct pam_message **_msg, 259ac7e3b9dSDag-Erling Smørgrav struct pam_response **_resp, 260ac7e3b9dSDag-Erling Smørgrav void *_data); 261ac7e3b9dSDag-Erling Smørgrav 262ac7e3b9dSDag-Erling Smørgrav /* 2635c1eca55SDag-Erling Smørgrav * PAM primitives 2645c1eca55SDag-Erling Smørgrav */ 2655c1eca55SDag-Erling Smørgrav enum { 2665c1eca55SDag-Erling Smørgrav PAM_SM_AUTHENTICATE, 2675c1eca55SDag-Erling Smørgrav PAM_SM_SETCRED, 2685c1eca55SDag-Erling Smørgrav PAM_SM_ACCT_MGMT, 2695c1eca55SDag-Erling Smørgrav PAM_SM_OPEN_SESSION, 2705c1eca55SDag-Erling Smørgrav PAM_SM_CLOSE_SESSION, 2715c1eca55SDag-Erling Smørgrav PAM_SM_CHAUTHTOK, 2725c1eca55SDag-Erling Smørgrav /* keep this last */ 2735c1eca55SDag-Erling Smørgrav PAM_NUM_PRIMITIVES 2745c1eca55SDag-Erling Smørgrav }; 2755c1eca55SDag-Erling Smørgrav 2765c1eca55SDag-Erling Smørgrav /* 2775c1eca55SDag-Erling Smørgrav * Dummy service module function 2785c1eca55SDag-Erling Smørgrav */ 2795c1eca55SDag-Erling Smørgrav #define PAM_SM_DUMMY(type) \ 2805c1eca55SDag-Erling Smørgrav PAM_EXTERN int \ 2815c1eca55SDag-Erling Smørgrav pam_sm_##type(pam_handle_t *pamh, int flags, \ 2825c1eca55SDag-Erling Smørgrav int argc, const char *argv[]) \ 2835c1eca55SDag-Erling Smørgrav { \ 284fe980754SDag-Erling Smørgrav \ 285fe980754SDag-Erling Smørgrav (void)pamh; \ 286fe980754SDag-Erling Smørgrav (void)flags; \ 287fe980754SDag-Erling Smørgrav (void)argc; \ 288fe980754SDag-Erling Smørgrav (void)argv; \ 2895c1eca55SDag-Erling Smørgrav return (PAM_IGNORE); \ 2905c1eca55SDag-Erling Smørgrav } 2915c1eca55SDag-Erling Smørgrav 2925c1eca55SDag-Erling Smørgrav /* 2935c1eca55SDag-Erling Smørgrav * PAM service module functions match this typedef 2945c1eca55SDag-Erling Smørgrav */ 2955c1eca55SDag-Erling Smørgrav struct pam_handle; 2965c1eca55SDag-Erling Smørgrav typedef int (*pam_func_t)(struct pam_handle *, int, int, const char **); 2975c1eca55SDag-Erling Smørgrav 2985c1eca55SDag-Erling Smørgrav /* 2995c1eca55SDag-Erling Smørgrav * A struct that describes a module. 3005c1eca55SDag-Erling Smørgrav */ 3015c1eca55SDag-Erling Smørgrav typedef struct pam_module pam_module_t; 3025c1eca55SDag-Erling Smørgrav struct pam_module { 3034579d22cSDag-Erling Smørgrav char *path; 3045c1eca55SDag-Erling Smørgrav pam_func_t func[PAM_NUM_PRIMITIVES]; 3055c1eca55SDag-Erling Smørgrav void *dlh; 3065c1eca55SDag-Erling Smørgrav }; 3075c1eca55SDag-Erling Smørgrav 3085c1eca55SDag-Erling Smørgrav /* 309b825a3acSDag-Erling Smørgrav * Source-code compatibility with Linux-PAM modules 310b825a3acSDag-Erling Smørgrav */ 311b825a3acSDag-Erling Smørgrav #if defined(PAM_SM_AUTH) || defined(PAM_SM_ACCOUNT) || \ 312b825a3acSDag-Erling Smørgrav defined(PAM_SM_SESSION) || defined(PAM_SM_PASSWORD) 313b825a3acSDag-Erling Smørgrav # define LINUX_PAM_MODULE 314b825a3acSDag-Erling Smørgrav #endif 315fe980754SDag-Erling Smørgrav 316b825a3acSDag-Erling Smørgrav #if defined(LINUX_PAM_MODULE) && !defined(PAM_SM_AUTH) 317b825a3acSDag-Erling Smørgrav # define _PAM_SM_AUTHENTICATE 0 318b825a3acSDag-Erling Smørgrav # define _PAM_SM_SETCRED 0 319b825a3acSDag-Erling Smørgrav #else 320b825a3acSDag-Erling Smørgrav # undef PAM_SM_AUTH 321b825a3acSDag-Erling Smørgrav # define PAM_SM_AUTH 322b825a3acSDag-Erling Smørgrav # define _PAM_SM_AUTHENTICATE pam_sm_authenticate 323b825a3acSDag-Erling Smørgrav # define _PAM_SM_SETCRED pam_sm_setcred 324b825a3acSDag-Erling Smørgrav #endif 325fe980754SDag-Erling Smørgrav 326b825a3acSDag-Erling Smørgrav #if defined(LINUX_PAM_MODULE) && !defined(PAM_SM_ACCOUNT) 327b825a3acSDag-Erling Smørgrav # define _PAM_SM_ACCT_MGMT 0 328b825a3acSDag-Erling Smørgrav #else 329b825a3acSDag-Erling Smørgrav # undef PAM_SM_ACCOUNT 330b825a3acSDag-Erling Smørgrav # define PAM_SM_ACCOUNT 331b825a3acSDag-Erling Smørgrav # define _PAM_SM_ACCT_MGMT pam_sm_acct_mgmt 332b825a3acSDag-Erling Smørgrav #endif 333fe980754SDag-Erling Smørgrav 334b825a3acSDag-Erling Smørgrav #if defined(LINUX_PAM_MODULE) && !defined(PAM_SM_SESSION) 335b825a3acSDag-Erling Smørgrav # define _PAM_SM_OPEN_SESSION 0 336b825a3acSDag-Erling Smørgrav # define _PAM_SM_CLOSE_SESSION 0 337b825a3acSDag-Erling Smørgrav #else 338b825a3acSDag-Erling Smørgrav # undef PAM_SM_SESSION 339b825a3acSDag-Erling Smørgrav # define PAM_SM_SESSION 340b825a3acSDag-Erling Smørgrav # define _PAM_SM_OPEN_SESSION pam_sm_open_session 341b825a3acSDag-Erling Smørgrav # define _PAM_SM_CLOSE_SESSION pam_sm_close_session 342b825a3acSDag-Erling Smørgrav #endif 343fe980754SDag-Erling Smørgrav 344b825a3acSDag-Erling Smørgrav #if defined(LINUX_PAM_MODULE) && !defined(PAM_SM_PASSWORD) 345b825a3acSDag-Erling Smørgrav # define _PAM_SM_CHAUTHTOK 0 346b825a3acSDag-Erling Smørgrav #else 347b825a3acSDag-Erling Smørgrav # undef PAM_SM_PASSWORD 348b825a3acSDag-Erling Smørgrav # define PAM_SM_PASSWORD 349b825a3acSDag-Erling Smørgrav # define _PAM_SM_CHAUTHTOK pam_sm_chauthtok 350b825a3acSDag-Erling Smørgrav #endif 351b825a3acSDag-Erling Smørgrav 352b825a3acSDag-Erling Smørgrav /* 3535c1eca55SDag-Erling Smørgrav * Infrastructure for static modules using GCC linker sets. 3545c1eca55SDag-Erling Smørgrav * You are not expected to understand this. 3555c1eca55SDag-Erling Smørgrav */ 3561dde0f97SDag-Erling Smørgrav #if !defined(PAM_SOEXT) 3575c1eca55SDag-Erling Smørgrav # define PAM_SOEXT ".so" 3585c1eca55SDag-Erling Smørgrav #endif 359fe980754SDag-Erling Smørgrav 3601dde0f97SDag-Erling Smørgrav #if defined(OPENPAM_STATIC_MODULES) 3611dde0f97SDag-Erling Smørgrav # if !defined(__GNUC__) 3621dde0f97SDag-Erling Smørgrav # error "Don't know how to build static modules on non-GNU compilers" 3631dde0f97SDag-Erling Smørgrav # endif 3645c1eca55SDag-Erling Smørgrav /* gcc, static linking */ 3655c1eca55SDag-Erling Smørgrav # include <sys/cdefs.h> 3665c1eca55SDag-Erling Smørgrav # include <linker_set.h> 3675c1eca55SDag-Erling Smørgrav # define PAM_EXTERN static 3685c1eca55SDag-Erling Smørgrav # define PAM_MODULE_ENTRY(name) \ 3694579d22cSDag-Erling Smørgrav static char _pam_name[] = name PAM_SOEXT; \ 370fe980754SDag-Erling Smørgrav static struct pam_module _pam_module = { \ 371fe980754SDag-Erling Smørgrav .path = _pam_name, \ 372fe980754SDag-Erling Smørgrav .func = { \ 373fe980754SDag-Erling Smørgrav [PAM_SM_AUTHENTICATE] = _PAM_SM_AUTHENTICATE, \ 374fe980754SDag-Erling Smørgrav [PAM_SM_SETCRED] = _PAM_SM_SETCRED, \ 375fe980754SDag-Erling Smørgrav [PAM_SM_ACCT_MGMT] = _PAM_SM_ACCT_MGMT, \ 376fe980754SDag-Erling Smørgrav [PAM_SM_OPEN_SESSION] = _PAM_SM_OPEN_SESSION, \ 377fe980754SDag-Erling Smørgrav [PAM_SM_CLOSE_SESSION] = _PAM_SM_CLOSE_SESSION, \ 378fe980754SDag-Erling Smørgrav [PAM_SM_CHAUTHTOK] = _PAM_SM_CHAUTHTOK \ 379fe980754SDag-Erling Smørgrav }, \ 380fe980754SDag-Erling Smørgrav }; \ 38146acc370SDag-Erling Smørgrav DATA_SET(_openpam_static_modules, _pam_module) 3825c1eca55SDag-Erling Smørgrav #else 3835c1eca55SDag-Erling Smørgrav /* normal case */ 3845c1eca55SDag-Erling Smørgrav # define PAM_EXTERN 3855c1eca55SDag-Erling Smørgrav # define PAM_MODULE_ENTRY(name) 3865c1eca55SDag-Erling Smørgrav #endif 3875c1eca55SDag-Erling Smørgrav 3885c1eca55SDag-Erling Smørgrav #ifdef __cplusplus 3895c1eca55SDag-Erling Smørgrav } 3905c1eca55SDag-Erling Smørgrav #endif 3915c1eca55SDag-Erling Smørgrav 392fe980754SDag-Erling Smørgrav #endif /* !SECURITY_OPENPAM_H_INCLUDED */ 393