* dnssrv.c (krb5int_make_srv_query_realm) [HAVE_RES_NSEARCH]: Use res_nsearch
authorKen Raeburn <raeburn@mit.edu>
Sun, 4 Jul 2004 08:48:21 +0000 (08:48 +0000)
committerKen Raeburn <raeburn@mit.edu>
Sun, 4 Jul 2004 08:48:21 +0000 (08:48 +0000)
instead of res_search.
* hst_realm.c (krb5_try_realm_txt_rr) [HAVE_RES_NSEARCH]: Likewise.

git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@16541 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/os/ChangeLog
src/lib/krb5/os/dnssrv.c
src/lib/krb5/os/hst_realm.c

index fcba1f33c9a929b31b7362694f08798f6224c213..4efd66d127f2d96669659c732af1d5c348c53ce4 100644 (file)
@@ -1,3 +1,10 @@
+2004-07-04  Ken Raeburn  <raeburn@mit.edu>
+
+       * dnssrv.c (krb5int_make_srv_query_realm) [HAVE_RES_NSEARCH]: Use
+       res_nsearch instead of res_search.
+       * hst_realm.c (krb5_try_realm_txt_rr) [HAVE_RES_NSEARCH]:
+       Likewise.
+
 2004-07-02  Ken Raeburn  <raeburn@mit.edu>
 
        * an_to_ln.c: Include string.h.
index 1c1586a8a639a7e95b0f7a37dc849f9a52834db8..4002179759bb4c7ee9eb01ad2f77235799c04f3a 100644 (file)
@@ -128,7 +128,35 @@ krb5int_make_srv_query_realm(const krb5_data *realm,
     fprintf (stderr, "sending DNS SRV query for %s\n", host);
 #endif
 
+#ifdef HAVE_RES_NSEARCH
+    {
+       res_state statp;
+       /* Weird... the man pages I've been looking at (Solaris 9) say
+          we pass a res_state object (which is a pointer) into
+          various routines, but they don't say much of anything about
+          what it should point to initially or how it should be
+          allocated.
+
+          They also give no indication what the return value of
+          res_ninit is.  */
+       typedef union {
+           struct sockaddr_storage ss;
+           INT64_TYPE i64;
+           double d;
+       } aligned_thing;
+       aligned_thing statp_buf[(sizeof(*statp) + sizeof(aligned_thing) - 1) / sizeof(aligned_thing)];
+       int n;
+
+       statp = (res_state) &statp_buf;
+       memset(&statp_buf, 0, sizeof(statp_buf));
+       n = res_ninit(statp);
+       /* ignore n? */
+       size = res_nsearch(statp, host, C_IN, T_SRV,
+                          answer.bytes, sizeof(answer.bytes));
+    }
+#else
     size = res_search(host, C_IN, T_SRV, answer.bytes, sizeof(answer.bytes));
+#endif
 
     if ((size < hdrsize) || (size > sizeof(answer.bytes)))
        goto out;
index a72fb846cd5acbb2d663ad3d2f077fd47c0dd144..bdf7e8d0947cbcadd130150cf03e850caaa1ca37 100644 (file)
@@ -143,7 +143,35 @@ krb5_try_realm_txt_rr(const char *prefix, const char *name, char **realm)
         if ((h > host) && (h[-1] != '.') && ((h - host + 1) < sizeof(host)))
             strcpy (h, ".");
     }
+#ifdef HAVE_RES_NSEARCH
+    {
+       res_state statp;
+       /* Weird... the man pages I've been looking at (Solaris 9) say
+          we pass a res_state object (which is a pointer) into
+          various routines, but they don't say much of anything about
+          what it should point to initially or how it should be
+          allocated.
+
+          They also give no indication what the return value of
+          res_ninit is.  */
+       typedef union {
+           struct sockaddr_storage ss;
+           INT64_TYPE i64;
+           double d;
+       } aligned_thing;
+       aligned_thing statp_buf[(sizeof(*statp) + sizeof(aligned_thing) - 1) / sizeof(aligned_thing)];
+       int n;
+
+       statp = (res_state) &statp_buf;
+       memset(&statp_buf, 0, sizeof(statp_buf));
+       n = res_ninit(statp);
+       /* ignore n? */
+       size = res_nsearch(statp, host, C_IN, T_TXT,
+                          answer.bytes, sizeof(answer.bytes));
+    }
+#else
     size = res_search(host, C_IN, T_TXT, answer.bytes, sizeof(answer.bytes));
+#endif
 
     if ((size < sizeof(HEADER)) || (size > sizeof(answer.bytes)))
        return KRB5_ERR_HOST_REALM_UNKNOWN;