ntpaths.c revision 290001
1/* 2 * Copyright (C) 2004, 2007, 2009 Internet Systems Consortium, Inc. ("ISC") 3 * Copyright (C) 2001 Internet Software Consortium. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 10 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 11 * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 12 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 13 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 14 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 15 * PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18/* $Id: ntpaths.c,v 1.15 2009/07/14 22:54:57 each Exp $ */ 19 20/* 21 * This module fetches the required path information that is specific 22 * to NT systems which can have its configuration and system files 23 * almost anywhere. It can be used to override whatever the application 24 * had previously assigned to the pointer. Basic information about the 25 * file locations are stored in the registry. 26 */ 27 28#include <config.h> 29#include <isc/bind_registry.h> 30#include <isc/ntpaths.h> 31 32/* 33 * Module Variables 34 */ 35 36static char systemDir[MAX_PATH]; 37static char namedBase[MAX_PATH]; 38static char ns_confFile[MAX_PATH]; 39static char lwresd_confFile[MAX_PATH]; 40static char lwresd_resolvconfFile[MAX_PATH]; 41static char rndc_confFile[MAX_PATH]; 42static char ns_defaultpidfile[MAX_PATH]; 43static char lwresd_defaultpidfile[MAX_PATH]; 44static char local_state_dir[MAX_PATH]; 45static char sys_conf_dir[MAX_PATH]; 46static char rndc_keyFile[MAX_PATH]; 47static char session_keyFile[MAX_PATH]; 48 49static DWORD baseLen = MAX_PATH; 50static BOOL Initialized = FALSE; 51 52void 53isc_ntpaths_init() { 54 HKEY hKey; 55 BOOL keyFound = TRUE; 56 57 memset(namedBase, 0, MAX_PATH); 58 if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, BIND_SUBKEY, 0, KEY_READ, &hKey) 59 != ERROR_SUCCESS) 60 keyFound = FALSE; 61 62 if (keyFound == TRUE) { 63 /* Get the named directory */ 64 if (RegQueryValueEx(hKey, "InstallDir", NULL, NULL, 65 (LPBYTE)namedBase, &baseLen) != ERROR_SUCCESS) 66 keyFound = FALSE; 67 RegCloseKey(hKey); 68 } 69 70 GetSystemDirectory(systemDir, MAX_PATH); 71 72 if (keyFound == FALSE) 73 /* Use the System Directory as a default */ 74 strcpy(namedBase, systemDir); 75 76 strcpy(ns_confFile, namedBase); 77 strcat(ns_confFile, "\\etc\\named.conf"); 78 79 strcpy(lwresd_confFile, namedBase); 80 strcat(lwresd_confFile, "\\etc\\lwresd.conf"); 81 82 strcpy(lwresd_resolvconfFile, systemDir); 83 strcat(lwresd_resolvconfFile, "\\Drivers\\etc\\resolv.conf"); 84 85 strcpy(rndc_keyFile, namedBase); 86 strcat(rndc_keyFile, "\\etc\\rndc.key"); 87 88 strcpy(session_keyFile, namedBase); 89 strcat(session_keyFile, "\\etc\\session.key"); 90 91 strcpy(rndc_confFile, namedBase); 92 strcat(rndc_confFile, "\\etc\\rndc.conf"); 93 strcpy(ns_defaultpidfile, namedBase); 94 strcat(ns_defaultpidfile, "\\etc\\named.pid"); 95 96 strcpy(lwresd_defaultpidfile, namedBase); 97 strcat(lwresd_defaultpidfile, "\\etc\\lwresd.pid"); 98 99 strcpy(local_state_dir, namedBase); 100 strcat(local_state_dir, "\\bin"); 101 102 strcpy(sys_conf_dir, namedBase); 103 strcat(sys_conf_dir, "\\etc"); 104 105 Initialized = TRUE; 106} 107 108char * 109isc_ntpaths_get(int ind) { 110 if (!Initialized) 111 isc_ntpaths_init(); 112 113 switch (ind) { 114 case NAMED_CONF_PATH: 115 return (ns_confFile); 116 break; 117 case LWRES_CONF_PATH: 118 return (lwresd_confFile); 119 break; 120 case RESOLV_CONF_PATH: 121 return (lwresd_resolvconfFile); 122 break; 123 case RNDC_CONF_PATH: 124 return (rndc_confFile); 125 break; 126 case NAMED_PID_PATH: 127 return (ns_defaultpidfile); 128 break; 129 case LWRESD_PID_PATH: 130 return (lwresd_defaultpidfile); 131 break; 132 case LOCAL_STATE_DIR: 133 return (local_state_dir); 134 break; 135 case SYS_CONF_DIR: 136 return (sys_conf_dir); 137 break; 138 case RNDC_KEY_PATH: 139 return (rndc_keyFile); 140 break; 141 case SESSION_KEY_PATH: 142 return (session_keyFile); 143 break; 144 default: 145 return (NULL); 146 } 147} 148