Merge from vendor branch LIBSTDC++:
[dragonfly.git] / contrib / sendmail / libsmutil / cf.c
1 /*
2  * Copyright (c) 2000-2002 Sendmail, 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.18.2.1 2002/09/24 21:48:23 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 /* NETINFO */
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                         (void) sm_strlcpyn(cf, sizeof cf, 2, _DIR_SENDMAILCF,
65                                            "submit.cf");
66                 if (cftype == SM_GET_SUBMIT_CF || stat(cf, &sbuf) == 0)
67                         return cf;
68         }
69 #if NETINFO
70         cflocation = ni_propval("/locations", NULL, "sendmail",
71                                 "sendmail.cf", '\0');
72         if (cflocation != NULL)
73                 return cflocation;
74 #endif /* NETINFO */
75         return _PATH_SENDMAILCF;
76 }