]> granicus.if.org Git - php/commitdiff
- [DOC] MFH: add session.entropy* support to windows
authorPierre Joye <pajoye@php.net>
Tue, 8 Jun 2010 22:30:16 +0000 (22:30 +0000)
committerPierre Joye <pajoye@php.net>
Tue, 8 Jun 2010 22:30:16 +0000 (22:30 +0000)
ext/session/session.c

index dac8e954b730ca3f0b23810aec2013a8535bec94..fae961f51eeb15f49b790ce405e83e104c0d344f 100644 (file)
@@ -26,7 +26,8 @@
 #include "php.h"
 
 #ifdef PHP_WIN32
-#include "win32/time.h"
+# include "win32/winutil.h"
+# include "win32/time.h"
 #else
 #include <sys/time.h>
 #endif
@@ -402,6 +403,28 @@ PHPAPI char *php_session_create_id(PS_CREATE_SID_ARGS) /* {{{ */
        efree(buf);
 
        if (PS(entropy_length) > 0) {
+               unsigned char rbuf[2048];
+
+#ifdef PHP_WIN32
+               size_t toread = PS(entropy_length);
+
+               if (php_win32_get_random_bytes(rbuf, (size_t) toread) == SUCCESS){
+
+                       switch (PS(hash_func)) {
+                               case PS_HASH_FUNC_MD5:
+                                       PHP_MD5Update(&md5_context, rbuf, toread);
+                                       break;
+                               case PS_HASH_FUNC_SHA1:
+                                       PHP_SHA1Update(&sha1_context, rbuf, toread);
+                                       break;
+# if defined(HAVE_HASH_EXT) && !defined(COMPILE_DL_HASH)
+                               case PS_HASH_FUNC_OTHER:
+                                       PS(hash_ops)->hash_update(hash_context, rbuf, toread);
+                                       break;
+# endif /* HAVE_HASH_EXT */
+                       }
+               }
+#else
                int fd;
 
                fd = VCWD_OPEN(PS(entropy_file), O_RDONLY);
@@ -431,6 +454,7 @@ PHPAPI char *php_session_create_id(PS_CREATE_SID_ARGS) /* {{{ */
                        }
                        close(fd);
                }
+#endif
        }
 
        digest = emalloc(digest_len + 1);