src/server/daemon/config.c

changeset 75
6195c92262a2
parent 74
5bc6d078fb2c
parent 72
9b888965f3ee
child 77
f1cff81e425a
equal deleted inserted replaced
74:5bc6d078fb2c 75:6195c92262a2
62 printf("load_init_conf\n"); 62 printf("load_init_conf\n");
63 63
64 InitConfig *cfg = load_init_config(file); 64 InitConfig *cfg = load_init_config(file);
65 UcxMempool *mp = cfg->parser.mp; 65 UcxMempool *mp = cfg->parser.mp;
66 if(cfg == NULL) { 66 if(cfg == NULL) {
67 fprintf(stderr, "Cannot load init.conf\n");
67 return 1; 68 return 1;
68 } 69 }
69 70
70 cfg_pool = pool_create(); // one pool for one Configuration 71 cfg_pool = pool_create(); // one pool for one Configuration
71 UcxDlist *dirs = cfg->directives; 72 UcxDlist *dirs = cfg->directives;
147 * AuthDB 148 * AuthDB
148 * Listener (we set the VirtualServer later) 149 * Listener (we set the VirtualServer later)
149 * VirtualServer (dependencies: Listener) 150 * VirtualServer (dependencies: Listener)
150 */ 151 */
151 152
152 /* init logfile first */ 153 // init logfile first
153 UcxList *lfl = ucx_map_sstr_get(serverconf->objects, sstrn("LogFile", 7)); 154 UcxList *lfl = ucx_map_sstr_get(serverconf->objects, sstrn("LogFile", 7));
154 if(lfl != NULL) { 155 if(lfl != NULL) {
155 ServerConfigObject *logobj = lfl->data; 156 ServerConfigObject *logobj = lfl->data;
156 if(logobj == NULL) { 157 if(logobj == NULL) {
157 /* error */ 158 // error
158 return NULL; 159 return NULL;
159 } 160 }
160 161
161 int ret = cfg_handle_logfile(serverconfig, logobj); 162 int ret = cfg_handle_logfile(serverconfig, logobj);
162 if(ret != 0) { 163 if(ret != 0) {
163 /* cannot initialize log file */ 164 // cannot initialize log file
164 return NULL; 165 return NULL;
165 } 166 }
166 } else { 167 } else {
167 /* horrible error */ 168 // horrible error
168 return NULL; 169 return NULL;
169 } 170 }
170 171
171 UcxList *list = ucx_map_sstr_get(serverconf->objects, sstrn("Runtime", 7)); 172 UcxList *list = ucx_map_sstr_get(serverconf->objects, sstrn("Runtime", 7));
172 UCX_FOREACH(UcxList*, list, elm) { 173 UCX_FOREACH(UcxList*, list, elm) {
173 ServerConfigObject *scfgobj = elm->data; 174 ServerConfigObject *scfgobj = elm->data;
174 cfg_handle_runtime(serverconfig, scfgobj); 175 if(cfg_handle_runtime(serverconfig, scfgobj)) {
176 // error
177 return NULL;
178 }
175 } 179 }
176 180
177 list = ucx_map_sstr_get(serverconf->objects, sstrn("Threadpool", 10)); 181 list = ucx_map_sstr_get(serverconf->objects, sstrn("Threadpool", 10));
178 UCX_FOREACH(UcxList*, list, elm) { 182 UCX_FOREACH(UcxList*, list, elm) {
179 cfg_handle_threadpool(serverconfig, elm->data); 183 if(cfg_handle_threadpool(serverconfig, elm->data)) {
184 return NULL;
185 }
180 } 186 }
181 // check thread pool config 187 // check thread pool config
182 if(check_thread_pool_cfg() != 0) { 188 if(check_thread_pool_cfg() != 0) {
183 /* critical error */ 189 /* critical error */
184 return NULL; 190 return NULL;
185 } 191 }
186 192
187 list = ucx_map_sstr_get(serverconf->objects, sstrn("EventHandler", 12)); 193 list = ucx_map_sstr_get(serverconf->objects, sstrn("EventHandler", 12));
188 UCX_FOREACH(UcxList*, list, elm) { 194 UCX_FOREACH(UcxList*, list, elm) {
189 cfg_handle_eventhandler(serverconfig, (ServerConfigObject*)elm->data); 195 if(cfg_handle_eventhandler(
196 serverconfig, (ServerConfigObject*)elm->data)) {
197 // error
198 return NULL;
199 }
190 } 200 }
191 // check event handler config 201 // check event handler config
192 if(check_event_handler_cfg() != 0) { 202 if(check_event_handler_cfg() != 0) {
193 /* critical error */ 203 /* critical error */
194 return NULL; 204 return NULL;
195 } 205 }
196 206
197 list = ucx_map_sstr_get(serverconf->objects, sstrn("AccessLog", 9)); 207 list = ucx_map_sstr_get(serverconf->objects, sstrn("AccessLog", 9));
198 UCX_FOREACH(UcxList*, list, elm) { 208 UCX_FOREACH(UcxList*, list, elm) {
199 ServerConfigObject *scfgobj = elm->data; 209 ServerConfigObject *scfgobj = elm->data;
200 cfg_handle_accesslog(serverconfig, scfgobj); 210 if(cfg_handle_accesslog(serverconfig, scfgobj)) {
211 return NULL;
212 }
201 } 213 }
202 214
203 list = ucx_map_sstr_get(serverconf->objects, sstrn("AuthDB", 6)); 215 list = ucx_map_sstr_get(serverconf->objects, sstrn("AuthDB", 6));
204 UCX_FOREACH(UcxList*, list, elm) { 216 UCX_FOREACH(UcxList*, list, elm) {
205 ServerConfigObject *scfgobj = elm->data; 217 ServerConfigObject *scfgobj = elm->data;
206 cfg_handle_authdb(serverconfig, scfgobj); 218 if(cfg_handle_authdb(serverconfig, scfgobj)) {
219 return NULL;
220 }
207 } 221 }
208 222
209 list = ucx_map_sstr_get(serverconf->objects, sstrn("Listener", 8)); 223 list = ucx_map_sstr_get(serverconf->objects, sstrn("Listener", 8));
210 UCX_FOREACH(UcxList*, list, elm) { 224 UCX_FOREACH(UcxList*, list, elm) {
211 ServerConfigObject *scfgobj = elm->data; 225 ServerConfigObject *scfgobj = elm->data;
212 cfg_handle_listener(serverconfig, scfgobj); 226 if(cfg_handle_listener(serverconfig, scfgobj)) {
227 return NULL;
228 }
213 } 229 }
214 230
215 list = ucx_map_sstr_get(serverconf->objects, sstrn("VirtualServer", 13)); 231 list = ucx_map_sstr_get(serverconf->objects, sstrn("VirtualServer", 13));
216 UCX_FOREACH(UcxList*, list, elm) { 232 UCX_FOREACH(UcxList*, list, elm) {
217 ServerConfigObject *scfgobj = elm->data; 233 ServerConfigObject *scfgobj = elm->data;
218 cfg_handle_vs(serverconfig, scfgobj); 234 if(cfg_handle_vs(serverconfig, scfgobj)) {
235 return NULL;
236 }
219 } 237 }
220 238
221 239
222 // set VirtualServer for all listeners 240 // set VirtualServer for all listeners
223 UcxList *ls = serverconfig->listeners; 241 UcxList *ls = serverconfig->listeners;
259 void init_server_config_parser() { 277 void init_server_config_parser() {
260 278
261 } 279 }
262 280
263 int cfg_handle_runtime(ServerConfiguration *cfg, ServerConfigObject *obj) { 281 int cfg_handle_runtime(ServerConfiguration *cfg, ServerConfigObject *obj) {
264 cfg->user = sstrdup(cfg_directivelist_get_str( 282 sstr_t user = cfg_directivelist_get_str(obj->directives, sstr("User"));
265 obj->directives, 283 if(user.ptr) {
266 sstr("User"))); 284 cfg->user = sstrdup_pool(cfg->pool, user);
267 cfg->tmp = sstrdup(cfg_directivelist_get_str( 285 }
268 obj->directives, 286 sstr_t tmp = cfg_directivelist_get_str(obj->directives, sstr("Temp"));
269 sstr("Temp"))); 287 if(tmp.ptr) {
288 cfg->tmp = sstrdup_pool(cfg->pool, tmp);
289 } else {
290 log_ereport(LOG_MISCONFIG, "no temporary directory specified");
291 return -1;
292 }
270 293
271 // mime file 294 // mime file
272 sstr_t mf = cfg_directivelist_get_str(obj->directives, sstr("MimeFile")); 295 sstr_t mf = cfg_directivelist_get_str(obj->directives, sstr("MimeFile"));
273 296
274 sstr_t base = sstr("config/"); 297 sstr_t base = sstr("config/");
398 evcfg.nthreads = atoi(s.ptr); 421 evcfg.nthreads = atoi(s.ptr);
399 free(s.ptr); 422 free(s.ptr);
400 423
401 evcfg.isdefault = util_getboolean(isdefault.ptr, 0); 424 evcfg.isdefault = util_getboolean(isdefault.ptr, 0);
402 425
403 int ret = create_event_handler(&evcfg); 426 return create_event_handler(&evcfg);
404
405 return ret;
406 } 427 }
407 428
408 int cfg_handle_accesslog(ServerConfiguration *cfg, ServerConfigObject *obj) { 429 int cfg_handle_accesslog(ServerConfiguration *cfg, ServerConfigObject *obj) {
409 // TODO: use a name to identify the log file 430 // TODO: use a name to identify the log file
410 431

mercurial