Better r.e. to prevent from substituing empty strings on some platforms
[mod_auth_kerb.git] / src / mit-internals.h
1 /*
2  * Copyright (C) 1989,1990,1991,1992,1993,1994,1995,2000,2001, 2003 by the Massachusetts Institute of Technology,
3  * Cambridge, MA, USA.  All Rights Reserved.
4  *
5  * This software is being provided to you, the LICENSEE, by the
6  * Massachusetts Institute of Technology (M.I.T.) under the following
7  * license.  By obtaining, using and/or copying this software, you agree
8  * that you have read, understood, and will comply with these terms and
9  * conditions:
10  *
11  * Export of this software from the United States of America may
12  * require a specific license from the United States Government.
13  * It is the responsibility of any person or organization contemplating
14  * export to obtain such a license before exporting.
15  *
16  * WITHIN THAT CONSTRAINT, permission to use, copy, modify and distribute
17  * this software and its documentation for any purpose and without fee or
18  * royalty is hereby granted, provided that you agree to comply with the
19  * following copyright notice and statements, including the disclaimer, and
20  * that the same appear on ALL copies of the software and documentation,
21  * including modifications that you make for internal use or for
22  * distribution:
23  *
24  * THIS SOFTWARE IS PROVIDED "AS IS", AND M.I.T. MAKES NO REPRESENTATIONS
25  * OR WARRANTIES, EXPRESS OR IMPLIED.  By way of example, but not
26  * limitation, M.I.T. MAKES NO REPRESENTATIONS OR WARRANTIES OF
27  * MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF
28  * THE LICENSED SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY
29  * PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
30  *
31  * The name of the Massachusetts Institute of Technology or M.I.T. may NOT
32  * be used in advertising or publicity pertaining to distribution of the
33  * software.  Title to copyright in this software and any associated
34  * documentation shall at all times remain with M.I.T., and USER agrees to
35  * preserve same.
36  *
37  * Furthermore if you modify this software you must label
38  * your software as modified software and not distribute it in such a
39  * fashion that it might be confused with the original M.I.T. software.
40  */
41
42 /*
43  * Copyright (C) 1998 by the FundsXpress, INC.
44  *
45  * All rights reserved.
46  *
47  * Export of this software from the United States of America may require
48  * a specific license from the United States Government.  It is the
49  * responsibility of any person or organization contemplating export to
50  * obtain such a license before exporting.
51  *
52  * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
53  * distribute this software and its documentation for any purpose and
54  * without fee is hereby granted, provided that the above copyright
55  * notice appear in all copies and that both that copyright notice and
56  * this permission notice appear in supporting documentation, and that
57  * the name of FundsXpress. not be used in advertising or publicity pertaining
58  * to distribution of the software without specific, written prior
59  * permission.  FundsXpress makes no representations about the suitability of
60  * this software for any purpose.  It is provided "as is" without express
61  * or implied warranty.
62  *
63  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
64  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
65  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
66  */
67
68 /*
69  * Copyright 1993 by OpenVision Technologies, Inc.
70  *
71  * Permission to use, copy, modify, distribute, and sell this software
72  * and its documentation for any purpose is hereby granted without fee,
73  * provided that the above copyright notice appears in all copies and
74  * that both that copyright notice and this permission notice appear in
75  * supporting documentation, and that the name of OpenVision not be used
76  * in advertising or publicity pertaining to distribution of the software
77  * without specific, written prior permission. OpenVision makes no
78  * representations about the suitability of this software for any
79  * purpose.  It is provided "as is" without express or implied warranty.
80  *
81  * OPENVISION DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
82  * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
83  * EVENT SHALL OPENVISION BE LIABLE FOR ANY SPECIAL, INDIRECT OR
84  * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
85  * USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
86  * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
87  * PERFORMANCE OF THIS SOFTWARE.
88  */
89
90 #ifndef _MIT_INTERNALS_H_
91 #define _MIT_INTERNALS_H_
92
93 /* must be included after krb5.h to override definitons from there */
94
95 /*
96  * MIT Kerberos 1.3.x replay cache implementation causes major problems
97  * with Microsoft Kerberos5 implementation by incorrectly detecting
98  * Microsoft authenticators as replays. The problem is being worked on
99  * by both MIT and Microsoft but until a definite fix is available, we
100  * must disable the replay cache in order to work with Microsoft clients.
101  * The only working way to do this seems to be overriding the function
102  * that stores authenticators in replay cache with one that does nothing.
103  * Note that disabling replay cache is potentially unsecure.
104  */
105
106 /* Definition from MIT krb5-1.3.3 krb5.h */
107 typedef struct _krb5_donot_replay_internal {
108     krb5_magic magic;
109     char *server;                       /* null-terminated */
110     char *client;                       /* null-terminated */
111     krb5_int32 cusec;
112     krb5_timestamp ctime;
113 } krb5_donot_replay_internal;
114
115 /* Definitions from MIT krb5-1.3.3 k5-int.h */
116 struct _krb5_rc_ops_internal {
117     krb5_magic magic;
118     char *type;
119     krb5_error_code (KRB5_CALLCONV *init)
120         (krb5_context, krb5_rcache,krb5_deltat); /* create */
121     krb5_error_code (KRB5_CALLCONV *recover)
122         (krb5_context, krb5_rcache); /* open */
123     krb5_error_code (KRB5_CALLCONV *destroy)
124         (krb5_context, krb5_rcache);
125     krb5_error_code (KRB5_CALLCONV *close)
126         (krb5_context, krb5_rcache);
127     krb5_error_code (KRB5_CALLCONV *store)
128         (krb5_context, krb5_rcache,krb5_donot_replay_internal *);
129     krb5_error_code (KRB5_CALLCONV *expunge)
130         (krb5_context, krb5_rcache);
131     krb5_error_code (KRB5_CALLCONV *get_span)
132         (krb5_context, krb5_rcache,krb5_deltat *);
133     char *(KRB5_CALLCONV *get_name)
134         (krb5_context, krb5_rcache);
135     krb5_error_code (KRB5_CALLCONV *resolve)
136         (krb5_context, krb5_rcache, char *);
137 };
138
139 typedef struct _krb5_rc_ops_internal krb5_rc_ops_internal;
140
141 /* Definitions from MIT krb5-1.3.3 rc_dfl.h */
142 extern krb5_error_code KRB5_CALLCONV krb5_rc_dfl_init
143         (krb5_context,
144                    krb5_rcache,
145                    krb5_deltat);
146 extern krb5_error_code KRB5_CALLCONV krb5_rc_dfl_recover
147         (krb5_context,
148                    krb5_rcache);
149 extern krb5_error_code KRB5_CALLCONV krb5_rc_dfl_destroy
150         (krb5_context,
151                    krb5_rcache);
152 extern krb5_error_code KRB5_CALLCONV krb5_rc_dfl_close
153         (krb5_context,
154                    krb5_rcache);
155 extern krb5_error_code KRB5_CALLCONV krb5_rc_dfl_expunge
156         (krb5_context,
157                    krb5_rcache);
158 extern krb5_error_code KRB5_CALLCONV krb5_rc_dfl_get_span
159         (krb5_context,
160                    krb5_rcache,
161                    krb5_deltat *);
162 extern char * KRB5_CALLCONV krb5_rc_dfl_get_name
163         (krb5_context,
164                    krb5_rcache);
165 extern krb5_error_code KRB5_CALLCONV krb5_rc_dfl_resolve
166         (krb5_context,
167                    krb5_rcache,
168                    char *);
169
170 /* Definition from MIT krb5-1.3.3 k5-int.h */
171 /* kouril: use the _internal suffix in order to avoid conflicts with 
172  * the definition in krb5.h */
173 struct krb5_rc_st_internal {
174         krb5_magic magic;
175         const struct _krb5_rc_ops_internal *ops;
176         krb5_pointer data;
177 };
178
179 typedef struct krb5_rc_st_internal *krb5_rcache_internal;
180
181 /* Definitions from MIT krb5-1.3.3 gssapiP_krb5.h */
182 typedef struct _krb5_gss_cred_id_rec {
183         /* name/type of credential */
184         gss_cred_usage_t usage;
185         krb5_principal princ;        /* this is not interned as a gss_name_t */
186         int prerfc_mech;
187         int rfc_mech;
188
189         /* keytab (accept) data */
190         krb5_keytab keytab;
191         krb5_rcache_internal rcache;
192         
193         /* ccache (init) data */
194         krb5_ccache ccache;
195         krb5_timestamp tgt_expire;
196 } krb5_gss_cred_id_rec, *krb5_gss_cred_id_t;
197
198 #endif /* _MIT_INTERNALS_H_ */