]> CyberLeo.Net >> Repos - FreeBSD/releng/10.2.git/blob - contrib/ntp/lib/isc/win32/ntpaths.c
- Copy stable/10@285827 to releng/10.2 in preparation for 10.2-RC1
[FreeBSD/releng/10.2.git] / contrib / ntp / lib / isc / win32 / ntpaths.c
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
36 static char systemDir[MAX_PATH];
37 static char namedBase[MAX_PATH];
38 static char ns_confFile[MAX_PATH];
39 static char lwresd_confFile[MAX_PATH];
40 static char lwresd_resolvconfFile[MAX_PATH];
41 static char rndc_confFile[MAX_PATH];
42 static char ns_defaultpidfile[MAX_PATH];
43 static char lwresd_defaultpidfile[MAX_PATH];
44 static char local_state_dir[MAX_PATH];
45 static char sys_conf_dir[MAX_PATH];
46 static char rndc_keyFile[MAX_PATH];
47 static char session_keyFile[MAX_PATH];
48
49 static DWORD baseLen = MAX_PATH;
50 static BOOL Initialized = FALSE;
51
52 void
53 isc_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
108 char *
109 isc_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 }