2 * Copyright (c) 2001-2003 Networks Associates Technology, Inc.
5 * This software was developed for the FreeBSD Project by ThinkSec AS and
6 * Network Associates Laboratories, the Security Research Division of
7 * Network Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035
8 * ("CBOSS"), as part of the DARPA CHATS research program.
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 * 3. The name of the author may not be used to endorse or promote
19 * products derived from this software without specific prior written
22 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
23 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
26 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * $P4: //depot/projects/openpam/lib/openpam_impl.h#29 $
37 #ifndef _OPENPAM_IMPL_H_INCLUDED
38 #define _OPENPAM_IMPL_H_INCLUDED
44 #include <security/openpam.h>
46 extern const char *_pam_func_name
[PAM_NUM_PRIMITIVES
];
47 extern const char *_pam_sm_func_name
[PAM_NUM_PRIMITIVES
];
48 extern const char *_pam_err_name
[PAM_NUM_ERRORS
];
49 extern const char *_pam_item_name
[PAM_NUM_ITEMS
];
51 extern int _openpam_debug
;
69 PAM_FACILITY_ANY
= -1,
77 typedef struct pam_chain pam_chain_t
;
86 typedef struct pam_data pam_data_t
;
90 void (*cleanup
)(pam_handle_t
*, void *, int);
98 pam_chain_t
*chains
[PAM_NUM_FACILITIES
];
103 void *item
[PAM_NUM_ITEMS
];
104 pam_data_t
*module_data
;
106 /* environment list */
113 #define PAM_SAVED_CRED "pam_saved_cred"
114 struct pam_saved_cred
{
117 gid_t groups
[NGROUPS_MAX
];
122 #define PAM_OTHER "other"
124 int openpam_configure(pam_handle_t
*, const char *);
125 int openpam_dispatch(pam_handle_t
*, int, int);
126 int openpam_findenv(pam_handle_t
*, const char *, size_t);
127 pam_module_t
*openpam_load_module(const char *);
128 void openpam_clear_chains(pam_chain_t
**);
130 #ifdef OPENPAM_STATIC_MODULES
131 pam_module_t
*openpam_static(const char *);
133 pam_module_t
*openpam_dynamic(const char *);
135 #define FREE(p) do { free((p)); (p) = NULL; } while (0)
138 #define ENTER() openpam_log(PAM_LOG_DEBUG, "entering")
139 #define ENTERI(i) do { \
141 if (_i > 0 && _i < PAM_NUM_ITEMS) \
142 openpam_log(PAM_LOG_DEBUG, "entering: %s", _pam_item_name[_i]); \
144 openpam_log(PAM_LOG_DEBUG, "entering: %d", _i); \
146 #define ENTERN(n) do { \
148 openpam_log(PAM_LOG_DEBUG, "entering: %d", _n); \
150 #define ENTERS(s) do { \
151 const char *_s = (s); \
153 openpam_log(PAM_LOG_DEBUG, "entering: NULL"); \
155 openpam_log(PAM_LOG_DEBUG, "entering: '%s'", _s); \
157 #define RETURNV() openpam_log(PAM_LOG_DEBUG, "returning")
158 #define RETURNC(c) do { \
160 if (_c >= 0 && _c < PAM_NUM_ERRORS) \
161 openpam_log(PAM_LOG_DEBUG, "returning %s", _pam_err_name[_c]); \
163 openpam_log(PAM_LOG_DEBUG, "returning %d!", _c); \
166 #define RETURNN(n) do { \
168 openpam_log(PAM_LOG_DEBUG, "returning %d", _n); \
171 #define RETURNP(p) do { \
172 const void *_p = (p); \
174 openpam_log(PAM_LOG_DEBUG, "returning NULL"); \
176 openpam_log(PAM_LOG_DEBUG, "returning %p", _p); \
179 #define RETURNS(s) do { \
180 const char *_s = (s); \
182 openpam_log(PAM_LOG_DEBUG, "returning NULL"); \
184 openpam_log(PAM_LOG_DEBUG, "returning '%s'", _s); \
192 #define RETURNV() return
193 #define RETURNC(c) return (c)
194 #define RETURNN(n) return (n)
195 #define RETURNP(p) return (p)
196 #define RETURNS(s) return (s)