X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-dnsconfd%2Fmain.c;h=a76aa71e018e37692f7be0d80adf49d90bf1b71b;hb=4f0a5e7572a4257894b4bfede42c26d65152609e;hp=959f177d35e0e10f514339fcd799e5dcd3712803;hpb=66142b071a2497d7e3cf58d7bf5159bb1c970d84;p=catta diff --git a/avahi-dnsconfd/main.c b/avahi-dnsconfd/main.c index 959f177..a76aa71 100644 --- a/avahi-dnsconfd/main.c +++ b/avahi-dnsconfd/main.c @@ -39,8 +39,7 @@ #include -#include -#include +#include #include #include @@ -60,7 +59,7 @@ static gboolean quit = FALSE; static enum { DAEMON_RUN, DAEMON_KILL, - DAEMON_RELOAD, + DAEMON_REFRESH, DAEMON_VERSION, DAEMON_HELP, DAEMON_CHECK @@ -116,6 +115,20 @@ static DNSServerInfo* new_server_info(gint interface, guchar protocol, const gch return i; } +static int set_cloexec(int fd) { + int n; + + assert(fd >= 0); + + if ((n = fcntl(fd, F_GETFD)) < 0) + return -1; + + if (n & FD_CLOEXEC) + return 0; + + return fcntl(fd, F_SETFD, n|FD_CLOEXEC); +} + static int open_socket(void) { int fd = -1; struct sockaddr_un sa; @@ -125,7 +138,7 @@ static int open_socket(void) { goto fail; } - if (avahi_set_cloexec(fd) < 0) { + if (set_cloexec(fd) < 0) { daemon_log(LOG_ERR, "fcntl(): %s", strerror(errno)); goto fail; } @@ -224,11 +237,12 @@ finish: static void run_script(gboolean new, gint interface, guchar protocol, const gchar *address) { gchar *p; - g_assert(interface > 0); gint ret; gchar ia[16], pa[16]; gchar name[IFNAMSIZ+1]; + g_assert(interface > 0); + if (!getifname(interface, name, sizeof(name))) return; @@ -343,7 +357,7 @@ static void help(FILE *f, const gchar *argv0) { " -h --help Show this help\n" " -D --daemonize Daemonize after startup\n" " -k --kill Kill a running daemon\n" - " -r --reload Request a running daemon to reload static services\n" + " -r --refresh Request a running daemon to refresh DNS server data\n" " -c --check Return 0 if a daemon is already running\n" " -V --version Show version\n", argv0); @@ -357,7 +371,7 @@ static gint parse_command_line(int argc, char *argv[]) { { "daemonize", no_argument, NULL, 'D' }, { "kill", no_argument, NULL, 'k' }, { "version", no_argument, NULL, 'V' }, - { "reload", no_argument, NULL, 'r' }, + { "refresh", no_argument, NULL, 'r' }, { "check", no_argument, NULL, 'c' }, }; @@ -378,7 +392,7 @@ static gint parse_command_line(int argc, char *argv[]) { command = DAEMON_VERSION; break; case 'r': - command = DAEMON_RELOAD; + command = DAEMON_REFRESH; break; case 'c': command = DAEMON_CHECK; @@ -411,7 +425,9 @@ static int run_daemon(void) { if (daemonize) daemon_retval_send(0); - + + ret = 0; + while (!quit) { fd_set rfds, wfds; @@ -454,7 +470,7 @@ static int run_daemon(void) { break; case SIGHUP: - daemon_log(LOG_INFO, "Rrefreshing DNS Server list"); + daemon_log(LOG_INFO, "Refreshing DNS Server list"); close(fd); free_dns_server_info_list(); @@ -498,8 +514,6 @@ static int run_daemon(void) { } } } - - ret = 0; finish: @@ -510,6 +524,9 @@ finish: daemon_signal_done(); + if (ret != 0 && daemonize) + daemon_retval_send(1); + return ret; } @@ -597,7 +614,7 @@ gint main(gint argc, gchar *argv[]) { } r = 0; - } else if (command == DAEMON_RELOAD) { + } else if (command == DAEMON_REFRESH) { if (daemon_pid_file_kill(SIGHUP) < 0) { daemon_log(LOG_WARNING, "Failed to kill daemon: %s", strerror(errno)); goto finish;