[packages/php-pecl-sasl] up to 0.2.0 via branch.diff; builds on php 5.5

glen glen at pld-linux.org
Wed Jun 11 09:54:41 CEST 2014


commit 3230199c0d8ad953969b6816b5e0d45f32b4e81b
Author: Elan Ruusamäe <glen at delfi.ee>
Date:   Wed Jun 11 10:53:01 2014 +0300

    up to 0.2.0 via branch.diff; builds on php 5.5

 branch.diff                   | 1182 +++++++++++++++++++++++++++++++++++++++++
 branch.sh                     |   25 +
 php-pecl-sasl-lib64_fix.patch |   13 +-
 php-pecl-sasl-lib_fix.patch   |   11 -
 php-pecl-sasl.spec            |   20 +-
 prepatch.patch                |   19 +
 6 files changed, 1242 insertions(+), 28 deletions(-)
---
diff --git a/php-pecl-sasl.spec b/php-pecl-sasl.spec
index 8625e73..90fb483 100644
--- a/php-pecl-sasl.spec
+++ b/php-pecl-sasl.spec
@@ -4,13 +4,14 @@
 Summary:	%{modname} - Cyrus SASL extension
 Summary(pl.UTF-8):	%{modname} - rozszerzenie Cyrus SASL
 Name:		%{php_name}-pecl-%{modname}
-Version:	0.1.0
-Release:	15
+Version:	0.2.0
+Release:	1
 License:	PHP 3.01
 Group:		Development/Languages/PHP
-Source0:	http://pecl.php.net/get/%{modname}-%{version}.tgz
+Source0:	http://pecl.php.net/get/%{modname}-0.1.0.tgz
 # Source0-md5:	8431731cc8a7921a2922af23a57a572f
-Patch0:		php-pecl-%{modname}-lib_fix.patch
+Patch99:	prepatch.patch
+Patch100:	branch.diff
 Patch1:		php-pecl-%{modname}-lib64_fix.patch
 URL:		http://pecl.php.net/package/sasl/
 BuildRequires:	%{php_name}-devel >= 3:5.0.4
@@ -48,12 +49,11 @@ To rozszerzenie ma w PECL status: %{status}.
 
 %prep
 %setup -qc
-mv %{modname}-%{version}/* .
-# Ugly, could be done somehow prettier (one combined patch?)
+mv %{modname}-*/* .
+%patch99 -p1
+%patch100 -p0
 %if "%{_lib}" == "lib64"
-%patch1 -p2
-%else
-%patch0 -p2
+%patch1 -p1
 %endif
 
 %build
@@ -83,6 +83,6 @@ fi
 
 %files
 %defattr(644,root,root,755)
-%doc docs/TODO
+%doc docs/TODO docs/guide.txt
 %config(noreplace) %verify(not md5 mtime size) %{php_sysconfdir}/conf.d/%{modname}.ini
 %attr(755,root,root) %{php_extensiondir}/%{modname}.so
