source: trunk/server/source3/dynconfig.c@ 1000

Last change on this file since 1000 was 831, checked in by Silvan Scherrer, 12 years ago

Samba 3.6: remove some @todo

File size: 10.1 KB
Line 
1/*
2 Unix SMB/CIFS implementation.
3 Copyright (C) 2001 by Martin Pool <mbp@samba.org>
4 Copyright (C) 2003 by Jim McDonough <jmcd@us.ibm.com>
5 Copyright (C) 2007 by Jeremy Allison <jra@samba.org>
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
11
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>.
19*/
20
21#include "includes.h"
22
23/**
24 * @file dynconfig.c
25 *
26 * @brief Global configurations, initialized to configured defaults.
27 *
28 * This file should be the only file that depends on path
29 * configuration (--prefix, etc), so that if ./configure is re-run,
30 * all programs will be appropriately updated. Everything else in
31 * Samba should import extern variables from here, rather than relying
32 * on preprocessor macros.
33 *
34 * Eventually some of these may become even more variable, so that
35 * they can for example consistently be set across the whole of Samba
36 * by command-line parameters, config file entries, or environment
37 * variables.
38 *
39 * @todo Perhaps eventually these should be merged into the parameter
40 * table? There's kind of a chicken-and-egg situation there...
41 **/
42
43#ifndef __OS2__
44#define DEFINE_DYN_CONFIG_PARAM(name) \
45static char *dyn_##name; \
46\
47 const char *get_dyn_##name(void) \
48{\
49 if (dyn_##name == NULL) {\
50 return name;\
51 }\
52 return dyn_##name;\
53}\
54\
55 const char *set_dyn_##name(const char *newpath) \
56{\
57 if (dyn_##name) {\
58 SAFE_FREE(dyn_##name);\
59 }\
60 dyn_##name = SMB_STRDUP(newpath);\
61 return dyn_##name;\
62}\
63\
64 bool is_default_dyn_##name(void) \
65{\
66 return (dyn_##name == NULL);\
67}
68#else
69#define DEFINE_DYN_CONFIG_PARAM(name) \
70static char *dyn_##name; \
71\
72 const char *set_dyn_##name(const char *newpath) \
73{\
74 if (dyn_##name) {\
75 SAFE_FREE(dyn_##name);\
76 }\
77 dyn_##name = SMB_STRDUP(newpath);\
78 return dyn_##name;\
79}\
80\
81 bool is_default_dyn_##name(void) \
82{\
83 return (dyn_##name == NULL);\
84}
85#endif
86
87DEFINE_DYN_CONFIG_PARAM(SBINDIR)
88DEFINE_DYN_CONFIG_PARAM(BINDIR)
89DEFINE_DYN_CONFIG_PARAM(SWATDIR)
90DEFINE_DYN_CONFIG_PARAM(CONFIGFILE) /**< Location of smb.conf file. **/
91DEFINE_DYN_CONFIG_PARAM(LOGFILEBASE) /** Log file directory. **/
92DEFINE_DYN_CONFIG_PARAM(LMHOSTSFILE) /** Statically configured LanMan hosts. **/
93DEFINE_DYN_CONFIG_PARAM(CODEPAGEDIR)
94DEFINE_DYN_CONFIG_PARAM(LIBDIR)
95DEFINE_DYN_CONFIG_PARAM(MODULESDIR)
96DEFINE_DYN_CONFIG_PARAM(SHLIBEXT)
97DEFINE_DYN_CONFIG_PARAM(LOCKDIR)
98DEFINE_DYN_CONFIG_PARAM(STATEDIR) /** Persistent state files. Default LOCKDIR */
99DEFINE_DYN_CONFIG_PARAM(CACHEDIR) /** Temporary cache files. Default LOCKDIR */
100DEFINE_DYN_CONFIG_PARAM(PIDDIR)
101DEFINE_DYN_CONFIG_PARAM(NMBDSOCKETDIR)
102DEFINE_DYN_CONFIG_PARAM(NCALRPCDIR)
103DEFINE_DYN_CONFIG_PARAM(SMB_PASSWD_FILE)
104DEFINE_DYN_CONFIG_PARAM(PRIVATE_DIR)
105DEFINE_DYN_CONFIG_PARAM(LOCALEDIR)
106
107#ifdef __OS2__
108// @todo_port change this file so it also works for rpm
109
110/* Directory the binary was called from, same as getbindir() */
111const char *get_dyn_SBINDIR(void)
112{
113 static char buffer[1024] = "";
114 if (!*buffer)
115 {
116 char exedir[1024] = "";
117 if (!os2_GetExePath(exedir))
118 {
119 snprintf(buffer, 260, "%s", SBINDIR);
120 } else {
121 snprintf(buffer, 260, "%s", exedir);
122 }
123 }
124
125 if (dyn_SBINDIR == NULL) {
126 return buffer;
127 }
128 return dyn_SBINDIR;
129}
130
131/* Directory the binary was called from, same as getsbindir() */
132const char *get_dyn_BINDIR(void)
133{
134 static char buffer[1024] = "";
135 if (!*buffer)
136 {
137 char exedir[1024] = "";
138 if (!os2_GetExePath(exedir))
139 {
140 snprintf(buffer, 260, "%s", BINDIR);
141 } else {
142 snprintf(buffer, 260, "%s", exedir);
143 }
144 }
145
146 if (dyn_BINDIR == NULL) {
147 return buffer;
148 }
149 return dyn_BINDIR;
150}
151
152/* Directory holding the SWAT files */
153const char *get_dyn_SWATDIR(void)
154{
155 static char buffer[1024] = "";
156 if (!*buffer)
157 {
158 char exedir[1024] = "";
159 if (!os2_GetExePath(exedir))
160 {
161 snprintf(buffer, 260, "%s", SWATDIR);
162 } else {
163 snprintf(buffer, 260, "%s/%s", exedir,"swat");
164 }
165 }
166
167 if (dyn_SWATDIR == NULL) {
168 return buffer;
169 }
170 return dyn_SWATDIR;
171}
172
173/* Location of smb.conf file. */
174const char *get_dyn_CONFIGFILE(void)
175{
176 static char buffer[1024] = "";
177 if (!*buffer)
178 {
179 snprintf(buffer, 260, "%s/samba/smb.conf", getenv("ETC"));
180 }
181 /* Set UNIXROOT to x:\MPTN if UNIXROOT is undefined */
182 if (getenv("UNIXROOT") == NULL) {
183 static char unixroot[1024] = "";
184 strncpy(unixroot,getenv("ETC"),strlen(getenv("ETC"))-4);
185 setenv("UNIXROOT",unixroot,0);
186 }
187 /* Make sure TMPIR points to a proper value */
188 static char tmpdir[1024] = "";
189 if (getenv("TMPDIR") == NULL && getenv("TEMP") != NULL) {
190 strncpy(tmpdir,getenv("TEMP"),strlen(getenv("TEMP")));
191 setenv("TMPDIR",tmpdir,0);
192 }
193 if (getenv("TMPDIR") == NULL) {
194 strncpy(tmpdir,getenv("ETC"),2);
195 stpcpy(tmpdir,"/OS2/SYSTEM");
196 setenv("TMPDIR",tmpdir,0);
197 }
198
199 if (dyn_CONFIGFILE == NULL) {
200 return buffer;
201 }
202 return dyn_CONFIGFILE;
203}
204
205/** Log file directory. **/
206const char *get_dyn_LOGFILEBASE(void)
207{
208 static char buffer[1024] = "";
209 if (!*buffer)
210 {
211 snprintf(buffer, 260, "%s/samba/log", getenv("ETC"));
212 }
213 if (dyn_LOGFILEBASE == NULL) {
214 return buffer;
215 }
216 return dyn_LOGFILEBASE;
217}
218
219/** Statically configured LanMan hosts. **/
220const char *get_dyn_LMHOSTSFILE(void)
221{
222 static char buffer[1024] = "";
223 if (!*buffer)
224 {
225 snprintf(buffer, 260, "%s/samba/lmhosts", getenv("ETC"));
226 }
227 if (dyn_LMHOSTSFILE == NULL) {
228 return buffer;
229 }
230 return dyn_LMHOSTSFILE;
231}
232
233/* Directory holding the codepages */
234const char *get_dyn_CODEPAGEDIR(void)
235{
236 static char buffer[1024] = "";
237 if (!*buffer)
238 {
239 char exedir[1024] = "";
240 if (!os2_GetExePath(exedir))
241 {
242 snprintf(buffer, 260, "%s", CODEPAGEDIR);
243 } else {
244 if (!lp_is_in_client()) {
245 snprintf(buffer, 260, "%s/%s", exedir, "codepages");
246 } else {
247 snprintf(buffer, 260, "%s/%s", getenv("SMB_EXE"), "codepages");
248 }
249 }
250 }
251
252 if (dyn_CODEPAGEDIR == NULL) {
253 return buffer;
254 }
255 return dyn_CODEPAGEDIR;
256}
257
258/* Directory holding the libs */
259const char *get_dyn_LIBDIR(void)
260{
261 static char buffer[1024] = "";
262 if (!*buffer)
263 {
264 char exedir[1024] = "";
265 if (!os2_GetExePath(exedir))
266 {
267 snprintf(buffer, 260, "%s", LIBDIR);
268 } else {
269 snprintf(buffer, 260, "%s/%s", exedir, "lib");
270 }
271 }
272
273 if (dyn_LIBDIR == NULL) {
274 return buffer;
275 }
276 return dyn_LIBDIR;
277}
278
279/* Directory holding the modules */
280const char *get_dyn_MODULESDIR(void)
281{
282 static char buffer[1024] = "";
283 if (!*buffer)
284 {
285 char exedir[1024] = "";
286 if (!os2_GetExePath(exedir))
287 {
288 snprintf(buffer, 260, "%s", MODULESDIR);
289 } else {
290 snprintf(buffer, 260, "%s/%s", exedir, "modules");
291 }
292 }
293
294 if (dyn_MODULESDIR == NULL) {
295 return buffer;
296 }
297 return dyn_MODULESDIR;
298}
299
300/* Directory holding the shared libs (same as libdir) */
301const char *get_dyn_SHLIBEXT(void)
302{
303 static char buffer[1024] = "";
304 if (!*buffer)
305 {
306 char exedir[1024] = "";
307 if (!os2_GetExePath(exedir))
308 {
309 snprintf(buffer, 260, "%s", LIBDIR);
310 } else {
311 snprintf(buffer, 260, "%s/%s", exedir, "lib");
312 }
313 }
314
315 if (dyn_SHLIBEXT == NULL) {
316 return buffer;
317 }
318 return dyn_SHLIBEXT;
319}
320
321/* Directory holding lock files */
322const char *get_dyn_LOCKDIR(void)
323{
324 static char buffer[1024] = "";
325 if (!*buffer)
326 {
327 snprintf(buffer, 260, "%s/samba/lock", getenv("ETC"));
328 }
329 if (dyn_LOCKDIR == NULL) {
330 return buffer;
331 }
332 return dyn_LOCKDIR;
333}
334
335/* Directory holding persistent state files */
336const char *get_dyn_STATEDIR(void)
337{
338 static char buffer[1024] = "";
339 if (!*buffer)
340 {
341 snprintf(buffer, 260, "%s/samba/lock", getenv("ETC"));
342 }
343 if (dyn_STATEDIR == NULL) {
344 return buffer;
345 }
346 return dyn_STATEDIR;
347}
348
349/* Temporary cache files. Default LOCKDIR */
350const char *get_dyn_CACHEDIR(void)
351{
352 static char buffer[1024] = "";
353 if (!*buffer)
354 {
355 snprintf(buffer, 260, "%s/samba/lock", getenv("ETC"));
356 }
357 if (dyn_CACHEDIR == NULL) {
358 return buffer;
359 }
360 return dyn_CACHEDIR;
361}
362
363/* Directory holding the pid files */
364const char *get_dyn_PIDDIR(void)
365{
366 static char buffer[1024] = "";
367 if (!*buffer)
368 {
369 snprintf(buffer, 260, "%s/samba/pid", getenv("ETC"));
370 }
371 if (dyn_PIDDIR == NULL) {
372 return buffer;
373 }
374 return dyn_PIDDIR;
375}
376
377/* Directory holding the NMBDSOCKETDIR */
378const char *get_dyn_NMBDSOCKETDIR(void)
379{
380 static char buffer[1024] = "";
381 if (!*buffer)
382 {
383 snprintf(buffer, 260, "%s/samba/nmbd", getenv("ETC"));
384 }
385
386 if (dyn_NMBDSOCKETDIR == NULL) {
387 return buffer;
388 }
389 return dyn_NMBDSOCKETDIR;
390}
391
392/* Directory holding the LOCALEDIR */
393const char *get_dyn_LOCALEDIR(void)
394{
395 static char buffer[1024] = "";
396 if (!*buffer)
397 {
398 snprintf(buffer, 260, "%s/samba/locale", getenv("ETC"));
399 }
400
401 if (dyn_LOCALEDIR == NULL) {
402 return buffer;
403 }
404 return dyn_LOCALEDIR;
405}
406
407/* Directory holding the NCALRPCDIR */
408const char *get_dyn_NCALRPCDIR(void)
409{
410 static char buffer[1024] = "";
411 if (!*buffer)
412 {
413 snprintf(buffer, 260, "%s/samba/ncalrpc", getenv("ETC"));
414 }
415
416 if (dyn_NCALRPCDIR == NULL) {
417 return buffer;
418 }
419 return dyn_NCALRPCDIR;
420}
421
422/* Location of smbpasswd */
423const char *get_dyn_SMB_PASSWD_FILE(void)
424{
425 static char buffer[1024] = "";
426 if (!*buffer)
427 {
428 snprintf(buffer, 260, "%s/samba/private/smbpasswd", getenv("ETC"));
429 }
430 if (dyn_SMB_PASSWD_FILE == NULL) {
431 return buffer;
432 }
433 return dyn_SMB_PASSWD_FILE;
434}
435
436/* Directory holding the private files */
437const char *get_dyn_PRIVATE_DIR(void)
438{
439 static char buffer[1024] = "";
440 if (!*buffer)
441 {
442 snprintf(buffer, 260, "%s/samba/private", getenv("ETC"));
443 }
444 if (dyn_PRIVATE_DIR == NULL) {
445 return buffer;
446 }
447 return dyn_PRIVATE_DIR;
448}
449
450#endif /* __OS2__ */
Note: See TracBrowser for help on using the repository browser.