diff options
39 files changed, 4065 insertions, 1605 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-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/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-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/configure.ac b/configure.ac index 4826a60..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]) @@ -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") @@ -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 e00a911..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 @@ -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 <@PACKAGE_BUGREPORT@>; 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> @@ -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 @@ -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" @@ -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" + @@ -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" + |