1
0
mirror of https://github.com/apache/httpd.git synced 2026-01-26 19:01:35 +03:00

A bit more ap_regkey and apr-ization. Fixes some new bugs where the

AP_REGKEY_CREATE flag wasn't passed for ap_regkey_open (when the key
  is expected to not yet exist), and adds the new flags arg to value_set.


git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@95937 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
William A. Rowe Jr
2002-07-02 19:03:15 +00:00
parent ad165f3ef7
commit 1828aba030
3 changed files with 32 additions and 21 deletions

View File

@@ -2157,7 +2157,7 @@ void winnt_rewrite_args(process_rec *process)
* without a drive letter. Change to the default root
* (path to apache root, above /bin) for safety.
*/
SetCurrentDirectory(def_server_root);
apr_filepath_set(def_server_root, process->pool);
/* Any other process has a console, so we don't to begin
* a Win9x service until the configuration is parsed and

View File

@@ -63,6 +63,7 @@
#include "mpm_winnt.h"
#include "apr_strings.h"
#include "apr_lib.h"
#include "ap_regkey.h"
static char *display_name = NULL;
static HANDLE stderr_thread = NULL;
@@ -76,8 +77,12 @@ static DWORD WINAPI service_stderr_thread(LPVOID hPipe)
char *errmsg = errbuf;
const char *errarg[9];
DWORD errres;
HKEY hk;
ap_regkey_t *regkey;
apr_status_t rv;
apr_pool_t *p;
apr_pool_sub_make(&p, NULL, NULL);
errarg[0] = "The Apache service named";
errarg[1] = display_name;
errarg[2] = "reported the following error:\r\n>>>";
@@ -89,23 +94,26 @@ static DWORD WINAPI service_stderr_thread(LPVOID hPipe)
errarg[8] = NULL;
/* What are we going to do in here, bail on the user? not. */
if (!RegCreateKey(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Services"
"\\EventLog\\Application\\Apache Service", &hk))
if ((rv = ap_regkey_open(&regkey, AP_REGKEY_LOCAL_MACHINE,
"SYSTEM\\CurrentControlSet\\Services\\"
"EventLog\\Application\\Apache Service",
APR_READ | APR_WRITE | APR_CREATE, p))
== APR_SUCCESS)
{
/* The stock message file */
char *netmsgkey = "%SystemRoot%\\System32\\netmsg.dll";
DWORD dwData = EVENTLOG_ERROR_TYPE | EVENTLOG_WARNING_TYPE |
EVENTLOG_INFORMATION_TYPE;
RegSetValueEx(hk, "EventMessageFile", 0, REG_EXPAND_SZ,
(LPBYTE) netmsgkey, strlen(netmsgkey) + 1);
/* The stock message file */
ap_regkey_value_set(regkey, "EventMessageFile",
"%SystemRoot%\\System32\\netmsg.dll",
AP_REGKEY_EXPAND, p);
RegSetValueEx(hk, "TypesSupported", 0, REG_DWORD,
(LPBYTE) &dwData, sizeof(dwData));
RegCloseKey(hk);
ap_regkey_value_raw_set(regkey, "TypesSupported", &dwData,
sizeof(dwData), REG_DWORD, p);
ap_regkey_close(regkey);
}
hEventSource = RegisterEventSource(NULL, "Apache Service");
hEventSource = RegisterEventSourceW(NULL, L"Apache Service");
SetEvent(stderr_ready);
@@ -145,6 +153,7 @@ static DWORD WINAPI service_stderr_thread(LPVOID hPipe)
DeregisterEventSource(hEventSource);
CloseHandle(stderr_thread);
stderr_thread = NULL;
apr_pool_destroy(p);
return 0;
}

View File

@@ -513,12 +513,12 @@ static void set_service_description(void)
"SYSTEM\\CurrentControlSet\\Services\\%s",
mpm_service_name);
rv = ap_regkey_open(&svckey, AP_REGKEY_LOCAL_MACHINE, szPath,
APR_WRITE, pconf);
APR_READ | APR_WRITE, pconf);
if (rv != APR_SUCCESS) {
return;
}
/* Attempt to set the Description value for our service */
ap_regkey_value_set(svckey, "Description", full_description, pconf);
ap_regkey_value_set(svckey, "Description", full_description, 0, pconf);
ap_regkey_close(svckey);
}
}
@@ -933,9 +933,10 @@ apr_status_t mpm_service_install(apr_pool_t *ptemp, int argc,
launch_cmd = apr_psprintf(ptemp, "\"%s\" -n %s -k runservice",
exe_path, mpm_service_name);
rv = ap_regkey_open(&key, AP_REGKEY_LOCAL_MACHINE, SERVICECONFIG9X,
APR_READ, pconf);
APR_READ | APR_WRITE | APR_CREATE, pconf);
if (rv == APR_SUCCESS) {
rv = ap_regkey_value_set(key, mpm_service_name, launch_cmd, pconf);
rv = ap_regkey_value_set(key, mpm_service_name,
launch_cmd, 0, pconf);
ap_regkey_close(key);
}
if (rv != APR_SUCCESS) {
@@ -947,14 +948,14 @@ apr_status_t mpm_service_install(apr_pool_t *ptemp, int argc,
apr_snprintf(key_name, sizeof(key_name), SERVICECONFIG, mpm_service_name);
rv = ap_regkey_open(&key, AP_REGKEY_LOCAL_MACHINE, key_name,
APR_READ, pconf);
APR_READ | APR_WRITE | APR_CREATE, pconf);
if (rv != APR_SUCCESS) {
ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
"%s: Failed to create the registry service key.",
mpm_display_name);
return (rv);
}
rv = ap_regkey_value_set(key, "ImagePath", launch_cmd, pconf);
rv = ap_regkey_value_set(key, "ImagePath", launch_cmd, 0, pconf);
if (rv != APR_SUCCESS) {
ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
"%s: Failed to store ImagePath in the registry.",
@@ -962,7 +963,8 @@ apr_status_t mpm_service_install(apr_pool_t *ptemp, int argc,
ap_regkey_close(key);
return (rv);
}
rv = ap_regkey_value_set(key, "DisplayName", mpm_display_name, pconf);
rv = ap_regkey_value_set(key, "DisplayName",
mpm_display_name, 0, pconf);
ap_regkey_close(key);
if (rv != APR_SUCCESS) {
ap_log_error(APLOG_MARK, APLOG_ERR | APLOG_STARTUP, rv, NULL,
@@ -978,7 +980,7 @@ apr_status_t mpm_service_install(apr_pool_t *ptemp, int argc,
*/
apr_snprintf(key_name, sizeof(key_name), SERVICEPARAMS, mpm_service_name);
rv = ap_regkey_open(&key, AP_REGKEY_LOCAL_MACHINE, key_name,
APR_READ, pconf);
APR_READ | APR_WRITE | APR_CREATE, pconf);
if (rv == APR_SUCCESS) {
rv = ap_regkey_value_array_set(key, "ConfigArgs", argc, argv, pconf);
ap_regkey_close(key);
@@ -1055,7 +1057,7 @@ apr_status_t mpm_service_uninstall(void)
/* TODO: assure the service is stopped before continuing */
rv = ap_regkey_open(&key, AP_REGKEY_LOCAL_MACHINE, SERVICECONFIG9X,
APR_WRITE, pconf);
APR_READ | APR_WRITE | APR_CREATE, pconf);
if (rv == APR_SUCCESS) {
rv = ap_regkey_value_remove(key, mpm_service_name, pconf);
ap_regkey_close(key);