1 /* 2 * Copyright (c) 1998-2001 Sendmail, Inc. and its suppliers. 3 * All rights reserved. 4 * Copyright (c) 1983, 1995-1997 Eric P. Allman. All rights reserved. 5 * Copyright (c) 1988, 1993 6 * The Regents of the University of California. All rights reserved. 7 * 8 * By using this file, you agree to the terms and conditions set 9 * forth in the LICENSE file which can be found at the top level of 10 * the sendmail distribution. 11 * 12 * 13 * $Id: sendmail.h,v 8.68 2002/07/01 22:18:53 gshapiro Exp $ 14 */ 15 16 #pragma ident "%Z%%M% %I% %E% SMI" 17 18 /* 19 ** SENDMAIL.H -- Global definitions for sendmail. 20 */ 21 22 #include <stdio.h> 23 #include <sm/bitops.h> 24 #include <sm/io.h> 25 #include <sm/string.h> 26 #include "conf.h" 27 28 /********************************************************************** 29 ** Table sizes, etc.... 30 ** There shouldn't be much need to change these.... 31 **********************************************************************/ 32 #ifndef MAXMAILERS 33 # define MAXMAILERS 25 /* maximum mailers known to system */ 34 #endif /* ! MAXMAILERS */ 35 36 /* 37 ** Flags passed to safefile/safedirpath. 38 */ 39 40 #define SFF_ANYFILE 0L /* no special restrictions */ 41 #define SFF_MUSTOWN 0x00000001L /* user must own this file */ 42 #define SFF_NOSLINK 0x00000002L /* file cannot be a symbolic link */ 43 #define SFF_ROOTOK 0x00000004L /* ok for root to own this file */ 44 #define SFF_RUNASREALUID 0x00000008L /* if no ctladdr, run as real uid */ 45 #define SFF_NOPATHCHECK 0x00000010L /* don't bother checking dir path */ 46 #define SFF_SETUIDOK 0x00000020L /* set-user-ID files are ok */ 47 #define SFF_CREAT 0x00000040L /* ok to create file if necessary */ 48 #define SFF_REGONLY 0x00000080L /* regular files only */ 49 #define SFF_SAFEDIRPATH 0x00000100L /* no writable directories allowed */ 50 #define SFF_NOHLINK 0x00000200L /* file cannot have hard links */ 51 #define SFF_NOWLINK 0x00000400L /* links only in non-writable dirs */ 52 #define SFF_NOGWFILES 0x00000800L /* disallow world writable files */ 53 #define SFF_NOWWFILES 0x00001000L /* disallow group writable files */ 54 #define SFF_OPENASROOT 0x00002000L /* open as root instead of real user */ 55 #define SFF_NOLOCK 0x00004000L /* don't lock the file */ 56 #define SFF_NOGRFILES 0x00008000L /* disallow g readable files */ 57 #define SFF_NOWRFILES 0x00010000L /* disallow o readable files */ 58 #define SFF_NOTEXCL 0x00020000L /* creates don't need to be exclusive */ 59 #define SFF_EXECOK 0x00040000L /* executable files are ok (E_SM_ISEXEC) */ 60 #define SFF_NBLOCK 0x00080000L /* use a non-blocking lock */ 61 #define SFF_NORFILES (SFF_NOGRFILES|SFF_NOWRFILES) 62 63 /* pseudo-flags */ 64 #define SFF_NOLINK (SFF_NOHLINK|SFF_NOSLINK) 65 66 /* functions */ 67 extern int safefile __P((char *, UID_T, GID_T, char *, long, int, struct stat *)); 68 extern int safedirpath __P((char *, UID_T, GID_T, char *, long, int, int)); 69 extern int safeopen __P((char *, int, int, long)); 70 extern SM_FILE_T*safefopen __P((char *, int, int, long)); 71 extern int dfopen __P((char *, int, int, long)); 72 extern bool filechanged __P((char *, int, struct stat *)); 73 74 /* 75 ** DontBlameSendmail options 76 ** 77 ** Hopefully nobody uses these. 78 */ 79 80 #define DBS_SAFE 0 81 #define DBS_ASSUMESAFECHOWN 1 82 #define DBS_GROUPWRITABLEDIRPATHSAFE 2 83 #define DBS_GROUPWRITABLEFORWARDFILESAFE 3 84 #define DBS_GROUPWRITABLEINCLUDEFILESAFE 4 85 #define DBS_GROUPWRITABLEALIASFILE 5 86 #define DBS_WORLDWRITABLEALIASFILE 6 87 #define DBS_FORWARDFILEINUNSAFEDIRPATH 7 88 #define DBS_MAPINUNSAFEDIRPATH 8 89 #define DBS_LINKEDALIASFILEINWRITABLEDIR 9 90 #define DBS_LINKEDCLASSFILEINWRITABLEDIR 10 91 #define DBS_LINKEDFORWARDFILEINWRITABLEDIR 11 92 #define DBS_LINKEDINCLUDEFILEINWRITABLEDIR 12 93 #define DBS_LINKEDMAPINWRITABLEDIR 13 94 #define DBS_LINKEDSERVICESWITCHFILEINWRITABLEDIR 14 95 #define DBS_FILEDELIVERYTOHARDLINK 15 96 #define DBS_FILEDELIVERYTOSYMLINK 16 97 #define DBS_WRITEMAPTOHARDLINK 17 98 #define DBS_WRITEMAPTOSYMLINK 18 99 #define DBS_WRITESTATSTOHARDLINK 19 100 #define DBS_WRITESTATSTOSYMLINK 20 101 #define DBS_FORWARDFILEINGROUPWRITABLEDIRPATH 21 102 #define DBS_INCLUDEFILEINGROUPWRITABLEDIRPATH 22 103 #define DBS_CLASSFILEINUNSAFEDIRPATH 23 104 #define DBS_ERRORHEADERINUNSAFEDIRPATH 24 105 #define DBS_HELPFILEINUNSAFEDIRPATH 25 106 #define DBS_FORWARDFILEINUNSAFEDIRPATHSAFE 26 107 #define DBS_INCLUDEFILEINUNSAFEDIRPATHSAFE 27 108 #define DBS_RUNPROGRAMINUNSAFEDIRPATH 28 109 #define DBS_RUNWRITABLEPROGRAM 29 110 #define DBS_INCLUDEFILEINUNSAFEDIRPATH 30 111 #define DBS_NONROOTSAFEADDR 31 112 #define DBS_TRUSTSTICKYBIT 32 113 #define DBS_DONTWARNFORWARDFILEINUNSAFEDIRPATH 33 114 #define DBS_INSUFFICIENTENTROPY 34 115 #define DBS_GROUPREADABLESASLDBFILE 35 116 #define DBS_GROUPWRITABLESASLDBFILE 36 117 #define DBS_GROUPWRITABLEFORWARDFILE 37 118 #define DBS_GROUPWRITABLEINCLUDEFILE 38 119 #define DBS_WORLDWRITABLEFORWARDFILE 39 120 #define DBS_WORLDWRITABLEINCLUDEFILE 40 121 #define DBS_GROUPREADABLEKEYFILE 41 122 #if _FFR_GROUPREADABLEAUTHINFOFILE 123 # define DBS_GROUPREADABLEAUTHINFOFILE 42 124 #endif /* _FFR_GROUPREADABLEAUTHINFOFILE */ 125 126 /* struct defining such things */ 127 struct dbsval 128 { 129 char *dbs_name; /* name of DontBlameSendmail flag */ 130 unsigned char dbs_flag; /* numeric level */ 131 }; 132 133 /* Flags for submitmode */ 134 #define SUBMIT_UNKNOWN 0x0000 /* unknown agent type */ 135 #define SUBMIT_MTA 0x0001 /* act like a message transfer agent */ 136 #define SUBMIT_MSA 0x0002 /* act like a message submission agent */ 137 138