1/*
2 * Copyright (c) 2010 Apple Inc. All rights reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * 1.  Redistributions of source code must retain the above copyright
11 *     notice, this list of conditions and the following disclaimer.
12 * 2.  Redistributions in binary form must reproduce the above copyright
13 *     notice, this list of conditions and the following disclaimer in the
14 *     documentation and/or other materials provided with the distribution.
15 * 3.  Neither the name of Apple Inc. ("Apple") nor the names of its
16 *     contributors may be used to endorse or promote products derived from
17 *     this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
20 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 *
30 * Portions of this software have been released under the following terms:
31 *
32 * (c) Copyright 1989-1993 OPEN SOFTWARE FOUNDATION, INC.
33 * (c) Copyright 1989-1993 HEWLETT-PACKARD COMPANY
34 * (c) Copyright 1989-1993 DIGITAL EQUIPMENT CORPORATION
35 *
36 * To anyone who acknowledges that this file is provided "AS IS"
37 * without any express or implied warranty:
38 * permission to use, copy, modify, and distribute this file for any
39 * purpose is hereby granted without fee, provided that the above
40 * copyright notices and this notice appears in all source code copies,
41 * and that none of the names of Open Software Foundation, Inc., Hewlett-
42 * Packard Company or Digital Equipment Corporation be used
43 * in advertising or publicity pertaining to distribution of the software
44 * without specific, written prior permission.  Neither Open Software
45 * Foundation, Inc., Hewlett-Packard Company nor Digital
46 * Equipment Corporation makes any representations about the suitability
47 * of this software for any purpose.
48 *
49 * Copyright (c) 2007, Novell, Inc. All rights reserved.
50 * Redistribution and use in source and binary forms, with or without
51 * modification, are permitted provided that the following conditions
52 * are met:
53 *
54 * 1.  Redistributions of source code must retain the above copyright
55 *     notice, this list of conditions and the following disclaimer.
56 * 2.  Redistributions in binary form must reproduce the above copyright
57 *     notice, this list of conditions and the following disclaimer in the
58 *     documentation and/or other materials provided with the distribution.
59 * 3.  Neither the name of Novell Inc. nor the names of its contributors
60 *     may be used to endorse or promote products derived from this
61 *     this software without specific prior written permission.
62 *
63 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
64 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
65 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
66 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY
67 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
68 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
69 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
70 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
71 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
72 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
73 *
74 * @APPLE_LICENSE_HEADER_END@
75 */
76
77/*
78**
79**  NAME
80**
81**      schnauth.h
82**
83**  FACILITY:
84**
85**      Remote Procedure Call (RPC)
86**
87**  ABSTRACT:
88**
89**      Types and routines private to the schannel authentication
90**      module.
91**
92**
93*/
94
95#ifndef _SCHNAUTH_H
96#define _SCHNAUTH_H	1
97
98#ifdef HAVE_CONFIG_H
99#include <config.h>
100#endif
101
102#include <commonp.h>
103#include <com.h>
104#include <comp.h>
105
106#include <dce/id_base.h>
107#include <dce/sec_authn.h>
108
109#include <schannel.h>
110
111typedef struct rpc_schnauth_info_t {
112    rpc_auth_info_t auth_info;  /* This must be the first element. */
113    rpc_mutex_t lock;
114
115    /*
116     * Schannel security context
117     */
118
119    struct schn_auth_ctx sec_ctx;
120
121} rpc_schnauth_info_t, *rpc_schnauth_info_p_t;
122
123/*
124 * Locking macros.
125 */
126
127#define RPC_SCHN_INFO_LOCK(info) RPC_MUTEX_LOCK ((info)->lock)
128#define RPC_SCHN_INFO_UNLOCK(info) RPC_MUTEX_UNLOCK ((info)->lock)
129
130/*
131 * Prototypes for PRIVATE routines.
132 */
133
134PRIVATE rpc_protocol_id_t       rpc__schnauth_cn_init (
135    rpc_auth_rpc_prot_epv_p_t       *epv,
136    unsigned32                      *st
137    );
138
139/*
140 * Prototypes for API EPV routines.
141 */
142
143void rpc__schnauth_bnd_set_auth (
144        unsigned_char_p_t                   /* in  */    /*server_princ_name*/,
145        rpc_authn_level_t                   /* in  */    /*authn_level*/,
146        rpc_auth_identity_handle_t          /* in  */    /*auth_identity*/,
147        rpc_authz_protocol_id_t             /* in  */    /*authz_protocol*/,
148        rpc_binding_handle_t                /* in  */    /*binding_h*/,
149        rpc_auth_info_p_t                   /* out */   * /*auth_info*/,
150        unsigned32                          /* out */   * /*st*/
151    );
152
153void rpc__schnauth_srv_reg_auth (
154        unsigned_char_p_t                   /* in  */    /*server_princ_name*/,
155        rpc_auth_key_retrieval_fn_t         /* in  */    /*get_key_func*/,
156        dce_pointer_t                           /* in  */    /*arg*/,
157        unsigned32                          /* out */   * /*st*/
158    );
159
160void rpc__schnauth_mgt_inq_def (
161        unsigned32                          /* out */   * /*authn_level*/,
162        unsigned32                          /* out */   * /*st*/
163    );
164
165void rpc__schnauth_inq_my_princ_name (
166        unsigned32                          /* in */     /*princ_name_size*/,
167        unsigned_char_p_t                   /* out */    /*princ_name*/,
168        unsigned32                          /* out */   * /*st*/
169    );
170
171void rpc__schnauth_free_info (
172        rpc_auth_info_p_t                   /* in/out */ * /*info*/
173    );
174
175void rpc__schnauth_free_key (
176        rpc_key_info_p_t                    /* in/out */ * /*key_info*/
177    );
178
179error_status_t rpc__schnauth_resolve_identity (
180        rpc_auth_identity_handle_t          /* in */ /*in_identity*/,
181        rpc_auth_identity_handle_t          /* out */ *out_identity
182    );
183
184void rpc__schnauth_release_identity (
185        rpc_auth_identity_handle_t          /* in/out */ * /*identity*/
186    );
187
188void rpc__schnauth_inq_sec_context (
189        rpc_auth_info_p_t           auth_info,
190        void                        **mech_context,
191        unsigned32                  *st
192    );
193
194/*
195 * Miscellaneous internal entry points.
196 */
197
198sec_id_pac_t *rpc__schnauth_get_pac (void);
199
200#ifdef notdef
201/* From sec_id_pickle.h */
202
203typedef struct pickle_handle_s * pickle_handle_t;
204
205/*
206 * Functions
207 */
208
209/* s e c _ p i c k l e _ c r e a t e
210 *
211 * Create a pickling context.  This must be called to obtain a pickling
212 * context before any pickling calls can be performed.
213 */
214pickle_handle_t sec_pickle_create ( void );
215
216/* s e c _ p i c k l e _ r e l e a s e
217 *
218 * Terminate a pickling context.  This function will release any storage
219 * associated with the pickling context.
220 */
221void sec_pickle_release ( pickle_handle_t * /*p*/);
222
223/* s e c _ i d _ p a c _ f r e e
224 *
225 * Release dynamic storage associated with a PAC.
226 */
227
228void sec_id_pac_free ( sec_id_pac_t *) ;
229
230/* s e c _ i d _ p a c _ p i c k l e
231 *
232 * Pickle a pac.
233 */
234extern void     sec_id_pac_pickle (
235        /* [in] */      pickle_handle_t          /*pickle_handle*/,
236        /* [in] */      sec_id_pac_t            *  /*pac*/,
237        /* [out] */     sec_id_pickled_pac_t    **  /*pickled_pac*/
238  );
239
240/* s e c _ i d _ p a c _ u n p i c k l e
241 *
242 * unpickle a pac
243 */
244
245extern void     sec_id_pac_unpickle (
246        /* [in] */      sec_id_pickled_pac_t    *  /*pickled_pac*/,
247        /* [out] */     sec_id_pac_t            *  /*pac*/
248  );
249#endif /* notdef */
250
251#endif /* _SCHNAUTH_H */
252