Whamcloud - gitweb
LU-18976 gss: detect dns error in lsvcgssd 95/59095/2
authorAurelien Degremont <adegremont@nvidia.com>
Mon, 5 May 2025 14:36:16 +0000 (16:36 +0200)
committerOleg Drokin <green@whamcloud.com>
Tue, 27 May 2025 04:06:43 +0000 (04:06 +0000)
Use proper NI_NAMEREQD flag with getnameinfo() in lsvcgssd when
resolving IP addresses, for it to return an error if DNS resolution fails.

That way, the error is propagated and Lustre knows a DNS failure happens
and can report it better. If not, it fails latter and reports a very unclear
message.

Test-Parameters: kerberos=true testlist=sanity-krb5
Change-Id: Iaa9e718c056ea742d8695048e43bdeeb3205f0dd
Signed-off-by: Aurelien Degremont <adegremont@nvidia.com>
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/59095
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Sebastien Buisson <sbuisson@ddn.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Bruno Faccini <bfaccini@nvidia.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/utils/gss/lsupport.c

index 4126fee..39a4d89 100644 (file)
@@ -228,6 +228,7 @@ out:
 static int getaddrcanonname(const uint32_t addr, char *buf, int buflen)
 {
        struct sockaddr_in srcaddr;
+       char ipstr[INET_ADDRSTRLEN] = "\0";
        int err = 0;
        int rc = -1;
 
@@ -248,13 +249,18 @@ static int getaddrcanonname(const uint32_t addr, char *buf, int buflen)
        srcaddr.sin_addr.s_addr = (in_addr_t)addr;
 
        err = getnameinfo((struct sockaddr *)&srcaddr, sizeof(srcaddr),
-                         buf, buflen, NULL, 0, 0);
+                         buf, buflen, NULL, 0, NI_NAMEREQD);
        if (err != 0) {
-               printerr(LL_ERR,
-                        "failed to get nameinfo for 0x%x: %s\n",
-                        addr, gai_strerror(err));
+               if (inet_ntop(srcaddr.sin_family, &srcaddr.sin_addr, ipstr,
+                             INET_ADDRSTRLEN))
+                       printerr(LL_ERR, "failed to get name for %s: %s\n",
+                                ipstr, gai_strerror(err));
+               else
+                       printerr(LL_ERR, "failed to get name for 0x%x: %s\n",
+                                addr, gai_strerror(err));
                goto out;
        }
+
        rc = 0;
 
 out: