summaryrefslogtreecommitdiff
path: root/source4/heimdal/lib/hcrypto/rand-unix.c
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2010-01-12 18:16:45 +1100
committerAndrew Bartlett <abartlet@samba.org>2010-03-27 11:51:27 +1100
commit89eaef025376339ef25d07cdc4748920fceaa968 (patch)
treef514f4632c9d54a372a7f1f0ca845a0c3a488fbf /source4/heimdal/lib/hcrypto/rand-unix.c
parentfac8ca52ade6e490eea3cf3d0fc98287da321c13 (diff)
downloadsamba-89eaef025376339ef25d07cdc4748920fceaa968.tar.gz
samba-89eaef025376339ef25d07cdc4748920fceaa968.tar.bz2
samba-89eaef025376339ef25d07cdc4748920fceaa968.zip
s4:heimdal: import lorikeet-heimdal-201001120029 (commit a5e675fed7c5db8a7370b77ed0bfa724196aa84d)
Diffstat (limited to 'source4/heimdal/lib/hcrypto/rand-unix.c')
-rw-r--r--source4/heimdal/lib/hcrypto/rand-unix.c38
1 files changed, 10 insertions, 28 deletions
diff --git a/source4/heimdal/lib/hcrypto/rand-unix.c b/source4/heimdal/lib/hcrypto/rand-unix.c
index fcad39f1de..4c1f33da59 100644
--- a/source4/heimdal/lib/hcrypto/rand-unix.c
+++ b/source4/heimdal/lib/hcrypto/rand-unix.c
@@ -42,9 +42,6 @@
#include "randi.h"
-static int random_fd = -1;
-static HEIMDAL_MUTEX random_mutex = HEIMDAL_MUTEX_INITIALIZER;
-
/*
* Unix /dev/random
*/
@@ -93,44 +90,29 @@ static int
unix_bytes(unsigned char *outdata, int size)
{
ssize_t count;
- int once = 0;
+ int fd;
if (size < 0)
return 0;
else if (size == 0)
return 1;
- HEIMDAL_MUTEX_lock(&random_mutex);
- if (random_fd == -1) {
- retry:
- random_fd = get_device_fd(O_RDONLY);
- if (random_fd < 0) {
- HEIMDAL_MUTEX_unlock(&random_mutex);
- return 0;
- }
- }
+ fd = get_device_fd(O_RDONLY);
+ if (fd < 0)
+ return 0;
while (size > 0) {
- HEIMDAL_MUTEX_unlock(&random_mutex);
- count = read (random_fd, outdata, size);
- HEIMDAL_MUTEX_lock(&random_mutex);
- if (random_fd < 0) {
- if (errno == EINTR)
- continue;
- else if (errno == EBADF && once++ == 0) {
- close(random_fd);
- random_fd = -1;
- goto retry;
- }
- return 0;
- } else if (count <= 0) {
- HEIMDAL_MUTEX_unlock(&random_mutex);
+ count = read(fd, outdata, size);
+ if (count < 0 && errno == EINTR)
+ continue;
+ else if (count <= 0) {
+ close(fd);
return 0;
}
outdata += count;
size -= count;
}
- HEIMDAL_MUTEX_unlock(&random_mutex);
+ close(fd);
return 1;
}