diff options
author | Pierre Joye <pajoye@php.net> | 2010-01-05 01:12:18 +0000 |
---|---|---|
committer | Pierre Joye <pajoye@php.net> | 2010-01-05 01:12:18 +0000 |
commit | c5c6bc8250bf3c20ac42ce32b324d00a1d2a5360 (patch) | |
tree | b005a163ba95bd75b965d9518012cfaa66b088a1 /ext/imap/php_imap.c | |
parent | 8f4337f2551e28d98290752e9ca99fc7f87d93b5 (diff) | |
download | php-git-c5c6bc8250bf3c20ac42ce32b324d00a1d2a5360.tar.gz |
- [doc] add support for DISABLE_AUTHENTICATOR in imap_open (fix #33500)
Diffstat (limited to 'ext/imap/php_imap.c')
-rw-r--r-- | ext/imap/php_imap.c | 46 |
1 files changed, 44 insertions, 2 deletions
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)); } |