ntpaths.c revision 285612
1139743Simp/* 239213Sgibbs * Copyright (C) 2004, 2007, 2009 Internet Systems Consortium, Inc. ("ISC") 339213Sgibbs * Copyright (C) 2001 Internet Software Consortium. 439213Sgibbs * 539213Sgibbs * Permission to use, copy, modify, and/or distribute this software for any 639213Sgibbs * purpose with or without fee is hereby granted, provided that the above 739213Sgibbs * copyright notice and this permission notice appear in all copies. 839213Sgibbs * 939213Sgibbs * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 1039213Sgibbs * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 1139213Sgibbs * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 1239213Sgibbs * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 1339213Sgibbs * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 1439213Sgibbs * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 1539213Sgibbs * PERFORMANCE OF THIS SOFTWARE. 1639213Sgibbs */ 1750477Speter 1839213Sgibbs/* $Id: ntpaths.c,v 1.15 2009/07/14 22:54:57 each Exp $ */ 1939213Sgibbs 2039213Sgibbs/* 2139213Sgibbs * This module fetches the required path information that is specific 2239213Sgibbs * to NT systems which can have its configuration and system files 2339213Sgibbs * almost anywhere. It can be used to override whatever the application 2439213Sgibbs * had previously assigned to the pointer. Basic information about the 2539213Sgibbs * file locations are stored in the registry. 2639213Sgibbs */ 2739213Sgibbs 2839213Sgibbs#include <config.h> 2955205Speter#include <isc/bind_registry.h> 3039213Sgibbs#include <isc/ntpaths.h> 3147413Sgibbs 3247413Sgibbs/* 3347413Sgibbs * Module Variables 34102862Sbrooks */ 3555205Speter 3647413Sgibbsstatic char systemDir[MAX_PATH]; 3747413Sgibbsstatic char namedBase[MAX_PATH]; 3839213Sgibbsstatic char ns_confFile[MAX_PATH]; 3939213Sgibbsstatic char lwresd_confFile[MAX_PATH]; 4039213Sgibbsstatic char lwresd_resolvconfFile[MAX_PATH]; 4139213Sgibbsstatic char rndc_confFile[MAX_PATH]; 4239213Sgibbsstatic char ns_defaultpidfile[MAX_PATH]; 4339213Sgibbsstatic char lwresd_defaultpidfile[MAX_PATH]; 4439213Sgibbsstatic char local_state_dir[MAX_PATH]; 4539213Sgibbsstatic char sys_conf_dir[MAX_PATH]; 4639213Sgibbsstatic char rndc_keyFile[MAX_PATH]; 4739213Sgibbsstatic char session_keyFile[MAX_PATH]; 4839213Sgibbs 4939213Sgibbsstatic DWORD baseLen = MAX_PATH; 5039213Sgibbsstatic BOOL Initialized = FALSE; 5139213Sgibbs 5239213Sgibbsvoid 5339213Sgibbsisc_ntpaths_init() { 5439213Sgibbs HKEY hKey; 5539213Sgibbs BOOL keyFound = TRUE; 5639213Sgibbs 5739213Sgibbs memset(namedBase, 0, MAX_PATH); 5863171Smjacob if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, BIND_SUBKEY, 0, KEY_READ, &hKey) 5963171Smjacob != ERROR_SUCCESS) 6063171Smjacob keyFound = FALSE; 6139213Sgibbs 6239213Sgibbs if (keyFound == TRUE) { 6339213Sgibbs /* Get the named directory */ 6439213Sgibbs if (RegQueryValueEx(hKey, "InstallDir", NULL, NULL, 6539213Sgibbs (LPBYTE)namedBase, &baseLen) != ERROR_SUCCESS) 6639213Sgibbs keyFound = FALSE; 6739213Sgibbs RegCloseKey(hKey); 6839213Sgibbs } 6939213Sgibbs 7039213Sgibbs GetSystemDirectory(systemDir, MAX_PATH); 7139213Sgibbs 7239213Sgibbs if (keyFound == FALSE) 7339213Sgibbs /* Use the System Directory as a default */ 7439213Sgibbs strcpy(namedBase, systemDir); 7539213Sgibbs 7674840Sken strcpy(ns_confFile, namedBase); 7774840Sken strcat(ns_confFile, "\\etc\\named.conf"); 7839213Sgibbs 7939213Sgibbs strcpy(lwresd_confFile, namedBase); 8039213Sgibbs strcat(lwresd_confFile, "\\etc\\lwresd.conf"); 8139213Sgibbs 8239213Sgibbs strcpy(lwresd_resolvconfFile, systemDir); 8339213Sgibbs strcat(lwresd_resolvconfFile, "\\Drivers\\etc\\resolv.conf"); 8439213Sgibbs 8539213Sgibbs strcpy(rndc_keyFile, namedBase); 8639213Sgibbs strcat(rndc_keyFile, "\\etc\\rndc.key"); 8774840Sken 8874840Sken strcpy(session_keyFile, namedBase); 8974840Sken strcat(session_keyFile, "\\etc\\session.key"); 9074840Sken 9139213Sgibbs strcpy(rndc_confFile, namedBase); 9239213Sgibbs strcat(rndc_confFile, "\\etc\\rndc.conf"); 9339213Sgibbs strcpy(ns_defaultpidfile, namedBase); 9439213Sgibbs strcat(ns_defaultpidfile, "\\etc\\named.pid"); 9539213Sgibbs 9639213Sgibbs strcpy(lwresd_defaultpidfile, namedBase); 9739213Sgibbs strcat(lwresd_defaultpidfile, "\\etc\\lwresd.pid"); 9839213Sgibbs 9974840Sken strcpy(local_state_dir, namedBase); 10074840Sken strcat(local_state_dir, "\\bin"); 10139213Sgibbs 10274840Sken strcpy(sys_conf_dir, namedBase); 10374840Sken strcat(sys_conf_dir, "\\etc"); 10439213Sgibbs 10574840Sken Initialized = TRUE; 10674840Sken} 10739213Sgibbs 10839213Sgibbschar * 10939213Sgibbsisc_ntpaths_get(int ind) { 11039213Sgibbs if (!Initialized) 11139213Sgibbs isc_ntpaths_init(); 11239213Sgibbs 11339213Sgibbs switch (ind) { 11439213Sgibbs case NAMED_CONF_PATH: 11539213Sgibbs return (ns_confFile); 11639213Sgibbs break; 11739213Sgibbs case LWRES_CONF_PATH: 11839213Sgibbs return (lwresd_confFile); 11939213Sgibbs break; 12039213Sgibbs case RESOLV_CONF_PATH: 12139213Sgibbs return (lwresd_resolvconfFile); 12239213Sgibbs break; 12339213Sgibbs case RNDC_CONF_PATH: 12439213Sgibbs return (rndc_confFile); 12539213Sgibbs break; 12639213Sgibbs case NAMED_PID_PATH: 12739213Sgibbs return (ns_defaultpidfile); 12839213Sgibbs break; 12939213Sgibbs case LWRESD_PID_PATH: 13039213Sgibbs return (lwresd_defaultpidfile); 13139213Sgibbs break; 13239213Sgibbs case LOCAL_STATE_DIR: 13339213Sgibbs return (local_state_dir); 13439213Sgibbs break; 13539213Sgibbs case SYS_CONF_DIR: 13639213Sgibbs return (sys_conf_dir); 13739213Sgibbs break; 13839213Sgibbs case RNDC_KEY_PATH: 13939213Sgibbs return (rndc_keyFile); 14039213Sgibbs break; 14139213Sgibbs case SESSION_KEY_PATH: 14239213Sgibbs return (session_keyFile); 14339213Sgibbs break; 14439213Sgibbs default: 14539213Sgibbs return (NULL); 14639213Sgibbs } 14739213Sgibbs} 14839213Sgibbs