summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/phar/config.w3210
-rw-r--r--ext/phar/phar.c9
-rw-r--r--ext/phar/tests/phar_get_supported_signatures_002.phpt10
-rw-r--r--ext/phar/tests/phar_setsignaturealgo2.phpt8
-rw-r--r--ext/phar/tests/phpinfo_001.phpt12
-rw-r--r--ext/phar/tests/phpinfo_002.phpt11
-rw-r--r--ext/phar/tests/phpinfo_003.phpt11
-rw-r--r--ext/phar/tests/phpinfo_004.phpt12
-rw-r--r--ext/phar/tests/test_signaturealgos.phpt9
-rw-r--r--ext/phar/util.c9
10 files changed, 73 insertions, 28 deletions
diff --git a/ext/phar/config.w32 b/ext/phar/config.w32
index f612f0dd13..e88b237535 100644
--- a/ext/phar/config.w32
+++ b/ext/phar/config.w32
@@ -2,11 +2,21 @@
// vim:ft=javascript
ARG_ENABLE("phar", "disable phar support", "yes");
+ARG_ENABLE("phar-ssl", "enable phar with native OpenSSL support", "no");
+
+if (PHP_PHAR_SSL != "no") {
+ PHP_PHAR = PHP_PHAR_SSL;
+ PHP_PHAR_SHARED = PHP_PHAR_SSL_SHARED;
+}
if (PHP_PHAR != "no") {
EXTENSION("phar", "dirstream.c func_interceptors.c phar.c phar_object.c phar_path_check.c stream.c tar.c util.c zip.c");
if (PHP_PHAR_SHARED) {
ADD_FLAG("CFLAGS_PHAR", "/D COMPILE_DL_PHAR ");
}
+ if (PHP_PHAR_SSL != "no") {
+ ADD_FLAG("LIBS_PHAR", "libeay32.lib");
+ AC_DEFINE('PHAR_HAVE_OPENSSL', 1);
+ }
ADD_EXTENSION_DEP('phar', 'spl', true);
}
diff --git a/ext/phar/phar.c b/ext/phar/phar.c
index 4de7904354..6a0620eebf 100644
--- a/ext/phar/phar.c
+++ b/ext/phar/phar.c
@@ -3422,6 +3422,15 @@ PHP_MINFO_FUNCTION(phar) /* {{{ */
} else {
php_info_print_table_row(2, "bzip2 compression", "disabled (install pecl/bz2)");
}
+#ifdef PHAR_HAVE_OPENSSL
+ php_info_print_table_row(2, "Native OpenSSL support", "enabled");
+#else
+ if (zend_hash_exists(&module_registry, "openssl", sizeof("openssl"))) {
+ php_info_print_table_row(2, "OpenSSL support", "enabled");
+ } else {
+ php_info_print_table_row(2, "OpenSSL support", "disabled (install ext/openssl)");
+ }
+#endif
php_info_print_table_end();
php_info_print_box_start(0);
diff --git a/ext/phar/tests/phar_get_supported_signatures_002.phpt b/ext/phar/tests/phar_get_supported_signatures_002.phpt
index 21bb56d7ea..fa9d02e584 100644
--- a/ext/phar/tests/phar_get_supported_signatures_002.phpt
+++ b/ext/phar/tests/phar_get_supported_signatures_002.phpt
@@ -1,9 +1,13 @@
--TEST--
Phar::getSupportedSignatures()
--SKIPIF--
-<?php if (!extension_loaded("phar")) die("skip"); ?>
-<?php if (!extension_loaded("hash")) die("skip extension hash required"); ?>
-<?php if (extension_loaded("openssl")) die("skip extension openssl loaded"); ?>
+<?php
+if (!extension_loaded("phar")) die("skip");
+if (!extension_loaded("hash")) die("skip extension hash required");
+if (extension_loaded("openssl")) die("skip extension openssl loaded");
+$arr = Phar::getSupportedSignatures();
+if (in_array("OpenSSL", $arr)) die ("skip native openssl support enabled");
+?>
--INI--
phar.require_hash=0
phar.readonly=0
diff --git a/ext/phar/tests/phar_setsignaturealgo2.phpt b/ext/phar/tests/phar_setsignaturealgo2.phpt
index c7f5f9ecfc..e3f858d5d6 100644
--- a/ext/phar/tests/phar_setsignaturealgo2.phpt
+++ b/ext/phar/tests/phar_setsignaturealgo2.phpt
@@ -1,9 +1,11 @@
--TEST--
Phar::setSupportedSignatures() with hash
--SKIPIF--
-<?php if (!extension_loaded("phar")) die("skip"); ?>
-<?php if (!extension_loaded("hash")) die("skip extension hash required"); ?>
-<?php if (!extension_loaded("openssl")) die("skip extension openssl required"); ?>
+<?php
+if (!extension_loaded("phar")) die("skip");
+if (!extension_loaded("hash")) die("skip hash extension required");
+if (!extension_loaded("openssl")) die("skip openssl extension required");
+?>
--INI--
phar.require_hash=0
phar.readonly=0
diff --git a/ext/phar/tests/phpinfo_001.phpt b/ext/phar/tests/phpinfo_001.phpt
index 400a553226..b81751dc72 100644
--- a/ext/phar/tests/phpinfo_001.phpt
+++ b/ext/phar/tests/phpinfo_001.phpt
@@ -1,9 +1,13 @@
--TEST--
Phar: phpinfo display 1
--SKIPIF--
-<?php if (!extension_loaded("phar")) die("skip"); ?>
-<?php if (!extension_loaded("zlib")) die("skip zlib not loaded"); ?>
-<?php if (!extension_loaded("bz2")) die("skip bz2 not loaded"); ?>
+<?php
+if (!extension_loaded("phar")) die("skip");
+if (!extension_loaded("zlib")) die("skip zlib not loaded");
+if (!extension_loaded("bz2")) die("skip bz2 not loaded");
+$arr = Phar::getSupportedSignatures();
+if (in_array("OpenSSL", $arr)) die("skip openssl support enabled");
+?>
--INI--
phar.readonly=0
phar.require_hash=0
@@ -28,6 +32,7 @@ Tar-based phar archives => enabled
ZIP-based phar archives => enabled
gzip compression => enabled
bzip2 compression => enabled
+OpenSSL support => disabled (install ext/openssl)
Phar based on pear/PHP_Archive, original concept by Davey Shafik.
@@ -49,6 +54,7 @@ Tar-based phar archives => enabled
ZIP-based phar archives => enabled
gzip compression => enabled
bzip2 compression => enabled
+OpenSSL support => disabled (install ext/openssl)
Phar based on pear/PHP_Archive, original concept by Davey Shafik.
diff --git a/ext/phar/tests/phpinfo_002.phpt b/ext/phar/tests/phpinfo_002.phpt
index 5fd0370d33..68e7af0d51 100644
--- a/ext/phar/tests/phpinfo_002.phpt
+++ b/ext/phar/tests/phpinfo_002.phpt
@@ -1,9 +1,13 @@
--TEST--
Phar: phpinfo display 2
--SKIPIF--
-<?php if (!extension_loaded("phar")) die("skip"); ?>
-<?php if (!extension_loaded("zlib")) die("skip zlib not loaded"); ?>
-<?php if (!extension_loaded("bz2")) die("skip bz2 not loaded"); ?>
+<?php
+if (!extension_loaded("phar")) die("skip");
+if (!extension_loaded("zlib")) die("skip zlib not loaded");
+if (!extension_loaded("bz2")) die("skip bz2 not loaded");
+$arr = Phar::getSupportedSignatures();
+if (in_array("OpenSSL", $arr)) die("skip openssl support enabled");
+?>
--INI--
phar.readonly=1
phar.require_hash=1
@@ -26,6 +30,7 @@ Tar-based phar archives => enabled
ZIP-based phar archives => enabled
gzip compression => enabled
bzip2 compression => enabled
+OpenSSL support => disabled (install ext/openssl)
Phar based on pear/PHP_Archive, original concept by Davey Shafik.
diff --git a/ext/phar/tests/phpinfo_003.phpt b/ext/phar/tests/phpinfo_003.phpt
index 16690b476c..6908ba1e7f 100644
--- a/ext/phar/tests/phpinfo_003.phpt
+++ b/ext/phar/tests/phpinfo_003.phpt
@@ -1,9 +1,13 @@
--TEST--
Phar: phpinfo display 3
--SKIPIF--
-<?php if (!extension_loaded("phar")) die("skip"); ?>
-<?php if (extension_loaded("zlib")) die("skip zlib loaded"); ?>
-<?php if (extension_loaded("bz2")) die("skip bz2 loaded"); ?>
+<?php
+if (!extension_loaded("phar")) die("skip");
+if (extension_loaded("zlib")) die("skip zlib loaded");
+if (extension_loaded("bz2")) die("skip bz2 loaded");
+$arr = Phar::getSupportedSignatures();
+if (in_array("OpenSSL", $arr)) die("skip openssl support enabled");
+?>
--INI--
phar.readonly=1
phar.require_hash=1
@@ -26,6 +30,7 @@ Tar-based phar archives => enabled
ZIP-based phar archives => enabled
gzip compression => disabled (install ext/zlib)
bzip2 compression => disabled (install pecl/bz2)
+OpenSSL support => disabled (install ext/openssl)
Phar based on pear/PHP_Archive, original concept by Davey Shafik.
diff --git a/ext/phar/tests/phpinfo_004.phpt b/ext/phar/tests/phpinfo_004.phpt
index b541c6f00a..473b5332c0 100644
--- a/ext/phar/tests/phpinfo_004.phpt
+++ b/ext/phar/tests/phpinfo_004.phpt
@@ -1,9 +1,13 @@
--TEST--
Phar: phpinfo display 4
--SKIPIF--
-<?php if (!extension_loaded("phar")) die("skip"); ?>
-<?php if (!extension_loaded("zlib")) die("skip zlib not loaded"); ?>
-<?php if (!extension_loaded("bz2")) die("skip bz2 not loaded"); ?>
+<?php
+if (!extension_loaded("phar")) die("skip");
+if (!extension_loaded("zlib")) die("skip zlib not loaded");
+if (!extension_loaded("bz2")) die("skip bz2 not loaded");
+$arr = Phar::getSupportedSignatures();
+if (in_array("OpenSSL", $arr)) die("skip native openssl support enabled");
+?>
--INI--
phar.readonly=0
phar.require_hash=0
@@ -31,6 +35,7 @@ phpinfo(INFO_MODULES);
<tr><td class="e">ZIP-based phar archives </td><td class="v">enabled </td></tr>
<tr><td class="e">gzip compression </td><td class="v">enabled </td></tr>
<tr><td class="e">bzip2 compression </td><td class="v">enabled </td></tr>
+<tr><td class="e">OpenSSL support </td><td class="v">disabled (install ext/openssl) </td></tr>
</table><br />
<table border="0" cellpadding="3" width="600">
<tr class="v"><td>
@@ -54,6 +59,7 @@ Phar based on pear/PHP_Archive, original concept by Davey Shafik.<br />Phar full
<tr><td class="e">ZIP-based phar archives </td><td class="v">enabled </td></tr>
<tr><td class="e">gzip compression </td><td class="v">enabled </td></tr>
<tr><td class="e">bzip2 compression </td><td class="v">enabled </td></tr>
+<tr><td class="e">OpenSSL support </td><td class="v">disabled (install ext/openssl) </td></tr>
</table><br />
<table border="0" cellpadding="3" width="600">
<tr class="v"><td>
diff --git a/ext/phar/tests/test_signaturealgos.phpt b/ext/phar/tests/test_signaturealgos.phpt
index 990cf1e66a..2ef7ca109f 100644
--- a/ext/phar/tests/test_signaturealgos.phpt
+++ b/ext/phar/tests/test_signaturealgos.phpt
@@ -1,9 +1,12 @@
--TEST--
Phar: verify signature parsing works
--SKIPIF--
-<?php if (!extension_loaded("phar")) die("skip"); ?>
-<?php if (!extension_loaded("hash")) die("skip extension hash conflicts"); ?>
-<?php if (!extension_loaded("openssl")) die("skip extension openssl conflicts"); ?>
+<?php
+if (!extension_loaded("phar")) die("skip");
+if (!extension_loaded("hash")) die("skip extension hash conflicts");
+$arr = Phar::getSupportedSignatures();
+if (!in_array("OpenSSL", $arr)) die("skip openssl support required");
+?>
--INI--
phar.require_hash=0
phar.readonly=0
diff --git a/ext/phar/util.c b/ext/phar/util.c
index 4ea546097a..fb6edb464c 100644
--- a/ext/phar/util.c
+++ b/ext/phar/util.c
@@ -1596,13 +1596,14 @@ int phar_verify_signature(php_stream *fp, size_t end_of_phar, php_uint32 sig_typ
char *pubkey = NULL, *pfile;
php_stream *pfp;
+#ifndef PHAR_HAVE_OPENSSL
if (!zend_hash_exists(&module_registry, "openssl", sizeof("openssl"))) {
if (error) {
spprintf(error, 0, "openssl not loaded");
}
return FAILURE;
}
-
+#endif
/* use __FILE__ . '.pubkey' for public key file */
spprintf(&pfile, 0, "%s.pubkey", fname);
pfp = php_stream_open_wrapper(pfile, "rb", 0, NULL);
@@ -1873,12 +1874,6 @@ int phar_create_signature(phar_archive_data *phar, php_stream *fp, char **signat
EVP_MD *mdtype = (EVP_MD *) EVP_sha1();
EVP_MD_CTX md_ctx;
- if (!zend_hash_exists(&module_registry, "openssl", sizeof("openssl"))) {
- if (error) {
- spprintf(error, 0, "phar \"%s\" openssl signature cannot be created, openssl not loaded", phar->fname);
- }
- return FAILURE;
- }
in = BIO_new_mem_buf(PHAR_G(openssl_privatekey), PHAR_G(openssl_privatekey_len));
if (in == NULL) {