if(cfg->edns_buffer_size > cfg->msg_buffer_size)
fatal_exit("edns-buffer-size larger than msg-buffer-size, "
"answers will not fit in processing buffer");
-
+#ifdef UB_ON_WINDOWS
+ w_config_adjust_directory(cfg);
+#endif
if(cfg->chrootdir && cfg->chrootdir[0] &&
cfg->chrootdir[strlen(cfg->chrootdir)-1] == '/')
fatal_exit("chootdir %s has trailing slash '/' please remove.",
}
return result;
}
+
+void w_config_adjust_directory(struct config_file* cfg)
+{
+ if(cfg->directory && cfg->directory[0]) {
+ TCHAR dirbuf[2*MAX_PATH+4];
+ if(strcmp(cfg->directory, "%EXECUTABLE%") == 0) {
+ /* get executable path, and if that contains
+ * directories, snip off the filename part */
+ dirbuf[0] = 0;
+ if(!GetModuleFileName(NULL, dirbuf, MAX_PATH))
+ log_err("could not GetModuleFileName");
+ if(strrchr(dirbuf, '\\')) {
+ (strrchr(dirbuf, '\\'))[0] = 0;
+ } else log_err("GetModuleFileName had no path");
+ if(dirbuf[0]) {
+ /* adjust directory for later lookups to work*/
+ free(cfg->directory);
+ cfg->directory = memdup(dirbuf, strlen(dirbuf)+1);
+ }
+ }
+ }
+}
#endif /* UB_ON_WINDOWS */
void errinf(struct module_qstate* qstate, const char* str)
* exist on an error (logged with log_err) was encountered.
*/
char* w_lookup_reg_str(const char* key, const char* name);
+
+/** Modify directory in options for module file name */
+void w_config_adjust_directory(struct config_file* cfg);
#endif /* UB_ON_WINDOWS */
#endif /* UTIL_CONFIG_FILE_H */
verbose(VERB_QUERY, "winservice - apply settings");
/* apply settings and init */
verbosity = cfg->verbosity + service_cmdline_verbose;
+ w_config_adjust_directory(cfg);
if(cfg->directory && cfg->directory[0]) {
- TCHAR dirbuf[2*MAX_PATH+4];
char* dir = cfg->directory;
- if(strcmp(dir, "%EXECUTABLE%") == 0) {
- /* get executable path, and if that contains
- * directories, snip off the filename part */
- dirbuf[0] = 0;
- if(!GetModuleFileName(NULL, dirbuf, MAX_PATH))
- log_err("could not GetModuleFileName");
- if(strrchr(dirbuf, '\\')) {
- (strrchr(dirbuf, '\\'))[0] = 0;
- } else log_err("GetModuleFileName had no path");
- dir = dirbuf;
- if(dirbuf[0]) {
- /* adjust cfg->directory for the
- * fname_after_chroot calls later to work */
- free(cfg->directory);
- cfg->directory = memdup(dir, strlen(dir)+1);
- }
- }
if(chdir(dir)) {
log_err("could not chdir to %s: %s",
dir, strerror(errno));