xref: /freebsd/contrib/sendmail/libsmutil/cf.c (revision bdd1243df58e60e85101c09001d9812a789b6bc4)
1 /*
2  * Copyright (c) 2000-2002 Proofpoint, Inc. and its suppliers.
3  *	All rights reserved.
4  *
5  * By using this file, you agree to the terms and conditions set
6  * forth in the LICENSE file which can be found at the top level of
7  * the sendmail distribution.
8  *
9  */
10 
11 #include <sendmail.h>
12 SM_RCSID("@(#)$Id: cf.c,v 8.20 2013-11-22 20:51:50 ca Exp $")
13 #include <sendmail/pathnames.h>
14 
15 /*
16 **  GETCFNAME -- return the name of the .cf file to use.
17 **
18 **	Some systems (e.g., NeXT) determine this dynamically.
19 **
20 **	For others: returns submit.cf or sendmail.cf depending
21 **		on the modes.
22 **
23 **	Parameters:
24 **		opmode -- operation mode.
25 **		submitmode -- submit mode.
26 **		cftype -- may request a certain cf file.
27 **		conffile -- if set, return it.
28 **
29 **	Returns:
30 **		name of .cf file.
31 */
32 
33 char *
34 getcfname(opmode, submitmode, cftype, conffile)
35 	int opmode;
36 	int submitmode;
37 	int cftype;
38 	char *conffile;
39 {
40 #if NETINFO
41 	char *cflocation;
42 #endif
43 
44 	if (conffile != NULL)
45 		return conffile;
46 
47 	if (cftype == SM_GET_SUBMIT_CF ||
48 	    ((submitmode != SUBMIT_UNKNOWN ||
49 	      opmode == MD_DELIVER ||
50 	      opmode == MD_ARPAFTP ||
51 	      opmode == MD_SMTP) &&
52 	     cftype != SM_GET_SENDMAIL_CF))
53 	{
54 		struct stat sbuf;
55 		static char cf[MAXPATHLEN];
56 
57 #if NETINFO
58 		cflocation = ni_propval("/locations", NULL, "sendmail",
59 					"submit.cf", '\0');
60 		if (cflocation != NULL)
61 			(void) sm_strlcpy(cf, cflocation, sizeof cf);
62 		else
63 #endif /* NETINFO */
64 		/* "else" in #if code above */
65 		{
66 			(void) sm_strlcpyn(cf, sizeof cf, 2, _DIR_SENDMAILCF,
67 					   "submit.cf");
68 		}
69 		if (cftype == SM_GET_SUBMIT_CF || stat(cf, &sbuf) == 0)
70 			return cf;
71 	}
72 #if NETINFO
73 	cflocation = ni_propval("/locations", NULL, "sendmail",
74 				"sendmail.cf", '\0');
75 	if (cflocation != NULL)
76 		return cflocation;
77 #endif
78 	return _PATH_SENDMAILCF;
79 }
80