/******************************************************************************/
-/* postlicyd: a postfix policy daemon with a lot of features */
+/* pfixtools: a collection of postfix related tools */
/* ~~~~~~~~~ */
/* ________________________________________________________________________ */
/* */
/******************************************************************************/
/*
- * Copyright © 2006 Pierre Habouzit
+ * Copyright © 2006-2007 Pierre Habouzit
*/
-#ifndef POSTLICYD_POLICY_H
-#define POSTLICYD_POLICY_H
+#ifndef PFIXTOOLS_POLICY_H
+#define PFIXTOOLS_POLICY_H
-enum protocol_state {
- STATE_CONNECT,
- STATE_HELO, /* or EHLO */
- STATE_MAIL,
- STATE_RCPT,
- STATE_DATE,
- STATE_EOM,
- STATE_VRFY,
- STATE_ETRN,
+#include <stddef.h>
+
+#include "buffer.h"
+
+enum smtp_state {
+ SMTP_UNKNOWN,
+ SMTP_CONNECT,
+ SMTP_EHLO,
+ SMTP_HELO = SMTP_EHLO,
+ SMTP_MAIL,
+ SMTP_RCPT,
+ SMTP_DATA,
+ SMTP_END_OF_MESSAGE,
+ SMTP_VRFY,
+ SMTP_ETRN,
};
-typedef struct policy_request {
- unsigned ready : 1;
+/* \see http://www.postfix.org/SMTPD_POLICY_README.html */
+typedef struct query_t {
unsigned state : 4;
unsigned esmtp : 1;
const char *encryption_cipher;
const char *encryption_keysize;
const char *etrn_domain;
-} policy_request;
+ buffer_t data;
+} query_t;
+
+static inline query_t *query_init(query_t *rq) {
+ memset(rq, 0, offsetof(query_t, data));
+ buffer_init(&rq->data);
+ return rq;
+}
+static inline query_t *query_reset(query_t *rq) {
+ memset(rq, 0, offsetof(query_t, data));
+ buffer_reset(&rq->data);
+ return rq;
+}
+static inline void query_wipe(query_t *rq) {
+ buffer_wipe(&rq->data);
+}
+DO_NEW(query_t, query);
+DO_DELETE(query_t, query);
+
+
+void *policy_run(int fd, void *);
#endif