[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pecl-cvs
Subject:    [PECL-CVS] =?utf-8?q?svn:_/pecl/krb5/trunk/_kadm.c_kadm5=5Fprincipal.c?=
From:       Moritz_Bechler <mbechler () php ! net>
Date:       2015-09-22 7:49:27
Message-ID: svn-mbechler-1442908167-337893-1364418591 () svn ! php ! net
[Download RAW message or body]

mbechler                                 Tue, 22 Sep 2015 07:49:27 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=337893

Log:
Add option to prevent principal load on initialization.

Changed paths:
    U   pecl/krb5/trunk/kadm.c
    U   pecl/krb5/trunk/kadm5_principal.c

Modified: pecl/krb5/trunk/kadm.c
===================================================================
--- pecl/krb5/trunk/kadm.c	2015-09-21 16:31:39 UTC (rev 337892)
+++ pecl/krb5/trunk/kadm.c	2015-09-22 07:49:27 UTC (rev 337893)
@@ -36,6 +36,7 @@

 ZEND_BEGIN_ARG_INFO_EX(arginfo_KADM5_getPrincipal, 0, 0, 1)
 	ZEND_ARG_INFO(0, principal)
+	ZEND_ARG_INFO(0, noload)
 ZEND_END_ARG_INFO()

 ZEND_BEGIN_ARG_INFO_EX(arginfo_KADM5_getPrincipals, 0, 0, 0)
@@ -286,16 +287,17 @@
 }
 /* }}} */

-/* {{{ proto KADM5Principal KADM5::getPrinicipal(string $principal)
+/* {{{ proto KADM5Principal KADM5::getPrinicipal(string $principal [, boolean \
$noload ])  Fetch a principal entry by name */
 PHP_METHOD(KADM5, getPrincipal)
 {
-	zval *dummy_retval, *ctor;
-	zval *args[2];
+	zval *dummy_retval, *ctor, *znoload;
+	zval *args[3];

 	zval *sprinc = NULL;
+	zend_bool noload = FALSE;

-	if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &sprinc) == FAILURE) {
+	if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z|b", &sprinc, &noload) == \
FAILURE) {  RETURN_FALSE;
 	}

@@ -303,13 +305,16 @@

 	MAKE_STD_ZVAL(ctor);
 	ZVAL_STRING(ctor, "__construct", 1);
+	MAKE_STD_ZVAL(znoload);
+	ZVAL_BOOL(znoload, noload);

 	args[0] = sprinc;
 	args[1] = getThis();
