diff options
author | 2013-05-06 01:05:36 +0300 | |
---|---|---|
committer | 2013-05-10 10:46:22 +0200 | |
commit | 0329d8010faa17e3b3dec176c6a04b12a1fde49d (patch) | |
tree | 9ad0d8ae7f46b8efeaaf387da17c7942521c73b0 /smtpd/delivery_lmtp.c | |
parent | remove builtin sqlite and ldap table backends (diff) | |
download | OpenSMTPD-0329d8010faa17e3b3dec176c6a04b12a1fde49d.tar.xz OpenSMTPD-0329d8010faa17e3b3dec176c6a04b12a1fde49d.zip |
Open inet socket in a separate function
Diffstat (limited to '')
-rw-r--r-- | smtpd/delivery_lmtp.c | 38 |
1 files changed, 25 insertions, 13 deletions
diff --git a/smtpd/delivery_lmtp.c b/smtpd/delivery_lmtp.c index 9772133c..ef832b49 100644 --- a/smtpd/delivery_lmtp.c +++ b/smtpd/delivery_lmtp.c @@ -39,6 +39,9 @@ /* mda backend */ static void delivery_lmtp_open(struct deliver *); +static int inet_socket(char *); +static char* lmtp_getline(FILE *); + struct delivery_backend delivery_backend_lmtp = { 0, delivery_lmtp_open }; @@ -53,27 +56,18 @@ enum lmtp_state { LMTP_BYE }; -static char* lmtp_getline(FILE*); - -static void -delivery_lmtp_open(struct deliver *deliver) +static int +inet_socket (char *address) { - char *buffer; - char *lbuf; - char lhloname[255]; int s, n; - FILE *fp; char *hostname, *servname; struct addrinfo hints; struct addrinfo *result0, *result; - enum lmtp_state state = LMTP_BANNER; - size_t len; - servname = strchr(deliver->to, ':'); + servname = strchr(address, ':'); *servname++ = '\0'; - hostname = deliver->to; + hostname = address; s = -1; - fp = NULL; bzero(&hints, sizeof(hints)); hints.ai_family = PF_UNSPEC; @@ -101,6 +95,24 @@ delivery_lmtp_open(struct deliver *deliver) freeaddrinfo(result0); + return s; +} + +static void +delivery_lmtp_open(struct deliver *deliver) +{ + char *buffer; + char *lbuf; + char lhloname[255]; + int s; + FILE *fp; + enum lmtp_state state = LMTP_BANNER; + size_t len; + + fp = NULL; + + s = inet_socket(deliver->to); + if (s == -1 || (fp = fdopen(s, "r+")) == NULL) err(1, "couldn't establish connection"); |