Add an OpenAFS config file parser
[openafs.git] / src / util / 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 <time.h>
11 #include <stdarg.h>
12 #include <stdio.h>
13 #include <stdlib.h>
14 #include <unistd.h>
15 #include <sys/types.h>
16 #include <pwd.h>
17 #include <assert.h>
18
19 #define KRB5_LIB_FUNCTION static AFS_UNUSED
20 #define KRB5_LIB_CALL
21
22 /* This value shouldn't be hard coded */
23 #define KRB5_CONFIG_BADFORMAT                    (-1765328248L)
24
25 #define N_(X,Y) X
26
27 struct krb5_config_binding {
28     enum { krb5_config_string, krb5_config_list } type;
29     char *name;
30     struct krb5_config_binding *next;
31     union {
32         char *string;
33         struct krb5_config_binding *list;
34         void *generic;
35     } u;
36 };
37
38 typedef struct krb5_config_binding krb5_config_binding;
39
40 typedef krb5_config_binding krb5_config_section;
41 typedef krb5_config_section afs_config_section;
42
43 struct krb5_context_data {
44     krb5_config_section *cf;
45 };
46
47 typedef struct krb5_context_data * krb5_context;
48 typedef int krb5_error_code;
49 typedef int krb5_boolean;
50 typedef time_t krb5_deltat;
51
52 static const void *_krb5_config_vget(krb5_context,
53                                      const krb5_config_section *, int,
54                                      va_list);
55 static const void *_krb5_config_vget_next(krb5_context,
56                                           const krb5_config_section *,
57                                           const krb5_config_binding **,
58                                           int, va_list);
59 static const char *krb5_config_vget_string(krb5_context,
60                                            const krb5_config_section *,
61                                            va_list);
62 static const krb5_config_binding * krb5_config_vget_list
63         (krb5_context, const krb5_config_section *, va_list);
64 static krb5_error_code krb5_config_parse_file_multi
65         (krb5_context, const char *, krb5_config_section **);
66 static krb5_error_code krb5_config_parse_file
67         (krb5_context, const char *, krb5_config_section **);
68 static krb5_error_code krb5_config_file_free
69         (krb5_context, krb5_config_section *);
70 static krb5_boolean krb5_config_vget_bool
71         (krb5_context, const krb5_config_section *,va_list);
72 static int krb5_config_vget_int
73         (krb5_context, const krb5_config_section *, va_list);
74
75 static krb5_error_code
76 krb5_string_to_deltat(const char *str, krb5_deltat *t) {
77     return 1;
78 }
79
80 static void krb5_clear_error_message(krb5_context context) {
81     return;
82 }
83
84 static void krb5_set_error_message(krb5_context context, krb5_error_code ret,
85                                    const char *fmt, ...) {
86     return;
87 }
88
89 /* Play it safe, by saying we're always suid. */
90 static int issuid(void) {
91     return 1;
92 }
93
94 static int _krb5_homedir_access(krb5_context context) {
95     return 0;
96 }
97
98 static krb5_error_code
99 krb5_abortx(krb5_context context, const char *fmt, ...)
100 {
101     va_list ap;
102     va_start(ap, fmt);
103
104     vfprintf(stderr, fmt, ap);
105     va_end(ap);
106
107     abort();
108 }
109
110 /* Wrappers */
111
112 int
113 afs_config_parse_file_multi(const char *fname, afs_config_section **res) {
114     return krb5_config_parse_file_multi(NULL, fname, res);
115 }
116
117 int
118 afs_config_parse_file(const char *fname, afs_config_section **res) {
119     return krb5_config_parse_file(NULL, fname, res);
120 }
121
122 int
123 afs_config_file_free(afs_config_section *s) {
124     return krb5_config_file_free(NULL, s);
125 }
126
127 const char*
128 afs_config_get_string(const afs_config_section *c, ...)
129 {
130     const char *ret;
131     va_list args;
132
133     assert(c != NULL);
134
135     va_start(args, c);
136     ret = krb5_config_vget_string (NULL, c, args);
137     va_end(args);
138     return ret;
139 }
140
141 int
142 afs_config_get_bool(const afs_config_section *c, ...)
143 {
144     va_list ap;
145     krb5_boolean ret;
146
147     assert(c != NULL);
148
149     va_start(ap, c);
150     ret = krb5_config_vget_bool (NULL, c, ap);
151     va_end(ap);
152     return ret;
153 }
154
155 int
156 afs_config_get_int(const krb5_config_section *c, ...)
157 {
158     va_list ap;
159     int ret;
160
161     assert(c != NULL);
162
163     va_start(ap, c);
164     ret = krb5_config_vget_int (NULL, c, ap);
165     va_end(ap);
166     return ret;
167 }
168