[PATCH] dfs_server: randomize the server redirect set

Arvid Requate requate at univention.de
Thu Mar 20 15:49:08 MDT 2014


comply with [MS-DFSC] section 3.2.1.1

Signed-off-by: Arvid Requate <requate at univention.de>
---
 dfs_server/dfs_server_ad.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/dfs_server/dfs_server_ad.c b/dfs_server/dfs_server_ad.c
index 504ab79..51df322 100644
--- a/dfs_server/dfs_server_ad.c
+++ b/dfs_server/dfs_server_ad.c
@@ -38,6 +38,24 @@ struct dc_set {
        uint32_t count;
 };
 
+static void shuffle_dc_set(struct dc_set *list)
+{
+       uint32_t i;
+
+       srandom(time(NULL));
+
+       for (i = list->count; i > 1; i--) {
+               uint32_t r;
+               const char *tmp;
+
+               r = random() % i;
+
+               tmp = list->names[i - 1];
+               list->names[i - 1] = list->names[r];
+               list->names[r] = tmp;
+       }
+}
+
 /*
   fill a referral type structure
  */
@@ -265,6 +283,8 @@ static NTSTATUS get_dcs_insite(TALLOC_CTX *ctx, struct 
ldb_context *ldb,
                talloc_free(msg);
        }
 
+       shuffle_dc_set(list);
+
        talloc_free(r);
        return NT_STATUS_OK;
 }
-- 
1.8.5.3



More information about the samba-technical mailing list