Deleted Added
full compact
openpam_impl.h (186063) openpam_impl.h (228690)
1/*-
2 * Copyright (c) 2001-2003 Networks Associates Technology, Inc.
1/*-
2 * Copyright (c) 2001-2003 Networks Associates Technology, Inc.
3 * Copyright (c) 2004-2007 Dag-Erling Sm��rgrav
3 * Copyright (c) 2004-2011 Dag-Erling Sm��rgrav
4 * All rights reserved.
5 *
6 * This software was developed for the FreeBSD Project by ThinkSec AS and
7 * Network Associates Laboratories, the Security Research Division of
8 * Network Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035
9 * ("CBOSS"), as part of the DARPA CHATS research program.
10 *
11 * Redistribution and use in source and binary forms, with or without

--- 15 unchanged lines hidden (view full) ---

27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
34 *
4 * All rights reserved.
5 *
6 * This software was developed for the FreeBSD Project by ThinkSec AS and
7 * Network Associates Laboratories, the Security Research Division of
8 * Network Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035
9 * ("CBOSS"), as part of the DARPA CHATS research program.
10 *
11 * Redistribution and use in source and binary forms, with or without

--- 15 unchanged lines hidden (view full) ---

27 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 * SUCH DAMAGE.
34 *
35 * $Id: openpam_impl.h 408 2007-12-21 11:36:24Z des $
35 * $Id: openpam_impl.h 499 2011-11-22 11:51:50Z des $
36 */
37
36 */
37
38#ifndef _OPENPAM_IMPL_H_INCLUDED
39#define _OPENPAM_IMPL_H_INCLUDED
38#ifndef OPENPAM_IMPL_H_INCLUDED
39#define OPENPAM_IMPL_H_INCLUDED
40
40
41#ifdef HAVE_CONFIG_H
42# include <config.h>
43#endif
44
45#include <security/openpam.h>
46
41#include <security/openpam.h>
42
47extern const char *_pam_func_name[PAM_NUM_PRIMITIVES];
48extern const char *_pam_sm_func_name[PAM_NUM_PRIMITIVES];
49extern const char *_pam_err_name[PAM_NUM_ERRORS];
50extern const char *_pam_item_name[PAM_NUM_ITEMS];
43extern int openpam_debug;
51
44
52extern int _openpam_debug;
53
54/*
55 * Control flags
56 */
57typedef enum {
58 PAM_BINDING,
59 PAM_REQUIRED,
60 PAM_REQUISITE,
61 PAM_SUFFICIENT,

--- 8 unchanged lines hidden (view full) ---

70 PAM_FACILITY_ANY = -1,
71 PAM_AUTH = 0,
72 PAM_ACCOUNT,
73 PAM_SESSION,
74 PAM_PASSWORD,
75 PAM_NUM_FACILITIES
76} pam_facility_t;
77
45/*
46 * Control flags
47 */
48typedef enum {
49 PAM_BINDING,
50 PAM_REQUIRED,
51 PAM_REQUISITE,
52 PAM_SUFFICIENT,

--- 8 unchanged lines hidden (view full) ---

61 PAM_FACILITY_ANY = -1,
62 PAM_AUTH = 0,
63 PAM_ACCOUNT,
64 PAM_SESSION,
65 PAM_PASSWORD,
66 PAM_NUM_FACILITIES
67} pam_facility_t;
68
69/*
70 * Module chains
71 */
78typedef struct pam_chain pam_chain_t;
79struct pam_chain {
80 pam_module_t *module;
81 int flag;
82 int optc;
83 char **optv;
84 pam_chain_t *next;
85};
86
72typedef struct pam_chain pam_chain_t;
73struct pam_chain {
74 pam_module_t *module;
75 int flag;
76 int optc;
77 char **optv;
78 pam_chain_t *next;
79};
80
81/*
82 * Service policies
83 */
84#if defined(OPENPAM_EMBEDDED)
85typedef struct pam_policy pam_policy_t;
86struct pam_policy {
87 const char *service;
88 pam_chain_t *chains[PAM_NUM_FACILITIES];
89};
90extern pam_policy_t *pam_embedded_policies[];
91#endif
92
93/*
94 * Module-specific data
95 */
87typedef struct pam_data pam_data_t;
88struct pam_data {
89 char *name;
90 void *data;
91 void (*cleanup)(pam_handle_t *, void *, int);
92 pam_data_t *next;
93};
94
96typedef struct pam_data pam_data_t;
97struct pam_data {
98 char *name;
99 void *data;
100 void (*cleanup)(pam_handle_t *, void *, int);
101 pam_data_t *next;
102};
103
104/*
105 * PAM context
106 */
95struct pam_handle {
96 char *service;
97
98 /* chains */
99 pam_chain_t *chains[PAM_NUM_FACILITIES];
100 pam_chain_t *current;
101 int primitive;
102
103 /* items and data */
104 void *item[PAM_NUM_ITEMS];
105 pam_data_t *module_data;
106
107 /* environment list */
108 char **env;
109 int env_count;
110 int env_size;
111};
112
113#ifdef NGROUPS_MAX
107struct pam_handle {
108 char *service;
109
110 /* chains */
111 pam_chain_t *chains[PAM_NUM_FACILITIES];
112 pam_chain_t *current;
113 int primitive;
114
115 /* items and data */
116 void *item[PAM_NUM_ITEMS];
117 pam_data_t *module_data;
118
119 /* environment list */
120 char **env;
121 int env_count;
122 int env_size;
123};
124
125#ifdef NGROUPS_MAX
126/*
127 * Saved credentials
128 */
114#define PAM_SAVED_CRED "pam_saved_cred"
115struct pam_saved_cred {
116 uid_t euid;
117 gid_t egid;
118 gid_t groups[NGROUPS_MAX];
119 int ngroups;
120};
121#endif
122
129#define PAM_SAVED_CRED "pam_saved_cred"
130struct pam_saved_cred {
131 uid_t euid;
132 gid_t egid;
133 gid_t groups[NGROUPS_MAX];
134 int ngroups;
135};
136#endif
137
138/*
139 * Default policy
140 */
123#define PAM_OTHER "other"
124
141#define PAM_OTHER "other"
142
143/*
144 * Internal functions
145 */
125int openpam_configure(pam_handle_t *, const char *);
126int openpam_dispatch(pam_handle_t *, int, int);
127int openpam_findenv(pam_handle_t *, const char *, size_t);
128pam_module_t *openpam_load_module(const char *);
129void openpam_clear_chains(pam_chain_t **);
130
146int openpam_configure(pam_handle_t *, const char *);
147int openpam_dispatch(pam_handle_t *, int, int);
148int openpam_findenv(pam_handle_t *, const char *, size_t);
149pam_module_t *openpam_load_module(const char *);
150void openpam_clear_chains(pam_chain_t **);
151
152int openpam_check_desc_owner_perms(const char *, int);
153int openpam_check_path_owner_perms(const char *);
154
131#ifdef OPENPAM_STATIC_MODULES
132pam_module_t *openpam_static(const char *);
133#endif
134pam_module_t *openpam_dynamic(const char *);
135
136#define FREE(p) do { free((p)); (p) = NULL; } while (0)
137
155#ifdef OPENPAM_STATIC_MODULES
156pam_module_t *openpam_static(const char *);
157#endif
158pam_module_t *openpam_dynamic(const char *);
159
160#define FREE(p) do { free((p)); (p) = NULL; } while (0)
161
138#ifdef DEBUG
139#define ENTER() openpam_log(PAM_LOG_DEBUG, "entering")
140#define ENTERI(i) do { \
141 int _i = (i); \
142 if (_i > 0 && _i < PAM_NUM_ITEMS) \
143 openpam_log(PAM_LOG_DEBUG, "entering: %s", _pam_item_name[_i]); \
144 else \
145 openpam_log(PAM_LOG_DEBUG, "entering: %d", _i); \
146} while (0)
147#define ENTERN(n) do { \
148 int _n = (n); \
149 openpam_log(PAM_LOG_DEBUG, "entering: %d", _n); \
150} while (0)
151#define ENTERS(s) do { \
152 const char *_s = (s); \
153 if (_s == NULL) \
154 openpam_log(PAM_LOG_DEBUG, "entering: NULL"); \
155 else \
156 openpam_log(PAM_LOG_DEBUG, "entering: '%s'", _s); \
157} while (0)
158#define RETURNV() openpam_log(PAM_LOG_DEBUG, "returning")
159#define RETURNC(c) do { \
160 int _c = (c); \
161 if (_c >= 0 && _c < PAM_NUM_ERRORS) \
162 openpam_log(PAM_LOG_DEBUG, "returning %s", _pam_err_name[_c]); \
163 else \
164 openpam_log(PAM_LOG_DEBUG, "returning %d!", _c); \
165 return (_c); \
166} while (0)
167#define RETURNN(n) do { \
168 int _n = (n); \
169 openpam_log(PAM_LOG_DEBUG, "returning %d", _n); \
170 return (_n); \
171} while (0)
172#define RETURNP(p) do { \
173 const void *_p = (p); \
174 if (_p == NULL) \
175 openpam_log(PAM_LOG_DEBUG, "returning NULL"); \
176 else \
177 openpam_log(PAM_LOG_DEBUG, "returning %p", _p); \
178 return (p); \
179} while (0)
180#define RETURNS(s) do { \
181 const char *_s = (s); \
182 if (_s == NULL) \
183 openpam_log(PAM_LOG_DEBUG, "returning NULL"); \
184 else \
185 openpam_log(PAM_LOG_DEBUG, "returning '%s'", _s); \
186 return (_s); \
187} while (0)
188#else
189#define ENTER()
190#define ENTERI(i)
191#define ENTERN(n)
192#define ENTERS(s)
193#define RETURNV() return
194#define RETURNC(c) return (c)
195#define RETURNN(n) return (n)
196#define RETURNP(p) return (p)
197#define RETURNS(s) return (s)
198#endif
162#include "openpam_constants.h"
163#include "openpam_debug.h"
199
200#endif
164
165#endif