diff --git a/src/dns_conf.c b/src/dns_conf.c index 767ea11..036ef34 100644 --- a/src/dns_conf.c +++ b/src/dns_conf.c @@ -1917,14 +1917,16 @@ static struct config_item _config_item[] = { static int _conf_printf(const char *file, int lineno, int ret) { - if (ret == CONF_RET_ERR) { - tlog(TLOG_ERROR, "process config file '%s' failed at line %d.", file, lineno); - syslog(LOG_NOTICE, "process config file '%s' failed at line %d.", file, lineno); - return -1; - } else if (ret == CONF_RET_WARN) { + switch (ret) { + case CONF_RET_ERR: + case CONF_RET_WARN: + case CONF_RET_BADCONF: tlog(TLOG_WARN, "process config file '%s' failed at line %d.", file, lineno); syslog(LOG_NOTICE, "process config file '%s' failed at line %d.", file, lineno); return -1; + break; + default: + break; } return 0; diff --git a/src/include/conf.h b/src/include/conf.h index d0c73f9..4050bb5 100644 --- a/src/include/conf.h +++ b/src/include/conf.h @@ -30,6 +30,7 @@ #define CONF_RET_ERR -1 #define CONF_RET_WARN -2 #define CONF_RET_NOENT -3 +#define CONF_RET_BADCONF -4 struct config_item { const char *item; diff --git a/src/lib/conf.c b/src/lib/conf.c index 88a8903..d86a94c 100644 --- a/src/lib/conf.c +++ b/src/lib/conf.c @@ -262,6 +262,7 @@ int load_conf_file(const char *file, struct config_item *items, conf_error_handl /* if field format is not key = value, error */ if (filed_num != 2) { + handler(file, line_no, CONF_RET_BADCONF); goto errout; } diff --git a/src/smartdns.c b/src/smartdns.c index 7a8b542..e3cc786 100644 --- a/src/smartdns.c +++ b/src/smartdns.c @@ -506,6 +506,11 @@ int main(int argc, char *argv[]) } } + if (dns_server_load_conf(config_file) != 0) { + fprintf(stderr, "load config failed.\n"); + goto errout; + } + if (is_forground == 0) { if (daemon(0, 0) < 0) { fprintf(stderr, "run daemon process failed, %s\n", strerror(errno)); @@ -522,10 +527,8 @@ int main(int argc, char *argv[]) } signal(SIGPIPE, SIG_IGN); - if (dns_server_load_conf(config_file) != 0) { - fprintf(stderr, "load config failed.\n"); - goto errout; - } + signal(SIGINT, _sig_exit); + signal(SIGTERM, _sig_exit); drop_root_privilege(); @@ -535,8 +538,6 @@ int main(int argc, char *argv[]) goto errout; } - signal(SIGINT, _sig_exit); - signal(SIGTERM, _sig_exit); atexit(_smartdns_exit); return _smartdns_run(); diff --git a/src/util.c b/src/util.c index 1586c42..7bca21a 100644 --- a/src/util.c +++ b/src/util.c @@ -77,7 +77,7 @@ #define NETLINK_ALIGN(len) (((len) + 3) & ~(3)) -#define BUFF_SZ 256 +#define BUFF_SZ 1024 struct ipset_netlink_attr { unsigned short len;