]> granicus.if.org Git - php/commitdiff
Support for HTTPS with digital certificates.
authorDmitry Stogov <dmitry@php.net>
Thu, 20 Jan 2005 06:13:53 +0000 (06:13 +0000)
committerDmitry Stogov <dmitry@php.net>
Thu, 20 Jan 2005 06:13:53 +0000 (06:13 +0000)
ext/soap/php_http.c
ext/soap/soap.c

index 74532bd039cdb2a812b67dc3d87c0506170fbe27..b2acca55bfea9651fd0a5cbbe58a7aa64c10bbfb 100644 (file)
@@ -84,6 +84,7 @@ static php_stream* http_connect(zval* this_ptr, php_url *phpurl, int use_ssl, in
        zval **proxy_host, **proxy_port;
        char *host;
 #ifdef ZEND_ENGINE_2
+       php_stream_context *context = NULL;
        char *name;
        long namelen;
 #endif
@@ -107,12 +108,26 @@ static php_stream* http_connect(zval* this_ptr, php_url *phpurl, int use_ssl, in
 
 #ifdef ZEND_ENGINE_2
        namelen = spprintf(&name, 0, "%s://%s:%d", (use_ssl && !*use_proxy)? "ssl" : "tcp", host, port);
+       if (use_ssl) {
+               zval **tmp;
+
+               if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_local_cert", sizeof("_local_cert"), (void **) &tmp) == SUCCESS &&
+                   Z_TYPE_PP(tmp) == IS_STRING) {
+                       context = php_stream_context_alloc();
+                       php_stream_context_set_option(context, "ssl", "local_cert", *tmp);
+                       if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_passphrase", sizeof("_passphrase"), (void **) &tmp) == SUCCESS &&
+                           Z_TYPE_PP(tmp) == IS_STRING) {
+                               php_stream_context_set_option(context, "ssl", "passphrase", *tmp);
+                       }
+               }
+       }
        stream = php_stream_xport_create(name, namelen,
                ENFORCE_SAFE_MODE | REPORT_ERRORS,
                STREAM_XPORT_CLIENT | STREAM_XPORT_CONNECT,
                NULL /*persistent_id*/,
                NULL /*timeout*/,
-               NULL, NULL, NULL);
+               context, 
+               NULL, NULL);
        efree(name);
 #else
        stream = php_stream_sock_open_host(host, port, SOCK_STREAM, NULL, NULL);
index 873d926e65ffaae993a045754bc8b8c2652ae90b..2a3ad7006c9e0a90cc22aa012598d21655df30a8 100644 (file)
@@ -1967,6 +1967,14 @@ PHP_METHOD(SoapClient, SoapClient)
                                }
                        }
                }
+               if (zend_hash_find(ht, "local_cert", sizeof("local_cert"), (void**)&tmp) == SUCCESS &&
+                   Z_TYPE_PP(tmp) == IS_STRING) {
+                       add_property_stringl(this_ptr, "_local_cert", Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), 1);
+                       if (zend_hash_find(ht, "passphrase", sizeof("passphrase"), (void**)&tmp) == SUCCESS &&
+                           Z_TYPE_PP(tmp) == IS_STRING) {
+                               add_property_stringl(this_ptr, "_passphrase", Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp), 1);
+                       }
+               }
                if (zend_hash_find(ht, "trace", sizeof("trace"), (void**)&tmp) == SUCCESS &&
                    (Z_TYPE_PP(tmp) == IS_BOOL || Z_TYPE_PP(tmp) == IS_LONG) &&
                                Z_LVAL_PP(tmp) == 1) {