wafsamba/samba_autoconf: when setting undefined result, use empty tuple
[samba.git] / source4 / libnet / libnet_unbecome_dc.c
index b0fe07b0d746536a785c38d3955a0e8d56bd2b94..38d6a94b23f1bd973d7c84af796ace2467c116b6 100644 (file)
@@ -543,7 +543,9 @@ static void unbecomeDC_drsuapi_connect_send(struct libnet_UnbecomeDC_state *s)
        struct composite_context *creq;
        char *binding_str;
 
-       binding_str = talloc_asprintf(s, "ncacn_ip_tcp:%s[seal]", s->source_dsa.dns_name);
+       binding_str = talloc_asprintf(s, "ncacn_ip_tcp:%s[seal,target_hostname=%s]",
+                                     s->source_dsa.address,
+                                     s->source_dsa.dns_name);
        if (composite_nomem(binding_str, c)) return;
 
        c->status = dcerpc_parse_binding(s, binding_str, &s->drsuapi.binding);
@@ -638,6 +640,19 @@ static void unbecomeDC_drsuapi_bind_recv(struct tevent_req *subreq)
                        s->drsuapi.remote_info28.repl_epoch             = 0;
                        break;
                }
+               case 28: {
+                       s->drsuapi.remote_info28 = s->drsuapi.bind_r.out.bind_info->info.info28;
+                       break;
+               }
+               case 32: {
+                       struct drsuapi_DsBindInfo32 *info32;
+                       info32 = &s->drsuapi.bind_r.out.bind_info->info.info32;
+                       s->drsuapi.remote_info28.supported_extensions   = info32->supported_extensions;
+                       s->drsuapi.remote_info28.site_guid              = info32->site_guid;
+                       s->drsuapi.remote_info28.pid                    = info32->pid;
+                       s->drsuapi.remote_info28.repl_epoch             = info32->repl_epoch;
+                       break;
+               }
                case 48: {
                        struct drsuapi_DsBindInfo48 *info48;
                        info48 = &s->drsuapi.bind_r.out.bind_info->info.info48;
@@ -647,8 +662,18 @@ static void unbecomeDC_drsuapi_bind_recv(struct tevent_req *subreq)
                        s->drsuapi.remote_info28.repl_epoch             = info48->repl_epoch;
                        break;
                }
-               case 28:
-                       s->drsuapi.remote_info28 = s->drsuapi.bind_r.out.bind_info->info.info28;
+               case 52: {
+                       struct drsuapi_DsBindInfo52 *info52;
+                       info52 = &s->drsuapi.bind_r.out.bind_info->info.info52;
+                       s->drsuapi.remote_info28.supported_extensions   = info52->supported_extensions;
+                       s->drsuapi.remote_info28.site_guid              = info52->site_guid;
+                       s->drsuapi.remote_info28.pid                    = info52->pid;
+                       s->drsuapi.remote_info28.repl_epoch             = info52->repl_epoch;
+                       break;
+               }
+               default:
+                       DEBUG(1, ("Warning: invalid info length in bind info: %d\n",
+                               s->drsuapi.bind_r.out.bind_info->length));
                        break;
                }
        }