xref: /netbsd-src/external/ibm-public/postfix/dist/src/postconf/postconf_misc.c (revision c48c605c14fd8622b523d1d6a3f0c0bad133ea89)
1 /*	$NetBSD: postconf_misc.c,v 1.3 2023/12/23 20:30:44 christos Exp $	*/
2 
3 /*++
4 /* NAME
5 /*	postconf_misc 3
6 /* SUMMARY
7 /*	miscellaneous low-level code
8 /* SYNOPSIS
9 /*	#include <postconf.h>
10 /*
11 /*	void	pcf_set_config_dir()
12 /*
13 /*	const char *pcf_get_main_path()
14 /*
15 /*	const char *pcf_get_master_path()
16 /* DESCRIPTION
17 /*	pcf_set_config_dir() forcibly overrides the var_config_dir
18 /*	parameter setting with the value from the environment or
19 /*	with the default pathname, and updates the mail parameter
20 /*	dictionary.
21 /*
22 /*	pcf_get_main_path() and pcf_get_master_path() return a
23 /*	pointer to a cached main.cf or master.cf full pathname,
24 /*	based on the current var_config_dir setting. The functions
25 /*	call pcf_set_config_dir() when no full pathname is cached.
26 /* DIAGNOSTICS
27 /*	Problems are reported to the standard error stream.
28 /* LICENSE
29 /* .ad
30 /* .fi
31 /*	The Secure Mailer license must be distributed with this software.
32 /* AUTHOR(S)
33 /*	Wietse Venema
34 /*	IBM T.J. Watson Research
35 /*	P.O. Box 704
36 /*	Yorktown Heights, NY 10598, USA
37 /*--*/
38 
39 /* System library. */
40 
41 #include <sys_defs.h>
42 
43 /* Utility library. */
44 
45 #include <mymalloc.h>
46 #include <safe.h>
47 #include <stringops.h>
48 
49 /* Global library. */
50 
51 #include <mail_params.h>
52 #include <mail_conf.h>
53 
54 /* Application-specific. */
55 
56 #include <postconf.h>
57 
58  /*
59   * Pathname cache, based on current var_config_dir.
60   */
61 static char *pcf_main_path = 0;
62 static char *pcf_master_path = 0;
63 
64 /* pcf_set_config_dir - forcibly override var_config_dir */
65 
pcf_set_config_dir(void)66 void    pcf_set_config_dir(void)
67 {
68     char   *config_dir;
69 
70     if (var_config_dir)
71 	myfree(var_config_dir);
72     if ((config_dir = safe_getenv(CONF_ENV_PATH)) != 0) {
73 	var_config_dir = mystrdup(config_dir);
74 	set_mail_conf_str(VAR_CONFIG_DIR, var_config_dir);
75     } else {
76 	var_config_dir = mystrdup(DEF_CONFIG_DIR);
77     }
78 
79     /*
80      * Populate the full pathname cache.
81      */
82     if (pcf_main_path)
83 	myfree(pcf_main_path);
84     pcf_main_path =
85 	concatenate(var_config_dir, "/", MAIN_CONF_FILE, (char *) 0);
86     if (pcf_master_path)
87 	myfree(pcf_master_path);
88     pcf_master_path =
89 	concatenate(var_config_dir, "/", MASTER_CONF_FILE, (char *) 0);
90 }
91 
92 /* pcf_get_main_path - generate and return full main.cf pathname */
93 
pcf_get_main_path(void)94 const char *pcf_get_main_path(void)
95 {
96     if (pcf_main_path == 0)
97 	pcf_set_config_dir();
98     return (pcf_main_path);
99 }
100 
101 /* pcf_get_master_path - generate and return full master.cf pathname */
102 
pcf_get_master_path(void)103 const char *pcf_get_master_path(void)
104 {
105     if (pcf_master_path == 0)
106 	pcf_set_config_dir();
107     return (pcf_master_path);
108 }
109