summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2009-03-05 11:04:40 +0100
committerLennart Poettering <lennart@poettering.net>2009-03-05 11:04:40 +0100
commitf37ae8b0f302a089baae50b18195b03c2f789ea4 (patch)
treed760b055988f14a5d579162e6f105fa983eeb688
parentc90c318dbbfa73a00951cdf96c51d13d7b23c44a (diff)
parentc3c0f3d47e49ab6814d4de3ee41a0c5caf0265b9 (diff)
Merge branch 'master' of ssh://rootserver/home/lennart/git/public/avahi
-rw-r--r--avahi-autoipd/main.c4
-rw-r--r--avahi-client/client.c204
-rw-r--r--avahi-common/Makefile.am2
-rw-r--r--avahi-common/address.c16
-rw-r--r--avahi-common/gccmacro.h9
-rw-r--r--avahi-common/malloc.h20
-rw-r--r--avahi-common/thread-watch.c26
-rw-r--r--avahi-core/core.h2
-rw-r--r--avahi-core/iface-pfroute.c41
-rw-r--r--avahi-core/iface.c145
-rw-r--r--avahi-core/server.c331
-rw-r--r--avahi-daemon/Makefile.am3
-rw-r--r--avahi-daemon/avahi-daemon.conf2
-rw-r--r--avahi-daemon/inotify-nosys.h181
-rw-r--r--avahi-daemon/main.c196
-rw-r--r--avahi-discover-standalone/Makefile.am2
-rwxr-xr-xavahi-dnsconfd/avahi-dnsconfd.action22
-rw-r--r--avahi-python/Makefile.am2
-rwxr-xr-xavahi-python/avahi-bookmarks.in2
-rw-r--r--avahi-python/avahi-discover/Makefile.am11
-rw-r--r--avahi-python/avahi-discover/avahi-discover.desktop.in.in (renamed from avahi-python/avahi-discover/avahi-discover.desktop.in)4
-rwxr-xr-xavahi-python/avahi-discover/avahi-discover.in9
-rw-r--r--avahi-python/avahi/Makefile.am2
-rw-r--r--avahi-ui/Makefile.am3
-rw-r--r--avahi-ui/avahi-ui.c35
-rw-r--r--avahi-ui/avahi-ui.h3
-rw-r--r--avahi-ui/bssh.c5
-rw-r--r--common/.gitignore5
-rw-r--r--configure.ac15
-rw-r--r--docs/NEWS14
-rw-r--r--initscript/fedora/avahi-daemon.in11
-rw-r--r--initscript/fedora/avahi-dnsconfd.in2
-rw-r--r--man/Makefile.am15
-rw-r--r--man/avahi-daemon.conf.5.xml.in40
-rw-r--r--po/LINGUAS5
-rw-r--r--po/POTFILES.in3
-rw-r--r--po/POTFILES.skip3
-rw-r--r--po/de.po1814
-rw-r--r--po/es.po448
-rw-r--r--po/fi.po708
-rw-r--r--po/hu.po708
-rw-r--r--po/it.po123
-rw-r--r--po/sv.po727
43 files changed, 4204 insertions, 1719 deletions
diff --git a/avahi-autoipd/main.c b/avahi-autoipd/main.c
index ef529b9..eb71c3b 100644
--- a/avahi-autoipd/main.c
+++ b/avahi-autoipd/main.c
@@ -1281,7 +1281,7 @@ static int loop(int iface, uint32_t addr) {
DEBUG(daemon_log(LOG_DEBUG, "Ignoring irrelevant ARP packet."));
}
- } else if (event == EVENT_ROUTABLE_ADDR_CONFIGURED) {
+ } else if (event == EVENT_ROUTABLE_ADDR_CONFIGURED && !force_bind) {
daemon_log(LOG_INFO, "A routable address has been configured.");
@@ -1306,7 +1306,7 @@ static int loop(int iface, uint32_t addr) {
elapse_time(&next_wakeup, 0, PROBE_WAIT*1000);
next_wakeup_valid = 1;
- } else if (event == EVENT_REFRESH_REQUEST && state == STATE_RUNNING && !force_bind) {
+ } else if (event == EVENT_REFRESH_REQUEST && state == STATE_RUNNING) {
/* The user requested a reannouncing of the address by a SIGHUP */
daemon_log(LOG_INFO, "Reannouncing address.");
diff --git a/avahi-client/client.c b/avahi-client/client.c
index f665613..389a3d1 100644
--- a/avahi-client/client.c
+++ b/avahi-client/client.c
@@ -2,17 +2,17 @@
/***
This file is part of avahi.
-
+
avahi is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
-
+
avahi is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
Public License for more details.
-
+
You should have received a copy of the GNU Lesser General Public
License along with avahi; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
@@ -75,9 +75,9 @@ static void client_set_state (AvahiClient *client, AvahiServerState state) {
dbus_connection_unref(client->bus);
client->bus = NULL;
}
-
+
/* Fall through */
-
+
case AVAHI_CLIENT_S_COLLISION:
case AVAHI_CLIENT_S_REGISTERING:
@@ -94,9 +94,9 @@ static void client_set_state (AvahiClient *client, AvahiServerState state) {
case AVAHI_CLIENT_S_RUNNING:
case AVAHI_CLIENT_CONNECTING:
break;
-
+
}
-
+
if (client->callback)
client->callback (client, state, client->userdata);
}
@@ -107,7 +107,7 @@ static DBusHandlerResult filter_func(DBusConnection *bus, DBusMessage *message,
assert(bus);
assert(message);
-
+
dbus_error_init(&error);
/* fprintf(stderr, "dbus: interface=%s, path=%s, member=%s\n", */
@@ -124,10 +124,10 @@ static DBusHandlerResult filter_func(DBusConnection *bus, DBusMessage *message,
} else if (dbus_message_is_signal(message, DBUS_INTERFACE_DBUS, "NameAcquired")) {
/* Ignore this message */
-
+
} else if (dbus_message_is_signal(message, DBUS_INTERFACE_DBUS, "NameOwnerChanged")) {
char *name, *old, *new;
-
+
if (!dbus_message_get_args(
message, &error,
DBUS_TYPE_STRING, &name,
@@ -149,12 +149,12 @@ static DBusHandlerResult filter_func(DBusConnection *bus, DBusMessage *message,
* available, so we disconnect ourselves */
avahi_client_set_errno(client, AVAHI_ERR_DISCONNECTED);
goto fail;
-
+
} else if (client->state == AVAHI_CLIENT_CONNECTING && (!old || *old == 0)) {
int ret;
-
+
/* Server appeared */
-
+
if ((ret = init_server(client, NULL)) < 0) {
avahi_client_set_errno(client, ret);
goto fail;
@@ -163,14 +163,14 @@ static DBusHandlerResult filter_func(DBusConnection *bus, DBusMessage *message,
}
} else if (!avahi_client_is_connected(client)) {
-
+
/* Ignore messages we get in unconnected state */
-
+
} else if (dbus_message_is_signal (message, AVAHI_DBUS_INTERFACE_SERVER, "StateChanged")) {
int32_t state;
char *e = NULL;
int c;
-
+
if (!dbus_message_get_args(
message, &error,
DBUS_TYPE_INT32, &state,
@@ -184,7 +184,7 @@ static DBusHandlerResult filter_func(DBusConnection *bus, DBusMessage *message,
if ((c = avahi_error_dbus_to_number(e)) != AVAHI_OK)
avahi_client_set_errno(client, c);
-
+
client_set_state(client, (AvahiClientState) state);
} else if (dbus_message_is_signal (message, AVAHI_DBUS_INTERFACE_ENTRY_GROUP, "StateChanged")) {
@@ -195,12 +195,12 @@ static DBusHandlerResult filter_func(DBusConnection *bus, DBusMessage *message,
for (g = client->groups; g; g = g->groups_next)
if (strcmp(g->path, path) == 0)
break;
-
+
if (g) {
int32_t state;
char *e;
int c;
-
+
if (!dbus_message_get_args(
message, &error,
DBUS_TYPE_INT32, &state,
@@ -215,79 +215,79 @@ static DBusHandlerResult filter_func(DBusConnection *bus, DBusMessage *message,
if ((c = avahi_error_dbus_to_number(e)) != AVAHI_OK)
avahi_client_set_errno(client, c);
-
+
avahi_entry_group_set_state(g, state);
}
-
+
} else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_DOMAIN_BROWSER, "ItemNew"))
return avahi_domain_browser_event(client, AVAHI_BROWSER_NEW, message);
- else if (dbus_message_is_signal (message, AVAHI_DBUS_INTERFACE_DOMAIN_BROWSER, "ItemRemove"))
+ else if (dbus_message_is_signal (message, AVAHI_DBUS_INTERFACE_DOMAIN_BROWSER, "ItemRemove"))
return avahi_domain_browser_event(client, AVAHI_BROWSER_REMOVE, message);
- else if (dbus_message_is_signal (message, AVAHI_DBUS_INTERFACE_DOMAIN_BROWSER, "CacheExhausted"))
+ else if (dbus_message_is_signal (message, AVAHI_DBUS_INTERFACE_DOMAIN_BROWSER, "CacheExhausted"))
return avahi_domain_browser_event(client, AVAHI_BROWSER_CACHE_EXHAUSTED, message);
- else if (dbus_message_is_signal (message, AVAHI_DBUS_INTERFACE_DOMAIN_BROWSER, "AllForNow"))
+ else if (dbus_message_is_signal (message, AVAHI_DBUS_INTERFACE_DOMAIN_BROWSER, "AllForNow"))
return avahi_domain_browser_event(client, AVAHI_BROWSER_ALL_FOR_NOW, message);
- else if (dbus_message_is_signal (message, AVAHI_DBUS_INTERFACE_DOMAIN_BROWSER, "Failure"))
+ else if (dbus_message_is_signal (message, AVAHI_DBUS_INTERFACE_DOMAIN_BROWSER, "Failure"))
return avahi_domain_browser_event(client, AVAHI_BROWSER_FAILURE, message);
- else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_TYPE_BROWSER, "ItemNew"))
+ else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_TYPE_BROWSER, "ItemNew"))
return avahi_service_type_browser_event (client, AVAHI_BROWSER_NEW, message);
- else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_TYPE_BROWSER, "ItemRemove"))
+ else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_TYPE_BROWSER, "ItemRemove"))
return avahi_service_type_browser_event (client, AVAHI_BROWSER_REMOVE, message);
- else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_TYPE_BROWSER, "CacheExhausted"))
+ else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_TYPE_BROWSER, "CacheExhausted"))
return avahi_service_type_browser_event (client, AVAHI_BROWSER_CACHE_EXHAUSTED, message);
- else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_TYPE_BROWSER, "AllForNow"))
+ else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_TYPE_BROWSER, "AllForNow"))
return avahi_service_type_browser_event (client, AVAHI_BROWSER_ALL_FOR_NOW, message);
- else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_TYPE_BROWSER, "Failure"))
+ else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_TYPE_BROWSER, "Failure"))
return avahi_service_type_browser_event (client, AVAHI_BROWSER_FAILURE, message);
- else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_BROWSER, "ItemNew"))
+ else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_BROWSER, "ItemNew"))
return avahi_service_browser_event (client, AVAHI_BROWSER_NEW, message);
- else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_BROWSER, "ItemRemove"))
+ else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_BROWSER, "ItemRemove"))
return avahi_service_browser_event (client, AVAHI_BROWSER_REMOVE, message);
- else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_BROWSER, "CacheExhausted"))
+ else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_BROWSER, "CacheExhausted"))
return avahi_service_browser_event (client, AVAHI_BROWSER_CACHE_EXHAUSTED, message);
- else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_BROWSER, "AllForNow"))
+ else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_BROWSER, "AllForNow"))
return avahi_service_browser_event (client, AVAHI_BROWSER_ALL_FOR_NOW, message);
- else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_BROWSER, "Failure"))
+ else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_BROWSER, "Failure"))
return avahi_service_browser_event (client, AVAHI_BROWSER_FAILURE, message);
- else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_RESOLVER, "Found"))
+ else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_RESOLVER, "Found"))
return avahi_service_resolver_event (client, AVAHI_RESOLVER_FOUND, message);
- else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_RESOLVER, "Failure"))
+ else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_SERVICE_RESOLVER, "Failure"))
return avahi_service_resolver_event (client, AVAHI_RESOLVER_FAILURE, message);
- else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_HOST_NAME_RESOLVER, "Found"))
+ else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_HOST_NAME_RESOLVER, "Found"))
return avahi_host_name_resolver_event (client, AVAHI_RESOLVER_FOUND, message);
- else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_HOST_NAME_RESOLVER, "Failure"))
+ else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_HOST_NAME_RESOLVER, "Failure"))
return avahi_host_name_resolver_event (client, AVAHI_RESOLVER_FAILURE, message);
- else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_ADDRESS_RESOLVER, "Found"))
+ else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_ADDRESS_RESOLVER, "Found"))
return avahi_address_resolver_event (client, AVAHI_RESOLVER_FOUND, message);
- else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_ADDRESS_RESOLVER, "Failure"))
+ else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_ADDRESS_RESOLVER, "Failure"))
return avahi_address_resolver_event (client, AVAHI_RESOLVER_FAILURE, message);
- else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_RECORD_BROWSER, "ItemNew"))
+ else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_RECORD_BROWSER, "ItemNew"))
return avahi_record_browser_event (client, AVAHI_BROWSER_NEW, message);
- else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_RECORD_BROWSER, "ItemRemove"))
+ else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_RECORD_BROWSER, "ItemRemove"))
return avahi_record_browser_event (client, AVAHI_BROWSER_REMOVE, message);
- else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_RECORD_BROWSER, "CacheExhausted"))
+ else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_RECORD_BROWSER, "CacheExhausted"))
return avahi_record_browser_event (client, AVAHI_BROWSER_CACHE_EXHAUSTED, message);
- else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_RECORD_BROWSER, "AllForNow"))
+ else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_RECORD_BROWSER, "AllForNow"))
return avahi_record_browser_event (client, AVAHI_BROWSER_ALL_FOR_NOW, message);
- else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_RECORD_BROWSER, "Failure"))
+ else if (dbus_message_is_signal(message, AVAHI_DBUS_INTERFACE_RECORD_BROWSER, "Failure"))
return avahi_record_browser_event (client, AVAHI_BROWSER_FAILURE, message);
else {
fprintf(stderr, "WARNING: Unhandled message: interface=%s, path=%s, member=%s\n",
- dbus_message_get_interface(message),
+ dbus_message_get_interface(message),
dbus_message_get_path(message),
dbus_message_get_member(message));
-
+
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
-
+
return DBUS_HANDLER_RESULT_HANDLED;
fail:
@@ -298,7 +298,7 @@ fail:
}
client_set_state(client, AVAHI_CLIENT_FAILURE);
-
+
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
@@ -307,7 +307,7 @@ static int get_server_state(AvahiClient *client, int *ret_error) {
DBusError error;
int32_t state;
int e = AVAHI_ERR_NO_MEMORY;
-
+
assert(client);
dbus_error_init(&error);
@@ -328,15 +328,15 @@ static int get_server_state(AvahiClient *client, int *ret_error) {
dbus_message_unref(message);
dbus_message_unref(reply);
-
+
return AVAHI_OK;
fail:
if (dbus_error_is_set(&error)) {
e = avahi_error_dbus_to_number (error.name);
dbus_error_free(&error);
- }
-
+ }
+
if (ret_error)
*ret_error = e;
@@ -344,7 +344,7 @@ fail:
dbus_message_unref(message);
if (reply)
dbus_message_unref(reply);
-
+
return e;
}
@@ -353,7 +353,7 @@ static int check_version(AvahiClient *client, int *ret_error) {
DBusError error;
uint32_t version;
int e = AVAHI_ERR_NO_MEMORY;
-
+
assert(client);
dbus_error_init(&error);
@@ -372,7 +372,7 @@ static int check_version(AvahiClient *client, int *ret_error) {
/* If the method GetAPIVersion is not known, we look if
* GetVersionString matches "avahi 0.6" which is the only
* version we support which doesn't have GetAPIVersion() .*/
-
+
dbus_message_unref(message);
if (reply) dbus_message_unref(reply);
dbus_error_free(&error);
@@ -381,25 +381,25 @@ static int check_version(AvahiClient *client, int *ret_error) {
goto fail;
reply = dbus_connection_send_with_reply_and_block (client->bus, message, -1, &error);
-
+
if (!reply || dbus_error_is_set (&error))
goto fail;
-
+
if (!dbus_message_get_args (reply, &error, DBUS_TYPE_STRING, &version_str, DBUS_TYPE_INVALID) ||
dbus_error_is_set (&error))
goto fail;
version = strcmp(version_str, "avahi 0.6") == 0 ? 0x0201 : 0x0000;
-
+
} else {
-
+
if (!dbus_message_get_args (reply, &error, DBUS_TYPE_UINT32, &version, DBUS_TYPE_INVALID) ||
dbus_error_is_set(&error))
goto fail;
}
/*fprintf(stderr, "API Version 0x%04x\n", version);*/
-
+
if ((version & 0xFF00) != (AVAHI_CLIENT_DBUS_API_SUPPORTED & 0xFF00) ||
(version & 0x00FF) < (AVAHI_CLIENT_DBUS_API_SUPPORTED & 0x00FF)) {
e = AVAHI_ERR_VERSION_MISMATCH;
@@ -408,14 +408,14 @@ static int check_version(AvahiClient *client, int *ret_error) {
dbus_message_unref(message);
dbus_message_unref(reply);
-
+
return AVAHI_OK;
fail:
if (dbus_error_is_set(&error)) {
e = avahi_error_dbus_to_number (error.name);
dbus_error_free(&error);
- }
+ }
if (ret_error)
*ret_error = e;
@@ -424,13 +424,13 @@ fail:
dbus_message_unref(message);
if (reply)
dbus_message_unref(reply);
-
+
return e;
}
static int init_server(AvahiClient *client, int *ret_error) {
int r;
-
+
if ((r = check_version(client, ret_error)) < 0)
return r;
@@ -448,14 +448,14 @@ static DBusConnection* avahi_dbus_bus_get(DBusError *error) {
#ifdef HAVE_DBUS_BUS_GET_PRIVATE
if (!(c = dbus_bus_get_private(DBUS_BUS_SYSTEM, error)))
return NULL;
-
+
dbus_connection_set_exit_on_disconnect(c, FALSE);
#else
const char *a;
-
+
if (!(a = getenv("DBUS_SYSTEM_BUS_ADDRESS")) || !*a)
a = DBUS_SYSTEM_BUS_DEFAULT_ADDRESS;
-
+
if (!(c = dbus_connection_open_private(a, error)))
return NULL;
@@ -479,6 +479,8 @@ AvahiClient *avahi_client_new(const AvahiPoll *poll_api, AvahiClientFlags flags,
AvahiClient *client = NULL;
DBusError error;
+ avahi_init_i18n();
+
dbus_error_init(&error);
if (!(client = avahi_new(AvahiClient, 1))) {
@@ -493,13 +495,13 @@ AvahiClient *avahi_client_new(const AvahiPoll *poll_api, AvahiClientFlags flags,
client->userdata = userdata;
client->state = (AvahiClientState) -1;
client->flags = flags;
-
+
client->host_name = NULL;
client->host_name_fqdn = NULL;
client->domain_name = NULL;
client->version_string = NULL;
client->local_service_cookie_valid = 0;
-
+
AVAHI_LLIST_HEAD_INIT(AvahiEntryGroup, client->groups);
AVAHI_LLIST_HEAD_INIT(AvahiDomainBrowser, client->domain_browsers);
AVAHI_LLIST_HEAD_INIT(AvahiServiceBrowser, client->service_browsers);
@@ -523,10 +525,10 @@ AvahiClient *avahi_client_new(const AvahiPoll *poll_api, AvahiClientFlags flags,
if (!dbus_connection_add_filter (client->bus, filter_func, client, NULL)) {
if (ret_error)
- *ret_error = AVAHI_ERR_NO_MEMORY;
+ *ret_error = AVAHI_ERR_NO_MEMORY;
goto fail;
}
-
+
dbus_bus_add_match(
client->bus,
"type='signal', "
@@ -567,17 +569,17 @@ AvahiClient *avahi_client_new(const AvahiPoll *poll_api, AvahiClientFlags flags,
dbus_error_free(&error);
if (!(flags & AVAHI_CLIENT_NO_FAIL)) {
-
+
if (ret_error)
*ret_error = AVAHI_ERR_NO_DAEMON;
-
+
goto fail;
}
/* The user doesn't want this call to fail if the daemon is not
* available, so let's return succesfully */
client_set_state(client, AVAHI_CLIENT_CONNECTING);
-
+
} else {
if (init_server(client, ret_error) < 0)
@@ -600,10 +602,10 @@ fail:
else
*ret_error = avahi_error_dbus_to_number(error.name);
}
-
+
dbus_error_free(&error);
}
-
+
return NULL;
}
@@ -618,7 +620,7 @@ void avahi_client_free(AvahiClient *client) {
#else
dbus_connection_disconnect(client->bus);
#endif
-
+
while (client->groups)
avahi_entry_group_free(client->groups);
@@ -642,7 +644,7 @@ void avahi_client_free(AvahiClient *client) {
while (client->record_browsers)
avahi_record_browser_free(client->record_browsers);
-
+
if (client->bus)
dbus_connection_unref(client->bus);
@@ -650,7 +652,7 @@ void avahi_client_free(AvahiClient *client) {
avahi_free(client->host_name);
avahi_free(client->host_name_fqdn);
avahi_free(client->domain_name);
-
+
avahi_free(client);
}
@@ -675,7 +677,7 @@ static char* avahi_client_get_string_reply_and_block (AvahiClient *client, const
goto fail;
}
}
-
+
reply = dbus_connection_send_with_reply_and_block (client->bus, message, -1, &error);
if (!reply || dbus_error_is_set (&error))
@@ -684,7 +686,7 @@ static char* avahi_client_get_string_reply_and_block (AvahiClient *client, const
if (!dbus_message_get_args (reply, &error, DBUS_TYPE_STRING, &ret, DBUS_TYPE_INVALID) ||
dbus_error_is_set (&error))
goto fail;
-
+
if (!(n = avahi_strdup(ret))) {
avahi_client_set_errno(client, AVAHI_ERR_NO_MEMORY);
goto fail;
@@ -692,7 +694,7 @@ static char* avahi_client_get_string_reply_and_block (AvahiClient *client, const
dbus_message_unref(message);
dbus_message_unref(reply);
-
+
return n;
fail:
@@ -701,7 +703,7 @@ fail:
dbus_message_unref(message);
if (reply)
dbus_message_unref(reply);
-
+
if (dbus_error_is_set(&error)) {
avahi_client_set_dbus_error(client, &error);
dbus_error_free(&error);
@@ -734,13 +736,13 @@ const char* avahi_client_get_domain_name(AvahiClient *client) {
if (!client->domain_name)
client->domain_name = avahi_client_get_string_reply_and_block(client, "GetDomainName", NULL);
-
+
return client->domain_name;
}
const char* avahi_client_get_host_name(AvahiClient *client) {
assert(client);
-
+
if (!avahi_client_is_connected(client)) {
avahi_client_set_errno(client, AVAHI_ERR_BAD_STATE);
return NULL;
@@ -748,7 +750,7 @@ const char* avahi_client_get_host_name(AvahiClient *client) {
if (!client->host_name)
client->host_name = avahi_client_get_string_reply_and_block(client, "GetHostName", NULL);
-
+
return client->host_name;
}
@@ -759,7 +761,7 @@ const char* avahi_client_get_host_name_fqdn (AvahiClient *client) {
avahi_client_set_errno(client, AVAHI_ERR_BAD_STATE);
return NULL;
}
-
+
if (!client->host_name_fqdn)
client->host_name_fqdn = avahi_client_get_string_reply_and_block(client, "GetHostNameFqdn", NULL);
@@ -774,7 +776,7 @@ AvahiClientState avahi_client_get_state(AvahiClient *client) {
int avahi_client_errno(AvahiClient *client) {
assert(client);
-
+
return client->error;
}
@@ -783,25 +785,25 @@ int avahi_client_simple_method_call(AvahiClient *client, const char *path, const
DBusMessage *message = NULL, *reply = NULL;
DBusError error;
int r = AVAHI_OK;
-
+
dbus_error_init(&error);
assert(client);
assert(path);
assert(interface);
assert(method);
-
+
if (!(message = dbus_message_new_method_call(AVAHI_DBUS_NAME, path, interface, method))) {
r = avahi_client_set_errno(client, AVAHI_ERR_NO_MEMORY);
goto fail;
}
-
+
if (!(reply = dbus_connection_send_with_reply_and_block(client->bus, message, -1, &error)) ||
dbus_error_is_set (&error)) {
r = avahi_client_set_errno(client, AVAHI_ERR_DBUS_ERROR);
goto fail;
}
-
+
if (!dbus_message_get_args(reply, &error, DBUS_TYPE_INVALID) ||
dbus_error_is_set (&error)) {
r = avahi_client_set_errno(client, AVAHI_ERR_DBUS_ERROR);
@@ -812,7 +814,7 @@ int avahi_client_simple_method_call(AvahiClient *client, const char *path, const
dbus_message_unref(reply);
return AVAHI_OK;
-
+
fail:
if (dbus_error_is_set(&error)) {
r = avahi_client_set_dbus_error(client, &error);
@@ -856,7 +858,7 @@ uint32_t avahi_client_get_local_service_cookie(AvahiClient *client) {
if (!dbus_message_get_args (reply, &error, DBUS_TYPE_UINT32, &client->local_service_cookie, DBUS_TYPE_INVALID) ||
dbus_error_is_set (&error))
goto fail;
-
+
dbus_message_unref(message);
dbus_message_unref(reply);
@@ -869,7 +871,7 @@ fail:
dbus_message_unref(message);
if (reply)
dbus_message_unref(reply);
-
+
if (dbus_error_is_set(&error)) {
avahi_client_set_dbus_error(client, &error);
dbus_error_free(&error);
@@ -892,7 +894,7 @@ int avahi_client_set_host_name(AvahiClient* client, const char *name) {
DBusError error;
assert(client);
-
+
if (!avahi_client_is_connected(client))
return avahi_client_set_errno(client, AVAHI_ERR_BAD_STATE);
@@ -907,7 +909,7 @@ int avahi_client_set_host_name(AvahiClient* client, const char *name) {
avahi_client_set_errno (client, AVAHI_ERR_NO_MEMORY);
goto fail;
}
-
+
reply = dbus_connection_send_with_reply_and_block(client->bus, message, -1, &error);
if (!reply || dbus_error_is_set (&error))
@@ -924,7 +926,7 @@ int avahi_client_set_host_name(AvahiClient* client, const char *name) {
client->host_name = NULL;
avahi_free(client->host_name_fqdn);
client->host_name_fqdn = NULL;
-
+
return 0;
fail:
@@ -933,7 +935,7 @@ fail:
dbus_message_unref(message);
if (reply)
dbus_message_unref(reply);
-
+
if (dbus_error_is_set(&error)) {
avahi_client_set_dbus_error(client, &error);
dbus_error_free(&error);
diff --git a/avahi-common/Makefile.am b/avahi-common/Makefile.am
index b00cd78..b4bc917 100644
--- a/avahi-common/Makefile.am
+++ b/avahi-common/Makefile.am
@@ -71,7 +71,7 @@ libavahi_common_la_SOURCES = \
i18n.c i18n.h
libavahi_common_la_CFLAGS = $(AM_CFLAGS) $(PTHREAD_CFLAGS) -DAVAHI_LOCALEDIR=\"$(avahilocaledir)\"
-libavahi_common_la_LIBADD = $(AM_LDADD) $(PTHREAD_CFLAGS) $(PTHREAD_LIBS)
+libavahi_common_la_LIBADD = $(AM_LDADD) $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) $(LIBINTL)
libavahi_common_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(LIBAVAHI_COMMON_VERSION_INFO)
strlst_test_SOURCES = \
diff --git a/avahi-common/address.c b/avahi-common/address.c
index c8ddf7f..270292c 100644
--- a/avahi-common/address.c
+++ b/avahi-common/address.c
@@ -2,17 +2,17 @@
/***
This file is part of avahi.
-
+
avahi is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
-
+
avahi is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
Public License for more details.
-
+
You should have received a copy of the GNU Lesser General Public
License along with avahi; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
@@ -48,7 +48,7 @@ static size_t address_get_size(const AvahiAddress *a) {
int avahi_address_cmp(const AvahiAddress *a, const AvahiAddress *b) {
assert(a);
assert(b);
-
+
if (a->proto != b->proto)
return -1;
@@ -59,10 +59,10 @@ char *avahi_address_snprint(char *s, size_t length, const AvahiAddress *a) {
assert(s);
assert(length);
assert(a);
-
+
if (!(inet_ntop(avahi_proto_to_af(a->proto), a->data.data, s, length)))
return NULL;
-
+
return s;
}
@@ -119,10 +119,10 @@ AvahiAddress *avahi_address_parse(const char *s, AvahiProtocol proto, AvahiAddre
} else {
if (inet_pton(avahi_proto_to_af(proto), s, ret_addr->data.data) <= 0)
return NULL;
-
+
ret_addr->proto = proto;
}
-
+
return ret_addr;
}
diff --git a/avahi-common/gccmacro.h b/avahi-common/gccmacro.h
index 78a09a7..dd49502 100644
--- a/avahi-common/gccmacro.h
+++ b/avahi-common/gccmacro.h
@@ -28,6 +28,15 @@
AVAHI_C_DECL_BEGIN
+#if defined(__GNUC__) && (__GNUC__ >= 4) && (__GNUC_MINOR__ >= 3)
+#define AVAHI_GCC_ALLOC_SIZE(x) __attribute__ ((__alloc_size__(x)))
+#define AVAHI_GCC_ALLOC_SIZE2(x,y) __attribute__ ((__alloc_size__(x,y)))
+#else
+/** Macro for usage of GCC's alloc_size attribute */
+#define AVAHI_GCC_ALLOC_SIZE(x)
+#define AVAHI_GCC_ALLOC_SIZE2(x,y)
+#endif
+
#if defined(__GNUC__) && (__GNUC__ >= 4)
#define AVAHI_GCC_SENTINEL __attribute__ ((sentinel))
#else
diff --git a/avahi-common/malloc.h b/avahi-common/malloc.h
index 2430199..511b51c 100644
--- a/avahi-common/malloc.h
+++ b/avahi-common/malloc.h
@@ -35,19 +35,19 @@
AVAHI_C_DECL_BEGIN
/** Allocate some memory, just like the libc malloc() */
-void *avahi_malloc(size_t size);
+void *avahi_malloc(size_t size) AVAHI_GCC_ALLOC_SIZE(1);
/** Similar to avahi_malloc() but set the memory to zero */
-void *avahi_malloc0(size_t size);
+void *avahi_malloc0(size_t size) AVAHI_GCC_ALLOC_SIZE(1);
/** Free some memory */
void avahi_free(void *p);
/** Similar to libc's realloc() */
-void *avahi_realloc(void *p, size_t size);
+void *avahi_realloc(void *p, size_t size) AVAHI_GCC_ALLOC_SIZE(2);
/** Internal helper for avahi_new() */
-static inline void* avahi_new_internal(unsigned n, size_t k) {
+static inline void* AVAHI_GCC_ALLOC_SIZE2(1,2) avahi_new_internal(unsigned n, size_t k) {
assert(n < INT_MAX/k);
return avahi_malloc(n*k);
}
@@ -56,7 +56,7 @@ static inline void* avahi_new_internal(unsigned n, size_t k) {
#define avahi_new(type, n) ((type*) avahi_new_internal((n), sizeof(type)))
/** Internal helper for avahi_new0() */
-static inline void* avahi_new0_internal(unsigned n, size_t k) {
+static inline void* AVAHI_GCC_ALLOC_SIZE2(1,2) avahi_new0_internal(unsigned n, size_t k) {
assert(n < INT_MAX/k);
return avahi_malloc0(n*k);
}
@@ -71,14 +71,14 @@ char *avahi_strdup(const char *s);
char *avahi_strndup(const char *s, size_t l);
/** Duplicate the given memory block into a new one allocated with avahi_malloc() */
-void *avahi_memdup(const void *s, size_t l);
+void *avahi_memdup(const void *s, size_t l) AVAHI_GCC_ALLOC_SIZE(2);
/** Wraps allocator functions */
typedef struct AvahiAllocator {
- void* (*malloc)(size_t size);
- void (*free)(void *p);
- void* (*realloc)(void *p, size_t size);
- void* (*calloc)(size_t nmemb, size_t size); /**< May be NULL */
+ void* (*malloc)(size_t size) AVAHI_GCC_ALLOC_SIZE(1);
+ void (*free)(void *p);
+ void* (*realloc)(void *p, size_t size) AVAHI_GCC_ALLOC_SIZE(2);
+ void* (*calloc)(size_t nmemb, size_t size) AVAHI_GCC_ALLOC_SIZE2(1,2); /**< May be NULL */
} AvahiAllocator;
/** Change the allocator. May be NULL to return to default (libc)
diff --git a/avahi-common/thread-watch.c b/avahi-common/thread-watch.c
index 1a5d9d2..4f23608 100644
--- a/avahi-common/thread-watch.c
+++ b/avahi-common/thread-watch.c
@@ -2,17 +2,17 @@
/***
This file is part of avahi.
-
+
avahi is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
-
+
avahi is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
Public License for more details.
-
+
You should have received a copy of the GNU Lesser General Public
License along with avahi; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
@@ -53,7 +53,7 @@ static int poll_func(struct pollfd *ufds, unsigned int nfds, int timeout, void *
/* Before entering poll() we unlock the mutex, so that
* avahi_simple_poll_quit() can succeed from another thread. */
-
+
pthread_mutex_unlock(mutex);
r = poll(ufds, nfds, timeout);
pthread_mutex_lock(mutex);
@@ -68,11 +68,11 @@ static void* thread(void *userdata){
/* Make sure that signals are delivered to the main thread */
sigfillset(&mask);
pthread_sigmask(SIG_BLOCK, &mask, NULL);
-
+
pthread_mutex_lock(&p->mutex);
p->retval = avahi_simple_poll_loop(p->simple_poll);
pthread_mutex_unlock(&p->mutex);
-
+
return NULL;
}
@@ -81,14 +81,14 @@ AvahiThreadedPoll *avahi_threaded_poll_new(void) {
if (!(p = avahi_new(AvahiThreadedPoll, 1)))
goto fail; /* OOM */
-
+
if (!(p->simple_poll = avahi_simple_poll_new()))
goto fail;
-
+
pthread_mutex_init(&p->mutex, NULL);
avahi_simple_poll_set_func(p->simple_poll, poll_func, &p->mutex);
-
+
p->thread_running = 0;
return p;
@@ -136,6 +136,8 @@ int avahi_threaded_poll_start(AvahiThreadedPoll *p) {
if (pthread_create(&p->thread_id, NULL, thread, p) < 0)
return -1;
+ p->thread_running = 1;
+
return 0;
}
@@ -151,7 +153,7 @@ int avahi_threaded_poll_stop(AvahiThreadedPoll *p) {
pthread_mutex_lock(&p->mutex);
avahi_simple_poll_quit(p->simple_poll);
pthread_mutex_unlock(&p->mutex);
-
+
pthread_join(p->thread_id, NULL);
p->thread_running = 0;
@@ -172,7 +174,7 @@ void avahi_threaded_poll_lock(AvahiThreadedPoll *p) {
/* Make sure that this function is not called from the helper thread */
assert(!p->thread_running || !pthread_equal(pthread_self(), p->thread_id));
-
+
pthread_mutex_lock(&p->mutex);
}
@@ -181,6 +183,6 @@ void avahi_threaded_poll_unlock(AvahiThreadedPoll *p) {
/* Make sure that this function is not called from the helper thread */
assert(!p->thread_running || !pthread_equal(pthread_self(), p->thread_id));
-
+
pthread_mutex_unlock(&p->mutex);
}
diff --git a/avahi-core/core.h b/avahi-core/core.h
index 55aafe2..94d1970 100644
--- a/avahi-core/core.h
+++ b/avahi-core/core.h
@@ -47,6 +47,8 @@ typedef struct AvahiServerConfig {
char *domain_name; /**< Default domain name. If left empty defaults to .local */
int use_ipv4; /**< Enable IPv4 support */
int use_ipv6; /**< Enable IPv6 support */
+ AvahiStringList *allow_interfaces;/**< Allow specific interface to be used for Avahi */
+ AvahiStringList *deny_interfaces; /**< Deny specific interfaces to be used for Avahi */
int publish_hinfo; /**< Register a HINFO record for the host containing the local OS and CPU type */
int publish_addresses; /**< Register A, AAAA and PTR records for all local IP addresses */
int publish_workstation; /**< Register a _workstation._tcp service */
diff --git a/avahi-core/iface-pfroute.c b/avahi-core/iface-pfroute.c
index f96bfc2..391081e 100644
--- a/avahi-core/iface-pfroute.c
+++ b/avahi-core/iface-pfroute.c
@@ -125,7 +125,7 @@ static void rtm_addr(struct rt_msghdr *rtm, AvahiInterfaceMonitor *m)
int raddr_valid = 0;
struct ifa_msghdr *ifam = (struct ifa_msghdr *) rtm;
char *cp = (char *)(ifam + 1);
- int addrs = ifam->ifam_addrs;
+ char *cp0;
int i;
int prefixlen = 0;
struct sockaddr *sa =NULL;
@@ -135,17 +135,30 @@ static void rtm_addr(struct rt_msghdr *rtm, AvahiInterfaceMonitor *m)
((struct sockaddr *)cp)->sa_family = AF_INET;
#endif
- if(((struct sockaddr *)cp)->sa_family != AF_INET && ((struct sockaddr *)cp)->sa_family != AF_INET6)
+ for (cp0 = cp, i = 0; i < RTAX_MAX; i++) {
+ if (!(ifam->ifam_addrs & (1<<i)))
+ continue;
+ sa = (struct sockaddr *)cp;
+ if (i == RTAX_IFA)
+ break;
+#ifdef SA_SIZE
+ cp += SA_SIZE(sa);
+#else
+ ADVANCE(cp, sa);
+#endif
+ }
+
+ if(sa->sa_family != AF_INET && sa->sa_family != AF_INET6)
return;
- if (!(iface = avahi_interface_monitor_get_interface(m, (AvahiIfIndex) ifam->ifam_index, avahi_af_to_proto(((struct sockaddr *)cp)->sa_family))))
+ if (!(iface = avahi_interface_monitor_get_interface(m, (AvahiIfIndex) ifam->ifam_index, avahi_af_to_proto(sa->sa_family))))
return;
- raddr.proto = avahi_af_to_proto(((struct sockaddr *)cp)->sa_family);
+ raddr.proto = avahi_af_to_proto(sa->sa_family);
- for(i = 0; addrs != 0 && i < RTAX_MAX; addrs &= ~(1<<i), i++)
+ for(cp = cp0, i = 0; i < RTAX_MAX; i++)
{
- if (!(addrs & 1<<i))
+ if (!(ifam->ifam_addrs & (1<<i)))
continue;
sa = (struct sockaddr *)cp;
#ifdef HAVE_SYS_SYSCTL_H
@@ -172,6 +185,13 @@ static void rtm_addr(struct rt_msghdr *rtm, AvahiInterfaceMonitor *m)
break;
case RTA_IFA:
memcpy(raddr.data.data, &((struct sockaddr_in6 *)sa)->sin6_addr, sizeof(struct in6_addr));
+#ifdef __KAME__
+ if (IN6_IS_ADDR_LINKLOCAL((struct in6_addr *)raddr.data.data))
+ {
+ ((struct in6_addr *)raddr.data.data)->s6_addr[2] = 0;
+ ((struct in6_addr *)raddr.data.data)->s6_addr[3] = 0;
+ }
+#endif
raddr_valid = 1;
default:
break;
@@ -196,9 +216,12 @@ static void rtm_addr(struct rt_msghdr *rtm, AvahiInterfaceMonitor *m)
if (!(addriface = avahi_interface_monitor_get_address(m, iface, &raddr)))
if (!(addriface = avahi_interface_address_new(m, iface, &raddr, prefixlen)))
return; /* OOM */
- /* FIXME */
- /* addriface->global_scope = ifaddrmsg->ifa_scope == RT_SCOPE_UNIVERSE || ifaddrmsg->ifa_scope == RT_SCOPE_SITE; */
- addriface->global_scope = 1;
+ if (raddr.proto == AVAHI_PROTO_INET6)
+ {
+ addriface->global_scope = !(IN6_IS_ADDR_LINKLOCAL((struct in6_addr *)raddr.data.data) || IN6_IS_ADDR_MULTICAST((struct in6_addr *)raddr.data.data));
+ }
+ else
+ addriface->global_scope = 1;
}
else
{
diff --git a/avahi-core/iface.c b/avahi-core/iface.c
index 8098de4..5fbfc19 100644
--- a/avahi-core/iface.c
+++ b/avahi-core/iface.c
@@ -2,17 +2,17 @@
/***
This file is part of avahi.
-
+
avahi is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
-
+
avahi is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
Public License for more details.
-
+
You should have received a copy of the GNU Lesser General Public
License along with avahi; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
@@ -59,19 +59,19 @@ void avahi_interface_address_update_rrs(AvahiInterfaceAddress *a, int remove_rrs
m->server->state == AVAHI_SERVER_REGISTERING)) {
/* Fill the entry group */
- if (!a->entry_group)
+ if (!a->entry_group)
a->entry_group = avahi_s_entry_group_new(m->server, avahi_host_rr_entry_group_callback, NULL);
if (!a->entry_group) /* OOM */
return;
-
+
if (avahi_s_entry_group_is_empty(a->entry_group)) {
char t[AVAHI_ADDRESS_STR_MAX];
AvahiProtocol p;
p = (a->interface->protocol == AVAHI_PROTO_INET && m->server->config.publish_a_on_ipv6) ||
(a->interface->protocol == AVAHI_PROTO_INET6 && m->server->config.publish_aaaa_on_ipv4) ? AVAHI_PROTO_UNSPEC : a->interface->protocol;
-
+
avahi_address_snprint(t, sizeof(t), &a->address);
avahi_log_info("Registering new address record for %s on %s.%s.", t, a->interface->hardware->name, p == AVAHI_PROTO_UNSPEC ? "*" : avahi_proto_to_string(p));
@@ -97,15 +97,15 @@ void avahi_interface_address_update_rrs(AvahiInterfaceAddress *a, int remove_rrs
avahi_server_decrease_host_rr_pending(m->server);
avahi_log_info("Withdrawing address record for %s on %s.", t, a->interface->hardware->name);
-
+
avahi_s_entry_group_reset(a->entry_group);
}
- }
+ }
}
void avahi_interface_update_rrs(AvahiInterface *i, int remove_rrs) {
AvahiInterfaceAddress *a;
-
+
assert(i);
for (a = i->addresses; a; a = a->address_next)
@@ -132,21 +132,21 @@ void avahi_hw_interface_update_rrs(AvahiHwInterface *hw, int remove_rrs) {
if (!hw->entry_group)
return; /* OOM */
-
+
if (avahi_s_entry_group_is_empty(hw->entry_group)) {
char name[AVAHI_LABEL_MAX], mac[256];
avahi_format_mac_address(mac, sizeof(mac), hw->mac_address, hw->mac_address_size);
snprintf(name, sizeof(name), "%s [%s]", m->server->host_name, mac);
- if (avahi_server_add_service(m->server, hw->entry_group, hw->index, AVAHI_PROTO_UNSPEC, 0, name, "_workstation._tcp", NULL, NULL, 9, NULL) < 0) {
+ if (avahi_server_add_service(m->server, hw->entry_group, hw->index, AVAHI_PROTO_UNSPEC, 0, name, "_workstation._tcp", NULL, NULL, 9, NULL) < 0) {
avahi_log_warn(__FILE__": avahi_server_add_service() failed: %s", avahi_strerror(m->server->error));
avahi_s_entry_group_free(hw->entry_group);
hw->entry_group = NULL;
} else
avahi_s_entry_group_commit(hw->entry_group);
}
-
+
} else {
if (hw->entry_group && !avahi_s_entry_group_is_empty(hw->entry_group)) {
@@ -179,7 +179,7 @@ static int interface_mdns_mcast_join(AvahiInterface *i, int join) {
if ((i->protocol == AVAHI_PROTO_INET6 && i->monitor->server->fd_ipv6 < 0) ||
(i->protocol == AVAHI_PROTO_INET && i->monitor->server->fd_ipv4 < 0))
return -1;
-
+
if (join) {
AvahiInterfaceAddress *a;
@@ -210,7 +210,7 @@ static int interface_mdns_mcast_join(AvahiInterface *i, int join) {
r = avahi_mdns_mcast_join_ipv6(i->monitor->server->fd_ipv6, &i->local_mcast_address.data.ipv6, i->hardware->index, join);
else {
assert(i->protocol == AVAHI_PROTO_INET);
-
+
r = avahi_mdns_mcast_join_ipv4(i->monitor->server->fd_ipv4, &i->local_mcast_address.data.ipv4, i->hardware->index, join);
}
@@ -218,7 +218,7 @@ static int interface_mdns_mcast_join(AvahiInterface *i, int join) {
i->mcast_joined = 0;
else
i->mcast_joined = join;
-
+
return 0;
}
@@ -231,11 +231,11 @@ static int interface_mdns_mcast_rejoin(AvahiInterface *i) {
/* Check whether old address we joined with is still available. If
* not, rejoin using an other address. */
-
+
for (a = i->addresses; a; a = a->address_next) {
if (a->global_scope && !usable)
usable = a;
-
+
if (avahi_address_cmp(&a->address, &i->local_mcast_address) == 0) {
if (a->global_scope)
@@ -250,7 +250,7 @@ static int interface_mdns_mcast_rejoin(AvahiInterface *i) {
if (found && !usable)
/* No action necessary: the address still exists and no better one has been found */
return 0;
-
+
interface_mdns_mcast_join(i, 0);
return interface_mdns_mcast_join(i, 1);
}
@@ -266,7 +266,7 @@ void avahi_interface_address_free(AvahiInterfaceAddress *a) {
avahi_s_entry_group_free(a->entry_group);
interface_mdns_mcast_rejoin(a->interface);
-
+
avahi_free(a);
}
@@ -280,14 +280,14 @@ void avahi_interface_free(AvahiInterface *i, int send_goodbye) {
if (i->mcast_joined)
interface_mdns_mcast_join(i, 0);
-
+
/* Remove queriers */
avahi_querier_free_all(i);
avahi_hashmap_free(i->queriers_by_key);
/* Remove local RRs */
avahi_interface_update_rrs(i, 1);
-
+
while (i->addresses)
avahi_interface_address_free(i->addresses);
@@ -295,10 +295,10 @@ void avahi_interface_free(AvahiInterface *i, int send_goodbye) {
avahi_query_scheduler_free(i->query_scheduler);
avahi_probe_scheduler_free(i->probe_scheduler);
avahi_cache_free(i->cache);
-
+
AVAHI_LLIST_REMOVE(AvahiInterface, interface, i->monitor->interfaces, i);
AVAHI_LLIST_REMOVE(AvahiInterface, by_hardware, i->hardware->interfaces, i);
-
+
avahi_free(i);
}
@@ -306,13 +306,13 @@ void avahi_hw_interface_free(AvahiHwInterface *hw, int send_goodbye) {
assert(hw);
avahi_hw_interface_update_rrs(hw, 1);
-
+
while (hw->interfaces)
avahi_interface_free(hw->interfaces, send_goodbye);
if (hw->entry_group)
avahi_s_entry_group_free(hw->entry_group);
-
+
AVAHI_LLIST_REMOVE(AvahiHwInterface, hardware, hw->monitor->hw_interfaces, hw);
avahi_hashmap_remove(hw->monitor->hashmap, &hw->index);
@@ -322,14 +322,14 @@ void avahi_hw_interface_free(AvahiHwInterface *hw, int send_goodbye) {
AvahiInterface* avahi_interface_new(AvahiInterfaceMonitor *m, AvahiHwInterface *hw, AvahiProtocol protocol) {
AvahiInterface *i;
-
+
assert(m);
assert(hw);
assert(AVAHI_PROTO_VALID(protocol));
if (!(i = avahi_new(AvahiInterface, 1)))
goto fail; /* OOM */
-
+
i->monitor = m;
i->hardware = hw;
i->protocol = protocol;
@@ -354,7 +354,7 @@ AvahiInterface* avahi_interface_new(AvahiInterfaceMonitor *m, AvahiHwInterface *
AVAHI_LLIST_PREPEND(AvahiInterface, interface, m->interfaces, i);
return i;
-
+
fail:
if (i) {
@@ -373,13 +373,13 @@ fail:
AvahiHwInterface *avahi_hw_interface_new(AvahiInterfaceMonitor *m, AvahiIfIndex idx) {
AvahiHwInterface *hw;
-
+
assert(m);
assert(AVAHI_IF_VALID(idx));
if (!(hw = avahi_new(AvahiHwInterface, 1)))
return NULL;
-
+
hw->monitor = m;
hw->name = NULL;
hw->flags_ok = 0;
@@ -390,7 +390,7 @@ AvahiHwInterface *avahi_hw_interface_new(AvahiInterfaceMonitor *m, AvahiIfIndex
AVAHI_LLIST_HEAD_INIT(AvahiInterface, hw->interfaces);
AVAHI_LLIST_PREPEND(AvahiHwInterface, hardware, m->hw_interfaces, hw);
-
+
avahi_hashmap_insert(m->hashmap, &hw->index, hw);
if (m->server->fd_ipv4 >= 0 || m->server->config.publish_a_on_ipv6)
@@ -441,7 +441,7 @@ void avahi_interface_check_relevant(AvahiInterface *i) {
avahi_announce_interface(m->server, i);
avahi_multicast_lookup_engine_new_interface(m->server->multicast_lookup_engine, i);
}
-
+
} else if (!b && i->announcing) {
avahi_log_info("Interface %s.%s no longer relevant for mDNS.", i->hardware->name, avahi_proto_to_string(i->protocol));
@@ -456,14 +456,14 @@ void avahi_interface_check_relevant(AvahiInterface *i) {
avahi_cache_flush(i->cache);
i->announcing = 0;
-
+
} else
interface_mdns_mcast_rejoin(i);
}
void avahi_hw_interface_check_relevant(AvahiHwInterface *hw) {
AvahiInterface *i;
-
+
assert(hw);
for (i = hw->interfaces; i; i = i->by_hardware_next)
@@ -484,7 +484,7 @@ AvahiInterfaceMonitor *avahi_interface_monitor_new(AvahiServer *s) {
if (!(m = avahi_new0(AvahiInterfaceMonitor, 1)))
return NULL; /* OOM */
-
+
m->server = s;
m->list_complete = 0;
m->hashmap = avahi_hashmap_new(avahi_int_hash, avahi_int_equal, NULL, NULL);
@@ -511,7 +511,7 @@ void avahi_interface_monitor_free(AvahiInterfaceMonitor *m) {
assert(!m->interfaces);
avahi_interface_monitor_free_osdep(m);
-
+
if (m->hashmap)
avahi_hashmap_free(m->hashmap);
@@ -522,7 +522,7 @@ void avahi_interface_monitor_free(AvahiInterfaceMonitor *m) {
AvahiInterface* avahi_interface_monitor_get_interface(AvahiInterfaceMonitor *m, AvahiIfIndex idx, AvahiProtocol protocol) {
AvahiHwInterface *hw;
AvahiInterface *i;
-
+
assert(m);
assert(idx >= 0);
assert(protocol != AVAHI_PROTO_UNSPEC);
@@ -546,7 +546,7 @@ AvahiHwInterface* avahi_interface_monitor_get_hw_interface(AvahiInterfaceMonitor
AvahiInterfaceAddress* avahi_interface_monitor_get_address(AvahiInterfaceMonitor *m, AvahiInterface *i, const AvahiAddress *raddr) {
AvahiInterfaceAddress *ia;
-
+
assert(m);
assert(i);
assert(raddr);
@@ -564,7 +564,7 @@ void avahi_interface_send_packet_unicast(AvahiInterface *i, AvahiDnsPacket *p, c
if (!i->announcing)
return;
-
+
assert(!a || a->proto == i->protocol);
if (i->protocol == AVAHI_PROTO_INET && i->monitor->server->fd_ipv4 >= 0)
@@ -586,7 +586,7 @@ int avahi_interface_post_query(AvahiInterface *i, AvahiKey *key, int immediately
if (!i->announcing)
return 0;
-
+
return avahi_query_scheduler_post(i->query_scheduler, key, immediately, ret_id);
}
@@ -601,14 +601,14 @@ int avahi_interface_post_response(AvahiInterface *i, AvahiRecord *record, int fl
if (!i->announcing)
return 0;
-
+
return avahi_response_scheduler_post(i->response_scheduler, record, flush_cache, querier, immediately);
}
int avahi_interface_post_probe(AvahiInterface *i, AvahiRecord *record, int immediately) {
assert(i);
assert(record);
-
+
if (!i->announcing)
return 0;
@@ -632,21 +632,42 @@ int avahi_dump_caches(AvahiInterfaceMonitor *m, AvahiDumpCallback callback, void
return 0;
}
-int avahi_interface_is_relevant(AvahiInterface *i) {
+static int avahi_interface_is_relevant_internal(AvahiInterface *i) {
AvahiInterfaceAddress *a;
-
+
assert(i);
if (!i->hardware->flags_ok)
return 0;
-
+
for (a = i->addresses; a; a = a->address_next)
if (avahi_interface_address_is_relevant(a))
return 1;
return 0;
}
-
+
+int avahi_interface_is_relevant(AvahiInterface *i) {
+ AvahiStringList *l;
+ assert(i);
+
+ for (l = i->monitor->server->config.deny_interfaces; l; l = l->next)
+ if (strcasecmp((char*) l->text, i->hardware->name) == 0)
+ return 0;
+
+ if (i->monitor->server->config.allow_interfaces) {
+
+ for (l = i->monitor->server->config.allow_interfaces; l; l = l->next)
+ if (strcasecmp((char*) l->text, i->hardware->name) == 0)
+ goto good;
+
+ return 0;
+ }
+
+good:
+ return avahi_interface_is_relevant_internal(i);
+}
+
int avahi_interface_address_is_relevant(AvahiInterfaceAddress *a) {
AvahiInterfaceAddress *b;
assert(a);
@@ -655,12 +676,12 @@ int avahi_interface_address_is_relevant(AvahiInterfaceAddress *a) {
if (a->global_scope)
return 1;
else {
-
+
/* Publish link local IP addresses if they are the only ones on the link */
for (b = a->interface->addresses; b; b = b->address_next) {
if (b == a)
continue;
-
+
if (b->global_scope)
return 0;
}
@@ -673,7 +694,7 @@ int avahi_interface_address_is_relevant(AvahiInterfaceAddress *a) {
int avahi_interface_match(AvahiInterface *i, AvahiIfIndex idx, AvahiProtocol protocol) {
assert(i);
-
+
if (idx != AVAHI_IF_UNSPEC && idx != i->hardware->index)
return 0;
@@ -686,14 +707,14 @@ int avahi_interface_match(AvahiInterface *i, AvahiIfIndex idx, AvahiProtocol pro
void avahi_interface_monitor_walk(AvahiInterfaceMonitor *m, AvahiIfIndex interface, AvahiProtocol protocol, AvahiInterfaceMonitorWalkCallback callback, void* userdata) {
assert(m);
assert(callback);
-
+
if (interface != AVAHI_IF_UNSPEC) {
if (protocol != AVAHI_PROTO_UNSPEC) {
AvahiInterface *i;
-
+
if ((i = avahi_interface_monitor_get_interface(m, interface, protocol)))
callback(m, i, userdata);
-
+
} else {
AvahiHwInterface *hw;
AvahiInterface *i;
@@ -703,10 +724,10 @@ void avahi_interface_monitor_walk(AvahiInterfaceMonitor *m, AvahiIfIndex interfa
if (avahi_interface_match(i, interface, protocol))
callback(m, i, userdata);
}
-
+
} else {
AvahiInterface *i;
-
+
for (i = m->interfaces; i; i = i->interface_next)
if (avahi_interface_match(i, interface, protocol))
callback(m, i, userdata);
@@ -730,7 +751,7 @@ int avahi_address_is_local(AvahiInterfaceMonitor *m, const AvahiAddress *a) {
int avahi_interface_address_on_link(AvahiInterface *i, const AvahiAddress *a) {
AvahiInterfaceAddress *ia;
-
+
assert(i);
assert(a);
@@ -741,9 +762,9 @@ int avahi_interface_address_on_link(AvahiInterface *i, const AvahiAddress *a) {
if (a->proto == AVAHI_PROTO_INET) {
uint32_t m;
-
+
m = ~(((uint32_t) -1) >> ia->prefix_len);
-
+
if ((ntohl(a->data.ipv4.address) & m) == (ntohl(ia->address.data.ipv4.address) & m))
return 1;
} else {
@@ -752,13 +773,13 @@ int avahi_interface_address_on_link(AvahiInterface *i, const AvahiAddress *a) {
assert(a->proto == AVAHI_PROTO_INET6);
pl = ia->prefix_len;
-
+
for (j = 0; j < 16; j++) {
uint8_t m;
if (pl == 0)
return 1;
-
+
if (pl >= 8) {
m = 0xFF;
pl -= 8;
@@ -766,7 +787,7 @@ int avahi_interface_address_on_link(AvahiInterface *i, const AvahiAddress *a) {
m = ~(0xFF >> pl);
pl = 0;
}
-
+
if ((a->data.ipv6.address[j] & m) != (ia->address.data.ipv6.address[j] & m))
break;
}
@@ -779,7 +800,7 @@ int avahi_interface_address_on_link(AvahiInterface *i, const AvahiAddress *a) {
int avahi_interface_has_address(AvahiInterfaceMonitor *m, AvahiIfIndex iface, const AvahiAddress *a) {
AvahiInterface *i;
AvahiInterfaceAddress *j;
-
+
assert(m);
assert(iface != AVAHI_IF_UNSPEC);
assert(a);
@@ -809,7 +830,7 @@ AvahiIfIndex avahi_find_interface_for_address(AvahiInterfaceMonitor *m, const Av
if (i->protocol != a->proto)
continue;
-
+
for (ai = i->addresses; ai; ai = ai->address_next)
if (avahi_address_cmp(a, &ai->address) == 0)
return i->hardware->index;
diff --git a/avahi-core/server.c b/avahi-core/server.c
index 453db09..73ae1cb 100644
--- a/avahi-core/server.c
+++ b/avahi-core/server.c
@@ -2,17 +2,17 @@
/***
This file is part of avahi.
-
+
avahi is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
-
+
avahi is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
Public License for more details.
-
+
You should have received a copy of the GNU Lesser General Public
License along with avahi; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
@@ -59,7 +59,7 @@ static void enum_aux_records(AvahiServer *s, AvahiInterface *i, const char *name
if (type == AVAHI_DNS_TYPE_ANY) {
AvahiEntry *e;
-
+
for (e = s->entries; e; e = e->entries_next)
if (!e->dead &&
avahi_entry_is_registered(s, e, i) &&
@@ -70,14 +70,14 @@ static void enum_aux_records(AvahiServer *s, AvahiInterface *i, const char *name
} else {
AvahiEntry *e;
AvahiKey *k;
-
+
if (!(k = avahi_key_new(name, AVAHI_DNS_CLASS_IN, type)))
return; /** OOM */
-
+
for (e = avahi_hashmap_lookup(s->entries_by_key, k); e; e = e->by_key_next)
- if (!e->dead && avahi_entry_is_registered(s, e, i))
+ if (!e->dead && avahi_entry_is_registered(s, e, i))
callback(s, e->record, e->flags & AVAHI_PUBLISH_UNIQUE, userdata);
-
+
avahi_key_unref(k);
}
}
@@ -89,7 +89,7 @@ void avahi_server_enumerate_aux_records(AvahiServer *s, AvahiInterface *i, Avahi
assert(callback);
/* Call the specified callback far all records referenced by the one specified in *r */
-
+
if (r->key->clazz == AVAHI_DNS_CLASS_IN) {
if (r->key->type == AVAHI_DNS_TYPE_PTR) {
enum_aux_records(s, i, r->data.ptr.name, AVAHI_DNS_TYPE_SRV, callback, userdata);
@@ -121,7 +121,7 @@ void avahi_server_prepare_matching_responses(AvahiServer *s, AvahiInterface *i,
AvahiEntry *e;
/* Handle ANY query */
-
+
for (e = s->entries; e; e = e->entries_next)
if (!e->dead && avahi_key_pattern_match(k, e->record->key) && avahi_entry_is_registered(s, e, i))
avahi_server_prepare_response(s, i, e, unicast_response, 0);
@@ -130,7 +130,7 @@ void avahi_server_prepare_matching_responses(AvahiServer *s, AvahiInterface *i,
AvahiEntry *e;
/* Handle all other queries */
-
+
for (e = avahi_hashmap_lookup(s->entries_by_key, k); e; e = e->by_key_next)
if (!e->dead && avahi_entry_is_registered(s, e, i))
avahi_server_prepare_response(s, i, e, unicast_response, 0);
@@ -145,7 +145,7 @@ void avahi_server_prepare_matching_responses(AvahiServer *s, AvahiInterface *i,
if (!(cname_key = avahi_key_new(k->name, AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_CNAME)))
return;
-
+
avahi_server_prepare_matching_responses(s, i, cname_key, unicast_response);
avahi_key_unref(cname_key);
}
@@ -160,11 +160,11 @@ static void withdraw_entry(AvahiServer *s, AvahiEntry *e) {
if (e->dead)
return;
-
+
if (e->group) {
AvahiEntry *k;
-
- for (k = e->group->entries; k; k = k->by_group_next)
+
+ for (k = e->group->entries; k; k = k->by_group_next)
if (!k->dead) {
avahi_goodbye_entry(s, k, 0, 1);
k->dead = 1;
@@ -183,12 +183,12 @@ static void withdraw_entry(AvahiServer *s, AvahiEntry *e) {
static void withdraw_rrset(AvahiServer *s, AvahiKey *key) {
AvahiEntry *e;
-
+
assert(s);
assert(key);
/* Withdraw an entry RRSset */
-
+
for (e = avahi_hashmap_lookup(s->entries_by_key, key); e; e = e->by_key_next)
withdraw_entry(s, e);
}
@@ -196,25 +196,25 @@ static void withdraw_rrset(AvahiServer *s, AvahiKey *key) {
static void incoming_probe(AvahiServer *s, AvahiRecord *record, AvahiInterface *i) {
AvahiEntry *e, *n;
int ours = 0, won = 0, lost = 0;
-
+
assert(s);
assert(record);
assert(i);
/* Handle incoming probes and check if they conflict our own probes */
-
+
for (e = avahi_hashmap_lookup(s->entries_by_key, record->key); e; e = n) {
int cmp;
n = e->by_key_next;
if (e->dead)
continue;
-
+
if ((cmp = avahi_record_lexicographical_compare(e->record, record)) == 0) {
ours = 1;
break;
} else {
-
+
if (avahi_entry_is_probing(s, e, i)) {
if (cmp > 0)
won = 1;
@@ -226,14 +226,14 @@ static void incoming_probe(AvahiServer *s, AvahiRecord *record, AvahiInterface *
if (!ours) {
char *t = avahi_record_to_string(record);
-
+
if (won)
avahi_log_debug("Received conflicting probe [%s]. Local host won.", t);
else if (lost) {
avahi_log_debug("Received conflicting probe [%s]. Local host lost. Withdrawing.", t);
withdraw_rrset(s, record->key);
}
-
+
avahi_free(t);
}
}
@@ -241,13 +241,13 @@ static void incoming_probe(AvahiServer *s, AvahiRecord *record, AvahiInterface *
static int handle_conflict(AvahiServer *s, AvahiInterface *i, AvahiRecord *record, int unique) {
int valid = 1, ours = 0, conflict = 0, withdraw_immediately = 0;
AvahiEntry *e, *n, *conflicting_entry = NULL;
-
+
assert(s);
assert(i);
assert(record);
/* Check whether an incoming record conflicts with one of our own */
-
+
for (e = avahi_hashmap_lookup(s->entries_by_key, record->key); e; e = n) {
n = e->by_key_next;
@@ -261,7 +261,7 @@ static int handle_conflict(AvahiServer *s, AvahiInterface *i, AvahiRecord *recor
char *t;
/* Refresh */
- t = avahi_record_to_string(record);
+ t = avahi_record_to_string(record);
avahi_log_debug("Received goodbye record for one of our records [%s]. Refreshing.", t);
avahi_server_prepare_matching_responses(s, i, e->record->key, 0);
@@ -273,36 +273,36 @@ static int handle_conflict(AvahiServer *s, AvahiInterface *i, AvahiRecord *recor
/* If the goodybe packet doesn't match one of our own RRs, we simply ignore it. */
continue;
}
-
+
if (!(e->flags & AVAHI_PUBLISH_UNIQUE) && !unique)
continue;
/* Either our entry or the other is intended to be unique, so let's check */
-
+
if (avahi_record_equal_no_ttl(e->record, record)) {
ours = 1; /* We have an identical record, so this is no conflict */
-
+
/* Check wheter there is a TTL conflict */
if (record->ttl <= e->record->ttl/2 &&
avahi_entry_is_registered(s, e, i)) {
char *t;
/* Refresh */
- t = avahi_record_to_string(record);
-
+ t = avahi_record_to_string(record);
+
avahi_log_debug("Received record with bad TTL [%s]. Refreshing.", t);
avahi_server_prepare_matching_responses(s, i, e->record->key, 0);
valid = 0;
-
+
avahi_free(t);
}
-
+
/* There's no need to check the other entries of this RRset */
break;
} else {
-
+
if (avahi_entry_is_registered(s, e, i)) {
-
+
/* A conflict => we have to return to probe mode */
conflict = 1;
conflicting_entry = e;
@@ -320,11 +320,11 @@ static int handle_conflict(AvahiServer *s, AvahiInterface *i, AvahiRecord *recor
if (!ours && conflict) {
char *t;
-
+
valid = 0;
- t = avahi_record_to_string(record);
-
+ t = avahi_record_to_string(record);
+
if (withdraw_immediately) {
avahi_log_debug("Received conflicting record [%s] with local record to be. Withdrawing.", t);
withdraw_rrset(s, record->key);
@@ -349,7 +349,7 @@ static void append_aux_callback(AvahiServer *s, AvahiRecord *r, int flush_cache,
assert(s);
assert(r);
assert(unicast_response);
-
+
avahi_record_list_push(s->record_list, r, flush_cache, *unicast_response, 1);
}
@@ -372,11 +372,11 @@ void avahi_server_generate_response(AvahiServer *s, AvahiInterface *i, AvahiDnsP
if (!(reply = avahi_dns_packet_new_reply(p, 512 + AVAHI_DNS_PACKET_EXTRA_SIZE /* unicast DNS maximum packet size is 512 */ , 1, 1)))
return; /* OOM */
-
+
while ((r = avahi_record_list_next(s->record_list, NULL, NULL, NULL))) {
append_aux_records_to_list(s, i, r, 0);
-
+
if (avahi_dns_packet_append_record(reply, r, 0, 10))
avahi_dns_packet_inc_field(reply, AVAHI_DNS_FIELD_ANCOUNT);
else {
@@ -402,7 +402,7 @@ void avahi_server_generate_response(AvahiServer *s, AvahiInterface *i, AvahiDnsP
immediately, because known answer suppression records might be
contained in later packets */
int tc = p && !!(avahi_dns_packet_get_field(p, AVAHI_DNS_FIELD_FLAGS) & AVAHI_DNS_FLAG_TC);
-
+
while ((r = avahi_record_list_next(s->record_list, &flush_cache, &unicast_response, &auxiliary))) {
int im = immediately;
@@ -411,7 +411,7 @@ void avahi_server_generate_response(AvahiServer *s, AvahiInterface *i, AvahiDnsP
* unique entry AND it is not in reply to a truncated
* packet AND it is not an auxiliary record AND all other
* responses for this record are unique too. */
-
+
if (flush_cache && !tc && !auxiliary && avahi_record_list_all_flush_cache(s->record_list))
im = 1;
@@ -422,21 +422,21 @@ void avahi_server_generate_response(AvahiServer *s, AvahiInterface *i, AvahiDnsP
* case. Therefore we prepare such a response */
append_aux_records_to_list(s, i, r, unicast_response);
-
+
for (;;) {
-
+
if (!reply) {
assert(p);
if (!(reply = avahi_dns_packet_new_reply(p, i->hardware->mtu, 0, 0)))
break; /* OOM */
}
-
+
if (avahi_dns_packet_append_record(reply, r, flush_cache, 0)) {
/* Appending this record succeeded, so incremeant
* the specific header field, and return to the caller */
-
+
avahi_dns_packet_inc_field(reply, AVAHI_DNS_FIELD_ANCOUNT);
break;
}
@@ -456,7 +456,7 @@ void avahi_server_generate_response(AvahiServer *s, AvahiInterface *i, AvahiDnsP
/* Appending this record succeeded, so incremeant
* the specific header field, and return to the caller */
-
+
avahi_dns_packet_inc_field(reply, AVAHI_DNS_FIELD_ANCOUNT);
break;
@@ -465,7 +465,7 @@ void avahi_server_generate_response(AvahiServer *s, AvahiInterface *i, AvahiDnsP
/* We completely fucked up, there's
* nothing we can do. The RR just doesn't
* fit in. Let's ignore it. */
-
+
char *t;
avahi_dns_packet_free(reply);
reply = NULL;
@@ -487,7 +487,7 @@ void avahi_server_generate_response(AvahiServer *s, AvahiInterface *i, AvahiDnsP
}
if (reply) {
- if (avahi_dns_packet_get_field(reply, AVAHI_DNS_FIELD_ANCOUNT) != 0)
+ if (avahi_dns_packet_get_field(reply, AVAHI_DNS_FIELD_ANCOUNT) != 0)
avahi_interface_send_packet_unicast(i, reply, a, port);
avahi_dns_packet_free(reply);
}
@@ -498,7 +498,7 @@ void avahi_server_generate_response(AvahiServer *s, AvahiInterface *i, AvahiDnsP
static void reflect_response(AvahiServer *s, AvahiInterface *i, AvahiRecord *r, int flush_cache) {
AvahiInterface *j;
-
+
assert(s);
assert(i);
assert(r);
@@ -525,7 +525,7 @@ static void* reflect_cache_walk_callback(AvahiCache *c, AvahiKey *pattern, Avahi
static void reflect_query(AvahiServer *s, AvahiInterface *i, AvahiKey *k) {
AvahiInterface *j;
-
+
assert(s);
assert(i);
assert(k);
@@ -547,7 +547,7 @@ static void reflect_query(AvahiServer *s, AvahiInterface *i, AvahiKey *k) {
static void reflect_probe(AvahiServer *s, AvahiInterface *i, AvahiRecord *r) {
AvahiInterface *j;
-
+
assert(s);
assert(i);
assert(r);
@@ -563,7 +563,7 @@ static void reflect_probe(AvahiServer *s, AvahiInterface *i, AvahiRecord *r) {
static void handle_query_packet(AvahiServer *s, AvahiDnsPacket *p, AvahiInterface *i, const AvahiAddress *a, uint16_t port, int legacy_unicast, int from_local_iface) {
size_t n;
int is_probe;
-
+
assert(s);
assert(p);
assert(i);
@@ -572,7 +572,7 @@ static void handle_query_packet(AvahiServer *s, AvahiDnsPacket *p, AvahiInterfac
assert(avahi_record_list_is_empty(s->record_list));
is_probe = avahi_dns_packet_get_field(p, AVAHI_DNS_FIELD_NSCOUNT) > 0;
-
+
/* Handle the questions */
for (n = avahi_dns_packet_get_field(p, AVAHI_DNS_FIELD_QDCOUNT); n > 0; n --) {
AvahiKey *key;
@@ -594,7 +594,7 @@ static void handle_query_packet(AvahiServer *s, AvahiDnsPacket *p, AvahiInterfac
/* Allow our own queries to be suppressed by incoming
* queries only when they do not include known answers */
avahi_query_scheduler_incoming(i->query_scheduler, key);
-
+
avahi_server_prepare_matching_responses(s, i, key, unicast_response);
avahi_key_unref(key);
}
@@ -605,35 +605,35 @@ static void handle_query_packet(AvahiServer *s, AvahiDnsPacket *p, AvahiInterfac
for (n = avahi_dns_packet_get_field(p, AVAHI_DNS_FIELD_ANCOUNT); n > 0; n --) {
AvahiRecord *record;
int unique = 0;
-
+
if (!(record = avahi_dns_packet_consume_record(p, &unique))) {
avahi_log_warn(__FILE__": Packet too short or invalid while reading known answer record. (Maybe a UTF-8 problem?)");
goto fail;
}
-
+
avahi_response_scheduler_suppress(i->response_scheduler, record, a);
avahi_record_list_drop(s->record_list, record);
avahi_cache_stop_poof(i->cache, record, a);
-
+
avahi_record_unref(record);
}
-
+
/* Probe record */
for (n = avahi_dns_packet_get_field(p, AVAHI_DNS_FIELD_NSCOUNT); n > 0; n --) {
AvahiRecord *record;
int unique = 0;
-
+
if (!(record = avahi_dns_packet_consume_record(p, &unique))) {
avahi_log_warn(__FILE__": Packet too short or invalid while reading probe record. (Maybe a UTF-8 problem?)");
goto fail;
}
-
+
if (!avahi_key_is_pattern(record->key)) {
if (!from_local_iface)
reflect_probe(s, i, record);
incoming_probe(s, record, i);
}
-
+
avahi_record_unref(record);
}
}
@@ -642,14 +642,14 @@ static void handle_query_packet(AvahiServer *s, AvahiDnsPacket *p, AvahiInterfac
avahi_server_generate_response(s, i, p, a, port, legacy_unicast, is_probe);
return;
-
+
fail:
avahi_record_list_flush(s->record_list);
}
static void handle_response_packet(AvahiServer *s, AvahiDnsPacket *p, AvahiInterface *i, const AvahiAddress *a, int from_local_iface) {
unsigned n;
-
+
assert(s);
assert(p);
assert(i);
@@ -660,7 +660,7 @@ static void handle_response_packet(AvahiServer *s, AvahiDnsPacket *p, AvahiInter
AvahiRecord *record;
int cache_flush = 0;
/* char *txt; */
-
+
if (!(record = avahi_dns_packet_consume_record(p, &cache_flush))) {
avahi_log_warn(__FILE__": Packet too short or invalid while reading response record. (Maybe a UTF-8 problem?)");
break;
@@ -675,7 +675,7 @@ static void handle_response_packet(AvahiServer *s, AvahiDnsPacket *p, AvahiInter
avahi_response_scheduler_incoming(i->response_scheduler, record, cache_flush);
}
}
-
+
avahi_record_unref(record);
}
@@ -689,7 +689,7 @@ static void handle_response_packet(AvahiServer *s, AvahiDnsPacket *p, AvahiInter
static AvahiLegacyUnicastReflectSlot* allocate_slot(AvahiServer *s) {
unsigned n, idx = (unsigned) -1;
AvahiLegacyUnicastReflectSlot *slot;
-
+
assert(s);
if (!s->legacy_unicast_reflect_slots)
@@ -697,7 +697,7 @@ static AvahiLegacyUnicastReflectSlot* allocate_slot(AvahiServer *s) {
for (n = 0; n < AVAHI_LEGACY_UNICAST_REFLECT_SLOTS_MAX; n++, s->legacy_unicast_reflect_id++) {
idx = s->legacy_unicast_reflect_id % AVAHI_LEGACY_UNICAST_REFLECT_SLOTS_MAX;
-
+
if (!s->legacy_unicast_reflect_slots[idx])
break;
}
@@ -711,7 +711,7 @@ static AvahiLegacyUnicastReflectSlot* allocate_slot(AvahiServer *s) {
s->legacy_unicast_reflect_slots[idx] = slot;
slot->id = s->legacy_unicast_reflect_id++;
slot->server = s;
-
+
return slot;
}
@@ -726,7 +726,7 @@ static void deallocate_slot(AvahiServer *s, AvahiLegacyUnicastReflectSlot *slot)
assert(s->legacy_unicast_reflect_slots[idx] == slot);
avahi_time_event_free(slot->time_event);
-
+
avahi_free(slot);
s->legacy_unicast_reflect_slots[idx] = NULL;
}
@@ -748,12 +748,12 @@ static void free_slots(AvahiServer *s) {
static AvahiLegacyUnicastReflectSlot* find_slot(AvahiServer *s, uint16_t id) {
unsigned idx;
-
+
assert(s);
if (!s->legacy_unicast_reflect_slots)
return NULL;
-
+
idx = id % AVAHI_LEGACY_UNICAST_REFLECT_SLOTS_MAX;
if (!s->legacy_unicast_reflect_slots[idx] || s->legacy_unicast_reflect_slots[idx]->id != id)
@@ -782,7 +782,7 @@ static void reflect_legacy_unicast_query_packet(AvahiServer *s, AvahiDnsPacket *
assert(a);
assert(port > 0);
assert(i->protocol == a->proto);
-
+
if (!s->config.enable_reflector)
return;
@@ -810,7 +810,7 @@ static void reflect_legacy_unicast_query_packet(AvahiServer *s, AvahiDnsPacket *
/* Patch the packet with our new locally generatet id */
avahi_dns_packet_set_field(p, AVAHI_DNS_FIELD_ID, slot->id);
-
+
for (j = s->monitor->interfaces; j; j = j->interface_next)
if (j->announcing &&
j != i &&
@@ -833,14 +833,14 @@ static int originates_from_local_legacy_unicast_socket(AvahiServer *s, const Ava
if (!s->config.enable_reflector)
return 0;
-
+
if (!avahi_address_is_local(s->monitor, address))
return 0;
-
+
if (address->proto == AVAHI_PROTO_INET && s->fd_legacy_unicast_ipv4 >= 0) {
struct sockaddr_in lsa;
socklen_t l = sizeof(lsa);
-
+
if (getsockname(s->fd_legacy_unicast_ipv4, (struct sockaddr*) &lsa, &l) != 0)
avahi_log_warn("getsockname(): %s", strerror(errno));
else
@@ -884,7 +884,7 @@ static int originates_from_local_iface(AvahiServer *s, AvahiIfIndex iface, const
static void dispatch_packet(AvahiServer *s, AvahiDnsPacket *p, const AvahiAddress *src_address, uint16_t port, const AvahiAddress *dst_address, AvahiIfIndex iface, int ttl) {
AvahiInterface *i;
int from_local_iface = 0;
-
+
assert(s);
assert(p);
assert(src_address);
@@ -898,6 +898,12 @@ static void dispatch_packet(AvahiServer *s, AvahiDnsPacket *p, const AvahiAddres
return;
}
+ if (port <= 0) {
+ /* This fixes RHBZ #475394 */
+ avahi_log_warn("Received packet from invalid source port %u.", (unsigned) port);
+ return;
+ }
+
if (avahi_address_is_ipv4_in_ipv6(src_address))
/* This is an IPv4 address encapsulated in IPv6, so let's ignore it. */
return;
@@ -931,36 +937,40 @@ static void dispatch_packet(AvahiServer *s, AvahiDnsPacket *p, const AvahiAddres
avahi_log_warn("Invalid legacy unicast query packet.");
return;
}
-
+
legacy_unicast = 1;
}
if (legacy_unicast)
reflect_legacy_unicast_query_packet(s, p, i, src_address, port);
-
+
handle_query_packet(s, p, i, src_address, port, legacy_unicast, from_local_iface);
-
+
} else {
+ char t[AVAHI_ADDRESS_STR_MAX];
+
if (port != AVAHI_MDNS_PORT) {
- avahi_log_warn("Received response with invalid source port %u on interface '%s.%i'", port, i->hardware->name, i->protocol);
+ avahi_log_warn("Received response from host %s with invalid source port %u on interface '%s.%i'", avahi_address_snprint(t, sizeof(t), src_address), port, i->hardware->name, i->protocol);
return;
}
if (ttl != 255 && s->config.check_response_ttl) {
- avahi_log_warn("Received response with invalid TTL %u on interface '%s.%i'.", ttl, i->hardware->name, i->protocol);
+ avahi_log_warn("Received response from host %s with invalid TTL %u on interface '%s.%i'.", avahi_address_snprint(t, sizeof(t), src_address), ttl, i->hardware->name, i->protocol);
return;
}
if (!is_mdns_mcast_address(dst_address) &&
!avahi_interface_address_on_link(i, src_address)) {
- avahi_log_warn("Received non-local response on interface '%s.%i'.", i->hardware->name, i->protocol);
+
+ avahi_log_warn("Received non-local response from host %s on interface '%s.%i'.", avahi_address_snprint(t, sizeof(t), src_address), i->hardware->name, i->protocol);
return;
}
-
+
if (avahi_dns_packet_get_field(p, AVAHI_DNS_FIELD_QDCOUNT) != 0 ||
avahi_dns_packet_get_field(p, AVAHI_DNS_FIELD_ANCOUNT) == 0 ||
avahi_dns_packet_get_field(p, AVAHI_DNS_FIELD_NSCOUNT) != 0) {
- avahi_log_warn("Invalid response packet.");
+
+ avahi_log_warn("Invalid response packet from host %s.", avahi_address_snprint(t, sizeof(t), src_address));
return;
}
@@ -971,7 +981,7 @@ static void dispatch_packet(AvahiServer *s, AvahiDnsPacket *p, const AvahiAddres
static void dispatch_legacy_unicast_packet(AvahiServer *s, AvahiDnsPacket *p) {
AvahiInterface *j;
AvahiLegacyUnicastReflectSlot *slot;
-
+
assert(s);
assert(p);
@@ -1001,7 +1011,7 @@ static void dispatch_legacy_unicast_packet(AvahiServer *s, AvahiDnsPacket *p) {
static void cleanup_dead(AvahiServer *s) {
assert(s);
-
+
avahi_cleanup_dead_entries(s);
avahi_browser_cleanup(s);
}
@@ -1017,7 +1027,7 @@ static void mcast_socket_event(AvahiWatch *w, int fd, AvahiWatchEvent events, vo
assert(w);
assert(fd >= 0);
assert(events & AVAHI_WATCH_IN);
-
+
if (fd == s->fd_ipv4) {
dest.proto = src.proto = AVAHI_PROTO_INET;
p = avahi_recv_dns_packet_ipv4(s->fd_ipv4, &src.data.ipv4, &port, &dest.data.ipv4, &iface, &ttl);
@@ -1026,11 +1036,11 @@ static void mcast_socket_event(AvahiWatch *w, int fd, AvahiWatchEvent events, vo
dest.proto = src.proto = AVAHI_PROTO_INET6;
p = avahi_recv_dns_packet_ipv6(s->fd_ipv6, &src.data.ipv6, &port, &dest.data.ipv6, &iface, &ttl);
}
-
+
if (p) {
- if (iface == AVAHI_IF_UNSPEC)
+ if (iface == AVAHI_IF_UNSPEC)
iface = avahi_find_interface_for_address(s->monitor, &dest);
-
+
if (iface != AVAHI_IF_UNSPEC)
dispatch_packet(s, p, &src, port, &dest, iface, ttl);
else
@@ -1049,7 +1059,7 @@ static void legacy_unicast_socket_event(AvahiWatch *w, int fd, AvahiWatchEvent e
assert(w);
assert(fd >= 0);
assert(events & AVAHI_WATCH_IN);
-
+
if (fd == s->fd_legacy_unicast_ipv4)
p = avahi_recv_dns_packet_ipv4(s->fd_legacy_unicast_ipv4, NULL, NULL, NULL, NULL, NULL);
else {
@@ -1070,11 +1080,11 @@ static void server_set_state(AvahiServer *s, AvahiServerState state) {
if (s->state == state)
return;
-
+
s->state = state;
avahi_interface_monitor_update_rrs(s->monitor, 0);
-
+
if (s->callback)
s->callback(s, state, s->userdata);
}
@@ -1094,7 +1104,7 @@ static void withdraw_host_rrs(AvahiServer *s) {
void avahi_server_decrease_host_rr_pending(AvahiServer *s) {
assert(s);
-
+
assert(s->n_host_rr_pending > 0);
if (--s->n_host_rr_pending == 0)
@@ -1108,12 +1118,12 @@ void avahi_host_rr_entry_group_callback(AvahiServer *s, AvahiSEntryGroup *g, Ava
if (state == AVAHI_ENTRY_GROUP_REGISTERING &&
s->state == AVAHI_SERVER_REGISTERING)
s->n_host_rr_pending ++;
-
+
else if (state == AVAHI_ENTRY_GROUP_COLLISION &&
(s->state == AVAHI_SERVER_REGISTERING || s->state == AVAHI_SERVER_RUNNING)) {
withdraw_host_rrs(s);
server_set_state(s, AVAHI_SERVER_COLLISION);
-
+
} else if (state == AVAHI_ENTRY_GROUP_ESTABLISHED &&
s->state == AVAHI_SERVER_REGISTERING)
avahi_server_decrease_host_rr_pending(s);
@@ -1122,9 +1132,9 @@ void avahi_host_rr_entry_group_callback(AvahiServer *s, AvahiSEntryGroup *g, Ava
static void register_hinfo(AvahiServer *s) {
struct utsname utsname;
AvahiRecord *r;
-
+
assert(s);
-
+
if (!s->config.publish_hinfo)
return;
@@ -1137,19 +1147,19 @@ static void register_hinfo(AvahiServer *s) {
avahi_log_warn("Failed to create HINFO entry group: %s", avahi_strerror(s->error));
return;
}
-
+
/* Fill in HINFO rr */
if ((r = avahi_record_new_full(s->host_name_fqdn, AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_HINFO, AVAHI_DEFAULT_TTL_HOST_NAME))) {
if (uname(&utsname) < 0)
avahi_log_warn("uname() failed: %s\n", avahi_strerror(errno));
else {
-
+
r->data.hinfo.cpu = avahi_strdup(avahi_strup(utsname.machine));
r->data.hinfo.os = avahi_strdup(avahi_strup(utsname.sysname));
-
+
avahi_log_info("Registering HINFO record with values '%s'/'%s'.", r->data.hinfo.cpu, r->data.hinfo.os);
-
+
if (avahi_server_add(s, s->hinfo_entry_group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, AVAHI_PUBLISH_UNIQUE, r) < 0) {
avahi_log_warn("Failed to add HINFO RR: %s", avahi_strerror(s->error));
return;
@@ -1167,7 +1177,7 @@ static void register_hinfo(AvahiServer *s) {
static void register_localhost(AvahiServer *s) {
AvahiAddress a;
assert(s);
-
+
/* Add localhost entries */
avahi_address_parse("127.0.0.1", AVAHI_PROTO_INET, &a);
avahi_server_add_address(s, NULL, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, AVAHI_PUBLISH_NO_PROBE|AVAHI_PUBLISH_NO_ANNOUNCE, "localhost", &a);
@@ -1194,7 +1204,7 @@ static void register_browse_domain(AvahiServer *s) {
avahi_log_warn("Failed to create browse domain entry group: %s", avahi_strerror(s->error));
return;
}
-
+
if (avahi_server_add_ptr(s, s->browse_domain_entry_group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, AVAHI_DEFAULT_TTL, "b._dns-sd._udp.local", s->domain_name) < 0) {
avahi_log_warn("Failed to add browse domain RR: %s", avahi_strerror(s->error));
return;
@@ -1215,14 +1225,14 @@ static void register_stuff(AvahiServer *s) {
avahi_interface_monitor_update_rrs(s->monitor, 0);
s->n_host_rr_pending --;
-
+
if (s->n_host_rr_pending == 0)
server_set_state(s, AVAHI_SERVER_RUNNING);
}
static void update_fqdn(AvahiServer *s) {
char *n;
-
+
assert(s);
assert(s->host_name);
assert(s->domain_name);
@@ -1237,7 +1247,7 @@ static void update_fqdn(AvahiServer *s) {
int avahi_server_set_host_name(AvahiServer *s, const char *host_name) {
char *hn = NULL;
assert(s);
-
+
AVAHI_CHECK_VALIDITY(s, !host_name || avahi_is_valid_host_name(host_name), AVAHI_ERR_INVALID_HOST_NAME);
if (!host_name) {
@@ -1250,12 +1260,12 @@ int avahi_server_set_host_name(AvahiServer *s, const char *host_name) {
avahi_free(hn);
return avahi_server_set_errno(s, AVAHI_ERR_NO_CHANGE);
}
-
+
withdraw_host_rrs(s);
avahi_free(s->host_name);
s->host_name = hn ? hn : avahi_strdup(host_name);
-
+
update_fqdn(s);
register_stuff(s);
@@ -1272,7 +1282,7 @@ int avahi_server_set_domain_name(AvahiServer *s, const char *domain_name) {
dn = avahi_strdup("local");
domain_name = dn;
}
-
+
if (avahi_domain_equal(s->domain_name, domain_name)) {
avahi_free(dn);
return avahi_server_set_errno(s, AVAHI_ERR_NO_CHANGE);
@@ -1297,10 +1307,10 @@ static int valid_server_config(const AvahiServerConfig *sc) {
if (sc->n_wide_area_servers > AVAHI_WIDE_AREA_SERVERS_MAX)
return AVAHI_ERR_INVALID_CONFIG;
-
+
if (sc->host_name && !avahi_is_valid_host_name(sc->host_name))
return AVAHI_ERR_INVALID_HOST_NAME;
-
+
if (sc->domain_name && !avahi_is_valid_domain_name(sc->domain_name))
return AVAHI_ERR_INVALID_DOMAIN_NAME;
@@ -1313,10 +1323,10 @@ static int valid_server_config(const AvahiServerConfig *sc) {
static int setup_sockets(AvahiServer *s) {
assert(s);
-
+
s->fd_ipv4 = s->config.use_ipv4 ? avahi_open_socket_ipv4(s->config.disallow_other_stacks) : -1;
s->fd_ipv6 = s->config.use_ipv6 ? avahi_open_socket_ipv6(s->config.disallow_other_stacks) : -1;
-
+
if (s->fd_ipv6 < 0 && s->fd_ipv4 < 0)
return AVAHI_ERR_NO_NETWORK;
@@ -1327,35 +1337,35 @@ static int setup_sockets(AvahiServer *s) {
s->fd_legacy_unicast_ipv4 = s->fd_ipv4 >= 0 && s->config.enable_reflector ? avahi_open_unicast_socket_ipv4() : -1;
s->fd_legacy_unicast_ipv6 = s->fd_ipv6 >= 0 && s->config.enable_reflector ? avahi_open_unicast_socket_ipv6() : -1;
-
+
s->watch_ipv4 =
s->watch_ipv6 =
s->watch_legacy_unicast_ipv4 =
s->watch_legacy_unicast_ipv6 = NULL;
-
+
if (s->fd_ipv4 >= 0)
s->watch_ipv4 = s->poll_api->watch_new(s->poll_api, s->fd_ipv4, AVAHI_WATCH_IN, mcast_socket_event, s);
if (s->fd_ipv6 >= 0)
s->watch_ipv6 = s->poll_api->watch_new(s->poll_api, s->fd_ipv6, AVAHI_WATCH_IN, mcast_socket_event, s);
-
+
if (s->fd_legacy_unicast_ipv4 >= 0)
s->watch_legacy_unicast_ipv4 = s->poll_api->watch_new(s->poll_api, s->fd_legacy_unicast_ipv4, AVAHI_WATCH_IN, legacy_unicast_socket_event, s);
if (s->fd_legacy_unicast_ipv6 >= 0)
s->watch_legacy_unicast_ipv6 = s->poll_api->watch_new(s->poll_api, s->fd_legacy_unicast_ipv6, AVAHI_WATCH_IN, legacy_unicast_socket_event, s);
-
+
return 0;
}
AvahiServer *avahi_server_new(const AvahiPoll *poll_api, const AvahiServerConfig *sc, AvahiServerCallback callback, void* userdata, int *error) {
AvahiServer *s;
int e;
-
+
if (sc && (e = valid_server_config(sc)) < 0) {
if (error)
*error = e;
return NULL;
}
-
+
if (!(s = avahi_new(AvahiServer, 1))) {
if (error)
*error = AVAHI_ERR_NO_MEMORY;
@@ -1376,10 +1386,10 @@ AvahiServer *avahi_server_new(const AvahiPoll *poll_api, const AvahiServerConfig
avahi_server_config_free(&s->config);
avahi_free(s);
-
+
return NULL;
}
-
+
s->n_host_rr_pending = 0;
s->need_entry_cleanup = 0;
s->need_group_cleanup = 0;
@@ -1412,7 +1422,7 @@ AvahiServer *avahi_server_new(const AvahiPoll *poll_api, const AvahiServerConfig
s->legacy_unicast_reflect_id = 0;
s->record_list = avahi_record_list_new();
-
+
/* Get host name */
s->host_name = s->config.host_name ? avahi_normalize_name_strdup(s->config.host_name) : avahi_get_host_name_strdup();
s->host_name[strcspn(s->host_name, ".")] = 0;
@@ -1431,13 +1441,13 @@ AvahiServer *avahi_server_new(const AvahiPoll *poll_api, const AvahiServerConfig
s->wide_area_lookup_engine = NULL;
s->multicast_lookup_engine = avahi_multicast_lookup_engine_new(s);
-
+
s->monitor = avahi_interface_monitor_new(s);
avahi_interface_monitor_sync(s->monitor);
register_localhost(s);
register_stuff(s);
-
+
return s;
}
@@ -1462,7 +1472,7 @@ void avahi_server_free(AvahiServer* s) {
avahi_s_service_resolver_free(s->service_resolvers);
while (s->record_browsers)
avahi_s_record_browser_destroy(s->record_browsers);
-
+
/* Remove all locally rgeistered stuff */
while(s->entries)
@@ -1484,33 +1494,33 @@ void avahi_server_free(AvahiServer* s) {
avahi_multicast_lookup_engine_free(s->multicast_lookup_engine);
avahi_time_event_queue_free(s->time_event_queue);
-
+
/* Free watches */
-
+
if (s->watch_ipv4)
s->poll_api->watch_free(s->watch_ipv4);
if (s->watch_ipv6)
s->poll_api->watch_free(s->watch_ipv6);
-
+
if (s->watch_legacy_unicast_ipv4)
s->poll_api->watch_free(s->watch_legacy_unicast_ipv4);
if (s->watch_legacy_unicast_ipv6)
s->poll_api->watch_free(s->watch_legacy_unicast_ipv6);
/* Free sockets */
-
+
if (s->fd_ipv4 >= 0)
close(s->fd_ipv4);
if (s->fd_ipv6 >= 0)
close(s->fd_ipv6);
-
+
if (s->fd_legacy_unicast_ipv4 >= 0)
close(s->fd_legacy_unicast_ipv4);
if (s->fd_legacy_unicast_ipv6 >= 0)
close(s->fd_legacy_unicast_ipv6);
-
+
/* Free other stuff */
-
+
avahi_free(s->host_name);
avahi_free(s->domain_name);
avahi_free(s->host_name_fqdn);
@@ -1562,6 +1572,8 @@ AvahiServerConfig* avahi_server_config_init(AvahiServerConfig *c) {
memset(c, 0, sizeof(AvahiServerConfig));
c->use_ipv6 = 1;
c->use_ipv4 = 1;
+ c->allow_interfaces = NULL;
+ c->deny_interfaces = NULL;
c->host_name = NULL;
c->domain_name = NULL;
c->check_response_ttl = 0;
@@ -1581,7 +1593,7 @@ AvahiServerConfig* avahi_server_config_init(AvahiServerConfig *c) {
c->allow_point_to_point = 0;
c->publish_aaaa_on_ipv4 = 1;
c->publish_a_on_ipv6 = 0;
-
+
return c;
}
@@ -1591,11 +1603,13 @@ void avahi_server_config_free(AvahiServerConfig *c) {
avahi_free(c->host_name);
avahi_free(c->domain_name);
avahi_string_list_free(c->browse_domains);
+ avahi_string_list_free(c->allow_interfaces);
+ avahi_string_list_free(c->deny_interfaces);
}
AvahiServerConfig* avahi_server_config_copy(AvahiServerConfig *ret, const AvahiServerConfig *c) {
char *d = NULL, *h = NULL;
- AvahiStringList *l = NULL;
+ AvahiStringList *browse = NULL, *allow = NULL, *deny = NULL;
assert(ret);
assert(c);
@@ -1609,23 +1623,40 @@ AvahiServerConfig* avahi_server_config_copy(AvahiServerConfig *ret, const AvahiS
return NULL;
}
- if (!(l = avahi_string_list_copy(c->browse_domains)) && c->browse_domains) {
+ if (!(browse = avahi_string_list_copy(c->browse_domains)) && c->browse_domains) {
+ avahi_free(h);
+ avahi_free(d);
+ return NULL;
+ }
+
+ if (!(allow = avahi_string_list_copy(c->allow_interfaces)) && c->allow_interfaces) {
+ avahi_string_list_free(browse);
+ avahi_free(h);
+ avahi_free(d);
+ return NULL;
+ }
+
+ if (!(deny = avahi_string_list_copy(c->deny_interfaces)) && c->deny_interfaces) {
+ avahi_string_list_free(allow);
+ avahi_string_list_free(browse);
avahi_free(h);
avahi_free(d);
return NULL;
}
-
+
*ret = *c;
ret->host_name = h;
ret->domain_name = d;
- ret->browse_domains = l;
+ ret->browse_domains = browse;
+ ret->allow_interfaces = allow;
+ ret->deny_interfaces = deny;
return ret;
}
int avahi_server_errno(AvahiServer *s) {
assert(s);
-
+
return s->error;
}
@@ -1644,7 +1675,7 @@ uint32_t avahi_server_get_local_service_cookie(AvahiServer *s) {
static AvahiEntry *find_entry(AvahiServer *s, AvahiIfIndex interface, AvahiProtocol protocol, AvahiKey *key) {
AvahiEntry *e;
-
+
assert(s);
assert(key);
@@ -1664,7 +1695,7 @@ int avahi_server_get_group_of_service(AvahiServer *s, AvahiIfIndex interface, Av
AvahiEntry *e;
int ret;
char n[AVAHI_DOMAIN_NAME_MAX];
-
+
assert(s);
assert(name);
assert(type);
@@ -1678,7 +1709,7 @@ int avahi_server_get_group_of_service(AvahiServer *s, AvahiIfIndex interface, Av
if ((ret = avahi_service_name_join(n, sizeof(n), name, type, domain) < 0))
return avahi_server_set_errno(s, ret);
-
+
if (!(key = avahi_key_new(n, AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_SRV)))
return avahi_server_set_errno(s, AVAHI_ERR_NO_MEMORY);
@@ -1702,7 +1733,7 @@ int avahi_server_is_service_local(AvahiServer *s, AvahiIfIndex interface, AvahiP
if (!s->host_name_fqdn)
return 0;
-
+
if (!(key = avahi_key_new(name, AVAHI_DNS_CLASS_IN, AVAHI_DNS_TYPE_SRV)))
return 0;
@@ -1711,7 +1742,7 @@ int avahi_server_is_service_local(AvahiServer *s, AvahiIfIndex interface, AvahiP
if (!e)
return 0;
-
+
return avahi_domain_equal(s->host_name_fqdn, e->record->data.srv.name);
}
@@ -1720,7 +1751,7 @@ int avahi_server_is_record_local(AvahiServer *s, AvahiIfIndex interface, AvahiPr
assert(s);
assert(record);
-
+
for (e = avahi_hashmap_lookup(s->entries_by_key, record->key); e; e = e->by_key_next)
if ((e->interface == interface || e->interface <= 0 || interface <= 0) &&
@@ -1752,13 +1783,13 @@ const AvahiServerConfig* avahi_server_get_config(AvahiServer *s) {
/** Set the browsing domains */
int avahi_server_set_browse_domains(AvahiServer *s, AvahiStringList *domains) {
AvahiStringList *l;
-
+
assert(s);
for (l = s->config.browse_domains; l; l = l->next)
if (!avahi_is_valid_domain_name((char*) l->text))
return avahi_server_set_errno(s, AVAHI_ERR_INVALID_DOMAIN_NAME);
-
+
avahi_string_list_free(s->config.browse_domains);
s->config.browse_domains = avahi_string_list_copy(domains);
diff --git a/avahi-daemon/Makefile.am b/avahi-daemon/Makefile.am
index 622b4de..0aac0fc 100644
--- a/avahi-daemon/Makefile.am
+++ b/avahi-daemon/Makefile.am
@@ -53,8 +53,7 @@ avahi_daemon_SOURCES = \
static-hosts.c static-hosts.h \
ini-file-parser.c ini-file-parser.h \
setproctitle.c setproctitle.h \
- ../avahi-client/check-nss.c \
- inotify-nosys.h
+ ../avahi-client/check-nss.c
avahi_daemon_CFLAGS = $(AM_CFLAGS) $(LIBDAEMON_CFLAGS) $(XML_CFLAGS)
avahi_daemon_LDADD = $(AM_LDADD) ../avahi-common/libavahi-common.la ../avahi-core/libavahi-core.la $(LIBDAEMON_LIBS) $(XML_LIBS)
diff --git a/avahi-daemon/avahi-daemon.conf b/avahi-daemon/avahi-daemon.conf
index 69df050..ad69c73 100644
--- a/avahi-daemon/avahi-daemon.conf
+++ b/avahi-daemon/avahi-daemon.conf
@@ -26,6 +26,8 @@
browse-domains=0pointer.de, zeroconf.org
use-ipv4=yes
use-ipv6=no
+#allow-interfaces=eth0
+#deny-interfaces=eth1
#check-response-ttl=no
#use-iff-running=no
#enable-dbus=yes
diff --git a/avahi-daemon/inotify-nosys.h b/avahi-daemon/inotify-nosys.h
deleted file mode 100644
index 6af44dc..0000000
--- a/avahi-daemon/inotify-nosys.h
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * This header is used if <sys/inotify.h> cannot be found.
- *
- * Inode based directory notification for Linux
- *
- * Copyright (C) 2005 John McCutchan
- */
-
-#ifndef _LINUX_INOTIFY_H
-#define _LINUX_INOTIFY_H
-
-#include <stdint.h>
-#include <sys/syscall.h>
-#include <unistd.h>
-#include <asm/unistd.h>
-
-/*
- * struct inotify_event - structure read from the inotify device for each event
- *
- * When you are watching a directory, you will receive the filename for events
- * such as IN_CREATE, IN_DELETE, IN_OPEN, IN_CLOSE, ..., relative to the wd.
- */
-struct inotify_event {
- int wd; /* watch descriptor */
- uint32_t mask; /* watch mask */
- uint32_t cookie; /* cookie to synchronize two events */
- uint32_t len; /* length (including nulls) of name */
- char name __flexarr; /* stub for possible name */
-};
-
-/* the following are legal, implemented events that user-space can watch for */
-#define IN_ACCESS 0x00000001 /* File was accessed */
-#define IN_MODIFY 0x00000002 /* File was modified */
-#define IN_ATTRIB 0x00000004 /* Metadata changed */
-#define IN_CLOSE_WRITE 0x00000008 /* Writtable file was closed */
-#define IN_CLOSE_NOWRITE 0x00000010 /* Unwrittable file closed */
-#define IN_OPEN 0x00000020 /* File was opened */
-#define IN_MOVED_FROM 0x00000040 /* File was moved from X */
-#define IN_MOVED_TO 0x00000080 /* File was moved to Y */
-#define IN_CREATE 0x00000100 /* Subfile was created */
-#define IN_DELETE 0x00000200 /* Subfile was deleted */
-#define IN_DELETE_SELF 0x00000400 /* Self was deleted */
-#define IN_MOVE_SELF 0x00000800 /* Self was moved */
-
-/* the following are legal events. they are sent as needed to any watch */
-#define IN_UNMOUNT 0x00002000 /* Backing fs was unmounted */
-#define IN_Q_OVERFLOW 0x00004000 /* Event queued overflowed */
-#define IN_IGNORED 0x00008000 /* File was ignored */
-
-/* helper events */
-#define IN_CLOSE (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* close */
-#define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO) /* moves */
-
-/* special flags */
-#define IN_ONLYDIR 0x01000000 /* only watch the path if it is a directory */
-#define IN_DONT_FOLLOW 0x02000000 /* don't follow a sym link */
-#define IN_MASK_ADD 0x20000000 /* add to the mask of an already existing watch */
-#define IN_ISDIR 0x40000000 /* event occurred against dir */
-#define IN_ONESHOT 0x80000000 /* only send event once */
-
-/*
- * All of the events - we build the list by hand so that we can add flags in
- * the future and not break backward compatibility. Apps will get only the
- * events that they originally wanted. Be sure to add new events here!
- */
-#define IN_ALL_EVENTS (IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE | \
- IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM | \
- IN_MOVED_TO | IN_DELETE | IN_CREATE | IN_DELETE_SELF | \
- IN_MOVE_SELF)
-
-#if 0
-#if defined (__alpha__)
-# define __NR_inotify_init 444
-# define __NR_inotify_add_watch 445
-# define __NR_inotify_rm_watch 446
-
-#elif defined (__arm__)
-# define __NR_inotify_init (__NR_SYSCALL_BASE+316)
-# define __NR_inotify_add_watch (__NR_SYSCALL_BASE+317)
-# define __NR_inotify_rm_watch (__NR_SYSCALL_BASE+318)
-
-#elif defined (__frv__)
-# define __NR_inotify_init 291
-# define __NR_inotify_add_watch 292
-# define __NR_inotify_rm_watch 293
-
-#elif defined(__i386__)
-# define __NR_inotify_init 291
-# define __NR_inotify_add_watch 292
-# define __NR_inotify_rm_watch 293
-
-#elif defined (__ia64__)
-# define __NR_inotify_init 1277
-# define __NR_inotify_add_watch 1278
-# define __NR_inotify_rm_watch 1279
-
-#elif defined (__mips__)
-# if _MIPS_SIM == _MIPS_SIM_ABI32
-# define __NR_inotify_init (__NR_Linux + 284)
-# define __NR_inotify_add_watch (__NR_Linux + 285)
-# define __NR_inotify_rm_watch (__NR_Linux + 286)
-# endif
-# if _MIPS_SIM == _MIPS_SIM_ABI64
-# define __NR_inotify_init (__NR_Linux + 243)
-# define __NR_inotify_add_watch (__NR_Linux + 243)
-# define __NR_inotify_rm_watch (__NR_Linux + 243)
-# endif
-# if _MIPS_SIM == _MIPS_SIM_NABI32
-# define __NR_inotify_init (__NR_Linux + 247)
-# define __NR_inotify_add_watch (__NR_Linux + 248)
-# define __NR_inotify_rm_watch (__NR_Linux + 249)
-# endif
-
-#elif defined(__parisc__)
-# define __NR_inotify_init (__NR_Linux + 269)
-# define __NR_inotify_add_watch (__NR_Linux + 270)
-# define __NR_inotify_rm_watch (__NR_Linux + 271)
-
-#elif defined(__powerpc__) || defined(__powerpc64__)
-# define __NR_inotify_init 275
-# define __NR_inotify_add_watch 276
-# define __NR_inotify_rm_watch 277
-
-#elif defined (__s390__)
-# define __NR_inotify_init 284
-# define __NR_inotify_add_watch 285
-# define __NR_inotify_rm_watch 286
-
-#elif defined (__sh__)
-# define __NR_inotify_init 290
-# define __NR_inotify_add_watch 291
-# define __NR_inotify_rm_watch 292
-
-#elif defined (__sh64__)
-# define __NR_inotify_init 318
-# define __NR_inotify_add_watch 319
-# define __NR_inotify_rm_watch 320
-
-#elif defined (__sparc__) || defined (__sparc64__)
-# define __NR_inotify_init 151
-# define __NR_inotify_add_watch 152
-# define __NR_inotify_rm_watch 156
-
-#elif defined(__x86_64__)
-# define __NR_inotify_init 253
-# define __NR_inotify_add_watch 254
-# define __NR_inotify_rm_watch 255
-
-#else
-# error "Unsupported architecture!"
-#endif
-#endif
-
-#ifndef __NR_inotify_init
-# error "Unsupported architecture!"
-#endif
-#ifndef __NR_inotify_add_watch
-# error "Unsupported architecture!"
-#endif
-#ifndef __NR_inotify_rm_watch
-# error "Unsupported architecture!"
-#endif
-
-
-static inline int inotify_init (void)
-{
- return syscall (__NR_inotify_init);
-}
-
-static inline int inotify_add_watch (int fd, const char *name, uint32_t mask)
-{
- return syscall (__NR_inotify_add_watch, fd, name, mask);
-}
-
-static inline int inotify_rm_watch (int fd, uint32_t wd)
-{
- return syscall (__NR_inotify_rm_watch, fd, wd);
-}
-
-
-#endif /* _LINUX_INOTIFY_H */
diff --git a/avahi-daemon/main.c b/avahi-daemon/main.c
index d8f9aa6..c3cbb0e 100644
--- a/avahi-daemon/main.c
+++ b/avahi-daemon/main.c
@@ -2,17 +2,17 @@
/***
This file is part of avahi.
-
+
avahi is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
-
+
avahi is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
Public License for more details.
-
+
You should have received a copy of the GNU Lesser General Public
License along with avahi; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
@@ -43,11 +43,7 @@
#include <sys/socket.h>
#ifdef HAVE_INOTIFY
-#ifdef HAVE_SYS_INOTIFY_H
#include <sys/inotify.h>
-#else
-#include "inotify-nosys.h"
-#endif
#endif
#ifdef HAVE_KQUEUE
@@ -148,7 +144,7 @@ static int has_prefix(const char *s, const char *prefix) {
size_t l;
l = strlen(prefix);
-
+
return strlen(s) >= l && strncmp(s, prefix, l) == 0;
}
@@ -156,19 +152,19 @@ static int load_resolv_conf(void) {
int ret = -1;
FILE *f;
int i = 0, j = 0;
-
+
avahi_strfreev(resolv_conf_name_servers);
resolv_conf_name_servers = NULL;
avahi_strfreev(resolv_conf_search_domains);
resolv_conf_search_domains = NULL;
-
+
#ifdef ENABLE_CHROOT
f = avahi_chroot_helper_get_file(RESOLV_CONF);
#else
f = fopen(RESOLV_CONF, "r");
#endif
-
+
if (!f) {
avahi_log_warn("Failed to open "RESOLV_CONF": %s", strerror(errno));
goto finish;
@@ -223,7 +219,7 @@ finish:
if (ret != 0) {
avahi_strfreev(resolv_conf_name_servers);
resolv_conf_name_servers = NULL;
-
+
avahi_strfreev(resolv_conf_search_domains);
resolv_conf_search_domains = NULL;
}
@@ -240,14 +236,14 @@ static AvahiSEntryGroup* add_dns_servers(AvahiServer *s, AvahiSEntryGroup* g, ch
assert(s);
assert(l);
- if (!g)
+ if (!g)
g = avahi_s_entry_group_new(s, NULL, NULL);
assert(avahi_s_entry_group_is_empty(g));
for (p = l; *p; p++) {
AvahiAddress a;
-
+
if (!avahi_address_parse(*p, AVAHI_PROTO_UNSPEC, &a))
avahi_log_warn("Failed to parse address '%s', ignoring.", *p);
else
@@ -267,8 +263,8 @@ static void remove_dns_server_entry_groups(void) {
if (resolv_conf_entry_group)
avahi_s_entry_group_reset(resolv_conf_entry_group);
-
- if (dns_servers_entry_group)
+
+ if (dns_servers_entry_group)
avahi_s_entry_group_reset(dns_servers_entry_group);
}
@@ -297,10 +293,10 @@ static AvahiStringList *filter_duplicate_domains(AvahiStringList *l) {
if (!l)
return l;
-
+
for (p = l, e = l->next; e; e = n) {
n = e->next;
-
+
if (avahi_domain_equal((char*) e->text, (char*) l->text)) {
p->next = e->next;
avahi_free(e);
@@ -323,7 +319,7 @@ static void update_browse_domains(void) {
}
l = avahi_string_list_copy(config.server_config.browse_domains);
-
+
for (p = resolv_conf_search_domains, n = 0; *p && n < BROWSE_DOMAINS_MAX; p++, n++) {
if (!avahi_is_valid_domain_name(*p))
avahi_log_warn("'%s' is no valid domain name, ignoring.", *p);
@@ -332,13 +328,13 @@ static void update_browse_domains(void) {
}
l = filter_duplicate_domains(l);
-
+
avahi_server_set_browse_domains(avahi_server, l);
}
static void server_callback(AvahiServer *s, AvahiServerState state, void *userdata) {
DaemonConfig *c = userdata;
-
+
assert(s);
assert(c);
@@ -346,7 +342,7 @@ static void server_callback(AvahiServer *s, AvahiServerState state, void *userda
* avahi_server has been set, therefore we do it explicitly */
avahi_server = s;
-
+
#ifdef HAVE_DBUS
if (c->enable_dbus && state != AVAHI_SERVER_INVALID && state != AVAHI_SERVER_FAILURE)
dbus_protocol_server_state_changed(state);
@@ -355,28 +351,28 @@ static void server_callback(AvahiServer *s, AvahiServerState state, void *userda
switch (state) {
case AVAHI_SERVER_RUNNING:
avahi_log_info("Server startup complete. Host name is %s. Local service cookie is %u.", avahi_server_get_host_name_fqdn(s), avahi_server_get_local_service_cookie(s));
-
+
avahi_set_proc_title(argv0, "%s: running [%s]", argv0, avahi_server_get_host_name_fqdn(s));
-
+
static_service_add_to_server();
static_hosts_add_to_server();
-
+
remove_dns_server_entry_groups();
-
+
if (c->publish_resolv_conf && resolv_conf_name_servers && resolv_conf_name_servers[0])
resolv_conf_entry_group = add_dns_servers(s, resolv_conf_entry_group, resolv_conf_name_servers);
-
+
if (c->publish_dns_servers && c->publish_dns_servers[0])
dns_servers_entry_group = add_dns_servers(s, dns_servers_entry_group, c->publish_dns_servers);
-
+
simple_protocol_restart_queries();
break;
-
+
case AVAHI_SERVER_COLLISION: {
char *n;
-
+
avahi_set_proc_title(argv0, "%s: collision", argv0);
-
+
static_service_remove_from_server();
static_hosts_remove_from_server();
remove_dns_server_entry_groups();
@@ -398,16 +394,16 @@ static void server_callback(AvahiServer *s, AvahiServerState state, void *userda
case AVAHI_SERVER_REGISTERING:
avahi_set_proc_title(argv0, "%s: registering [%s]", argv0, avahi_server_get_host_name_fqdn(s));
-
+
static_service_remove_from_server();
static_hosts_remove_from_server();
remove_dns_server_entry_groups();
-
+
break;
case AVAHI_SERVER_INVALID:
break;
-
+
}
}
@@ -425,9 +421,9 @@ static void help(FILE *f) {
" "AVAHI_CONFIG_FILE"\n"
" --no-rlimits Don't enforce resource limits\n"
" --no-drop-root Don't drop privileges\n"
-#ifdef ENABLE_CHROOT
+#ifdef ENABLE_CHROOT
" --no-chroot Don't chroot()\n"
-#endif
+#endif
" --no-proc-title Don't modify process title\n"
" --debug Increase verbosity\n",
argv0);
@@ -440,13 +436,13 @@ static int parse_command_line(DaemonConfig *c, int argc, char *argv[]) {
enum {
OPTION_NO_RLIMITS = 256,
OPTION_NO_DROP_ROOT,
-#ifdef ENABLE_CHROOT
+#ifdef ENABLE_CHROOT
OPTION_NO_CHROOT,
#endif
OPTION_NO_PROC_TITLE,
OPTION_DEBUG
};
-
+
static const struct option long_options[] = {
{ "help", no_argument, NULL, 'h' },
{ "daemonize", no_argument, NULL, 'D' },
@@ -522,13 +518,13 @@ static int parse_command_line(DaemonConfig *c, int argc, char *argv[]) {
fprintf(stderr, "Too many arguments\n");
return -1;
}
-
+
return 0;
}
static int is_yes(const char *s) {
assert(s);
-
+
return *s == 'y' || *s == 'Y' || *s == '1' || *s == 't' || *s == 'T';
}
@@ -541,9 +537,9 @@ static int load_config_file(DaemonConfig *c) {
if (!(f = avahi_ini_file_load(c->config_file ? c->config_file : AVAHI_CONFIG_FILE)))
goto finish;
-
+
for (g = f->groups; g; g = g->groups_next) {
-
+
if (strcasecmp(g->name, "server") == 0) {
AvahiIniFilePair *p;
@@ -559,7 +555,7 @@ static int load_config_file(DaemonConfig *c) {
char **e, **t;
e = avahi_split_csv(p->value);
-
+
for (t = e; *t; t++) {
char cleaned[AVAHI_DOMAIN_NAME_MAX];
@@ -571,7 +567,7 @@ static int load_config_file(DaemonConfig *c) {
c->server_config.browse_domains = avahi_string_list_add(c->server_config.browse_domains, cleaned);
}
-
+
avahi_strfreev(e);
c->server_config.browse_domains = filter_duplicate_domains(c->server_config.browse_domains);
@@ -601,17 +597,39 @@ static int load_config_file(DaemonConfig *c) {
}
}
#endif
- else {
+ else if (strcasecmp(p->key, "allow-interfaces") == 0) {
+ char **e, **t;
+
+ avahi_string_list_free(c->server_config.allow_interfaces);
+ c->server_config.allow_interfaces = NULL;
+ e = avahi_split_csv(p->value);
+
+ for (t = e; *t; t++)
+ c->server_config.allow_interfaces = avahi_string_list_add(c->server_config.allow_interfaces, *t);
+
+ avahi_strfreev(e);
+ } else if (strcasecmp(p->key, "deny-interfaces") == 0) {
+ char **e, **t;
+
+ avahi_string_list_free(c->server_config.deny_interfaces);
+ c->server_config.deny_interfaces = NULL;
+ e = avahi_split_csv(p->value);
+
+ for (t = e; *t; t++)
+ c->server_config.deny_interfaces = avahi_string_list_add(c->server_config.deny_interfaces, *t);
+
+ avahi_strfreev(e);
+ } else {
avahi_log_error("Invalid configuration key \"%s\" in group \"%s\"\n", p->key, g->name);
goto finish;
}
}
-
+
} else if (strcasecmp(g->name, "publish") == 0) {
AvahiIniFilePair *p;
for (p = g->pairs; p; p = p->pairs_next) {
-
+
if (strcasecmp(p->key, "publish-addresses") == 0)
c->server_config.publish_addresses = is_yes(p->value);
else if (strcasecmp(p->key, "publish-hinfo") == 0)
@@ -645,7 +663,7 @@ static int load_config_file(DaemonConfig *c) {
AvahiIniFilePair *p;
for (p = g->pairs; p; p = p->pairs_next) {
-
+
if (strcasecmp(p->key, "enable-wide-area") == 0)
c->server_config.enable_wide_area = is_yes(p->value);
else {
@@ -653,12 +671,12 @@ static int load_config_file(DaemonConfig *c) {
goto finish;
}
}
-
+
} else if (strcasecmp(g->name, "reflector") == 0) {
AvahiIniFilePair *p;
for (p = g->pairs; p; p = p->pairs_next) {
-
+
if (strcasecmp(p->key, "enable-reflector") == 0)
c->server_config.enable_reflector = is_yes(p->value);
else if (strcasecmp(p->key, "reflect-ipv") == 0)
@@ -668,12 +686,12 @@ static int load_config_file(DaemonConfig *c) {
goto finish;
}
}
-
+
} else if (strcasecmp(g->name, "rlimits") == 0) {
AvahiIniFilePair *p;
for (p = g->pairs; p; p = p->pairs_next) {
-
+
if (strcasecmp(p->key, "rlimit-as") == 0) {
c->rlimit_as_set = 1;
c->rlimit_as = atoi(p->value);
@@ -705,7 +723,7 @@ static int load_config_file(DaemonConfig *c) {
}
}
-
+
} else {
avahi_log_error("Invalid configuration file group \"%s\".\n", g->name);
goto finish;
@@ -718,7 +736,7 @@ finish:
if (f)
avahi_ini_file_free(f);
-
+
return r;
}
@@ -731,7 +749,7 @@ static void log_function(AvahiLogLevel level, const char *txt) {
LOG_INFO,
LOG_DEBUG
};
-
+
assert(level < AVAHI_LOG_LEVEL_MAX);
assert(txt);
@@ -758,7 +776,7 @@ static void add_inotify_watches(void) {
#ifdef ENABLE_CHROOT
c = config.use_chroot;
#endif
-
+
inotify_add_watch(inotify_fd, c ? "/services" : AVAHI_SERVICE_DIR, IN_CLOSE_WRITE|IN_DELETE|IN_DELETE_SELF|IN_MOVED_FROM|IN_MOVED_TO|IN_MOVE_SELF
#ifdef IN_ONLYDIR
|IN_ONLYDIR
@@ -837,18 +855,18 @@ static void reload_config(void) {
#else
static_service_load(0);
static_hosts_load(0);
-#endif
+#endif
static_service_add_to_server();
static_hosts_add_to_server();
-
+
if (resolv_conf_entry_group)
avahi_s_entry_group_reset(resolv_conf_entry_group);
-
+
load_resolv_conf();
-
+
update_wide_area_servers();
update_browse_domains();
-
+
if (config.publish_resolv_conf && resolv_conf_name_servers && resolv_conf_name_servers[0])
resolv_conf_entry_group = add_dns_servers(avahi_server, resolv_conf_entry_group, resolv_conf_name_servers);
}
@@ -908,7 +926,7 @@ static void kqueue_callback(AvahiWatch *watch, int fd, AVAHI_GCC_UNUSED AvahiWat
static void signal_callback(AvahiWatch *watch, AVAHI_GCC_UNUSED int fd, AVAHI_GCC_UNUSED AvahiWatchEvent event, AVAHI_GCC_UNUSED void *userdata) {
int sig;
const AvahiPoll *poll_api;
-
+
assert(watch);
assert(simple_poll_api);
@@ -1013,17 +1031,17 @@ static int run_server(DaemonConfig *c) {
avahi_log_error("Failed to chroot(): %s", strerror(errno));
goto finish;
}
-
+
avahi_log_info("Successfully called chroot().");
chdir("/");
-
+
if (avahi_caps_drop_all() < 0) {
avahi_log_error("Failed to drop capabilities.");
goto finish;
}
avahi_log_info("Successfully dropped remaining capabilities.");
}
-
+
#endif
#ifdef HAVE_INOTIFY
@@ -1031,7 +1049,7 @@ static int run_server(DaemonConfig *c) {
avahi_log_warn( "Failed to initialize inotify: %s", strerror(errno));
else {
add_inotify_watches();
-
+
if (!(inotify_watch = poll_api->watch_new(poll_api, inotify_fd, AVAHI_WATCH_IN, inotify_callback, NULL))) {
avahi_log_error( "Failed to create inotify watcher");
goto finish;
@@ -1080,17 +1098,17 @@ static int run_server(DaemonConfig *c) {
/* We handle signals through an FD, so let's continue */
if (errno == EINTR)
continue;
-
+
avahi_log_error("poll(): %s", strerror(errno));
goto finish;
} else if (r > 0)
/* Quit */
break;
}
-
+
finish:
-
+
static_service_remove_from_server();
static_service_free_all();
@@ -1098,7 +1116,7 @@ finish:
static_hosts_free_all();
remove_dns_server_entry_groups();
-
+
simple_protocol_shutdown();
#ifdef HAVE_DBUS
@@ -1133,7 +1151,7 @@ finish:
close(kfds[i]);
}
#endif
-
+
if (simple_poll_api) {
avahi_simple_poll_free(simple_poll_api);
simple_poll_api = NULL;
@@ -1141,7 +1159,7 @@ finish:
if (!retval_is_sent && c->daemonize)
daemon_retval_send(1);
-
+
return r;
}
@@ -1151,7 +1169,7 @@ static int drop_root(void) {
struct passwd *pw;
struct group * gr;
int r;
-
+
if (!(pw = getpwnam(AVAHI_USER))) {
avahi_log_error( "Failed to find user '"AVAHI_USER"'.");
return -1;
@@ -1234,12 +1252,12 @@ static int make_runtime_dir(void) {
u = umask(0000);
reset_umask = 1;
-
+
if (mkdir(AVAHI_DAEMON_RUNTIME_DIR, 0755) < 0 && errno != EEXIST) {
avahi_log_error("mkdir(\""AVAHI_DAEMON_RUNTIME_DIR"\"): %s", strerror(errno));
goto fail;
}
-
+
chown(AVAHI_DAEMON_RUNTIME_DIR, pw->pw_uid, gr->gr_gid);
if (stat(AVAHI_DAEMON_RUNTIME_DIR, &st) < 0) {
@@ -1322,7 +1340,7 @@ int main(int argc, char *argv[]) {
avahi_set_log_function(log_function);
init_rand_seed();
-
+
avahi_server_config_init(&config.server_config);
config.command = DAEMON_RUN;
config.daemonize = 0;
@@ -1331,7 +1349,7 @@ int main(int argc, char *argv[]) {
config.enable_dbus = 1;
config.fail_on_missing_dbus = 1;
#endif
-
+
config.drop_root = 1;
config.set_rlimits = 1;
#ifdef ENABLE_CHROOT
@@ -1353,7 +1371,7 @@ int main(int argc, char *argv[]) {
#ifdef RLIMIT_NPROC
config.rlimit_nproc_set = 0;
#endif
-
+
if ((argv0 = strrchr(argv[0], '/')))
argv0 = avahi_strdup(argv0 + 1);
else
@@ -1362,7 +1380,7 @@ int main(int argc, char *argv[]) {
daemon_pid_file_ident = (const char *) argv0;
daemon_log_ident = (char*) argv0;
daemon_pid_file_proc = pid_file_proc;
-
+
if (parse_command_line(&config, argc, argv) < 0)
goto finish;
@@ -1372,7 +1390,7 @@ int main(int argc, char *argv[]) {
#ifdef ENABLE_CHROOT
config.use_chroot = config.use_chroot && config.drop_root;
#endif
-
+
if (config.command == DAEMON_HELP) {
help(stdout);
r = 0;
@@ -1394,7 +1412,7 @@ int main(int argc, char *argv[]) {
}
r = 0;
-
+
} else if (config.command == DAEMON_CHECK)
r = (daemon_pid_file_is_running() >= 0) ? 0 : 1;
else if (config.command == DAEMON_RUN) {
@@ -1404,7 +1422,7 @@ int main(int argc, char *argv[]) {
avahi_log_error("This program is intended to be run as root.");
goto finish;
}
-
+
if ((pid = daemon_pid_file_is_running()) >= 0) {
avahi_log_error("Daemon already running on PID %u", pid);
goto finish;
@@ -1412,10 +1430,10 @@ int main(int argc, char *argv[]) {
if (load_config_file(&config) < 0)
goto finish;
-
+
if (config.daemonize) {
daemon_retval_init();
-
+
if ((pid = daemon_fork()) < 0)
goto finish;
else if (pid != 0) {
@@ -1441,7 +1459,7 @@ int main(int argc, char *argv[]) {
avahi_log_error("Failed to close remaining file descriptors: %s", strerror(errno));
goto finish;
}
-
+
if (make_runtime_dir() < 0)
goto finish;
@@ -1451,7 +1469,7 @@ int main(int argc, char *argv[]) {
if (avahi_caps_reduce() < 0)
goto finish;
#endif
-
+
if (drop_root() < 0)
goto finish;
@@ -1486,11 +1504,11 @@ int main(int argc, char *argv[]) {
avahi_log_info("%s "PACKAGE_VERSION" starting up.", argv0);
avahi_set_proc_title(argv0, "%s: starting up", argv0);
-
+
if (run_server(&config) == 0)
r = 0;
}
-
+
finish:
if (config.daemonize)
@@ -1515,6 +1533,6 @@ finish:
#endif
avahi_free(argv0);
-
+
return r;
}
diff --git a/avahi-discover-standalone/Makefile.am b/avahi-discover-standalone/Makefile.am
index ca007be..542aeae 100644
--- a/avahi-discover-standalone/Makefile.am
+++ b/avahi-discover-standalone/Makefile.am
@@ -52,7 +52,7 @@ else
if HAVE_PYTHON_DBUS
-interfaces_DATA = $(interfaces)
+interfaces_DATA =
endif
endif
diff --git a/avahi-dnsconfd/avahi-dnsconfd.action b/avahi-dnsconfd/avahi-dnsconfd.action
index 9337a6d..f7d3aa4 100755
--- a/avahi-dnsconfd/avahi-dnsconfd.action
+++ b/avahi-dnsconfd/avahi-dnsconfd.action
@@ -35,7 +35,27 @@ test "x$AVAHI_INTERFACE" != "x"
# $AVAHI_INTERFACE_DNS_SERVERS A whitespace seperated list of DNS servers on $AVAHI_INTERFACE
# $AVAHI_DNS_SERVERS The complete list of all DNS servers found on all interfaces
-if [ -x /sbin/resolvconf ] ; then
+if [ -x /sbin/netconfig ]; then
+ # SUSE method on 11.1+
+ if [ -n "$AVAHI_INTERFACE_DNS_SERVERS" ]; then
+ /sbin/netconfig modify -s avahi -i "$AVAHI_INTERFACE" <<-EOF
+ INTERFACE='$AVAHI_INTERFACE'
+ DNSSERVERS='$AVAHI_INTERFACE_DNS_SERVERS'
+ EOF
+ else
+ /sbin/netconfig remove -s avahi -i "$AVAHI_INTERFACE"
+ fi
+elif [ -x /sbin/modify_resolvconf ] ; then
+ # method for SUSE <= 11.0
+ if [ -n "$AVAHI_DNS_SERVERS" ]; then
+ /sbin/modify_resolvconf modify -s avahi -t - -p avahi-dnsconfd -n "$AVAHI_DNS_SERVERS" <<-EOF
+ if you don't like avahi to update your Nameservers
+ disable the avahi-dnsconfd init script
+ EOF
+ else
+ /sbin/modify_resolvconf restore -s avahi
+ fi
+elif [ -x /sbin/resolvconf ] ; then
# We have Debian's resolvconf tool
diff --git a/avahi-python/Makefile.am b/avahi-python/Makefile.am
index 09ad6de..4989b4b 100644
--- a/avahi-python/Makefile.am
+++ b/avahi-python/Makefile.am
@@ -29,7 +29,6 @@ SUBDIRS=avahi avahi-discover
if HAVE_PYTHON
if HAVE_PYTHON_DBUS
-if HAVE_PYGTK
pythonscripts = \
avahi-bookmarks
@@ -43,4 +42,3 @@ CLEANFILES = $(pythonscripts)
endif
endif
-endif
diff --git a/avahi-python/avahi-bookmarks.in b/avahi-python/avahi-bookmarks.in
index a1e8d0c..172abb3 100755
--- a/avahi-python/avahi-bookmarks.in
+++ b/avahi-python/avahi-bookmarks.in
@@ -24,7 +24,7 @@ import sys, getopt, os
try:
import avahi, gobject, dbus
except ImportError:
- print "Sorry, to use this tool you need to install Avahi, pygtk and python-dbus."
+ print "Sorry, to use this tool you need to install Avahi and python-dbus."
sys.exit(1)
try:
diff --git a/avahi-python/avahi-discover/Makefile.am b/avahi-python/avahi-discover/Makefile.am
index c1d6cab..a44a071 100644
--- a/avahi-python/avahi-discover/Makefile.am
+++ b/avahi-python/avahi-discover/Makefile.am
@@ -23,7 +23,7 @@ EXTRA_DIST = \
__init__.py \
SimpleGladeApp.py \
avahi-discover.in \
- avahi-discover.desktop.in
+ avahi-discover.desktop.in.in
if HAVE_PYTHON
if HAVE_PYTHON_DBUS
@@ -41,6 +41,7 @@ if HAVE_GDBM
pythonscripts += \
avahi-discover
desktop_DATA += avahi-discover.desktop
+@INTLTOOL_DESKTOP_RULE@
avahi_discover_PYTHON += __init__.py SimpleGladeApp.py
endif
@@ -48,19 +49,23 @@ if HAVE_DBM
pythonscripts += \
avahi-discover
desktop_DATA += avahi-discover.desktop
+@INTLTOOL_DESKTOP_RULE@
avahi_discover_PYTHON += __init__.py SimpleGladeApp.py
endif
-avahi-discover.desktop: avahi-discover.desktop.in
+avahi-discover.desktop.in: avahi-discover.desktop.in.in
sed -e 's,@bindir\@,$(bindir),g' $< > $@
avahi-discover: avahi-discover.in
sed -e 's,@PYTHON\@,$(PYTHON),g' \
+ -e 's,@GETTEXT_PACKAGE\@,"$(GETTEXT_PACKAGE)",g' \
+ -e 's,@LOCALEDIR\@,"$(datadir)/locale",g' \
-e 's,@interfacesdir\@,$(interfacesdir),g' $< > $@
chmod +x $@
bin_SCRIPTS = $(pythonscripts)
-CLEANFILES = $(pythonscripts) $(desktop_DATA) *.pyc *.pyo
+
+CLEANFILES = $(pythonscripts) $(desktop_DATA) *.pyc *.pyo avahi-discover.desktop.in
endif
endif
diff --git a/avahi-python/avahi-discover/avahi-discover.desktop.in b/avahi-python/avahi-discover/avahi-discover.desktop.in.in
index e896192..031024c 100644
--- a/avahi-python/avahi-discover/avahi-discover.desktop.in
+++ b/avahi-python/avahi-discover/avahi-discover.desktop.in.in
@@ -1,8 +1,8 @@
[Desktop Entry]
Version=1.0
Encoding=UTF-8
-Name=Avahi Zeroconf Browser
-Comment=Browse for Zeroconf services available on your network
+_Name=Avahi Zeroconf Browser
+_Comment=Browse for Zeroconf services available on your network
Exec=@bindir@/avahi-discover
Terminal=false
Type=Application
diff --git a/avahi-python/avahi-discover/avahi-discover.in b/avahi-python/avahi-discover/avahi-discover.in
index 229c7bd..0558424 100755
--- a/avahi-python/avahi-discover/avahi-discover.in
+++ b/avahi-python/avahi-discover/avahi-discover.in
@@ -22,8 +22,11 @@
import os, sys
try:
- import avahi, gtk, gobject, dbus, avahi.ServiceTypeDatabase
+ import avahi, gettext, gtk, gobject, dbus, avahi.ServiceTypeDatabase
from avahi_discover.SimpleGladeApp import SimpleGladeApp
+ gtk.glade.bindtextdomain(@GETTEXT_PACKAGE@, @LOCALEDIR@)
+ gtk.glade.textdomain(@GETTEXT_PACKAGE@)
+ _ = gettext.gettext
except ImportError, e:
print "Sorry, to use this tool you need to install Avahi, pygtk and python-dbus.\n Error: %s" % e
sys.exit(1)
@@ -61,7 +64,9 @@ class Main_window(SimpleGladeApp):
def on_tree_view_cursor_changed(self, widget, *args):
(model, iter) = widget.get_selection().get_selected()
- (name,interface,protocol,stype,domain) = self.treemodel.get(iter,1,2,3,4,5)
+ stype = None
+ if iter is not None:
+ (name,interface,protocol,stype,domain) = self.treemodel.get(iter,1,2,3,4,5)
if stype == None:
self.info_label.set_markup("<i>No service currently selected.</i>")
return
diff --git a/avahi-python/avahi/Makefile.am b/avahi-python/avahi/Makefile.am
index 4a73022..c0c9c34 100644
--- a/avahi-python/avahi/Makefile.am
+++ b/avahi-python/avahi/Makefile.am
@@ -52,13 +52,11 @@ endif
avahi_PYTHON = $(avahi_SCRIPTS)
-if HAVE_PYGTK
if HAVE_PYTHON_DBUS
avahi_PYTHON += __init__.py
endif
endif
-endif
CLEANFILES=*.pyc *.pyo ServiceTypeDatabase.py
diff --git a/avahi-ui/Makefile.am b/avahi-ui/Makefile.am
index 910dc6b..6dbbd24 100644
--- a/avahi-ui/Makefile.am
+++ b/avahi-ui/Makefile.am
@@ -29,8 +29,8 @@ desktop_DATA_in_in = bssh.desktop.in.in bvnc.desktop.in.in
EXTRA_DIST = $(desktop_DATA_in_in)
-
if HAVE_GTK
+AM_CFLAGS += -DGNOMELOCALEDIR=\"$(datadir)/locale\"
if HAVE_DBUS
if HAVE_GLIB
@@ -61,6 +61,7 @@ endif
bin_PROGRAMS = bssh
desktop_DATA += bssh.desktop bvnc.desktop
+@INTLTOOL_DESKTOP_RULE@
bssh_SOURCES = bssh.c
bssh_CFLAGS = $(AM_CFLAGS) $(GTK20_CFLAGS)
diff --git a/avahi-ui/avahi-ui.c b/avahi-ui/avahi-ui.c
index a54cbe9..bd2b3cc 100644
--- a/avahi-ui/avahi-ui.c
+++ b/avahi-ui/avahi-ui.c
@@ -30,6 +30,7 @@
#include <net/if.h>
#include <gtk/gtk.h>
+#include <glib/gi18n.h>
#include <avahi-glib/glib-watch.h>
#include <avahi-client/client.h>
@@ -184,64 +185,64 @@ static void aui_service_dialog_class_init(AuiServiceDialogClass *klass) {
g_object_class_install_property(
object_class,
PROP_BROWSE_SERVICE_TYPES,
- g_param_spec_pointer("browse_service_types", "Browse Service Types", "A NULL terminated list of service types to browse for",
+ g_param_spec_pointer("browse_service_types", _("Browse Service Types"), _("A NULL terminated list of service types to browse for"),
G_PARAM_READABLE | G_PARAM_WRITABLE));
g_object_class_install_property(
object_class,
PROP_DOMAIN,
- g_param_spec_string("domain", "Domain", "The domain to browse in, or NULL for the default domain",
+ g_param_spec_string("domain", _("Domain"), _("The domain to browse in, or NULL for the default domain"),
NULL,
G_PARAM_READABLE | G_PARAM_WRITABLE));
g_object_class_install_property(
object_class,
PROP_SERVICE_TYPE,
- g_param_spec_string("service_type", "Service Type", "The service type of the selected service",
+ g_param_spec_string("service_type", _("Service Type"), _("The service type of the selected service"),
NULL,
G_PARAM_READABLE | G_PARAM_WRITABLE));
g_object_class_install_property(
object_class,
PROP_SERVICE_NAME,
- g_param_spec_string("service_name", "Service Name", "The service name of the selected service",
+ g_param_spec_string("service_name", _("Service Name"), _("The service name of the selected service"),
NULL,
G_PARAM_READABLE | G_PARAM_WRITABLE));
g_object_class_install_property(
object_class,
PROP_ADDRESS,
- g_param_spec_pointer("address", "Address", "The address of the resolved service",
+ g_param_spec_pointer("address", _("Address"), _("The address of the resolved service"),
G_PARAM_READABLE));
g_object_class_install_property(
object_class,
PROP_PORT,
- g_param_spec_uint("port", "Port", "The IP port number of the resolved service",
+ g_param_spec_uint("port", _("Port"), _("The IP port number of the resolved service"),
0, 0xFFFF, 0,
G_PARAM_READABLE));
g_object_class_install_property(
object_class,
PROP_HOST_NAME,
- g_param_spec_string("host_name", "Host Name", "The host name of the resolved service",
+ g_param_spec_string("host_name", _("Host Name"), _("The host name of the resolved service"),
NULL,
G_PARAM_READABLE));
g_object_class_install_property(
object_class,
PROP_TXT_DATA,
- g_param_spec_pointer("txt_data", "TXT Data", "The TXT data of the resolved service",
+ g_param_spec_pointer("txt_data", _("TXT Data"), _("The TXT data of the resolved service"),
G_PARAM_READABLE));
g_object_class_install_property(
object_class,
PROP_RESOLVE_SERVICE,
- g_param_spec_boolean("resolve_service", "Resolve service", "Resolve service",
+ g_param_spec_boolean("resolve_service", _("Resolve service"), _("Resolve service"),
TRUE,
G_PARAM_READABLE | G_PARAM_WRITABLE));
g_object_class_install_property(
object_class,
PROP_RESOLVE_HOST_NAME,
- g_param_spec_boolean("resolve_host_name", "Resolve service host name", "Resolve service host name",
+ g_param_spec_boolean("resolve_host_name", _("Resolve service host name"), _("Resolve service host name"),
TRUE,
G_PARAM_READABLE | G_PARAM_WRITABLE));
g_object_class_install_property(
object_class,
PROP_ADDRESS_FAMILY,
- g_param_spec_int("address_family", "Address family", "The address family for host name resolution",
+ g_param_spec_int("address_family", _("Address family"), _("The address family for host name resolution"),
AVAHI_PROTO_UNSPEC, AVAHI_PROTO_INET6, AVAHI_PROTO_UNSPEC,
G_PARAM_READABLE | G_PARAM_WRITABLE));
}
@@ -703,7 +704,7 @@ static gboolean start_callback(gpointer data) {
d->priv->start_idle = 0;
if (!d->priv->browse_service_types || !*d->priv->browse_service_types) {
- g_warning("Browse service type list is empty!");
+ g_warning(_("Browse service type list is empty!"));
return FALSE;
}
@@ -1026,7 +1027,7 @@ static void domain_button_clicked(GtkButton *button G_GNUC_UNUSED, gpointer user
gtk_container_add(GTK_CONTAINER(scrolled_window), p->domain_tree_view);
p->domain_progress_bar = gtk_progress_bar_new();
- gtk_progress_bar_set_text(GTK_PROGRESS_BAR(p->domain_progress_bar), _("Browsing ..."));
+ gtk_progress_bar_set_text(GTK_PROGRESS_BAR(p->domain_progress_bar), _("Browsing..."));
gtk_progress_bar_set_pulse_step(GTK_PROGRESS_BAR(p->domain_progress_bar), 0.1);
gtk_box_pack_end(GTK_BOX(vbox2), p->domain_progress_bar, FALSE, FALSE, 0);
@@ -1139,17 +1140,17 @@ static void aui_service_dialog_init(AuiServiceDialog *d) {
g_signal_connect(selection, "changed", G_CALLBACK(service_selection_changed_callback), d);
renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Location", renderer, "text", SERVICE_COLUMN_PRETTY_IFACE, NULL);
+ column = gtk_tree_view_column_new_with_attributes(_("Location"), renderer, "text", SERVICE_COLUMN_PRETTY_IFACE, NULL);
gtk_tree_view_column_set_visible(column, FALSE);
gtk_tree_view_append_column(GTK_TREE_VIEW(p->service_tree_view), column);
renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Name", renderer, "text", SERVICE_COLUMN_NAME, NULL);
+ column = gtk_tree_view_column_new_with_attributes(_("Name"), renderer, "text", SERVICE_COLUMN_NAME, NULL);
gtk_tree_view_column_set_expand(column, TRUE);
gtk_tree_view_append_column(GTK_TREE_VIEW(p->service_tree_view), column);
renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Type", renderer, "text", SERVICE_COLUMN_PRETTY_TYPE, NULL);
+ column = gtk_tree_view_column_new_with_attributes(_("Type"), renderer, "text", SERVICE_COLUMN_PRETTY_TYPE, NULL);
gtk_tree_view_column_set_visible(column, FALSE);
gtk_tree_view_append_column(GTK_TREE_VIEW(p->service_tree_view), column);
@@ -1157,7 +1158,7 @@ static void aui_service_dialog_init(AuiServiceDialog *d) {
gtk_container_add(GTK_CONTAINER(scrolled_window), p->service_tree_view);
p->service_progress_bar = gtk_progress_bar_new();
- gtk_progress_bar_set_text(GTK_PROGRESS_BAR(p->service_progress_bar), _("Browsing ..."));
+ gtk_progress_bar_set_text(GTK_PROGRESS_BAR(p->service_progress_bar), _("Browsing..."));
gtk_progress_bar_set_pulse_step(GTK_PROGRESS_BAR(p->service_progress_bar), 0.1);
gtk_box_pack_end(GTK_BOX(vbox2), p->service_progress_bar, FALSE, FALSE, 0);
diff --git a/avahi-ui/avahi-ui.h b/avahi-ui/avahi-ui.h
index eee0b34..d780f83 100644
--- a/avahi-ui/avahi-ui.h
+++ b/avahi-ui/avahi-ui.h
@@ -22,8 +22,7 @@
USA.
***/
-#include <gtk/gtkwidget.h>
-#include <gtk/gtkdialog.h>
+#include <gtk/gtk.h>
#include <avahi-client/client.h>
diff --git a/avahi-ui/bssh.c b/avahi-ui/bssh.c
index fea1071..e4a190b 100644
--- a/avahi-ui/bssh.c
+++ b/avahi-ui/bssh.c
@@ -31,6 +31,7 @@
#include <getopt.h>
#include <gtk/gtk.h>
+#include <glib/gi18n.h>
#include <avahi-client/client.h>
#include <avahi-common/strlst.h>
@@ -135,6 +136,10 @@ int main(int argc, char*argv[]) {
return 1;
}
+ bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ textdomain (GETTEXT_PACKAGE);
+
gtk_init(&argc, &argv);
switch (config.command) {
diff --git a/common/.gitignore b/common/.gitignore
index 4b1a47e..de8ddd7 100644
--- a/common/.gitignore
+++ b/common/.gitignore
@@ -4,6 +4,11 @@ iconv.m4
lib-ld.m4
lib-link.m4
lib-prefix.m4
+libtool.m4
+ltoptions.m4
+ltsugar.m4
+ltversion.m4
+lt~obsolete.m4
nls.m4
po.m4
progtest.m4
diff --git a/configure.ac b/configure.ac
index ce365b4..b6e44b3 100644
--- a/configure.ac
+++ b/configure.ac
@@ -21,21 +21,21 @@
# USA.
AC_PREREQ(2.57)
-AC_INIT([avahi],[0.6.23],[avahi (at) lists (dot) freedesktop (dot) org])
+AC_INIT([avahi],[0.6.24],[avahi (at) lists (dot) freedesktop (dot) org])
AC_CONFIG_SRCDIR([avahi-core/server.c])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE([foreign 1.9 -Wall])
AC_SUBST(PACKAGE_URL, [http://avahi.org/])
-AC_SUBST(LIBAVAHI_COMMON_VERSION_INFO, [8:0:5])
-AC_SUBST(LIBAVAHI_CORE_VERSION_INFO, [5:5:0])
-AC_SUBST(LIBAVAHI_CLIENT_VERSION_INFO, [5:4:2])
+AC_SUBST(LIBAVAHI_COMMON_VERSION_INFO, [8:1:5])
+AC_SUBST(LIBAVAHI_CORE_VERSION_INFO, [6:0:0])
+AC_SUBST(LIBAVAHI_CLIENT_VERSION_INFO, [5:5:2])
AC_SUBST(LIBAVAHI_GLIB_VERSION_INFO, [1:1:0])
AC_SUBST(LIBAVAHI_GOBJECT_VERSION_INFO, [0:1:0])
AC_SUBST(LIBAVAHI_QT3_VERSION_INFO, [1:2:0])
AC_SUBST(LIBAVAHI_QT4_VERSION_INFO, [1:2:0])
-AC_SUBST(LIBAVAHI_UI_VERSION_INFO, [1:0:1])
+AC_SUBST(LIBAVAHI_UI_VERSION_INFO, [1:1:1])
# Do not touch these, since they we took this version-info from upstream HOWL/Bonjour
AC_SUBST(LIBAVAHI_COMPAT_LIBDNS_SD_VERSION_INFO, [1:0:0])
@@ -299,7 +299,7 @@ test_gcc_flag() {
# If using GCC specify some additional parameters
if test "x$GCC" = "xyes" ; then
- DESIRED_FLAGS="-Wall -W -Wextra -pedantic -pipe -Wformat -Wold-style-definition -Wdeclaration-after-statement -Wfloat-equal -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls -Wmissing-noreturn -Wshadow -Wendif-labels -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Winline -fPIC"
+ DESIRED_FLAGS="-Wall -W -Wextra -pedantic -pipe -Wformat -Wold-style-definition -Wdeclaration-after-statement -Wfloat-equal -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls -Wmissing-noreturn -Wshadow -Wendif-labels -Wpointer-arith -Wbad-function-cast -Wcast-qual -Wcast-align -Wwrite-strings -Winline"
if test "x$HAVE_NETLINK" = "xyes" ; then
# Test whether rtnetlink.h can be included when compiled with -std=c99
@@ -387,7 +387,6 @@ fi
AM_CONDITIONAL(HAVE_DLOPEN, test "x$HAVE_DLOPEN" = "xyes")
have_inotify=no
-AC_CHECK_HEADERS([linux/inotify.h], [have_inotify=yes])
AC_CHECK_HEADERS([sys/inotify.h], [have_inotify=yes])
AM_CONDITIONAL(HAVE_INOTIFY, test "x$have_inotify" = "xyes")
@@ -405,8 +404,6 @@ if test "x$have_kqueue" = "xyes" ; then
AC_DEFINE([HAVE_KQUEUE], 1, [Enable BSD kqueue() usage])
fi
-AM_GNU_GETTEXT([external])
-
IT_PROG_INTLTOOL([0.35.0])
GETTEXT_PACKAGE=avahi
AC_SUBST([GETTEXT_PACKAGE])
diff --git a/docs/NEWS b/docs/NEWS
index 7b49d63..19bbaad 100644
--- a/docs/NEWS
+++ b/docs/NEWS
@@ -1,3 +1,17 @@
+Avahi 0.6.24
+============
+
+This is mostly a bugfix release.
+
+ * A huge number of bug fixes, including a security relavant one (low
+ risk)
+ * Add two new configuration directives "allow-interfaces" and
+ "deny-interfaces" which can be used to make Avahi ignore certain
+ network interfaces or only use certain network interfaces.
+ * A lot of translation updates
+
+This release is backwards compatible with Avahi 0.6.x with x < 24.
+
Avahi 0.6.23
============
diff --git a/initscript/fedora/avahi-daemon.in b/initscript/fedora/avahi-daemon.in
index d309866..c5b3230 100644
--- a/initscript/fedora/avahi-daemon.in
+++ b/initscript/fedora/avahi-daemon.in
@@ -2,19 +2,19 @@
#
# avahi-daemon: Starts the Avahi Daemon
#
-# chkconfig: 345 96 02
+# chkconfig: 345 24 02
# description: This is a daemon which runs on client machines to perform \
# Zeroconf service discovery on a network. avahi-daemon must be \
# running on systems that use Avahi for service discovery. \
# Avahi-daemon should not be running otherwise.
# processname: avahi-daemon
-# config:
+# config:
AVAHI_BIN=@sbindir@/avahi-daemon
-if [ "$1" == 'status' ]; then
+if [ "$1" = 'status' ]; then
test -x $AVAHI_BIN || exit 4
-else
+else
test -x $AVAHI_BIN || exit 5
fi
@@ -91,7 +91,7 @@ case "$1" in
restart
;;
reload)
- reload
+ reload
;;
condrestart)
if [ -f $LOCKFILE ]; then
@@ -105,4 +105,3 @@ case "$1" in
esac
exit $RETVAL
-
diff --git a/initscript/fedora/avahi-dnsconfd.in b/initscript/fedora/avahi-dnsconfd.in
index 284c10b..de49d7f 100644
--- a/initscript/fedora/avahi-dnsconfd.in
+++ b/initscript/fedora/avahi-dnsconfd.in
@@ -12,7 +12,7 @@
AVAHI_BIN=@sbindir@/avahi-dnsconfd
-if [ "$1" == 'status' ]; then
+if [ "$1" = 'status' ]; then
test -x $AVAHI_BIN || exit 4
else
test -x $AVAHI_BIN || exit 5
diff --git a/man/Makefile.am b/man/Makefile.am
index 8f85f3c..7d08828 100644
--- a/man/Makefile.am
+++ b/man/Makefile.am
@@ -65,8 +65,11 @@ endif
if HAVE_PYTHON
man_MANS += \
- avahi-discover.1 \
avahi-bookmarks.1
+if HAVE_GTK
+man_MANS += \
+ avahi-discover.1
+endif
endif
endif
@@ -233,16 +236,22 @@ EXTRA_DIST = \
if HAVE_DBUS
+BSSH_LN =
+if HAVE_GTK
+if HAVE_GLIB
+BSSH_LN += $(LN_S) bssh.1 bvnc.1 &&
+endif
+endif
install-exec-local:
mkdir -p $(DESTDIR)/$(mandir)/man1 && \
cd $(DESTDIR)/$(mandir)/man1 && \
rm -f avahi-resolve-host-name.1 avahi-resolve-address.1 avahi-browse-domains.1 avahi-publish-address.1 avahi-publish-service.1 bvnc.1 && \
+ $(BSSH_LN) \
$(LN_S) avahi-resolve.1 avahi-resolve-host-name.1 && \
$(LN_S) avahi-resolve.1 avahi-resolve-address.1 && \
$(LN_S) avahi-browse.1 avahi-browse-domains.1 && \
$(LN_S) avahi-publish.1 avahi-publish-address.1 && \
- $(LN_S) avahi-publish.1 avahi-publish-service.1 && \
- $(LN_S) bssh.1 bvnc.1
+ $(LN_S) avahi-publish.1 avahi-publish-service.1
endif
diff --git a/man/avahi-daemon.conf.5.xml.in b/man/avahi-daemon.conf.5.xml.in
index 8cc3450..08992fa 100644
--- a/man/avahi-daemon.conf.5.xml.in
+++ b/man/avahi-daemon.conf.5.xml.in
@@ -4,19 +4,19 @@
<!-- $Id$ -->
-<!--
+<!--
This file is part of avahi.
-
+
avahi is free software; you can redistribute it and/or modify it
under the terms of the GNU Lesser General Public License as
published by the Free Software Foundation; either version 2.1 of the
License, or (at your option) any later version.
-
+
avahi is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
Public License for more details.
-
+
You should have received a copy of the GNU Lesser General Public
License along with avahi; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
@@ -28,11 +28,11 @@
<synopsis>
<cmd>@pkgsysconfdir@/avahi-daemon.conf</cmd>
</synopsis>
-
+
<description>
<p><file>avahi-daemon.conf</file> is the configuration file for avahi-daemon.</p>
</description>
-
+
<section name="Section [Server]">
<option>
@@ -56,7 +56,7 @@
of colon seperated domains or by adding them to the XDG config
file <file>~/.config/avahi/browse-domains</file> (seperated by
newlines).</p>
-
+
</option>
<option>
@@ -72,6 +72,22 @@
</option>
<option>
+ <p><opt>allow-interfaces=</opt> Set a comma seperated list of
+ allowed network interfaces that should be used by the
+ avahi-daemon. Other interfaces will be ignored. If set to the
+ empty list all local interfaces except loopback and
+ point-to-point will be used.</p>
+ </option>
+
+ <option>
+ <p><opt>deny-interfaces=</opt> Set a comma seperated list of
+ network interfaces that should be ignored by avahi-daemon.
+ Other not specified interfaces will be used, unless
+ <opt>allow-interfaces</opt> is set. This option takes
+ precedence over <opt>deny-interfaces</opt>.</p>
+ </option>
+
+ <option>
<p><opt>check-response-ttl=</opt> Takes a boolean value ("yes"
or "no"). If set to "yes", an additional security check is
activated: incoming IP packets will be ignored unless the IP
@@ -112,7 +128,7 @@
to bind to UDP port 5353. This effectively impedes other mDNS
stacks from running on the host. Use this as a security
measure to make sure that only Avahi is responsible for mDNS
- traffic. Please note that we do no recommend running multiple
+ traffic. Please note that we do not recommend running multiple
mDNS stacks on the same host simultaneously. This hampers
reliability and is a waste of resources. However, to not annoy
people this option defaults to "no".</p>
@@ -141,7 +157,7 @@
we encourage you to use subdomains of .local, such as
"kitchen.local". This option defaults to "yes".</p>
</option>
-
+
</section>
<section name="Section [publish]">
@@ -306,16 +322,16 @@
<p>The Avahi Developers &lt;@PACKAGE_BUGREPORT@&gt;; Avahi is
available from <url href="@PACKAGE_URL@"/></p>
</section>
-
+
<section name="See also">
<p>
<manref name="avahi-daemon" section="8"/>, <manref name="avahi-dnsconfd" section="8"/>
</p>
</section>
-
+
<section name="Comments">
<p>This man page was written using <manref name="xml2man" section="1"
href="http://masqmail.cx/xml2man/"/> by Oliver Kurth.</p>
</section>
-
+
</manpage>
diff --git a/po/LINGUAS b/po/LINGUAS
index c1f1f18..7e609f0 100644
--- a/po/LINGUAS
+++ b/po/LINGUAS
@@ -1,10 +1,14 @@
ca
de
+el
en_AU
en_CA
en_GB
en_NZ
+es
+fi
fr
+hu
it
ms
pl
@@ -12,4 +16,5 @@ pt_BR
ru
sr
sr@latin
+sv
zh_CN
diff --git a/po/POTFILES.in b/po/POTFILES.in
index 80b5a29..f3e48de 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -1,5 +1,7 @@
# List of source files which contain translatable strings.
avahi-common/error.c
+avahi-discover-standalone/avahi-discover.glade
+avahi-python/avahi-discover/avahi-discover.desktop.in.in
avahi-ui/avahi-ui.c
avahi-ui/bssh.c
avahi-ui/bssh.desktop.in.in
@@ -8,4 +10,3 @@ avahi-utils/avahi-browse.c
avahi-utils/avahi-publish.c
avahi-utils/avahi-resolve.c
avahi-utils/avahi-set-host-name.c
-
diff --git a/po/POTFILES.skip b/po/POTFILES.skip
index cbfd41b..90541bb 100644
--- a/po/POTFILES.skip
+++ b/po/POTFILES.skip
@@ -2,4 +2,5 @@ avahi-discover-standalone/avahi-discover.glade
avahi-ui/bssh.desktop.in
avahi-ui/bvnc.desktop.in
tests/c-plus-plus-test-gen.py
-
+avahi-python/avahi-discover/avahi-discover.desktop.in
+avahi-python/avahi-discover/avahi-discover.desktop.in
diff --git a/po/de.po b/po/de.po
index 89dd089..b6e43c2 100644
--- a/po/de.po
+++ b/po/de.po
@@ -1,14 +1,14 @@
-# audit-viewer
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
+# German translation of avahi
+# Copyright (C) 2008 Avahi
+# This file is distributed under the same license as the avahi package.
# Fabian Affolter <fab@fedoraproject.org>, 2008.
#
msgid ""
msgstr ""
"Project-Id-Version: audit-viewer\n"
-"Report-Msgid-Bugs-To: https://fedorahosted.org/audit-viewer/\n"
-"POT-Creation-Date: 2008-06-26 01:23+0000\n"
-"PO-Revision-Date: 2008-07-22 09:17+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-10-17 01:51+0000\n"
+"PO-Revision-Date: 2008-10-23 16:07+0100\n"
"Last-Translator: Fabian Affolter <fab@fedoraproject.org>\n"
"Language-Team: German <fedora-trans-de@redhat.com>\n"
"MIME-Version: 1.0\n"
@@ -17,822 +17,1124 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-Language: German\n"
-#: ../src/audit-viewer.glade.h:1
-msgid "."
-msgstr "."
+#: ../avahi-common/error.c:32
+msgid "OK"
+msgstr "OK"
-#. A "decimal point" separating seconds and milliseconds.
-#: ../src/audit-viewer.glade.h:3
-msgid ":"
-msgstr ":"
+#: ../avahi-common/error.c:33
+msgid "Operation failed"
+msgstr "Operation fehlgeschlagen"
-#: ../src/audit-viewer.glade.h:4
-msgid "<b>Event Order</b>"
-msgstr "<b>Ereignis-Reihenfolge</b>"
+#: ../avahi-common/error.c:34
+msgid "Bad state"
+msgstr "Ungültiger Zustand"
-#: ../src/audit-viewer.glade.h:5
-msgid "<b>Group Columns _by:</b>"
-msgstr "<b>Gruppiere Spalte _nach:</b>"
+#: ../avahi-common/error.c:35
+msgid "Invalid host name"
+msgstr "Ungültiger Rechnername"
-#: ../src/audit-viewer.glade.h:6
-msgid "<b>Group Rows by:</b>"
-msgstr "<b>Gruppiere Zeile nach:</b>"
+#: ../avahi-common/error.c:36
+msgid "Invalid domain name"
+msgstr "Ungültiger Domainname"
-#: ../src/audit-viewer.glade.h:7
-msgid "<b>Identification</b>"
-msgstr "<b>Identifikation</b>"
+#: ../avahi-common/error.c:37
+msgid "No suitable network protocol available"
+msgstr "Kein passendes Netzwerkprotokoll verfügbar"
-#: ../src/audit-viewer.glade.h:8
-msgid "<b>Limit to events _before:</b>"
-msgstr "<b>Limit zu Er _before:</b>"
+#: ../avahi-common/error.c:38
+msgid "Invalid DNS TTL"
+msgstr "Ungültige DNS-TTL"
-#: ../src/audit-viewer.glade.h:9
-msgid "<b>Limit to events not _earlier than:</b>"
-msgstr "<b>Limitieren auf Ereignisse nicht _später als:</b>"
+#: ../avahi-common/error.c:39
+msgid "Resource record key is pattern"
+msgstr "Datensatzschlüssel ist Muster"
-#: ../src/audit-viewer.glade.h:10
-msgid "<b>Records</b>"
-msgstr "<b>Aufzeichnungen</b>"
+#: ../avahi-common/error.c:40
+msgid "Local name collision"
+msgstr "Lokale Namenskollision"
-#: ../src/audit-viewer.glade.h:11
-msgid "<b>Tab</b>"
-msgstr "<b>Tab</b>"
+#: ../avahi-common/error.c:41
+msgid "Invalid record"
+msgstr "Ungültiger Datensatz"
-#: ../src/audit-viewer.glade.h:12
-msgid "<b>_File</b>"
-msgstr "<b>_Datei</b>"
+#: ../avahi-common/error.c:43
+msgid "Invalid service name"
+msgstr "Ungültiger Dienstname"
-#: ../src/audit-viewer.glade.h:13
-msgid "<b>_System audit log</b>"
-msgstr "<b>_System-Audit-Protokoll</b>"
+#: ../avahi-common/error.c:44
+msgid "Invalid service type"
+msgstr "Ungültiger Diensttyp"
-#: ../src/audit-viewer.glade.h:14
-msgid "Audit Event Source"
-msgstr "Audit-Ewreignis-Quelle"
+#: ../avahi-common/error.c:45
+msgid "Invalid port number"
+msgstr "Ungültige Port-Nummer"
-#: ../src/audit-viewer.glade.h:15
-#: ../src/main_window.py:506
-msgid "Audit Viewer"
-msgstr "Audit Viewer"
+#: ../avahi-common/error.c:46
+msgid "Invalid record key"
+msgstr "Ungültiger Datensatzschlüssel"
-#: ../src/audit-viewer.glade.h:16
-msgid "Automatic file type e_xtension"
-msgstr "Automatische Dateityp-Er_weiterung"
+#: ../avahi-common/error.c:47
+msgid "Invalid address"
+msgstr "Ungültige Adresse"
-#: ../src/audit-viewer.glade.h:17
-msgid "Change _event source..."
-msgstr "Ändere _Ereignis-Quelle..."
+#: ../avahi-common/error.c:48
+msgid "Timeout reached"
+msgstr "Auszeit erreicht"
-#: ../src/audit-viewer.glade.h:18
-msgid "Columns"
-msgstr "Spalte"
+#: ../avahi-common/error.c:49
+msgid "Too many clients"
+msgstr "Zu viele Clients"
-#: ../src/audit-viewer.glade.h:19
-msgid "Current Co_lumn"
-msgstr "Aktuelle Sp_alte"
+#: ../avahi-common/error.c:50
+msgid "Too many objects"
+msgstr "Zu viele Objekte"
-#: ../src/audit-viewer.glade.h:20
-msgid "Current _Cell"
-msgstr "Aktuelle _Zelle"
+#: ../avahi-common/error.c:51
+msgid "Too many entries"
+msgstr "Zu viele Einträge"
-#: ../src/audit-viewer.glade.h:21
-msgid "Current _Row"
-msgstr "Aktuelle _Zeile"
+#: ../avahi-common/error.c:52
+msgid "OS Error"
+msgstr "Betriebssystemfehler"
-#: ../src/audit-viewer.glade.h:22
-msgid "Date Filter"
-msgstr "Datum-Filter"
+#: ../avahi-common/error.c:54
+msgid "Access denied"
+msgstr "Zugriff verweigert"
-#: ../src/audit-viewer.glade.h:23
-msgid "Event Details"
-msgstr "_Ereignis-Details"
+#: ../avahi-common/error.c:55
+msgid "Invalid operation"
+msgstr "Ungültige Operation"
-#: ../src/audit-viewer.glade.h:24
-msgid "Expression"
-msgstr "Ausdruck"
+#: ../avahi-common/error.c:56
+msgid "An unexpected D-Bus error occured"
+msgstr "Ein unerwarteter DBus-Fehler ist aufgetreten"
-#: ../src/audit-viewer.glade.h:25
-msgid "F_ield:"
-msgstr "F_eld:"
+#: ../avahi-common/error.c:57
+msgid "Daemon connection failed"
+msgstr "Verbindung zum Daemon fehlgeschlagen"
-#: ../src/audit-viewer.glade.h:26
-msgid "File _type:"
-msgstr "Datei-_Typ:"
+#: ../avahi-common/error.c:58
+msgid "Memory exhausted"
+msgstr "Verfügbarer Speicher ausgeschöpft"
-#: ../src/audit-viewer.glade.h:27
-msgid "Filter"
-msgstr "Filter"
+#: ../avahi-common/error.c:59
+msgid "The object passed in was not valid"
+msgstr "Das übergebene Objekt ist nicht gültig"
-#: ../src/audit-viewer.glade.h:28
-msgid "Filter:"
-msgstr "Filter:"
+#: ../avahi-common/error.c:60
+msgid "Daemon not running"
+msgstr "Daemon läuft nicht"
-#: ../src/audit-viewer.glade.h:29
-msgid "General"
-msgstr "Allgemeines"
+#: ../avahi-common/error.c:61
+msgid "Invalid interface index"
+msgstr "Ungültiger Schnittstellenindex"
-#: ../src/audit-viewer.glade.h:30
-msgid "Group _values by:"
-msgstr "_Werte gruppieren nach:"
+#: ../avahi-common/error.c:62
+msgid "Invalid protocol specification"
+msgstr "Ungültige Protokollspezifikation"
-#: ../src/audit-viewer.glade.h:31
-msgid "Grouping"
-msgstr "Gruppierung"
+#: ../avahi-common/error.c:63
+msgid "Invalid flags"
+msgstr "Ungültige Flags"
-#: ../src/audit-viewer.glade.h:32
-msgid "LIST/REPORT"
-msgstr "LISTE/BERICHT"
+#: ../avahi-common/error.c:65
+msgid "Not found"
+msgstr "Nicht gefunden"
-#: ../src/audit-viewer.glade.h:33
-msgid "New _List"
-msgstr "Neue _Liste"
+#: ../avahi-common/error.c:66
+msgid "Invalid configuration"
+msgstr "Ungültige Konfiguration"
-#: ../src/audit-viewer.glade.h:34
-msgid "New _Report on this View..."
-msgstr "Neuer _Bericht aus dieser Ansicht..."
+#: ../avahi-common/error.c:67
+msgid "Version mismatch"
+msgstr "Unpassende Version"
-#: ../src/audit-viewer.glade.h:35
-msgid "New _Report..."
-msgstr "Neuer _Bericht..."
+#: ../avahi-common/error.c:68
+msgid "Invalid service subtype"
+msgstr "Ungültiger Dienst-Untertyp"
-#: ../src/audit-viewer.glade.h:36
-msgid "Order:"
-msgstr "Reihenfolge:"
+#: ../avahi-common/error.c:69
+msgid "Invalid packet"
+msgstr "Ungültiges Paket"
-#: ../src/audit-viewer.glade.h:37
-msgid "Re_fresh"
-msgstr "Aktu_alisieren"
+#: ../avahi-common/error.c:70
+msgid "Invalid DNS return code"
+msgstr "Ungültiger DNS-Rückgabewert"
-#: ../src/audit-viewer.glade.h:38
-msgid "Serial number:"
-msgstr "Seriennummer:"
+#: ../avahi-common/error.c:71
+msgid "DNS failure: FORMERR"
+msgstr "DNS-Fehler: FORMERR"
-#: ../src/audit-viewer.glade.h:39
-msgid "Sort by:"
-msgstr "Sortieren nach:"
+#: ../avahi-common/error.c:72
+msgid "DNS failure: SERVFAIL"
+msgstr "DNS-Fehler: SERVFAIL"
-#: ../src/audit-viewer.glade.h:40
-msgid "The chart has too many data points. Please restrict your data filter or use coarser data grouping criteria."
-msgstr "Das Diagramm hat zu viele Datenpunkte. Bitte beschränken Sie Ihren Datenfilter oder benutzen Sie coarser-Datengruppierungkriterien."
+#: ../avahi-common/error.c:73
+msgid "DNS failure: NXDOMAIN"
+msgstr "DNS-Fehler: NXDOMAIN"
-#: ../src/audit-viewer.glade.h:41
-msgid "Time:"
-msgstr "Zeit:"
+#: ../avahi-common/error.c:74
+msgid "DNS failure: NOTIMP"
+msgstr "DNS-Fehler: NOTIMP"
-#: ../src/audit-viewer.glade.h:42
-msgid "You can add aditional conditions using the <tt>ausearch</tt> expression language. Run <tt>(man ausearch-expression)</tt> to read the documentation of the language."
-msgstr "Sie können zusätzliche Bedingungen hinzufügen mit der <tt>ausearch</tt>-Ausdruckssprache. Führen Sie <tt>(man ausearch-expression)</tt> aus, um die Dokumentaion dieser Sprache zu lesen."
+#: ../avahi-common/error.c:76
+msgid "DNS failure: REFUSED"
+msgstr "DNS-Fehler: REFUSED"
-#: ../src/audit-viewer.glade.h:43
-msgid "_Ascending"
-msgstr "_Aufsteigend"
+#: ../avahi-common/error.c:77
+msgid "DNS failure: YXDOMAIN"
+msgstr "DNS-Fehler: YXDOMAIN"
-#: ../src/audit-viewer.glade.h:44
-msgid "_Browse..."
-msgstr "_Durchsuchen..."
+#: ../avahi-common/error.c:78
+msgid "DNS failure: YXRRSET"
+msgstr "DNS-Fehler: YXRRSET"
-#: ../src/audit-viewer.glade.h:45
-msgid "_Close"
-msgstr "_Schliessen"
+#: ../avahi-common/error.c:79
+msgid "DNS failure: NXRRSET"
+msgstr "DNS-Fehler: NXRRSET"
-#: ../src/audit-viewer.glade.h:46
-msgid "_Descending"
-msgstr "_Absteigend"
+#: ../avahi-common/error.c:80
+msgid "DNS failure: NOTAUTH"
+msgstr "DNS-Fehler: NOTAUTH"
-#: ../src/audit-viewer.glade.h:47
-msgid "_Event Details"
-msgstr "_Ereignis-Details"
+#: ../avahi-common/error.c:81
+msgid "DNS failure: NOTZONE"
+msgstr "DNS-Fehler: NOTZONE"
-#: ../src/audit-viewer.glade.h:48
-msgid "_Event Time"
-msgstr "_Ereignis-Zeit"
+#: ../avahi-common/error.c:82
+msgid "Invalid RDATA"
+msgstr "Ungültige RDATA"
-#: ../src/audit-viewer.glade.h:49
-msgid "_Export..."
-msgstr "_Exportieren..."
+#: ../avahi-common/error.c:83
+msgid "Invalid DNS type"
+msgstr "Ungültiger DNS-Typ"
-#: ../src/audit-viewer.glade.h:50
-msgid "_Expression:"
-msgstr "_Ausdruck:"
+#: ../avahi-common/error.c:84
+msgid "Invalid DNS class"
+msgstr "Ungültige DNS-Klasse"
-#: ../src/audit-viewer.glade.h:51
-msgid "_Field:"
-msgstr "_Feld:"
+#: ../avahi-common/error.c:85
+msgid "Not supported"
+msgstr "Nicht unterstützt"
-#: ../src/audit-viewer.glade.h:52
-msgid "_Group values by:"
-msgstr "_Gruppen-Wert nach:"
+#: ../avahi-common/error.c:87
+msgid "Not permitted"
+msgstr "Nicht erlaubt"
-#: ../src/audit-viewer.glade.h:53
-msgid "_Help"
-msgstr "_Hilfe"
+#: ../avahi-common/error.c:88
+msgid "Invalid argument"
+msgstr "Ungültiges Argument"
-#: ../src/audit-viewer.glade.h:54
-msgid "_List Events for"
-msgstr "_Auflisten der Ereignissen nach"
+#: ../avahi-common/error.c:89
+msgid "Is empty"
+msgstr "ist leer"
-#: ../src/audit-viewer.glade.h:55
-msgid "_Log file:"
-msgstr "_Protokolldatei:"
-
-#: ../src/audit-viewer.glade.h:56
-msgid "_Name:"
-msgstr "_Name:"
-
-#: ../src/audit-viewer.glade.h:57
-msgid "_Next Event"
-msgstr "_Nächstes Ereignis"
-
-#: ../src/audit-viewer.glade.h:58
-msgid "_Open in new window"
-msgstr "_In neuem Fenster öffnen"
-
-#: ../src/audit-viewer.glade.h:59
-msgid "_Path:"
-msgstr "_Pfad:"
-
-#: ../src/audit-viewer.glade.h:60
-msgid "_Previous Event"
-msgstr "_Vorheriges Ereignis"
-
-#: ../src/audit-viewer.glade.h:61
-msgid "_Save Configuration as..."
-msgstr "_Speichere Konfiguration als..."
-
-#: ../src/audit-viewer.glade.h:62
-msgid "_Save layout as..."
-msgstr "_Speichere Anordnung als…"
-
-#: ../src/audit-viewer.glade.h:63
-msgid "_Show as a chart"
-msgstr "_Zeige als Diagramm"
-
-#: ../src/audit-viewer.glade.h:64
-msgid "_View"
-msgstr "_Ansicht"
-
-#: ../src/audit-viewer.glade.h:65
-msgid "_Window"
-msgstr "_Fenster"
-
-#: ../src/audit-viewer.glade.h:66
-msgid "gtk-about"
-msgstr "gtk-about"
-
-#: ../src/audit-viewer.glade.h:67
-msgid "gtk-apply"
-msgstr "gtk-apply"
-
-#: ../src/audit-viewer.glade.h:68
-msgid "gtk-close"
-msgstr "gtk-close"
-
-#: ../src/audit-viewer.glade.h:69
-msgid "gtk-open"
-msgstr "gtk-open"
-
-#: ../src/audit-viewer.glade.h:70
-msgid "gtk-properties"
-msgstr "gtk-properties"
-
-#: ../src/audit-viewer.glade.h:71
-msgid "gtk-quit"
-msgstr "gtk-quit"
-
-#: ../src/client.py:113
-msgid "Not enough data available"
-msgstr "Nicht genügend Daten verfügbar"
-
-#: ../src/event_dialog.py:48
-msgid "Field"
-msgstr "Feld"
-
-#: ../src/event_dialog.py:51
-msgid "Value"
-msgstr "Wert"
-
-#: ../src/event_dialog.py:58
-msgid "Record Type"
-msgstr "Aufzeichnungstyp"
-
-#: ../src/filters.py:204
-#, python-format
-msgid "date %s %s.%03d"
-msgstr "Datum %s %s.%03d"
-
-#: ../src/filters.py:205
-#: ../src/statistic.py:303
-msgid "%x %H:%M:%S"
-msgstr "%x %H:%M:%S"
-
-#: ../src/filters.py:257
-#, python-format
-msgid "date %s now"
-msgstr "Datum %s heute"
-
-#: ../src/filters.py:284
-#, python-format
-msgid "date %s %d minute ago"
-msgid_plural "date %s %d minutes ago"
-msgstr[0] "Datum %s %d Minute vergangen"
-msgstr[1] "Datum %s %d Minuten vergangen"
-
-#: ../src/filters.py:316
-#, python-format
-msgid "date %s today 00:00"
-msgstr "Datum %s Heute 00:00"
-
-#: ../src/filters.py:333
-#, python-format
-msgid "date %s yesterday 00:00"
-msgstr "Datum %s Gestern 00:00"
-
-#: ../src/filters.py:350
-#, python-format
-msgid "date %s start of this week"
-msgstr "Datum %s Start dieser Woche"
-
-#: ../src/filters.py:367
-#, python-format
-msgid "date %s start of this month"
-msgstr "Datum %s Start dieses Monat"
-
-#: ../src/filters.py:384
-#, python-format
-msgid "date %s start of this year"
-msgstr "Datum %s Start von diesem Jahr"
-
-#: ../src/list_properties.py:42
-msgid "Event date"
-msgstr "Ereignisdatum"
-
-#: ../src/list_properties.py:43
-msgid "Other fields"
-msgstr "Andere Felder"
-
-#: ../src/list_properties.py:53
-msgid "Column"
-msgstr "Spalte"
-
-#: ../src/list_properties.py:133
-msgid "Field name must not be empty"
-msgstr "Feldname darf nicht leer sein"
-
-#: ../src/list_tab.py:127
-msgid "_List"
-msgstr "_Liste"
-
-#: ../src/list_tab.py:145
-#, python-format
-msgid "List %d"
-msgstr "Liste %d"
-
-#: ../src/list_tab.py:173
-#: ../src/report_tab.py:90
-msgid "HTML"
-msgstr "HTML"
-
-#: ../src/list_tab.py:173
-#: ../src/report_tab.py:90
-msgid "CSV"
-msgstr "CSV"
-
-#: ../src/list_tab.py:174
-msgid "Raw log data"
-msgstr "Rohe Log-Daten"
-
-#: ../src/list_tab.py:175
-#: ../src/report_tab.py:91
-msgid "Export..."
-msgstr "Export..."
-
-#: ../src/list_tab.py:190
-#: ../src/main_window.py:436
-#: ../src/main_window.py:476
-#: ../src/report_tab.py:104
-#, python-format
-msgid "Error writing to %s: %s"
-msgstr "Fehler beim Schreiben von %s: %s"
-
-#: ../src/list_tab.py:200
-msgid ", "
-msgstr ", "
-
-#: ../src/list_tab.py:202
-msgid "None"
-msgstr "Nichts"
-
-#: ../src/list_tab.py:284
-msgid "Other Fields"
-msgstr "Andere Felder"
-
-#: ../src/list_tab.py:286
-msgid "Date"
-msgstr "Datum"
-
-#: ../src/main.py:41
-msgid "%prog [OPTION]... [FILE]..."
-msgstr "%prog [OPTION]... [DATEI]..."
-
-#: ../src/main.py:44
-msgid "Start an audit event viewer."
-msgstr "Starte eine Audit-Ereignis-Betrachter"
-
-#: ../src/main.py:48
-msgid "do not attempt to start the privileged backend for reading system audit logs"
-msgstr "versuchen Sie nicht das privilegierte Backend zum Lesen der System-Audit-Berichte zu starten"
-
-#: ../src/main.py:64
-#, python-format
-msgid "Error running audit-viewer-server: %s"
-msgstr "Fehler beim Laufenlassen von audit-viewer-server: %s"
-
-#: ../src/main_window.py:72
-msgid "Audit viewer layout"
-msgstr "Audit-Ansicht-Anordnung"
-
-#: ../src/main_window.py:222
-#, python-format
-msgid "A file named \"%s\" already exists. Do you want to replace it?"
-msgstr "Die Datei \"%s\" existiert bereits. Wollen Sie sie ersetzen?"
-
-#: ../src/main_window.py:226
-#, python-format
-msgid "The file already exists in \"%s\". Replacing it will overwrite its contents."
-msgstr "Die Datei existiert bereits in \"%s\" . Falls Sie sie ersetzen, wird ihre Inhalt überschreiben."
-
-#: ../src/main_window.py:232
-msgid "_Replace"
-msgstr "_Ersetzen"
-
-#: ../src/main_window.py:270
-#, python-format
-msgid "Error reading audit events: %s"
-msgstr "Fehler beim Lesen der Audit-Ereignisse: %s"
-
-#: ../src/main_window.py:293
-msgid "All files"
-msgstr "Alle Dateien"
-
-#: ../src/main_window.py:331
-msgid "Unexpected top element contents"
-msgstr "Unerwarteter Top-Elementinhalt"
-
-#: ../src/main_window.py:334
-#, python-format
-msgid "Unsupported file version %s"
-msgstr "Nicht unterstützte Datei-Version %s"
-
-#: ../src/main_window.py:351
-msgid "Unexpected top element"
-msgstr "Unerwartetes Topelement"
-
-#: ../src/main_window.py:359
-#, python-format
-msgid "Error reading %s: %s"
-msgstr "Fehler beim Lesen %s: %s"
-
-#: ../src/main_window.py:364
-#, python-format
-msgid "Invalid contents of %s: %s"
-msgstr "Ungültiger Inhalt von %s: %s"
-
-#: ../src/main_window.py:405
-msgid "Open..."
-msgstr "Öffnen..."
-
-#: ../src/main_window.py:419
-msgid "Save Layout As..."
-msgstr "Sichere Aufbau als..."
-
-#: ../src/main_window.py:460
-msgid "Save Configuration As..."
-msgstr "Sichere Konfiguration als..."
-
-#: ../src/main_window.py:523
-msgid "translator-credits"
-msgstr "Fabian Affolter <fab@fedoraproject.org>, 2008."
-
-#. This file is not installed; it is used only to make sure the strings
-#. used by Python's optparse module are translated.
-#: ../src/optparse_strings.py:3
-#, python-format
-msgid "no such option: %s"
-msgstr "Keine solche Option: %s"
-
-#: ../src/optparse_strings.py:4
-#, python-format
-msgid "ambiguous option: %s (%s?)"
-msgstr "Mehrdeutige Option: %s (%s?)"
-
-#: ../src/optparse_strings.py:5
-#, python-format
-msgid "Usage: %s\n"
-msgstr "Verwendung: %s\n"
-
-#: ../src/optparse_strings.py:6
-msgid "Usage"
-msgstr "Verwendung"
-
-#: ../src/optparse_strings.py:7
-msgid "integer"
-msgstr "Ganzzahl"
-
-#: ../src/optparse_strings.py:8
-msgid "long integer"
-msgstr "Lange Ganzzahl"
-
-#: ../src/optparse_strings.py:9
-msgid "floating-point"
-msgstr "Gleitkomma"
-
-#: ../src/optparse_strings.py:10
-msgid "complex"
-msgstr "Komplex"
-
-#: ../src/optparse_strings.py:11
-#, python-format
-msgid "option %s: invalid %s value: %r"
-msgstr "Option %s: ungültiger %s Wert: %r"
-
-#: ../src/optparse_strings.py:12
-#, python-format
-msgid "option %s: invalid choice: %r (choose from %s)"
-msgstr "Option %s: ungültige Wahl: %r (Wahl von %s)"
-
-#: ../src/optparse_strings.py:13
-msgid "show this help message and exit"
-msgstr "Diese Hilfe-Meldung ausgeben und beenden"
-
-#: ../src/optparse_strings.py:14
-msgid "show program's version number and exit"
-msgstr "Version des Programms anzeigen und beenden"
-
-#: ../src/optparse_strings.py:15
-msgid "%prog [options]"
-msgstr "%prog [Optionen]"
-
-#: ../src/optparse_strings.py:16
-#: ../src/optparse_strings.py:19
-#, python-format
-msgid "%s option requires an argument"
-msgstr "%s Option benötigt ein Argument"
-
-#: ../src/optparse_strings.py:17
-#: ../src/optparse_strings.py:20
-#, python-format
-msgid "%s option requires %d arguments"
-msgstr "%s Option benötigt %d Argumente"
-
-#: ../src/optparse_strings.py:18
-#, python-format
-msgid "%s option does not take a value"
-msgstr "%s Option benötigt keine Wert"
-
-#: ../src/optparse_strings.py:21
-msgid "Options"
-msgstr "Optionen"
-
-#: ../src/report_tab.py:56
-msgid "_Report"
-msgstr "_Bericht"
-
-#: ../src/report_tab.py:73
-#, python-format
-msgid "Report %d"
-msgstr "Bericht %d"
-
-#: ../src/report_tab.py:123
-#: ../src/report_tab.py:154
-msgid "Listing events for this column is not supported."
-msgstr "Auflisten von Ereignissen für diese Spalte ist nicht unterstützt."
-
-#: ../src/report_tab.py:126
-msgid "Listing events for this cell is not supported."
-msgstr "Auflisten von Ereignissen für diese Zelle ist nicht unterstützt."
-
-#: ../src/report_tab.py:131
-#: ../src/report_tab.py:142
-msgid "Listing events for this row is not supported."
-msgstr "Auflisten von Ereignissen für diese Zeile ist nicht unterstützt."
-
-#: ../src/report_tab.py:236
-#: ../src/report_tab.py:276
-#: ../src/report_tab.py:480
-msgid "Count"
-msgstr "Anzahl"
-
-#: ../src/search_entry.py:72
-msgid "Search..."
-msgstr "Suche..."
-
-#: ../src/server.c:128
-msgid "This program is only for use by audit-viewer and it should not be run manually.\n"
-msgstr "Dieses Programm ist nur für die Benutzung durch audit-viewer und es sollte nicht manuell gestartet werden.\n"
-
-#: ../src/server.c:141
+#: ../avahi-common/error.c:90
+msgid "The requested operation is invalid because redundant"
+msgstr "Die angeforderte Operation ist ungültig, da sie redundant ist"
+
+#: ../avahi-common/error.c:96
+msgid "Invalid Error Code"
+msgstr "Ungültiger Fehlercode"
+
+#: ../avahi-ui/avahi-ui.c:326
+#, c-format
+msgid "Avahi client failure: %s"
+msgstr "Avahi-Client-Fehler: %s"
+
+#: ../avahi-ui/avahi-ui.c:388
+#, c-format
+msgid "Avahi resolver failure: %s"
+msgstr "Avahi-Auflösungsfehler: %s"
+
+#: ../avahi-ui/avahi-ui.c:518
+#, c-format
+msgid "Browsing for service type %s in domain %s failed: %s"
+msgstr "Durchsuchen nach Dienst-Typen %s in Domain %s fehlgeschlagen: %s"
+
+#: ../avahi-ui/avahi-ui.c:519
+#: ../avahi-utils/avahi-browse.c:157
+#: ../avahi-utils/avahi-browse.c:158
+#: ../avahi-utils/avahi-browse.c:164
+#: ../avahi-utils/avahi-browse.c:165
+msgid "n/a"
+msgstr "k.A."
+
+#: ../avahi-ui/avahi-ui.c:649
+#, c-format
+msgid "Avahi domain browser failure: %s"
+msgstr "Avahi-Domainbrowser-Fehler: %s"
+
+#: ../avahi-ui/avahi-ui.c:684
+#, c-format
+msgid "Failed to read Avahi domain: %s"
+msgstr "Fehler beim Lesen der Avahi-Domain: %s"
+
+#: ../avahi-ui/avahi-ui.c:717
+#, c-format
+msgid "Failed to connect to Avahi server: %s"
+msgstr "Verbindung zu Avahi-Server fehlgeschlagen: %s"
+
+#: ../avahi-ui/avahi-ui.c:735
+msgid "Browsing for services on <b>local network</b>:"
+msgstr "Durchsuche <b>lokales Netzwerk</b> nach Diensten:"
+
+#: ../avahi-ui/avahi-ui.c:737
+#, c-format
+msgid "Browsing for services in domain <b>%s</b>:"
+msgstr "Durchsuche Domain <b>%s</b> nach Diensten:"
+
+#: ../avahi-ui/avahi-ui.c:773
+#, c-format
+msgid "Failed to create browser for %s: %s"
+msgstr "Browser-Erzeugung für %s fehlgeschlagen: %s"
+
+#: ../avahi-ui/avahi-ui.c:903
+#, c-format
+msgid "Failed to create resolver for %s of type %s in domain %s: %s"
+msgstr "Erzeugen eines Resolvers für %s vom Typ %s in Domain %s fehlgeschlagen: %s"
+
+#: ../avahi-ui/avahi-ui.c:978
+#, c-format
+msgid "Failed to create domain browser: %s"
+msgstr "Erzeugen eines Domainbrowser fehlgeschlagen: %s"
+
+#: ../avahi-ui/avahi-ui.c:989
+msgid "Change domain"
+msgstr "Domain ändern"
+
+#: ../avahi-ui/avahi-ui.c:1021
+msgid "Service Name"
+msgstr "Dienstname"
+
+#: ../avahi-ui/avahi-ui.c:1029
+#: ../avahi-ui/avahi-ui.c:1160
+msgid "Browsing ..."
+msgstr "Durchsuchen ..."
+
+#: ../avahi-ui/avahi-ui.c:1118
+msgid "Initializing..."
+msgstr "Initialisieren ..."
+
+#: ../avahi-ui/avahi-ui.c:1164
+msgid "_Domain..."
+msgstr "_Domain ..."
+
+#: ../avahi-ui/bssh.c:57
#, c-format
msgid ""
+"%s [options]\n"
"\n"
-"Report bugs to %s.\n"
+" -h --help Show this help\n"
+" -s --ssh Browse SSH servers\n"
+" -v --vnc Browse VNC servers\n"
+" -S --shell Browse both SSH and VNC\n"
+" -d --domain=DOMAIN The domain to browse in\n"
msgstr ""
+"%s [options]\n"
"\n"
-"Melden Sie Fehler an %s.\n"
+" -h --help Zeigt diese Hilfe an\n"
+" -s --ssh Durchsuchen nach SSH-Servern\n"
+" -v --vnc Durchsuchen nach VNC-Server\n"
+" -S --shell Durchsuchen nach beiden (SSH und VNC)\n"
+" -d --domain=DOMAIN Die Domain zum Durchsuchen\n"
+
+#: ../avahi-ui/bssh.c:103
+#: ../avahi-utils/avahi-browse.c:759
+#, c-format
+msgid "Too many arguments\n"
+msgstr "Zu viele Argumente\n"
+
+#: ../avahi-ui/bssh.c:147
+msgid "Choose Shell Server"
+msgstr "Shell-Server auswählen"
+
+#: ../avahi-ui/bssh.c:149
+msgid "Desktop"
+msgstr "Desktop"
+
+#: ../avahi-ui/bssh.c:150
+msgid "Terminal"
+msgstr "Terminal"
+
+#: ../avahi-ui/bssh.c:154
+msgid "Choose VNC server"
+msgstr "VNC-Server auswählen"
+
+#: ../avahi-ui/bssh.c:159
+msgid "Choose SSH server"
+msgstr "SSH-Dienst auswählen"
+
+#: ../avahi-ui/bssh.c:183
+#, c-format
+msgid "Connecting to '%s' ...\n"
+msgstr "Verbinde zu '%s' ...\n"
+
+#: ../avahi-ui/bssh.c:238
+#, c-format
+msgid "execlp() failed: %s\n"
+msgstr "execlp() fehlgeschlagen: %s\n"
+
+#: ../avahi-ui/bssh.c:248
+msgid "Canceled.\n"
+msgstr "Abgebrochen.\n"
+
+#: ../avahi-ui/bssh.desktop.in.h:1
+msgid "Avahi SSH Server Browser"
+msgstr "Avahi SSH Server Browser"
+
+#: ../avahi-ui/bssh.desktop.in.h:2
+msgid "Browse for Zeroconf-enabled SSH Servers"
+msgstr "Durchsuchen nach Zeroconf-aktivierten SSH-Servern"
+
+#: ../avahi-ui/bvnc.desktop.in.h:1
+msgid "Avahi VNC Server Browser"
+msgstr "Avahi VNC-Server-Browser"
+
+#: ../avahi-ui/bvnc.desktop.in.h:2
+msgid "Browse for Zeroconf-enabled VNC Servers"
+msgstr "Durchsuchen nach Zeroconf-aktivierten VNC-Servern"
+
+#: ../avahi-utils/avahi-browse.c:108
+#, c-format
+msgid ": All for now\n"
+msgstr ": Alle Einträge bisher\n"
+
+#: ../avahi-utils/avahi-browse.c:119
+#, c-format
+msgid ": Cache exhausted\n"
+msgstr ": Datencache erschöpft\n"
+
+#: ../avahi-utils/avahi-browse.c:223
+#: ../avahi-utils/avahi-browse.c:245
+#, c-format
+msgid "Failed to resolve service '%s' of type '%s' in domain '%s': %s\n"
+msgstr "Fehler beim Auflösen des Dienstes '%s' des Typ '%s' in Domain '%s': %s\n"
+
+#: ../avahi-utils/avahi-browse.c:324
+#, c-format
+msgid "service_browser failed: %s\n"
+msgstr "service_browser fehlgeschlagen: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:362
+#, c-format
+msgid "avahi_service_browser_new() failed: %s\n"
+msgstr "avahi_service_browser_new() fehlgeschlagen: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:398
+#, c-format
+msgid "service_type_browser failed: %s\n"
+msgstr "service_type_browser fehlgeschlagen: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:428
+#, c-format
+msgid "avahi_service_type_browser_new() failed: %s\n"
+msgstr "avahi_service_type_browser_new() fehlgeschlagen: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:503
+#, c-format
+msgid "avahi_domain_browser_new() failed: %s\n"
+msgstr "avahi_domain_browser_new() fehlgeschlagen: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:519
+#: ../avahi-utils/avahi-publish.c:391
+#: ../avahi-utils/avahi-resolve.c:282
+#: ../avahi-utils/avahi-set-host-name.c:170
+#, c-format
+msgid "Failed to query version string: %s\n"
+msgstr "Versionsstring-Abfrage fehlgeschlagen: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:524
+#: ../avahi-utils/avahi-publish.c:396
+#: ../avahi-utils/avahi-resolve.c:287
+#: ../avahi-utils/avahi-set-host-name.c:175
+#: ../avahi-utils/avahi-set-host-name.c:191
+#, c-format
+msgid "Failed to query host name: %s\n"
+msgstr "Hostname-Abfrage fehlgeschlagen: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:528
+#: ../avahi-utils/avahi-publish.c:400
+#: ../avahi-utils/avahi-resolve.c:291
+#: ../avahi-utils/avahi-set-host-name.c:179
+#, c-format
+msgid "Server version: %s; Host name: %s\n"
+msgstr "Server-Version: %s; Rechnername: %s\n"
+
+#. Translators: This is a column heading with abbreviations for
+#. * Event (+/-), Network Interface, Protocol (IPv4/v6), Domain
+#: ../avahi-utils/avahi-browse.c:533
+#, c-format
+msgid "E Ifce Prot Domain\n"
+msgstr "E Ifce Prot-Domain\n"
-#: ../src/server.c:148
+#. Translators: This is a column heading with abbreviations for
+#. * Event (+/-), Network Interface, Protocol (IPv4/v6), Domain
+#: ../avahi-utils/avahi-browse.c:537
+#, c-format
+msgid "E Ifce Prot %-*s %-20s Domain\n"
+msgstr "E Ifce Prot %-*s %-20s-Domain\n"
+
+#: ../avahi-utils/avahi-browse.c:537
+msgid "Name"
+msgstr "Name"
+
+#: ../avahi-utils/avahi-browse.c:537
+msgid "Type"
+msgstr "Typ"
+
+#. We have been disconnected, so let reconnect
+#: ../avahi-utils/avahi-browse.c:569
+#: ../avahi-utils/avahi-publish.c:165
+#, c-format
+msgid "Disconnected, reconnecting ...\n"
+msgstr "Nicht verbunden, neu verbinden ...\n"
+
+#: ../avahi-utils/avahi-browse.c:583
+#: ../avahi-utils/avahi-browse.c:813
+#: ../avahi-utils/avahi-publish.c:172
+#: ../avahi-utils/avahi-publish.c:383
+#: ../avahi-utils/avahi-resolve.c:274
+#: ../avahi-utils/avahi-set-host-name.c:162
+#, c-format
+msgid "Failed to create client object: %s\n"
+msgstr "Clientobjekt-Erzeugung fehlgeschlagen: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:588
+#: ../avahi-utils/avahi-publish.c:177
+#: ../avahi-utils/avahi-resolve.c:145
+#: ../avahi-utils/avahi-set-host-name.c:61
+#, c-format
+msgid "Client failure, exiting: %s\n"
+msgstr "Client-Fehler, beende: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:607
+#: ../avahi-utils/avahi-publish.c:208
+#, c-format
+msgid "Waiting for daemon ...\n"
+msgstr "Warte auf Daemon ...\n"
+
+#: ../avahi-utils/avahi-browse.c:631
+msgid ""
+" -h --help Show this help\n"
+" -V --version Show version\n"
+" -D --browse-domains Browse for browsing domains instead of services\n"
+" -a --all Show all services, regardless of the type\n"
+" -d --domain=DOMAIN The domain to browse in\n"
+" -v --verbose Enable verbose mode\n"
+" -t --terminate Terminate after dumping a more or less complete list\n"
+" -c --cache Terminate after dumping all entries from the cache\n"
+" -l --ignore-local Ignore local services\n"
+" -r --resolve Resolve services found\n"
+" -f --no-fail Don't fail if the daemon is not available\n"
+" -p --parsable Output in parsable format\n"
+msgstr ""
+" -h --help Zeigt diese Hilfe an\n"
+" -V --version Zeigt die Version an\n"
+" -D --browse-domains Durchsuche nach suchenden Domain statt nach Diensten\n"
+" -a --all Zeigt alle Dienste, ohne Rücksicht auf die Typen\n"
+" -d --domain=DOMAIN Die Domain zum Durchsuchen\n"
+" -v --verbose Aktiviert detaillierten Modus\n"
+" -t --terminate Beenden nach Ausgeben einer mehr oder weniger kompletten Liste\n"
+" -c --cache Beenden nach Ausgeben aller Einträge aus dem Cache\n"
+" -l --ignore-local Ignoriere lokale Dienste\n"
+" -r --resolve Löse gefundene Dienste auf\n"
+" -f --no-fail Schlägt nicht fehl, wenn der Daemon nicht verfügbar ist\n"
+" -p --parsable Ausgabe in parsbaren Format\n"
+
+#: ../avahi-utils/avahi-browse.c:644
+msgid ""
+" -k --no-db-lookup Don't lookup service types\n"
+" -b --dump-db Dump service type database\n"
+msgstr ""
+" -k --no-db-lookup Schlage Dienst-Typen nicht nach\n"
+" -b --dump-db Anzeigen der Dienst-Typen-Datenbank\n"
+
+#: ../avahi-utils/avahi-browse.c:750
+#: ../avahi-utils/avahi-resolve.c:221
+#, c-format
+msgid "Too few arguments\n"
+msgstr "Zu wenige Argumente\n"
+
+#: ../avahi-utils/avahi-browse.c:805
+#: ../avahi-utils/avahi-publish.c:375
+#: ../avahi-utils/avahi-resolve.c:266
+#: ../avahi-utils/avahi-set-host-name.c:154
+#, c-format
+msgid "Failed to create simple poll object.\n"
+msgstr "Fehler beim Erzeugen eines einfachen Abfrage-Objekts: \n"
+
+#: ../avahi-utils/avahi-publish.c:78
+#, c-format
+msgid "Established under name '%s'\n"
+msgstr "Eingerichtet unter dem Namen '%s'\n"
+
+#: ../avahi-utils/avahi-publish.c:83
+#, c-format
+msgid "Failed to register: %s\n"
+msgstr "Registrierung fehlgeschlagen: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:96
+#, c-format
+msgid "Name collision, picking new name '%s'.\n"
+msgstr "Namenskollision, wähle neuen Name '%s'.\n"
+
+#: ../avahi-utils/avahi-publish.c:116
+#, c-format
+msgid "Failed to create entry group: %s\n"
+msgstr "Fehler bei der Erzeugung der Einstiegsgruppe: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:126
+#, c-format
+msgid "Failed to add address: %s\n"
+msgstr "Fehler beim Hinzufügen der Adresse: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:136
+#, c-format
+msgid "Failed to add service: %s\n"
+msgstr "Fehler beim Hinzufügen des Dienstes: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:142
+#, c-format
+msgid "Failed to add subtype '%s': %s\n"
+msgstr "Fehler beim Hinzufügen des Untertyps: '%s': %s\n"
+
+#: ../avahi-utils/avahi-publish.c:193
+#, c-format
+msgid "Host name conflict\n"
+msgstr "Rechnername-Konflikt\n"
+
+#: ../avahi-utils/avahi-publish.c:218
+#, c-format
+msgid ""
+"%s [options] %s <name> <type> <port> [<txt ...>]\n"
+"%s [options] %s <host-name> <address>\n"
+"\n"
+" -h --help Show this help\n"
+" -V --version Show version\n"
+" -s --service Publish service\n"
+" -a --address Publish address\n"
+" -v --verbose Enable verbose mode\n"
+" -d --domain=DOMAIN Domain to publish service in\n"
+" -H --host=DOMAIN Host where service resides\n"
+" --subtype=SUBTYPE An additional subtype to register this service with\n"
+" -f --no-fail Don't fail if the daemon is not available\n"
+msgstr ""
+"%s [options] %s <name> <type> <port> [<txt ...>]\n"
+"%s [options] %s <host-name> <address>\n"
+"\n"
+" -h --help Zeigt diese Hilfe an\n"
+" -V --version Zeigt die Version an\n"
+" -s --service Veröffentlicht Service\n"
+" -a --address Veröffentlicht Addresse\n"
+" -v --verbose Aktiviert detaillierten Modus\n"
+" -d --domain=DOMAIN Domain zum Veröffentlichen des Dienstes auf\n"
+" -H --host=DOMAIN Host, wo sich der Service befindet\n"
+" --subtype=SUBTYPE Ein zusätzlicher Untertyp zum Registrieren des Dienstes mit\n"
+" -f --no-fail Schlägt nicht fehl, wenn der Daemon nicht verfügbar ist\n"
+
+#: ../avahi-utils/avahi-publish.c:300
+#: ../avahi-utils/avahi-publish.c:315
+#, c-format
+msgid "Bad number of arguments\n"
+msgstr "Ungültige Anzahl von Argumenten\n"
+
+#: ../avahi-utils/avahi-publish.c:326
+#, c-format
+msgid "Failed to parse port number: %s\n"
+msgstr "Parsen der Port-Nummer fehlgeschlagen: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:358
+#: ../avahi-utils/avahi-resolve.c:248
+#, c-format
+msgid "No command specified.\n"
+msgstr "Kein Befehl angegeben.\n"
+
+#: ../avahi-utils/avahi-resolve.c:91
+#, c-format
+msgid "Failed to resolve host name '%s': %s\n"
+msgstr "Fehler beim Auflösen des Rechnernamens '%s': %s\n"
+
+#: ../avahi-utils/avahi-resolve.c:128
+#, c-format
+msgid "Failed to resolve address '%s': %s\n"
+msgstr "Fehler beim Auflösen der Adresse '%s': %s\n"
+
+#: ../avahi-utils/avahi-resolve.c:159
+#, c-format
msgid ""
-"Copyright (C) 2008 Red Hat, Inc. All rights reserved.\n"
-"This software is distributed under the GPL v.2.\n"
+"%s [options] %s <host name ...>\n"
+"%s [options] %s <address ... >\n"
"\n"
-"This program is provided with NO WARRANTY, to the extent permitted by law."
+" -h --help Show this help\n"
+" -V --version Show version\n"
+" -n --name Resolve host name\n"
+" -a --address Resolve address\n"
+" -v --verbose Enable verbose mode\n"
+" -6 Lookup IPv6 address\n"
+" -4 Lookup IPv4 address\n"
msgstr ""
-"Copyright (C) 2008 Red Hat, Inc. Alle Rechte vorbehalten.\n"
-"Diese Software wird unter der GPL v.2 verteilt.\n"
+"%s [options] %s <host name ...>\n"
+"%s [options] %s <address ... >\n"
"\n"
-"Dieses Programm wird OHNE GEWÄHRLEISTUNG bereitgestellt, im gesetzlich ermöglichten Umfang."
-
-#: ../src/server.c:294
-msgid "The control file is not a socket"
-msgstr "Die Kontrolldatei ist keine Socket"
-
-#: ../src/server.c:309
-#, c-format
-msgid "Unknown server request %<PRIu32>"
-msgstr "Unbekannte Serveranforderung %<PRIu32>"
-
-#: ../src/source_dialog.py:58
-msgid "Audit Log File"
-msgstr "Audit-Protokoll-Datei"
-
-#: ../src/source_dialog.py:129
-#, python-format
-msgid "Error opening %s: %s"
-msgstr "Fehler beim Öffnen von %s: %s"
-
-#: ../src/statistic.py:166
-msgid "Unspecified"
-msgstr "Nicht angegeben"
-
-#: ../src/statistic.py:341
-#, python-format
-msgid "%x %X"
-msgstr "%x %X"
-
-#: ../src/statistic.py:355
-msgid "%x %H:%M"
-msgstr "%x %H:%M"
-
-#: ../src/statistic.py:365
-msgid "%x %H"
-msgstr "%x %H"
-
-#: ../src/statistic.py:389
-msgid "hour"
-msgstr "Stunde"
-
-#: ../src/statistic.py:392
-#, python-format
-msgid "%d hour"
-msgid_plural "%d hours"
-msgstr[0] "%d Stunde"
-msgstr[1] "%d Stunden"
-
-#: ../src/statistic.py:394
-msgid "minute"
-msgstr "Minute"
-
-#: ../src/statistic.py:397
-#, python-format
-msgid "%d minute"
-msgid_plural "%d minutes"
-msgstr[0] "%d Minute"
-msgstr[1] "%d Minuten"
-
-#: ../src/statistic.py:399
-msgid "second"
-msgstr "Sekunde"
-
-#: ../src/statistic.py:401
-#, python-format
-msgid "%d second"
-msgid_plural "%d seconds"
-msgstr[0] "%d Sekunde"
-msgstr[1] "%d Sekunden"
-
-#: ../src/statistic.py:456
-msgid "day"
-msgstr "Tag"
-
-#: ../src/statistic.py:476
-msgid "week"
-msgstr "Woche"
-
-#: ../src/statistic.py:504
-msgid "%b %Y"
-msgstr "%b %Y"
-
-#: ../src/statistic.py:521
-msgid "month"
-msgstr "Monat"
-
-#: ../src/tab_properties.py:130
-msgid "Specific time"
-msgstr "Angegebene Zeit"
-
-#: ../src/tab_properties.py:132
-msgid "Now"
-msgstr "Jetzt"
-
-#: ../src/tab_properties.py:133
-msgid "10 minutes ago"
-msgstr "Vor 10 Minuten"
-
-#: ../src/tab_properties.py:136
-msgid "Today"
-msgstr "Heute"
-
-#: ../src/tab_properties.py:137
-msgid "Yesterday"
-msgstr "Gestern"
-
-#: ../src/tab_properties.py:138
-msgid "This week"
-msgstr "Diese Woche"
-
-#: ../src/tab_properties.py:139
-msgid "This month"
-msgstr "Diesen Monat"
-
-#: ../src/tab_properties.py:141
-msgid "This year"
-msgstr "Dieses Jahr"
-
-#: ../src/tab_properties.py:184
-#, python-format
-msgid "Unsupported date filter \"%s\""
-msgstr "Nicht unterstützter Datumsfilter \"%s\""
-
-#: ../src/tab_properties.py:248
-msgid "Rule"
-msgstr "Regel"
-
-#: ../src/tab_properties.py:319
-#, python-format
-msgid "Unsupported timestamp operator in \"%s\""
-msgstr "Nicht unterstützter Zeitstempel in \"%s\""
-
-#: ../src/tab_properties.py:382
-msgid "Editing of some filters is not supported"
-msgstr "Bearbeiten von gewissen Filtern ist nicht unterstützt"
-
-#: ../src/tab_properties.py:384
-#, python-format
+" -h --help Zeigt diese Hilfe an\n"
+" -V --version Zeigt die Version an\n"
+" -n --name Löst Hostname auf\n"
+" -a --address Löst Addresse auf\n"
+" -v --verbose Aktiviert detaillierten Modus\n"
+" -6 Schlägt IPv6-Addresse nach\n"
+" -4 Schlägt IPv4-Addresse nach\n"
+
+#: ../avahi-utils/avahi-resolve.c:301
+#: ../avahi-utils/avahi-set-host-name.c:183
+#, c-format
+msgid "Failed to create host name resolver: %s\n"
+msgstr "Fehler beim Erzeugen des Rechneramen-Auflösers: %s\n"
+
+#: ../avahi-utils/avahi-resolve.c:311
+#, c-format
+msgid "Failed to parse address '%s'\n"
+msgstr "Fehler beim Parsern der Adresse '%s'\n"
+
+#: ../avahi-utils/avahi-resolve.c:316
+#, c-format
+msgid "Failed to create address resolver: %s\n"
+msgstr "Fehler beim Erzeugen des Adress-Auflösers: %s\n"
+
+#: ../avahi-utils/avahi-set-host-name.c:75
+#, c-format
msgid ""
-"If you edit properties of this tab, these filters will be dropped from the tab's configuration:\n"
-"%s\n"
-"Do you still want to edit properties of this tab?"
+"%s [options] <new host name>\n"
+"\n"
+" -h --help Show this help\n"
+" -V --version Show version\n"
+" -v --verbose Enable verbose mode\n"
msgstr ""
-"Wenn Sie die Eigenschaften dieses Registers bearbeiten, diese Filter aus der Register-Konfiguration werden verworfen:\n"
-"%s\n"
-"Wollen Sie immer nich die Eigenschaften dieses Registers bearbeiten?"
-
-#: ../src/tab_properties.py:400
-msgid "Tab name must not be empty"
-msgstr "Tab-Name darf nicht leer sein"
-
-#. self._validate_get_failure() doesn't allow empty tab name
-#: ../src/tab_properties.py:425
-#, python-format
-msgid "%s Properties"
-msgstr "%s-Eigenschaften"
-
-#: ../src/util.py:245
-#, python-format
-msgid "Invalid <%s %s> value %s"
-msgstr "Ungültiger <%s %s>-Wert %s"
-
-#: ../src/util.py:250
-#, python-format
-msgid "Unknown <%s %s> value %s"
-msgstr "Wert <%s %s> unbekannt %s"
-
-#: ../src/util.py:257
-#, python-format
-msgid "Attribute %s missing in <%s>"
-msgstr "Fehlendes %s-Attribut in <%s>"
-
-#: ../audit-viewer.desktop.in.h:1
-msgid "Audit Logs"
-msgstr "Audit-Protokolle"
-
-#: ../audit-viewer.desktop.in.h:2
-msgid "View audit logs"
-msgstr "Audit-Protokoll ansehen"
-
-#: ../audit-viewer.xml.in.h:1
-msgid "Audit viewer configuration"
-msgstr "Audit-Ansicht-Konfiguration"
+"%s [options] <new host name>\n"
+"\n"
+" -h --help Zeigt diese Hilfe an\n"
+" -V --version Zeigt die Version an\n"
+" -v --verbose Aktiviert detaillierten Modus\n"
+
+#: ../avahi-utils/avahi-set-host-name.c:116
+#, c-format
+msgid "Invalid number of arguments, expecting exactly one.\n"
+msgstr "Ungültige Anzahl von Argumenten, erwartet wird genau eines.\n"
+#: ../avahi-utils/avahi-set-host-name.c:195
+#, c-format
+msgid "Host name successfully changed to %s\n"
+msgstr "Rechnername erfolgreich geändert auf %s\n"
+
+#~ msgid "."
+#~ msgstr "."
+#~ msgid ":"
+#~ msgstr ":"
+#~ msgid "<b>Event Order</b>"
+#~ msgstr "<b>Ereignis-Reihenfolge</b>"
+#~ msgid "<b>Group Columns _by:</b>"
+#~ msgstr "<b>Gruppiere Spalte _nach:</b>"
+#~ msgid "<b>Group Rows by:</b>"
+#~ msgstr "<b>Gruppiere Zeile nach:</b>"
+#~ msgid "<b>Identification</b>"
+#~ msgstr "<b>Identifikation</b>"
+#~ msgid "<b>Limit to events _before:</b>"
+#~ msgstr "<b>Limit zu Er _before:</b>"
+#~ msgid "<b>Limit to events not _earlier than:</b>"
+#~ msgstr "<b>Limitieren auf Ereignisse nicht _später als:</b>"
+#~ msgid "<b>Records</b>"
+#~ msgstr "<b>Aufzeichnungen</b>"
+#~ msgid "<b>Tab</b>"
+#~ msgstr "<b>Tab</b>"
+#~ msgid "<b>_File</b>"
+#~ msgstr "<b>_Datei</b>"
+#~ msgid "<b>_System audit log</b>"
+#~ msgstr "<b>_System-Audit-Protokoll</b>"
+#~ msgid "Audit Event Source"
+#~ msgstr "Audit-Ewreignis-Quelle"
+#~ msgid "Audit Viewer"
+#~ msgstr "Audit Viewer"
+#~ msgid "Automatic file type e_xtension"
+#~ msgstr "Automatische Dateityp-Er_weiterung"
+#~ msgid "Change _event source..."
+#~ msgstr "Ändere _Ereignis-Quelle..."
+#~ msgid "Columns"
+#~ msgstr "Spalte"
+#~ msgid "Current Co_lumn"
+#~ msgstr "Aktuelle Sp_alte"
+#~ msgid "Current _Cell"
+#~ msgstr "Aktuelle _Zelle"
+#~ msgid "Current _Row"
+#~ msgstr "Aktuelle _Zeile"
+#~ msgid "Date Filter"
+#~ msgstr "Datum-Filter"
+#~ msgid "Event Details"
+#~ msgstr "_Ereignis-Details"
+#~ msgid "Expression"
+#~ msgstr "Ausdruck"
+#~ msgid "F_ield:"
+#~ msgstr "F_eld:"
+#~ msgid "File _type:"
+#~ msgstr "Datei-_Typ:"
+#~ msgid "Filter"
+#~ msgstr "Filter"
+#~ msgid "Filter:"
+#~ msgstr "Filter:"
+#~ msgid "General"
+#~ msgstr "Allgemeines"
+#~ msgid "Group _values by:"
+#~ msgstr "_Werte gruppieren nach:"
+#~ msgid "Grouping"
+#~ msgstr "Gruppierung"
+#~ msgid "LIST/REPORT"
+#~ msgstr "LISTE/BERICHT"
+#~ msgid "New _List"
+#~ msgstr "Neue _Liste"
+#~ msgid "New _Report on this View..."
+#~ msgstr "Neuer _Bericht aus dieser Ansicht..."
+#~ msgid "New _Report..."
+#~ msgstr "Neuer _Bericht..."
+#~ msgid "Order:"
+#~ msgstr "Reihenfolge:"
+#~ msgid "Re_fresh"
+#~ msgstr "Aktu_alisieren"
+#~ msgid "Serial number:"
+#~ msgstr "Seriennummer:"
+#~ msgid "Sort by:"
+#~ msgstr "Sortieren nach:"
+#~ msgid ""
+#~ "The chart has too many data points. Please restrict your data filter or "
+#~ "use coarser data grouping criteria."
+#~ msgstr ""
+#~ "Das Diagramm hat zu viele Datenpunkte. Bitte beschränken Sie Ihren "
+#~ "Datenfilter oder benutzen Sie coarser-Datengruppierungkriterien."
+#~ msgid "Time:"
+#~ msgstr "Zeit:"
+#~ msgid ""
+#~ "You can add aditional conditions using the <tt>ausearch</tt> expression "
+#~ "language. Run <tt>(man ausearch-expression)</tt> to read the "
+#~ "documentation of the language."
+#~ msgstr ""
+#~ "Sie können zusätzliche Bedingungen hinzufügen mit der <tt>ausearch</tt>-"
+#~ "Ausdruckssprache. Führen Sie <tt>(man ausearch-expression)</tt> aus, um "
+#~ "die Dokumentaion dieser Sprache zu lesen."
+#~ msgid "_Ascending"
+#~ msgstr "_Aufsteigend"
+#~ msgid "_Close"
+#~ msgstr "_Schliessen"
+#~ msgid "_Descending"
+#~ msgstr "_Absteigend"
+#~ msgid "_Event Details"
+#~ msgstr "_Ereignis-Details"
+#~ msgid "_Event Time"
+#~ msgstr "_Ereignis-Zeit"
+#~ msgid "_Export..."
+#~ msgstr "_Exportieren..."
+#~ msgid "_Expression:"
+#~ msgstr "_Ausdruck:"
+#~ msgid "_Field:"
+#~ msgstr "_Feld:"
+#~ msgid "_Group values by:"
+#~ msgstr "_Gruppen-Wert nach:"
+#~ msgid "_Help"
+#~ msgstr "_Hilfe"
+#~ msgid "_List Events for"
+#~ msgstr "_Auflisten der Ereignissen nach"
+#~ msgid "_Log file:"
+#~ msgstr "_Protokolldatei:"
+#~ msgid "_Next Event"
+#~ msgstr "_Nächstes Ereignis"
+#~ msgid "_Open in new window"
+#~ msgstr "_In neuem Fenster öffnen"
+#~ msgid "_Path:"
+#~ msgstr "_Pfad:"
+#~ msgid "_Previous Event"
+#~ msgstr "_Vorheriges Ereignis"
+#~ msgid "_Save Configuration as..."
+#~ msgstr "_Speichere Konfiguration als..."
+#~ msgid "_Save layout as..."
+#~ msgstr "_Speichere Anordnung als…"
+#~ msgid "_Show as a chart"
+#~ msgstr "_Zeige als Diagramm"
+#~ msgid "_View"
+#~ msgstr "_Ansicht"
+#~ msgid "_Window"
+#~ msgstr "_Fenster"
+#~ msgid "gtk-about"
+#~ msgstr "gtk-about"
+#~ msgid "gtk-apply"
+#~ msgstr "gtk-apply"
+#~ msgid "gtk-close"
+#~ msgstr "gtk-close"
+#~ msgid "gtk-open"
+#~ msgstr "gtk-open"
+#~ msgid "gtk-properties"
+#~ msgstr "gtk-properties"
+#~ msgid "gtk-quit"
+#~ msgstr "gtk-quit"
+#~ msgid "Not enough data available"
+#~ msgstr "Nicht genügend Daten verfügbar"
+#~ msgid "Field"
+#~ msgstr "Feld"
+#~ msgid "Value"
+#~ msgstr "Wert"
+#~ msgid "Record Type"
+#~ msgstr "Aufzeichnungstyp"
+#~ msgid "date %s %s.%03d"
+#~ msgstr "Datum %s %s.%03d"
+#~ msgid "%x %H:%M:%S"
+#~ msgstr "%x %H:%M:%S"
+#~ msgid "date %s now"
+#~ msgstr "Datum %s heute"
+#~ msgid "date %s %d minute ago"
+#~ msgid_plural "date %s %d minutes ago"
+#~ msgstr[0] "Datum %s %d Minute vergangen"
+#~ msgstr[1] "Datum %s %d Minuten vergangen"
+#~ msgid "date %s today 00:00"
+#~ msgstr "Datum %s Heute 00:00"
+#~ msgid "date %s yesterday 00:00"
+#~ msgstr "Datum %s Gestern 00:00"
+#~ msgid "date %s start of this week"
+#~ msgstr "Datum %s Start dieser Woche"
+#~ msgid "date %s start of this month"
+#~ msgstr "Datum %s Start dieses Monat"
+#~ msgid "date %s start of this year"
+#~ msgstr "Datum %s Start von diesem Jahr"
+#~ msgid "Event date"
+#~ msgstr "Ereignisdatum"
+#~ msgid "Other fields"
+#~ msgstr "Andere Felder"
+#~ msgid "Column"
+#~ msgstr "Spalte"
+#~ msgid "Field name must not be empty"
+#~ msgstr "Feldname darf nicht leer sein"
+#~ msgid "_List"
+#~ msgstr "_Liste"
+#~ msgid "List %d"
+#~ msgstr "Liste %d"
+#~ msgid "HTML"
+#~ msgstr "HTML"
+#~ msgid "CSV"
+#~ msgstr "CSV"
+#~ msgid "Raw log data"
+#~ msgstr "Rohe Log-Daten"
+#~ msgid "Export..."
+#~ msgstr "Export..."
+#~ msgid "Error writing to %s: %s"
+#~ msgstr "Fehler beim Schreiben von %s: %s"
+#~ msgid ", "
+#~ msgstr ", "
+#~ msgid "None"
+#~ msgstr "Nichts"
+#~ msgid "Other Fields"
+#~ msgstr "Andere Felder"
+#~ msgid "Date"
+#~ msgstr "Datum"
+#~ msgid "%prog [OPTION]... [FILE]..."
+#~ msgstr "%prog [OPTION]... [DATEI]..."
+#~ msgid "Start an audit event viewer."
+#~ msgstr "Starte eine Audit-Ereignis-Betrachter"
+#~ msgid ""
+#~ "do not attempt to start the privileged backend for reading system audit "
+#~ "logs"
+#~ msgstr ""
+#~ "versuchen Sie nicht das privilegierte Backend zum Lesen der System-Audit-"
+#~ "Berichte zu starten"
+#~ msgid "Error running audit-viewer-server: %s"
+#~ msgstr "Fehler beim Laufenlassen von audit-viewer-server: %s"
+#~ msgid "Audit viewer layout"
+#~ msgstr "Audit-Ansicht-Anordnung"
+#~ msgid "A file named \"%s\" already exists. Do you want to replace it?"
+#~ msgstr "Die Datei \"%s\" existiert bereits. Wollen Sie sie ersetzen?"
+#~ msgid ""
+#~ "The file already exists in \"%s\". Replacing it will overwrite its "
+#~ "contents."
+#~ msgstr ""
+#~ "Die Datei existiert bereits in \"%s\" . Falls Sie sie ersetzen, wird ihre "
+#~ "Inhalt überschreiben."
+#~ msgid "_Replace"
+#~ msgstr "_Ersetzen"
+#~ msgid "Error reading audit events: %s"
+#~ msgstr "Fehler beim Lesen der Audit-Ereignisse: %s"
+#~ msgid "All files"
+#~ msgstr "Alle Dateien"
+#~ msgid "Unexpected top element contents"
+#~ msgstr "Unerwarteter Top-Elementinhalt"
+#~ msgid "Unsupported file version %s"
+#~ msgstr "Nicht unterstützte Datei-Version %s"
+#~ msgid "Unexpected top element"
+#~ msgstr "Unerwartetes Topelement"
+#~ msgid "Error reading %s: %s"
+#~ msgstr "Fehler beim Lesen %s: %s"
+#~ msgid "Invalid contents of %s: %s"
+#~ msgstr "Ungültiger Inhalt von %s: %s"
+#~ msgid "Open..."
+#~ msgstr "Öffnen..."
+#~ msgid "Save Layout As..."
+#~ msgstr "Sichere Aufbau als..."
+#~ msgid "Save Configuration As..."
+#~ msgstr "Sichere Konfiguration als..."
+#~ msgid "translator-credits"
+#~ msgstr "Fabian Affolter <fab@fedoraproject.org>, 2008."
+#~ msgid "no such option: %s"
+#~ msgstr "Keine solche Option: %s"
+#~ msgid "ambiguous option: %s (%s?)"
+#~ msgstr "Mehrdeutige Option: %s (%s?)"
+#~ msgid "Usage: %s\n"
+#~ msgstr "Verwendung: %s\n"
+#~ msgid "Usage"
+#~ msgstr "Verwendung"
+#~ msgid "integer"
+#~ msgstr "Ganzzahl"
+#~ msgid "long integer"
+#~ msgstr "Lange Ganzzahl"
+#~ msgid "floating-point"
+#~ msgstr "Gleitkomma"
+#~ msgid "complex"
+#~ msgstr "Komplex"
+#~ msgid "option %s: invalid %s value: %r"
+#~ msgstr "Option %s: ungültiger %s Wert: %r"
+#~ msgid "option %s: invalid choice: %r (choose from %s)"
+#~ msgstr "Option %s: ungültige Wahl: %r (Wahl von %s)"
+#~ msgid "show this help message and exit"
+#~ msgstr "Diese Hilfe-Meldung ausgeben und beenden"
+#~ msgid "show program's version number and exit"
+#~ msgstr "Version des Programms anzeigen und beenden"
+#~ msgid "%prog [options]"
+#~ msgstr "%prog [Optionen]"
+#~ msgid "%s option requires an argument"
+#~ msgstr "%s Option benötigt ein Argument"
+#~ msgid "%s option requires %d arguments"
+#~ msgstr "%s Option benötigt %d Argumente"
+#~ msgid "%s option does not take a value"
+#~ msgstr "%s Option benötigt keine Wert"
+#~ msgid "Options"
+#~ msgstr "Optionen"
+#~ msgid "_Report"
+#~ msgstr "_Bericht"
+#~ msgid "Report %d"
+#~ msgstr "Bericht %d"
+#~ msgid "Listing events for this column is not supported."
+#~ msgstr "Auflisten von Ereignissen für diese Spalte ist nicht unterstützt."
+#~ msgid "Listing events for this cell is not supported."
+#~ msgstr "Auflisten von Ereignissen für diese Zelle ist nicht unterstützt."
+#~ msgid "Listing events for this row is not supported."
+#~ msgstr "Auflisten von Ereignissen für diese Zeile ist nicht unterstützt."
+#~ msgid "Count"
+#~ msgstr "Anzahl"
+#~ msgid "Search..."
+#~ msgstr "Suche..."
+#~ msgid ""
+#~ "This program is only for use by audit-viewer and it should not be run "
+#~ "manually.\n"
+#~ msgstr ""
+#~ "Dieses Programm ist nur für die Benutzung durch audit-viewer und es "
+#~ "sollte nicht manuell gestartet werden.\n"
+#~ msgid ""
+#~ "\n"
+#~ "Report bugs to %s.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Melden Sie Fehler an %s.\n"
+#~ msgid ""
+#~ "Copyright (C) 2008 Red Hat, Inc. All rights reserved.\n"
+#~ "This software is distributed under the GPL v.2.\n"
+#~ "\n"
+#~ "This program is provided with NO WARRANTY, to the extent permitted by law."
+#~ msgstr ""
+#~ "Copyright (C) 2008 Red Hat, Inc. Alle Rechte vorbehalten.\n"
+#~ "Diese Software wird unter der GPL v.2 verteilt.\n"
+#~ "\n"
+#~ "Dieses Programm wird OHNE GEWÄHRLEISTUNG bereitgestellt, im gesetzlich "
+#~ "ermöglichten Umfang."
+#~ msgid "The control file is not a socket"
+#~ msgstr "Die Kontrolldatei ist keine Socket"
+#~ msgid "Unknown server request %<PRIu32>"
+#~ msgstr "Unbekannte Serveranforderung %<PRIu32>"
+#~ msgid "Audit Log File"
+#~ msgstr "Audit-Protokoll-Datei"
+#~ msgid "Error opening %s: %s"
+#~ msgstr "Fehler beim Öffnen von %s: %s"
+#~ msgid "%x %X"
+#~ msgstr "%x %X"
+#~ msgid "%x %H:%M"
+#~ msgstr "%x %H:%M"
+#~ msgid "%x %H"
+#~ msgstr "%x %H"
+#~ msgid "hour"
+#~ msgstr "Stunde"
+#~ msgid "%d hour"
+#~ msgid_plural "%d hours"
+#~ msgstr[0] "%d Stunde"
+#~ msgstr[1] "%d Stunden"
+#~ msgid "minute"
+#~ msgstr "Minute"
+#~ msgid "%d minute"
+#~ msgid_plural "%d minutes"
+#~ msgstr[0] "%d Minute"
+#~ msgstr[1] "%d Minuten"
+#~ msgid "second"
+#~ msgstr "Sekunde"
+#~ msgid "%d second"
+#~ msgid_plural "%d seconds"
+#~ msgstr[0] "%d Sekunde"
+#~ msgstr[1] "%d Sekunden"
+#~ msgid "day"
+#~ msgstr "Tag"
+#~ msgid "week"
+#~ msgstr "Woche"
+#~ msgid "%b %Y"
+#~ msgstr "%b %Y"
+#~ msgid "month"
+#~ msgstr "Monat"
+#~ msgid "Specific time"
+#~ msgstr "Angegebene Zeit"
+#~ msgid "Now"
+#~ msgstr "Jetzt"
+#~ msgid "10 minutes ago"
+#~ msgstr "Vor 10 Minuten"
+#~ msgid "Today"
+#~ msgstr "Heute"
+#~ msgid "Yesterday"
+#~ msgstr "Gestern"
+#~ msgid "This week"
+#~ msgstr "Diese Woche"
+#~ msgid "This month"
+#~ msgstr "Diesen Monat"
+#~ msgid "This year"
+#~ msgstr "Dieses Jahr"
+#~ msgid "Unsupported date filter \"%s\""
+#~ msgstr "Nicht unterstützter Datumsfilter \"%s\""
+#~ msgid "Rule"
+#~ msgstr "Regel"
+#~ msgid "Unsupported timestamp operator in \"%s\""
+#~ msgstr "Nicht unterstützter Zeitstempel in \"%s\""
+#~ msgid "Editing of some filters is not supported"
+#~ msgstr "Bearbeiten von gewissen Filtern ist nicht unterstützt"
+#~ msgid ""
+#~ "If you edit properties of this tab, these filters will be dropped from "
+#~ "the tab's configuration:\n"
+#~ "%s\n"
+#~ "Do you still want to edit properties of this tab?"
+#~ msgstr ""
+#~ "Wenn Sie die Eigenschaften dieses Registers bearbeiten, diese Filter aus "
+#~ "der Register-Konfiguration werden verworfen:\n"
+#~ "%s\n"
+#~ "Wollen Sie immer nich die Eigenschaften dieses Registers bearbeiten?"
+#~ msgid "Tab name must not be empty"
+#~ msgstr "Tab-Name darf nicht leer sein"
+#~ msgid "%s Properties"
+#~ msgstr "%s-Eigenschaften"
+#~ msgid "Invalid <%s %s> value %s"
+#~ msgstr "Ungültiger <%s %s>-Wert %s"
+#~ msgid "Unknown <%s %s> value %s"
+#~ msgstr "Wert <%s %s> unbekannt %s"
+#~ msgid "Attribute %s missing in <%s>"
+#~ msgstr "Fehlendes %s-Attribut in <%s>"
+#~ msgid "Audit Logs"
+#~ msgstr "Audit-Protokolle"
+#~ msgid "View audit logs"
+#~ msgstr "Audit-Protokoll ansehen"
#~ msgid "Report Properties"
#~ msgstr "Bericht-Eigenschaften"
#~ msgid "_File"
diff --git a/po/es.po b/po/es.po
index d0d610b..6a2c388 100644
--- a/po/es.po
+++ b/po/es.po
@@ -1,326 +1,321 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+# Spanish translation for avahi
+# Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008
+# This file is distributed under the same license as the avahi package.
#
+# Jorge González <jorgegonz@svn.gnome.org>, 2008.
msgid ""
msgstr ""
"Project-Id-Version: Avahi\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-06-17 04:34+0000\n"
-"PO-Revision-Date: 2008-06-25 10:48-0600\n"
-"Last-Translator: Juan M. Rodriguez <nushio@fedoraproject.org>\n"
-"Language-Team: Spanish Translation Team <fedora-trans-es@redhat.com>\n"
+"POT-Creation-Date: 2008-10-12 04:09+0000\n"
+"PO-Revision-Date: 2008-11-09 16:47+0100\n"
+"Last-Translator: Jorge González <jorgegonz@svn.gnome.org>\n"
+"Language-Team: Español <gnome-es-list@gnome.org>\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Poedit-Language: Spanish\n"
-"X-Poedit-Country: MEXICO\n"
-"X-Poedit-SourceCharset: utf-8\n"
+"X-Launchpad-Export-Date: 2008-10-27 02:52+0000\n"
+"X-Generator: Launchpad (build Unknown)\n"
#: ../avahi-common/error.c:32
msgid "OK"
-msgstr "Ok"
+msgstr "Aceptar"
#: ../avahi-common/error.c:33
msgid "Operation failed"
-msgstr "La Operación Falló"
+msgstr "Falló la operación"
#: ../avahi-common/error.c:34
msgid "Bad state"
-msgstr "Mal Estado"
+msgstr "Estado incorrecto"
#: ../avahi-common/error.c:35
-#, fuzzy
msgid "Invalid host name"
-msgstr "Hostname invalido"
+msgstr "Nombre de equipo no válido"
#: ../avahi-common/error.c:36
msgid "Invalid domain name"
-msgstr "Nombre del Dominio Invalido"
+msgstr "Nombre de dominio no válido"
#: ../avahi-common/error.c:37
msgid "No suitable network protocol available"
-msgstr "No hay protocolos de red compatibles disponibles"
+msgstr "No hay disponible ningún protocolo de red apropiado"
#: ../avahi-common/error.c:38
msgid "Invalid DNS TTL"
-msgstr "TTL de DNS invalido"
+msgstr "El TTL del DNS no es válido"
#: ../avahi-common/error.c:39
msgid "Resource record key is pattern"
-msgstr ""
+msgstr "La clave del recurso de registro es un patrón"
#: ../avahi-common/error.c:40
msgid "Local name collision"
-msgstr ""
+msgstr "Colisión de nombre local"
#: ../avahi-common/error.c:41
msgid "Invalid record"
-msgstr ""
+msgstr "Registro no válido"
#: ../avahi-common/error.c:43
msgid "Invalid service name"
-msgstr ""
+msgstr "Nombre de servicio no válido"
#: ../avahi-common/error.c:44
msgid "Invalid service type"
-msgstr ""
+msgstr "Tipo de servicio no válido"
#: ../avahi-common/error.c:45
msgid "Invalid port number"
-msgstr ""
+msgstr "Número de puerto no válido"
#: ../avahi-common/error.c:46
msgid "Invalid record key"
-msgstr ""
+msgstr "Clave de registro no válida"
#: ../avahi-common/error.c:47
msgid "Invalid address"
-msgstr ""
+msgstr "Dirección no válida"
#: ../avahi-common/error.c:48
msgid "Timeout reached"
-msgstr ""
+msgstr "Se ha alcanzado el tiempo de espera establecido"
#: ../avahi-common/error.c:49
msgid "Too many clients"
-msgstr ""
+msgstr "Demasiados clientes"
#: ../avahi-common/error.c:50
msgid "Too many objects"
-msgstr ""
+msgstr "Demasiados objetos"
#: ../avahi-common/error.c:51
msgid "Too many entries"
-msgstr ""
+msgstr "Demasiadas entradas"
#: ../avahi-common/error.c:52
msgid "OS Error"
-msgstr ""
+msgstr "Error de SO"
#: ../avahi-common/error.c:54
msgid "Access denied"
-msgstr ""
+msgstr "Acceso denegado"
#: ../avahi-common/error.c:55
msgid "Invalid operation"
-msgstr ""
+msgstr "Operación no válida"
#: ../avahi-common/error.c:56
msgid "An unexpected D-Bus error occured"
-msgstr ""
+msgstr "Ocurrió un error de D-Bus no esperado"
#: ../avahi-common/error.c:57
msgid "Daemon connection failed"
-msgstr ""
+msgstr "Falló la conexión con el demonio"
#: ../avahi-common/error.c:58
msgid "Memory exhausted"
-msgstr ""
+msgstr "Memoria agotada"
#: ../avahi-common/error.c:59
msgid "The object passed in was not valid"
-msgstr ""
+msgstr "El objeto pasado no era válido"
#: ../avahi-common/error.c:60
msgid "Daemon not running"
-msgstr ""
+msgstr "El demonio no se está ejecutando"
#: ../avahi-common/error.c:61
msgid "Invalid interface index"
-msgstr ""
+msgstr "Índice de interfaz no válido"
#: ../avahi-common/error.c:62
msgid "Invalid protocol specification"
-msgstr ""
+msgstr "Especificación de protocolo no válida"
#: ../avahi-common/error.c:63
msgid "Invalid flags"
-msgstr ""
+msgstr "Opciones no válidas"
#: ../avahi-common/error.c:65
msgid "Not found"
-msgstr ""
+msgstr "No encontrado"
#: ../avahi-common/error.c:66
msgid "Invalid configuration"
-msgstr ""
+msgstr "Configuración no válida"
#: ../avahi-common/error.c:67
msgid "Version mismatch"
-msgstr ""
+msgstr "Incompatibilidad de versiones"
#: ../avahi-common/error.c:68
msgid "Invalid service subtype"
-msgstr ""
+msgstr "Subtipo de servicio no válido"
#: ../avahi-common/error.c:69
msgid "Invalid packet"
-msgstr ""
+msgstr "Paquete no válido"
#: ../avahi-common/error.c:70
msgid "Invalid DNS return code"
-msgstr ""
+msgstr "Código de retorno de DNS no válido"
#: ../avahi-common/error.c:71
msgid "DNS failure: FORMERR"
-msgstr ""
+msgstr "Fallo de DNS: FORMERR"
#: ../avahi-common/error.c:72
msgid "DNS failure: SERVFAIL"
-msgstr ""
+msgstr "Fallo de DNS: SERVFAIL"
#: ../avahi-common/error.c:73
msgid "DNS failure: NXDOMAIN"
-msgstr ""
+msgstr "Fallo de DNS: NXDOMAIN"
#: ../avahi-common/error.c:74
msgid "DNS failure: NOTIMP"
-msgstr ""
+msgstr "Fallo de DNS: NOTIMP"
#: ../avahi-common/error.c:76
msgid "DNS failure: REFUSED"
-msgstr ""
+msgstr "Fallo de DNS: REFUSED"
#: ../avahi-common/error.c:77
msgid "DNS failure: YXDOMAIN"
-msgstr ""
+msgstr "Fallo de DNS: YXDOMAIN"
#: ../avahi-common/error.c:78
msgid "DNS failure: YXRRSET"
-msgstr ""
+msgstr "Fallo de DNS: YXRRSET"
#: ../avahi-common/error.c:79
msgid "DNS failure: NXRRSET"
-msgstr ""
+msgstr "Fallo de DNS: NXRRSET"
#: ../avahi-common/error.c:80
msgid "DNS failure: NOTAUTH"
-msgstr ""
+msgstr "Fallo de DNS: NOTAUTH"
#: ../avahi-common/error.c:81
msgid "DNS failure: NOTZONE"
-msgstr ""
+msgstr "Fallo de DNS: NOTZONE"
#: ../avahi-common/error.c:82
msgid "Invalid RDATA"
-msgstr ""
+msgstr "RDATA no válido"
#: ../avahi-common/error.c:83
msgid "Invalid DNS type"
-msgstr ""
+msgstr "Tipo de DNS no válido"
#: ../avahi-common/error.c:84
msgid "Invalid DNS class"
-msgstr ""
+msgstr "Clase de DNS no válida"
#: ../avahi-common/error.c:85
msgid "Not supported"
-msgstr ""
+msgstr "No soportado"
#: ../avahi-common/error.c:87
msgid "Not permitted"
-msgstr ""
+msgstr "No permitido"
#: ../avahi-common/error.c:88
msgid "Invalid argument"
-msgstr ""
+msgstr "Argumento no válido"
#: ../avahi-common/error.c:89
msgid "Is empty"
-msgstr ""
+msgstr "Está vacío"
#: ../avahi-common/error.c:90
msgid "The requested operation is invalid because redundant"
-msgstr ""
+msgstr "La operación solicitada no es válida porque es redundante"
#: ../avahi-common/error.c:96
msgid "Invalid Error Code"
-msgstr ""
+msgstr "Código de error no válido"
#: ../avahi-ui/avahi-ui.c:326
#, c-format
msgid "Avahi client failure: %s"
-msgstr ""
+msgstr "Fallo del cliente de Avahi: %s"
#: ../avahi-ui/avahi-ui.c:388
#, c-format
msgid "Avahi resolver failure: %s"
-msgstr ""
+msgstr "Fallo del resolutor de Avahi: %s"
#: ../avahi-ui/avahi-ui.c:518
#, c-format
msgid "Browsing for service type %s in domain %s failed: %s"
-msgstr ""
+msgstr "Falló la exploración del tipo de servicio %s en el dominio %s: %s"
-#: ../avahi-ui/avahi-ui.c:519
-#: ../avahi-utils/avahi-browse.c:157
-#: ../avahi-utils/avahi-browse.c:158
-#: ../avahi-utils/avahi-browse.c:164
+#: ../avahi-ui/avahi-ui.c:519 ../avahi-utils/avahi-browse.c:157
+#: ../avahi-utils/avahi-browse.c:158 ../avahi-utils/avahi-browse.c:164
#: ../avahi-utils/avahi-browse.c:165
msgid "n/a"
-msgstr ""
+msgstr "n/d"
#: ../avahi-ui/avahi-ui.c:649
#, c-format
msgid "Avahi domain browser failure: %s"
-msgstr ""
+msgstr "Fallo de exploración de dominios de Avahi: %s"
#: ../avahi-ui/avahi-ui.c:684
#, c-format
msgid "Failed to read Avahi domain: %s"
-msgstr ""
+msgstr "Falló al leer el dominio de Avahi: %s"
#: ../avahi-ui/avahi-ui.c:717
#, c-format
msgid "Failed to connect to Avahi server: %s"
-msgstr ""
+msgstr "Falló al conectar con el servidor de Avahi: %s"
#: ../avahi-ui/avahi-ui.c:735
msgid "Browsing for services on <b>local network</b>:"
-msgstr ""
+msgstr "Examinando los servicios en la <b>red local</b>:"
#: ../avahi-ui/avahi-ui.c:737
#, c-format
msgid "Browsing for services in domain <b>%s</b>:"
-msgstr ""
+msgstr "Examinando los servicios en el dominio <b>%s</b>:"
#: ../avahi-ui/avahi-ui.c:773
#, c-format
msgid "Failed to create browser for %s: %s"
-msgstr ""
+msgstr "Falló al crear el examinador para %s: %s"
#: ../avahi-ui/avahi-ui.c:903
#, c-format
msgid "Failed to create resolver for %s of type %s in domain %s: %s"
-msgstr ""
+msgstr "Falló al crear el resolutor para %s de tipo %s en el dominio %s: %s"
#: ../avahi-ui/avahi-ui.c:978
#, c-format
msgid "Failed to create domain browser: %s"
-msgstr ""
+msgstr "Falló al crear el dominio de exploración: %s"
#: ../avahi-ui/avahi-ui.c:989
msgid "Change domain"
-msgstr ""
+msgstr "Cambiar el dominio"
#: ../avahi-ui/avahi-ui.c:1021
msgid "Service Name"
-msgstr ""
+msgstr "Nombre del servicio"
-#: ../avahi-ui/avahi-ui.c:1029
-#: ../avahi-ui/avahi-ui.c:1160
+#: ../avahi-ui/avahi-ui.c:1029 ../avahi-ui/avahi-ui.c:1160
msgid "Browsing ..."
-msgstr ""
+msgstr "Examinando..."
#: ../avahi-ui/avahi-ui.c:1118
msgid "Initializing..."
-msgstr ""
+msgstr "Inicializando..."
#: ../avahi-ui/avahi-ui.c:1164
msgid "_Domain..."
-msgstr ""
+msgstr "_Dominio..."
#: ../avahi-ui/bssh.c:57
#, c-format
@@ -333,181 +328,174 @@ msgid ""
" -S --shell Browse both SSH and VNC\n"
" -d --domain=DOMAIN The domain to browse in\n"
msgstr ""
+"%s [opciones]\n"
+"\n"
+" -h --help Mostrar esta ayuda\n"
+" -s --ssh Examinar servidores SSH\n"
+" -v --vnc Examinar servidores VNC\n"
+" -S --shell Examinar servidores SSH y VNC\n"
+" -d --domain=DOMINIO El dominio que examinar\n"
-#: ../avahi-ui/bssh.c:103
-#: ../avahi-utils/avahi-browse.c:759
+#: ../avahi-ui/bssh.c:103 ../avahi-utils/avahi-browse.c:759
#, c-format
msgid "Too many arguments\n"
-msgstr ""
+msgstr "Demasiados argumentos\n"
#: ../avahi-ui/bssh.c:147
msgid "Choose Shell Server"
-msgstr ""
+msgstr "Elegir el servidor de intérprete de comandos"
#: ../avahi-ui/bssh.c:149
msgid "Desktop"
-msgstr ""
+msgstr "Escritorio"
#: ../avahi-ui/bssh.c:150
msgid "Terminal"
-msgstr ""
+msgstr "Terminal"
#: ../avahi-ui/bssh.c:154
msgid "Choose VNC server"
-msgstr ""
+msgstr "Elegir el servidor VNC"
#: ../avahi-ui/bssh.c:159
msgid "Choose SSH server"
-msgstr ""
+msgstr "Elegir el servidor SSH"
#: ../avahi-ui/bssh.c:183
#, c-format
msgid "Connecting to '%s' ...\n"
-msgstr ""
+msgstr "Conectando con «%s» ...\n"
#: ../avahi-ui/bssh.c:238
#, c-format
msgid "execlp() failed: %s\n"
-msgstr ""
+msgstr "execlp() falló: %s\n"
#: ../avahi-ui/bssh.c:248
+#, c-format
msgid "Canceled.\n"
-msgstr ""
+msgstr "Cancelado.\n"
-#: ../avahi-ui/bssh.desktop.in.h:1
+#: ../avahi-ui/bssh.desktop.in.in.h:1
msgid "Avahi SSH Server Browser"
-msgstr ""
+msgstr "Examinador de servidores SSH de Avahi"
-#: ../avahi-ui/bssh.desktop.in.h:2
+#: ../avahi-ui/bssh.desktop.in.in.h:2
msgid "Browse for Zeroconf-enabled SSH Servers"
-msgstr ""
+msgstr "Examinar servidores SSH con zeroconf activado"
-#: ../avahi-ui/bvnc.desktop.in.h:1
+#: ../avahi-ui/bvnc.desktop.in.in.h:1
msgid "Avahi VNC Server Browser"
-msgstr ""
+msgstr "Examinador de servidores VNC de Avahi"
-#: ../avahi-ui/bvnc.desktop.in.h:2
+#: ../avahi-ui/bvnc.desktop.in.in.h:2
msgid "Browse for Zeroconf-enabled VNC Servers"
-msgstr ""
+msgstr "Examinar servidores VNC con zeroconf activado"
#: ../avahi-utils/avahi-browse.c:108
#, c-format
msgid ": All for now\n"
-msgstr ""
+msgstr ": Todo por ahora\n"
#: ../avahi-utils/avahi-browse.c:119
#, c-format
msgid ": Cache exhausted\n"
-msgstr ""
+msgstr ": Caché agotada\n"
-#: ../avahi-utils/avahi-browse.c:223
-#: ../avahi-utils/avahi-browse.c:245
+#: ../avahi-utils/avahi-browse.c:223 ../avahi-utils/avahi-browse.c:245
#, c-format
msgid "Failed to resolve service '%s' of type '%s' in domain '%s': %s\n"
-msgstr ""
+msgstr "Error al resolver el servicio «%s» de tipo «%s» en el dominio «%s»: %s\n"
#: ../avahi-utils/avahi-browse.c:324
#, c-format
msgid "service_browser failed: %s\n"
-msgstr ""
+msgstr "Falló service_browser: %s\n"
#: ../avahi-utils/avahi-browse.c:362
#, c-format
msgid "avahi_service_browser_new() failed: %s\n"
-msgstr ""
+msgstr "Falló avahi_service_browser_new(): %s\n"
#: ../avahi-utils/avahi-browse.c:398
#, c-format
msgid "service_type_browser failed: %s\n"
-msgstr ""
+msgstr "Falló service_type_browser: %s\n"
#: ../avahi-utils/avahi-browse.c:428
#, c-format
msgid "avahi_service_type_browser_new() failed: %s\n"
-msgstr ""
+msgstr "Falló avahi_service_type_browser_new(): %s\n"
#: ../avahi-utils/avahi-browse.c:503
#, c-format
msgid "avahi_domain_browser_new() failed: %s\n"
-msgstr ""
+msgstr "Falló avahi_domain_browser_new(): %s\n"
-#: ../avahi-utils/avahi-browse.c:519
-#: ../avahi-utils/avahi-publish.c:391
-#: ../avahi-utils/avahi-resolve.c:282
-#: ../avahi-utils/avahi-set-host-name.c:170
+#: ../avahi-utils/avahi-browse.c:519 ../avahi-utils/avahi-publish.c:391
+#: ../avahi-utils/avahi-resolve.c:282 ../avahi-utils/avahi-set-host-name.c:170
#, c-format
msgid "Failed to query version string: %s\n"
-msgstr ""
+msgstr "Error al consultar la cadena de versión: %s\n"
-#: ../avahi-utils/avahi-browse.c:524
-#: ../avahi-utils/avahi-publish.c:396
-#: ../avahi-utils/avahi-resolve.c:287
-#: ../avahi-utils/avahi-set-host-name.c:175
+#: ../avahi-utils/avahi-browse.c:524 ../avahi-utils/avahi-publish.c:396
+#: ../avahi-utils/avahi-resolve.c:287 ../avahi-utils/avahi-set-host-name.c:175
#: ../avahi-utils/avahi-set-host-name.c:191
#, c-format
msgid "Failed to query host name: %s\n"
-msgstr ""
+msgstr "Error al consultar el nombre del equipo: %s\n"
-#: ../avahi-utils/avahi-browse.c:528
-#: ../avahi-utils/avahi-publish.c:400
-#: ../avahi-utils/avahi-resolve.c:291
-#: ../avahi-utils/avahi-set-host-name.c:179
+#: ../avahi-utils/avahi-browse.c:528 ../avahi-utils/avahi-publish.c:400
+#: ../avahi-utils/avahi-resolve.c:291 ../avahi-utils/avahi-set-host-name.c:179
#, c-format
msgid "Server version: %s; Host name: %s\n"
-msgstr ""
+msgstr "Versión del servidor: %s; Nombre del equipo: %s\n"
#. Translators: This is a column heading with abbreviations for
#. * Event (+/-), Network Interface, Protocol (IPv4/v6), Domain
#: ../avahi-utils/avahi-browse.c:533
#, c-format
msgid "E Ifce Prot Domain\n"
-msgstr ""
+msgstr "E Ifaz Prot Dominio\n"
#. Translators: This is a column heading with abbreviations for
#. * Event (+/-), Network Interface, Protocol (IPv4/v6), Domain
#: ../avahi-utils/avahi-browse.c:537
#, c-format
msgid "E Ifce Prot %-*s %-20s Domain\n"
-msgstr ""
+msgstr "E Ifaz Prot %-*s %-20s Dominio\n"
#: ../avahi-utils/avahi-browse.c:537
msgid "Name"
-msgstr ""
+msgstr "Nombre"
#: ../avahi-utils/avahi-browse.c:537
msgid "Type"
-msgstr ""
+msgstr "Tipo"
#. We have been disconnected, so let reconnect
-#: ../avahi-utils/avahi-browse.c:569
-#: ../avahi-utils/avahi-publish.c:165
+#: ../avahi-utils/avahi-browse.c:569 ../avahi-utils/avahi-publish.c:165
#, c-format
msgid "Disconnected, reconnecting ...\n"
-msgstr ""
+msgstr "Desconectado; volviendo a conectar...\n"
-#: ../avahi-utils/avahi-browse.c:583
-#: ../avahi-utils/avahi-browse.c:813
-#: ../avahi-utils/avahi-publish.c:172
-#: ../avahi-utils/avahi-publish.c:383
-#: ../avahi-utils/avahi-resolve.c:274
-#: ../avahi-utils/avahi-set-host-name.c:162
+#: ../avahi-utils/avahi-browse.c:583 ../avahi-utils/avahi-browse.c:813
+#: ../avahi-utils/avahi-publish.c:172 ../avahi-utils/avahi-publish.c:383
+#: ../avahi-utils/avahi-resolve.c:274 ../avahi-utils/avahi-set-host-name.c:162
#, c-format
msgid "Failed to create client object: %s\n"
-msgstr ""
+msgstr "Falló al crear el objeto cliente: %s\n"
-#: ../avahi-utils/avahi-browse.c:588
-#: ../avahi-utils/avahi-publish.c:177
-#: ../avahi-utils/avahi-resolve.c:145
-#: ../avahi-utils/avahi-set-host-name.c:61
+#: ../avahi-utils/avahi-browse.c:588 ../avahi-utils/avahi-publish.c:177
+#: ../avahi-utils/avahi-resolve.c:145 ../avahi-utils/avahi-set-host-name.c:61
#, c-format
msgid "Client failure, exiting: %s\n"
-msgstr ""
+msgstr "Fallo del cliente; saliendo: %s\n"
-#: ../avahi-utils/avahi-browse.c:607
-#: ../avahi-utils/avahi-publish.c:208
+#: ../avahi-utils/avahi-browse.c:607 ../avahi-utils/avahi-publish.c:208
#, c-format
msgid "Waiting for daemon ...\n"
-msgstr "Esperando el daemon ...\n"
+msgstr "Esperando al demonio...\n"
#: ../avahi-utils/avahi-browse.c:631
msgid ""
@@ -517,7 +505,8 @@ msgid ""
" -a --all Show all services, regardless of the type\n"
" -d --domain=DOMAIN The domain to browse in\n"
" -v --verbose Enable verbose mode\n"
-" -t --terminate Terminate after dumping a more or less complete list\n"
+" -t --terminate Terminate after dumping a more or less complete "
+"list\n"
" -c --cache Terminate after dumping all entries from the cache\n"
" -l --ignore-local Ignore local services\n"
" -r --resolve Resolve services found\n"
@@ -526,43 +515,42 @@ msgid ""
msgstr ""
" -h --help Muestra esta ayuda\n"
" -V --version Muestra la versión\n"
-" -D --browse-domains Explora dominios en lugar de servicios\n"
-" -a --all Muestra todos los servicios sin importar su tipo\n"
-" -d --domain=DOMINIO El dominio el cual explorar\n"
-" -v --verbose Habilita modo detallado\n"
-" -t --terminate Termina despues de guardar la lista completa\n"
-" -c --cache Termina despues de guardar todas las entradas del caché\n"
-" -l --ignore-local Ignora servicios locales\n"
-" -r --resolve Resuelve servicios encontrados\n"
-" -f --no-fail No falla si el demonio no esta disponible\n"
-" -p --parsable Salida en formato interpretable\n"
+" -D --browse-domains Explora dominios de búsqueda en lugar de servicios\n"
+" -a --all Muestra todos los servicios independientemente del "
+"tipo.\n"
+" -d --domain=DOMAIN El dominio que examinar\n"
+" -v --verbose Activa el modo detallado\n"
+" -t --terminate Terminar al volcar una lista más o menos completa\n"
+" -c --cache Terminar después de volcar todas las entradas de la "
+"cache\n"
+" -l --ignore-local Ignorar los servicios locales\n"
+" -r --resolve Resolver servicios encontrados\n"
+" -f --no-fail No fallar si el demonio no está disponible\n"
+" -p --parsable Salida en formato analizable\n"
#: ../avahi-utils/avahi-browse.c:644
msgid ""
" -k --no-db-lookup Don't lookup service types\n"
" -b --dump-db Dump service type database\n"
msgstr ""
-" -k --no-db-lookup No busques tipos de servicio\n"
-" -b --dump-db Guardar base de datos de tipos de servicios\n"
+" -k --no-db-lookup No busca los tipos de servicios\n"
+" -b --dump-db Vuelva la base de datos de tipos de servicios\n"
-#: ../avahi-utils/avahi-browse.c:750
-#: ../avahi-utils/avahi-resolve.c:221
+#: ../avahi-utils/avahi-browse.c:750 ../avahi-utils/avahi-resolve.c:221
#, c-format
msgid "Too few arguments\n"
msgstr "Muy pocos argumentos\n"
-#: ../avahi-utils/avahi-browse.c:805
-#: ../avahi-utils/avahi-publish.c:375
-#: ../avahi-utils/avahi-resolve.c:266
-#: ../avahi-utils/avahi-set-host-name.c:154
-#, fuzzy, c-format
+#: ../avahi-utils/avahi-browse.c:805 ../avahi-utils/avahi-publish.c:375
+#: ../avahi-utils/avahi-resolve.c:266 ../avahi-utils/avahi-set-host-name.c:154
+#, c-format
msgid "Failed to create simple poll object.\n"
-msgstr "Falló al crear un simple objeto encuesta.\n"
+msgstr "Falló al crear un objeto de encuesta simple.\n"
#: ../avahi-utils/avahi-publish.c:78
#, c-format
msgid "Established under name '%s'\n"
-msgstr "Establecido bajo el nombre '%s'\n"
+msgstr "Establecido bajo el nombre «%s»\n"
#: ../avahi-utils/avahi-publish.c:83
#, c-format
@@ -572,32 +560,32 @@ msgstr "Falló al registrar: %s\n"
#: ../avahi-utils/avahi-publish.c:96
#, c-format
msgid "Name collision, picking new name '%s'.\n"
-msgstr "Colisión de Nombres, escogiendo nuevo nombre '%s'.\n"
+msgstr "Colisión de nombres; se usa el nombre nuevo «%s».\n"
#: ../avahi-utils/avahi-publish.c:116
#, c-format
msgid "Failed to create entry group: %s\n"
-msgstr "Falló en crear grupo de entrada: %s\n"
+msgstr "Falló al crear el grupo de la entrada: %s\n"
#: ../avahi-utils/avahi-publish.c:126
#, c-format
msgid "Failed to add address: %s\n"
-msgstr "Falló al agregar dirección: %s\n"
+msgstr "Falló al añadir la dirección: %s\n"
#: ../avahi-utils/avahi-publish.c:136
#, c-format
msgid "Failed to add service: %s\n"
-msgstr "Falló al agregar servicio: %s\n"
+msgstr "Falló al añadir el servicio: %s\n"
#: ../avahi-utils/avahi-publish.c:142
#, c-format
msgid "Failed to add subtype '%s': %s\n"
-msgstr "Falló al agregar subtipo '%s': %s\n"
+msgstr "Falló al añadir el subtipo «%s»: %s\n"
#: ../avahi-utils/avahi-publish.c:193
#, c-format
msgid "Host name conflict\n"
-msgstr "Conflicto de Hostname\n"
+msgstr "Conflicto de nombres de equipo\n"
#: ../avahi-utils/avahi-publish.c:218
#, c-format
@@ -612,48 +600,48 @@ msgid ""
" -v --verbose Enable verbose mode\n"
" -d --domain=DOMAIN Domain to publish service in\n"
" -H --host=DOMAIN Host where service resides\n"
-" --subtype=SUBTYPE An additional subtype to register this service with\n"
+" --subtype=SUBTYPE An additional subtype to register this service "
+"with\n"
" -f --no-fail Don't fail if the daemon is not available\n"
msgstr ""
-"%s [opciones] %s <nombre> <tipo> <puerto> [<texto ...>]\n"
-"%s [opciones] %s <hostname> <dirección>\n"
+"%s [opciones] %s <nombre> <tipo> <puerto> [<txt ...>]\n"
+"%s [opciones] %s <nombre-del-equipo> <dirección>\n"
"\n"
-" -h --help Muestra esta ayuda\n"
-" -V --version Muestra la versión\n"
-" -s --service Publicar Servicio\n"
-" -a --address Publicar Dirección\n"
-" -v --verbose Habilitar modo detallado\n"
-" -d --domain=DOMINIO Dominio al cual se publicará el servicio\n"
-" -H --host=DOMINIO Host donde el servicio se encuentra\n"
-" --subtype=SUBTIPO Un Subtipo adicional con el cual registramos este servicio\n"
-" -f --no-fail No falles si el daemon no esta disponible\n"
-
-#: ../avahi-utils/avahi-publish.c:300
-#: ../avahi-utils/avahi-publish.c:315
+" -h --help Muestra esta ayuda\n"
+" -V --version Muestra la versión\n"
+" -s --service Publica el servicio\n"
+" -a --address Publica la dirección\n"
+" -v --vervose Activa el modo detallado\n"
+" -d --domain=DOMINIO Dominio donde publicar el servicio\n"
+" -H --host=DOMINIO Equipo donde reside el servicio\n"
+" --sbtype=SUBTIPO Un subtipo adicional con el que registrar este "
+"servicio\n"
+" -f --no-fail No fallar en caso que el demonio no esté disponible\n"
+
+#: ../avahi-utils/avahi-publish.c:300 ../avahi-utils/avahi-publish.c:315
#, c-format
msgid "Bad number of arguments\n"
-msgstr "Mal número de argumentos\n"
+msgstr "Número de argumentos incorrecto\n"
#: ../avahi-utils/avahi-publish.c:326
#, c-format
msgid "Failed to parse port number: %s\n"
-msgstr "Falló al interpretar el número de puerto: %s\n"
+msgstr "Falló al analizar el número de puerto: %s\n"
-#: ../avahi-utils/avahi-publish.c:358
-#: ../avahi-utils/avahi-resolve.c:248
+#: ../avahi-utils/avahi-publish.c:358 ../avahi-utils/avahi-resolve.c:248
#, c-format
msgid "No command specified.\n"
-msgstr "No se especificó comando.\n"
+msgstr "No se especificó ningún comando.\n"
#: ../avahi-utils/avahi-resolve.c:91
#, c-format
msgid "Failed to resolve host name '%s': %s\n"
-msgstr "Falló en resolver hostname '%s': '%s\n"
+msgstr "Error al resolver el nombre del equipo «%s»: %s\n"
#: ../avahi-utils/avahi-resolve.c:128
#, c-format
msgid "Failed to resolve address '%s': %s\n"
-msgstr "Falló en resolver dirección '%s': %s\n"
+msgstr "Error al resolver la dirección «%s»: %s\n"
#: ../avahi-utils/avahi-resolve.c:159
#, c-format
@@ -669,32 +657,31 @@ msgid ""
" -6 Lookup IPv6 address\n"
" -4 Lookup IPv4 address\n"
msgstr ""
-"%s [opciones] %s <host name ...>\n"
-"%s [opciones] %s <direccion ... >\n"
+"%s [opciones] %s <nombre del anfitrión ...>\n"
+"%s [opciones] %s <dirección ...>\n"
"\n"
-" -h --help Muestra esta ayuda\n"
-" -V --version Muestra versión\n"
-" -n --name Resuelve hostname\n"
-" -a --address Resuelve dirección\n"
-" -v --verbose Habilita modo detallado\n"
-" -6 Buscar dirección IPv6\n"
-" -4 Buscar dirección IPv4\n"
-
-#: ../avahi-utils/avahi-resolve.c:301
-#: ../avahi-utils/avahi-set-host-name.c:183
-#, fuzzy, c-format
+" -h --help Muestra esta ayuda\n"
+" -V --version Muestra la versión\n"
+" -n --name Resuelve el nombre del anfitrión\n"
+" -a --address Resuelve la dirección\n"
+" -v --vervose Activa el modo verboso\n"
+" -6 Busca dirección IPv6\n"
+" -4 Busca dirección IPv4\n"
+
+#: ../avahi-utils/avahi-resolve.c:301 ../avahi-utils/avahi-set-host-name.c:183
+#, c-format
msgid "Failed to create host name resolver: %s\n"
-msgstr "Falló en crear el resolvedor de hostname: %s\n"
+msgstr "Falló al crear el resolutor de nombres de equipo: %s\n"
#: ../avahi-utils/avahi-resolve.c:311
#, c-format
msgid "Failed to parse address '%s'\n"
-msgstr "Falló en interpretar dirección '%s'\n"
+msgstr "Falló al analizar la dirección «%s»\n"
#: ../avahi-utils/avahi-resolve.c:316
-#, fuzzy, c-format
+#, c-format
msgid "Failed to create address resolver: %s\n"
-msgstr "Falló en crear el resolvedor de direcciones: %s\n"
+msgstr "Falló al crear el resolutor de direcciones: %s\n"
#: ../avahi-utils/avahi-set-host-name.c:75
#, c-format
@@ -705,19 +692,18 @@ msgid ""
" -V --version Show version\n"
" -v --verbose Enable verbose mode\n"
msgstr ""
-"%s [opciones] <nuevo hostname>\n"
+"%s [opciones] <nuevo nombre de anfitrión>\n"
"\n"
" -h --help Muestra esta ayuda\n"
-" -V --version Muestra Versión\n"
-" -v --verbose Habilita modo detallado\n"
+" -V --version Muestra la versión\n"
+" -v --verbose Habilita el modo detallado\n"
#: ../avahi-utils/avahi-set-host-name.c:116
#, c-format
msgid "Invalid number of arguments, expecting exactly one.\n"
-msgstr "Número de argumentos invalidos, se espera exactamente uno.\n"
+msgstr "Número de argumentos incorrecto; se esperaba exactamente uno.\n"
#: ../avahi-utils/avahi-set-host-name.c:195
-#, fuzzy, c-format
+#, c-format
msgid "Host name successfully changed to %s\n"
-msgstr "El Hostname cambió a %s\n"
-
+msgstr "El nombre del equipo se ha cambiado con éxito a %s\n"
diff --git a/po/fi.po b/po/fi.po
new file mode 100644
index 0000000..0ad2f97
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,708 @@
+# Avahi Finnish translation.
+# Copyright (C) 2008 Timo Jyrinki
+# This file is distributed under the same license as the avahi package.
+# Timo Jyrinki <timo.jyrinki@iki.fi>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: avahi\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-09-02 04:10+0000\n"
+"PO-Revision-Date: 2008-09-02 15:00+0300\n"
+"Last-Translator: Timo Jyrinki <timo.jyrinki@iki.fi>\n"
+"Language-Team: Finnish <gnome-fi-laatu@lists.sourceforge.net>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../avahi-common/error.c:32
+msgid "OK"
+msgstr "OK"
+
+#: ../avahi-common/error.c:33
+msgid "Operation failed"
+msgstr "Toiminto epäonnistui"
+
+#: ../avahi-common/error.c:34
+msgid "Bad state"
+msgstr "Huono tila"
+
+#: ../avahi-common/error.c:35
+msgid "Invalid host name"
+msgstr "Kelvoton verkkonimi"
+
+#: ../avahi-common/error.c:36
+msgid "Invalid domain name"
+msgstr "Kelvoton verkkoalueen nimi"
+
+#: ../avahi-common/error.c:37
+msgid "No suitable network protocol available"
+msgstr "Sopivaa verkkoyhteyskäytäntöä ei ole saatavilla"
+
+#: ../avahi-common/error.c:38
+msgid "Invalid DNS TTL"
+msgstr "Virheellinen DNS TTL"
+
+#: ../avahi-common/error.c:39
+msgid "Resource record key is pattern"
+msgstr "Resurssin tietueavain on lauseke"
+
+#: ../avahi-common/error.c:40
+msgid "Local name collision"
+msgstr "Paikallinen nimien yhteentörmäys"
+
+#: ../avahi-common/error.c:41
+msgid "Invalid record"
+msgstr "Virheellinen tietue"
+
+#: ../avahi-common/error.c:43
+msgid "Invalid service name"
+msgstr "Virheellinen palvelun nimi"
+
+#: ../avahi-common/error.c:44
+msgid "Invalid service type"
+msgstr "Virheellinen palvelun tyyppi"
+
+#: ../avahi-common/error.c:45
+msgid "Invalid port number"
+msgstr "Virheellinen porttinumero"
+
+#: ../avahi-common/error.c:46
+msgid "Invalid record key"
+msgstr "Virheellinen tietueavain"
+
+#: ../avahi-common/error.c:47
+msgid "Invalid address"
+msgstr "Virheellinen osoite"
+
+#: ../avahi-common/error.c:48
+msgid "Timeout reached"
+msgstr "Tapahtui aikakatkaisu"
+
+#: ../avahi-common/error.c:49
+msgid "Too many clients"
+msgstr "Liian monta asiakasta"
+
+#: ../avahi-common/error.c:50
+msgid "Too many objects"
+msgstr "Liian monta objektia"
+
+#: ../avahi-common/error.c:51
+msgid "Too many entries"
+msgstr "Liian monta kohdetta"
+
+#: ../avahi-common/error.c:52
+msgid "OS Error"
+msgstr "OS-virhe"
+
+#: ../avahi-common/error.c:54
+msgid "Access denied"
+msgstr "Pääsy evätty"
+
+#: ../avahi-common/error.c:55
+msgid "Invalid operation"
+msgstr "Virheellinen toiminto"
+
+#: ../avahi-common/error.c:56
+msgid "An unexpected D-Bus error occured"
+msgstr "Tapahtui odottamaton D-Bus-virhe"
+
+#: ../avahi-common/error.c:57
+msgid "Daemon connection failed"
+msgstr "Taustaprosessiyhteys epäonnistui"
+
+#: ../avahi-common/error.c:58
+msgid "Memory exhausted"
+msgstr "Muisti loppui"
+
+#: ../avahi-common/error.c:59
+msgid "The object passed in was not valid"
+msgstr "Annettu objekti ei ollut kelvollinen"
+
+#: ../avahi-common/error.c:60
+msgid "Daemon not running"
+msgstr "Taustaprosessi ei käynnissä"
+
+#: ../avahi-common/error.c:61
+msgid "Invalid interface index"
+msgstr "Virheellinen liitännän järjestysnumero"
+
+#: ../avahi-common/error.c:62
+msgid "Invalid protocol specification"
+msgstr "Virheellinen yhteyskäytännön määrittely"
+
+#: ../avahi-common/error.c:63
+msgid "Invalid flags"
+msgstr "Virheelliset liput"
+
+#: ../avahi-common/error.c:65
+msgid "Not found"
+msgstr "Ei löytynyt"
+
+#: ../avahi-common/error.c:66
+msgid "Invalid configuration"
+msgstr "Virheelliset asetukset"
+
+#: ../avahi-common/error.c:67
+msgid "Version mismatch"
+msgstr "Versioristiriita"
+
+#: ../avahi-common/error.c:68
+msgid "Invalid service subtype"
+msgstr "Virheellinen palvelun alatyyppi"
+
+#: ../avahi-common/error.c:69
+msgid "Invalid packet"
+msgstr "Virheellinen paketti"
+
+#: ../avahi-common/error.c:70
+msgid "Invalid DNS return code"
+msgstr "Virheellinen DNS-palautuskoodi"
+
+#: ../avahi-common/error.c:71
+msgid "DNS failure: FORMERR"
+msgstr "DNS-toimintahäiriö: FORMERR"
+
+#: ../avahi-common/error.c:72
+msgid "DNS failure: SERVFAIL"
+msgstr "DNS-toimintahäiriö: SERVFAIL"
+
+#: ../avahi-common/error.c:73
+msgid "DNS failure: NXDOMAIN"
+msgstr "DNS-toimintahäiriö: NXDOMAIN"
+
+#: ../avahi-common/error.c:74
+msgid "DNS failure: NOTIMP"
+msgstr "DNS-toimintahäiriö: NOTIMP"
+
+#: ../avahi-common/error.c:76
+msgid "DNS failure: REFUSED"
+msgstr "DNS-toimintahäiriö: REFUSED"
+
+#: ../avahi-common/error.c:77
+msgid "DNS failure: YXDOMAIN"
+msgstr "DNS-toimintahäiriö: YXDOMAIN"
+
+#: ../avahi-common/error.c:78
+msgid "DNS failure: YXRRSET"
+msgstr "DNS-toimintahäiriö: YXRRSET"
+
+#: ../avahi-common/error.c:79
+msgid "DNS failure: NXRRSET"
+msgstr "DNS-toimintahäiriö: NXRRSET"
+
+#: ../avahi-common/error.c:80
+msgid "DNS failure: NOTAUTH"
+msgstr "DNS-toimintahäiriö: NOTAUTH"
+
+#: ../avahi-common/error.c:81
+msgid "DNS failure: NOTZONE"
+msgstr "DNS-toimintahäiriö: NOTZONE"
+
+#: ../avahi-common/error.c:82
+msgid "Invalid RDATA"
+msgstr "Virheellinen RDATA"
+
+#: ../avahi-common/error.c:83
+msgid "Invalid DNS type"
+msgstr "Virheellinen DNS-tyyppi"
+
+#: ../avahi-common/error.c:84
+msgid "Invalid DNS class"
+msgstr "Virheellinen DNS-luokka"
+
+#: ../avahi-common/error.c:85
+msgid "Not supported"
+msgstr "Ei tuettu"
+
+#: ../avahi-common/error.c:87
+msgid "Not permitted"
+msgstr "Ei sallittu"
+
+#: ../avahi-common/error.c:88
+msgid "Invalid argument"
+msgstr "Virheellinen argumentti"
+
+#: ../avahi-common/error.c:89
+msgid "Is empty"
+msgstr "On tyhjä"
+
+#: ../avahi-common/error.c:90
+msgid "The requested operation is invalid because redundant"
+msgstr "Pyydetty toiminto on tarpeettomuudesta johtuen virheellinen"
+
+#: ../avahi-common/error.c:96
+msgid "Invalid Error Code"
+msgstr "Kelvoton virhekoodi"
+
+#: ../avahi-ui/avahi-ui.c:326
+#, c-format
+msgid "Avahi client failure: %s"
+msgstr "Avahi-asiakkaan toimintahäiriö: %s"
+
+#: ../avahi-ui/avahi-ui.c:388
+#, c-format
+msgid "Avahi resolver failure: %s"
+msgstr "Avahi-selvittimen toimintahäiriö: %s"
+
+#: ../avahi-ui/avahi-ui.c:518
+#, c-format
+msgid "Browsing for service type %s in domain %s failed: %s"
+msgstr "Palvelutyypin %s selaaminen verkkoaluuessa %s epäonnistui: %s"
+
+#: ../avahi-ui/avahi-ui.c:519 ../avahi-utils/avahi-browse.c:157
+#: ../avahi-utils/avahi-browse.c:158 ../avahi-utils/avahi-browse.c:164
+#: ../avahi-utils/avahi-browse.c:165
+msgid "n/a"
+msgstr "-"
+
+#: ../avahi-ui/avahi-ui.c:649
+#, c-format
+msgid "Avahi domain browser failure: %s"
+msgstr "Avahi-verkkoalueselaimen toimintahäiriö: %s"
+
+#: ../avahi-ui/avahi-ui.c:684
+#, c-format
+msgid "Failed to read Avahi domain: %s"
+msgstr "Avahi-verkkoaluetta ei voi lukea: %s"
+
+#: ../avahi-ui/avahi-ui.c:717
+#, c-format
+msgid "Failed to connect to Avahi server: %s"
+msgstr "Avahi-palvelimeen ei voi yhdistää: %s"
+
+#: ../avahi-ui/avahi-ui.c:735
+msgid "Browsing for services on <b>local network</b>:"
+msgstr "Selataan palveluita <b>paikallisessa verkossa</b>:"
+
+#: ../avahi-ui/avahi-ui.c:737
+#, c-format
+msgid "Browsing for services in domain <b>%s</b>:"
+msgstr "Selataan palveluita verkkoalueessa <b>%s</b>:"
+
+#: ../avahi-ui/avahi-ui.c:773
+#, c-format
+msgid "Failed to create browser for %s: %s"
+msgstr "Selainta ei voi luoda kohteelle %s: %s"
+
+#: ../avahi-ui/avahi-ui.c:903
+#, c-format
+msgid "Failed to create resolver for %s of type %s in domain %s: %s"
+msgstr "Kohteelle %s ei voi luoda selvitintyyppiä %s verkkoalueessa %s: %s"
+
+#: ../avahi-ui/avahi-ui.c:978
+#, c-format
+msgid "Failed to create domain browser: %s"
+msgstr "Verkkoalueselainta ei voi luoda: %s"
+
+#: ../avahi-ui/avahi-ui.c:989
+msgid "Change domain"
+msgstr "Vaihda verkkoaluetta"
+
+#: ../avahi-ui/avahi-ui.c:1021
+msgid "Service Name"
+msgstr "Palvelun nimi"
+
+#: ../avahi-ui/avahi-ui.c:1029 ../avahi-ui/avahi-ui.c:1160
+msgid "Browsing ..."
+msgstr "Selataan..."
+
+#: ../avahi-ui/avahi-ui.c:1118
+msgid "Initializing..."
+msgstr "Alustetaan..."
+
+#: ../avahi-ui/avahi-ui.c:1164
+msgid "_Domain..."
+msgstr "_Verkkoalue..."
+
+#: ../avahi-ui/bssh.c:57
+#, c-format
+msgid ""
+"%s [options]\n"
+"\n"
+" -h --help Show this help\n"
+" -s --ssh Browse SSH servers\n"
+" -v --vnc Browse VNC servers\n"
+" -S --shell Browse both SSH and VNC\n"
+" -d --domain=DOMAIN The domain to browse in\n"
+msgstr ""
+"%s [valitsimet]\n"
+"\n"
+" -h --help Näytä tämä ohje\n"
+" -s --ssh Selaa SSH-palvelimia\n"
+" -v --vnc Selaa VNC-palvelimia\n"
+" -S --shell Selaa sekä SSH- että VNC-palvelimia\n"
+" -d --domain=DOMAIN Selattava verkkoalue\n"
+
+#: ../avahi-ui/bssh.c:103 ../avahi-utils/avahi-browse.c:759
+#, c-format
+msgid "Too many arguments\n"
+msgstr "Liian monta argumenttia\n"
+
+#: ../avahi-ui/bssh.c:147
+msgid "Choose Shell Server"
+msgstr "Valitse päätepalvelin"
+
+#: ../avahi-ui/bssh.c:149
+msgid "Desktop"
+msgstr "Työpöytä"
+
+#: ../avahi-ui/bssh.c:150
+msgid "Terminal"
+msgstr "Pääte"
+
+#: ../avahi-ui/bssh.c:154
+msgid "Choose VNC server"
+msgstr "Valitse VNC-palvelin"
+
+#: ../avahi-ui/bssh.c:159
+msgid "Choose SSH server"
+msgstr "Valitse SSH-palvelin"
+
+#: ../avahi-ui/bssh.c:183
+#, c-format
+msgid "Connecting to '%s' ...\n"
+msgstr "Yhdistetään kohteeseen \"%s\"...\n"
+
+#: ../avahi-ui/bssh.c:238
+#, c-format
+msgid "execlp() failed: %s\n"
+msgstr "execlp() epäonnistui: %s\n"
+
+#: ../avahi-ui/bssh.c:248
+#, c-format
+msgid "Canceled.\n"
+msgstr "Peruttu.\n"
+
+#: ../avahi-ui/bssh.desktop.in.in.h:1
+msgid "Avahi SSH Server Browser"
+msgstr "Avahin SSH-palvelinselain"
+
+#: ../avahi-ui/bssh.desktop.in.in.h:2
+msgid "Browse for Zeroconf-enabled SSH Servers"
+msgstr "Selaa Zeroconf-varustettuja SSH-palvelimia"
+
+#: ../avahi-ui/bvnc.desktop.in.in.h:1
+msgid "Avahi VNC Server Browser"
+msgstr "Avahin VNC-palvelinselain"
+
+#: ../avahi-ui/bvnc.desktop.in.in.h:2
+msgid "Browse for Zeroconf-enabled VNC Servers"
+msgstr "Selaa Zeroconf-varustettuja VNC-palvelimia"
+
+#: ../avahi-utils/avahi-browse.c:108
+#, c-format
+msgid ": All for now\n"
+msgstr ": Kaikki toistaiseksi\n"
+
+#: ../avahi-utils/avahi-browse.c:119
+#, c-format
+msgid ": Cache exhausted\n"
+msgstr ": Välimuisti kulutettu loppuun\n"
+
+#: ../avahi-utils/avahi-browse.c:223 ../avahi-utils/avahi-browse.c:245
+#, c-format
+msgid "Failed to resolve service '%s' of type '%s' in domain '%s': %s\n"
+msgstr ""
+"Palvelua \"%s\", tyypiltään \"%s\", ei voi selvittää verkkoalueessa "
+"\"%s\": %s\n"
+
+#: ../avahi-utils/avahi-browse.c:324
+#, c-format
+msgid "service_browser failed: %s\n"
+msgstr "service_browser epäonnistui: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:362
+#, c-format
+msgid "avahi_service_browser_new() failed: %s\n"
+msgstr "avahi_service_browser_new() epäonnistui: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:398
+#, c-format
+msgid "service_type_browser failed: %s\n"
+msgstr "service_type_browser epäonnistui: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:428
+#, c-format
+msgid "avahi_service_type_browser_new() failed: %s\n"
+msgstr "avahi_service_type_browser_new() epäonnistui: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:503
+#, c-format
+msgid "avahi_domain_browser_new() failed: %s\n"
+msgstr "avahi_domain_browser_new() epäonnistui: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:519 ../avahi-utils/avahi-publish.c:391
+#: ../avahi-utils/avahi-resolve.c:282 ../avahi-utils/avahi-set-host-name.c:170
+#, c-format
+msgid "Failed to query version string: %s\n"
+msgstr "Versiomerkkijonon pyyntö epäonnistui: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:524 ../avahi-utils/avahi-publish.c:396
+#: ../avahi-utils/avahi-resolve.c:287 ../avahi-utils/avahi-set-host-name.c:175
+#: ../avahi-utils/avahi-set-host-name.c:191
+#, c-format
+msgid "Failed to query host name: %s\n"
+msgstr "Verkko-osoitteen pyyntö epäonnistui: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:528 ../avahi-utils/avahi-publish.c:400
+#: ../avahi-utils/avahi-resolve.c:291 ../avahi-utils/avahi-set-host-name.c:179
+#, c-format
+msgid "Server version: %s; Host name: %s\n"
+msgstr "Palvelimen versio: %s, palvelinnimi: %s\n"
+
+#. Translators: This is a column heading with abbreviations for
+#. * Event (+/-), Network Interface, Protocol (IPv4/v6), Domain
+#: ../avahi-utils/avahi-browse.c:533
+#, c-format
+msgid "E Ifce Prot Domain\n"
+msgstr "T Liit Yhtk Verkkonimi\n"
+
+#. Translators: This is a column heading with abbreviations for
+#. * Event (+/-), Network Interface, Protocol (IPv4/v6), Domain
+#: ../avahi-utils/avahi-browse.c:537
+#, c-format
+msgid "E Ifce Prot %-*s %-20s Domain\n"
+msgstr "T Liit Yhtk %-*s %-20s Verkkonimi\n"
+
+#: ../avahi-utils/avahi-browse.c:537
+msgid "Name"
+msgstr "Nimi"
+
+#: ../avahi-utils/avahi-browse.c:537
+msgid "Type"
+msgstr "Tyyppi"
+
+#. We have been disconnected, so let reconnect
+#: ../avahi-utils/avahi-browse.c:569 ../avahi-utils/avahi-publish.c:165
+#, c-format
+msgid "Disconnected, reconnecting ...\n"
+msgstr "Yhteys katkaistiin, yhdistetään uudelleen...\n"
+
+#: ../avahi-utils/avahi-browse.c:583 ../avahi-utils/avahi-browse.c:813
+#: ../avahi-utils/avahi-publish.c:172 ../avahi-utils/avahi-publish.c:383
+#: ../avahi-utils/avahi-resolve.c:274 ../avahi-utils/avahi-set-host-name.c:162
+#, c-format
+msgid "Failed to create client object: %s\n"
+msgstr "Asiakasobjektia ei voi luoda: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:588 ../avahi-utils/avahi-publish.c:177
+#: ../avahi-utils/avahi-resolve.c:145 ../avahi-utils/avahi-set-host-name.c:61
+#, c-format
+msgid "Client failure, exiting: %s\n"
+msgstr "Asiakkaan toimintahäiriö, poistutaan: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:607 ../avahi-utils/avahi-publish.c:208
+#, c-format
+msgid "Waiting for daemon ...\n"
+msgstr "Odotetaan taustaprosessia...\n"
+
+#: ../avahi-utils/avahi-browse.c:631
+msgid ""
+" -h --help Show this help\n"
+" -V --version Show version\n"
+" -D --browse-domains Browse for browsing domains instead of services\n"
+" -a --all Show all services, regardless of the type\n"
+" -d --domain=DOMAIN The domain to browse in\n"
+" -v --verbose Enable verbose mode\n"
+" -t --terminate Terminate after dumping a more or less complete "
+"list\n"
+" -c --cache Terminate after dumping all entries from the cache\n"
+" -l --ignore-local Ignore local services\n"
+" -r --resolve Resolve services found\n"
+" -f --no-fail Don't fail if the daemon is not available\n"
+" -p --parsable Output in parsable format\n"
+msgstr ""
+" -h --help Näytä tämä ohje\n"
+" -V --version Näytä versio\n"
+" -D --browse-domains Selaa selaavia verkkoalueita palveluiden sijaan\n"
+" -a --all Näytä kaikki palvelut tyypistä riippumatta\n"
+" -d --domain=DOMAIN Selattava verkkoalue\n"
+" -v --verbose Ota käyttöön suulaampi tila\n"
+" -t --terminate Poistu enemmän tai vähemmän täydellisen luettelon "
+"tulostuksen jälkeen\n"
+" -c --cache Poistu kun kaikki kohteet tulostettu välimuistista\n"
+" -l --ignore-local Jätä paikalliset palvelut huomiotta\n"
+" -r --resolve Selvitä löydetyt palvelut\n"
+" -f --no-fail Älä epäonnistu jos taustaprosessia ei saatavilla\n"
+" -p --parsable Tulosta jäsennettävissä olevassa muodossa\n"
+
+#: ../avahi-utils/avahi-browse.c:644
+msgid ""
+" -k --no-db-lookup Don't lookup service types\n"
+" -b --dump-db Dump service type database\n"
+msgstr ""
+" -k --no-db-lookup Älä etsi palvelutyyppejä\n"
+" -b --dump-db Tulosta palvelutyyppien tietokanta\n"
+
+#: ../avahi-utils/avahi-browse.c:750 ../avahi-utils/avahi-resolve.c:221
+#, c-format
+msgid "Too few arguments\n"
+msgstr "Liian vähän argumentteja\n"
+
+#: ../avahi-utils/avahi-browse.c:805 ../avahi-utils/avahi-publish.c:375
+#: ../avahi-utils/avahi-resolve.c:266 ../avahi-utils/avahi-set-host-name.c:154
+#, c-format
+msgid "Failed to create simple poll object.\n"
+msgstr "Yksinkertaisen kyselyobjektin luonti epäonnistui.\n"
+
+#: ../avahi-utils/avahi-publish.c:78
+#, c-format
+msgid "Established under name '%s'\n"
+msgstr "Muodostettiin nimellä \"%s\"\n"
+
+#: ../avahi-utils/avahi-publish.c:83
+#, c-format
+msgid "Failed to register: %s\n"
+msgstr "Rekisteröiminen epäonnistui: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:96
+#, c-format
+msgid "Name collision, picking new name '%s'.\n"
+msgstr "Nimien yhteentörmäys, valitaan uusi nimi \"%s\".\n"
+
+#: ../avahi-utils/avahi-publish.c:116
+#, c-format
+msgid "Failed to create entry group: %s\n"
+msgstr "Kohderyhmän luominen epäonnistui: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:126
+#, c-format
+msgid "Failed to add address: %s\n"
+msgstr "Osoitteen lisääminen epäonnistui: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:136
+#, c-format
+msgid "Failed to add service: %s\n"
+msgstr "Palvelun lisääminen epäonnistui: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:142
+#, c-format
+msgid "Failed to add subtype '%s': %s\n"
+msgstr "Alatyypin \"%s\" lisääminen epäonnistui: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:193
+#, c-format
+msgid "Host name conflict\n"
+msgstr "Palvelinnimen ristiriita\n"
+
+#: ../avahi-utils/avahi-publish.c:218
+#, c-format
+msgid ""
+"%s [options] %s <name> <type> <port> [<txt ...>]\n"
+"%s [options] %s <host-name> <address>\n"
+"\n"
+" -h --help Show this help\n"
+" -V --version Show version\n"
+" -s --service Publish service\n"
+" -a --address Publish address\n"
+" -v --verbose Enable verbose mode\n"
+" -d --domain=DOMAIN Domain to publish service in\n"
+" -H --host=DOMAIN Host where service resides\n"
+" --subtype=SUBTYPE An additional subtype to register this service "
+"with\n"
+" -f --no-fail Don't fail if the daemon is not available\n"
+msgstr ""
+"%s [valitsimet] %s <nimi> <tyyppi> <portti> [<teksti ...>]\n"
+"%s [valitsimet] %s <verkkonimi> <osoite>\n"
+"\n"
+" -h --help Näytä ohje\n"
+" -V --version Näytä versio\n"
+" -s --service Julkista palvelu\n"
+" -a --address Julkista osoite\n"
+" -v --verbose Ota suulaampi tila käyttöön\n"
+" -d --domain=DOMAIN Verkkoalue jossa palvelu julkaistaan\n"
+" -H --host=DOMAIN Palvelin jolla palvelu sijaitsee\n"
+" --subtype=SUBTYPE Lisäalatyyppi, jolle tämä palvelu rekisteröidään\n"
+" -f --no-fail Älä epäonnistui jos taustaprosessia ei saatavilla\n"
+
+#: ../avahi-utils/avahi-publish.c:300 ../avahi-utils/avahi-publish.c:315
+#, c-format
+msgid "Bad number of arguments\n"
+msgstr "Virheellinen argumenttien lukumäärä\n"
+
+#: ../avahi-utils/avahi-publish.c:326
+#, c-format
+msgid "Failed to parse port number: %s\n"
+msgstr "Porttinumeron jäsentäminen epäonnistui: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:358 ../avahi-utils/avahi-resolve.c:248
+#, c-format
+msgid "No command specified.\n"
+msgstr "Komentoa ei määritelty.\n"
+
+#: ../avahi-utils/avahi-resolve.c:91
+#, c-format
+msgid "Failed to resolve host name '%s': %s\n"
+msgstr "Verkko-osoitteen \"%s\" selvittäminen epäonnistui: %s\n"
+
+#: ../avahi-utils/avahi-resolve.c:128
+#, c-format
+msgid "Failed to resolve address '%s': %s\n"
+msgstr "Osoitteen \"%s\" selvittäminen epäonnistui: %s\n"
+
+#: ../avahi-utils/avahi-resolve.c:159
+#, c-format
+msgid ""
+"%s [options] %s <host name ...>\n"
+"%s [options] %s <address ... >\n"
+"\n"
+" -h --help Show this help\n"
+" -V --version Show version\n"
+" -n --name Resolve host name\n"
+" -a --address Resolve address\n"
+" -v --verbose Enable verbose mode\n"
+" -6 Lookup IPv6 address\n"
+" -4 Lookup IPv4 address\n"
+msgstr ""
+"%s [valitsimet] %s <verkkonimi ...>\n"
+"%s [valitsimet] %s <osoite ... >\n"
+"\n"
+" -h --help Näytä ohje\n"
+" -V --version Näytä versio\n"
+" -n --name Selvitä verkkonimi\n"
+" -a --address Selvitä osoite\n"
+" -v --verbose Ota suulaampi tila käyttöön\n"
+" -6 Etsi IPv6-osoite\n"
+" -4 Etsi IPv4-osoite\n"
+
+#: ../avahi-utils/avahi-resolve.c:301 ../avahi-utils/avahi-set-host-name.c:183
+#, c-format
+msgid "Failed to create host name resolver: %s\n"
+msgstr "Verkko-osoitteen selvittimen luonti epäonnistui: %s\n"
+
+#: ../avahi-utils/avahi-resolve.c:311
+#, c-format
+msgid "Failed to parse address '%s'\n"
+msgstr "Osoitetta \"%s\" ei voi jäsentää\n"
+
+#: ../avahi-utils/avahi-resolve.c:316
+#, c-format
+msgid "Failed to create address resolver: %s\n"
+msgstr "Osoitteen selvittimen luonti epäonnistui: %s\n"
+
+#: ../avahi-utils/avahi-set-host-name.c:75
+#, c-format
+msgid ""
+"%s [options] <new host name>\n"
+"\n"
+" -h --help Show this help\n"
+" -V --version Show version\n"
+" -v --verbose Enable verbose mode\n"
+msgstr ""
+"%s [valitsimet] <uusi verkkonimi>\n"
+"\n"
+" -h --help Näytä tämä ohje\n"
+" -V --version Näytä versio\n"
+" -v --verbose Ota suulaampi tila käyttöön\n"
+
+#: ../avahi-utils/avahi-set-host-name.c:116
+#, c-format
+msgid "Invalid number of arguments, expecting exactly one.\n"
+msgstr "Virheellinen argumenttien lukumäärä, odotettiin täsmälleen yhtä.\n"
+
+#: ../avahi-utils/avahi-set-host-name.c:195
+#, c-format
+msgid "Host name successfully changed to %s\n"
+msgstr "Verkko-osoite muutettiin onnistuneesti nimelle %s\n"
+
diff --git a/po/hu.po b/po/hu.po
new file mode 100644
index 0000000..5da4863
--- /dev/null
+++ b/po/hu.po
@@ -0,0 +1,708 @@
+# Hungarian translation of avahi
+# Copyright (C) 2008, Free Software Foundation, Inc.
+# This file is distributed under the same license as the avahi package.
+#
+# Gabor Kelemen <kelemeng@gnome.hu>, 2008.
+msgid ""
+msgstr ""
+"Project-Id-Version: HEAD\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-08-29 01:22+0200\n"
+"PO-Revision-Date: 2008-08-30 04:14+0200\n"
+"Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n"
+"Language-Team: Hungarian <gnome@fsf.hu>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: ../avahi-common/error.c:32
+msgid "OK"
+msgstr "OK"
+
+#: ../avahi-common/error.c:33
+msgid "Operation failed"
+msgstr "A művelet meghiúsult"
+
+#: ../avahi-common/error.c:34
+msgid "Bad state"
+msgstr "Hibás állapot"
+
+#: ../avahi-common/error.c:35
+msgid "Invalid host name"
+msgstr "Érvénytelen gépnév"
+
+#: ../avahi-common/error.c:36
+msgid "Invalid domain name"
+msgstr "Érvénytelen tartománynév"
+
+#: ../avahi-common/error.c:37
+msgid "No suitable network protocol available"
+msgstr "Nem áll rendelkezésre megfelelő hálózati protokoll"
+
+#: ../avahi-common/error.c:38
+msgid "Invalid DNS TTL"
+msgstr "Érvénytelen DNS TTL"
+
+#: ../avahi-common/error.c:39
+msgid "Resource record key is pattern"
+msgstr "Az erőforrásrekord kulcsa minta"
+
+#: ../avahi-common/error.c:40
+msgid "Local name collision"
+msgstr "Helyi névütközés"
+
+#: ../avahi-common/error.c:41
+msgid "Invalid record"
+msgstr "Érvénytelen rekord"
+
+#: ../avahi-common/error.c:43
+msgid "Invalid service name"
+msgstr "Érvénytelen szolgáltatásnév"
+
+#: ../avahi-common/error.c:44
+msgid "Invalid service type"
+msgstr "Érvénytelen szolgáltatástípus"
+
+#: ../avahi-common/error.c:45
+msgid "Invalid port number"
+msgstr "Érvénytelen portszám"
+
+#: ../avahi-common/error.c:46
+msgid "Invalid record key"
+msgstr "Érvénytelen rekordkulcs"
+
+#: ../avahi-common/error.c:47
+msgid "Invalid address"
+msgstr "Érvénytelen cím"
+
+#: ../avahi-common/error.c:48
+msgid "Timeout reached"
+msgstr "Időtúllépés"
+
+#: ../avahi-common/error.c:49
+msgid "Too many clients"
+msgstr "Túl sok kliens"
+
+#: ../avahi-common/error.c:50
+msgid "Too many objects"
+msgstr "Túl sok objektum"
+
+#: ../avahi-common/error.c:51
+msgid "Too many entries"
+msgstr "Túl sok bejegyzés"
+
+#: ../avahi-common/error.c:52
+msgid "OS Error"
+msgstr "OS hiba"
+
+#: ../avahi-common/error.c:54
+msgid "Access denied"
+msgstr "Hozzáférés megtagadva"
+
+#: ../avahi-common/error.c:55
+msgid "Invalid operation"
+msgstr "Érvénytelen művelet"
+
+#: ../avahi-common/error.c:56
+msgid "An unexpected D-Bus error occured"
+msgstr "Váratlan D-Bus hiba történt"
+
+#: ../avahi-common/error.c:57
+msgid "Daemon connection failed"
+msgstr "A csatlakozás meghiúsult a démonhoz"
+
+#: ../avahi-common/error.c:58
+msgid "Memory exhausted"
+msgstr "Elfogyott a memória"
+
+#: ../avahi-common/error.c:59
+msgid "The object passed in was not valid"
+msgstr "Az átadott objektum érvénytelen volt"
+
+#: ../avahi-common/error.c:60
+msgid "Daemon not running"
+msgstr "A démon nem fut"
+
+#: ../avahi-common/error.c:61
+msgid "Invalid interface index"
+msgstr "Érvénytelen felületindex"
+
+#: ../avahi-common/error.c:62
+msgid "Invalid protocol specification"
+msgstr "Érvénytelen protokollmeghatározás"
+
+#: ../avahi-common/error.c:63
+msgid "Invalid flags"
+msgstr "Érvénytelen jelzők"
+
+#: ../avahi-common/error.c:65
+msgid "Not found"
+msgstr "Nem található"
+
+#: ../avahi-common/error.c:66
+msgid "Invalid configuration"
+msgstr "Érvénytelen konfiguráció"
+
+#: ../avahi-common/error.c:67
+msgid "Version mismatch"
+msgstr "Verzióeltérés"
+
+#: ../avahi-common/error.c:68
+msgid "Invalid service subtype"
+msgstr "Érvénytelen szolgáltatásaltípus"
+
+#: ../avahi-common/error.c:69
+msgid "Invalid packet"
+msgstr "Érvénytelen csomag"
+
+#: ../avahi-common/error.c:70
+msgid "Invalid DNS return code"
+msgstr "Érvénytelen DNS visszatérési érték"
+
+#: ../avahi-common/error.c:71
+msgid "DNS failure: FORMERR"
+msgstr "DNS hiba: FORMERR"
+
+#: ../avahi-common/error.c:72
+msgid "DNS failure: SERVFAIL"
+msgstr "DNS hiba: SERVFAIL"
+
+#: ../avahi-common/error.c:73
+msgid "DNS failure: NXDOMAIN"
+msgstr "DNS hiba: NXDOMAIN"
+
+#: ../avahi-common/error.c:74
+msgid "DNS failure: NOTIMP"
+msgstr "DNS hiba: NOTIMP"
+
+#: ../avahi-common/error.c:76
+msgid "DNS failure: REFUSED"
+msgstr "DNS hiba: REFUSED"
+
+#: ../avahi-common/error.c:77
+msgid "DNS failure: YXDOMAIN"
+msgstr "DNS hiba: YXDOMAIN"
+
+#: ../avahi-common/error.c:78
+msgid "DNS failure: YXRRSET"
+msgstr "DNS hiba: YXRRSET"
+
+#: ../avahi-common/error.c:79
+msgid "DNS failure: NXRRSET"
+msgstr "DNS hiba: NXRRSET"
+
+#: ../avahi-common/error.c:80
+msgid "DNS failure: NOTAUTH"
+msgstr "DNS hiba: NOTAUTH"
+
+#: ../avahi-common/error.c:81
+msgid "DNS failure: NOTZONE"
+msgstr "DNS hiba: NOTZONE"
+
+#: ../avahi-common/error.c:82
+msgid "Invalid RDATA"
+msgstr "Érvénytelen RDATA"
+
+#: ../avahi-common/error.c:83
+msgid "Invalid DNS type"
+msgstr "Érvénytelen DNS-típus"
+
+#: ../avahi-common/error.c:84
+msgid "Invalid DNS class"
+msgstr "Érvénytelen DNS-osztály"
+
+#: ../avahi-common/error.c:85
+msgid "Not supported"
+msgstr "Nem támogatott"
+
+#: ../avahi-common/error.c:87
+msgid "Not permitted"
+msgstr "Nem engedélyezett"
+
+#: ../avahi-common/error.c:88
+msgid "Invalid argument"
+msgstr "Érvénytelen paraméter"
+
+#: ../avahi-common/error.c:89
+msgid "Is empty"
+msgstr "Üres"
+
+#: ../avahi-common/error.c:90
+msgid "The requested operation is invalid because redundant"
+msgstr "A kért művelet érvénytelen, mivel redundáns"
+
+#: ../avahi-common/error.c:96
+msgid "Invalid Error Code"
+msgstr "Érvénytelen hibakód"
+
+#: ../avahi-ui/avahi-ui.c:326
+#, c-format
+msgid "Avahi client failure: %s"
+msgstr "Avahi klienshiba: %s"
+
+#: ../avahi-ui/avahi-ui.c:388
+#, c-format
+msgid "Avahi resolver failure: %s"
+msgstr "Avahi feloldási hiba: %s"
+
+#: ../avahi-ui/avahi-ui.c:518
+#, c-format
+msgid "Browsing for service type %s in domain %s failed: %s"
+msgstr "A szolgáltatástípus (%s) tallózása a tartományban (%s) meghiúsult: %s"
+
+#: ../avahi-ui/avahi-ui.c:519 ../avahi-utils/avahi-browse.c:157
+#: ../avahi-utils/avahi-browse.c:158 ../avahi-utils/avahi-browse.c:164
+#: ../avahi-utils/avahi-browse.c:165
+msgid "n/a"
+msgstr "ismeretlen"
+
+#: ../avahi-ui/avahi-ui.c:649
+#, c-format
+msgid "Avahi domain browser failure: %s"
+msgstr "Avahi tartományböngésző-hiba: %s"
+
+#: ../avahi-ui/avahi-ui.c:684
+#, c-format
+msgid "Failed to read Avahi domain: %s"
+msgstr "Az Avahi tartomány olvasása meghiúsult: %s"
+
+#: ../avahi-ui/avahi-ui.c:717
+#, c-format
+msgid "Failed to connect to Avahi server: %s"
+msgstr "A csatlakozás meghiúsult az Avahi kiszolgálóhoz: %s"
+
+#: ../avahi-ui/avahi-ui.c:735
+msgid "Browsing for services on <b>local network</b>:"
+msgstr "Szolgáltatások tallózása a <b>helyi hálózaton</b>:"
+
+#: ../avahi-ui/avahi-ui.c:737
+#, c-format
+msgid "Browsing for services in domain <b>%s</b>:"
+msgstr "Szolgáltatások tallózása a(z) <b>%s</b> tartományban:"
+
+#: ../avahi-ui/avahi-ui.c:773
+#, c-format
+msgid "Failed to create browser for %s: %s"
+msgstr "Nem sikerült tallózót létrehozni a következőhöz: %s: %s"
+
+#: ../avahi-ui/avahi-ui.c:903
+#, c-format
+msgid "Failed to create resolver for %s of type %s in domain %s: %s"
+msgstr "Nem sikerült $%2s típusú feloldót létrehozni a következőhöz: $%1s a(z) $%3s tartományban: $%4s"
+
+#: ../avahi-ui/avahi-ui.c:978
+#, c-format
+msgid "Failed to create domain browser: %s"
+msgstr "Nem sikerült tartománytallózót létrehozni: %s"
+
+#: ../avahi-ui/avahi-ui.c:989
+msgid "Change domain"
+msgstr "Tartomány módosítása"
+
+#: ../avahi-ui/avahi-ui.c:1021
+msgid "Service Name"
+msgstr "Szolgáltatásnév"
+
+#: ../avahi-ui/avahi-ui.c:1029 ../avahi-ui/avahi-ui.c:1160
+msgid "Browsing ..."
+msgstr "Tallózás..."
+
+#: ../avahi-ui/avahi-ui.c:1118
+msgid "Initializing..."
+msgstr "Előkészítés..."
+
+#: ../avahi-ui/avahi-ui.c:1164
+msgid "_Domain..."
+msgstr "_Tartomány..."
+
+#: ../avahi-ui/bssh.c:57
+#, c-format
+msgid ""
+"%s [options]\n"
+"\n"
+" -h --help Show this help\n"
+" -s --ssh Browse SSH servers\n"
+" -v --vnc Browse VNC servers\n"
+" -S --shell Browse both SSH and VNC\n"
+" -d --domain=DOMAIN The domain to browse in\n"
+msgstr ""
+"%s [kapcsolók]\n"
+"\n"
+" -h --help Ezen súgó megjelenítése\n"
+" -s --ssh SSH kiszolgálók tallózása\n"
+" -v --vnc VNC kiszolgálók tallózása\n"
+" -S --shell SSH és VNC kiszolgálók tallózása\n"
+" -d --domain=TARTOMÁNY A tallózandó tartomány\n"
+
+#: ../avahi-ui/bssh.c:103 ../avahi-utils/avahi-browse.c:759
+#, c-format
+msgid "Too many arguments\n"
+msgstr "Túl sok paraméter\n"
+
+#: ../avahi-ui/bssh.c:147
+msgid "Choose Shell Server"
+msgstr "Válassza ki a shell kiszolgálót"
+
+#: ../avahi-ui/bssh.c:149
+msgid "Desktop"
+msgstr "Asztal"
+
+#: ../avahi-ui/bssh.c:150
+msgid "Terminal"
+msgstr "Terminál"
+
+#: ../avahi-ui/bssh.c:154
+msgid "Choose VNC server"
+msgstr "Válasszon VNC kiszolgálót"
+
+#: ../avahi-ui/bssh.c:159
+msgid "Choose SSH server"
+msgstr "Válasszon SSH kiszolgálót"
+
+#: ../avahi-ui/bssh.c:183
+#, c-format
+msgid "Connecting to '%s' ...\n"
+msgstr "Csatlakozás ehhez: „%s” ...\n"
+
+#: ../avahi-ui/bssh.c:238
+#, c-format
+msgid "execlp() failed: %s\n"
+msgstr "Az execlp() meghiúsult: %s\n"
+
+#: ../avahi-ui/bssh.c:248
+#, c-format
+msgid "Canceled.\n"
+msgstr "Megszakítva.\n"
+
+#: ../avahi-ui/bssh.desktop.in.in.h:1
+msgid "Avahi SSH Server Browser"
+msgstr "Avahi SSH-kiszolgálóböngésző"
+
+#: ../avahi-ui/bssh.desktop.in.in.h:2
+msgid "Browse for Zeroconf-enabled SSH Servers"
+msgstr "Zeroconf-képes SSH kiszolgálók keresése"
+
+#: ../avahi-ui/bvnc.desktop.in.in.h:1
+msgid "Avahi VNC Server Browser"
+msgstr "Avahi VNC-kiszolgálóböngésző"
+
+#: ../avahi-ui/bvnc.desktop.in.in.h:2
+msgid "Browse for Zeroconf-enabled VNC Servers"
+msgstr "Zeroconf-képes VNC kiszolgálók keresése"
+
+# fixme: wtf?
+#: ../avahi-utils/avahi-browse.c:108
+#, c-format
+msgid ": All for now\n"
+msgstr ": most mind\n"
+
+#: ../avahi-utils/avahi-browse.c:119
+#, c-format
+msgid ": Cache exhausted\n"
+msgstr ": a gyorsítótár elfogyott\n"
+
+#: ../avahi-utils/avahi-browse.c:223 ../avahi-utils/avahi-browse.c:245
+#, c-format
+msgid "Failed to resolve service '%s' of type '%s' in domain '%s': %s\n"
+msgstr "A(z) $%2s típusú $%1s szolgáltatás feloldása meghiúsult a(z) $%3s tartományban: $%4s\n"
+
+#: ../avahi-utils/avahi-browse.c:324
+#, c-format
+msgid "service_browser failed: %s\n"
+msgstr "a service_browser sikertelen: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:362
+#, c-format
+msgid "avahi_service_browser_new() failed: %s\n"
+msgstr "az avahi_service_browser_new() sikertelen: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:398
+#, c-format
+msgid "service_type_browser failed: %s\n"
+msgstr "a service_type_browser sikertelen: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:428
+#, c-format
+msgid "avahi_service_type_browser_new() failed: %s\n"
+msgstr "az avahi_service_type_browser_new() sikertelen: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:503
+#, c-format
+msgid "avahi_domain_browser_new() failed: %s\n"
+msgstr "az avahi_domain_browser_new() sikertelen: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:519 ../avahi-utils/avahi-publish.c:391
+#: ../avahi-utils/avahi-resolve.c:282 ../avahi-utils/avahi-set-host-name.c:170
+#, c-format
+msgid "Failed to query version string: %s\n"
+msgstr "A verzió-karakterlánc lekérdezése meghiúsult: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:524 ../avahi-utils/avahi-publish.c:396
+#: ../avahi-utils/avahi-resolve.c:287 ../avahi-utils/avahi-set-host-name.c:175
+#: ../avahi-utils/avahi-set-host-name.c:191
+#, c-format
+msgid "Failed to query host name: %s\n"
+msgstr "A gépnév lekérdezése meghiúsult: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:528 ../avahi-utils/avahi-publish.c:400
+#: ../avahi-utils/avahi-resolve.c:291 ../avahi-utils/avahi-set-host-name.c:179
+#, c-format
+msgid "Server version: %s; Host name: %s\n"
+msgstr "Kiszolgálóverzió: %s; gépnév: %s\n"
+
+#. Translators: This is a column heading with abbreviations for
+#. * Event (+/-), Network Interface, Protocol (IPv4/v6), Domain
+#: ../avahi-utils/avahi-browse.c:533
+#, c-format
+msgid "E Ifce Prot Domain\n"
+msgstr "E Csat Prot Tartom\n"
+
+#. Translators: This is a column heading with abbreviations for
+#. * Event (+/-), Network Interface, Protocol (IPv4/v6), Domain
+#: ../avahi-utils/avahi-browse.c:537
+#, c-format
+msgid "E Ifce Prot %-*s %-20s Domain\n"
+msgstr "E Csat Prot %-*s %-20s Tartom\n"
+
+#: ../avahi-utils/avahi-browse.c:537
+msgid "Name"
+msgstr "Név"
+
+#: ../avahi-utils/avahi-browse.c:537
+msgid "Type"
+msgstr "Típus"
+
+#. We have been disconnected, so let reconnect
+#: ../avahi-utils/avahi-browse.c:569 ../avahi-utils/avahi-publish.c:165
+#, c-format
+msgid "Disconnected, reconnecting ...\n"
+msgstr "Leválsztva, újracsatlakozás...\n"
+
+#: ../avahi-utils/avahi-browse.c:583 ../avahi-utils/avahi-browse.c:813
+#: ../avahi-utils/avahi-publish.c:172 ../avahi-utils/avahi-publish.c:383
+#: ../avahi-utils/avahi-resolve.c:274 ../avahi-utils/avahi-set-host-name.c:162
+#, c-format
+msgid "Failed to create client object: %s\n"
+msgstr "Kliensobjektum létrehozása meghiúsult: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:588 ../avahi-utils/avahi-publish.c:177
+#: ../avahi-utils/avahi-resolve.c:145 ../avahi-utils/avahi-set-host-name.c:61
+#, c-format
+msgid "Client failure, exiting: %s\n"
+msgstr "Klienshiba, kilépés: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:607 ../avahi-utils/avahi-publish.c:208
+#, c-format
+msgid "Waiting for daemon ...\n"
+msgstr "Várakozás a démonra...\n"
+
+#: ../avahi-utils/avahi-browse.c:631
+msgid ""
+" -h --help Show this help\n"
+" -V --version Show version\n"
+" -D --browse-domains Browse for browsing domains instead of services\n"
+" -a --all Show all services, regardless of the type\n"
+" -d --domain=DOMAIN The domain to browse in\n"
+" -v --verbose Enable verbose mode\n"
+" -t --terminate Terminate after dumping a more or less complete "
+"list\n"
+" -c --cache Terminate after dumping all entries from the cache\n"
+" -l --ignore-local Ignore local services\n"
+" -r --resolve Resolve services found\n"
+" -f --no-fail Don't fail if the daemon is not available\n"
+" -p --parsable Output in parsable format\n"
+msgstr ""
+" -h --help Ezen súgó megjelenítése\n"
+" -V --version Verziószám megjelenítése\n"
+" -D --browse-domains Szolgáltatások helyett tartományok tallózása\n"
+" -a --all Minden szolgáltatás megjelenítése, típusfüggetlenül\n"
+" -d --domain=TARTOMÁNY A tallózandó tartomány\n"
+" -v --verbose Részletes mód engedélyezése\n"
+" -t --terminate Befejezés a többé-kevésbé teljes lista kiírása után\n"
+" -c --cache Befejezés a gyorsítótár bejegyzéseinek kiírása után\n"
+" -l --ignore-local Helyi szolgáltatások figyelmen kívül hagyása\n"
+" -r --resolve Talált szolgáltatások feloldása\n"
+" -f --no-fail Ne hibázzon, ha a démon nem érhető el\n"
+" -p --parsable Kimenet feldolgozható formában\n"
+
+#: ../avahi-utils/avahi-browse.c:644
+msgid ""
+" -k --no-db-lookup Don't lookup service types\n"
+" -b --dump-db Dump service type database\n"
+msgstr ""
+" -k --no-db-lookup Ne keresse ki a szolgáltatástípusokat\n"
+" -b --dump-db Szolgáltatástípus-adatbázis kiírása\n"
+
+#: ../avahi-utils/avahi-browse.c:750 ../avahi-utils/avahi-resolve.c:221
+#, c-format
+msgid "Too few arguments\n"
+msgstr "Túl kevés paraméter\n"
+
+#: ../avahi-utils/avahi-browse.c:805 ../avahi-utils/avahi-publish.c:375
+#: ../avahi-utils/avahi-resolve.c:266 ../avahi-utils/avahi-set-host-name.c:154
+#, c-format
+msgid "Failed to create simple poll object.\n"
+msgstr "Az egyszerű lekérdezési objektum létrehozása meghiúsult.\n"
+
+#: ../avahi-utils/avahi-publish.c:78
+#, c-format
+msgid "Established under name '%s'\n"
+msgstr "Létrehozva ezen név alatt: „%s”\n"
+
+#: ../avahi-utils/avahi-publish.c:83
+#, c-format
+msgid "Failed to register: %s\n"
+msgstr "A regisztráció meghiúsult: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:96
+#, c-format
+msgid "Name collision, picking new name '%s'.\n"
+msgstr "Névütközés, új név választása: „%s”.\n"
+
+#: ../avahi-utils/avahi-publish.c:116
+#, c-format
+msgid "Failed to create entry group: %s\n"
+msgstr "A bejegyzéscsoport létrehozása meghiúsult: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:126
+#, c-format
+msgid "Failed to add address: %s\n"
+msgstr "A cím hozzáadása meghiúsult: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:136
+#, c-format
+msgid "Failed to add service: %s\n"
+msgstr "A szolgáltatás hozzáadása meghiúsult: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:142
+#, c-format
+msgid "Failed to add subtype '%s': %s\n"
+msgstr "Az altípus („%s”) hozzáadása meghiúsult: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:193
+#, c-format
+msgid "Host name conflict\n"
+msgstr "Gépnévütközés\n"
+
+#: ../avahi-utils/avahi-publish.c:218
+#, c-format
+msgid ""
+"%s [options] %s <name> <type> <port> [<txt ...>]\n"
+"%s [options] %s <host-name> <address>\n"
+"\n"
+" -h --help Show this help\n"
+" -V --version Show version\n"
+" -s --service Publish service\n"
+" -a --address Publish address\n"
+" -v --verbose Enable verbose mode\n"
+" -d --domain=DOMAIN Domain to publish service in\n"
+" -H --host=DOMAIN Host where service resides\n"
+" --subtype=SUBTYPE An additional subtype to register this service "
+"with\n"
+" -f --no-fail Don't fail if the daemon is not available\n"
+msgstr ""
+"%s [kapcsolók] %s <név> <típus> <port> [<txt ...>]\n"
+"%s [kapcsolók] %s <gépnév> <cím>\n"
+"\n"
+" -h --help Ezen súgó megjelenítése\n"
+" -V --version Verziószám megjelenítése\n"
+" -s --service Szolgáltatás közzététele\n"
+" -a --address Cím közzététele\n"
+" -v --verbose Részletes mód engedélyezése\n"
+" -d --domain=TARTOMÁNY Szolgáltatás közzététele ebben a tartományban\n"
+" -H --host=TARTOMÁNY A szolgáltatás ezen a gépen található\n"
+" --subtype=ALTÍPUS További altípus, amellyel a szolgáltatás regisztrálandó\n"
+" -f --no-fail Ne hibázzon, ha a démon nem érhető el\n"
+
+#: ../avahi-utils/avahi-publish.c:300 ../avahi-utils/avahi-publish.c:315
+#, c-format
+msgid "Bad number of arguments\n"
+msgstr "A paraméterek száma nem megfelelő\n"
+
+#: ../avahi-utils/avahi-publish.c:326
+#, c-format
+msgid "Failed to parse port number: %s\n"
+msgstr "A portszám feldolgozása meghiúsult: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:358 ../avahi-utils/avahi-resolve.c:248
+#, c-format
+msgid "No command specified.\n"
+msgstr "Nincs megadva parancs.\n"
+
+#: ../avahi-utils/avahi-resolve.c:91
+#, c-format
+msgid "Failed to resolve host name '%s': %s\n"
+msgstr "A gépnév („%s”) feloldása meghiúsult: %s\n"
+
+#: ../avahi-utils/avahi-resolve.c:128
+#, c-format
+msgid "Failed to resolve address '%s': %s\n"
+msgstr "A cím („%s”) feloldása meghiúsult: %s\n"
+
+#: ../avahi-utils/avahi-resolve.c:159
+#, c-format
+msgid ""
+"%s [options] %s <host name ...>\n"
+"%s [options] %s <address ... >\n"
+"\n"
+" -h --help Show this help\n"
+" -V --version Show version\n"
+" -n --name Resolve host name\n"
+" -a --address Resolve address\n"
+" -v --verbose Enable verbose mode\n"
+" -6 Lookup IPv6 address\n"
+" -4 Lookup IPv4 address\n"
+msgstr ""
+"%s [kapcsolók] %s <gépnév ...>\n"
+"%s [kapcsolók] %s <cím ... >\n"
+"\n"
+" -h --help Ezen súgó megjelenítése\n"
+" -V --version Verziószám megjelenítése\n"
+" -n --name Gépnév feloldása\n"
+" -a --address Cím feloldása\n"
+" -v --verbose Részletes mód engedélyezése\n"
+" -6 IPv6 cím kikeresése\n"
+" -4 IPv4 cím kikeresése\n"
+
+#: ../avahi-utils/avahi-resolve.c:301 ../avahi-utils/avahi-set-host-name.c:183
+#, c-format
+msgid "Failed to create host name resolver: %s\n"
+msgstr "A gépnévfeloldó létrehozása meghiúsult: %s\n"
+
+#: ../avahi-utils/avahi-resolve.c:311
+#, c-format
+msgid "Failed to parse address '%s'\n"
+msgstr "A cím („%s”) feldolgozása meghiúsult\n"
+
+#: ../avahi-utils/avahi-resolve.c:316
+#, c-format
+msgid "Failed to create address resolver: %s\n"
+msgstr "A címfeloldó létrehozása meghiúsult: %s\n"
+
+#: ../avahi-utils/avahi-set-host-name.c:75
+#, c-format
+msgid ""
+"%s [options] <new host name>\n"
+"\n"
+" -h --help Show this help\n"
+" -V --version Show version\n"
+" -v --verbose Enable verbose mode\n"
+msgstr ""
+"%s [kapcsolók] <új gépnév>\n"
+"\n"
+" -h --help Ezen súgó megjelenítése\n"
+" -V --version Verziószám megjelenítése\n"
+" -v --verbose Részletes mód engedélyezése\n"
+
+#: ../avahi-utils/avahi-set-host-name.c:116
+#, c-format
+msgid "Invalid number of arguments, expecting exactly one.\n"
+msgstr "Érvénytelen számú argumentum, pontosan egy szükséges.\n"
+
+#: ../avahi-utils/avahi-set-host-name.c:195
+#, c-format
+msgid "Host name successfully changed to %s\n"
+msgstr "A gépnév sikeresen módosítva a következőre: %s\n"
+
diff --git a/po/it.po b/po/it.po
index fc693d0..924257d 100644
--- a/po/it.po
+++ b/po/it.po
@@ -1,22 +1,23 @@
-# translation of avahi.po to italiano
-# Italian translation of avahi.
+# translation of avahi.master-tx.it.po to Italiano
# Copyright (C) 2008 avahi.
# This file is distributed under the same license as the avahi package.
#
# Silvio Pierro <perplesso82@gmail.com>, 2008.
# Gianluca Busiello <busiello@ceinge.unina.it>, 2008.
+# Francesco Tombolini <tombo@adamantio.net>, 2008.
msgid ""
msgstr ""
-"Project-Id-Version: avahi\n"
+"Project-Id-Version: avahi.master-tx.it\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-03-21 10:21+0000\n"
-"PO-Revision-Date: 2008-03-28 23:26+0100\n"
-"Last-Translator: Gianluca Busiello <busiello@ceinge.unina.it>\n"
-"Language-Team: italiano <fedora-trans-it@redhat.com>\n"
+"POT-Creation-Date: 2008-08-29 09:19+0000\n"
+"PO-Revision-Date: 2008-09-24 03:12+0200\n"
+"Last-Translator: Francesco Tombolini <tombo@adamantio.net>\n"
+"Language-Team: Italiano <fedora-trans-it@redhat.com>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../avahi-common/error.c:32
msgid "OK"
@@ -291,7 +292,9 @@ msgstr "Creazione di browser per %s fallita: %s"
#: ../avahi-ui/avahi-ui.c:903
#, c-format
msgid "Failed to create resolver for %s of type %s in domain %s: %s"
-msgstr "Fallimento nella creazione del risolutore per %s del tipo %s nel dominio %s: %s"
+msgstr ""
+"Fallimento nella creazione del risolutore per %s del tipo %s nel dominio %s: "
+"%s"
#: ../avahi-ui/avahi-ui.c:978
#, c-format
@@ -318,40 +321,80 @@ msgstr "Inizializzazione..."
msgid "_Domain..."
msgstr "_Dominio..."
-#: ../avahi-ui/bssh.c:51
+#: ../avahi-ui/bssh.c:57
+#, c-format
+msgid ""
+"%s [options]\n"
+"\n"
+" -h --help Show this help\n"
+" -s --ssh Browse SSH servers\n"
+" -v --vnc Browse VNC servers\n"
+" -S --shell Browse both SSH and VNC\n"
+" -d --domain=DOMAIN The domain to browse in\n"
+msgstr ""
+"%s [opzioni]\n"
+"\n"
+" -h --help Mostra questo aiuto\n"
+" -s --ssh Sfoglia i server SSH\n"
+" -v --vnc Sfoglia i server VNC\n"
+" -S --shell Sfoglia sia SSH che VNC\n"
+" -d --domain=DOMINIO Il dominio in cui ricercare\n"
+
+#: ../avahi-ui/bssh.c:103 ../avahi-utils/avahi-browse.c:759
+#, c-format
+msgid "Too many arguments\n"
+msgstr "Troppi argomenti\n"
+
+#: ../avahi-ui/bssh.c:147
msgid "Choose Shell Server"
msgstr "Selezionare il server shell"
-#: ../avahi-ui/bssh.c:53
+#: ../avahi-ui/bssh.c:149
msgid "Desktop"
msgstr "Desktop"
-#: ../avahi-ui/bssh.c:54
+#: ../avahi-ui/bssh.c:150
msgid "Terminal"
msgstr "Terminale"
-#: ../avahi-ui/bssh.c:56
+#: ../avahi-ui/bssh.c:154
msgid "Choose VNC server"
msgstr "Selezionare il server VNC"
-#: ../avahi-ui/bssh.c:59
+#: ../avahi-ui/bssh.c:159
msgid "Choose SSH server"
msgstr "Selezionare il server SSH"
-#: ../avahi-ui/bssh.c:81
+#: ../avahi-ui/bssh.c:183
#, c-format
msgid "Connecting to '%s' ...\n"
msgstr "Connessione a '%s' ...\n"
-#: ../avahi-ui/bssh.c:135
+#: ../avahi-ui/bssh.c:238
#, c-format
msgid "execlp() failed: %s\n"
msgstr "fallito execlp(): %s\n"
-#: ../avahi-ui/bssh.c:145
+#: ../avahi-ui/bssh.c:248
msgid "Canceled.\n"
msgstr "Cancellato.\n"
+#: ../avahi-ui/bssh.desktop.in.h:1
+msgid "Avahi SSH Server Browser"
+msgstr "Browser avahi per i server SSH"
+
+#: ../avahi-ui/bssh.desktop.in.h:2
+msgid "Browse for Zeroconf-enabled SSH Servers"
+msgstr "Browser per i server SSH Zeroconf-enabled"
+
+#: ../avahi-ui/bvnc.desktop.in.h:1
+msgid "Avahi VNC Server Browser"
+msgstr "Browser avahi per i server VNC"
+
+#: ../avahi-ui/bvnc.desktop.in.h:2
+msgid "Browse for Zeroconf-enabled VNC Servers"
+msgstr "Browser per i server VNC Zeroconf-enabled"
+
#: ../avahi-utils/avahi-browse.c:108
#, c-format
msgid ": All for now\n"
@@ -411,49 +454,53 @@ msgstr "Interrogazione nome host fallita: %s\n"
msgid "Server version: %s; Host name: %s\n"
msgstr "Versione server: %s; Nome host: %s\n"
-#: ../avahi-utils/avahi-browse.c:531
+#. Translators: This is a column heading with abbreviations for
+#. * Event (+/-), Network Interface, Protocol (IPv4/v6), Domain
+#: ../avahi-utils/avahi-browse.c:533
#, c-format
msgid "E Ifce Prot Domain\n"
msgstr "E Ifce Prot Domain\n"
-#: ../avahi-utils/avahi-browse.c:533
+#. Translators: This is a column heading with abbreviations for
+#. * Event (+/-), Network Interface, Protocol (IPv4/v6), Domain
+#: ../avahi-utils/avahi-browse.c:537
#, c-format
msgid "E Ifce Prot %-*s %-20s Domain\n"
msgstr "E Ifce Prot %-*s %-20s Domain\n"
-#: ../avahi-utils/avahi-browse.c:533
+#: ../avahi-utils/avahi-browse.c:537
msgid "Name"
msgstr "Nome"
-#: ../avahi-utils/avahi-browse.c:533
+#: ../avahi-utils/avahi-browse.c:537
msgid "Type"
msgstr "Tipo"
#. We have been disconnected, so let reconnect
-#: ../avahi-utils/avahi-browse.c:564 ../avahi-utils/avahi-publish.c:165
+#: ../avahi-utils/avahi-browse.c:569 ../avahi-utils/avahi-publish.c:165
#, c-format
msgid "Disconnected, reconnecting ...\n"
msgstr "Disconnesso, riconnessione ...\n"
-#: ../avahi-utils/avahi-browse.c:578 ../avahi-utils/avahi-browse.c:808
+#: ../avahi-utils/avahi-browse.c:583 ../avahi-utils/avahi-browse.c:813
#: ../avahi-utils/avahi-publish.c:172 ../avahi-utils/avahi-publish.c:383
#: ../avahi-utils/avahi-resolve.c:274 ../avahi-utils/avahi-set-host-name.c:162
#, c-format
msgid "Failed to create client object: %s\n"
msgstr "Creazione dell'oggetto client fallita: %s\n"
-#: ../avahi-utils/avahi-browse.c:583 ../avahi-utils/avahi-publish.c:177
+#: ../avahi-utils/avahi-browse.c:588 ../avahi-utils/avahi-publish.c:177
#: ../avahi-utils/avahi-resolve.c:145 ../avahi-utils/avahi-set-host-name.c:61
#, c-format
msgid "Client failure, exiting: %s\n"
msgstr "Fallimento client, uscita: %s\n"
-#: ../avahi-utils/avahi-browse.c:602 ../avahi-utils/avahi-publish.c:208
+#: ../avahi-utils/avahi-browse.c:607 ../avahi-utils/avahi-publish.c:208
#, c-format
msgid "Waiting for daemon ...\n"
msgstr "In attesa per il demone ...\n"
-#: ../avahi-utils/avahi-browse.c:626
+#: ../avahi-utils/avahi-browse.c:631
msgid ""
" -h --help Show this help\n"
" -V --version Show version\n"
@@ -471,20 +518,24 @@ msgid ""
msgstr ""
" -h --help Mostra questo messaggio\n"
" -V --version Mostra la versione\n"
-" -D --browse-domains Condividi per i domini condivisi invece dei servizi\n"
+" -D --browse-domains Condividi per i domini condivisi invece dei "
+"servizi\n"
" -a --all Mostra tutti i servizi, senza tener conto il tipo\n"
" -d --domain=DOMAIN Il dominio nel quale fare browsing\n"
" -v --verbose Abilita la modalità con dettagli\n"
-" -t --terminate Termina dopo lo scaricamento di una lista piu o meno\n"
+" -t --terminate Termina dopo lo scaricamento di una lista piu o "
+"meno\n"
" completa\n"
-" -c --cache Termina dopo lo scaricamento di tutte le voci dalla\n"
+" -c --cache Termina dopo lo scaricamento di tutte le voci "
+"dalla\n"
" cache\n"
" -l --ignore-local Ignora i servizi locali\n"
" -r --resolve Risolvi i servizi trovati\n"
-" -f --no-fail Non terminare con errore se il demone non è disponibile\n"
+" -f --no-fail Non terminare con errore se il demone non è "
+"disponibile\n"
" -p --parsable Ritorna un formato analizzabile\n"
-#: ../avahi-utils/avahi-browse.c:639
+#: ../avahi-utils/avahi-browse.c:644
msgid ""
" -k --no-db-lookup Don't lookup service types\n"
" -b --dump-db Dump service type database\n"
@@ -492,17 +543,12 @@ msgstr ""
" -k --no-db-lookup Non guardare i tipi di servizi\n"
" -b --dump-db Scarica il database dei tipi di servizi\n"
-#: ../avahi-utils/avahi-browse.c:745 ../avahi-utils/avahi-resolve.c:221
+#: ../avahi-utils/avahi-browse.c:750 ../avahi-utils/avahi-resolve.c:221
#, c-format
msgid "Too few arguments\n"
msgstr "Troppo pochi argomenti\n"
-#: ../avahi-utils/avahi-browse.c:754
-#, c-format
-msgid "Too many arguments\n"
-msgstr "Troppi argomenti\n"
-
-#: ../avahi-utils/avahi-browse.c:800 ../avahi-utils/avahi-publish.c:375
+#: ../avahi-utils/avahi-browse.c:805 ../avahi-utils/avahi-publish.c:375
#: ../avahi-utils/avahi-resolve.c:266 ../avahi-utils/avahi-set-host-name.c:154
#, c-format
msgid "Failed to create simple poll object.\n"
@@ -577,7 +623,8 @@ msgstr ""
" -H --host=DOMAIN L'host dove risiedono i servizi\n"
" --subtype=SUBTYPE Un sottotipo addizionale con cui registrare questo\n"
" servizio\n"
-" -f --no-fail Non terminare con errore se il demone non è disponibile\n"
+" -f --no-fail Non terminare con errore se il demone non è "
+"disponibile\n"
#: ../avahi-utils/avahi-publish.c:300 ../avahi-utils/avahi-publish.c:315
#, c-format
diff --git a/po/sv.po b/po/sv.po
new file mode 100644
index 0000000..4996664
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,727 @@
+# Swedish translation for avahi.
+# Copyright (C) 2008 Free Software Foundation, Inc.
+# This file is distributed under the same license as the avahi package.
+# Daniel Nylander <po@danielnylander.se>, 2008.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: avahi\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-09-04 04:23+0000\n"
+"PO-Revision-Date: 2008-09-05 00:18+0100\n"
+"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../avahi-common/error.c:32
+msgid "OK"
+msgstr "OK"
+
+#: ../avahi-common/error.c:33
+msgid "Operation failed"
+msgstr "Åtgärden misslyckades"
+
+#: ../avahi-common/error.c:34
+msgid "Bad state"
+msgstr "Felaktigt tillstånd"
+
+#: ../avahi-common/error.c:35
+msgid "Invalid host name"
+msgstr "Ogiltigt värdnamn"
+
+#: ../avahi-common/error.c:36
+msgid "Invalid domain name"
+msgstr "Ogiltigt domännamn"
+
+#: ../avahi-common/error.c:37
+msgid "No suitable network protocol available"
+msgstr "Inget lämpligt nätverksprotokoll tillgängligt"
+
+#: ../avahi-common/error.c:38
+msgid "Invalid DNS TTL"
+msgstr "Ogiltigt DNS TTL"
+
+#: ../avahi-common/error.c:39
+msgid "Resource record key is pattern"
+msgstr "Resursens postnyckel är mönster"
+
+#: ../avahi-common/error.c:40
+msgid "Local name collision"
+msgstr "Lokal namnkollision"
+
+#: ../avahi-common/error.c:41
+msgid "Invalid record"
+msgstr "Ogiltig post"
+
+#: ../avahi-common/error.c:43
+msgid "Invalid service name"
+msgstr "Ogiltigt tjänstenamn"
+
+#: ../avahi-common/error.c:44
+msgid "Invalid service type"
+msgstr "Ogiltig tjänstetyp"
+
+#: ../avahi-common/error.c:45
+msgid "Invalid port number"
+msgstr "Ogiltigt portnummer"
+
+#: ../avahi-common/error.c:46
+msgid "Invalid record key"
+msgstr "Ogiltig postnyckel"
+
+#: ../avahi-common/error.c:47
+msgid "Invalid address"
+msgstr "Ogiltig adress"
+
+#: ../avahi-common/error.c:48
+msgid "Timeout reached"
+msgstr "Tidsgräns nåddes"
+
+#: ../avahi-common/error.c:49
+msgid "Too many clients"
+msgstr "För många klienter"
+
+#: ../avahi-common/error.c:50
+msgid "Too many objects"
+msgstr "För många objekt"
+
+#: ../avahi-common/error.c:51
+msgid "Too many entries"
+msgstr "För många poster"
+
+#: ../avahi-common/error.c:52
+msgid "OS Error"
+msgstr "Operativsystemsfel"
+
+#: ../avahi-common/error.c:54
+msgid "Access denied"
+msgstr "Åtkomst nekad"
+
+#: ../avahi-common/error.c:55
+msgid "Invalid operation"
+msgstr "Ogiltig åtgärd"
+
+#: ../avahi-common/error.c:56
+msgid "An unexpected D-Bus error occured"
+msgstr "Ett oväntat D-Bus-fel har inträffat"
+
+#: ../avahi-common/error.c:57
+msgid "Daemon connection failed"
+msgstr "Anslutning till demon misslyckades"
+
+#: ../avahi-common/error.c:58
+msgid "Memory exhausted"
+msgstr "Minnet är slut"
+
+#: ../avahi-common/error.c:59
+msgid "The object passed in was not valid"
+msgstr "Objektet som skickades in var inte giltigt"
+
+#: ../avahi-common/error.c:60
+msgid "Daemon not running"
+msgstr "Demonen är inte igång"
+
+#: ../avahi-common/error.c:61
+msgid "Invalid interface index"
+msgstr "Ogiltigt gränssnittsindex"
+
+#: ../avahi-common/error.c:62
+msgid "Invalid protocol specification"
+msgstr "Ogiltig protokollspecifikation"
+
+#: ../avahi-common/error.c:63
+msgid "Invalid flags"
+msgstr "Ogiltiga flaggor"
+
+#: ../avahi-common/error.c:65
+msgid "Not found"
+msgstr "Hittades inte"
+
+#: ../avahi-common/error.c:66
+msgid "Invalid configuration"
+msgstr "Ogiltig konfiguration"
+
+#: ../avahi-common/error.c:67
+msgid "Version mismatch"
+msgstr "Versionen stämmer inte"
+
+#: ../avahi-common/error.c:68
+msgid "Invalid service subtype"
+msgstr "Ogiltig undertyp för tjänst"
+
+#: ../avahi-common/error.c:69
+msgid "Invalid packet"
+msgstr "Ogiltigt paket"
+
+#: ../avahi-common/error.c:70
+msgid "Invalid DNS return code"
+msgstr "Ogiltig DNS-svarskod"
+
+#: ../avahi-common/error.c:71
+msgid "DNS failure: FORMERR"
+msgstr "DNS-fel: FORMERR"
+
+#: ../avahi-common/error.c:72
+msgid "DNS failure: SERVFAIL"
+msgstr "DNS-fel: SERVFAIL"
+
+#: ../avahi-common/error.c:73
+msgid "DNS failure: NXDOMAIN"
+msgstr "DNS-fel: NXDOMAIN"
+
+#: ../avahi-common/error.c:74
+msgid "DNS failure: NOTIMP"
+msgstr "DNS-fel: NOTIMP"
+
+#: ../avahi-common/error.c:76
+msgid "DNS failure: REFUSED"
+msgstr "DNS-fel: REFUSED"
+
+#: ../avahi-common/error.c:77
+msgid "DNS failure: YXDOMAIN"
+msgstr "DNS-fel: YXDOMAIN"
+
+#: ../avahi-common/error.c:78
+msgid "DNS failure: YXRRSET"
+msgstr "DNS-fel: YXRRSET"
+
+#: ../avahi-common/error.c:79
+msgid "DNS failure: NXRRSET"
+msgstr "DNS-fel: NXRRSET"
+
+#: ../avahi-common/error.c:80
+msgid "DNS failure: NOTAUTH"
+msgstr "DNS-fel: NOTAUTH"
+
+#: ../avahi-common/error.c:81
+msgid "DNS failure: NOTZONE"
+msgstr "DNS-fel: NOTZONE"
+
+#: ../avahi-common/error.c:82
+msgid "Invalid RDATA"
+msgstr "Ogiltig RDATA"
+
+#: ../avahi-common/error.c:83
+msgid "Invalid DNS type"
+msgstr "Ogiltig DNS-typ"
+
+#: ../avahi-common/error.c:84
+msgid "Invalid DNS class"
+msgstr "Ogiltig DNS-klass"
+
+#: ../avahi-common/error.c:85
+msgid "Not supported"
+msgstr "Stöds inte"
+
+#: ../avahi-common/error.c:87
+msgid "Not permitted"
+msgstr "Inte tillåten"
+
+#: ../avahi-common/error.c:88
+msgid "Invalid argument"
+msgstr "Ogiltigt argument"
+
+#: ../avahi-common/error.c:89
+msgid "Is empty"
+msgstr "Är tom"
+
+#: ../avahi-common/error.c:90
+msgid "The requested operation is invalid because redundant"
+msgstr "Den begärda åtgärden är ogiltig därför den är redundant"
+
+#: ../avahi-common/error.c:96
+msgid "Invalid Error Code"
+msgstr "Ogiltig felkod"
+
+#: ../avahi-ui/avahi-ui.c:326
+#, c-format
+msgid "Avahi client failure: %s"
+msgstr "Fel i Avahi-klient: %s"
+
+#: ../avahi-ui/avahi-ui.c:388
+#, c-format
+msgid "Avahi resolver failure: %s"
+msgstr "Fel i Avahi-uppslag: %s"
+
+#: ../avahi-ui/avahi-ui.c:518
+#, c-format
+msgid "Browsing for service type %s in domain %s failed: %s"
+msgstr "Bläddring efter tjänstetypen %s i domänen %s misslyckades: %s"
+
+#: ../avahi-ui/avahi-ui.c:519
+#: ../avahi-utils/avahi-browse.c:157
+#: ../avahi-utils/avahi-browse.c:158
+#: ../avahi-utils/avahi-browse.c:164
+#: ../avahi-utils/avahi-browse.c:165
+msgid "n/a"
+msgstr "Inte tillgänglig"
+
+#: ../avahi-ui/avahi-ui.c:649
+#, c-format
+msgid "Avahi domain browser failure: %s"
+msgstr "Fel i Avahi-domänbläddrare: %s"
+
+#: ../avahi-ui/avahi-ui.c:684
+#, c-format
+msgid "Failed to read Avahi domain: %s"
+msgstr "Misslyckades att läsa Avahi-domän: %s"
+
+#: ../avahi-ui/avahi-ui.c:717
+#, c-format
+msgid "Failed to connect to Avahi server: %s"
+msgstr "Misslyckades att ansluta till Avahi-server: %s"
+
+#: ../avahi-ui/avahi-ui.c:735
+msgid "Browsing for services on <b>local network</b>:"
+msgstr "Bläddrar efter tjänster på <b>lokalt nätverk</b>:"
+
+#: ../avahi-ui/avahi-ui.c:737
+#, c-format
+msgid "Browsing for services in domain <b>%s</b>:"
+msgstr "Bläddring efter tjänster i domänen <b>%s</b>:"
+
+#: ../avahi-ui/avahi-ui.c:773
+#, c-format
+msgid "Failed to create browser for %s: %s"
+msgstr "Misslyckades med att skapa bläddrare för %s: %s"
+
+#: ../avahi-ui/avahi-ui.c:903
+#, c-format
+msgid "Failed to create resolver for %s of type %s in domain %s: %s"
+msgstr "Misslyckades med att skapa uppslagare för %s av typen %s i domänen %s: %s"
+
+#: ../avahi-ui/avahi-ui.c:978
+#, c-format
+msgid "Failed to create domain browser: %s"
+msgstr "Misslyckades med att skapa domänbläddrare: %s"
+
+#: ../avahi-ui/avahi-ui.c:989
+msgid "Change domain"
+msgstr "Byt domän"
+
+#: ../avahi-ui/avahi-ui.c:1021
+msgid "Service Name"
+msgstr "Tjänstenamn"
+
+#: ../avahi-ui/avahi-ui.c:1029
+#: ../avahi-ui/avahi-ui.c:1160
+msgid "Browsing ..."
+msgstr "Bläddrar ..."
+
+#: ../avahi-ui/avahi-ui.c:1118
+msgid "Initializing..."
+msgstr "Initierar..."
+
+#: ../avahi-ui/avahi-ui.c:1164
+msgid "_Domain..."
+msgstr "_Domän..."
+
+#: ../avahi-ui/bssh.c:57
+#, c-format
+msgid ""
+"%s [options]\n"
+"\n"
+" -h --help Show this help\n"
+" -s --ssh Browse SSH servers\n"
+" -v --vnc Browse VNC servers\n"
+" -S --shell Browse both SSH and VNC\n"
+" -d --domain=DOMAIN The domain to browse in\n"
+msgstr ""
+"%s [flaggor]\n"
+"\n"
+" -h --help Visa denna hjälp\n"
+" -s --ssh Bläddra bland SSH-servrar\n"
+" -v --vnc Bläddra bland VNC-servrar\n"
+" -S --shell Bläddra bland både SSH och VNC\n"
+" -d --domain=DOMÄN Domänen att bläddra i\n"
+
+#: ../avahi-ui/bssh.c:103
+#: ../avahi-utils/avahi-browse.c:759
+#, c-format
+msgid "Too many arguments\n"
+msgstr "För många argument\n"
+
+#: ../avahi-ui/bssh.c:147
+msgid "Choose Shell Server"
+msgstr "Välj skalserver"
+
+#: ../avahi-ui/bssh.c:149
+msgid "Desktop"
+msgstr "Skrivbord"
+
+#: ../avahi-ui/bssh.c:150
+msgid "Terminal"
+msgstr "Terminal"
+
+#: ../avahi-ui/bssh.c:154
+msgid "Choose VNC server"
+msgstr "Välj VNC-server"
+
+#: ../avahi-ui/bssh.c:159
+msgid "Choose SSH server"
+msgstr "Välj SSH-server"
+
+#: ../avahi-ui/bssh.c:183
+#, c-format
+msgid "Connecting to '%s' ...\n"
+msgstr "Ansluter till \"%s\"...\n"
+
+#: ../avahi-ui/bssh.c:238
+#, c-format
+msgid "execlp() failed: %s\n"
+msgstr "execlp() misslyckades: %s\n"
+
+#: ../avahi-ui/bssh.c:248
+#, c-format
+msgid "Canceled.\n"
+msgstr "Avbruten.\n"
+
+#: ../avahi-ui/bssh.desktop.in.in.h:1
+msgid "Avahi SSH Server Browser"
+msgstr "Avahi SSH-serverbläddrare"
+
+#: ../avahi-ui/bssh.desktop.in.in.h:2
+msgid "Browse for Zeroconf-enabled SSH Servers"
+msgstr "Bläddra efter Zeroconf-aktiverade SSH-servrar"
+
+#: ../avahi-ui/bvnc.desktop.in.in.h:1
+msgid "Avahi VNC Server Browser"
+msgstr "Avahi VNC-serverbläddrare"
+
+#: ../avahi-ui/bvnc.desktop.in.in.h:2
+msgid "Browse for Zeroconf-enabled VNC Servers"
+msgstr "Bläddra efter Zeroconf-aktiverade VNC-servrar"
+
+#: ../avahi-utils/avahi-browse.c:108
+#, c-format
+msgid ": All for now\n"
+msgstr ": Alla just nu\n"
+
+#: ../avahi-utils/avahi-browse.c:119
+#, c-format
+msgid ": Cache exhausted\n"
+msgstr ": Cachen är full\n"
+
+#: ../avahi-utils/avahi-browse.c:223
+#: ../avahi-utils/avahi-browse.c:245
+#, c-format
+msgid "Failed to resolve service '%s' of type '%s' in domain '%s': %s\n"
+msgstr "Misslyckades med att slå upp tjänsten \"%s\" av typen \"%s\" i domänen \"%s\": %s\n"
+
+#: ../avahi-utils/avahi-browse.c:324
+#, c-format
+msgid "service_browser failed: %s\n"
+msgstr "service_browser misslyckades: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:362
+#, c-format
+msgid "avahi_service_browser_new() failed: %s\n"
+msgstr "avahi_service_browser_new() misslyckades: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:398
+#, c-format
+msgid "service_type_browser failed: %s\n"
+msgstr "service_type_browser misslyckades: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:428
+#, c-format
+msgid "avahi_service_type_browser_new() failed: %s\n"
+msgstr "avahi_service_type_browser_new() misslyckades: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:503
+#, c-format
+msgid "avahi_domain_browser_new() failed: %s\n"
+msgstr "avahi_domain_browser_new() misslyckades: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:519
+#: ../avahi-utils/avahi-publish.c:391
+#: ../avahi-utils/avahi-resolve.c:282
+#: ../avahi-utils/avahi-set-host-name.c:170
+#, c-format
+msgid "Failed to query version string: %s\n"
+msgstr "Misslyckades med att fråga efter versionssträng: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:524
+#: ../avahi-utils/avahi-publish.c:396
+#: ../avahi-utils/avahi-resolve.c:287
+#: ../avahi-utils/avahi-set-host-name.c:175
+#: ../avahi-utils/avahi-set-host-name.c:191
+#, c-format
+msgid "Failed to query host name: %s\n"
+msgstr "Misslyckades med att fråga efter värdnamn: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:528
+#: ../avahi-utils/avahi-publish.c:400
+#: ../avahi-utils/avahi-resolve.c:291
+#: ../avahi-utils/avahi-set-host-name.c:179
+#, c-format
+msgid "Server version: %s; Host name: %s\n"
+msgstr "Serverversion: %s; Värdnamn: %s\n"
+
+#. Translators: This is a column heading with abbreviations for
+#. * Event (+/-), Network Interface, Protocol (IPv4/v6), Domain
+#: ../avahi-utils/avahi-browse.c:533
+#, c-format
+msgid "E Ifce Prot Domain\n"
+msgstr "H Grän Prot Domän\n"
+
+#. Translators: This is a column heading with abbreviations for
+#. * Event (+/-), Network Interface, Protocol (IPv4/v6), Domain
+#: ../avahi-utils/avahi-browse.c:537
+#, c-format
+msgid "E Ifce Prot %-*s %-20s Domain\n"
+msgstr "H Grän Prot %-*s %-20s Domän\n"
+
+#: ../avahi-utils/avahi-browse.c:537
+msgid "Name"
+msgstr "Namn"
+
+#: ../avahi-utils/avahi-browse.c:537
+msgid "Type"
+msgstr "Typ"
+
+#. We have been disconnected, so let reconnect
+#: ../avahi-utils/avahi-browse.c:569
+#: ../avahi-utils/avahi-publish.c:165
+#, c-format
+msgid "Disconnected, reconnecting ...\n"
+msgstr "Frånkopplad, återansluter ...\n"
+
+#: ../avahi-utils/avahi-browse.c:583
+#: ../avahi-utils/avahi-browse.c:813
+#: ../avahi-utils/avahi-publish.c:172
+#: ../avahi-utils/avahi-publish.c:383
+#: ../avahi-utils/avahi-resolve.c:274
+#: ../avahi-utils/avahi-set-host-name.c:162
+#, c-format
+msgid "Failed to create client object: %s\n"
+msgstr "Misslyckades med att skapa klientobjekt: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:588
+#: ../avahi-utils/avahi-publish.c:177
+#: ../avahi-utils/avahi-resolve.c:145
+#: ../avahi-utils/avahi-set-host-name.c:61
+#, c-format
+msgid "Client failure, exiting: %s\n"
+msgstr "Klientfel, avslutar: %s\n"
+
+#: ../avahi-utils/avahi-browse.c:607
+#: ../avahi-utils/avahi-publish.c:208
+#, c-format
+msgid "Waiting for daemon ...\n"
+msgstr "Väntar på demon ...\n"
+
+#: ../avahi-utils/avahi-browse.c:631
+msgid ""
+" -h --help Show this help\n"
+" -V --version Show version\n"
+" -D --browse-domains Browse for browsing domains instead of services\n"
+" -a --all Show all services, regardless of the type\n"
+" -d --domain=DOMAIN The domain to browse in\n"
+" -v --verbose Enable verbose mode\n"
+" -t --terminate Terminate after dumping a more or less complete list\n"
+" -c --cache Terminate after dumping all entries from the cache\n"
+" -l --ignore-local Ignore local services\n"
+" -r --resolve Resolve services found\n"
+" -f --no-fail Don't fail if the daemon is not available\n"
+" -p --parsable Output in parsable format\n"
+msgstr ""
+" -h --help Visa denna hjälp\n"
+" -V --version Visa version\n"
+" -D --browse-domains Bläddra efter bläddringsdomäner istället för tjänster\n"
+" -a --all Visa alla tjänster, oavsett typen\n"
+" -d --domain=DOMÄN Domänen att bläddra i\n"
+" -v --verbose Aktivera informativt läge\n"
+" -t --terminate Avsluta efter dumpning av en mer eller mindre komplett lista\n"
+" -c --cache Avsluta efter dumpning av alla poster från cachen\n"
+" -l --ignore-local Ignorera lokala tjänster\n"
+" -r --resolve Slå upp tjänster som hittats\n"
+" -f --no-fail Misslycka inte om demonen inte är tillgänglig\n"
+" -p --parsable Skriv ut i tolkningsbart format\n"
+
+#: ../avahi-utils/avahi-browse.c:644
+msgid ""
+" -k --no-db-lookup Don't lookup service types\n"
+" -b --dump-db Dump service type database\n"
+msgstr ""
+" -k --no-db-lookup Slå inte upp tjänstetyper\n"
+" -b --dump-db Dumpa databasen över tjänstetyper\n"
+
+#: ../avahi-utils/avahi-browse.c:750
+#: ../avahi-utils/avahi-resolve.c:221
+#, c-format
+msgid "Too few arguments\n"
+msgstr "För få argument\n"
+
+#: ../avahi-utils/avahi-browse.c:805
+#: ../avahi-utils/avahi-publish.c:375
+#: ../avahi-utils/avahi-resolve.c:266
+#: ../avahi-utils/avahi-set-host-name.c:154
+#, c-format
+msgid "Failed to create simple poll object.\n"
+msgstr "Misslyckades med att skapa enkelt poll-objekt: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:78
+#, c-format
+msgid "Established under name '%s'\n"
+msgstr "Etablerad under namnet \"%s\"\n"
+
+#: ../avahi-utils/avahi-publish.c:83
+#, c-format
+msgid "Failed to register: %s\n"
+msgstr "Misslyckades att registrera: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:96
+#, c-format
+msgid "Name collision, picking new name '%s'.\n"
+msgstr "Namnkollision, väljer nytt namn \"%s\".\n"
+
+#: ../avahi-utils/avahi-publish.c:116
+#, c-format
+msgid "Failed to create entry group: %s\n"
+msgstr "Misslyckades med att skapa postgrupp: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:126
+#, c-format
+msgid "Failed to add address: %s\n"
+msgstr "Misslyckades att lägga till adress: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:136
+#, c-format
+msgid "Failed to add service: %s\n"
+msgstr "Misslyckades att lägga till tjänst: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:142
+#, c-format
+msgid "Failed to add subtype '%s': %s\n"
+msgstr "Misslyckades med att lägga till undertypen \"%s\": %s\n"
+
+#: ../avahi-utils/avahi-publish.c:193
+#, c-format
+msgid "Host name conflict\n"
+msgstr "Värdnamnskonflikt\n"
+
+#: ../avahi-utils/avahi-publish.c:218
+#, c-format
+msgid ""
+"%s [options] %s <name> <type> <port> [<txt ...>]\n"
+"%s [options] %s <host-name> <address>\n"
+"\n"
+" -h --help Show this help\n"
+" -V --version Show version\n"
+" -s --service Publish service\n"
+" -a --address Publish address\n"
+" -v --verbose Enable verbose mode\n"
+" -d --domain=DOMAIN Domain to publish service in\n"
+" -H --host=DOMAIN Host where service resides\n"
+" --subtype=SUBTYPE An additional subtype to register this service with\n"
+" -f --no-fail Don't fail if the daemon is not available\n"
+msgstr ""
+"%s [flaggor] %s <namn> <typ> <port> [<txt ...>]\n"
+"%s [flaggor] %s <värdnamn> <adress>\n"
+"\n"
+" -h --help Visa denna hjälp\n"
+" -V --version Visa version\n"
+" -s --service Publicera tjänst\n"
+" -a --address Publicera adress\n"
+" -v --verbose Aktivera informativt läge\n"
+" -d --domain=DOMÄN Domän att publicera tjänst i\n"
+" -H --host=DOMÄN Värd där tjänsten finns\n"
+" --subtype=UNDERTYP En ytterligare undertyp att registrera denna tjänst med\n"
+" -f --no-fail Misslycka inte om demonen inte är tillgänglig\n"
+
+#: ../avahi-utils/avahi-publish.c:300
+#: ../avahi-utils/avahi-publish.c:315
+#, c-format
+msgid "Bad number of arguments\n"
+msgstr "Dåligt antal argument\n"
+
+#: ../avahi-utils/avahi-publish.c:326
+#, c-format
+msgid "Failed to parse port number: %s\n"
+msgstr "Misslyckades med att tolka portnummer: %s\n"
+
+#: ../avahi-utils/avahi-publish.c:358
+#: ../avahi-utils/avahi-resolve.c:248
+#, c-format
+msgid "No command specified.\n"
+msgstr "Inget kommando specificerat.\n"
+
+#: ../avahi-utils/avahi-resolve.c:91
+#, c-format
+msgid "Failed to resolve host name '%s': %s\n"
+msgstr "Misslyckades med att slå upp värdnamnet \"%s\": %s\n"
+
+#: ../avahi-utils/avahi-resolve.c:128
+#, c-format
+msgid "Failed to resolve address '%s': %s\n"
+msgstr "Misslyckades med att slå upp adressen \"%s\": %s\n"
+
+#: ../avahi-utils/avahi-resolve.c:159
+#, c-format
+msgid ""
+"%s [options] %s <host name ...>\n"
+"%s [options] %s <address ... >\n"
+"\n"
+" -h --help Show this help\n"
+" -V --version Show version\n"
+" -n --name Resolve host name\n"
+" -a --address Resolve address\n"
+" -v --verbose Enable verbose mode\n"
+" -6 Lookup IPv6 address\n"
+" -4 Lookup IPv4 address\n"
+msgstr ""
+"%s [flaggor] %s <värdnamn ...>\n"
+"%s [flaggor] %s <adress ... >\n"
+"\n"
+" -h --help Visa denna hjälp\n"
+" -V --version Visa version\n"
+" -n --name Slå upp värdnamn\n"
+" -a --address Slå upp adress\n"
+" -v --verbose Aktivera informativt läge\n"
+" -6 Slå upp IPv6-adress\n"
+" -4 Slå upp IPv4-adress\n"
+
+#: ../avahi-utils/avahi-resolve.c:301
+#: ../avahi-utils/avahi-set-host-name.c:183
+#, c-format
+msgid "Failed to create host name resolver: %s\n"
+msgstr "Misslyckades med att skapa uppslagare för värdnamn: %s\n"
+
+#: ../avahi-utils/avahi-resolve.c:311
+#, c-format
+msgid "Failed to parse address '%s'\n"
+msgstr "Misslyckades med att tolka adressen \"%s\"\n"
+
+#: ../avahi-utils/avahi-resolve.c:316
+#, c-format
+msgid "Failed to create address resolver: %s\n"
+msgstr "Misslyckades med att skapa adressuppslagare: %s\n"
+
+#: ../avahi-utils/avahi-set-host-name.c:75
+#, c-format
+msgid ""
+"%s [options] <new host name>\n"
+"\n"
+" -h --help Show this help\n"
+" -V --version Show version\n"
+" -v --verbose Enable verbose mode\n"
+msgstr ""
+"%s [flaggor] <nytt värdnamn>\n"
+"\n"
+" -h --help Visa denna hjälp\n"
+" -V --version Visa version\n"
+" -v --verbose Aktivera informativt läge\n"
+
+#: ../avahi-utils/avahi-set-host-name.c:116
+#, c-format
+msgid "Invalid number of arguments, expecting exactly one.\n"
+msgstr "Ogiltigt antal argument, exakt ett argument förväntas.\n"
+
+#: ../avahi-utils/avahi-set-host-name.c:195
+#, c-format
+msgid "Host name successfully changed to %s\n"
+msgstr "Värdnamnet ändrades till %s\n"
+