Ignore:
Timestamp:
Jul 6, 2011, 8:21:13 PM (14 years ago)
Author:
Herwig Bauernfeind
Message:

Samba 3.5: Update trunk to 3.5.9

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/server/source3/lib/util_sock.c

    r593 r599  
    18461846
    18471847/************************************************************
     1848
     1849
     1850
     1851
     1852
     1853
     1854
     1855
     1856
     1857
     1858
     1859
     1860
     1861
     1862
     1863
     1864
     1865
     1866
     1867
     1868
     1869
     1870
     1871
     1872
     1873
     1874
     1875
     1876
     1877
     1878
     1879
     1880
     1881
    18481882 Is this my name ?
    18491883************************************************************/
     
    18521886{
    18531887        TALLOC_CTX *ctx = talloc_tos();
    1854         char addr[INET6_ADDRSTRLEN];
    18551888        char *name = NULL;
    18561889        const char *dnsname;
     
    19001933        }
    19011934
    1902         /* Handle possible CNAME records - convert to an IP addr. */
     1935        /* Handle possible CNAME records - convert to an IP addr. */
    19031936        if (!is_ipaddress(servername)) {
    1904                 /* Use DNS to resolve the name, but only the first address */
    1905                 struct sockaddr_storage ss;
    1906                 if (interpret_string_addr(&ss, servername, 0)) {
     1937                /* Use DNS to resolve the name, check all addresses. */
     1938                struct addrinfo *p = NULL;
     1939                struct addrinfo *res = NULL;
     1940
     1941                if (!interpret_string_addr_internal(&res,
     1942                                servername,
     1943                                AI_ADDRCONFIG)) {
     1944                        return false;
     1945                }
     1946
     1947                for (p = res; p; p = p->ai_next) {
     1948                        char addr[INET6_ADDRSTRLEN];
     1949                        struct sockaddr_storage ss;
     1950
     1951                        ZERO_STRUCT(ss);
     1952                        memcpy(&ss, p->ai_addr, p->ai_addrlen);
    19071953                        print_sockaddr(addr,
    19081954                                        sizeof(addr),
    19091955                                        &ss);
    1910                         servername = addr;
    1911                 }
     1956                        if (is_my_ipaddr(addr)) {
     1957                                freeaddrinfo(res);
     1958                                return true;
     1959                        }
     1960                }
     1961                freeaddrinfo(res);
    19121962        }
    19131963
    19141964        /* Maybe its an IP address? */
    19151965        if (is_ipaddress(servername)) {
    1916                 struct sockaddr_storage ss;
    1917                 struct iface_struct *nics;
    1918                 int i, n;
    1919 
    1920                 if (!interpret_string_addr(&ss, servername, AI_NUMERICHOST)) {
    1921                         return false;
    1922                 }
    1923 
    1924                 if (ismyaddr((struct sockaddr *)&ss)) {
    1925                         return true;
    1926                 }
    1927 
    1928                 if (is_zero_addr((struct sockaddr *)&ss) ||
    1929                         is_loopback_addr((struct sockaddr *)&ss)) {
    1930                         return false;
    1931                 }
    1932 
    1933                 n = get_interfaces(talloc_tos(), &nics);
    1934                 for (i=0; i<n; i++) {
    1935                         if (sockaddr_equal((struct sockaddr *)&nics[i].ip, (struct sockaddr *)&ss)) {
    1936                                 TALLOC_FREE(nics);
    1937                                 return true;
    1938                         }
    1939                 }
    1940                 TALLOC_FREE(nics);
     1966                return is_my_ipaddr(servername);
    19411967        }
    19421968
Note: See TracChangeset for help on using the changeset viewer.