#include <avahi-common/malloc.h>
#include <avahi-common/simple-watch.h>
+#include <avahi-common/error.h>
+#include <avahi-common/alternative.h>
#include <avahi-core/core.h>
#include <avahi-core/log.h>
#include "main.h"
#include "simple-protocol.h"
-#include "dbus-protocol.h"
#include "static-services.h"
#include "ini-file-parser.h"
+#ifdef HAVE_DBUS
+#include "dbus-protocol.h"
+#endif
+
AvahiServer *avahi_server = NULL;
typedef enum {
int daemonize;
int use_syslog;
char *config_file;
+#ifdef HAVE_DBUS
int enable_dbus;
+ int fail_on_missing_dbus;
+#endif
int drop_root;
int publish_resolv_conf;
char ** publish_dns_servers;
avahi_server = s;
-#ifdef ENABLE_DBUS
+#ifdef HAVE_DBUS
if (c->enable_dbus)
dbus_protocol_server_state_changed(state);
#endif
" -f --file=FILE Load the specified configuration file instead of\n"
" "AVAHI_CONFIG_FILE"\n"
" --no-rlimits Don't enforce resource limits\n"
- " --no-drop-root Don't drop priviliges\n"
+ " --no-drop-root Don't drop privileges\n"
" --debug Increase verbosity\n",
argv0);
}
OPTION_DEBUG
};
- static const struct option const long_options[] = {
+ static const struct option long_options[] = {
{ "help", no_argument, NULL, 'h' },
{ "daemonize", no_argument, NULL, 'D' },
{ "kill", no_argument, NULL, 'k' },
c->server_config.check_response_ttl = is_yes(p->value);
else if (strcasecmp(p->key, "use-iff-running") == 0)
c->server_config.use_iff_running = is_yes(p->value);
- else if (strcasecmp(p->key, "enable-dbus") == 0)
- c->enable_dbus = is_yes(p->value);
+ else if (strcasecmp(p->key, "enable-dbus") == 0) {
+
+ if (*(p->value) == 'w' || *(p->value) == 'W') {
+ c->fail_on_missing_dbus = 0;
+ c->enable_dbus = 1;
+ } else if (*(p->value) == 'y' || *(p->value) == 'Y') {
+ c->fail_on_missing_dbus = 1;
+ c->enable_dbus = 1;
+ } else {
+ c->enable_dbus = 0;
+ }
+#ifdef HAVE_DBUS
+ if (c->enable_dbus == 1)
+ avahi_log_warning("Avahi was compiled without d-bus support but you requested it was enabled in the config file");
+#endif
+ }
else if (strcasecmp(p->key, "drop-root") == 0)
c->drop_root = is_yes(p->value);
else {
static void log_function(AvahiLogLevel level, const char *txt) {
- static const int const log_level_map[] = {
+ static const int log_level_map[] = {
LOG_ERR,
LOG_WARNING,
LOG_NOTICE,
if (simple_protocol_setup(poll_api) < 0)
goto finish;
-#ifdef ENABLE_DBUS
+#ifdef HAVE_DBUS
if (c->enable_dbus)
- if (dbus_protocol_setup(poll_api) < 0)
- goto finish;
+ if (dbus_protocol_setup(poll_api) < 0) {
+
+ if (c->fail_on_missing_dbus)
+ goto finish;
+
+ avahi_log_warn("WARNING: Failed to contact D-BUS daemon, disabling D-BUS support.");
+ c->enable_dbus = 0;
+ }
#endif
load_resolv_conf(c);
config.command = DAEMON_RUN;
config.daemonize = 0;
config.config_file = NULL;
+#ifdef HAVE_DBUS
config.enable_dbus = 1;
+ config.fail_on_missing_dbus = 1;
+#endif
config.drop_root = 1;
config.publish_dns_servers = NULL;
config.publish_resolv_conf = 0;