idl:drsuapi: Manage all possible lengths of drsuapi_DsBindInfo
[metze/samba/wip.git] / source4 / dsdb / repl / drepl_out_helpers.c
index 57205a8426014ec1d6acf58fc54a95e51e61444d..df19e8f3a7a973162ae3aca591b303383b951253 100644 (file)
@@ -183,10 +183,35 @@ static void dreplsrv_out_drsuapi_bind_done(struct tevent_req *subreq)
                        info28->repl_epoch              = info48->repl_epoch;
                        break;
                }
-               case 28:
+               case 28: {
                        *info28 = state->bind_r.out.bind_info->info.info28;
                        break;
                }
+               case 32: {
+                       struct drsuapi_DsBindInfo32 *info32;
+                       info32 = &state->bind_r.out.bind_info->info.info32;
+
+                       info28->supported_extensions    = info32->supported_extensions;
+                       info28->site_guid               = info32->site_guid;
+                       info28->pid                     = info32->pid;
+                       info28->repl_epoch              = info32->repl_epoch;
+                       break;
+               }
+               case 52: {
+                       struct drsuapi_DsBindInfo52 *info52;
+                       info52 = &state->bind_r.out.bind_info->info.info52;
+
+                       info28->supported_extensions    = info52->supported_extensions;
+                       info28->site_guid               = info52->site_guid;
+                       info28->pid                     = info52->pid;
+                       info28->repl_epoch              = info52->repl_epoch;
+                       break;
+               }
+               default:
+                       DEBUG(1, ("Warning: invalid info length in bind info: %d\n",
+                               state->bind_r.out.bind_info->length));
+                       break;
+               }
        }
 
        tevent_req_done(req);