From d3e9ee5fddf6e243da3e5b0d69a800255533c582 Mon Sep 17 00:00:00 2001 From: Muhammad Moinur Rahman Date: Thu, 18 Jan 2024 10:36:59 +0100 Subject: [PATCH] All FreeBSD do not implement the function sysconf with arguments _SC_GETGR_R_SIZE_MAX , _SC_TTY_NAME_MAX:_SC_GETPW_R_SIZE_MAX. php use this sysconf() in: main/main.c php_get_current_user() main/fopen_wrappers.c php_fopen_primary_script() ext/posix/posix.c posix_getpwnam(), posix_getpwuid(), posix_getgrnam(), posix_getgrgid() ext/standard/filestat.c php_get_uid_by_name(), php_get_gid_by_name() --- ext/posix/posix.c | 20 ++++++++++++++++++++ ext/standard/filestat.c | 8 ++++++++ main/fopen_wrappers.c | 4 ++++ main/main.c | 4 ++++ 4 files changed, 36 insertions(+) diff --git a/ext/posix/posix.c b/ext/posix/posix.c index 8c111ea5acf53..1f5efc0bcd8fe 100644 --- a/ext/posix/posix.c +++ b/ext/posix/posix.c @@ -477,7 +477,11 @@ PHP_FUNCTION(posix_ttyname) #if defined(ZTS) && defined(HAVE_TTYNAME_R) && defined(_SC_TTY_NAME_MAX) buflen = sysconf(_SC_TTY_NAME_MAX); if (buflen < 1) { +#if defined(__FreeBSD__) && defined(_SC_PAGESIZE) + buflen = sysconf(_SC_PAGESIZE); +#else RETURN_FALSE; +#endif } p = emalloc(buflen); @@ -784,7 +788,11 @@ PHP_FUNCTION(posix_getgrnam) #if defined(ZTS) && defined(HAVE_GETGRNAM_R) && defined(_SC_GETGR_R_SIZE_MAX) buflen = sysconf(_SC_GETGR_R_SIZE_MAX); if (buflen < 1) { +#if defined(__FreeBSD__) && defined(_SC_PAGESIZE) + buflen = sysconf(_SC_PAGESIZE); +#else RETURN_FALSE; +#endif } buf = emalloc(buflen); try_again: @@ -840,7 +848,11 @@ PHP_FUNCTION(posix_getgrgid) grbuflen = sysconf(_SC_GETGR_R_SIZE_MAX); if (grbuflen < 1) { +#if defined(__FreeBSD__) && defined(_SC_PAGESIZE) + grbuflen = sysconf(_SC_PAGESIZE); +#else RETURN_FALSE; +#endif } grbuf = emalloc(grbuflen); @@ -914,7 +926,11 @@ PHP_FUNCTION(posix_getpwnam) #if defined(ZTS) && defined(_SC_GETPW_R_SIZE_MAX) && defined(HAVE_GETPWNAM_R) buflen = sysconf(_SC_GETPW_R_SIZE_MAX); if (buflen < 1) { +#if defined(__FreeBSD__) && defined(_SC_PAGESIZE) + buflen = sysconf(_SC_PAGESIZE); +#else RETURN_FALSE; +#endif } buf = emalloc(buflen); pw = &pwbuf; @@ -969,7 +985,11 @@ PHP_FUNCTION(posix_getpwuid) #if defined(ZTS) && defined(_SC_GETPW_R_SIZE_MAX) && defined(HAVE_GETPWUID_R) pwbuflen = sysconf(_SC_GETPW_R_SIZE_MAX); if (pwbuflen < 1) { +#if defined(__FreeBSD__) && defined(_SC_PAGESIZE) + pwbuflen = sysconf(_SC_PAGESIZE); +#else RETURN_FALSE; +#endif } pwbuf = emalloc(pwbuflen); diff --git a/ext/standard/filestat.c b/ext/standard/filestat.c index 62be6f01c887f..0ae4c95fa75e6 100644 --- a/ext/standard/filestat.c +++ b/ext/standard/filestat.c @@ -281,7 +281,11 @@ PHPAPI zend_result php_get_gid_by_name(const char *name, gid_t *gid) char *grbuf; if (grbuflen < 1) { +#if defined(__FreeBSD__) && defined(_SC_PAGESIZE) + grbuflen = sysconf(_SC_PAGESIZE); +#else return FAILURE; +#endif } grbuf = emalloc(grbuflen); @@ -407,7 +411,11 @@ PHPAPI zend_result php_get_uid_by_name(const char *name, uid_t *uid) char *pwbuf; if (pwbuflen < 1) { +#if defined(__FreeBSD__) && defined(_SC_PAGESIZE) + pwbuflen = sysconf(_SC_PAGESIZE); +#else return FAILURE; +#endif } pwbuf = emalloc(pwbuflen); diff --git a/main/fopen_wrappers.c b/main/fopen_wrappers.c index d7644dcd06cd3..dba4a7f018c64 100644 --- a/main/fopen_wrappers.c +++ b/main/fopen_wrappers.c @@ -381,7 +381,11 @@ PHPAPI int php_fopen_primary_script(zend_file_handle *file_handle) char *pwbuf; if (pwbuflen < 1) { +#if defined(__FreeBSD__) && defined(_SC_PAGESIZE) + pwbuflen = sysconf(_SC_PAGESIZE); +#else return FAILURE; +#endif } pwbuf = emalloc(pwbuflen); diff --git a/main/main.c b/main/main.c index 6633689d85d1d..1e52e0a076ad1 100644 --- a/main/main.c +++ b/main/main.c @@ -1461,7 +1461,11 @@ PHPAPI char *php_get_current_user(void) char *pwbuf; if (pwbuflen < 1) { +#if defined(__FreeBSD__) && defined(_SC_PAGESIZE) + pwbuflen = sysconf(_SC_PAGESIZE); +#else return ""; +#endif } pwbuf = emalloc(pwbuflen); if (getpwuid_r(pstat->st_uid, &_pw, pwbuf, pwbuflen, &retpwptr) != 0) {