diff options
Diffstat (limited to 'libglusterfs/src')
| -rw-r--r-- | libglusterfs/src/common-utils.c | 35 | ||||
| -rw-r--r-- | libglusterfs/src/common-utils.h | 6 | 
2 files changed, 30 insertions, 11 deletions
diff --git a/libglusterfs/src/common-utils.c b/libglusterfs/src/common-utils.c index 81e01bf6108..e3293dc55ca 100644 --- a/libglusterfs/src/common-utils.c +++ b/libglusterfs/src/common-utils.c @@ -59,11 +59,6 @@  typedef int32_t (*rw_op_t)(int32_t fd, char *buf, int32_t size);  typedef int32_t (*rwv_op_t)(int32_t fd, const struct iovec *buf, int32_t size); -struct dnscache6 { -        struct addrinfo *first; -        struct addrinfo *next; -}; -  void  md5_wrapper(const unsigned char *data, size_t len, char *md5)  { @@ -292,9 +287,6 @@ gf_resolve_ip6 (const char *hostname,                  memset(&hints, 0, sizeof(hints));                  hints.ai_family   = family;                  hints.ai_socktype = SOCK_STREAM; -#ifndef __NetBSD__ -                hints.ai_flags    = AI_ADDRCONFIG; -#endif                  ret = gf_asprintf (&port_str, "%d", port);                  if (-1 == ret) { @@ -2193,6 +2185,14 @@ valid_ipv6_address (char *address, int length, gf_boolean_t wildcard_acc)          tmp = gf_strdup (address); +        /* Check for '%' for link local addresses */ +        endptr = strchr(tmp, '%'); +        if (endptr) { +                *endptr = '\0'; +                length = strlen(tmp); +                endptr = NULL; +        } +          /* Check for compressed form */          if (length <= 0 || tmp[length - 1] == ':') {                  ret = 0; @@ -3118,9 +3118,18 @@ gf_is_local_addr (char *hostname)          gf_boolean_t    found = _gf_false;          char            *ip = NULL;          xlator_t        *this = NULL; +        struct          addrinfo hints;          this = THIS; -        ret = getaddrinfo (hostname, NULL, NULL, &result); + +        memset (&hints, 0, sizeof (hints)); +        /* +         * Removing AI_ADDRCONFIG from default_hints +         * for being able to use link local ipv6 addresses +         */ +        hints.ai_family = AF_UNSPEC; + +        ret = getaddrinfo (hostname, NULL, &hints, &result);          if (ret != 0) {                  gf_msg (this->name, GF_LOG_ERROR, 0, LG_MSG_GETADDRINFO_FAILED, @@ -3160,15 +3169,19 @@ gf_is_same_address (char *name1, char *name2)          struct addrinfo         *q = NULL;          gf_boolean_t            ret = _gf_false;          int                     gai_err = 0; +        struct                  addrinfo hints; + +        memset (&hints, 0, sizeof (hints)); +        hints.ai_family = AF_UNSPEC; -        gai_err = getaddrinfo(name1,NULL,NULL,&addr1); +        gai_err = getaddrinfo(name1, NULL, &hints, &addr1);          if (gai_err != 0) {                  gf_msg (name1, GF_LOG_WARNING, 0, LG_MSG_GETADDRINFO_FAILED,                          "error in getaddrinfo: %s\n", gai_strerror(gai_err));                  goto out;          } -        gai_err = getaddrinfo(name2,NULL,NULL,&addr2); +        gai_err = getaddrinfo(name2, NULL, &hints, &addr2);          if (gai_err != 0) {                  gf_msg (name2, GF_LOG_WARNING, 0, LG_MSG_GETADDRINFO_FAILED,                          "error in getaddrinfo: %s\n", gai_strerror(gai_err)); diff --git a/libglusterfs/src/common-utils.h b/libglusterfs/src/common-utils.h index e374285c71d..c152540f0ff 100644 --- a/libglusterfs/src/common-utils.h +++ b/libglusterfs/src/common-utils.h @@ -165,6 +165,12 @@ typedef struct dht_changelog_rename_info {           char    buffer[1];   } dht_changelog_rename_info_t; +struct dnscache6 { +        struct addrinfo *first; +        struct addrinfo *next; +}; + +  typedef int (*gf_cmp) (void *, void *);  | 
