#include <stdlib.h>
#include <string.h>
-#ifdef VMS
+#include <openssl/e_os.h>
+#include <openssl/crypto.h>
+#include <openssl/rand.h>
+
+#ifdef OPENSSL_SYS_VMS
#include <unixio.h>
#endif
#ifndef NO_SYS_TYPES_H
# include <sys/stat.h>
#endif
-#include <openssl/e_os.h>
-#include <openssl/crypto.h>
-#include <openssl/rand.h>
-
#undef BUFSIZE
#define BUFSIZE 1024
#define RAND_DATA 1024
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,
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 */
{
some point... */
}
}
-#endif /* VMS */
+#endif /* OPENSSL_SYS_VMS */
fclose(out);
memset(buf,0,BUFSIZE);
const char *RAND_file_name(char *buf, int size)
{
- char *s;
+ char *s=NULL;
char *ret=NULL;
- s=getenv("RANDFILE");
+ if (OPENSSL_issetugid() == 0)
+ s=getenv("RANDFILE");
if (s != NULL)
{
strncpy(buf,s,size-1);
}
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");
+ if (s != NULL && (strlen(s)+strlen(RFILE)+2 < size))
+ {
+ strcpy(buf,s);
+#ifndef OPENSSL_SYS_VMS
+ strcat(buf,"/");
#endif
- strcat(buf,RFILE);
- ret=buf;
+ strcat(buf,RFILE);
+ ret=buf;
+ }
+ else
+ buf[0] = '\0'; /* no file name */
}
return(ret);
}