r10337: This grubby little hack is the implementation of a concept discussed
authorAndrew Bartlett <abartlet@samba.org>
Tue, 20 Sep 2005 07:03:47 +0000 (07:03 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:38:29 +0000 (13:38 -0500)
on the kerberos mailing lists a couple of weeks ago: Don't use DNS at
all for expanding short names into long names.

Using the 'override krb5_init_context' code already in the tree, this
removes the DNS lag on a kerberos session setup/connection.

Andrew Bartlett
(This used to be commit de3ceab3d064a286e8662a2b9b62b212f0454156)

source4/auth/kerberos/krb5_init_context.c
source4/heimdal/lib/krb5/context.c
source4/heimdal/lib/krb5/expand_hostname.c
source4/heimdal/lib/krb5/krb5.h

index 2a8f0624dad175dedad73f20e50e54e5f8da3b00..a147a3699a845a276638d249dea16348c50de680 100644 (file)
@@ -117,6 +117,11 @@ static void smb_krb5_debug_wrapper(const char *timestr, const char *msg, void *p
 
        talloc_steal(parent_ctx, *smb_krb5_context);
        talloc_free(tmp_ctx);
+
+       /* Set options in kerberos */
+
+       (*smb_krb5_context)->krb5_context->fdns = FALSE;
+       
        return 0;
 }
 
index 4d6eae2b24b9862295122e30cc6b493efa9aa108..3140f1b08f13e454878bf0430064b3e64c100d3e 100644 (file)
@@ -182,6 +182,7 @@ init_context_from_config_file(krb5_context context)
     INIT_FIELD(context, bool, srv_lookup, context->srv_lookup, "dns_lookup_kdc");
     INIT_FIELD(context, int, large_msg_size, 6000, "large_message_size");
     context->default_cc_name = NULL;
+    INIT_FIELD(context, bool, fdns, TRUE, "fdns");
     return 0;
 }
 
index 8488119552f9e01f5bcdeac8ca41065fc6760423..f03bf1580719097fd542f3d12bc800eb00f09db9 100644 (file)
@@ -65,6 +65,10 @@ krb5_expand_hostname (krb5_context context,
     memset (&hints, 0, sizeof(hints));
     hints.ai_flags = AI_CANONNAME;
 
+    if (!context->fdns) {
+       return copy_hostname (context, orig_hostname, new_hostname);
+    }
+
     error = getaddrinfo (orig_hostname, NULL, &hints, &ai);
     if (error)
        return copy_hostname (context, orig_hostname, new_hostname);
@@ -124,6 +128,11 @@ krb5_expand_hostname_realms (krb5_context context,
     int error;
     krb5_error_code ret = 0;
 
+    if (!context->fdns) {
+       return vanilla_hostname (context, orig_hostname, new_hostname,
+                                realms);
+    }
+
     memset (&hints, 0, sizeof(hints));
     hints.ai_flags = AI_CANONNAME;
 
index c47c4450f15a37b3cd6b06acb95dc3709dfa6728..90b239cf0d72fc500c8421693ac01ef8494f149c 100644 (file)
@@ -443,6 +443,7 @@ typedef struct krb5_context_data {
     int pkinit_flags;
     void *mutex;                       /* protects error_string/error_buf */
     int large_msg_size;
+    krb5_boolean fdns;                  /* Lookup hostnames to find full name, or send as-is */
 } krb5_context_data;
 
 enum {