]> arthur.barton.de Git - ngircd-alex.git/blobdiff - src/ngircd/resolve.c
Send "fake '*' key" in "MODE -k" replies
[ngircd-alex.git] / src / ngircd / resolve.c
index ff40b8d523cd10853e69353d283abeabcb86d2d9..01f730cc868a67458e7120cfc6d1e1485b9c4aa8 100644 (file)
@@ -1,6 +1,6 @@
 /*
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2009 by Alexander Barton (alex@barton.de)
+ * Copyright (c)2001-2011 Alexander Barton (alex@barton.de) and Contributors.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -75,7 +75,8 @@ Resolve_Addr(PROC_STAT * s, const ng_ipaddr_t *Addr, int identsock,
        } else if( pid == 0 ) {
                /* Sub process */
                Log_Init_Subprocess("Resolver");
-               Do_ResolveAddr( Addr, identsock, pipefd[1]);
+               Conn_CloseAllSockets(identsock);
+               Do_ResolveAddr(Addr, identsock, pipefd[1]);
                Log_Exit_Subprocess("Resolver");
                exit(0);
        }
@@ -104,6 +105,7 @@ Resolve_Name( PROC_STAT *s, const char *Host, void (*cbfunc)(int, short))
        } else if( pid == 0 ) {
                /* Sub process */
                Log_Init_Subprocess("Resolver");
+               Conn_CloseAllSockets(NONE);
                Do_ResolveName(Host, pipefd[1]);
                Log_Exit_Subprocess("Resolver");
                exit(0);
@@ -240,7 +242,7 @@ ForwardLookup(const char *hostname, array *IpAddr, int af)
 {
        ng_ipaddr_t addr;
 
-#ifdef HAVE_GETADDRINFO
+#ifdef HAVE_WORKING_GETADDRINFO
        int res;
        struct addrinfo *a, *ai_results;
        static struct addrinfo hints;
@@ -266,9 +268,9 @@ ForwardLookup(const char *hostname, array *IpAddr, int af)
        }
 
        for (a = ai_results; a != NULL; a = a->ai_next) {
-               assert(a->ai_addrlen <= sizeof(addr));
+               assert((size_t)a->ai_addrlen <= sizeof(addr));
 
-               if (a->ai_addrlen > sizeof(addr))
+               if ((size_t)a->ai_addrlen > sizeof(addr))
                        continue;
 
                memcpy(&addr, a->ai_addr, a->ai_addrlen);
@@ -380,7 +382,7 @@ Do_ResolveAddr(const ng_ipaddr_t *Addr, int identsock, int w_fd)
        if (!ReverseLookup(Addr, hostname, sizeof(hostname)))
                goto dns_done;
 
-       if (ForwardLookup(hostname, &resolved_addr, AF_UNSPEC)) {
+       if (ForwardLookup(hostname, &resolved_addr, ng_ipaddr_af(Addr))) {
                if (!Addr_in_list(&resolved_addr, Addr)) {
                        Log_Forgery_WrongIP(tmp_ip_str, hostname);
                        strlcpy(hostname, tmp_ip_str, sizeof(hostname));