Changeset 599 for trunk/server/source3/lib/util_sock.c
- Timestamp:
- Jul 6, 2011, 8:21:13 PM (14 years ago)
- File:
-
- 1 edited
-
trunk/server/source3/lib/util_sock.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/server/source3/lib/util_sock.c
r593 r599 1846 1846 1847 1847 /************************************************************ 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 1848 1882 Is this my name ? 1849 1883 ************************************************************/ … … 1852 1886 { 1853 1887 TALLOC_CTX *ctx = talloc_tos(); 1854 char addr[INET6_ADDRSTRLEN];1855 1888 char *name = NULL; 1856 1889 const char *dnsname; … … 1900 1933 } 1901 1934 1902 /* Handle possible CNAME records - convert to an IP addr. */1935 /* Handle possible CNAME records - convert to an IP addr. */ 1903 1936 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); 1907 1953 print_sockaddr(addr, 1908 1954 sizeof(addr), 1909 1955 &ss); 1910 servername = addr; 1911 } 1956 if (is_my_ipaddr(addr)) { 1957 freeaddrinfo(res); 1958 return true; 1959 } 1960 } 1961 freeaddrinfo(res); 1912 1962 } 1913 1963 1914 1964 /* Maybe its an IP address? */ 1915 1965 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); 1941 1967 } 1942 1968
Note:
See TracChangeset
for help on using the changeset viewer.
