X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=avahi-daemon%2Fmain.c;h=480753e59a14cbb036aed066a6fbd9ab2eda3296;hb=a653540edf61c4c3fc5c7541d30bb40f92088ec0;hp=4891d1051383570872e1e2559890078dd07f331b;hpb=66142b071a2497d7e3cf58d7bf5159bb1c970d84;p=catta diff --git a/avahi-daemon/main.c b/avahi-daemon/main.c index 4891d10..480753e 100644 --- a/avahi-daemon/main.c +++ b/avahi-daemon/main.c @@ -131,14 +131,16 @@ finish: return ret; } -static AvahiEntryGroup* add_dns_servers(AvahiServer *s, gchar **l) { +static AvahiEntryGroup* add_dns_servers(AvahiServer *s, AvahiEntryGroup* g, gchar **l) { gchar **p; - AvahiEntryGroup *g; g_assert(s); g_assert(l); - g = avahi_entry_group_new(s, NULL, NULL); + if (!g) + g = avahi_entry_group_new(s, NULL, NULL); + + g_assert(avahi_entry_group_is_empty(g)); for (p = l; *p; p++) { AvahiAddress a; @@ -148,6 +150,7 @@ static AvahiEntryGroup* add_dns_servers(AvahiServer *s, gchar **l) { else if (avahi_server_add_dns_server_address(s, g, -1, AF_UNSPEC, NULL, AVAHI_DNS_SERVER_RESOLVE, &a, 53) < 0) { avahi_entry_group_free(g); + avahi_log_error("Failed to add DNS server address: %s", avahi_strerror(avahi_server_errno(s))); return NULL; } } @@ -155,19 +158,15 @@ static AvahiEntryGroup* add_dns_servers(AvahiServer *s, gchar **l) { avahi_entry_group_commit(g); return g; - } static void remove_dns_server_entry_groups(void) { - if (resolv_conf_entry_group) { - avahi_entry_group_free(resolv_conf_entry_group); - resolv_conf_entry_group = NULL; - } + + if (resolv_conf_entry_group) + avahi_entry_group_reset(resolv_conf_entry_group); - if (dns_servers_entry_group) { - avahi_entry_group_free(dns_servers_entry_group); - dns_servers_entry_group = NULL; - } + if (dns_servers_entry_group) + avahi_entry_group_reset(dns_servers_entry_group); } static void server_callback(AvahiServer *s, AvahiServerState state, gpointer userdata) { @@ -188,10 +187,10 @@ static void server_callback(AvahiServer *s, AvahiServerState state, gpointer use remove_dns_server_entry_groups(); if (resolv_conf && resolv_conf[0]) - resolv_conf_entry_group = add_dns_servers(s, resolv_conf); + resolv_conf_entry_group = add_dns_servers(s, resolv_conf_entry_group, resolv_conf); if (c->publish_dns_servers && c->publish_dns_servers[0]) - dns_servers_entry_group = add_dns_servers(s, c->publish_dns_servers); + dns_servers_entry_group = add_dns_servers(s, dns_servers_entry_group, c->publish_dns_servers); simple_protocol_restart_queries(); @@ -207,8 +206,6 @@ static void server_callback(AvahiServer *s, AvahiServerState state, gpointer use avahi_server_set_host_name(s, n); g_free(n); } - - } static void help(FILE *f, const gchar *argv0) { @@ -476,15 +473,13 @@ static gboolean signal_callback(GIOChannel *source, GIOCondition condition, gpoi static_service_load(); static_service_add_to_server(); - if (resolv_conf_entry_group) { - avahi_entry_group_free(resolv_conf_entry_group); - resolv_conf_entry_group = NULL; - } + if (resolv_conf_entry_group) + avahi_entry_group_reset(resolv_conf_entry_group); load_resolv_conf(&config); if (resolv_conf && resolv_conf[0]) - resolv_conf_entry_group = add_dns_servers(avahi_server, resolv_conf); + resolv_conf_entry_group = add_dns_servers(avahi_server, resolv_conf_entry_group, resolv_conf); break; @@ -506,6 +501,7 @@ static gint run_server(DaemonConfig *c) { gint r = -1; GIOChannel *io = NULL; guint watch_id = (guint) -1; + gint error; g_assert(c); @@ -533,17 +529,19 @@ static gint run_server(DaemonConfig *c) { goto finish; #endif - if (!(avahi_server = avahi_server_new(NULL, &c->server_config, server_callback, c))) + if (!(avahi_server = avahi_server_new(NULL, &c->server_config, server_callback, c, &error))) { + avahi_log_error("Failed to create server: %s", avahi_strerror(error)); goto finish; + } load_resolv_conf(c); static_service_load(); - if (c->daemonize) { + if (c->daemonize) daemon_retval_send(0); - r = 0; - } + + r = 0; g_main_loop_run(loop); @@ -560,7 +558,6 @@ finish: dbus_protocol_shutdown(); #endif - if (avahi_server) avahi_server_free(avahi_server); @@ -714,7 +711,7 @@ int main(int argc, char *argv[]) { argv0 = argv[0]; daemon_pid_file_ident = (const char *) argv0; - daemon_log_ident = argv0; + daemon_log_ident = (char*) argv0; daemon_pid_file_proc = pid_file_proc; if (parse_command_line(&config, argc, argv) < 0) @@ -781,6 +778,9 @@ int main(int argc, char *argv[]) { /* Child */ } + + printf("%s "PACKAGE_VERSION" starting up.\n", argv0); + chdir("/"); if (make_runtime_dir() < 0)