⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 apache.cpp

📁 RESIN 3.2 最新源码
💻 CPP
字号:
/* * Copyright (c) 1999-2004 Caucho Technology.  All rights reserved. * * This file is part of Resin(R) Open Source * * Each copy or derived work must preserve the copyright notice and this * notice unmodified. * * Resin Open Source is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Resin Open Source is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty * of NON-INFRINGEMENT.  See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with Resin Open Source; if not, write to the *   Free SoftwareFoundation, Inc. *   59 Temple Place, Suite 330 *   Boston, MA 02111-1307  USA * * @author Scott Ferguson */#include <windows.h>#include <stdio.h>#include <sys/stat.h>#include "setup.h"#define HKEY_APACHE "SOFTWARE\\Apache Group\\Apache"#define HKEY_APACHE_HOME "ServerRoot"static char *reg_query_string(HKEY key, char *subkey, char *value){	char buf[1024];	DWORD len = sizeof buf;	DWORD type;	int rc = RegQueryValueEx(key, subkey, 0, &type, (LPBYTE) buf, &len);	if (rc != ERROR_SUCCESS || type != REG_SZ)		return 0;	strcpy(value, buf);	return value;}static HKEYreg_lookup(HKEY hkey, char *path){	HKEY newKey;	DWORD rc;	rc = RegOpenKeyEx(hkey, path, 0, KEY_QUERY_VALUE|KEY_ENUMERATE_SUB_KEYS, &newKey);	if (rc != ERROR_SUCCESS)		return 0;	return newKey;}static intget_apache_registry(char *home, int size){	HKEY hKeyApache;	char version[MAX_PATH + 1];	char bestVersion[1024];	int index = 0;	HKEY hKeyVersion = 0;		if (! (hKeyApache = reg_lookup(HKEY_LOCAL_MACHINE, HKEY_APACHE)))		return 0;	bestVersion[0] = 0;	while ((RegEnumKey(hKeyApache, index++, version, sizeof(version))) == ERROR_SUCCESS) {		if (strcmp(version, bestVersion) > 0)			strcpy(bestVersion, version);	}	if (! (hKeyVersion = reg_lookup(hKeyApache, bestVersion)))		return 0;	if (! reg_query_string(hKeyVersion, HKEY_APACHE_HOME, home))		return 0;	return 1;}char *get_apache_home(){	char buf[1024];	char newBuf[1024];	WIN32_FIND_DATA findData;	if (! get_apache_registry(buf, sizeof(buf))) {		struct stat st;		strcpy(newBuf, "\\Program Files\\Apache Group\\Apache2");		if (! stat(newBuf, &st)) {		  return strdup(newBuf);		}		strcpy(newBuf, "\\Program Files\\Apache Group\\Apache");		if (! stat(newBuf, &st)) {		  return strdup(newBuf);		}		return 0;	}	/*	 * The Apache registry stores the path in the short form, so	 * we'll change to the long form so users don't go nuts.	 */	char *ptr = buf;	newBuf[0] = 0;	if (buf[1] == ':') {		strncpy(newBuf, buf, 2);		newBuf[2] = 0;		ptr += 2;	}	while (*ptr) {		if (*ptr == '/' || *ptr == '\\')			ptr++;		char old;		char *next = 0;		if ((next = strchr(ptr, '/')) || (next = strchr(ptr, '\\'))) {			old = *next;			*next = 0;		}		else {			old = 0;			next = ptr + strlen(ptr);		}				FindFirstFile(buf, &findData);		strcat(newBuf, "\\");		strcat(newBuf, findData.cFileName);		if (old)			*next++ = old;		ptr = next;	}	return strdup(newBuf);}char *configure_apache(HWND hDlg, char *resin_home, char *apache_home){	char buf[1024];    char esc_resin_home[1024];	FILE *is;	FILE *os;    int i, j;	int isApache2 = 0;	char *apache_version = "apache-2.0";	isApache2 = (strstr(apache_home, "Apache2") != 0);	if (isApache2)		apache_version = "apache-2.0";	else		apache_version = "apache-1.3";	    j = 0;    for (i = 0; resin_home[i]; i++) {	if (resin_home[i] == '\\')		esc_resin_home[j++] = '/';        else                esc_resin_home[j++] = resin_home[i];    }    esc_resin_home[j] = 0;	int isEtc = 0;		is = fopen(rsprintf(buf, "%s/etc/httpd.conf", apache_home), "r");	if (is) {		isEtc = 1;		os = fopen(rsprintf(buf, "%s/etc/httpd.conf.bak", apache_home), "w+");	}	else {		is = fopen(rsprintf(buf, "%s/conf/httpd.conf", apache_home), "r");		if (is)			os = fopen(rsprintf(buf, "%s/conf/httpd.conf.bak", apache_home), "w+");	}	if (! is)		return "Can't find Apache httpd.conf";	if (! os) {		fclose(os);		return "Can't write Apache httpd.conf.bak";	}	int lastAddModule = 0;	int lastLoadModule = 0;	int hasCaucho = 0;	int line = 0;	while (fgets(buf, sizeof(buf), is)) {		fputs(buf, os);		line++;		char cmd[1024];		char module[1024];		char file[1024];		int args = sscanf(buf, "%s%s%s", cmd, module, file);				if (args >= 2 && ! strcmp(cmd, "LoadModule") && ! strcmp(module, "caucho_module"))			hasCaucho = 1;		if (args >= 3 && (! strcmp(cmd, "LoadModule") || ! strcmp(cmd, "#LoadModule")))			lastLoadModule = line;		if (args >= 2 && (! strcmp(cmd, "AddModule") || ! strcmp(cmd, "#AddModule")))			lastAddModule = line;	}	if (lastAddModule < lastLoadModule)	  lastAddModule = lastLoadModule;	fclose(is);	fclose(os);	if (hasCaucho)		return 0;	if (isEtc) {		is = fopen(rsprintf(buf, "%s/etc/httpd.conf.bak", apache_home), "r");		os = fopen(rsprintf(buf, "%s/etc/httpd.conf", apache_home), "w+");	}	else {		is = fopen(rsprintf(buf, "%s/conf/httpd.conf.bak", apache_home), "r");		os = fopen(rsprintf(buf, "%s/conf/httpd.conf", apache_home), "w+");	}	line = 0;	while (fgets(buf, sizeof(buf), is)) {		fputs(buf, os);		line++;		if (line == lastLoadModule)			fprintf(os, "LoadModule caucho_module \"%s/win32/%s/mod_caucho.dll\"\n", 				esc_resin_home, apache_version);		if (line == lastAddModule && ! isApache2)			fprintf(os, "AddModule mod_caucho.c\n");	}	if (! lastLoadModule)		fprintf(os, "LoadModule caucho_module \"%s/win32/%s/mod_caucho.dll\"\n", 				esc_resin_home, apache_version);	/*	if (! lastAddModule && ! isApache2)		fprintf(os, "AddModule mod_caucho.c\n");	*/	fprintf(os, "<IfModule mod_caucho.c>\n");	/*	fprintf(os, "  CauchoConfigFile \"%s/conf/resin.conf\"\n", esc_resin_home);	*/	fprintf(os, "  ResinConfigServer localhost 6800\n");	fprintf(os, "  CauchoStatus yes\n");	fprintf(os, "</IfModule>\n");	fclose(is);	fclose(os);	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -