[PATCH] Replace random() and related calls with generate_random_buffer()
Volker Lendecke
Volker.Lendecke at SerNet.DE
Thu Jul 9 07:30:19 UTC 2015
On Tue, Jul 07, 2015 at 03:18:26PM +0100, Robin McCorkell wrote:
> This patch replaces my previous 'Seed random generator in main()' patch, by
> replacing all calls to random() with generate_random_buffer(). I hope I got
> the memory management with talloc right.
>
> I found some whitespace issues in dfs_server_ad.c, with spaces being used
> instead of tabs for indentation. This is now fixed, sorry for the diff mumble
>
> Robin McCorkell
>
> ---
> 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);
Can't you call generate_random() in every round? I doubt
that this will be noticable performance-wise.
> + 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);
Same here.
Thanks,
Volker
--
SerNet GmbH, Bahnhofsallee 1b, 37081 Göttingen
phone: +49-551-370000-0, fax: +49-551-370000-9
AG Göttingen, HRB 2816, GF: Dr. Johannes Loxen
http://www.sernet.de, mailto:kontakt at sernet.de
More information about the samba-technical
mailing list