From 6cfaa16a21780f09f76a7703da255e07910b8b4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bruno=20Pr=C3=A9mont?= Date: Mon, 25 Jan 2021 19:37:14 +0100 Subject: [PATCH] Fix compatibility with PHP-8 With PHP-7.x missing arginfo has been triggering warnings: NOTICE: PHP message: PHP Warning: Missing arginfo for radius_auth_open() in Unknown on line 0 With PHP-8 this has become mandatory. --- radius.c | 216 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 188 insertions(+), 28 deletions(-) diff --git a/radius.c b/radius.c index 89ee0d6..4bfb429 100644 --- a/radius.c +++ b/radius.c @@ -61,39 +61,199 @@ ZEND_DECLARE_MODULE_GLOBALS(radius) /* True global resources - no need for thread safety here */ static int le_radius; +/* {{{ arginfo */ +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_auth_open, 0, 0, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_acct_open, 0, 0, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_close, 0, 0, 1) + ZEND_ARG_INFO(0, radius_handle) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_strerror, 0, 0, 1) + ZEND_ARG_INFO(0, radius_handle) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_config, 0, 0, 2) + ZEND_ARG_INFO(0, radius_handle) + ZEND_ARG_INFO(0, file) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_add_server, 0, 0, 6) + ZEND_ARG_INFO(0, radius_handle) + ZEND_ARG_INFO(0, hostname) + ZEND_ARG_INFO(0, port) + ZEND_ARG_INFO(0, secret) + ZEND_ARG_INFO(0, timeout) + ZEND_ARG_INFO(0, max_tries) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_create_request, 0, 0, 2) + ZEND_ARG_INFO(0, radius_handle) + ZEND_ARG_INFO(0, type) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_put_string, 0, 0, 3) + ZEND_ARG_INFO(0, radius_handle) + ZEND_ARG_INFO(0, type) + ZEND_ARG_INFO(0, value) + ZEND_ARG_INFO(0, options) + ZEND_ARG_INFO(0, tag) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_put_int, 0, 0, 3) + ZEND_ARG_INFO(0, radius_handle) + ZEND_ARG_INFO(0, type) + ZEND_ARG_INFO(0, value) + ZEND_ARG_INFO(0, options) + ZEND_ARG_INFO(0, tag) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_put_attr, 0, 0, 3) + ZEND_ARG_INFO(0, radius_handle) + ZEND_ARG_INFO(0, type) + ZEND_ARG_INFO(0, value) + ZEND_ARG_INFO(0, options) + ZEND_ARG_INFO(0, tag) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_put_addr, 0, 0, 3) + ZEND_ARG_INFO(0, radius_handle) + ZEND_ARG_INFO(0, type) + ZEND_ARG_INFO(0, addr) + ZEND_ARG_INFO(0, options) + ZEND_ARG_INFO(0, tag) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_put_vendor_string, 0, 0, 4) + ZEND_ARG_INFO(0, radius_handle) + ZEND_ARG_INFO(0, vendor) + ZEND_ARG_INFO(0, type) + ZEND_ARG_INFO(0, value) + ZEND_ARG_INFO(0, options) + ZEND_ARG_INFO(0, tag) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_put_vendor_int, 0, 0, 4) + ZEND_ARG_INFO(0, radius_handle) + ZEND_ARG_INFO(0, vendor) + ZEND_ARG_INFO(0, type) + ZEND_ARG_INFO(0, value) + ZEND_ARG_INFO(0, options) + ZEND_ARG_INFO(0, tag) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_put_vendor_attr, 0, 0, 4) + ZEND_ARG_INFO(0, radius_handle) + ZEND_ARG_INFO(0, vendor) + ZEND_ARG_INFO(0, type) + ZEND_ARG_INFO(0, value) + ZEND_ARG_INFO(0, options) + ZEND_ARG_INFO(0, tag) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_put_vendor_addr, 0, 0, 4) + ZEND_ARG_INFO(0, radius_handle) + ZEND_ARG_INFO(0, vendor) + ZEND_ARG_INFO(0, type) + ZEND_ARG_INFO(0, addr) + ZEND_ARG_INFO(0, options) + ZEND_ARG_INFO(0, tag) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_send_request, 0, 0, 1) + ZEND_ARG_INFO(0, radius_handle) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_get_attr, 0, 0, 1) + ZEND_ARG_INFO(0, radius_handle) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_get_tagged_attr_data, 0, 0, 1) + ZEND_ARG_INFO(0, data) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_get_tagged_attr_tag, 0, 0, 1) + ZEND_ARG_INFO(0, data) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_get_vendor_attr, 0, 0, 1) + ZEND_ARG_INFO(0, data) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_cvt_addr, 0, 0, 1) + ZEND_ARG_INFO(0, data) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_cvt_int, 0, 0, 1) + ZEND_ARG_INFO(0, data) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_cvt_string, 0, 0, 1) + ZEND_ARG_INFO(0, data) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_salt_encrypt_attr, 0, 0, 2) + ZEND_ARG_INFO(0, radius_handle) + ZEND_ARG_INFO(0, data) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_request_authenticator, 0, 0, 1) + ZEND_ARG_INFO(0, radius_handle) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_server_secret, 0, 0, 1) + ZEND_ARG_INFO(0, radius_handle) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_demangle, 0, 0, 2) + ZEND_ARG_INFO(0, radius_handle) + ZEND_ARG_INFO(0, mangled) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_radius_demangle_mppe_key, 0, 0, 2) + ZEND_ARG_INFO(0, radius_handle) + ZEND_ARG_INFO(0, mangled) +ZEND_END_ARG_INFO() + +/* }}} */ + + /* {{{ radius_functions[] * * Every user visible function must have an entry in radius_functions[]. */ zend_function_entry radius_functions[] = { - PHP_FE(radius_auth_open, NULL) - PHP_FE(radius_acct_open, NULL) - PHP_FE(radius_close, NULL) - PHP_FE(radius_strerror, NULL) - PHP_FE(radius_config, NULL) - PHP_FE(radius_add_server, NULL) - PHP_FE(radius_create_request, NULL) - PHP_FE(radius_put_string, NULL) - PHP_FE(radius_put_int, NULL) - PHP_FE(radius_put_attr, NULL) - PHP_FE(radius_put_addr, NULL) - PHP_FE(radius_put_vendor_string, NULL) - PHP_FE(radius_put_vendor_int, NULL) - PHP_FE(radius_put_vendor_attr, NULL) - PHP_FE(radius_put_vendor_addr, NULL) - PHP_FE(radius_send_request, NULL) - PHP_FE(radius_get_attr, NULL) - PHP_FE(radius_get_tagged_attr_data, NULL) - PHP_FE(radius_get_tagged_attr_tag, NULL) - PHP_FE(radius_get_vendor_attr, NULL) - PHP_FE(radius_cvt_addr, NULL) - PHP_FE(radius_cvt_int, NULL) - PHP_FE(radius_cvt_string, NULL) - PHP_FE(radius_salt_encrypt_attr, NULL) - PHP_FE(radius_request_authenticator, NULL) - PHP_FE(radius_server_secret, NULL) - PHP_FE(radius_demangle, NULL) - PHP_FE(radius_demangle_mppe_key, NULL) + PHP_FE(radius_auth_open, arginfo_radius_auth_open) + PHP_FE(radius_acct_open, arginfo_radius_acct_open) + PHP_FE(radius_close, arginfo_radius_close) + PHP_FE(radius_strerror, arginfo_radius_strerror) + PHP_FE(radius_config, arginfo_radius_config) + PHP_FE(radius_add_server, arginfo_radius_add_server) + PHP_FE(radius_create_request, arginfo_radius_create_request) + PHP_FE(radius_put_string, arginfo_radius_put_string) + PHP_FE(radius_put_int, arginfo_radius_put_int) + PHP_FE(radius_put_attr, arginfo_radius_put_attr) + PHP_FE(radius_put_addr, arginfo_radius_put_addr) + PHP_FE(radius_put_vendor_string, arginfo_radius_put_vendor_string) + PHP_FE(radius_put_vendor_int, arginfo_radius_put_vendor_int) + PHP_FE(radius_put_vendor_attr, arginfo_radius_put_vendor_attr) + PHP_FE(radius_put_vendor_addr, arginfo_radius_put_vendor_addr) + PHP_FE(radius_send_request, arginfo_radius_get_attr) + PHP_FE(radius_get_attr, arginfo_radius_get_attr) + PHP_FE(radius_get_tagged_attr_data, arginfo_radius_get_tagged_attr_data) + PHP_FE(radius_get_tagged_attr_tag, arginfo_radius_get_tagged_attr_tag) + PHP_FE(radius_get_vendor_attr, arginfo_radius_get_vendor_attr) + PHP_FE(radius_cvt_addr, arginfo_radius_cvt_addr) + PHP_FE(radius_cvt_int, arginfo_radius_cvt_int) + PHP_FE(radius_cvt_string, arginfo_radius_cvt_string) + PHP_FE(radius_salt_encrypt_attr, arginfo_radius_salt_encrypt_attr) + PHP_FE(radius_request_authenticator, arginfo_radius_request_authenticator) + PHP_FE(radius_server_secret, arginfo_radius_server_secret) + PHP_FE(radius_demangle, arginfo_radius_demangle) + PHP_FE(radius_demangle_mppe_key, arginfo_radius_demangle_mppe_key) {NULL, NULL, NULL} /* Must be the last line in radius_functions[] */ }; /* }}} */ --- a/php_radius.h 2016-02-15 10:11:50.000000000 -0500 +++ b/php_radius.h 2022-12-13 10:24:33.505295274 -0500 @@ -96,6 +96,14 @@ #define RADIUS_OPTION_TAGGED RAD_OPTION_TAG #define RADIUS_OPTION_SALT RAD_OPTION_SALT +#ifndef TSRMLS_D +#define TSRMLS_D void +#define TSRMLS_DC +#define TSRMLS_C +#define TSRMLS_CC +#define TSRMLS_FETCH() +#endif + #endif /* PHP_RADIUS_H */ --- a/radlib_compat.h 2016-02-15 10:11:50.000000000 -0500 +++ b/radlib_compat.h 2022-12-13 10:24:33.505295274 -0500 @@ -83,6 +83,14 @@ } while (0) #endif +#ifndef TSRMLS_D +#define TSRMLS_D void +#define TSRMLS_DC +#define TSRMLS_C +#define TSRMLS_CC +#define TSRMLS_FETCH() +#endif + #endif --- a/tests/server/fake_server.php 2016-02-15 10:11:50.000000000 -0500 +++ b/tests/server/fake_server.php 2022-12-13 10:46:50.933484601 -0500 @@ -321,7 +321,7 @@ * * @return boolean */ - function skip() { + static function skip() { return !(function_exists('socket_create') && function_exists('pcntl_fork') && function_exists('radius_acct_open')); }