OPENSSL_issetugid() as in the main branch.
authorUlf Möller <ulf@openssl.org>
Mon, 19 Feb 2001 23:57:18 +0000 (23:57 +0000)
committerUlf Möller <ulf@openssl.org>
Mon, 19 Feb 2001 23:57:18 +0000 (23:57 +0000)
CHANGES
crypto/Makefile.ssl
crypto/crypto.h
crypto/rand/randfile.c
crypto/uid.c

diff --git a/CHANGES b/CHANGES
index 794fc0a267852d5a0593a2718b49bcad54e23065..273e451cb17716d1aee7ab80f2e2b22ba00d2ffc 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -4,6 +4,10 @@
 
  Changes between 0.9.6 and 0.9.6a  [xx XXX 2001]
 
+  *) Don't use getenv in library functions when run as setuid/setgid.
+     New function OPENSSL_issetugid().
+     [Ulf Moeller]
+
   *) Avoid false positives in memory leak detection code (crypto/mem_dbg.c)
      due to incorrect handling of multi-threading:
 
index ae761da79f8410ef5c1a1346c0e5cd4520680c86..ac4839420f7cb6b8d8fc0d547f9fb7c3703a923b 100644 (file)
@@ -34,8 +34,8 @@ SDIRS=        md2 md5 sha mdc2 hmac ripemd \
 GENERAL=Makefile README crypto-lib.com install.com
 
 LIB= $(TOP)/libcrypto.a
-LIBSRC=        cryptlib.c mem.c mem_dbg.c cversion.c ex_data.c tmdiff.c cpt_err.c ebcdic.c
-LIBOBJ= cryptlib.o mem.o mem_dbg.o cversion.o ex_data.o tmdiff.o cpt_err.o ebcdic.o
+LIBSRC=        cryptlib.c mem.c mem_dbg.c cversion.c ex_data.c tmdiff.c cpt_err.c ebcdic.c uid.c
+LIBOBJ= cryptlib.o mem.o mem_dbg.o cversion.o ex_data.o tmdiff.o cpt_err.o ebcdic.o uid.o
 
 SRC= $(LIBSRC)
 
index df6ccaff6d6b2af35001dadb4b46dad36993ca8a..09ae4cb89d8fe67f1ae67b580d202e69110d9210 100644 (file)
@@ -277,6 +277,8 @@ int CRYPTO_is_mem_check_on(void);
 const char *SSLeay_version(int type);
 unsigned long SSLeay(void);
 
+int OPENSSL_issetugid(void);
+
 int CRYPTO_get_ex_new_index(int idx, STACK_OF(CRYPTO_EX_DATA_FUNCS) **skp, long argl, void *argp,
             CRYPTO_EX_new *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
 int CRYPTO_set_ex_data(CRYPTO_EX_DATA *ad, int idx, void *val);
index 02f16aa810329d28ee698dc51a05130f37645c9a..0a4005bd4e3f5b1308d13e64bfccb360e0dd1023 100644 (file)
@@ -196,10 +196,11 @@ err:
 
 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);
@@ -208,16 +209,19 @@ const char *RAND_file_name(char *buf, int size)
                }
        else
                {
-               s=getenv("HOME");
-               if (s == NULL) return(RFILE);
-               if (((int)(strlen(s)+strlen(RFILE)+2)) > size)
-                       return(RFILE);
-               strcpy(buf,s);
+               if (OPENSSL_issetugid() == 0)
+                       s=getenv("HOME");
+               if (s != NULL && (strlen(s)+strlen(RFILE)+2 < size))
+                       {
+                       strcpy(buf,s);
 #ifndef VMS
-               strcat(buf,"/");
+                       strcat(buf,"/");
 #endif
-               strcat(buf,RFILE);
-               ret=buf;
+                       strcat(buf,RFILE);
+                       ret=buf;
+                       }
+                 else
+                       buf[0] = '\0'; /* no file name */
                }
        return(ret);
        }
index 734bddeb602bb097da8d50bcedff16a592168222..5612af48cfbd1be4ccf6eb283fb2877d57b16adf 100644 (file)
@@ -53,7 +53,7 @@
  *
  */
 
-#include <openssl/crypto.h>
+#include "openssl/crypto.h"
 
 #if defined(__OpenBSD__) || (defined(__FreeBSD__) && __FreeBSD__ > 2)
 
@@ -64,7 +64,7 @@ int OPENSSL_issetugid(void)
        return issetugid();
        }
 
-#elif defined(OPENSSL_SYS_WIN32)
+#elif defined(WIN32)
 
 int OPENSSL_issetugid(void)
        {