cmd: avoid issues with static heimdal
[openafs.git] / src / cmd / krb5_locl.h
1
2 /* This header file transforms the Heimdal config_parse.c profile
3  * parser into an AFS profile parser, hiding the krb5-ness of the parser
4  * behind the scenes.
5  */
6
7 #include <afsconfig.h>
8 #include <afs/stds.h>
9
10 #include <roken.h>
11
12 #include <assert.h>
13 #include <ctype.h>
14
15 #include "cmd.h"
16
17 #define PACKAGE "openafs"
18
19 #ifndef TRUE
20 # define TRUE 1
21 #endif
22 #ifndef FALSE
23 # define FALSE 0
24 #endif
25
26 #define KRB5_BUFSIZ 1024
27
28 #define KRB5_LIB_FUNCTION static AFS_UNUSED
29 #define KRB5_LIB_CALL
30
31 #define KRB5_DEPRECATED_FUNCTION(x)
32
33 #define N_(X,Y) X
34
35 typedef struct cmd_config_binding krb5_config_binding;
36 typedef struct cmd_config_binding krb5_config_section;
37
38 #define krb5_config_list cmd_config_list
39 #define krb5_config_string cmd_config_string
40 #define _krb5_config_get_entry _cmd_config_get_entry
41
42 struct krb5_context_data {
43     krb5_config_section *cf;
44 };
45
46 typedef struct krb5_context_data * krb5_context;
47 typedef int krb5_error_code;
48 typedef int krb5_boolean;
49 typedef time_t krb5_deltat;
50
51 static void krb5_set_error_message(krb5_context context, krb5_error_code ret,
52                                    const char *fmt, ...) {
53     return;
54 }
55
56 #ifdef EXPAND_PATH_HEADER
57
58 #include <shlobj.h>
59
60 static int _krb5_expand_path_tokens(krb5_context, const char *, char**);
61
62 int
63 _cmd_ExpandPathTokens(krb5_context context, const char *in, char **out) {
64     return _krb5_expand_path_tokens(context, in, out);
65 }
66
67 HINSTANCE _krb5_hInstance = NULL;
68
69 /* This bodge avoids the need for everything linking against cmd to also
70  * link against the shell library on Windows */
71 #undef SHGetFolderPath
72 #define SHGetFolderPath internal_getpath
73
74 HRESULT internal_getpath(void *a, int b, void *c, DWORD d, LPTSTR out) {
75     return E_INVALIDARG;
76 }
77
78 #else
79
80 #define KRB5_CONFIG_BADFORMAT                    CMD_BADFORMAT
81
82 #define _krb5_expand_path_tokens _cmd_ExpandPathTokens
83
84 extern int _cmd_ExpandPathTokens(krb5_context, const char *, char **);
85
86 static const void *_krb5_config_vget(krb5_context,
87                                      const krb5_config_section *, int,
88                                      va_list);
89 static const void *_krb5_config_vget_next(krb5_context,
90                                           const krb5_config_section *,
91                                           const krb5_config_binding **,
92                                           int, va_list);
93 static const char *krb5_config_vget_string(krb5_context,
94                                            const krb5_config_section *,
95                                            va_list);
96 static const char *krb5_config_vget_string_default(krb5_context,
97                                            const krb5_config_section *,
98                                            const char *,
99                                            va_list);
100 static const krb5_config_binding * krb5_config_vget_list
101         (krb5_context, const krb5_config_section *, va_list);
102 static krb5_error_code krb5_config_parse_file_multi
103         (krb5_context, const char *, krb5_config_section **);
104 static krb5_error_code krb5_config_parse_file
105         (krb5_context, const char *, krb5_config_section **);
106 static krb5_error_code krb5_config_file_free
107         (krb5_context, krb5_config_section *);
108 static krb5_boolean krb5_config_vget_bool_default
109         (krb5_context, const krb5_config_section *, int, va_list);
110 static int krb5_config_vget_int_default
111         (krb5_context, const krb5_config_section *, int, va_list);
112
113 static krb5_error_code
114 krb5_string_to_deltat(const char *str, krb5_deltat *t) {
115     return 1;
116 }
117
118 KRB5_LIB_FUNCTION void krb5_clear_error_message(krb5_context context) {
119     return;
120 }
121
122
123 static int _krb5_homedir_access(krb5_context context) {
124     return 0;
125 }
126
127 static krb5_error_code
128 krb5_abortx(krb5_context context, const char *fmt, ...)
129 {
130     va_list ap;
131     va_start(ap, fmt);
132
133     vfprintf(stderr, fmt, ap);
134     va_end(ap);
135
136     abort();
137 }
138
139 /* Wrappers */
140
141
142 int
143 cmd_RawConfigParseFileMulti(const char *fname, cmd_config_section **res) {
144     return krb5_config_parse_file_multi(NULL, fname, res);
145 }
146
147 int
148 cmd_RawConfigParseFile(const char *fname, cmd_config_section **res) {
149     return krb5_config_parse_file(NULL, fname, res);
150 }
151
152 int
153 cmd_RawConfigFileFree(cmd_config_section *s) {
154     return krb5_config_file_free(NULL, s);
155 }
156
157 const char*
158 cmd_RawConfigGetString(const cmd_config_section *c,
159                        const char *defval, ...)
160 {
161     const char *ret;
162     va_list args;
163
164     assert(c != NULL);
165
166     va_start(args, defval);
167     ret = krb5_config_vget_string_default (NULL, c, defval, args);
168     va_end(args);
169     return ret;
170 }
171
172 int
173 cmd_RawConfigGetBool(const cmd_config_section *c, int defval, ...)
174 {
175     va_list ap;
176     krb5_boolean ret;
177
178     assert(c != NULL);
179
180     va_start(ap, defval);
181     ret = krb5_config_vget_bool_default (NULL, c, defval, ap);
182     va_end(ap);
183     return ret;
184 }
185
186 int
187 cmd_RawConfigGetInt(const cmd_config_section *c, int defval, ...)
188 {
189     va_list ap;
190     int ret;
191
192     assert(c != NULL);
193
194     va_start(ap, defval);
195     ret = krb5_config_vget_int_default (NULL, c, defval, ap);
196     va_end(ap);
197     return ret;
198 }
199
200 const cmd_config_binding *
201 cmd_RawConfigGetList(const cmd_config_section *c, ...)
202 {
203     va_list ap;
204     const cmd_config_binding *ret;
205
206     assert(c != NULL);
207
208     va_start(ap, c);
209     ret = krb5_config_vget_list (NULL, c, ap);
210     va_end(ap);
211
212     return ret;
213 }
214 #endif