[PATCH v2] Replace random() and related calls with generate_random_buffer()
Robin McCorkell
rmccorkell at karoshi.org.uk
Tue Jul 7 14:35:36 UTC 2015
Result: better seeded random numbers that are cryptographically secure
(not that it matters in this case)
And here is that patch again with the Signed-off-by tag...
Signed-off-by: Robin McCorkell <rmccorkell at karoshi.org.uk>
---
dfs_server/dfs_server_ad.c | 28 ++++++++++++++++++----------
source3/smbd/msdfs.c | 11 +++++++++--
2 files changed, 27 insertions(+), 12 deletions(-)
diff --git a/dfs_server/dfs_server_ad.c b/dfs_server/dfs_server_ad.c
index 3d93e19..ca88982 100644
--- a/dfs_server/dfs_server_ad.c
+++ b/dfs_server/dfs_server_ad.c
@@ -40,20 +40,27 @@ struct dc_set {
static void shuffle_dc_set(struct dc_set *list)
{
- uint32_t i;
+ uint32_t i;
+ uint8_t *random;
- srandom(time(NULL));
+ random = talloc_array(NULL, uint8_t, list->count + 1);
+ if (random == NULL) {
+ return; /* No shuffling, oops */
+ }
+ generate_random_buffer(random, list->count + 1);
- for (i = list->count; i > 1; i--) {
- uint32_t r;
- const char *tmp;
+ for (i = list->count; i > 1; i--) {
+ uint8_t r;
+ const char *tmp;
- r = random() % i;
+ r = random[i] % i;
- tmp = list->names[i - 1];
- list->names[i - 1] = list->names[r];
- list->names[r] = tmp;
- }
+ tmp = list->names[i - 1];
+ list->names[i - 1] = list->names[r];
+ list->names[r] = tmp;
+ }
+
+ talloc_free(random);
}
/*
@@ -945,3 +952,4 @@ NTSTATUS dfs_server_ad_get_referrals(struct loadparm_context *lp_ctx,
/* By default until all the case are handled */
return NT_STATUS_NOT_FOUND;
}
+
diff --git a/source3/smbd/msdfs.c b/source3/smbd/msdfs.c
index a39efce..2a3fc83 100644
--- a/source3/smbd/msdfs.c
+++ b/source3/smbd/msdfs.c
@@ -433,16 +433,23 @@ static void shuffle_strlist(char **list, int count)
{
int i, r;
char *tmp;
+ uint8_t *random;
- srandom(time(NULL));
+ random = talloc_array(NULL, uint8_t, count + 1);
+ if (random == NULL) {
+ return; /* No shuffling, oops */
+ }
+ generate_random_buffer(random, count + 1);
for (i = count; i > 1; i--) {
- r = random() % i;
+ r = random[i] % i;
tmp = list[i-1];
list[i-1] = list[r];
list[r] = tmp;
}
+
+ talloc_free(random);
}
/**********************************************************************
--
2.4.5
More information about the samba-technical
mailing list