summaryrefslogtreecommitdiff
path: root/lib/nettle/egd.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/nettle/egd.c')
-rw-r--r--lib/nettle/egd.c198
1 files changed, 103 insertions, 95 deletions
diff --git a/lib/nettle/egd.c b/lib/nettle/egd.c
index 09c5ad8906..4e720e4921 100644
--- a/lib/nettle/egd.c
+++ b/lib/nettle/egd.c
@@ -40,80 +40,86 @@
static int egd_socket = -1;
static int
-do_write( int fd, void *buf, size_t nbytes )
+do_write (int fd, void *buf, size_t nbytes)
{
size_t nleft = nbytes;
int nwritten;
-
- while( nleft > 0 )
+
+ while (nleft > 0)
{
- nwritten = write( fd, buf, nleft);
- if( nwritten < 0 )
- {
- if( errno == EINTR )
- continue;
- return -1;
+ nwritten = write (fd, buf, nleft);
+ if (nwritten < 0)
+ {
+ if (errno == EINTR)
+ continue;
+ return -1;
}
nleft -= nwritten;
- buf = (char*)buf + nwritten;
+ buf = (char *) buf + nwritten;
}
return 0;
}
static int
-do_read( int fd, void *buf, size_t nbytes )
+do_read (int fd, void *buf, size_t nbytes)
{
int n, nread = 0;
do
{
do
- {
- n = read(fd, (char*)buf + nread, nbytes );
- }
- while( n == -1 && errno == EINTR );
- if( n == -1)
- return nread? nread:-1;
- if( n == 0)
- return -1;
+ {
+ n = read (fd, (char *) buf + nread, nbytes);
+ }
+ while (n == -1 && errno == EINTR);
+ if (n == -1)
+ return nread ? nread : -1;
+ if (n == 0)
+ return -1;
nread += n;
nbytes -= n;
- }
- while( nread < nbytes );
+ }
+ while (nread < nbytes);
return nread;
}
-static const char* egd_names[] = {
- "/var/run/egd-pool",
- "/dev/egd-pool",
- "/etc/egd-pool",
- "/etc/entropy",
- "/var/run/entropy",
+static const char *egd_names[] = {
+ "/var/run/egd-pool",
+ "/dev/egd-pool",
+ "/etc/egd-pool",
+ "/etc/entropy",
+ "/var/run/entropy",
"/dev/entropy",
- NULL
+ NULL
};
-static const char* find_egd_name(void)
+static const char *
+find_egd_name (void)
{
-int i = 0;
-struct stat st;
-
- do {
- if (stat(egd_names[i], &st) != 0) continue;
-
- if (st.st_mode & S_IFSOCK) { /* found */
- return egd_names[i];
+ int i = 0;
+ struct stat st;
+
+ do
+ {
+ if (stat (egd_names[i], &st) != 0)
+ continue;
+
+ if (st.st_mode & S_IFSOCK)
+ { /* found */
+ return egd_names[i];
+ }
+
}
-
- } while(egd_names[++i] != NULL);
-
+ while (egd_names[++i] != NULL);
+
return NULL;
}
/* Connect to the EGD and return the file descriptor. Return -1 on
error. With NOFAIL set to true, silently fail and return the
error, otherwise print an error message and die. */
-int _rndegd_connect_socket (void)
+int
+_rndegd_connect_socket (void)
{
int fd;
const char *name;
@@ -126,30 +132,31 @@ int _rndegd_connect_socket (void)
egd_socket = -1;
}
- name = find_egd_name();
+ name = find_egd_name ();
- if (strlen(name)+1 >= sizeof addr.sun_path)
+ if (strlen (name) + 1 >= sizeof addr.sun_path)
{
_gnutls_debug_log ("EGD socketname is too long\n");
return -1;
}
-
- memset( &addr, 0, sizeof addr );
+
+ memset (&addr, 0, sizeof addr);
addr.sun_family = AF_LOCAL;
- strcpy( addr.sun_path, name );
- addr_len = (offsetof( struct sockaddr_un, sun_path )
- + strlen( addr.sun_path ));
-
- fd = socket(AF_LOCAL, SOCK_STREAM, 0);
+ strcpy (addr.sun_path, name);
+ addr_len = (offsetof (struct sockaddr_un, sun_path)
+ + strlen (addr.sun_path));
+
+ fd = socket (AF_LOCAL, SOCK_STREAM, 0);
if (fd == -1)
{
- _gnutls_debug_log("can't create unix domain socket: %s\n", strerror(errno) );
+ _gnutls_debug_log ("can't create unix domain socket: %s\n",
+ strerror (errno));
return -1;
}
- else if (connect (fd, (struct sockaddr*)&addr, addr_len) == -1)
+ else if (connect (fd, (struct sockaddr *) &addr, addr_len) == -1)
{
- _gnutls_debug_log("can't connect to EGD socket `%s': %s\n",
- name, strerror(errno) );
+ _gnutls_debug_log ("can't connect to EGD socket `%s': %s\n",
+ name, strerror (errno));
close (fd);
fd = -1;
}
@@ -167,20 +174,21 @@ int _rndegd_connect_socket (void)
* Using a level of 0 should never block and better add nothing
* to the pool. So this is just a dummy for EGD.
*/
-int _rndegd_read (int * fd, void* _output, size_t _length)
+int
+_rndegd_read (int *fd, void *_output, size_t _length)
{
int n;
- uint8_t buffer[256+2];
+ uint8_t buffer[256 + 2];
int nbytes;
int do_restart = 0;
- unsigned char* output = _output;
+ unsigned char *output = _output;
size_t length = _length;
- if( !length )
+ if (!length)
return 0;
- restart:
+restart:
if (*fd == -1 || do_restart)
*fd = _rndegd_connect_socket ();
@@ -188,68 +196,68 @@ int _rndegd_read (int * fd, void* _output, size_t _length)
nbytes = length < 255 ? length : 255;
/* First time we do it with a non blocking request */
- buffer[0] = 1; /* non blocking */
+ buffer[0] = 1; /* non blocking */
buffer[1] = nbytes;
- if( do_write( *fd, buffer, 2 ) == -1 )
- _gnutls_debug_log("can't write to the EGD: %s\n", strerror(errno) );
+ if (do_write (*fd, buffer, 2) == -1)
+ _gnutls_debug_log ("can't write to the EGD: %s\n", strerror (errno));
- n = do_read( *fd, buffer, 1 );
- if( n == -1 )
+ n = do_read (*fd, buffer, 1);
+ if (n == -1)
{
- _gnutls_debug_log("read error on EGD: %s\n", strerror(errno));
+ _gnutls_debug_log ("read error on EGD: %s\n", strerror (errno));
do_restart = 1;
goto restart;
}
n = buffer[0];
- if( n )
+ if (n)
{
- n = do_read( *fd, buffer, n );
- if( n == -1 )
- {
- _gnutls_debug_log("read error on EGD: %s\n", strerror(errno));
- do_restart = 1;
- goto restart;
+ n = do_read (*fd, buffer, n);
+ if (n == -1)
+ {
+ _gnutls_debug_log ("read error on EGD: %s\n", strerror (errno));
+ do_restart = 1;
+ goto restart;
}
if (n > length)
- {
- _gnutls_debug_log("read error on EGD: returned more bytes!\n");
- n = length;
- }
+ {
+ _gnutls_debug_log ("read error on EGD: returned more bytes!\n");
+ n = length;
+ }
- memcpy(output, buffer, n);
+ memcpy (output, buffer, n);
output += n;
length -= n;
}
- while( length )
+ while (length)
{
- nbytes = length < 255? length : 255;
+ nbytes = length < 255 ? length : 255;
- buffer[0] = 2; /* blocking */
+ buffer[0] = 2; /* blocking */
buffer[1] = nbytes;
- if( do_write( *fd, buffer, 2 ) == -1 )
- _gnutls_debug_log("can't write to the EGD: %s\n", strerror(errno) );
- n = do_read( *fd, buffer, nbytes );
- if( n == -1 )
- {
- _gnutls_debug_log("read error on EGD: %s\n", strerror(errno));
- do_restart = 1;
- goto restart;
+ if (do_write (*fd, buffer, 2) == -1)
+ _gnutls_debug_log ("can't write to the EGD: %s\n", strerror (errno));
+ n = do_read (*fd, buffer, nbytes);
+ if (n == -1)
+ {
+ _gnutls_debug_log ("read error on EGD: %s\n", strerror (errno));
+ do_restart = 1;
+ goto restart;
}
if (n > length)
- {
- _gnutls_debug_log("read error on EGD: returned more bytes!\n");
- n = length;
- }
-
- memcpy(output, buffer, n);
+ {
+ _gnutls_debug_log ("read error on EGD: returned more bytes!\n");
+ n = length;
+ }
+
+ memcpy (output, buffer, n);
output += n;
length -= n;
}
- return _length; /* success */
+ return _length; /* success */
}