diff --git a/radius.c b/radius.c index eb30e69..174280e 100644 --- a/radius.c +++ b/radius.c @@ -42,6 +42,7 @@ any other GPL-like (LGPL, GPL2) License. #include "php_radius.h" #include "radlib.h" #include "radlib_private.h" +#include "radius_arginfo.h" #ifndef PHP_WIN32 #include @@ -68,203 +69,6 @@ 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, 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[] */ -}; -/* }}} */ - /* {{{ radius_module_entry */ zend_module_entry radius_module_entry = { @@ -272,7 +76,7 @@ zend_module_entry radius_module_entry = { STANDARD_MODULE_HEADER, #endif "radius", - radius_functions, + ext_functions, PHP_MINIT(radius), PHP_MSHUTDOWN(radius), NULL, diff --git a/radius.stub.php b/radius.stub.php new file mode 100644 index 0000000..71c8999 --- /dev/null +++ b/radius.stub.php @@ -0,0 +1,126 @@ +resp_len = recvfrom(h->fd, h->response, @@ -1033,7 +1033,7 @@ rad_put_vendor_attr(struct rad_handle *h, int vendor, int type, /* OK, allocate and start building the attribute. */ attr = emalloc(va_len); if (attr == NULL) { - generr(h, "malloc failure (%d bytes)", va_len); + generr(h, "malloc failure (%lu bytes)", va_len); goto end; } @@ -1216,12 +1216,12 @@ rad_demangle_mppe_key(struct rad_handle *h, const void *mangled, size_t mlen, u_ */ *len = *P; if (*len > mlen - 1) { - generr(h, "Mangled data seems to be garbage %d %d", *len, mlen-1); + generr(h, "Mangled data seems to be garbage %lu %lu", *len, mlen-1); return -1; } if (*len > MPPE_KEY_LEN) { - generr(h, "Key to long (%d) for me max. %d", *len, MPPE_KEY_LEN); + generr(h, "Key to long (%lu) for me max. %d", *len, MPPE_KEY_LEN); return -1; } @@ -1233,7 +1233,7 @@ int rad_salt_value(struct rad_handle *h, const char *in, size_t len, struct rad_ { char authenticator[16]; size_t i; - char intermediate[16]; + unsigned char intermediate[16]; const char *in_pos; MD5_CTX md5; char *out_pos;