diff --git a/branch.diff b/branch.diff
new file mode 100644
index 0000000..526f28e
--- /dev/null
+++ b/branch.diff
@@ -0,0 +1,1182 @@
+Index: Makefile.in
+===================================================================
+--- Makefile.in	(.../tags/RELEASE_0_1_0)
++++ Makefile.in	(.../trunk)
+@@ -1,8 +0,0 @@
+-# $Id$
+-
+-LTLIBRARY_NAME        = libsasl.la
+-LTLIBRARY_SOURCES     = sasl.c
+-LTLIBRARY_SHARED_NAME = sasl.la
+-LTLIBRARY_SHARED_LIBADD  = $(SASL_SHARED_LIBADD)
+-
+-include $(top_srcdir)/build/dynlib.mk
+Index: sasl.c
+===================================================================
+--- sasl.c	(.../tags/RELEASE_0_1_0)
++++ sasl.c	(.../trunk)
+@@ -41,13 +41,493 @@
+ #define le_conn_name "SASL Connection Context"
+ static int le_conn;
+ 
+-/* {{{ sasl_callbacks[]
+-   Global callbacks.  These have no per-session context. */
+-static sasl_callback_t sasl_callbacks[] = {
+-	{ SASL_CB_LIST_END,	0,	0 }
+-};
+-/* }}}*/
++PHPAPI ZEND_DECLARE_MODULE_GLOBALS(sasl);
+ 
++/* SASL Callback Functions */
++/* {{{ php_sasl_cb_getopt
++ */
++static int php_sasl_cb_getopt(void *context, const char *plugin_name,
++							  const char *option, const char **result,
++							  unsigned *len)
++{
++	zval *function = context;
++	zval *args[2];
++	zval *retval;
++	int ret = SASL_FAIL;
++
++	MAKE_STD_ZVAL(args[0]);
++	MAKE_STD_ZVAL(args[1]);
++	MAKE_STD_ZVAL(retval);
++
++	ZVAL_STRING(args[0], (plugin_name) ? (char *)plugin_name : "", 1);
++	ZVAL_STRING(args[1], (char *)option, 1);
++
++	if (call_user_function(CG(function_table), NULL, function, retval,
++					   	   2, args TSRMLS_CC) == SUCCESS) {
++		ret = Z_LVAL_P(retval);
++		*result = estrdup(Z_STRVAL_P(retval));
++		*len = Z_STRLEN_P(retval);
++	}
++
++	zval_ptr_dtor(&args[0]);
++	zval_ptr_dtor(&args[1]);
++	zval_ptr_dtor(&retval);
++
++	return ret;
++}
++/* }}} */
++/* {{{ php_sasl_cb_log
++ */
++static int php_sasl_cb_log(void *context, int level, const char *message)
++{
++	zval *function = context;
++	zval *args[2];
++	zval *retval;
++	int ret = SASL_FAIL;
++
++	MAKE_STD_ZVAL(args[0]);
++	MAKE_STD_ZVAL(args[1]);
++	MAKE_STD_ZVAL(retval);
++
++	ZVAL_LONG(args[0], level);
++	ZVAL_STRING(args[1], (char *)message, 1);
++
++	if (call_user_function(CG(function_table), NULL, function, retval,
++					   	   2, args TSRMLS_CC) == SUCCESS) {
++		ret = Z_LVAL_P(retval);
++	}
++
++	zval_ptr_dtor(&args[0]);
++	zval_ptr_dtor(&args[1]);
++	zval_ptr_dtor(&retval);
++
++	return ret;
++}
++/* }}} */
++/* {{{ php_sasl_cb_getpath
++ */
++static int php_sasl_cb_getpath(void *context, const char **path)
++{
++	zval *function = context;
++	zval *retval;
++	int ret = SASL_FAIL;
++
++	MAKE_STD_ZVAL(retval);
++
++	if (call_user_function(CG(function_table), NULL, function, retval,
++						   0, NULL TSRMLS_CC) == SUCCESS) {
++		ret = Z_LVAL_P(retval);
++		*path = estrdup(Z_STRVAL_P(retval));
++	}
++
++	zval_ptr_dtor(&retval);
++
++	return ret;
++}
++/* }}} */
++/* {{{ php_sasl_cb_verifyfile
++ */
++static int php_sasl_cb_verifyfile(void *context, const char *file,
++								  sasl_verify_type_t type)
++{
++	zval *function = context;
++	zval *args[2];
++	zval *retval;
++	int ret = SASL_FAIL;
++
++	MAKE_STD_ZVAL(args[0]);
++	MAKE_STD_ZVAL(args[1]);
++	MAKE_STD_ZVAL(retval);
++
++	ZVAL_STRING(args[0], (char *)file, 1);
++	ZVAL_LONG(args[1], type);
++
++	if (call_user_function(CG(function_table), NULL, function, retval,
++					   	   2, args TSRMLS_CC) == SUCCESS) {
++		ret = Z_LVAL_P(retval);
++	}
++
++	zval_ptr_dtor(&args[0]);
++	zval_ptr_dtor(&args[1]);
++	zval_ptr_dtor(&retval);
++
++	return ret;
++}
++/* }}} */
++/* {{{ php_sasl_cb_getconfpath
++ */
++static int php_sasl_cb_getconfpath(void *context, char **path)
++{
++	zval *function = context;
++	zval *retval;
++	int ret = SASL_FAIL;
++
++	MAKE_STD_ZVAL(retval);
++
++	if (call_user_function(CG(function_table), NULL, function, retval,
++						   0, NULL TSRMLS_CC) == SUCCESS) {
++		ret = Z_LVAL_P(retval);
++		*path = estrdup(Z_STRVAL_P(retval));
++	}
++
++	zval_ptr_dtor(&retval);
++
++	return ret;
++}
++/* }}} */
++/* {{{ php_sasl_cb_getsimple
++ */
++static int php_sasl_cb_getsimple(void *context, int id, const char **result,
++								 unsigned *len)
++{
++	zval *function = context;
++	zval *args[1];
++	zval *retval;
++
++	MAKE_STD_ZVAL(args[0]);
++	MAKE_STD_ZVAL(retval);
++
++	ZVAL_LONG(args[0], id);
++
++	if (call_user_function(CG(function_table), NULL, function, retval,
++						   1, args TSRMLS_CC) == SUCCESS) {
++		*result = estrdup(Z_STRVAL_P(retval));
++		*len = Z_STRLEN_P(retval);
++	}
++
++	zval_ptr_dtor(&args[0]);
++	zval_ptr_dtor(&retval);
++
++	return SASL_OK;
++}
++/* }}} */
++/* {{{ php_sasl_cb_getsecret
++ */
++static int php_sasl_cb_getsecret(sasl_conn_t *conn, void *context, int id,
++								 sasl_secret_t **psecret)
++{
++	zval *function = context;
++	zval *args[2];
++	zval *retval;
++
++	MAKE_STD_ZVAL(args[0]);
++	MAKE_STD_ZVAL(args[1]);
++	MAKE_STD_ZVAL(retval);
++
++	ZVAL_NULL(args[0]);
++	//ZVAL_RESOURCE(args[0], r);
++	ZVAL_LONG(args[1], id);
++
++	if (call_user_function(CG(function_table), NULL, function, retval,
++						   2, args TSRMLS_CC) == SUCCESS) {
++		int len = Z_STRLEN_P(retval);
++		*psecret = (sasl_secret_t *)emalloc(sizeof(sasl_secret_t) +
++											(len * sizeof(char)));
++		if (*psecret) {
++			(*psecret)->len = len;
++			memcpy((*psecret)->data, Z_STRVAL_P(retval), len);
++		}
++	}
++
++	zval_ptr_dtor(&args[0]);
++	zval_ptr_dtor(&args[1]);
++	zval_ptr_dtor(&retval);
++
++	return SASL_OK;
++}
++/* }}} */
++/* {{{ php_sasl_cb_chalprompt
++ */
++static int php_sasl_cb_chalprompt(void *context, int id, const char *challenge,
++								  const char *prompt, const char *defresult,
++								  const char **result, unsigned *len)
++{
++	zval *function = context;
++	zval *args[4];
++	zval *retval;
++
++	MAKE_STD_ZVAL(args[0]);
++	MAKE_STD_ZVAL(args[1]);
++	MAKE_STD_ZVAL(args[2]);
++	MAKE_STD_ZVAL(args[3]);
++	MAKE_STD_ZVAL(retval);
++
++	ZVAL_LONG(args[0], id);
++	ZVAL_STRING(args[1], (char *)challenge, 1);
++	ZVAL_STRING(args[2], (char *)prompt, 1);
++	ZVAL_STRING(args[3], (char *)defresult, 1);
++
++	if (call_user_function(CG(function_table), NULL, function, retval,
++						   4, args TSRMLS_CC) == SUCCESS) {
++		*result = estrdup(Z_STRVAL_P(retval));
++		*len = Z_STRLEN_P(retval);
++	}
++
++	zval_ptr_dtor(&args[0]);
++	zval_ptr_dtor(&args[1]);
++	zval_ptr_dtor(&args[2]);
++	zval_ptr_dtor(&args[3]);
++	zval_ptr_dtor(&retval);
++
++	return SASL_OK;
++}
++/* }}} */
++/* {{{ php_sasl_cb_getrealm
++ */
++static int php_sasl_cb_getrealm(void *context, int id,
++								const char **availrealms, const char **result)
++{
++	zval *function = context;
++	zval *args[2];
++	zval *retval;
++
++	MAKE_STD_ZVAL(args[0]);
++	MAKE_STD_ZVAL(args[1]);
++	MAKE_STD_ZVAL(retval);
++
++	ZVAL_LONG(args[0], id);
++	ZVAL_NULL(args[1]); // TODO: Make an array of available realms
++
++	if (call_user_function(CG(function_table), NULL, function, retval,
++						   2, args TSRMLS_CC) == SUCCESS) {
++		*result = estrdup(Z_STRVAL_P(retval));
++	}
++
++	zval_ptr_dtor(&args[0]);
++	zval_ptr_dtor(&args[1]);
++	zval_ptr_dtor(&retval);
++
++	return SASL_OK;
++}
++/* }}} */
++/* {{{ php_sasl_cb_authorize
++ */
++static int php_sasl_cb_authorize(sasl_conn_t *conn, void *context,
++								 const char *requested_user, unsigned rlen,
++								 const char *auth_identity, unsigned alen,
++								 const char *def_realm, unsigned urlen,
++								 struct propctx *propctx)
++{
++	zval *function = context;
++	zval *args[2];
++	zval *retval;
++	int ret = SASL_NOAUTHZ;
++
++#if 0
++	MAKE_STD_ZVAL(args[0]);
++	MAKE_STD_ZVAL(args[1]);
++	MAKE_STD_ZVAL(retval);
++
++	ZVAL_LONG(args[0], id);
++	ZVAL_NULL(args[1]); // TODO: Make an array of available realms
++
++	if (call_user_function(CG(function_table), NULL, function, retval,
++						   2, args TSRMLS_CC) == SUCCESS) {
++		*result = estrdup(Z_STRVAL_P(retval));
++	}
++
++	zval_ptr_dtor(&args[0]);
++	zval_ptr_dtor(&args[1]);
++	zval_ptr_dtor(&retval);
++#endif
++
++	return ret;
++}
++/* }}} */
++/* {{{ php_sasl_cb_userdb_checkpass
++ */
++static int php_sasl_cb_userdb_checkpass(sasl_conn_t *conn, void *context,
++										const char *user, const char *pass,
++										unsigned passlen,
++										struct propctx *propctx)
++{
++	zval *function = context;
++	zval *args[2];
++	zval *retval;
++	int ret = SASL_FAIL;
++
++#if 0
++	MAKE_STD_ZVAL(args[0]);
++	MAKE_STD_ZVAL(args[1]);
++	MAKE_STD_ZVAL(retval);
++
++	ZVAL_LONG(args[0], id);
++	ZVAL_NULL(args[1]); // TODO: Make an array of available realms
++
++	if (call_user_function(CG(function_table), NULL, function, retval,
++						   2, args TSRMLS_CC) == SUCCESS) {
++		*result = estrdup(Z_STRVAL_P(retval));
++	}
++
++	zval_ptr_dtor(&args[0]);
++	zval_ptr_dtor(&args[1]);
++	zval_ptr_dtor(&retval);
++#endif
++
++	return ret;
++}
++/* }}} */
++/* {{{ php_sasl_cb_userdb_setpass
++ */
++static int php_sasl_cb_userdb_setpass(sasl_conn_t *conn, void *context,
++									  const char *user, const char *pass,
++									  unsigned passlen,
++									  struct propctx *propctx, unsigned flags)
++{
++	zval *function = context;
++	zval *args[2];
++	zval *retval;
++	int ret = SASL_FAIL;
++
++#if 0
++	MAKE_STD_ZVAL(args[0]);
++	MAKE_STD_ZVAL(args[1]);
++	MAKE_STD_ZVAL(retval);
++
++	ZVAL_LONG(args[0], id);
++	ZVAL_NULL(args[1]); // TODO: Make an array of available realms
++
++	if (call_user_function(CG(function_table), NULL, function, retval,
++						   2, args TSRMLS_CC) == SUCCESS) {
++		*result = estrdup(Z_STRVAL_P(retval));
++	}
++
++	zval_ptr_dtor(&args[0]);
++	zval_ptr_dtor(&args[1]);
++	zval_ptr_dtor(&retval);
++#endif
++
++	return ret;
++}
++/* }}} */
++/* {{{ php_sasl_cb_canon_user
++ */
++static int php_sasl_cb_canon_user(sasl_conn_t *conn, void *context,
++								  const char *in, unsigned inlen,
++								  unsigned flags, const char *user_realm,
++								  char *out, unsigned out_max,
++								  unsigned *out_len)
++{
++	zval *function = context;
++	zval *args[2];
++	zval *retval;
++	int ret = SASL_FAIL;
++
++#if 0
++	MAKE_STD_ZVAL(args[0]);
++	MAKE_STD_ZVAL(args[1]);
++	MAKE_STD_ZVAL(retval);
++
++	ZVAL_LONG(args[0], id);
++	ZVAL_NULL(args[1]); // TODO: Make an array of available realms
++
++	if (call_user_function(CG(function_table), NULL, function, retval,
++						   2, args TSRMLS_CC) == SUCCESS) {
++		*result = estrdup(Z_STRVAL_P(retval));
++	}
++
++	zval_ptr_dtor(&args[0]);
++	zval_ptr_dtor(&args[1]);
++	zval_ptr_dtor(&retval);
++#endif
++
++	return ret;
++}
++/* }}} */
++
++/* {{{ sasl_callback_function_t php_sasl_get_callback_function(unsigned long id)
++ */
++typedef int (*sasl_callback_function_t)();
++static sasl_callback_function_t php_sasl_get_callback_function(unsigned long id)
++{
++	switch (id) {
++	case SASL_CB_GETOPT:					return php_sasl_cb_getopt;
++	case SASL_CB_LOG:						return php_sasl_cb_log;
++	case SASL_CB_GETPATH:					return php_sasl_cb_getpath;
++	case SASL_CB_VERIFYFILE:				return php_sasl_cb_verifyfile;
++	case SASL_CB_GETCONFPATH:				return php_sasl_cb_getconfpath;
++	case SASL_CB_USER:						return php_sasl_cb_getsimple;
++	case SASL_CB_AUTHNAME:					return php_sasl_cb_getsimple;
++	case SASL_CB_LANGUAGE:					return php_sasl_cb_getsimple;
++	case SASL_CB_CNONCE:					return php_sasl_cb_getsimple;
++	case SASL_CB_PASS:						return php_sasl_cb_getsecret;
++	case SASL_CB_ECHOPROMPT:				return php_sasl_cb_chalprompt;
++	case SASL_CB_NOECHOPROMPT:				return php_sasl_cb_chalprompt;
++	case SASL_CB_GETREALM:					return php_sasl_cb_getrealm;
++	case SASL_CB_PROXY_POLICY:				return php_sasl_cb_authorize;
++	case SASL_CB_SERVER_USERDB_CHECKPASS:	return php_sasl_cb_userdb_checkpass;
++	case SASL_CB_SERVER_USERDB_SETPASS:		return php_sasl_cb_userdb_setpass;
++	case SASL_CB_CANON_USER:				return php_sasl_cb_canon_user;
++	}
++
++	return NULL;
++}
++/* }}} */
++/* {{{ php_sasl_create_callbacks(HashTable *ht)
++ */
++static int php_sasl_create_callbacks(HashTable *ht, sasl_callback_t *callbacks)
++{
++	int n = 0;
++	zval **entry;
++	char *string_key;
++	long num_key;
++
++	/*
++	 * Start by counting the number of legitimate callbacks that exist in
++	 * the array.  This allows us to appropriately size our callback array.
++	 */
++	zend_hash_internal_pointer_reset(ht);
++	while (zend_hash_get_current_data(ht, (void **)&entry) == SUCCESS) {
++		switch (zend_hash_get_current_key(ht, &string_key, &num_key, 0)) {
++			case HASH_KEY_IS_LONG:
++				if (php_sasl_get_callback_function(num_key)) {
++					n++;
++				}
++				break;
++		}
++		zend_hash_move_forward(ht);
++	}
++
++	/*
++	 * Now that we know how many callbacks we have, allocate the array.  We
++	 * include an additional entry for the final SASL_CB_LIST_END sentinel.
++	 */
++	callbacks = (sasl_callback_t *)emalloc(sizeof(sasl_callback_t) * (n + 1));
++
++	if (callbacks) {
++		/* Assign the sentinel to the last entry in the callback array. */
++		callbacks[n].id = SASL_CB_LIST_END;
++
++		/*
++		 * Now we iterate through the array again, except this time we will
++		 * actually create the callback entries.
++		 */
++		n = 0;
++
++		zend_hash_internal_pointer_reset(ht);
++		while (zend_hash_get_current_data(ht, (void **)&entry) == SUCCESS) {
++			sasl_callback_t *cb = &callbacks[n];
++
++			switch (zend_hash_get_current_key(ht, &string_key, &num_key, 0)) {
++				case HASH_KEY_IS_LONG:
++					{
++						cb->proc = php_sasl_get_callback_function(num_key);
++						if (cb->proc) {
++							cb->id = num_key;
++							cb->context = *entry;
++							n++;
++						}
++					}
++					break;
++			}
++			zend_hash_move_forward(ht);
++		}
++	}
++
++	return n;
++}
++/* }}} */
++
+ /* {{{ php_sasl_error(int level, int reason)
+  */
+ static void php_sasl_error(int level, int code TSRMLS_DC)
+@@ -56,6 +536,29 @@
+ 					 "%s", sasl_errstring(code, NULL, NULL));
+ }
+ /* }}} */
++/* {{{ php_sasl_rinit_globals(TSRMLS_D)
++ */
++static void php_sasl_rinit_globals(TSRMLS_D)
++{
++	SASLG(client_callbacks) = NULL;
++	SASLG(server_callbacks) = NULL;
++}
++/* }}} */
++/* {{{ php_sasl_rshutdown_globals(TSRMLS_D)
++ */
++static void php_sasl_rshutdown_globals(TSRMLS_D)
++{
++	if (SASLG(client_callbacks)) {
++		efree(SASLG(client_callbacks));
++		SASLG(client_callbacks) = NULL;
++	}
++
++	if (SASLG(server_callbacks)) {
++		efree(SASLG(server_callbacks));
++		SASLG(server_callbacks) = NULL;
++	}
++}
++/* }}} */
+ /* {{{ php_sasl_destroy_conn(zend_rsrc_list_entry *rsrc TSRMLS_DC)
+  */
+ static void php_sasl_destroy_conn(zend_rsrc_list_entry *rsrc TSRMLS_DC)
+@@ -67,29 +570,30 @@
+ 
+ /* {{{ sasl_functions[]
+  */
+-function_entry sasl_functions[] = {
++zend_function_entry sasl_functions[] = {
+ 	/* Common Functions */
+-	PHP_FE(sasl_version,		NULL)
+-	PHP_FE(sasl_errstring,		NULL)
++	PHP_FE(sasl_version,			NULL)
++	PHP_FE(sasl_errstring,			NULL)
+ #if SASL_VERSION_MAJOR >= 2
+-	PHP_FE(sasl_errdetail,		NULL)
++	PHP_FE(sasl_errdetail,			NULL)
++	PHP_FE(sasl_seterror,			NULL)
+ #endif
+-	PHP_FE(sasl_encode,			NULL)
+-	PHP_FE(sasl_decode,			NULL)
++	PHP_FE(sasl_encode,				NULL)
++	PHP_FE(sasl_decode,				NULL)
+ 
+ 	/* Client Functions */
+-	PHP_FE(sasl_client_init,	NULL)
+-	PHP_FE(sasl_client_new,		NULL)
+-	PHP_FE(sasl_client_start,	NULL)
+-	PHP_FE(sasl_client_step,	NULL)
++	PHP_FE(sasl_client_init,		NULL)
++	PHP_FE(sasl_client_new,			NULL)
++	PHP_FE(sasl_client_start,		NULL)
++	PHP_FE(sasl_client_step,		NULL)
+ 
+ 	/* Server Functions */
+-	PHP_FE(sasl_server_init,	NULL)
+-	PHP_FE(sasl_server_new,		NULL)
+-	PHP_FE(sasl_server_start,	NULL)
+-	PHP_FE(sasl_server_step,	NULL)
+-	PHP_FE(sasl_listmech,		NULL)
+-	PHP_FE(sasl_checkpass,		NULL)
++	PHP_FE(sasl_server_init,		NULL)
++	PHP_FE(sasl_server_new,			NULL)
++	PHP_FE(sasl_server_start,		NULL)
++	PHP_FE(sasl_server_step,		NULL)
++	PHP_FE(sasl_listmech,			NULL)
++	PHP_FE(sasl_checkpass,			NULL)
+ 
+ 	{NULL, NULL, NULL}
+ };
+@@ -102,10 +606,10 @@
+ 	sasl_functions,
+ 	PHP_MINIT(sasl),
+ 	PHP_MSHUTDOWN(sasl),
+-	NULL,
+-	NULL,
++	PHP_RINIT(sasl),
++	PHP_RSHUTDOWN(sasl),
+ 	PHP_MINFO(sasl),
+-	NO_VERSION_YET,
++	PHP_SASL_VERSION,
+ 	STANDARD_MODULE_PROPERTIES
+ };
+ 
+@@ -173,6 +677,31 @@
+ 	SASL_CONSTANT(SASL_SEC_MAXIMUM);
+ #endif
+ 
++	/* SASL callback identifiers */
++	SASL_CONSTANT(SASL_CB_GETOPT);
++	SASL_CONSTANT(SASL_CB_LOG);
++	SASL_CONSTANT(SASL_CB_GETPATH);
++	SASL_CONSTANT(SASL_CB_VERIFYFILE);
++	SASL_CONSTANT(SASL_CB_GETCONFPATH);
++	SASL_CONSTANT(SASL_CB_USER);
++	SASL_CONSTANT(SASL_CB_AUTHNAME);
++	SASL_CONSTANT(SASL_CB_LANGUAGE);
++	SASL_CONSTANT(SASL_CB_CNONCE);
++	SASL_CONSTANT(SASL_CB_PASS);
++	SASL_CONSTANT(SASL_CB_ECHOPROMPT);
++	SASL_CONSTANT(SASL_CB_NOECHOPROMPT);
++	SASL_CONSTANT(SASL_CB_GETREALM);
++	SASL_CONSTANT(SASL_CB_PROXY_POLICY);
++	SASL_CONSTANT(SASL_CB_SERVER_USERDB_CHECKPASS);
++	SASL_CONSTANT(SASL_CB_SERVER_USERDB_SETPASS);
++	SASL_CONSTANT(SASL_CB_CANON_USER);
++
++	/* SASL_CB_VERIFYFILE flags */
++	SASL_CONSTANT(SASL_VRFY_PLUGIN);
++	SASL_CONSTANT(SASL_VRFY_CONF);
++	SASL_CONSTANT(SASL_VRFY_PASSWD);
++	SASL_CONSTANT(SASL_VRFY_OTHER);
++
+ 	return SUCCESS;
+ }
+ /* }}} */
+@@ -185,6 +714,22 @@
+ 	return SUCCESS;
+ }
+ /* }}} */
++/* {{{ PHP_RINIT_FUNCTION
++ */
++PHP_RINIT_FUNCTION(sasl)
++{
++	php_sasl_rinit_globals(TSRMLS_C);
++	return SUCCESS;
++}
++/* }}} */
++/* {{{ PHP_RSHUTDOWN_FUNCTION
++ */
++PHP_RSHUTDOWN_FUNCTION(sasl)
++{
++	php_sasl_rshutdown_globals(TSRMLS_C);
++	return SUCCESS;
++}
++/* }}} */
+ /* {{{ PHP_MINFO_FUNCTION
+  */
+ PHP_MINFO_FUNCTION(sasl)
+@@ -214,7 +759,8 @@
+ 	php_info_print_table_row(2, "SASL Support", "enabled");
+ 	php_info_print_table_row(2, "SASL API Version", api_version);
+ 	php_info_print_table_row(2, "SASL Library Version", lib_version);
+-	php_info_print_table_row(2, "Extension Version", "$Revision$");
++	php_info_print_table_row(2, "Extension Version", PHP_SASL_VERSION);
++	php_info_print_table_row(2, "CVS Revision", "$Revision$");
+ 	php_info_print_table_end();
+ }
+ /* }}} */
+@@ -239,7 +785,7 @@
+ 	libsasl_step = libsasl_version & 0xFFFF;
+ #endif
+ 
+-	snprintf(version, 64, "%u.%u.%u (%s)",
++	snprintf(version, sizeof(version), "%u.%u.%u (%s)",
+ 			 libsasl_major, libsasl_minor, libsasl_step, sasl_implementation);
+ 
+ 	RETURN_STRING(version, 1);
+@@ -267,7 +813,7 @@
+    Returns the string translation of the given error code. */
+ PHP_FUNCTION(sasl_errstring)
+ {
+-	long code; 
++	long code;
+ 	char *languages = NULL;
+ 	int languages_len;
+ 
+@@ -279,6 +825,27 @@
+ 	RETURN_STRING((char *)sasl_errstring(code, languages, NULL), 1);
+ }
+ /* }}} */
++/* {{{ proto void sasl_seterror(resource conn, string message)
++   Set the error string which will be returned by sasl_errdetail. */
++#if SASL_VERSION_MAJOR >= 2
++PHP_FUNCTION(sasl_seterror)
++{
++	zval *rsrc;
++	sasl_conn_t *conn;
++	char *message;
++	int message_len;
++
++	if (zend_parse_parameters(2 TSRMLS_CC, "rs",
++							  &rsrc, &message, &message_len) == FAILURE) {
++		return;
++	}
++
++	ZEND_FETCH_RESOURCE(conn, sasl_conn_t *, &rsrc, -1, le_conn_name, le_conn);
++
++	sasl_seterror(conn, 0, message);
++}
++#endif
++/* }}} */
+ /* {{{ proto string sasl_encode(resource conn, string input)
+    Encodes a block of data for tranmission using the security layer. */
+ PHP_FUNCTION(sasl_encode)
+@@ -345,10 +912,25 @@
+    Initializes the SASL client drivers. */
+ PHP_FUNCTION(sasl_client_init)
+ {
+-	if (sasl_client_init(NULL) != SASL_OK) {
++	zval *array;
++
++	if (zend_parse_parameters(1 TSRMLS_CC, "a", &array) == FAILURE) {
++		return;
++	}
++
++	/*
++	 * Convert the supplied array into a set of callback functions.  We
++	 * don't bother spending any time validating its contents because the
++	 * sasl_client_init() function will do that for us (and return an error
++	 * if it encounters something that it doesn't like).
++	 */
++	php_sasl_create_callbacks(Z_ARRVAL_P(array), SASLG(client_callbacks));
++
++	if (sasl_client_init(SASLG(client_callbacks)) != SASL_OK) {
++		/* XXX: Free the callbacks? */
+ 		RETURN_FALSE;
+ 	}
+-	
++
+ 	RETURN_TRUE;
+ }
+ /* }}} */
+@@ -384,7 +966,7 @@
+ 	ZEND_REGISTER_RESOURCE(return_value, conn, le_conn);
+ }
+ /* }}} */
+-/* {{{ proto bool sasl_client_start(resource conn, string mechlist [, string &$output [, string &$mech]])
++/* {{{ proto int sasl_client_start(resource conn, string mechlist [, string &$output [, string &$mech]])
+    Starts an authentication session. */
+ PHP_FUNCTION(sasl_client_start)
+ {
+@@ -421,10 +1003,13 @@
+ 	r = sasl_client_start(conn, mechlist, NULL, &data, &data_len, &chosenmech);
+ #endif
+ 
+-	/* Print a warning and return false if we receive an unexpected result. */
++	/*
++	 * Issue a warning and return the error code if we receive an unexpected
++	 * result code.
++	 */
+ 	if ((r != SASL_OK) && (r != SASL_CONTINUE)) {
+ 		php_sasl_error(E_WARNING, r TSRMLS_CC);
+-		RETURN_FALSE;
++		RETURN_LONG(r);
+ 	}
+ 
+ 	/* Store the output in the "output" parameter (by reference). */
+@@ -434,7 +1019,7 @@
+ 	/* Store the chosen mechanism in the "mech" parameter (by reference). */
+ 	ZVAL_STRING(mech, (char *)chosenmech, 1);
+ 
+-	RETURN_TRUE;
++	RETURN_LONG(r);
+ }
+ /* }}} */
+ /* {{{ proto int sasl_client_step(resource conn, string input, string &$output)
+@@ -483,14 +1068,25 @@
+    Initializes the session and loads the shared authentication mechanisms. */
+ PHP_FUNCTION(sasl_server_init)
+ {
++	zval *array;
+ 	char *name;
+ 	int name_len;
+ 
+-	if (zend_parse_parameters(1 TSRMLS_CC, "s", &name, &name_len) == FAILURE) {
++	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "as",
++							  &array, &name, &name_len) == FAILURE) {
+ 		return;
+ 	}
+ 
+-	if (sasl_server_init(NULL, name) != SASL_OK) {
++	/*
++	 * Convert the supplied array into a set of callback functions.  We
++	 * don't bother spending any time validating its contents because the
++	 * sasl_client_init() function will do that for us (and return an error
++	 * if it encounters something that it doesn't like).
++	 */
++	php_sasl_create_callbacks(Z_ARRVAL_P(array), SASLG(server_callbacks));
++
++	if (sasl_server_init(SASLG(server_callbacks), name) != SASL_OK) {
++		/* XXX: Free the callbacks? */
+ 		RETURN_FALSE;
+ 	}
+ 
+
+Property changes on: sasl.c
+___________________________________________________________________
+Modified: cvs2svn:cvs-rev
+## -1 +1 ##
+-1.3
+\ No newline at end of property
++1.6
+\ No newline at end of property
+Index: config.m4
+===================================================================
+--- config.m4	(.../tags/RELEASE_0_1_0)
++++ config.m4	(.../trunk)
+@@ -6,7 +6,7 @@
+ 
+ if test "$PHP_SASL" != "no"; then
+   SEARCH_DIRS="/usr/local /usr"
+-  SEARCH_SUBS="sasl sasl1 sasl2"
++  SEARCH_SUBS="sasl2 sasl sasl1"
+   SEARCH_LIBS="sasl2 sasl"
+ 
+   if test -r $PHP_SASL; then
+@@ -19,6 +19,7 @@
+               SASL_DIR=$i
+               SASL_SUB=$j
+               AC_MSG_RESULT(found in $i)
++              break
+            fi
+         done
+      done
+@@ -31,9 +32,10 @@
+ 
+   AC_MSG_CHECKING(for SASL library in $SASL_DIR/lib)
+   for i in $SEARCH_LIBS; do
+-    if test -r $SASL_DIR/lib/lib$i.a; then
++    if test -r $SASL_DIR/lib/lib$i.a -o -r $SASL_DIR/lib/lib$i.$SHLIB_SUFFIX_NAME; then
+       SASL_LIB=$i
+       AC_MSG_RESULT(found -l$i)
++      break
+     fi
+   done
+ 
+
+Property changes on: config.m4
+___________________________________________________________________
+Modified: cvs2svn:cvs-rev
+## -1 +1 ##
+-1.2
+\ No newline at end of property
++1.4
+\ No newline at end of property
+Index: docs/guide.txt
+===================================================================
+--- docs/guide.txt	(.../tags/RELEASE_0_1_0)
++++ docs/guide.txt	(.../trunk)
+@@ -0,0 +1,50 @@
++============================
++ The SASL Extension for PHP
++============================
++
++--------------------
++ User Documentation
++--------------------
++
++:Author:        Jon Parise
++:Contact:       jon at php.net
++:Date:          $Date$
++:Revision:      $Revision$
++
++.. contents:: Contents
++.. section-numbering::
++
++Frequently Asked Questions
++--------------------------
++
++How does the SASL extension relate to the Auth_SASL PEAR package?
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++The `Auth_SASL`_ PEAR package provides native PHP implementations of many of
++the SASL authentication mechanisms.  In theory, those methods could call out
++to the SASL extension to compute those strings using the native C library, but
++I'm not sure the effort is worth it.  I wouldn't object to the idea if someone
++did the work, though.
++
++.. _Auth_SASL: http://pear.php.net/Auth_SASL
++
++Does saslauthd need to be running locally?
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++``saslauthd`` needs to be running on the same machine as the SASL client (the
++PHP process, in your case).  The libsasl library (that the SASL extension
++wraps) will communicate with the ``saslauthd`` process via a local Unix domain
++socket.
++
++Can saslauthd be used to authenticate against a remote server?
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++
++The ``saslauthd`` process loads the SASL authentication modules and performs
++the actual authentication.  This may involve contacting a foreign machine
++(such as a remote Kerberos or LDAP server).                     
++
++To complicate things even further, ``saslauthd`` can use `PAM`_ as its
++authentication backend, which opens up even more authentication possibilities
++(many of which may involve other hosts).
++
++.. _PAM: http://www.freebsd.org/doc/en_US.ISO8859-1/articles/pam/
++
++.. vim: tabstop=4 shiftwidth=4 softtabstop=4 expandtab textwidth=78 ft=rst:
+
+Property changes on: docs/guide.txt
+___________________________________________________________________
+Added: cvs2svn:cvs-rev
+## -0,0 +1 ##
++1.1
+\ No newline at end of property
+Added: svn:mime-type
+## -0,0 +1 ##
++text/plain
+\ No newline at end of property
+Added: svn:keywords
+## -0,0 +1 ##
++Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL
+\ No newline at end of property
+Added: svn:eol-style
+## -0,0 +1 ##
++native
+\ No newline at end of property
+Index: package.xml
+===================================================================
+Cannot display: file marked as a binary type.
+svn:mime-type = application/xml
+Index: package.xml
+===================================================================
+--- package.xml	(.../tags/RELEASE_0_1_0)
++++ package.xml	(.../trunk)
+
+Property changes on: package.xml
+___________________________________________________________________
+Modified: cvs2svn:cvs-rev
+## -1 +1 ##
+-1.3
+\ No newline at end of property
++1.5
+\ No newline at end of property
+Deleted: svn:mime-type
+## -1 +0,0 ##
+-application/xml
+\ No newline at end of property
+Index: php_sasl.h
+===================================================================
+--- php_sasl.h	(.../tags/RELEASE_0_1_0)
++++ php_sasl.h	(.../trunk)
+@@ -26,6 +26,8 @@
+ extern zend_module_entry sasl_module_entry;
+ #define phpext_sasl_ptr &sasl_module_entry
+ 
++#define PHP_SASL_VERSION "0.2.0-dev"
++
+ #ifdef PHP_WIN32
+ #define PHP_SASL_API __declspec(dllexport)
+ #else
+@@ -38,6 +40,8 @@
+ 
+ PHP_MINIT_FUNCTION(sasl);
+ PHP_MSHUTDOWN_FUNCTION(sasl);
++PHP_RINIT_FUNCTION(sasl);
++PHP_RSHUTDOWN_FUNCTION(sasl);
+ PHP_MINFO_FUNCTION(sasl);
+ 
+ /* Common Functions */
+@@ -45,6 +49,7 @@
+ PHP_FUNCTION(sasl_errstring);
+ #if SASL_VERSION_MAJOR >= 2
+ PHP_FUNCTION(sasl_errdetail);
++PHP_FUNCTION(sasl_seterror);
+ #endif
+ PHP_FUNCTION(sasl_encode);
+ PHP_FUNCTION(sasl_decode);
+@@ -63,12 +68,16 @@
+ PHP_FUNCTION(sasl_listmech);
+ PHP_FUNCTION(sasl_checkpass);
+ 
+-#if 0
++/* Global Variables */
++ZEND_BEGIN_MODULE_GLOBALS(sasl)
++	sasl_callback_t *client_callbacks;
++	sasl_callback_t *server_callbacks;
++ZEND_END_MODULE_GLOBALS(sasl)
++
+ #ifdef ZTS
+ #define SASLG(v) TSRMG(sasl_globals_id, zend_sasl_globals *, v)
+ #else
+ #define SASLG(v) (sasl_globals.v)
+ #endif
+-#endif
+ 
+ #endif /* PHP_SASL_H */
+
+Property changes on: php_sasl.h
+___________________________________________________________________
+Modified: cvs2svn:cvs-rev
+## -1 +1 ##
+-1.2
+\ No newline at end of property
++1.4
+\ No newline at end of property
+Index: package.php
+===================================================================
+--- package.php	(.../tags/RELEASE_0_1_0)
++++ package.php	(.../trunk)
+@@ -0,0 +1,67 @@
++<?php
++
++require_once 'PEAR/PackageFileManager2.php';
++PEAR::setErrorHandling(PEAR_ERROR_DIE);
++
++$desc = <<<EOT
++SASL is the Simple Authentication and Security Layer (as defined by RFC 2222).  It provides a system for adding plugable authenticating support to connection-based protocols.  The SASL Extension for PHP makes the Cyrus SASL library functions available to PHP. It aims to provide a 1-to-1 wrapper around the SASL library to provide the greatest amount of implementation flexibility.  To that end, it is possible to build both a client-side and server-side SASL implementation entirely in PHP.
++EOT;
++
++$version = '0.2.0';
++$notes = <<<EOT
++- The build system now searches for both static and shared versions of the SASL library. (Bug #13097)
++EOT;
++
++$package = new PEAR_PackageFileManager2();
++
++$result = $package->setOptions(array(
++    'filelistgenerator' => 'svn',
++    'changelogoldtonew' => false,
++    'simpleoutput'		=> true,
++    'baseinstalldir'    => '/',
++    'packagefile'       => 'package.xml',
++    'packagedirectory'  => '.',
++    'clearcontents'     => true,
++    'ignore'            => array('package.php', 'package.xml'),
++    'dir_roles'         => array(
++         'docs'                 => 'doc',
++         'tests'                => 'test',
++    ),
++));
++
++if (PEAR::isError($result)) {
++    echo $result->getMessage();
++    die();
++}
++
++$package->clearDeps();
++$package->setPackage('sasl');
++$package->setPackageType('extsrc');
++$package->setSummary('Cyrus SASL Extensions');
++$package->setDescription($desc);
++$package->setChannel('pecl.php.net');
++$package->setLicense('PHP License');
++$package->addMaintainer('lead', 'jon', 'Jon Parise', 'jon at php.net');
++
++$package->addRelease();
++$package->setProvidesExtension('sasl');
++$package->setAPIVersion('0.6.0');
++$package->setAPIStability('alpha');
++$package->setReleaseVersion($version);
++$package->setReleaseStability('alpha');
++$package->setNotes($notes);
++$package->setPhpDep('5.3.0');
++$package->setPearInstallerDep('1.4.3');
++
++$package->generateContents();
++
++if (isset($_SERVER['argv'][1]) && $_SERVER['argv'][1] == 'commit') {
++    $result = $package->writePackageFile();
++} else {
++    $result = $package->debugPackageFile();
++}
++
++if (PEAR::isError($result)) {
++    echo $result->getMessage();
++    die();
++}
+
+Property changes on: package.php
+___________________________________________________________________
+Added: cvs2svn:cvs-rev
+## -0,0 +1 ##
++1.3
+\ No newline at end of property
+Added: svn:keywords
+## -0,0 +1 ##
++Id Rev Revision Date LastChangedDate LastChangedRevision Author LastChangedBy HeadURL URL
+\ No newline at end of property
+Added: svn:eol-style
+## -0,0 +1 ##
++native
+\ No newline at end of property
+Index: tests/sasl_version.phpt
+===================================================================
+--- tests/sasl_version.phpt	(.../tags/RELEASE_0_1_0)
++++ tests/sasl_version.phpt	(.../trunk)
+@@ -4,11 +4,7 @@
+ <?php if (!extension_loaded("sasl")) die('skip'); ?>
+ --FILE--
+ <?php
++echo sasl_version();
+ 
+-$version = sasl_version();
+-if (strlen($version) > 0) {
+-	echo "OK";
+-}
+-
+---EXPECT--
+-OK
++--EXPECTREGEX--
++\d+\.\d+\.\d+ \(.*\)
+
+Property changes on: tests/sasl_version.phpt
+___________________________________________________________________
+Modified: cvs2svn:cvs-rev
+## -1 +1 ##
+-1.2
+\ No newline at end of property
++1.3
+\ No newline at end of property
+Index: tests
+===================================================================
+--- tests	(.../tags/RELEASE_0_1_0)
++++ tests	(.../trunk)
+
+Property changes on: tests
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,4 ##
++*.diff
++*.exp
++*.log
++*.out
+Index: .
+===================================================================
+--- .	(.../tags/RELEASE_0_1_0)
++++ .	(.../trunk)
+
+Property changes on: .
+___________________________________________________________________
+Added: svn:ignore
+## -0,0 +1,32 ##
++.deps
++Makefile
++*.lo
++*.la
++.libs
++libs.mk
++Makefile.fragments
++Makefile.global
++Makefile.objects
++autom4te.cache
++acinclude.m4
++aclocal.m4
++build
++config.cache
++config.guess
++config.h
++config.h.in
++config.log
++config.nice
++config.status
++config.sub
++configure
++configure.in
++install-sh
++libtool
++ltmain.sh
++missing
++mkinstalldirs
++modules
++scan_makefile_in.awk
++conftest*
++*.tgz
diff --git a/branch.sh b/branch.sh
new file mode 100755
index 0000000..8e01f1d
--- /dev/null
+++ b/branch.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+set -e
+pecl=sasl
+svn=http://svn.php.net/repository/pecl/$pecl
+tag=RELEASE_0_1_0
+out=branch.diff
+
+d=$-
+filter() {
+	set -$d
+	# remove revno's for smaller diffs
+	sed -e 's,^\([-+]\{3\} .*\)\t(revision [0-9]\+)$,\1,'
+}
+
+old=$svn/tags/$tag
+new=$svn/trunk
+echo >&2 "Running diff: $old -> $new"
+LC_ALL=C svn diff --old=$old --new=$new | filter > $out.tmp
+
+if cmp -s $out{,.tmp}; then
+	echo >&2 "No new diffs..."
+	rm -f $out.tmp
+	exit 0
+fi
+mv -f $out{.tmp,}
diff --git a/php-pecl-sasl-lib64_fix.patch b/php-pecl-sasl-lib64_fix.patch
index 71d4959..b9924ef 100644
--- a/php-pecl-sasl-lib64_fix.patch
+++ b/php-pecl-sasl-lib64_fix.patch
@@ -1,18 +1,17 @@
-diff -burN php-pecl-sasl-1.0.orig/sasl-0.1.0/config.m4 php-pecl-sasl-1.0/sasl-0.1.0/config.m4
---- php-pecl-sasl-1.0.orig/sasl-0.1.0/config.m4	2004-08-08 12:18:32.613760384 +0200
-+++ php-pecl-sasl-1.0/sasl-0.1.0/config.m4	2004-08-08 12:19:41.814240312 +0200
-@@ -29,9 +29,9 @@
+--- php55-pecl-sasl-0.2.0/config.m4~	2014-06-11 10:48:45.000000000 +0300
++++ php55-pecl-sasl-0.2.0/config.m4	2014-06-11 10:49:37.519596338 +0300
+@@ -30,9 +30,9 @@
       AC_MSG_ERROR(Please specify path to SASL installation)
    fi
  
 -  AC_MSG_CHECKING(for SASL library in $SASL_DIR/lib)
 +  AC_MSG_CHECKING(for SASL library in $SASL_DIR/lib64)
    for i in $SEARCH_LIBS; do
--    if test -r $SASL_DIR/lib/lib$i.a; then
-+    if test -r $SASL_DIR/lib64/lib$i.so; then
+-    if test -r $SASL_DIR/lib/lib$i.a -o -r $SASL_DIR/lib/lib$i.$SHLIB_SUFFIX_NAME; then
++    if test -r $SASL_DIR/lib64/lib$i.a -o -r $SASL_DIR/lib64/lib$i.$SHLIB_SUFFIX_NAME; then
        SASL_LIB=$i
        AC_MSG_RESULT(found -l$i)
-     fi
+       break
 @@ -39,12 +39,12 @@
  
    if test -z "$SASL_LIB"; then
diff --git a/php-pecl-sasl-lib_fix.patch b/php-pecl-sasl-lib_fix.patch
deleted file mode 100644
index 58cb28c..0000000
--- a/php-pecl-sasl-lib_fix.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- php-pecl-sasl-0.1.0/sasl-0.1.0/config.m4~	2004-01-23 08:34:28.000000000 +0000
-+++ php-pecl-sasl-0.1.0/sasl-0.1.0/config.m4	2004-08-08 09:54:15.090337624 +0000
-@@ -31,7 +31,7 @@
- 
-   AC_MSG_CHECKING(for SASL library in $SASL_DIR/lib)
-   for i in $SEARCH_LIBS; do
--    if test -r $SASL_DIR/lib/lib$i.a; then
-+    if test -r $SASL_DIR/lib/lib$i.so; then
-       SASL_LIB=$i
-       AC_MSG_RESULT(found -l$i)
-     fi
diff --git a/prepatch.patch b/prepatch.patch
new file mode 100644
index 0000000..4dfc195
--- /dev/null
+++ b/prepatch.patch
@@ -0,0 +1,19 @@
+--- php55-pecl-sasl-0.2.0/Makefile.in~	2004-01-21 10:16:02.000000000 +0200
++++ php55-pecl-sasl-0.2.0/Makefile.in	2014-06-11 10:46:50.582282253 +0300
+@@ -1,4 +1,4 @@
+-# $Id: Makefile.in,v 1.1 2004/01/21 08:16:02 jon Exp $
++# $Id$
+ 
+ LTLIBRARY_NAME        = libsasl.la
+ LTLIBRARY_SOURCES     = sasl.c
+--- php55-pecl-sasl-0.2.0/sasl.c~	2014-06-11 10:47:35.000000000 +0300
++++ php55-pecl-sasl-0.2.0/sasl.c	2014-06-11 10:48:12.862553751 +0300
+@@ -759,7 +759,7 @@
+ 	php_info_print_table_row(2, "SASL Support", "enabled");
+ 	php_info_print_table_row(2, "SASL API Version", api_version);
+ 	php_info_print_table_row(2, "SASL Library Version", lib_version);
+-	php_info_print_table_row(2, "Extension Version", "$Revision: 1.3 $");
++	php_info_print_table_row(2, "Extension Version", "$Revision$");
+ 	php_info_print_table_end();
+ }
+ /* }}} */
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/php-pecl-sasl.git/commitdiff/3230199c0d8ad953969b6816b5e0d45f32b4e81b




More information about the pld-cvs-commit mailing list