[PECL-CVS] [pecl-authentication-krb5] master: Fix for PHP 8.6.0alpha2 (#16)
[email protected] (Remi Collet via GitHub)
| Newsgroups | php.pecl.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: Remi Collet (remicollet)
Committer: GitHub (web-flow)
Pusher: mbechler
Date: 2026-08-08T11:46:21+02:00
Commit: https://github.com/php/pecl-authentication-krb5/commit/6a12ec3f3c388ff54e6acfd5449adcff208cbd01
Raw diff: https://github.com/php/pecl-authentication-krb5/commit/6a12ec3f3c388ff54e6acfd5449adcff208cbd01.diff
Fix for PHP 8.6.0alpha2 (#16)
. The zval_is_true() alias of zend_is_true() has been removed. Call
zend_is_true() directly instead.
. The XtOffsetOf() alias of C’s offsetof() macro has been removed. Use
offsetof() directly.
. The zval_dtor() alias of zval_ptr_dtor_nogc() has been removed.
Call zval_ptr_dtor_nogc() directly instead.
Changed paths:
M channel.c
M gssapi.c
M kadm.c
M kadm5_policy.c
M kadm5_principal.c
M kadm5_tldata.c
M krb5.c
M negotiate_auth.c
M php_krb5_compat.h
Diff:
diff --git a/channel.c b/channel.c
index 7b7b11c..44a257e 100644
--- a/channel.c
+++ b/channel.c
@@ -57,7 +57,7 @@ zend_class_entry *krb5_ce_gss_channel;
void php_krb5_gss_channel_object_free(zend_object *obj)
{
- krb5_gss_channel_object *object = (krb5_gss_channel_object*)((char *)obj - XtOffsetOf(krb5_gss_channel_object, std));
+ krb5_gss_channel_object *object = (krb5_gss_channel_object*)((char *)obj - offsetof(krb5_gss_channel_object, std));
if ( object->data.initiator_address.value ) {
efree(object->data.initiator_address.value);
}
@@ -78,7 +78,7 @@ int php_krb5_register_gss_channel() {
krb5_ce_gss_channel = zend_register_internal_class(&gss_channel);
krb5_ce_gss_channel->create_object = php_krb5_gss_channel_object_new;
memcpy(&gss_channel_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
- gss_channel_handlers.offset = XtOffsetOf(krb5_gss_channel_object, std);
+ gss_channel_handlers.offset = offsetof(krb5_gss_channel_object, std);
gss_channel_handlers.free_obj = php_krb5_gss_channel_object_free;
return SUCCESS;
}
diff --git a/gssapi.c b/gssapi.c
index 2423491..a5864e9 100644
--- a/gssapi.c
+++ b/gssapi.c
@@ -202,7 +202,7 @@ void php_krb5_gssapi_handle_error(OM_uint32 major, OM_uint32 minor TSRMLS_DC)
/* {{{ */
void php_krb5_gssapi_context_object_free(zend_object *obj TSRMLS_DC) {
OM_uint32 minor_status = 0;
- krb5_gssapi_context_object *object = (krb5_gssapi_context_object*)((char *)obj - XtOffsetOf(krb5_gssapi_context_object, std));
+ krb5_gssapi_context_object *object = (krb5_gssapi_context_object*)((char *)obj - offsetof(krb5_gssapi_context_object, std));
if(object->creds != GSS_C_NO_CREDENTIAL) {
gss_release_cred(&minor_status, &object->creds);
@@ -253,7 +253,7 @@ int php_krb5_gssapi_register_classes(TSRMLS_D)
krb5_ce_gssapi_context->create_object = php_krb5_gssapi_context_object_new;
memcpy(&krb5_gssapi_context_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
- krb5_gssapi_context_handlers.offset = XtOffsetOf(krb5_gssapi_context_object, std);
+ krb5_gssapi_context_handlers.offset = offsetof(krb5_gssapi_context_object, std);
krb5_gssapi_context_handlers.free_obj = php_krb5_gssapi_context_object_free;
php_krb5_register_gss_channel();
@@ -601,7 +601,7 @@ PHP_METHOD(GSSAPIContext, initSecContext)
}
if(ztokenbuf) {
- zval_dtor(ztokenbuf);
+ zval_ptr_dtor_nogc(ztokenbuf);
_ZVAL_STRINGL(ztokenbuf, tokenbuf.value, tokenbuf.length);
}
@@ -609,12 +609,12 @@ PHP_METHOD(GSSAPIContext, initSecContext)
ASSERT_GSS_SUCCESS(status,minor_status,);
if(zret_flags) {
- zval_dtor(zret_flags);
+ zval_ptr_dtor_nogc(zret_flags);
ZVAL_LONG(zret_flags, ret_flags);
}
if(ztime_rec) {
- zval_dtor(ztime_rec);
+ zval_ptr_dtor_nogc(ztime_rec);
ZVAL_LONG(ztime_rec, time_rec);
}
@@ -700,7 +700,7 @@ PHP_METHOD(GSSAPIContext, acceptSecContext)
}
if(ztokenbuf) {
- zval_dtor(ztokenbuf);
+ zval_ptr_dtor_nogc(ztokenbuf);
_ZVAL_STRINGL(ztokenbuf, tokenbuf.value, tokenbuf.length);
}
@@ -711,19 +711,19 @@ PHP_METHOD(GSSAPIContext, acceptSecContext)
gss_buffer_desc nametmp;
status = gss_display_name(&minor_status, src_name, &nametmp, NULL);
ASSERT_GSS_SUCCESS(status,minor_status,);
- zval_dtor(zsrc_name);
+ zval_ptr_dtor_nogc(zsrc_name);
_ZVAL_STRINGL(zsrc_name, nametmp.value, nametmp.length);
status = gss_release_buffer(&minor_status, &nametmp);
ASSERT_GSS_SUCCESS(status,minor_status,);
}
if(zret_flags) {
- zval_dtor(zret_flags);
+ zval_ptr_dtor_nogc(zret_flags);
ZVAL_LONG(zret_flags, ret_flags);
}
if(ztime_rec) {
- zval_dtor(ztime_rec);
+ zval_ptr_dtor_nogc(ztime_rec);
ZVAL_LONG(ztime_rec, time_rec);
}
@@ -907,7 +907,7 @@ PHP_METHOD(GSSAPIContext, wrap)
ASSERT_GSS_SUCCESS(status,minor_status,);
if(zoutput) {
- zval_dtor(zoutput);
+ zval_ptr_dtor_nogc(zoutput);
_ZVAL_STRINGL(zoutput, output.value, output.length);
}
@@ -955,7 +955,7 @@ PHP_METHOD(GSSAPIContext, unwrap)
ASSERT_GSS_SUCCESS(status,minor_status,);
if(zoutput) {
- zval_dtor(zoutput);
+ zval_ptr_dtor_nogc(zoutput);
_ZVAL_STRINGL(zoutput, output.value, output.length);
}
diff --git a/kadm.c b/kadm.c
index 16a5512..b02c719 100644
--- a/kadm.c
+++ b/kadm.c
@@ -100,7 +100,7 @@ void php_krb5_free_kadm5_object(krb5_kadm5_object *obj) {
/* {{{ */
static void php_krb5_kadm5_object_free(zend_object *obj TSRMLS_DC)
{
- krb5_kadm5_object *object = (krb5_kadm5_object*)((char *)obj - XtOffsetOf(krb5_kadm5_object, std));
+ krb5_kadm5_object *object = (krb5_kadm5_object*)((char *)obj - offsetof(krb5_kadm5_object, std));
kadm5_destroy(&object->handle);
if ( object->config.realm != NULL ) {
efree(object->config.realm);
@@ -138,7 +138,7 @@ int php_krb5_kadm5_register_classes(TSRMLS_D) {
krb5_ce_kadm5 = zend_register_internal_class(&kadm5 TSRMLS_CC);
krb5_ce_kadm5->create_object = php_krb5_kadm5_object_new;
memcpy(&krb5_kadm5_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
- krb5_kadm5_handlers.offset = XtOffsetOf(krb5_kadm5_object, std);
+ krb5_kadm5_handlers.offset = offsetof(krb5_kadm5_object, std);
krb5_kadm5_handlers.free_obj = php_krb5_kadm5_object_free;
/** register KADM5Principal **/
@@ -296,15 +296,15 @@ PHP_METHOD(KADM5, getPrincipal)
ZVAL_BOOL(&args[2], noload);
if(call_user_function(&krb5_ce_kadm5_principal->function_table, return_value, &ctor, &dummy_retval, 3,
args TSRMLS_CC) == FAILURE) {
- zval_dtor(&ctor);
- zval_dtor(&dummy_retval);
- zval_dtor(&args[2]);
+ zval_ptr_dtor_nogc(&ctor);
+ zval_ptr_dtor_nogc(&dummy_retval);
+ zval_ptr_dtor_nogc(&args[2]);
zend_throw_exception(NULL, "Failed to instantiate KADM5Principal object", 0 TSRMLS_CC);
return;
}
- zval_dtor(&ctor);
- zval_dtor(&dummy_retval);
- zval_dtor(&args[2]);
+ zval_ptr_dtor_nogc(&ctor);
+ zval_ptr_dtor_nogc(&dummy_retval);
+ zval_ptr_dtor_nogc(&args[2]);
} /* }}} */
/* {{{ proto array KADM5::getPrinicipals([string $filter])
@@ -400,13 +400,13 @@ PHP_METHOD(KADM5, createPrincipal)
ZVAL_STRING(&func, "load");
if(call_user_function(&krb5_ce_kadm5_principal->function_table, princ, &func, &dummy_retval, 0,
NULL TSRMLS_CC) == FAILURE) {
- zval_dtor(&func);
- zval_dtor(&dummy_retval);
+ zval_ptr_dtor_nogc(&func);
+ zval_ptr_dtor_nogc(&dummy_retval);
zend_throw_exception(NULL, "Failed to update KADM5Principal object", 0 TSRMLS_CC);
return;
}
- zval_dtor(&func);
- zval_dtor(&dummy_retval);
+ zval_ptr_dtor_nogc(&func);
+ zval_ptr_dtor_nogc(&dummy_retval);
}
/* {{{ proto KADM5Policy KADM5::getPolicy(string $policy)
@@ -429,13 +429,13 @@ PHP_METHOD(KADM5, getPolicy)
args[1] = *getThis();
if(call_user_function(&krb5_ce_kadm5_policy->function_table, return_value, &ctor, &dummy_retval, 2,
args TSRMLS_CC) == FAILURE) {
- zval_dtor(&ctor);
- zval_dtor(&dummy_retval);
+ zval_ptr_dtor_nogc(&ctor);
+ zval_ptr_dtor_nogc(&dummy_retval);
zend_throw_exception(NULL, "Failed to instantiate KADM5Policy object", 0 TSRMLS_CC);
return;
}
- zval_dtor(&ctor);
- zval_dtor(&dummy_retval);
+ zval_ptr_dtor_nogc(&ctor);
+ zval_ptr_dtor_nogc(&dummy_retval);
} /* }}} */
/* {{{ proto void KADM5::createPolicy(KADM5Policy $policy)
@@ -476,13 +476,13 @@ PHP_METHOD(KADM5, createPolicy) {
ZVAL_STRING(&func, "load");
if(call_user_function(&krb5_ce_kadm5_policy->function_table, zpolicy, &func, &dummy_retval, 0,
NULL TSRMLS_CC) == FAILURE) {
- zval_dtor(&func);
- zval_dtor(&dummy_retval);
+ zval_ptr_dtor_nogc(&func);
+ zval_ptr_dtor_nogc(&dummy_retval);
zend_throw_exception(NULL, "Failed to update KADM5Policy object", 0 TSRMLS_CC);
return;
}
- zval_dtor(&func);
- zval_dtor(&dummy_retval);
+ zval_ptr_dtor_nogc(&func);
+ zval_ptr_dtor_nogc(&dummy_retval);
} /* }}} */
/* {{{ proto array KADM5::getPolicies([string $filter])
diff --git a/kadm5_policy.c b/kadm5_policy.c
index 324b275..295a769 100644
--- a/kadm5_policy.c
+++ b/kadm5_policy.c
@@ -93,7 +93,7 @@ static zend_function_entry krb5_kadm5_policy_functions[] = {
zend_object_handlers krb5_kadm5_policy_handlers;
static void php_krb5_kadm5_policy_object_free(zend_object *obj) {
- krb5_kadm5_policy_object *object = (krb5_kadm5_policy_object*)((char *)obj - XtOffsetOf(krb5_kadm5_policy_object, std));
+ krb5_kadm5_policy_object *object = (krb5_kadm5_policy_object*)((char *)obj - offsetof(krb5_kadm5_policy_object, std));
krb5_kadm5_object *conn = object->conn;
if(object->policy) {
efree(object->policy);
@@ -110,7 +110,7 @@ int php_krb5_register_kadm5_policy(TSRMLS_D) {
krb5_ce_kadm5_policy = zend_register_internal_class(&kadm5_policy TSRMLS_CC);
krb5_ce_kadm5_policy->create_object = php_krb5_kadm5_policy_object_new;
memcpy(&krb5_kadm5_policy_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
- krb5_kadm5_policy_handlers.offset = XtOffsetOf(krb5_kadm5_policy_object, std);
+ krb5_kadm5_policy_handlers.offset = offsetof(krb5_kadm5_policy_object, std);
krb5_kadm5_policy_handlers.free_obj = php_krb5_kadm5_policy_object_free;
return SUCCESS;
}
diff --git a/kadm5_principal.c b/kadm5_principal.c
index bad65cd..97debde 100644
--- a/kadm5_principal.c
+++ b/kadm5_principal.c
@@ -105,7 +105,7 @@ zend_object_handlers krb5_kadm5_principal_handlers;
/* KADM5Principal ctor/dtor */
static void php_krb5_kadm5_principal_object_free(zend_object *obj TSRMLS_DC)
{
- krb5_kadm5_principal_object *object = (krb5_kadm5_principal_object*)((char *)obj - XtOffsetOf(krb5_kadm5_principal_object, std));
+ krb5_kadm5_principal_object *object = (krb5_kadm5_principal_object*)((char *)obj - offsetof(krb5_kadm5_principal_object, std));
krb5_kadm5_object *conn = object->conn;
if(conn) {
kadm5_free_principal_ent(conn->handle, &object->data);
@@ -120,7 +120,7 @@ int php_krb5_register_kadm5_principal(TSRMLS_D) {
krb5_ce_kadm5_principal = zend_register_internal_class(&kadm5_principal TSRMLS_CC);
krb5_ce_kadm5_principal->create_object = php_krb5_kadm5_principal_object_new;
memcpy(&krb5_kadm5_principal_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
- krb5_kadm5_principal_handlers.offset = XtOffsetOf(krb5_kadm5_principal_object, std);
+ krb5_kadm5_principal_handlers.offset = offsetof(krb5_kadm5_principal_object, std);
krb5_kadm5_principal_handlers.free_obj = php_krb5_kadm5_principal_object_free;
return SUCCESS;
}
@@ -164,13 +164,13 @@ PHP_METHOD(KADM5Principal, __construct)
ZVAL_STRING(&func, "load");
if(call_user_function(&krb5_ce_kadm5_policy->function_table, getThis(), &func, &dummy_retval, 0,
NULL TSRMLS_CC) == FAILURE) {
- zval_dtor(&func);
- zval_dtor(&dummy_retval);
+ zval_ptr_dtor_nogc(&func);
+ zval_ptr_dtor_nogc(&dummy_retval);
zend_throw_exception(NULL, "Failed to update KADM5Policy object", 0 TSRMLS_CC);
return;
}
- zval_dtor(&func);
- zval_dtor(&dummy_retval);
+ zval_ptr_dtor_nogc(&func);
+ zval_ptr_dtor_nogc(&dummy_retval);
}
}
}
@@ -855,13 +855,13 @@ PHP_METHOD(KADM5Principal, getPolicy)
ZVAL_STRING(&args[0], obj->data.policy);
if(call_user_function(&krb5_ce_kadm5_policy->function_table, connobj, &func, return_value, 1,
args TSRMLS_CC) == FAILURE) {
- zval_dtor(&args[0]);
- zval_dtor(&func);
+ zval_ptr_dtor_nogc(&args[0]);
+ zval_ptr_dtor_nogc(&func);
zend_throw_exception(NULL, "Failed to instantiate KADM5Policy object", 0 TSRMLS_CC);
return;
}
- zval_dtor(&args[0]);
- zval_dtor(&func);
+ zval_ptr_dtor_nogc(&args[0]);
+ zval_ptr_dtor_nogc(&func);
}
}
/* }}} */
diff --git a/kadm5_tldata.c b/kadm5_tldata.c
index c301fc8..94db1da 100644
--- a/kadm5_tldata.c
+++ b/kadm5_tldata.c
@@ -42,7 +42,7 @@ zend_object_handlers krb5_kadm5_tldata_handlers;
/* KADM5Principal ctor/dtor */
static void php_krb5_kadm5_tldata_object_free(zend_object *obj TSRMLS_DC)
{
- krb5_kadm5_tldata_object *object = (krb5_kadm5_tldata_object*)((char *)obj - XtOffsetOf(krb5_kadm5_tldata_object, std));
+ krb5_kadm5_tldata_object *object = (krb5_kadm5_tldata_object*)((char *)obj - offsetof(krb5_kadm5_tldata_object, std));
if ( object->data.tl_data_contents ) {
efree(object->data.tl_data_contents);
}
@@ -56,7 +56,7 @@ int php_krb5_register_kadm5_tldata(TSRMLS_D) {
krb5_ce_kadm5_tldata = zend_register_internal_class(&kadm5_tldata TSRMLS_CC);
krb5_ce_kadm5_tldata->create_object = php_krb5_kadm5_tldata_object_new;
memcpy(&krb5_kadm5_tldata_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
- krb5_kadm5_tldata_handlers.offset = XtOffsetOf(krb5_kadm5_tldata_object, std);
+ krb5_kadm5_tldata_handlers.offset = offsetof(krb5_kadm5_tldata_object, std);
krb5_kadm5_tldata_handlers.free_obj = php_krb5_kadm5_tldata_object_free;
return SUCCESS;
}
diff --git a/krb5.c b/krb5.c
index 5933a2a..bfd305a 100644
--- a/krb5.c
+++ b/krb5.c
@@ -157,7 +157,7 @@ PHP_MINIT_FUNCTION(krb5)
krb5_ce_ccache = zend_register_internal_class(&krb5_ccache TSRMLS_CC);
krb5_ce_ccache->create_object = php_krb5_ticket_object_new;
memcpy(&krb5_ccache_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
- krb5_ccache_handlers.offset = XtOffsetOf(krb5_ccache_object, std);
+ krb5_ccache_handlers.offset = offsetof(krb5_ccache_object, std);
krb5_ccache_handlers.free_obj = php_krb5_ccache_object_free;
#ifdef HAVE_KADM5
@@ -245,7 +245,7 @@ PHP_MINFO_FUNCTION(krb5)
/* {{{ */
static void php_krb5_ccache_object_free(zend_object *obj TSRMLS_DC)
{
- krb5_ccache_object *ticket = (krb5_ccache_object*)((char *)obj - XtOffsetOf(krb5_ccache_object, std));
+ krb5_ccache_object *ticket = (krb5_ccache_object*)((char *)obj - offsetof(krb5_ccache_object, std));
krb5_cc_destroy(ticket->ctx, ticket->cc);
krb5_free_context(ticket->ctx);
@@ -304,21 +304,21 @@ static int php_krb5_parse_init_creds_opts(zval *opts, krb5_get_init_creds_opt *c
/* forwardable */
tmp = zend_compat_hash_find(HASH_OF(opts), "forwardable", sizeof("forwardable"));
if (tmp != NULL) {
- krb5_get_init_creds_opt_set_forwardable(cred_opts, zval_is_true(tmp));
+ krb5_get_init_creds_opt_set_forwardable(cred_opts, zend_is_true(tmp));
}
/* proxiable */
tmp = zend_compat_hash_find(HASH_OF(opts), "proxiable", sizeof("proxiable"));
if (tmp != NULL) {
- krb5_get_init_creds_opt_set_proxiable(cred_opts, zval_is_true(tmp));
+ krb5_get_init_creds_opt_set_proxiable(cred_opts, zend_is_true(tmp));
}
#ifdef KRB5_GET_INIT_CREDS_OPT_CANONICALIZE
/* canonicalize */
tmp = zend_compat_hash_find(HASH_OF(opts), "canonicalize", sizeof("canonicalize"));
if (tmp != NULL) {
- krb5_get_init_creds_opt_set_canonicalize(cred_opts, zval_is_true(tmp));
+ krb5_get_init_creds_opt_set_canonicalize(cred_opts, zend_is_true(tmp));
}
#endif /* KRB5_GET_INIT_CREDS_OPT_CANONICALIZE */
diff --git a/negotiate_auth.c b/negotiate_auth.c
index 080bbe4..44eb680 100644
--- a/negotiate_auth.c
+++ b/negotiate_auth.c
@@ -110,7 +110,7 @@ static void php_krb5_negotiate_auth_object_free_data(krb5_negotiate_auth_object*
/* {{{ */
static void php_krb5_negotiate_auth_object_free(zend_object *obj TSRMLS_DC)
{
- krb5_negotiate_auth_object *object = (krb5_negotiate_auth_object*)((char *)obj - XtOffsetOf(krb5_negotiate_auth_object, std));
+ krb5_negotiate_auth_object *object = (krb5_negotiate_auth_object*)((char *)obj - offsetof(krb5_negotiate_auth_object, std));
php_krb5_negotiate_auth_object_free_data(object);
zend_object_std_dtor(obj);
}
@@ -149,7 +149,7 @@ int php_krb5_negotiate_auth_register_classes(TSRMLS_D) {
krb5_ce_negotiate_auth = zend_register_internal_class(&negotiate_auth TSRMLS_CC);
krb5_ce_negotiate_auth->create_object = php_krb5_negotiate_auth_object_new;
memcpy(&krb5_negotiate_auth_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
- krb5_negotiate_auth_handlers.offset = XtOffsetOf(krb5_negotiate_auth_object, std);
+ krb5_negotiate_auth_handlers.offset = offsetof(krb5_negotiate_auth_object, std);
krb5_negotiate_auth_handlers.free_obj = php_krb5_negotiate_auth_object_free;
return SUCCESS;
diff --git a/php_krb5_compat.h b/php_krb5_compat.h
index ae85bdf..c66ca53 100644
--- a/php_krb5_compat.h
+++ b/php_krb5_compat.h
@@ -30,15 +30,15 @@ typedef size_t strsize_t;
#define _RETVAL_STRINGL(a,b) RETVAL_STRINGL(a,b)
#define _RETVAL_STRING(a) RETVAL_STRING(a)
-#define KRB5_CCACHE(zv) (krb5_ccache_object*)((char *)Z_OBJ_P(zv) - XtOffsetOf(krb5_ccache_object, std))
-#define KRB5_NEGOTIATE_AUTH(zv) (krb5_negotiate_auth_object*)((char *)Z_OBJ_P(zv) - XtOffsetOf(krb5_negotiate_auth_object, std))
-#define KRB5_GSSAPI_CONTEXT(zv) (krb5_gssapi_context_object*)((char *)Z_OBJ_P(zv) - XtOffsetOf(krb5_gssapi_context_object, std))
-#define KRB5_GSS_CHANNEL(zv) (krb5_gss_channel_object*)((char *)Z_OBJ_P(zv) - XtOffsetOf(krb5_gss_channel_object, std))
-
-#define KRB5_KADM(zv) (krb5_kadm5_object*)((char *)Z_OBJ_P(zv) - XtOffsetOf(krb5_kadm5_object, std))
-#define KRB5_KADM_POLICY(zv) (krb5_kadm5_policy_object*)((char *)Z_OBJ_P(zv) - XtOffsetOf(krb5_kadm5_policy_object, std))
-#define KRB5_KADM_PRINCIPAL(zv) (krb5_kadm5_principal_object*)((char *)Z_OBJ_P(zv) - XtOffsetOf(krb5_kadm5_principal_object, std))
-#define KRB5_KADM_TLDATA(zv) (krb5_kadm5_tldata_object*)((char *)Z_OBJ_P(zv) - XtOffsetOf(krb5_kadm5_tldata_object, std))
+#define KRB5_CCACHE(zv) (krb5_ccache_object*)((char *)Z_OBJ_P(zv) - offsetof(krb5_ccache_object, std))
+#define KRB5_NEGOTIATE_AUTH(zv) (krb5_negotiate_auth_object*)((char *)Z_OBJ_P(zv) - offsetof(krb5_negotiate_auth_object, std))
+#define KRB5_GSSAPI_CONTEXT(zv) (krb5_gssapi_context_object*)((char *)Z_OBJ_P(zv) - offsetof(krb5_gssapi_context_object, std))
+#define KRB5_GSS_CHANNEL(zv) (krb5_gss_channel_object*)((char *)Z_OBJ_P(zv) - offsetof(krb5_gss_channel_object, std))
+
+#define KRB5_KADM(zv) (krb5_kadm5_object*)((char *)Z_OBJ_P(zv) - offsetof(krb5_kadm5_object, std))
+#define KRB5_KADM_POLICY(zv) (krb5_kadm5_policy_object*)((char *)Z_OBJ_P(zv) - offsetof(krb5_kadm5_policy_object, std))
+#define KRB5_KADM_PRINCIPAL(zv) (krb5_kadm5_principal_object*)((char *)Z_OBJ_P(zv) - offsetof(krb5_kadm5_principal_object, std))
+#define KRB5_KADM_TLDATA(zv) (krb5_kadm5_tldata_object*)((char *)Z_OBJ_P(zv) - offsetof(krb5_kadm5_tldata_object, std))
static zend_always_inline zval* zend_compat_hash_index_find(HashTable *ht, zend_ulong idx)
{