diff --git a/php_pdo_snowflake_int.h b/php_pdo_snowflake_int.h index 249b334a..4003417c 100644 --- a/php_pdo_snowflake_int.h +++ b/php_pdo_snowflake_int.h @@ -92,5 +92,7 @@ enum { #define PDO_SNOWFLAKE_CONN_ATTR_AUTHENTICATOR_IDX 12 #define PDO_SNOWFLAKE_CONN_ATTR_PRIV_KEY_FILE_IDX 13 #define PDO_SNOWFLAKE_CONN_ATTR_PRIV_KEY_FILE_PWD_IDX 14 +#define PDO_SNOWFLAKE_CONN_ATTR_PROXY_IDX 15 +#define PDO_SNOWFLAKE_CONN_ATTR_NO_PROXY_IDX 16 #endif /* PHP_PDO_SNOWFLAKE_INT_H */ diff --git a/snowflake_driver.c b/snowflake_driver.c index 392ed819..000eec59 100644 --- a/snowflake_driver.c +++ b/snowflake_driver.c @@ -556,7 +556,9 @@ pdo_snowflake_handle_factory(pdo_dbh_t *dbh, zval *driver_options) /* {{{ */ {"application", NULL, 0}, {"authenticator", NULL, 0}, {"priv_key_file", NULL, 0}, - {"priv_key_file_pwd", NULL, 0} + {"priv_key_file_pwd", NULL, 0}, + {"proxy", NULL, 0}, + {"no_proxy", NULL, 0} }; // Parse the input data parameters @@ -726,6 +728,24 @@ pdo_snowflake_handle_factory(pdo_dbh_t *dbh, zval *driver_options) /* {{{ */ PDO_LOG_DBG( "priv_key_file_pwd: %s", vars[PDO_SNOWFLAKE_CONN_ATTR_PRIV_KEY_FILE_PWD_IDX].optval); + if (vars[PDO_SNOWFLAKE_CONN_ATTR_PROXY_IDX].optval != NULL) { + /* proxy */ + snowflake_set_attribute( + H->server, SF_CON_PROXY, + vars[PDO_SNOWFLAKE_CONN_ATTR_PROXY_IDX].optval); + } + PDO_LOG_DBG( + "proxy: %s", "******"); + + if (vars[PDO_SNOWFLAKE_CONN_ATTR_NO_PROXY_IDX].optval != NULL) { + /* priv_key_file_pwd */ + snowflake_set_attribute( + H->server, SF_CON_NO_PROXY, + vars[PDO_SNOWFLAKE_CONN_ATTR_NO_PROXY_IDX].optval); + } + PDO_LOG_DBG( + "no_proxy: %s", vars[PDO_SNOWFLAKE_CONN_ATTR_NO_PROXY_IDX].optval); + if (snowflake_connect(H->server) > 0) { pdo_snowflake_error(dbh); goto cleanup; diff --git a/tests/proxy.phpt b/tests/proxy.phpt new file mode 100644 index 00000000..72e5bd5d --- /dev/null +++ b/tests/proxy.phpt @@ -0,0 +1,39 @@ +--TEST-- +pdo_snowflake - proxy +--INI-- +pdo_snowflake.cacert=libsnowflakeclient/cacert.pem +--FILE-- + +===DONE=== + +--EXPECT-- +OK +===DONE=== +