Qsmtp  0.37
qsmtpd.h
Go to the documentation of this file.
1 
4 #ifndef QSMTPD_H
5 #define QSMTPD_H
6 
7 #include <qdns.h>
8 #include <sstring.h>
9 
10 #include <netinet/in.h>
11 #include <sys/queue.h>
12 #include <sys/types.h>
13 
17 struct smtpcomm {
18  char *name;
19  int len;
20  long mask;
21  int (*func)(void);
22  long state;
23  unsigned int flags;
26 };
27 
32 struct xmitstat {
33  unsigned int esmtp:1;
34  unsigned int ipv4conn:1;
35  unsigned int check2822:2;
36  unsigned int helostatus:3;
37  unsigned int datatype:1;
38  unsigned int spf:4;
39  signed int fromdomain:3;
40  unsigned int spacebug:1;
41  size_t thisbytes;
42  string mailfrom;
43  string authname;
44  char *tlsclient;
45  string remotehost;
46  char remoteip[INET6_ADDRSTRLEN];
47  const char *remoteinfo;
48  const char *remoteport;
49  string helostr;
51  struct in6_addr sremoteip;
52  char localip[INET6_ADDRSTRLEN];
53  struct in6_addr slocalip;
54  struct ips *frommx;
55  char *spfexp;
56  const char *spfmechanism;
57 };
58 
59 extern struct smtpcomm *current_command;
61 extern struct xmitstat xmitstat;
62 extern string heloname;
63 extern string msgidhost;
64 extern string liphost;
65 extern unsigned int goodrcpt;
66 extern unsigned long sslauth;
67 extern unsigned long databytes;
68 extern int relayclient;
69 extern unsigned long comstate;
70 extern int authhide;
71 extern int submission_mode;
73 extern int err_control(const char *);
74 extern int err_control2(const char *, const char *);
75 extern void freedata(void);
76 extern pid_t fork_clean();
77 extern int pipe_move(int p[2], int target);
78 void __attribute__ ((noreturn)) conn_cleanup(const int rc);
79 
80 #define EBOGUS 1002
81 #define EDONE 1003
82 
83 TAILQ_HEAD(, recip) head;
84 
94 struct recip {
95  TAILQ_ENTRY(recip) entries;
96  string to;
97  int ok;
98 };
99 
100 extern struct recip *thisrecip;
101 
102 #define HELOSTR (xmitstat.helostr.len ? xmitstat.helostr.s : xmitstat.remotehost.s)
103 #define HELOLEN (xmitstat.helostr.len ? xmitstat.helostr.len : xmitstat.remotehost.len)
104 
105 #define MAILFROM (xmitstat.mailfrom.len ? xmitstat.mailfrom.s : "")
106 
107 static inline int
108 connection_is_ipv4(void)
109 {
110 #ifdef IPV4ONLY
111  return 1;
112 #else /* IPV4ONLY */
113  return xmitstat.ipv4conn;
114 #endif /* IPV4ONLY */
115 }
116 
117 static inline int
118 is_authenticated_client(void)
119 {
120  return (xmitstat.authname.len != 0) || (xmitstat.tlsclient != NULL);
121 }
122 
123 #endif
xmitstat::fromdomain
signed int fromdomain
Definition: qsmtpd.h:39
err_control
int err_control(const char *)
write and log error message if opening config file leads to an error
Definition: qsmtpd.c:96
sslauth
unsigned long sslauth
Definition: qsmtpd.c:74
xmitstat::frommx
struct ips * frommx
Definition: qsmtpd.h:54
smtpcomm::flags
unsigned int flags
Definition: qsmtpd.h:23
xmitstat::localip
char localip[INET6_ADDRSTRLEN]
Definition: qsmtpd.h:52
smtpcomm::len
int len
Definition: qsmtpd.h:19
conn_cleanup
void conn_cleanup(const int rc)
clean up the allocated data and exit the process
Definition: qsmtpd.c:443
recip::to
string to
Definition: qsmtpd.h:96
heloname
string heloname
Definition: common_setup.c:17
xmitstat::check2822
unsigned int check2822
Definition: qsmtpd.h:35
smtpcomm::name
char * name
Definition: qsmtpd.h:18
sstring.h
definition of string record and headers of corresponding helper functions
msgidhost
string msgidhost
Definition: qsmtpd.c:80
authhide
int authhide
Definition: qsmtpd.c:84
relayclient
int relayclient
Definition: qsmtpd.c:71
ips
list of IP addresses for a given host
Definition: qdns.h:29
xmitstat::helostr
string helostr
Definition: qsmtpd.h:49
submission_mode
int submission_mode
Definition: qsmtpd.c:85
smtpcomm::mask
long mask
Definition: qsmtpd.h:20
smtpcomm
Definition: qsmtpd.h:17
goodrcpt
unsigned int goodrcpt
Definition: qsmtpd.c:76
recip::ok
int ok
Definition: qsmtpd.h:97
xmitstat::esmtp
unsigned int esmtp
Definition: qsmtpd.h:33
xmitstat::datatype
unsigned int datatype
Definition: qsmtpd.h:37
xmitstat::remotehost
string remotehost
Definition: qsmtpd.h:45
xmitstat::remoteinfo
const char * remoteinfo
Definition: qsmtpd.h:47
xmitstat::tlsclient
char * tlsclient
Definition: qsmtpd.h:44
recip::TAILQ_ENTRY
TAILQ_ENTRY(recip) entries
xmitstat::sremoteip
struct in6_addr sremoteip
Definition: qsmtpd.h:51
xmitstat::thisbytes
size_t thisbytes
Definition: qsmtpd.h:41
xmitstat::remoteport
const char * remoteport
Definition: qsmtpd.h:48
comstate
unsigned long comstate
Definition: qsmtpd.c:83
liphost
string liphost
Definition: qsmtpd.c:81
smtpcomm::func
int(* func)(void)
Definition: qsmtpd.h:21
smtpcomm::state
long state
Definition: qsmtpd.h:22
xmitstat::spfexp
char * spfexp
Definition: qsmtpd.h:55
freedata
void freedata(void)
free all ressources allocated for mail transaction
Definition: qsmtpd.c:379
xmitstat::spfmechanism
const char * spfmechanism
Definition: qsmtpd.h:56
xmitstat::spf
unsigned int spf
Definition: qsmtpd.h:38
xmitstat::authname
string authname
Definition: qsmtpd.h:43
err_control2
int err_control2(const char *, const char *)
write and log error message if opening config file leads to an error
Definition: qsmtpd.c:112
xmitstat::mailfrom
string mailfrom
Definition: qsmtpd.h:42
recip
list of recipients given for this transaction
Definition: qsmtpd.h:94
pipe_move
int pipe_move(int p[2], int target)
move the read end of the pipe to the target descriptor
Definition: child.c:22
qdns.h
headers of functions for DNS lookups
xmitstat::remoteip
char remoteip[INET6_ADDRSTRLEN]
Definition: qsmtpd.h:46
fork_clean
pid_t fork_clean()
fork() but clean up internal structures
Definition: qsmtpd.c:406
xmitstat::slocalip
struct in6_addr slocalip
Definition: qsmtpd.h:53
xmitstat::spacebug
unsigned int spacebug
Definition: qsmtpd.h:40
xmitstat::helostatus
unsigned int helostatus
Definition: qsmtpd.h:36
string::len
size_t len
Definition: sstring.h:17
databytes
unsigned long databytes
Definition: qsmtpd.c:75
xmitstat::ipv4conn
unsigned int ipv4conn
Definition: qsmtpd.h:34
current_command
struct smtpcomm * current_command
Definition: qsmtpd.c:48
xmitstat
Definition: qsmtpd.h:32