+	args[2] = znoload;

 	MAKE_STD_ZVAL(dummy_retval);
 	if(call_user_function(&krb5_ce_kadm5_principal->function_table,
-							&return_value, ctor, dummy_retval, 2,
+							&return_value, ctor, dummy_retval, 3,
 							args TSRMLS_CC) == FAILURE) {
 		zval_dtor(ctor);
 		zval_dtor(dummy_retval);
@@ -318,6 +323,7 @@

 	zval_ptr_dtor(&ctor);
 	zval_ptr_dtor(&dummy_retval);
+	zval_ptr_dtor(&znoload);
 } /* }}} */

 /* {{{ proto array KADM5::getPrinicipals([string $filter])

Modified: pecl/krb5/trunk/kadm5_principal.c
===================================================================
--- pecl/krb5/trunk/kadm5_principal.c	2015-09-21 16:31:39 UTC (rev 337892)
+++ pecl/krb5/trunk/kadm5_principal.c	2015-09-22 07:49:27 UTC (rev 337893)
@@ -29,6 +29,7 @@
 ZEND_BEGIN_ARG_INFO_EX(arginfo_KADM5Principal__construct, 0, 0, 1)
 	ZEND_ARG_INFO(0, principal)
 	ZEND_ARG_OBJ_INFO(0, connection, KADM5, 0)
+	ZEND_ARG_INFO(0, noload)
 ZEND_END_ARG_INFO()

 ZEND_BEGIN_ARG_INFO_EX(arginfo_KADM5Principal_changePassword, 0, 0, 1)
@@ -143,7 +144,7 @@
 	return retval;
 }

-/* {{{ proto KADM5Principal KADM5Principal::__construct(string $principal [, KADM5 \
$connection ]) +/* {{{ proto KADM5Principal KADM5Principal::__construct(string \
                $principal [, KADM5 $connection [, boolean $noload] ])
  */
 PHP_METHOD(KADM5Principal, __construct)
 {
@@ -151,11 +152,12 @@
 	char *sprinc = NULL;
 	int sprinc_len;

+	zend_bool noload = FALSE;
 	zval *obj = NULL;
 	zval *dummy_retval, *func;

 	KRB5_SET_ERROR_HANDLING(EH_THROW);
-	if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|O", &sprinc, &sprinc_len, \
&obj, krb5_ce_kadm5) == FAILURE) { +	if(zend_parse_parameters(ZEND_NUM_ARGS() \
TSRMLS_CC, "s|Ob", &sprinc, &sprinc_len, &obj, krb5_ce_kadm5, &noload) == FAILURE) {  \
RETURN_NULL();  }
 	KRB5_SET_ERROR_HANDLING(EH_NORMAL);
@@ -165,20 +167,22 @@
 	if(obj && Z_TYPE_P(obj) == IS_OBJECT) {
 		zend_update_property(krb5_ce_kadm5_principal, getThis(), "connection", \
sizeof("connection"), obj TSRMLS_CC);

-		MAKE_STD_ZVAL(func);
-		ZVAL_STRING(func, "load", 1);
-		MAKE_STD_ZVAL(dummy_retval);
-		if(call_user_function(&krb5_ce_kadm5_principal->function_table,
-								&getThis(), func, dummy_retval, 0,
-								NULL TSRMLS_CC) == FAILURE) {
+		if ( noload != TRUE ) {
+			MAKE_STD_ZVAL(func);
+			ZVAL_STRING(func, "load", 1);
+			MAKE_STD_ZVAL(dummy_retval);
+			if(call_user_function(&krb5_ce_kadm5_principal->function_table,
+									&getThis(), func, dummy_retval, 0,
+									NULL TSRMLS_CC) == FAILURE) {
+				zval_ptr_dtor(&func);
+				zval_ptr_dtor(&dummy_retval);
+				zend_throw_exception(NULL, "Failed to update KADM5Principal object", 0 \
TSRMLS_CC); +				return;
+			}
+
 			zval_ptr_dtor(&func);
 			zval_ptr_dtor(&dummy_retval);
-			zend_throw_exception(NULL, "Failed to update KADM5Principal object", 0 \
                TSRMLS_CC);
-			return;
 		}
-
-		zval_ptr_dtor(&func);
-		zval_ptr_dtor(&dummy_retval);
 	}
 }
 /* }}} */
@@ -244,6 +248,8 @@
 	if (zend_parse_parameters_none() == FAILURE) {
 		return;
 	}
+
+
 	connobj = zend_read_property(krb5_ce_kadm5_principal, getThis(), "connection",
 									sizeof("connection"),1 TSRMLS_CC);

@@ -331,6 +337,12 @@
 	if (zend_parse_parameters_none() == FAILURE) {
 		return;
 	}
+
+	if ( ! obj->loaded ) {
+		zend_throw_exception(NULL, "Object is not loaded", 0 TSRMLS_CC);
+		return;
+	}
+
 	connobj = zend_read_property(krb5_ce_kadm5_principal, getThis(), "connection",
 									sizeof("connection"),1 TSRMLS_CC);

@@ -340,6 +352,7 @@
 		return;
 	}

