X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=fetchmail.h;h=4560c6834c92b1fe582574750731edb1d8852e0b;hb=24ab4a608c8ee1613698a1a312a7b30d138a241e;hp=8cda2b3af2b238741f19979f3fe17393e8e46992;hpb=2a7f2a7949a3b31141719d47804efb7dfe3fff1e;p=~andy%2Ffetchmail diff --git a/fetchmail.h b/fetchmail.h index 8cda2b3a..4560c683 100644 --- a/fetchmail.h +++ b/fetchmail.h @@ -27,13 +27,18 @@ struct addrinfo; #include "uid_db.h" -/* constants designating the various supported protocols */ -#define P_AUTO 1 -#define P_POP3 3 -#define P_APOP 4 -#define P_IMAP 6 -#define P_ETRN 7 -#define P_ODMR 8 +#ifdef HAVE_LIBPWMD +#include +#endif + +/** constants designating the various supported protocols -- ordered */ +enum protocols { + P_AUTO = 1 /**< probe IMAP and POP3 - deprecated */, + P_POP3 /** POP3, including APOP and KPOP, RFC 1939 et al. */, + P_IMAP /** IMAP4, RFC 3501 */, + P_ETRN /** ETRN - SMTP Service Extension for Remote Message Queue Starting, "extended TURN", RFC 1985 */, + P_ODMR /** ODMR/ATRN - On-Demand Mail Relay SMTP with dynamic addresses/Authenticated TURN, RFC 2645 */ +}; #define SMTP_PORT "smtp" #define SMTP_PORT_NUM 25 @@ -51,17 +56,20 @@ struct addrinfo; */ #define MAILBOX_PROTOCOL(ctl) ((ctl)->server.protocol < P_ETRN) -/* authentication types */ -#define A_ANY 0 /* use the first method that works */ -#define A_PASSWORD 1 /* password authentication */ -#define A_NTLM 2 /* Microsoft NTLM protocol */ -#define A_CRAM_MD5 3 /* CRAM-MD5 shrouding (RFC2195) */ -#define A_OTP 4 /* One-time password (RFC1508) */ -#define A_KERBEROS_V5 6 /* authenticate w/ Kerberos V5 */ -#define A_GSSAPI 7 /* authenticate with GSSAPI */ -#define A_SSH 8 /* authentication at session level */ -#define A_MSN 9 /* same as NTLM with keyword MSN */ -#define A_EXTERNAL 10 /* external authentication (client cert) */ +/** authentication types */ +enum authenticators { + A_ANY = 0 /**< use the first method that works */, + A_PASSWORD /** password authentication */, + A_NTLM /** Microsoft NTLM protocol */, + A_CRAM_MD5 /** CRAM-MD5 shrouding (RFC2195) */, + A_OTP /** One-time password (RFC1508) */, + A_APOP /** POP3 APOP */, + A_KERBEROS_V5 /** authenticate w/ Kerberos V5 */, + A_GSSAPI /** authenticate with GSSAPI */, + A_SSH /** authentication at session level */, + A_MSN /** same as NTLM with keyword MSN */, + A_EXTERNAL /** external authentication (client cert) */ +}; /* some protocols or authentication types (KERBEROS, GSSAPI, SSH) don't * require a password */ @@ -157,6 +165,9 @@ struct runctl char *pidfile; /** where to record the PID of daemon mode processes */ const char *postmaster; char *properties; +#ifdef HAVE_LIBPWMD + int pinentry_timeout; +#endif int poll_interval; /** poll interval in seconds (daemon mode, 0 == off) */ flag bouncemail; flag spambounce; @@ -246,7 +257,7 @@ struct hostdata /* shared among all user connections to given server */ struct idlist *akalist; /* server name first, then akas */ struct idlist *localdomains; /* list of pass-through domains */ int protocol; /* protocol type */ - const char *service; /* service name */ + char *service; /* service name */ int interval; /* # cycles to skip between polls */ int authenticate; /* authentication mode to try */ int timeout; /* inactivity timout in seconds */ @@ -255,7 +266,6 @@ struct hostdata /* shared among all user connections to given server */ char *qvirtual; /* prefix removed from local user id */ flag skip; /* suppress poll in implicit mode? */ flag dns; /* do DNS lookup on multidrop? */ - flag uidl; /* use RFC1725 UIDLs? */ #ifdef SDPS_ENABLE flag sdps; /* use Demon Internet SDPS *ENV */ #endif /* SDPS_ENABLE */ @@ -310,6 +320,11 @@ struct query char *password; /* remote password to use */ struct idlist *mailboxes; /* list of mailboxes to check */ +#ifdef HAVE_LIBPWMD + char *pwmd_socket; /* socket to connect to */ + char *pwmd_file; /* file to open on the server */ +#endif + /* per-forwarding-target data */ struct idlist *smtphunt; /* list of SMTP hosts to try forwarding to */ struct idlist *domainlist; /* domainlist to fetch from */ @@ -382,11 +397,11 @@ struct query struct query *next; /* next query control block in chain */ }; -struct msgblk /* message header parsed for open_sink() */ +struct msgblk /** message header parsed for open_sink() */ { - char *headers; /* raw message headers */ - struct idlist *recipients; /* addressees */ - char return_path[HOSTLEN + USERNAMELEN + 4]; + char *headers; /**< raw message headers */ + struct idlist *recipients; /**< addressees */ + char return_path[HOSTLEN + USERNAMELEN + 4]; /**< envelope sender */ int msglen; int reallen; }; @@ -490,6 +505,16 @@ void resetidletimeout(void); int do_protocol(struct query *, const struct method *); /* transact.c: transaction support */ +/** \ingroup gen_recv_split + * Data structure to cache data between \func gen_recv_split calls, + * must be initialized before use by calling \func gen_recv_split_init. */ +struct RecvSplit +{ + char prefix[100]; /**< prefix to match/repeat when splitting lines */ + int cached; /**< flag to record if we have data cached in \a buf */ + char buf[MSGBUFSIZE]; /**< buffer for cached data */ +}; + void init_transact(const struct method *); int readheaders(int sock, long fetchlen, @@ -502,6 +527,8 @@ void gen_send(int sock, const char *, ... ) __attribute__ ((format (printf, 2, 3))) ; int gen_recv(int sock, char *buf, int size); +void gen_recv_split_init(const char *prefix, struct RecvSplit *rs); +int gen_recv_split(int sock, char *buf, int size, struct RecvSplit *rs); int gen_transact(int sock, const char *, ... ) __attribute__ ((format (printf, 2, 3))) ; @@ -614,7 +641,6 @@ int doODMR (struct query *); /* authentication functions */ int do_cram_md5(int sock, const char *command, struct query *ctl, const char *strip); -int do_rfc1731(int sock, const char *command, const char *truename); int check_gss_creds(const char *service, const char *hostname); int do_gssauth(int sock, const char *command, const char *service, const char *hostname, const char *username); int do_otp(int sock, const char *command, struct query *ctl); @@ -625,7 +651,7 @@ int do_otp(int sock, const char *command, struct query *ctl); extern char currentwd[1024], rcfiledir[1024]; struct query *hostalloc(struct query *); -int parsecmdline (int, char **, struct runctl *, struct query *); +int parsecmdline (int, char **, struct runctl *, struct query *, flag *); char *prependdir (const char *, const char *); char *MD5Digest (unsigned const char *); void hmac_md5 (const unsigned char *, size_t, const unsigned char *, size_t, unsigned char *, size_t);