projects
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Some platforms (most notably Windows) do not have a $HOME by default.
[openssl.git]
/
crypto
/
rand
/
randfile.c
diff --git
a/crypto/rand/randfile.c
b/crypto/rand/randfile.c
index d01b9852e9473c4a45bdbd7283caf0f60769bff3..982074c465ba4547a61d969073b0e21e5ba4e9a1 100644
(file)
--- a/
crypto/rand/randfile.c
+++ b/
crypto/rand/randfile.c
@@
-61,9
+61,11
@@
#include <stdlib.h>
#include <string.h>
#include <stdlib.h>
#include <string.h>
-#include "openssl/e_os.h"
+#include "e_os.h"
+#include <openssl/crypto.h>
+#include <openssl/rand.h>
-#ifdef VMS
+#ifdef
OPENSSL_SYS_
VMS
#include <unixio.h>
#endif
#ifndef NO_SYS_TYPES_H
#include <unixio.h>
#endif
#ifndef NO_SYS_TYPES_H
@@
-75,15
+77,15
@@
# include <sys/stat.h>
#endif
# include <sys/stat.h>
#endif
-#include <openssl/crypto.h>
-#include <openssl/rand.h>
-
#undef BUFSIZE
#define BUFSIZE 1024
#define RAND_DATA 1024
/* #define RFILE ".rnd" - defined in ../../e_os.h */
#undef BUFSIZE
#define BUFSIZE 1024
#define RAND_DATA 1024
/* #define RFILE ".rnd" - defined in ../../e_os.h */
+/* Note that these functions are intended for seed files only.
+ * Entropy devices and EGD sockets are handled in rand_unix.c */
+
int RAND_load_file(const char *file, long bytes)
{
/* If bytes >= 0, read up to 'bytes' bytes.
int RAND_load_file(const char *file, long bytes)
{
/* If bytes >= 0, read up to 'bytes' bytes.
@@
-118,7
+120,7
@@
int RAND_load_file(const char *file, long bytes)
if (bytes > 0)
{
bytes-=n;
if (bytes > 0)
{
bytes-=n;
- if (bytes
=
= 0) break;
+ if (bytes
<
= 0) break;
}
}
fclose(in);
}
}
fclose(in);
@@
-130,11
+132,11
@@
err:
int RAND_write_file(const char *file)
{
unsigned char buf[BUFSIZE];
int RAND_write_file(const char *file)
{
unsigned char buf[BUFSIZE];
- int i,ret=0,err=0;
+ int i,ret=0,
rand_
err=0;
FILE *out = NULL;
int n;
FILE *out = NULL;
int n;
-#if defined(O_CREAT) && !defined(WIN32)
+#if defined(O_CREAT) && !defined(
OPENSSL_SYS_
WIN32)
/* For some reason Win32 can't write to files created this way */
/* chmod(..., 0600) is too late to protect the file,
/* For some reason Win32 can't write to files created this way */
/* chmod(..., 0600) is too late to protect the file,
@@
-156,7
+158,7
@@
int RAND_write_file(const char *file)
i=(n > BUFSIZE)?BUFSIZE:n;
n-=BUFSIZE;
if (RAND_bytes(buf,i) <= 0)
i=(n > BUFSIZE)?BUFSIZE:n;
n-=BUFSIZE;
if (RAND_bytes(buf,i) <= 0)
- err=1;
+
rand_
err=1;
i=fwrite(buf,1,i,out);
if (i <= 0)
{
i=fwrite(buf,1,i,out);
if (i <= 0)
{
@@
-166,13
+168,13
@@
int RAND_write_file(const char *file)
ret+=i;
if (n <= 0) break;
}
ret+=i;
if (n <= 0) break;
}
-#ifdef VMS
+#ifdef
OPENSSL_SYS_
VMS
/* Try to delete older versions of the file, until there aren't
any */
{
char *tmpf;
/* Try to delete older versions of the file, until there aren't
any */
{
char *tmpf;
- tmpf =
M
alloc(strlen(file) + 4); /* to add ";-1" and a nul */
+ tmpf =
OPENSSL_m
alloc(strlen(file) + 4); /* to add ";-1" and a nul */
if (tmpf)
{
strcpy(tmpf, file);
if (tmpf)
{
strcpy(tmpf, file);
@@
-184,20
+186,21
@@
int RAND_write_file(const char *file)
some point... */
}
}
some point... */
}
}
-#endif /* VMS */
+#endif /*
OPENSSL_SYS_
VMS */
fclose(out);
memset(buf,0,BUFSIZE);
err:
fclose(out);
memset(buf,0,BUFSIZE);
err:
- return
(
err ? -1 : ret);
+ return
(rand_
err ? -1 : ret);
}
}
-const char *RAND_file_name(char *buf,
in
t size)
+const char *RAND_file_name(char *buf,
size_
t size)
{
{
- char *s;
+ char *s
=NULL
;
char *ret=NULL;
char *ret=NULL;
- s=getenv("RANDFILE");
+ if (OPENSSL_issetugid() == 0)
+ s=getenv("RANDFILE");
if (s != NULL)
{
strncpy(buf,s,size-1);
if (s != NULL)
{
strncpy(buf,s,size-1);
@@
-206,16
+209,25
@@
const char *RAND_file_name(char *buf, int size)
}
else
{
}
else
{
- s=getenv("HOME");
-
if (s == NULL) return(RFILE
);
- if (((int)(strlen(s)+strlen(RFILE)+2)) > size)
- return(RFILE);
- strcpy(buf,s);
-#ifndef VMS
- strcat(buf,"/");
+ if (OPENSSL_issetugid() == 0)
+
s=getenv("HOME"
);
+#ifdef DEFAULT_HOME
+ if (s == NULL)
+ {
+ s = DEFAULT_HOME;
+ }
#endif
#endif
- strcat(buf,RFILE);
- ret=buf;
+ if (s != NULL && (strlen(s)+strlen(RFILE)+2 < size))
+ {
+ strcpy(buf,s);
+#ifndef OPENSSL_SYS_VMS
+ strcat(buf,"/");
+#endif
+ strcat(buf,RFILE);
+ ret=buf;
+ }
+ else
+ buf[0] = '\0'; /* no file name */
}
return(ret);
}
}
return(ret);
}