]> granicus.if.org Git - sudo/commitdiff
use getaddrinfo() instead of gethostbyname() if it is available
authorTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 15 Aug 2007 13:22:06 +0000 (13:22 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 15 Aug 2007 13:22:06 +0000 (13:22 +0000)
config.h.in
configure
configure.in
sudo.c

index 1f790cfa9ed7493dcf74770996cf171e40eaa89a..a94d87b2f957f8d0076ea0600697644605ae4146 100644 (file)
 /* Define to 1 if you use the FWTK authsrv daemon. */
 #undef HAVE_FWTK
 
+/* Define to 1 if you have the `getaddrinfo' function. */
+#undef HAVE_GETADDRINFO
+
 /* Define to 1 if you have the `getauthuid' function. (ULTRIX 4.x shadow
    passwords) */
 #undef HAVE_GETAUTHUID
index 3620d0e41e1469c8f39cc886d3b480c71e6d37ad..18ad293f60be2276a08232abe0d4da172e9ca78b 100755 (executable)
--- a/configure
+++ b/configure
@@ -14088,9 +14088,10 @@ esac
 
 
 
+
 for ac_func in strchr strrchr memchr memcpy memset sysconf tzset \
               strftime setrlimit initgroups getgroups fstat gettimeofday \
-              setlocale
+              setlocale getaddrinfo
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 echo "$as_me:$LINENO: checking for $ac_func" >&5
index 4dfd39015a26f970898c6b79b6c3d9ab985d3367..3d412dceb7278d448a07e023dfa89f03eae88dac 100644 (file)
@@ -1675,7 +1675,7 @@ dnl Function checks
 dnl
 AC_CHECK_FUNCS(strchr strrchr memchr memcpy memset sysconf tzset \
               strftime setrlimit initgroups getgroups fstat gettimeofday \
-              setlocale)
+              setlocale getaddrinfo)
 if test -z "$SKIP_SETRESUID"; then
     AC_CHECK_FUNCS(setresuid, [SKIP_SETREUID=yes])
 fi
diff --git a/sudo.c b/sudo.c
index 691164ef0bdeb7e699cc3094b0d7cbdd0e47c273..498f6a4f76d95386f2be44d483bc97e8c3c6a2f4 100644 (file)
--- a/sudo.c
+++ b/sudo.c
@@ -1204,17 +1204,33 @@ set_project(pw)
 void
 set_fqdn()
 {
+#ifdef HAVE_GETADDRINFO
+    struct addrinfo *res0, hint;
+#else
     struct hostent *hp;
+#endif
     char *p;
 
+#ifdef HAVE_GETADDRINFO
+    memset(&hint, 0, sizeof(hint));
+    hint.ai_family = PF_UNSPEC;
+    hint.ai_flags = AI_CANONNAME;
+    if (getaddrinfo(user_host, NULL, &hint, &res0) != 0) {
+#else
     if (!(hp = gethostbyname(user_host))) {
+#endif
        log_error(MSG_ONLY|NO_EXIT,
-           "unable to lookup %s via gethostbyname()", user_host);
+           "unable to resolve host %s", user_host);
     } else {
        if (user_shost != user_host)
            efree(user_shost);
        efree(user_host);
+#ifdef HAVE_GETADDRINFO
+       user_host = estrdup(res0->ai_canonname);
+       freeaddrinfo(res0);
+#else
        user_host = estrdup(hp->h_name);
+#endif
     }
     if ((p = strchr(user_host, '.'))) {
        *p = '\0';