]> git.meshlink.io Git - catta/blobdiff - avahi-dnsconfd/main.c
* add two more service types to database (closes #47)
[catta] / avahi-dnsconfd / main.c
index 84b0f6873cd076696c689ba85d504ecf57794084..dafa718b5cfecc410716a8f6217ed2104505faee 100644 (file)
 #include <config.h>
 #endif
 
-#include <sys/un.h>
 #include <fcntl.h>
 #include <unistd.h>
 #include <sys/select.h>
 #include <sys/socket.h>
+#include <sys/un.h>
 #include <errno.h>
 #include <string.h>
 #include <stdio.h>
@@ -202,8 +202,18 @@ static char *concat_dns_servers(AvahiIfIndex interface) {
     
     for (i = servers; i; i = i->servers_next)
         if (i->interface == interface || interface <= 0) {
+            DNSServerInfo *j;
             char *t;
 
+            /* Filter out double entries */
+            for (j = servers; j != i; j = j->servers_next)
+                if (j->interface == interface || interface <= 0)
+                    if (strcmp(i->address, j->address) == 0)
+                        break;
+
+            if (j != i)
+                continue;
+            
             if (!r)
                 t = avahi_strdup(i->address);
             else
@@ -287,7 +297,7 @@ static int new_line(const char *l) {
         AvahiIfIndex interface;
         AvahiProtocol protocol;
         int i_interface, i_protocol, port;
-        char a[64];
+        char a[AVAHI_ADDRESS_STR_MAX];
         
         assert(state == BROWSING); 
 
@@ -296,7 +306,7 @@ static int new_line(const char *l) {
             return -1;
         }
 
-        if (sscanf(l+1, "%i %i %64s %i", &i_interface, &i_protocol, a, &port) != 4) {
+        if (sscanf(l+1, "%i %i %39s %i", &i_interface, &i_protocol, a, &port) != 4) {
             daemon_log(LOG_ERR, "Failed to parse browsing line: %s", l);
             return -1;
         }
@@ -588,7 +598,7 @@ int main(int argc, char *argv[]) {
                 /** Parent **/
 
                 if ((ret = daemon_retval_wait(20)) < 0) {
-                    daemon_log(LOG_ERR, "Could not recieve return value from daemon process.");
+                    daemon_log(LOG_ERR, "Could not receive return value from daemon process.");
                     goto finish;
                 }