Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Evergreen:11.4
squid.import5580
12492.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 12492.patch of Package squid.import5580
--------------------- PatchSet 12492 Date: 2009/06/25 22:56:47 Author: hno Branch: SQUID_2_7 Tag: (none) Log: Author: serassio MFC: Windows port: Fix improper access permissions to registry and DNS parsing from registry - RegOpenKey() always try to open registry keys in full control mode, even if not needed. This could make Squid to fail when running as a non privileged user. RegOpenKeyEx() allow to specify only the needed priviledge and now is used instead. - When parsing DNS setting into registry, a fixed size loop was used. Now the loop count is dynamic. - Also ran indent. Members: src/dns_internal.c:1.63.2.8->1.63.2.9 src/win32.c:1.18.2.7->1.18.2.8 Index: squid/src/dns_internal.c =================================================================== RCS file: /cvsroot/squid/squid/src/dns_internal.c,v retrieving revision 1.63.2.8 retrieving revision 1.63.2.9 diff -u -r1.63.2.8 -r1.63.2.9 --- squid/src/dns_internal.c 25 Jun 2009 22:48:37 -0000 1.63.2.8 +++ squid/src/dns_internal.c 25 Jun 2009 22:56:47 -0000 1.63.2.9 @@ -1,6 +1,6 @@ /* - * $Id: dns_internal.c,v 1.63.2.8 2009/06/25 22:48:37 hno Exp $ + * $Id: dns_internal.c,v 1.63.2.9 2009/06/25 22:56:47 hno Exp $ * * DEBUG: section 78 DNS lookups; interacts with lib/rfc1035.c * AUTHOR: Duane Wessels @@ -50,6 +50,9 @@ #ifdef _SQUID_WIN32_ #include <windows.h> +#define REG_TCPIP_PARA_INTERFACES "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces" +#define REG_TCPIP_PARA "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters" +#define REG_VXD_MSTCP "SYSTEM\\CurrentControlSet\\Services\\VxD\\MSTCP" #endif #ifndef _PATH_RESCONF #define _PATH_RESCONF "/etc/resolv.conf" @@ -318,32 +321,24 @@ char *token; HKEY hndKey; - if (RegOpenKey(HKEY_LOCAL_MACHINE, - "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", - &hndKey) == ERROR_SUCCESS) { + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_TCPIP_PARA, 0, KEY_QUERY_VALUE, &hndKey) == ERROR_SUCCESS) { DWORD Type = 0; DWORD Size = 0; LONG Result; - Result = - RegQueryValueEx(hndKey, "Domain", NULL, &Type, NULL, - &Size); + Result = RegQueryValueEx(hndKey, "Domain", NULL, &Type, NULL, &Size); if (Result == ERROR_SUCCESS && Size) { t = (char *) xmalloc(Size); - RegQueryValueEx(hndKey, "Domain", NULL, &Type, (LPBYTE) t, - &Size); + RegQueryValueEx(hndKey, "Domain", NULL, &Type, (LPBYTE) t, &Size); debug(78, 1) ("Adding domain %s from Registry\n", t); idnsAddPathComponent(t); xfree(t); } - Result = - RegQueryValueEx(hndKey, "SearchList", NULL, &Type, NULL, - &Size); + Result = RegQueryValueEx(hndKey, "SearchList", NULL, &Type, NULL, &Size); if (Result == ERROR_SUCCESS && Size) { t = (char *) xmalloc(Size); - RegQueryValueEx(hndKey, "SearchList", NULL, &Type, (LPBYTE) t, - &Size); + RegQueryValueEx(hndKey, "SearchList", NULL, &Type, (LPBYTE) t, &Size); token = strtok(t, Separator); idnsFreeSearchpath(); @@ -373,24 +368,18 @@ switch (WIN32_OS_version) { case _WIN_OS_WINNT: /* get nameservers from the Windows NT registry */ - if (RegOpenKey(HKEY_LOCAL_MACHINE, - "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", - &hndKey) == ERROR_SUCCESS) { + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_TCPIP_PARA, 0, KEY_QUERY_VALUE, &hndKey) == ERROR_SUCCESS) { DWORD Type = 0; DWORD Size = 0; LONG Result; - Result = - RegQueryValueEx(hndKey, "DhcpNameServer", NULL, &Type, NULL, - &Size); + Result = RegQueryValueEx(hndKey, "DhcpNameServer", NULL, &Type, NULL, &Size); if (Result == ERROR_SUCCESS && Size) { t = (char *) xmalloc(Size); - RegQueryValueEx(hndKey, "DhcpNameServer", NULL, &Type, t, - &Size); + RegQueryValueEx(hndKey, "DhcpNameServer", NULL, &Type, t, &Size); token = strtok(t, ", "); while (token) { idnsAddNameserver(token); - debug(78, 1) ("Adding DHCP nameserver %s from Registry\n", - token); + debug(78, 1) ("Adding DHCP nameserver %s from Registry\n", token); token = strtok(NULL, ", "); } xfree(t); @@ -402,8 +391,7 @@ RegQueryValueEx(hndKey, "NameServer", NULL, &Type, t, &Size); token = strtok(t, ", "); while (token) { - debug(78, 1) ("Adding nameserver %s from Registry\n", - token); + debug(78, 1) ("Adding nameserver %s from Registry\n", token); idnsAddNameserver(token); token = strtok(NULL, ", "); } @@ -420,60 +408,58 @@ case _WIN_OS_WIN7: /* get nameservers from the Windows 2000 registry */ /* search all interfaces for DNS server addresses */ - if (RegOpenKey(HKEY_LOCAL_MACHINE, - "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces", - &hndKey) == ERROR_SUCCESS) { + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_TCPIP_PARA_INTERFACES, 0, KEY_READ, &hndKey) == ERROR_SUCCESS) { int i; - char keyname[255]; - - for (i = 0; i < 10; i++) { - if (RegEnumKey(hndKey, i, (char *) &keyname, - 255) == ERROR_SUCCESS) { - char newkeyname[255]; - strcpy(newkeyname, - "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\"); - strcat(newkeyname, keyname); - if (RegOpenKey(HKEY_LOCAL_MACHINE, newkeyname, - &hndKey2) == ERROR_SUCCESS) { - DWORD Type = 0; - DWORD Size = 0; - LONG Result; - Result = - RegQueryValueEx(hndKey2, "DhcpNameServer", NULL, - &Type, NULL, &Size); - if (Result == ERROR_SUCCESS && Size) { - t = (char *) xmalloc(Size); - RegQueryValueEx(hndKey2, "DhcpNameServer", NULL, - &Type, t, &Size); - token = strtok(t, ", "); - while (token) { - debug(78, 1) - ("Adding DHCP nameserver %s from Registry\n", - token); - idnsAddNameserver(token); - token = strtok(NULL, ", "); + int MaxSubkeyLen; + DWORD InterfacesCount; + char *keyname; + FILETIME ftLastWriteTime; + + if (RegQueryInfoKey(hndKey, NULL, NULL, NULL, &InterfacesCount, &MaxSubkeyLen, NULL, NULL, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) { + keyname = (char *) xmalloc(++MaxSubkeyLen); + for (i = 0; i < (int) InterfacesCount; i++) { + int j; + j = MaxSubkeyLen; + if (RegEnumKeyEx(hndKey, i, keyname, &j, NULL, NULL, NULL, &ftLastWriteTime) == ERROR_SUCCESS) { + char *newkeyname; + newkeyname = (char *) xmalloc(sizeof(REG_TCPIP_PARA_INTERFACES) + j + 2); + strcpy(newkeyname, REG_TCPIP_PARA_INTERFACES); + strcat(newkeyname, "\\"); + strcat(newkeyname, keyname); + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, newkeyname, 0, KEY_QUERY_VALUE, &hndKey2) == ERROR_SUCCESS) { + DWORD Type = 0; + DWORD Size = 0; + LONG Result; + Result = RegQueryValueEx(hndKey2, "DhcpNameServer", NULL, &Type, NULL, &Size); + if (Result == ERROR_SUCCESS && Size) { + t = (char *) xmalloc(Size); + RegQueryValueEx(hndKey2, "DhcpNameServer", NULL, &Type, t, &Size); + token = strtok(t, ", "); + while (token) { + debug(78, 1) ("Adding DHCP nameserver %s from Registry\n", token); + idnsAddNameserver(token); + token = strtok(NULL, ", "); + } + xfree(t); } - xfree(t); - } - Result = - RegQueryValueEx(hndKey2, "NameServer", NULL, &Type, - NULL, &Size); - if (Result == ERROR_SUCCESS && Size) { - t = (char *) xmalloc(Size); - RegQueryValueEx(hndKey2, "NameServer", NULL, &Type, - t, &Size); - token = strtok(t, ", "); - while (token) { - debug(78, 1) ("Adding nameserver %s from Registry\n", - token); - idnsAddNameserver(token); - token = strtok(NULL, ", "); + Result = RegQueryValueEx(hndKey2, "NameServer", NULL, &Type, NULL, &Size); + if (Result == ERROR_SUCCESS && Size) { + t = (char *) xmalloc(Size); + RegQueryValueEx(hndKey2, "NameServer", NULL, &Type, t, &Size); + token = strtok(t, ", "); + while (token) { + debug(78, 1) ("Adding nameserver %s from Registry\n", token); + idnsAddNameserver(token); + token = strtok(NULL, ", "); + } + xfree(t); } - xfree(t); + RegCloseKey(hndKey2); } - RegCloseKey(hndKey2); + xfree(newkeyname); } } + xfree(keyname); } RegCloseKey(hndKey); } @@ -483,21 +469,17 @@ case _WIN_OS_WIN98: case _WIN_OS_WINME: /* get nameservers from the Windows 9X registry */ - if (RegOpenKey(HKEY_LOCAL_MACHINE, - "SYSTEM\\CurrentControlSet\\Services\\VxD\\MSTCP", - &hndKey) == ERROR_SUCCESS) { + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_VXD_MSTCP, 0, KEY_QUERY_VALUE, &hndKey) == ERROR_SUCCESS) { DWORD Type = 0; DWORD Size = 0; LONG Result; - Result = - RegQueryValueEx(hndKey, "NameServer", NULL, &Type, NULL, &Size); + Result = RegQueryValueEx(hndKey, "NameServer", NULL, &Type, NULL, &Size); if (Result == ERROR_SUCCESS && Size) { t = (char *) xmalloc(Size); RegQueryValueEx(hndKey, "NameServer", NULL, &Type, t, &Size); token = strtok(t, ", "); while (token) { - debug(78, 1) ("Adding nameserver %s from Registry\n", - token); + debug(78, 1) ("Adding nameserver %s from Registry\n", token); idnsAddNameserver(token); token = strtok(NULL, ", "); } Index: squid/src/win32.c =================================================================== RCS file: /cvsroot/squid/squid/src/win32.c,v retrieving revision 1.18.2.7 retrieving revision 1.18.2.8 diff -u -r1.18.2.7 -r1.18.2.8 --- squid/src/win32.c 25 Jun 2009 22:48:37 -0000 1.18.2.7 +++ squid/src/win32.c 25 Jun 2009 22:56:47 -0000 1.18.2.8 @@ -1,6 +1,6 @@ /* - * $Id: win32.c,v 1.18.2.7 2009/06/25 22:48:37 hno Exp $ + * $Id: win32.c,v 1.18.2.8 2009/06/25 22:56:47 hno Exp $ * * Windows support * AUTHOR: Guido Serassio <serassio@squid-cache.org> @@ -471,9 +471,7 @@ if (signal(SIGABRT, WIN32_Abort) == SIG_ERR) return 1; /* Register the service Handler function */ - svcHandle = - RegisterServiceCtrlHandler(WIN32_Service_name, - WIN32_svcHandler); + svcHandle = RegisterServiceCtrlHandler(WIN32_Service_name, WIN32_svcHandler); if (svcHandle == 0) return 1; /* Set Process work dir to directory cointaining squid.exe */ @@ -484,26 +482,22 @@ return 1; safe_free(ConfigFile); /* get config file from Windows Registry */ - if (RegOpenKey(HKEY_LOCAL_MACHINE, REGKEY, &hndKey) == ERROR_SUCCESS) { + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, REGKEY, 0, KEY_QUERY_VALUE, &hndKey) == ERROR_SUCCESS) { DWORD Type = 0; DWORD Size = 0; LONG Result; - Result = - RegQueryValueEx(hndKey, CONFIGFILE, NULL, &Type, NULL, &Size); + Result = RegQueryValueEx(hndKey, CONFIGFILE, NULL, &Type, NULL, &Size); if (Result == ERROR_SUCCESS && Size) { ConfigFile = xmalloc(Size); - RegQueryValueEx(hndKey, CONFIGFILE, NULL, &Type, ConfigFile, - &Size); + RegQueryValueEx(hndKey, CONFIGFILE, NULL, &Type, ConfigFile, &Size); } else ConfigFile = xstrdup(DefaultConfigFile); Size = 0; Type = 0; - Result = - RegQueryValueEx(hndKey, COMMANDLINE, NULL, &Type, NULL, &Size); + Result = RegQueryValueEx(hndKey, COMMANDLINE, NULL, &Type, NULL, &Size); if (Result == ERROR_SUCCESS && Size) { WIN32_Service_Command_Line = xmalloc(Size); - RegQueryValueEx(hndKey, COMMANDLINE, NULL, &Type, WIN32_Service_Command_Line, - &Size); + RegQueryValueEx(hndKey, COMMANDLINE, NULL, &Type, WIN32_Service_Command_Line, &Size); } else WIN32_Service_Command_Line = xstrdup(""); RegCloseKey(hndKey); @@ -517,8 +511,7 @@ /* Set Service Status to SERVICE_START_PENDING */ svcStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; svcStatus.dwCurrentState = SERVICE_START_PENDING; - svcStatus.dwControlsAccepted = - SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN; + svcStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN; svcStatus.dwWin32ExitCode = 0; svcStatus.dwServiceSpecificExitCode = 0; svcStatus.dwCheckPoint = 0;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor