Download | Plain Text | No Line Numbers
- --- pinba.cc 2010-11-26 10:05:25.000000000 +0100
- +++ pinba.cc 2011-03-18 14:27:34.000000000 +0100
- @@ -103,6 +103,7 @@
-
- #define timeval_cvt(a, b) do { (a)->tv_sec = (b)->tv_sec; (a)->tv_usec = (b)->tv_usec; } while (0);
- #define timeval_to_float(t) (float)(t).tv_sec + (float)(t).tv_usec / 1000000.0
- +#define min(a, b) (a < b ? a : b)
-
- /* {{{ internal funcs */
-
- @@ -1255,7 +1256,7 @@
- PHP_FE(pinba_timer_get_info, NULL)
- PHP_FE(pinba_timers_stop, NULL)
- PHP_FE(pinba_script_name_set, NULL)
- - PHP_FE(pinba_hostname_set, NULL)
- + //PHP_FE(pinba_hostname_set, NULL)
- {NULL, NULL, NULL}
- };
- /* }}} */
- @@ -1396,6 +1397,17 @@
- zval **tmp;
- struct timeval t;
- struct rusage u;
- + zval suexec_user;
- + uid_t euid;
- + int user_len;
- + struct passwd *pw = NULL;
- +#if defined(ZTS) && defined(_SC_GETPW_R_SIZE_MAX) && defined(HAVE_GETPWUID_R)
- + struct passwd _pw;
- + struct passwd *retpwptr = NULL;
- + long pwbuflen;
- + char *pwbuf = NULL;
- + int ret;
- +#endif
-
- PINBA_G(timers_stopped) = 0;
-
- @@ -1420,13 +1432,45 @@
- PINBA_G(server_name) = NULL;
- PINBA_G(script_name) = NULL;
-
- - gethostname(PINBA_G(host_name), sizeof(PINBA_G(host_name)));
- - PINBA_G(host_name)[sizeof(PINBA_G(host_name))] = '\0';
- -
- #if PHP_MAJOR_VERSION >= 5
- zend_is_auto_global("_SERVER", sizeof("_SERVER") - 1 TSRMLS_CC);
- #endif
-
- + PINBA_G(host_name)[0] = '\0';
- + if (zend_get_constant("SUEXEC_USER", sizeof("SUEXEC_USER") - 1, &suexec_user TSRMLS_CC)) {
- + if (Z_TYPE(suexec_user) == IS_STRING && Z_STRLEN(suexec_user) != 0) {
- + user_len = min(Z_STRLEN(suexec_user), sizeof(PINBA_G(host_name)));
- + memcpy(PINBA_G(host_name), Z_STRVAL(suexec_user), user_len);
- + PINBA_G(host_name)[user_len] = '\0';
- + }
- + zval_dtor(&suexec_user);
- + }
- + if (PINBA_G(host_name)[0] == '\0') {
- + euid = geteuid();
- +#if defined(ZTS) && defined(_SC_GETPW_R_SIZE_MAX) && defined(HAVE_GETPWUID_R)
- + pwbuflen = sysconf(_SC_GETPW_R_SIZE_MAX);
- + if (pwbuflen > 1) {
- + pwbuf = (char *)emalloc(pwbuflen);
- + ret = getpwuid_r(euid, &_pw, pwbuf, pwbuflen, &retpwptr);
- + if (ret == 0 && retpwptr != NULL) {
- + pw = &_pw;
- + }
- + }
- +#else
- + pw = getpwuid(euid);
- +#endif
- + if (pw != NULL) {
- + user_len = (pw->pw_name == NULL) ? 0 : min(strlen(pw->pw_name), sizeof(PINBA_G(host_name)));
- + memcpy(PINBA_G(host_name), pw->pw_name, user_len);
- + PINBA_G(host_name)[user_len] = '\0';
- + }
- +#if defined(ZTS) && defined(_SC_GETPW_R_SIZE_MAX) && defined(HAVE_GETPWUID_R)
- + if (pwbuf != NULL) {
- + efree(pwbuf);
- + }
- +#endif
- + }
- +
- if (PG(http_globals)[TRACK_VARS_SERVER] && zend_hash_find(HASH_OF(PG(http_globals)[TRACK_VARS_SERVER]), "SCRIPT_NAME", sizeof("SCRIPT_NAME"), (void **) &tmp) != FAILURE && Z_TYPE_PP(tmp) == IS_STRING && Z_STRLEN_PP(tmp) > 0) {
- PINBA_G(script_name) = estrndup(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp));
- }
-