summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/lib/util/genrand.c8
-rw-r--r--source4/lib/util/tests/genrand.c4
-rw-r--r--source4/lib/util/util.h2
3 files changed, 8 insertions, 6 deletions
diff --git a/source4/lib/util/genrand.c b/source4/lib/util/genrand.c
index 5751db23d6..7df4ec4e20 100644
--- a/source4/lib/util/genrand.c
+++ b/source4/lib/util/genrand.c
@@ -37,15 +37,17 @@ static unsigned int bytes_since_reseed = 0;
static int urand_fd = -1;
-static void (*reseed_callback)(int *newseed);
+static void (*reseed_callback)(void *userdata, int *newseed);
+static void *reseed_callback_userdata = NULL;
/**
Copy any user given reseed data.
**/
-_PUBLIC_ void set_rand_reseed_callback(void (*fn)(int *))
+_PUBLIC_ void set_rand_reseed_callback(void (*fn)(void *, int *), void *userdata)
{
reseed_callback = fn;
+ reseed_callback_userdata = userdata;
set_need_random_reseed();
}
@@ -61,7 +63,7 @@ _PUBLIC_ void set_need_random_reseed(void)
static void get_rand_reseed_data(int *reseed_data)
{
if (reseed_callback) {
- reseed_callback(reseed_data);
+ reseed_callback(reseed_callback_userdata, reseed_data);
} else {
*reseed_data = 0;
}
diff --git a/source4/lib/util/tests/genrand.c b/source4/lib/util/tests/genrand.c
index 205a66352f..5fe229c089 100644
--- a/source4/lib/util/tests/genrand.c
+++ b/source4/lib/util/tests/genrand.c
@@ -22,14 +22,14 @@
#include "includes.h"
#include "torture/torture.h"
-static void dummy_reseed(int *d)
+static void dummy_reseed(void *userdata, int *d)
{
*d = 42;
}
static bool test_reseed_callback(struct torture_context *tctx)
{
- set_rand_reseed_callback(dummy_reseed);
+ set_rand_reseed_callback(dummy_reseed, NULL);
return true;
}
diff --git a/source4/lib/util/util.h b/source4/lib/util/util.h
index 26700587ef..60c8437634 100644
--- a/source4/lib/util/util.h
+++ b/source4/lib/util/util.h
@@ -218,7 +218,7 @@ _PUBLIC_ struct in_addr sys_inet_makeaddr(int net, int host);
/**
Copy any user given reseed data.
**/
-_PUBLIC_ void set_rand_reseed_callback(void (*fn)(int *));
+_PUBLIC_ void set_rand_reseed_callback(void (*fn)(void *, int *), void *);
/**
* Tell the random number generator it needs to reseed.