openpam_impl.h revision 91094
198184Sgordon/*-
298184Sgordon * Copyright (c) 2001 Networks Associates Technologies, Inc.
398184Sgordon * All rights reserved.
498184Sgordon *
598184Sgordon * This software was developed for the FreeBSD Project by ThinkSec AS and
698184Sgordon * NAI Labs, the Security Research Division of Network Associates, Inc.
798184Sgordon * under DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the
8136224Smtm * DARPA CHATS research program.
998184Sgordon *
1098184Sgordon * Redistribution and use in source and binary forms, with or without
1198184Sgordon * modification, are permitted provided that the following conditions
1298184Sgordon * are met:
1398184Sgordon * 1. Redistributions of source code must retain the above copyright
1498184Sgordon *    notice, this list of conditions and the following disclaimer.
1598184Sgordon * 2. Redistributions in binary form must reproduce the above copyright
16222993Srmacklem *    notice, this list of conditions and the following disclaimer in the
1798184Sgordon *    documentation and/or other materials provided with the distribution.
1898184Sgordon * 3. The name of the author may not be used to endorse or promote
1998184Sgordon *    products derived from this software without specific prior written
2098184Sgordon *    permission.
2198184Sgordon *
2298184Sgordon * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
2398184Sgordon * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
2498184Sgordon * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25197947Sdougb * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
26197947Sdougb * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27180294Smtm * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28180294Smtm * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29180294Smtm * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
3098184Sgordon * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
3198184Sgordon * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32180294Smtm * SUCH DAMAGE.
33180294Smtm *
34180294Smtm * $Id$
3598184Sgordon */
3698184Sgordon
3798184Sgordon#ifndef _OPENPAM_IMPL_H_INCLUDED
3898184Sgordon#define _OPENPAM_IMPL_H_INCLUDED
3998184Sgordon
4098184Sgordon#include <security/openpam.h>
4198184Sgordon
4298184Sgordonextern const char *_pam_sm_func_name[PAM_NUM_PRIMITIVES];
4398184Sgordon
4498184Sgordon/*
4598184Sgordon * Control flags
4698184Sgordon */
4798184Sgordon#define PAM_REQUIRED		1
4898184Sgordon#define PAM_REQUISITE		2
4998184Sgordon#define PAM_SUFFICIENT		3
5098184Sgordon#define PAM_OPTIONAL		4
51#define PAM_NUM_CONTROLFLAGS	5
52
53/*
54 * Chains
55 */
56#define PAM_AUTH		0
57#define PAM_ACCOUNT		1
58#define PAM_SESSION		2
59#define PAM_PASSWORD		3
60#define PAM_NUM_CHAINS		4
61
62typedef struct pam_chain pam_chain_t;
63struct pam_chain {
64	pam_module_t	*module;
65	int		 flag;
66	int		 optc;
67	char	       **optv;
68	pam_chain_t	*next;
69};
70
71#define PAM_NUM_ITEMS	       10
72
73typedef struct pam_data pam_data_t;
74struct pam_data {
75	char		*name;
76	void		*data;
77	void		(*cleanup)(pam_handle_t *, void *, int);
78	pam_data_t	*next;
79};
80
81struct pam_handle {
82	char		*service;
83
84	/* chains */
85	pam_chain_t	*chains[PAM_NUM_CHAINS];
86	pam_chain_t	*current;
87
88	/* items and data */
89	void		*item[PAM_NUM_ITEMS];
90	pam_data_t	*module_data;
91
92	/* environment list */
93	char	       **env;
94	int		 env_count;
95	int		 env_size;
96};
97
98#define PAM_OTHER	"other"
99
100int		openpam_dispatch(pam_handle_t *, int, int);
101int		openpam_findenv(pam_handle_t *, const char *, size_t);
102int		openpam_add_module(pam_handle_t *, int, int,
103				   const char *, int, const char **);
104void		openpam_clear_chains(pam_handle_t *);
105
106#endif
107