com php-src: Merge branch 'PHP-5.5' into PHP-5.6: sapi/litespeed/lsapilib.c sapi/litespeed/lsapilib.h win32/build/confutils.js

From: Date: Thu, 10 Jul 2014 20:03:45 +0000
Subject: com php-src: Merge branch 'PHP-5.5' into PHP-5.6: sapi/litespeed/lsapilib.c sapi/litespeed/lsapilib.h win32/build/confutils.js
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-79405@lists.php.net to get a copy of this message
Commit: 552cfcc578b5372ecae08aaf600df8b469f20100 Author: Anatol Belski <ab@php.net> Thu, 10 Jul 2014 22:03:45 +0200 Parents: 232661bf8834bb98e970079ce66653fe06af50e6 cc67cf6322178dfa38ddc3428c7ac5934db34cb4 Branches: master Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=552cfcc578b5372ecae08aaf600df8b469f20100 Log: Merge branch 'PHP-5.5' into PHP-5.6 * PHP-5.5: force ext_dep.js prepend to configure.js in phpize mode cleanup file headers. Do not kill children process in pre-fork mode when parent process quit. update to LSAPI 6.6 Update LiteSpeed SAPI code to V6.4 cleanup file headers. Do not kill children process in pre-fork mode when parent process quit.. update to LSAPI 6.6 Update LiteSpeed SAPI code to V6.4 Conflicts: sapi/litespeed/lsapi_main.c sapi/litespeed/lsapilib.c Changed paths: MM sapi/litespeed/lsapilib.c MM sapi/litespeed/lsapilib.h MM win32/build/confutils.js Diff: diff --cc sapi/litespeed/lsapilib.c index 8a10ac6,92c169f..e405d63 --- a/sapi/litespeed/lsapilib.c +++ b/sapi/litespeed/lsapilib.c @@@ -876,6 -868,6 +868,190 @@@ static int setUID_LVE(LSAPI_Request * p #endif return 0; } ++#endif ++ ++ ++static int setUID_LVE(LSAPI_Request * pReq, uid_t uid, gid_t gid, const char * pChroot) ++{ ++ int rv; ++ struct passwd * pw; ++ pw = getpwuid( uid ); ++#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__gnu_linux__) ++ if ( s_lve ) ++ { ++ if( lsapi_enterLVE( pReq, uid ) == -1 ) ++ return -1; ++ if ( pw && fp_lve_jail) ++ { ++ rv = lsapi_jailLVE( pReq, uid, pw ); ++ if ( rv == -1 ) ++ return -1; ++ if (( rv == 1 )&&(s_enable_lve == LSAPI_CAGEFS_NO_SUEXEC )) //this mode only use cageFS, does not use suEXEC ++ { ++ uid = s_defaultUid; ++ gid = s_defaultGid; ++ pw = getpwuid( uid ); ++ } ++ } ++ } ++#endif ++ //if ( !uid || !gid ) //do not allow root ++ //{ ++ // return -1; ++ //} ++ ++#if defined(__FreeBSD__ ) || defined(__NetBSD__) || defined(__OpenBSD__) \ ++ || defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) ++ if ( s_enable_core_dump ) ++ lsapi_enable_core_dump(); ++#endif ++ ++ rv = setgid(gid); ++ if (rv == -1) ++ { ++ LSAPI_perror_r(pReq, "LSAPI: setgid()", NULL); ++ return -1; ++ } ++ if ( pw && (pw->pw_gid == gid )) ++ { ++ rv = initgroups( pw->pw_name, gid ); ++ if (rv == -1) ++ { ++ LSAPI_perror_r(pReq, "LSAPI: initgroups()", NULL); ++ return -1; ++ } ++ } ++ else ++ { ++ rv = setgroups(1, &gid); ++ if (rv == -1) ++ { ++ LSAPI_perror_r(pReq, "LSAPI: setgroups()", NULL); ++ } ++ } ++ if ( pChroot ) ++ { ++ rv = chroot( pChroot ); ++ if ( rv == -1 ) ++ { ++ LSAPI_perror_r(pReq, "LSAPI: chroot()", NULL); ++ return -1; ++ } ++ } ++ rv = setuid(uid); ++ if (rv == -1) ++ { ++ LSAPI_perror_r(pReq, "LSAPI: setuid()", NULL); ++ return -1; ++ } ++#if defined(linux) || defined(__linux) || defined(__linux__) || defined(__gnu_linux__) ++ if ( s_enable_core_dump ) ++ lsapi_enable_core_dump(); ++#endif ++ return 0; ++} ++ ++static int lsapi_suexec_auth( LSAPI_Request *pReq, ++ char * pAuth, int len, char * pUgid, int ugidLen ) ++{ ++ lsapi_MD5_CTX md5ctx; ++ unsigned char achMD5[16]; ++ if ( len < 32 ) ++ return -1; ++ memmove( achMD5, pAuth + 16, 16 ); ++ memmove( pAuth + 16, s_pSecret, 16 ); ++ lsapi_MD5Init( &md5ctx ); ++ lsapi_MD5Update( &md5ctx, (unsigned char *)pAuth, 32 ); ++ lsapi_MD5Update( &md5ctx, (unsigned char *)pUgid, 8 ); ++ lsapi_MD5Final( (unsigned char *)pAuth + 16, &md5ctx); ++ if ( memcmp( achMD5, pAuth + 16, 16 ) == 0 ) ++ return 0; ++ return 1; ++} ++ ++ ++static int lsapi_changeUGid( LSAPI_Request * pReq ) ++{ ++ int uid = s_defaultUid; ++ int gid = s_defaultGid; ++ const char * pChroot = NULL; ++ struct LSAPI_key_value_pair * pEnv; ++ struct LSAPI_key_value_pair * pAuth; ++ int i; ++ if ( s_uid ) ++ return 0; ++ //with special ID 0x00 ++ //authenticate the suEXEC request; ++ //first one should be MD5( nonce + lscgid secret ) ++ //remember to clear the secret after verification ++ //it should be set at the end of special env ++ i = pReq->m_pHeader->m_cntSpecialEnv - 1; ++ if ( i >= 0 ) ++ { ++ pEnv = pReq->m_pSpecialEnvList + i; ++ if (( *pEnv->pKey == '\000' )&& ++ ( strcmp( pEnv->pKey+1, "SUEXEC_AUTH" ) == 0 )) ++ { ++ --pReq->m_pHeader->m_cntSpecialEnv; ++ pAuth = pEnv--; ++ if (( *pEnv->pKey == '\000' )&& ++ ( strcmp( pEnv->pKey+1, "SUEXEC_UGID" ) == 0 )) ++ { ++ --pReq->m_pHeader->m_cntSpecialEnv; ++ uid = *(uint32_t *)pEnv->pValue; ++ gid = *(((uint32_t *)pEnv->pValue) + 1 ); ++ //fprintf( stderr, "LSAPI: SUEXEC_UGID set UID: %d, GID: %d\n", uid, gid ); ++ } ++ else ++ { ++ fprintf( stderr, "LSAPI: missing SUEXEC_UGID env, use default user!\n" ); ++ pEnv = NULL; ++ } ++ if ( pEnv&& lsapi_suexec_auth( pReq, pAuth->pValue, pAuth->valLen, pEnv->pValue, pEnv->valLen ) == 0 ) ++ { ++ //read UID, GID from specialEnv ++ ++ } ++ else ++ { ++ //authentication error ++ fprintf( stderr, "LSAPI: SUEXEC_AUTH authentication failed, use default user!\n" ); ++ uid = 0; ++ } ++ } ++ else ++ { ++ //fprintf( stderr, "LSAPI: no SUEXEC_AUTH env, use default user!\n" ); ++ } ++ } ++ ++ ++ if ( !uid ) ++ { ++ uid = s_defaultUid; ++ gid = s_defaultGid; ++ } ++ ++ //change uid ++ if ( setUID_LVE( pReq, uid, gid, pChroot ) == -1 ) ++ { ++ return -1; ++ } ++ ++ s_uid = uid; ++ ++ return 0; ++ ++} ++ ++static int parseContentLenFromHeader(LSAPI_Request * pReq) ++{ ++ const char * pContentLen = LSAPI_GetHeader_r( pReq, H_CONTENT_LENGTH ); ++ if ( pContentLen ) ++ pReq->m_reqBodyLen = strtoll( pContentLen, NULL, 10 ); ++ return 0; ++} ++ static int lsapi_suexec_auth( LSAPI_Request *pReq, char * pAuth, int len, char * pUgid, int ugidLen ) @@@ -2496,7 -2498,11 +2682,10 @@@ static lsapi_child_status * find_child_ while( pStatus < pEnd ) { if ( pStatus->m_pid == pid ) + { + if ( pStatus + 1 > g_prefork_server->m_pChildrenStatusCur ) + g_prefork_server->m_pChildrenStatusCur = pStatus + 1; return pStatus; - } ++pStatus; } return NULL; diff --cc sapi/litespeed/lsapilib.h index efa1f53,cae1863..02543ef --- a/sapi/litespeed/lsapilib.h +++ b/sapi/litespeed/lsapilib.h @@@ -48,15 -48,7 +48,14 @@@ THEORY OF LIABILITY, WHETHER IN CONTRAC OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/*************************************************************************** + lsapilib.h - description + ------------------- + begin : Mon Feb 21 2005 + copyright : (C) 2005 by George Wang + email : gwang@litespeedtech.com + ***************************************************************************/ - #ifndef _LSAPILIB_H_ #define _LSAPILIB_H_

« previous php.cvs (#79405) next »