9b5b095bbdf1bb7d28437274334c10b61e6569eb
[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 <assert.h>
11 #include <ctype.h>
12 #include <errno.h>
13 #include <pwd.h>
14 #include <stdarg.h>
15 #include <stdio.h>
16 #include <stdlib.h>
17 #include <string.h>
18 #include <sys/types.h>
19 #include <time.h>
20 #include <unistd.h>
21
22 #include <roken.h>
23
24 #include "cmd.h"
25
26 #ifndef TRUE
27 # define TRUE 1
28 #endif
29 #ifndef FALSE
30 # define FALSE 0
31 #endif
32
33 #define KRB5_BUFSIZ 1024
34
35 #define KRB5_LIB_FUNCTION static AFS_UNUSED
36 #define KRB5_LIB_CALL
37
38 #define KRB5_DEPRECATED_FUNCTION(x)
39
40 /* This value shouldn't be hard coded */
41 #define KRB5_CONFIG_BADFORMAT                    (-1765328248L)
42
43 #define N_(X,Y) X
44
45 typedef struct cmd_config_binding krb5_config_binding;
46 typedef struct cmd_config_binding krb5_config_section;
47
48 #define krb5_config_list cmd_config_list
49 #define krb5_config_string cmd_config_string
50
51 struct krb5_context_data {
52     krb5_config_section *cf;
53 };
54
55 typedef struct krb5_context_data * krb5_context;
56 typedef int krb5_error_code;
57 typedef int krb5_boolean;
58 typedef time_t krb5_deltat;
59
60 static const void *_krb5_config_vget(krb5_context,
61                                      const krb5_config_section *, int,
62                                      va_list);
63 static const void *_krb5_config_vget_next(krb5_context,
64                                           const krb5_config_section *,
65                                           const krb5_config_binding **,
66                                           int, va_list);
67 static const char *krb5_config_vget_string(krb5_context,
68                                            const krb5_config_section *,
69                                            va_list);
70 static const char *krb5_config_vget_string_default(krb5_context,
71                                            const krb5_config_section *,
72                                            const char *,
73                                            va_list);
74 static const krb5_config_binding * krb5_config_vget_list
75         (krb5_context, const krb5_config_section *, va_list);
76 static krb5_error_code krb5_config_parse_file_multi
77         (krb5_context, const char *, krb5_config_section **);
78 static krb5_error_code krb5_config_parse_file
79         (krb5_context, const char *, krb5_config_section **);
80 static krb5_error_code krb5_config_file_free
81         (krb5_context, krb5_config_section *);
82 static krb5_boolean krb5_config_vget_bool_default
83         (krb5_context, const krb5_config_section *, int, va_list);
84 static int krb5_config_vget_int_default
85         (krb5_context, const krb5_config_section *, int, va_list);
86
87 static krb5_error_code
88 krb5_string_to_deltat(const char *str, krb5_deltat *t) {
89     return 1;
90 }
91
92 KRB5_LIB_FUNCTION void krb5_clear_error_message(krb5_context context) {
93     return;
94 }
95
96 static void krb5_set_error_message(krb5_context context, krb5_error_code ret,
97                                    const char *fmt, ...) {
98     return;
99 }
100
101 static int _krb5_homedir_access(krb5_context context) {
102     return 0;
103 }
104
105 static krb5_error_code
106 krb5_abortx(krb5_context context, const char *fmt, ...)
107 {
108     va_list ap;
109     va_start(ap, fmt);
110
111     vfprintf(stderr, fmt, ap);
112     va_end(ap);
113
114     abort();
115 }
116
117 /* Wrappers */
118
119 int
120 cmd_RawConfigParseFileMulti(const char *fname, cmd_config_section **res) {
121     return krb5_config_parse_file_multi(NULL, fname, res);
122 }
123
124 int
125 cmd_RawConfigParseFile(const char *fname, cmd_config_section **res) {
126     return krb5_config_parse_file(NULL, fname, res);
127 }
128
129 int
130 cmd_RawConfigFileFree(cmd_config_section *s) {
131     return krb5_config_file_free(NULL, s);
132 }
133
134 const char*
135 cmd_RawConfigGetString(const cmd_config_section *c,
136                        const char *defval, ...)
137 {
138     const char *ret;
139     va_list args;
140
141     assert(c != NULL);
142
143     va_start(args, defval);
144     ret = krb5_config_vget_string_default (NULL, c, defval, args);
145     va_end(args);
146     return ret;
147 }
148
149 int
150 cmd_RawConfigGetBool(const cmd_config_section *c, int defval, ...)
151 {
152     va_list ap;
153     krb5_boolean ret;
154
155     assert(c != NULL);
156
157     va_start(ap, defval);
158     ret = krb5_config_vget_bool_default (NULL, c, defval, ap);
159     va_end(ap);
160     return ret;
161 }
162
163 int
164 cmd_RawConfigGetInt(const cmd_config_section *c, int defval, ...)
165 {
166     va_list ap;
167     int ret;
168
169     assert(c != NULL);
170
171     va_start(ap, defval);
172     ret = krb5_config_vget_int_default (NULL, c, defval, ap);
173     va_end(ap);
174     return ret;
175 }
176
177 const cmd_config_binding *
178 cmd_RawConfigGetList(const cmd_config_section *c, ...)
179 {
180     va_list ap;
181     const cmd_config_binding *ret;
182
183     assert(c != NULL);
184
185     va_start(ap, c);
186     ret = krb5_config_vget_list (NULL, c, ap);
187     va_end(ap);
188
189     return ret;
190 }