4 * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC")
5 * Copyright (C) 2001 Internet Software Consortium.
7 * Permission to use, copy, modify, and/or distribute this software for any
8 * purpose with or without fee is hereby granted, provided that the above
9 * copyright notice and this permission notice appear in all copies.
11 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
12 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
13 * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
14 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
15 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
16 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17 * PERFORMANCE OF THIS SOFTWARE.
20 /* Id: ntpaths.c,v 1.11 2007/06/18 23:47:49 tbox Exp */
23 * This module fetches the required path information that is specific
24 * to NT systems which can have its configuration and system files
25 * almost anywhere. It can be used to override whatever the application
26 * had previously assigned to the pointer. Basic information about the
27 * file locations are stored in the registry.
31 #include <isc/bind_registry.h>
32 #include <isc/ntpaths.h>
38 static char systemDir
[MAX_PATH
];
39 static char namedBase
[MAX_PATH
];
40 static char ns_confFile
[MAX_PATH
];
41 static char lwresd_confFile
[MAX_PATH
];
42 static char lwresd_resolvconfFile
[MAX_PATH
];
43 static char rndc_confFile
[MAX_PATH
];
44 static char ns_defaultpidfile
[MAX_PATH
];
45 static char lwresd_defaultpidfile
[MAX_PATH
];
46 static char local_state_dir
[MAX_PATH
];
47 static char sys_conf_dir
[MAX_PATH
];
48 static char rndc_keyFile
[MAX_PATH
];
50 static DWORD baseLen
= MAX_PATH
;
51 static BOOL Initialized
= FALSE
;
58 memset(namedBase
, 0, MAX_PATH
);
59 if (RegOpenKeyEx(HKEY_LOCAL_MACHINE
, BIND_SUBKEY
, 0, KEY_READ
, &hKey
)
63 if (keyFound
== TRUE
) {
64 /* Get the named directory */
65 if (RegQueryValueEx(hKey
, "InstallDir", NULL
, NULL
,
66 (LPBYTE
)namedBase
, &baseLen
) != ERROR_SUCCESS
)
71 GetSystemDirectory(systemDir
, MAX_PATH
);
73 if (keyFound
== FALSE
)
74 /* Use the System Directory as a default */
75 strcpy(namedBase
, systemDir
);
77 strcpy(ns_confFile
, namedBase
);
78 strcat(ns_confFile
, "\\etc\\named.conf");
80 strcpy(lwresd_confFile
, namedBase
);
81 strcat(lwresd_confFile
, "\\etc\\lwresd.conf");
83 strcpy(lwresd_resolvconfFile
, systemDir
);
84 strcat(lwresd_resolvconfFile
, "\\Drivers\\etc\\resolv.conf");
86 strcpy(rndc_keyFile
, namedBase
);
87 strcat(rndc_keyFile
, "\\etc\\rndc.key");
89 strcpy(rndc_confFile
, namedBase
);
90 strcat(rndc_confFile
, "\\etc\\rndc.conf");
91 strcpy(ns_defaultpidfile
, namedBase
);
92 strcat(ns_defaultpidfile
, "\\etc\\named.pid");
94 strcpy(lwresd_defaultpidfile
, namedBase
);
95 strcat(lwresd_defaultpidfile
, "\\etc\\lwresd.pid");
97 strcpy(local_state_dir
, namedBase
);
98 strcat(local_state_dir
, "\\bin");
100 strcpy(sys_conf_dir
, namedBase
);
101 strcat(sys_conf_dir
, "\\etc");
107 isc_ntpaths_get(int ind
) {
112 case NAMED_CONF_PATH
:
113 return (ns_confFile
);
115 case LWRES_CONF_PATH
:
116 return (lwresd_confFile
);
118 case RESOLV_CONF_PATH
:
119 return (lwresd_resolvconfFile
);
122 return (rndc_confFile
);
125 return (ns_defaultpidfile
);
127 case LWRESD_PID_PATH
:
128 return (lwresd_defaultpidfile
);
130 case LOCAL_STATE_DIR
:
131 return (local_state_dir
);
134 return (sys_conf_dir
);
137 return (rndc_keyFile
);