sendmail.h
上传用户:xu_441
上传日期:2007-01-04
资源大小:1640k
文件大小:6k
源码类别:

Email客户端

开发平台:

Unix_Linux

  1. /*
  2.  * Copyright (c) 1998, 1999 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.27 1999/12/03 03:40:26 gshapiro Exp $
  14.  */
  15. /*
  16. **  SENDMAIL.H -- Global definitions for sendmail.
  17. */
  18. # include <stdio.h>
  19. #include <string.h>
  20. #include "conf.h"
  21. #include "sendmail/errstring.h"
  22. #include "sendmail/useful.h"
  23. /**********************************************************************
  24. **  Table sizes, etc....
  25. ** There shouldn't be much need to change these....
  26. **********************************************************************/
  27. #define MAXMAILERS 25 /* maximum mailers known to system */
  28. /*
  29. **  Data structure for bit maps.
  30. **
  31. ** Each bit in this map can be referenced by an ascii character.
  32. ** This is 256 possible bits, or 32 8-bit bytes.
  33. */
  34. #define BITMAPBITS 256 /* number of bits in a bit map */
  35. #define BYTEBITS 8 /* number of bits in a byte */
  36. #define BITMAPBYTES (BITMAPBITS / BYTEBITS) /* number of bytes in bit map */
  37. /* internal macros */
  38. #define _BITWORD(bit) ((bit) / (BYTEBITS * sizeof (int)))
  39. #define _BITBIT(bit) ((unsigned int)1 << ((bit) % (BYTEBITS * sizeof (int))))
  40. typedef unsigned int BITMAP256[BITMAPBYTES / sizeof (int)];
  41. /* test bit number N */
  42. #define bitnset(bit, map) ((map)[_BITWORD(bit)] & _BITBIT(bit))
  43. /* set bit number N */
  44. #define setbitn(bit, map) (map)[_BITWORD(bit)] |= _BITBIT(bit)
  45. /* clear bit number N */
  46. #define clrbitn(bit, map) (map)[_BITWORD(bit)] &= ~_BITBIT(bit)
  47. /* clear an entire bit map */
  48. #define clrbitmap(map) memset((char *) map, '', BITMAPBYTES)
  49. /*
  50. **  Utility macros
  51. */
  52. /* return number of bytes left in a buffer */
  53. #define SPACELEFT(buf, ptr) (sizeof buf - ((ptr) - buf))
  54. /*
  55. **  Flags passed to safefile/safedirpath.
  56. */
  57. #define SFF_ANYFILE 0L /* no special restrictions */
  58. #define SFF_MUSTOWN 0x00000001L /* user must own this file */
  59. #define SFF_NOSLINK 0x00000002L /* file cannot be a symbolic link */
  60. #define SFF_ROOTOK 0x00000004L /* ok for root to own this file */
  61. #define SFF_RUNASREALUID 0x00000008L /* if no ctladdr, run as real uid */
  62. #define SFF_NOPATHCHECK 0x00000010L /* don't bother checking dir path */
  63. #define SFF_SETUIDOK 0x00000020L /* setuid files are ok */
  64. #define SFF_CREAT 0x00000040L /* ok to create file if necessary */
  65. #define SFF_REGONLY 0x00000080L /* regular files only */
  66. #define SFF_SAFEDIRPATH 0x00000100L /* no writable directories allowed */
  67. #define SFF_NOHLINK 0x00000200L /* file cannot have hard links */
  68. #define SFF_NOWLINK 0x00000400L /* links only in non-writable dirs */
  69. #define SFF_NOGWFILES 0x00000800L /* disallow world writable files */
  70. #define SFF_NOWWFILES 0x00001000L /* disallow group writable files */
  71. #define SFF_NORFILES 0x00008000L /* disallow g/o readable files */
  72. /* flags that are actually specific to safeopen/safefopen/dfopen */
  73. #define SFF_OPENASROOT 0x00002000L /* open as root instead of real user */
  74. #define SFF_NOLOCK 0x00004000L /* don't lock the file */
  75. #define SFF_NOTEXCL 0x00010000L /* creates don't need to be exclusive */
  76. #define SFF_EXECOK 0x00020000L /* executable files are ok (E_SM_ISEXEC) */
  77. /* pseudo-flags */
  78. #define SFF_NOLINK (SFF_NOHLINK|SFF_NOSLINK)
  79. /* functions */
  80. extern int safefile __P((char *, UID_T, GID_T, char *, long, int, struct stat *));
  81. extern int safedirpath __P((char *, UID_T, GID_T, char *, long, int, int));
  82. extern int safeopen __P((char *, int, int, long));
  83. extern FILE *safefopen __P((char *, int, int, long));
  84. extern int dfopen __P((char *, int, int, long));
  85. extern bool filechanged __P((char *, int, struct stat *));
  86. /*
  87. **  DontBlameSendmail options
  88. **
  89. ** Hopefully nobody uses these.
  90. */
  91. #define DBS_SAFE 0
  92. #define DBS_ASSUMESAFECHOWN 1
  93. #define DBS_GROUPWRITABLEDIRPATHSAFE 2
  94. #define DBS_GROUPWRITABLEFORWARDFILESAFE 3
  95. #define DBS_GROUPWRITABLEINCLUDEFILESAFE 4
  96. #define DBS_GROUPWRITABLEALIASFILE 5
  97. #define DBS_WORLDWRITABLEALIASFILE 6
  98. #define DBS_FORWARDFILEINUNSAFEDIRPATH 7
  99. #define DBS_MAPINUNSAFEDIRPATH 8
  100. #define DBS_LINKEDALIASFILEINWRITABLEDIR 9
  101. #define DBS_LINKEDCLASSFILEINWRITABLEDIR 10
  102. #define DBS_LINKEDFORWARDFILEINWRITABLEDIR 11
  103. #define DBS_LINKEDINCLUDEFILEINWRITABLEDIR 12
  104. #define DBS_LINKEDMAPINWRITABLEDIR 13
  105. #define DBS_LINKEDSERVICESWITCHFILEINWRITABLEDIR 14
  106. #define DBS_FILEDELIVERYTOHARDLINK 15
  107. #define DBS_FILEDELIVERYTOSYMLINK 16
  108. #define DBS_WRITEMAPTOHARDLINK 17
  109. #define DBS_WRITEMAPTOSYMLINK 18
  110. #define DBS_WRITESTATSTOHARDLINK 19
  111. #define DBS_WRITESTATSTOSYMLINK 20
  112. #define DBS_FORWARDFILEINGROUPWRITABLEDIRPATH 21
  113. #define DBS_INCLUDEFILEINGROUPWRITABLEDIRPATH 22
  114. #define DBS_CLASSFILEINUNSAFEDIRPATH 23
  115. #define DBS_ERRORHEADERINUNSAFEDIRPATH 24
  116. #define DBS_HELPFILEINUNSAFEDIRPATH 25
  117. #define DBS_FORWARDFILEINUNSAFEDIRPATHSAFE 26
  118. #define DBS_INCLUDEFILEINUNSAFEDIRPATHSAFE 27
  119. #define DBS_RUNPROGRAMINUNSAFEDIRPATH 28
  120. #define DBS_RUNWRITABLEPROGRAM 29
  121. #define DBS_INCLUDEFILEINUNSAFEDIRPATH 30
  122. #define DBS_NONROOTSAFEADDR 31
  123. #define DBS_TRUSTSTICKYBIT 32
  124. #define DBS_DONTWARNFORWARDFILEINUNSAFEDIRPATH 33
  125. /* struct defining such things */
  126. struct dbsval
  127. {
  128. char *dbs_name; /* name of DontBlameSendmail flag */
  129. u_char dbs_flag; /* numeric level */
  130. };
  131. #if _FFR_DPRINTF
  132. extern void dprintf __P((const char *, ...));
  133. extern int dflush __P((void));
  134. #else /* _FFR_DPRINTF */
  135. #define dprintf printf
  136. #define dflush() fflush(stdout)
  137. #endif /* _FFR_DPRINTF */
  138. #if !HASSNPRINTF
  139. extern int snprintf __P((char *, size_t, const char *, ...));
  140. extern int vsnprintf __P((char *, size_t, const char *, va_list));
  141. #endif /* !HASSNPRINTF */
  142. extern char *quad_to_string __P((QUAD_T));
  143. extern size_t strlcpy __P((char *, const char *, size_t));
  144. extern size_t strlcat __P((char *, const char *, size_t));