+
 	retval = kadm5_delete_principal(kadm5->handle, obj->data.principal);
 	if(retval != KADM5_OK) {
 		zend_throw_exception(NULL, krb5_get_error_message(kadm5->ctx, (int)retval), \
(int)retval TSRMLS_CC); @@ -363,7 +376,15 @@
 	int dst_name_len, dst_pw_len;
 	krb5_principal dst_princ;

+	if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &dst_name, \
&dst_name_len, +								&dst_pw, &dst_pw_len) == FAILURE) {
+		RETURN_FALSE;
+	}

+	if ( ! obj->loaded ) {
+		zend_throw_exception(NULL, "Object is not loaded", 0 TSRMLS_CC);
+		return;
+	}

 	connobj = zend_read_property(krb5_ce_kadm5_principal, getThis(), "connection",
 									sizeof("connection"),1 TSRMLS_CC);
@@ -374,10 +395,6 @@
 		return;
 	}

-	if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &dst_name, \
                &dst_name_len,
-								&dst_pw, &dst_pw_len) == FAILURE) {
-		RETURN_FALSE;
-	}

 	krb5_parse_name(kadm5->ctx, dst_name, &dst_princ);
 	retval = kadm5_rename_principal(kadm5->handle, obj->data.principal, dst_princ);
@@ -418,6 +435,8 @@
 	if (zend_parse_parameters_none() == FAILURE) {
 		return;
 	}
+
+
 	kadm5 = (krb5_kadm5_object*)zend_object_store_get_object(connobj TSRMLS_CC);
 	if(!kadm5) {
 		zend_throw_exception(NULL, "No valid connection available", 0 TSRMLS_CC);
@@ -427,14 +446,27 @@
 	array_init(return_value);

 	char *tstring;
-	krb5_unparse_name(kadm5->ctx, obj->data.principal, &tstring);
-	add_assoc_string(return_value, "princname", tstring, 1);
+	if ( obj->data.principal != NULL ) {
+		krb5_unparse_name(kadm5->ctx, obj->data.principal, &tstring);
+		add_assoc_string(return_value, "princname", tstring, 1);
+	} else {
+		zval *val;
+		val = zend_read_property(krb5_ce_kadm5_principal, getThis(), "princname",
+									sizeof("princname"),1 TSRMLS_CC);
+		convert_to_string(val);
+		add_assoc_string(return_value, "princname", Z_STRVAL_P(val), 1);
+		zval_ptr_dtor(&val);
+	}
 	add_assoc_long(return_value, "princ_expire_time", obj->data.princ_expire_time);
 	add_assoc_long(return_value, "last_pwd_change", obj->data.last_pwd_change);
 	add_assoc_long(return_value, "pw_expiration", obj->data.pw_expiration);
 	add_assoc_long(return_value, "max_life", obj->data.max_life);
-	krb5_unparse_name(kadm5->ctx, obj->data.mod_name, &tstring);
-	add_assoc_string(return_value, "mod_name", tstring, 1);
+
+	if ( obj->data.mod_name ) {
+		krb5_unparse_name(kadm5->ctx, obj->data.mod_name, &tstring);
+		add_assoc_string(return_value, "mod_name", tstring, 1);
+	}
+
 	add_assoc_long(return_value, "mod_date", obj->data.mod_date);
 	add_assoc_long(return_value, "attributes", obj->data.attributes);
 	add_assoc_long(return_value, "kvno", obj->data.kvno);
@@ -471,12 +503,9 @@
 		free(princname);
 	} else {
 		zval *val;
-
 		val = zend_read_property(krb5_ce_kadm5_principal, getThis(), "princname",
 									sizeof("princname"),1 TSRMLS_CC);
-
 		convert_to_string(val);
-
 		ZVAL_STRING(return_value, Z_STRVAL_P(val), 1);
 		zval_ptr_dtor(&val);
 	}
@@ -492,6 +521,7 @@
 	if (zend_parse_parameters_none() == FAILURE) {
 		return;
 	}
+
 	RETURN_LONG(obj->data.princ_expire_time);
 }
 /* }}} */



-- 
PECL CVS Mailing List 
To unsubscribe, visit: http://www.php.net/unsub.php

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic