r24799: Prefer IP address to dns name when replying in winbindd dsgetdcname.
authorGünther Deschner <gd@samba.org>
Thu, 30 Aug 2007 09:52:21 +0000 (09:52 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:30:22 +0000 (12:30 -0500)
Guenther
(This used to be commit e5cc09c72f4acc851ed53ca02def5d692000d0da)

source3/nsswitch/winbindd_misc.c

index c32f052e3c9dc281949f29cbc55ded6adb8e2e76..9c3f63453448b9fed86bfefd14de49b093f67cc1 100644 (file)
@@ -298,6 +298,7 @@ enum winbindd_result winbindd_dual_dsgetdcname(struct winbindd_domain *domain,
 {
        NTSTATUS result;
        struct DS_DOMAIN_CONTROLLER_INFO *info = NULL;
+       const char *dc = NULL;
 
        state->request.domain_name
                [sizeof(state->request.domain_name)-1] = '\0';
@@ -312,7 +313,22 @@ enum winbindd_result winbindd_dual_dsgetdcname(struct winbindd_domain *domain,
                return WINBINDD_ERROR;
        }
 
-       fstrcpy(state->response.data.dc_name, info->domain_controller_name);
+       if (info->domain_controller_address) {
+               dc = info->domain_controller_address;
+               if ((dc[0] == '\\') && (dc[1] == '\\')) {
+                       dc += 2;
+               }
+       }
+
+       if ((!dc || !is_ipaddress(dc)) && info->domain_controller_name) {
+               dc = info->domain_controller_name;
+       }
+
+       if (!dc || !*dc) {
+               return WINBINDD_ERROR;
+       }
+
+       fstrcpy(state->response.data.dc_name, dc);
 
        return WINBINDD_OK;
 }