mirror of
https://github.com/apache/httpd.git
synced 2025-08-06 11:06:17 +00:00
revert 759711 and 759713... don't require apr2
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@760026 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
@ -26,7 +26,6 @@
|
|||||||
#include "apr_thread_proc.h"
|
#include "apr_thread_proc.h"
|
||||||
#include "apr_strings.h"
|
#include "apr_strings.h"
|
||||||
#include "apr_portable.h"
|
#include "apr_portable.h"
|
||||||
#include "apr_perms_set.h"
|
|
||||||
#ifdef HAVE_PWD_H
|
#ifdef HAVE_PWD_H
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
#endif
|
#endif
|
||||||
@ -209,19 +208,71 @@ AP_DECLARE(apr_status_t) ap_os_create_privileged_process(
|
|||||||
attr, ugid, p);
|
attr, ugid, p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* XXX move to APR and externalize (but implement differently :) ) */
|
||||||
|
static apr_lockmech_e proc_mutex_mech(apr_proc_mutex_t *pmutex)
|
||||||
|
{
|
||||||
|
const char *mechname = apr_proc_mutex_name(pmutex);
|
||||||
|
|
||||||
|
if (!strcmp(mechname, "sysvsem")) {
|
||||||
|
return APR_LOCK_SYSVSEM;
|
||||||
|
}
|
||||||
|
else if (!strcmp(mechname, "flock")) {
|
||||||
|
return APR_LOCK_FLOCK;
|
||||||
|
}
|
||||||
|
return APR_LOCK_DEFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
AP_DECLARE(apr_status_t) ap_unixd_set_proc_mutex_perms(apr_proc_mutex_t *pmutex)
|
AP_DECLARE(apr_status_t) ap_unixd_set_proc_mutex_perms(apr_proc_mutex_t *pmutex)
|
||||||
{
|
{
|
||||||
apr_status_t rv = APR_SUCCESS;
|
|
||||||
if (!geteuid()) {
|
if (!geteuid()) {
|
||||||
rv = APR_PERMS_SET_FN(proc_mutex)(pmutex,
|
apr_lockmech_e mech = proc_mutex_mech(pmutex);
|
||||||
APR_FPROT_UWRITE | APR_FPROT_UREAD,
|
|
||||||
ap_unixd_config.user_id,
|
switch(mech) {
|
||||||
ap_unixd_config.group_id);
|
#if APR_HAS_SYSVSEM_SERIALIZE
|
||||||
if (rv == APR_ENOTIMPL) {
|
case APR_LOCK_SYSVSEM:
|
||||||
rv = APR_SUCCESS;
|
{
|
||||||
|
apr_os_proc_mutex_t ospmutex;
|
||||||
|
#if !APR_HAVE_UNION_SEMUN
|
||||||
|
union semun {
|
||||||
|
long val;
|
||||||
|
struct semid_ds *buf;
|
||||||
|
unsigned short *array;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
union semun ick;
|
||||||
|
struct semid_ds buf;
|
||||||
|
|
||||||
|
apr_os_proc_mutex_get(&ospmutex, pmutex);
|
||||||
|
buf.sem_perm.uid = ap_unixd_config.user_id;
|
||||||
|
buf.sem_perm.gid = ap_unixd_config.group_id;
|
||||||
|
buf.sem_perm.mode = 0600;
|
||||||
|
ick.buf = &buf;
|
||||||
|
if (semctl(ospmutex.crossproc, 0, IPC_SET, ick) < 0) {
|
||||||
|
return errno;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return rv;
|
break;
|
||||||
|
#endif
|
||||||
|
#if APR_HAS_FLOCK_SERIALIZE
|
||||||
|
case APR_LOCK_FLOCK:
|
||||||
|
{
|
||||||
|
const char *lockfile = apr_proc_mutex_lockfile(pmutex);
|
||||||
|
|
||||||
|
if (lockfile) {
|
||||||
|
if (chown(lockfile, ap_unixd_config.user_id,
|
||||||
|
-1 /* no gid change */) < 0) {
|
||||||
|
return errno;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
/* do nothing */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return APR_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
AP_DECLARE(apr_status_t) ap_unixd_set_global_mutex_perms(apr_global_mutex_t *gmutex)
|
AP_DECLARE(apr_status_t) ap_unixd_set_global_mutex_perms(apr_global_mutex_t *gmutex)
|
||||||
|
Reference in New Issue
Block a user