From 23441ef90c19e70bd89645e2cee3c3944d5e7dff Mon Sep 17 00:00:00 2001 From: =?utf8?q?Johannes=20Schl=C3=BCter?= Date: Wed, 27 Jan 2010 17:36:46 +0000 Subject: [PATCH] merge r293126 - [doc] add support for DISABLE_AUTHENTICATOR in imap_open (fix #33500) (pajoye) --- NEWS | 1 + ext/imap/php_imap.c | 46 +++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index d15b9dce26..bbe1ca6b86 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,7 @@ PHP NEWS ?? ??? 20??, PHP 5.3.2 RC 2 - Upgraded bundled libmagic to version 5.03. (Mikko) +- Added support for DISABLE_AUTHENTICATOR for imap_open. (Pierre) - Added missing host validation for HTTP urls inside FILTER_VALIDATE_URL. (Ilia) - Added stream_resolve_include_path(). (Mikko) diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c index 7fc492340f..aaf1c96b64 100644 --- a/ext/imap/php_imap.c +++ b/ext/imap/php_imap.c @@ -105,6 +105,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_imap_open, 0, 0, 3) ZEND_ARG_INFO(0, password) ZEND_ARG_INFO(0, options) ZEND_ARG_INFO(0, n_retries) + ZEND_ARG_INFO(0, params) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_imap_reopen, 0, 0, 2) @@ -1148,10 +1149,11 @@ static void php_imap_do_open(INTERNAL_FUNCTION_PARAMETERS, int persistent) long retries = 0, flags = NIL, cl_flags = NIL; MAILSTREAM *imap_stream; pils *imap_le_struct; + zval *params = NULL; int argc = ZEND_NUM_ARGS(); - if (zend_parse_parameters(argc TSRMLS_CC, "sss|ll", &mailbox, &mailbox_len, &user, &user_len, - &passwd, &passwd_len, &flags, &retries) == FAILURE) { + if (zend_parse_parameters(argc TSRMLS_CC, "sss|lla", &mailbox, &mailbox_len, &user, &user_len, + &passwd, &passwd_len, &flags, &retries, ¶ms) == FAILURE) { return; } @@ -1165,6 +1167,46 @@ static void php_imap_do_open(INTERNAL_FUNCTION_PARAMETERS, int persistent) } } + if (params) { + zval **disabled_auth_method; + + if (zend_hash_find(HASH_OF(params), "DISABLE_AUTHENTICATOR", sizeof("DISABLE_AUTHENTICATOR"), (void **)&disabled_auth_method) == SUCCESS) { + switch (Z_TYPE_PP(disabled_auth_method)) { + case IS_STRING: + if (Z_STRLEN_PP(disabled_auth_method) > 1) { + mail_parameters (NIL, DISABLE_AUTHENTICATOR, (void *)Z_STRVAL_PP(disabled_auth_method)); + } + break; + case IS_ARRAY: + { + zval **z_auth_method; + int i; + int nelems = zend_hash_num_elements(Z_ARRVAL_PP(disabled_auth_method)); + + if (nelems == 0 ) { + break; + } + for (i = 0; i < nelems; i++) { + if (zend_hash_index_find(Z_ARRVAL_PP(disabled_auth_method), i, (void **) &z_auth_method) == SUCCESS) { + if (Z_TYPE_PP(z_auth_method) == IS_STRING) { + if (Z_STRLEN_PP(z_auth_method) > 1) { + mail_parameters (NIL, DISABLE_AUTHENTICATOR, (void *)Z_STRVAL_PP(disabled_auth_method)); + } + } else { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid argument, expect string or array of strings"); + } + } + } + } + break; + case IS_LONG: + default: + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid argument, expect string or array of strings"); + break; + } + } + } + if (IMAPG(imap_user)) { efree(IMAPG(imap_user)); } -- 2.40.0