masqmail-0.2

view src/libident/id_query.c @ 171:349518b940db

added support for STARTTLS wrappers added the route config option `instant_helo' which causes masqmail, as SMTP client, not to wait for the server's 220 greeting. Instead if says EHLO right at once. You'll need this for STARTTLS wrappers that usually eat the greeting line.
author meillo@marmaro.de
date Thu, 22 Jul 2010 23:30:05 +0200
parents 08114f7dcc23
children
line source
1 /*
2 ** id_query.c Transmit a query to an IDENT server
3 **
4 ** Author: Peter Eriksson <pen@lysator.liu.se>
5 */
7 #ifdef NeXT3
8 # include <libc.h>
9 #endif
11 #include <stdio.h>
12 #include <errno.h>
13 #include <signal.h>
15 #ifdef HAVE_ANSIHEADERS
16 # include <stdlib.h>
17 # include <string.h>
18 # include <unistd.h>
19 #endif
21 #include <sys/types.h>
22 #include <sys/wait.h>
23 #include <sys/time.h>
25 #ifdef _AIX
26 # include <sys/select.h>
27 #endif
29 #ifdef _AIX
30 # include <sys/select.h>
31 #endif
32 #ifdef VMS
33 # include <sys/socket.h> /* for fd_set */
34 #endif
35 #define IN_LIBIDENT_SRC
36 #include "ident.h"
39 /*
40 int
41 id_query __P4(ident_t *, id, int, lport, int, fport, struct timeval *, timeout)
42 */
44 int
45 id_query __P((ident_t * id, int lport, int fport, __STRUCT_TIMEVAL_P timeout))
46 {
47 #ifdef SIGRETURNTYPE
48 SIGRETURNTYPE(*old_sig) ();
49 #else
50 void (*old_sig) __P((int));
51 #endif
52 int res;
53 char buf[80];
54 fd_set ws;
56 sprintf(buf, "%d , %d\r\n", lport, fport);
58 if (timeout) {
59 FD_ZERO(&ws);
60 FD_SET(id->fd, &ws);
62 #ifdef __hpux
63 if ((res = select(FD_SETSIZE, (int *) 0, (int *) &ws, (int *) 0, timeout)) < 0)
64 #else
65 if ((res = select(FD_SETSIZE, (fd_set *) 0, &ws, (fd_set *) 0, timeout)) < 0)
66 #endif
67 return -1;
69 if (res == 0) {
70 errno = ETIMEDOUT;
71 return -1;
72 }
73 }
75 old_sig = signal(SIGPIPE, SIG_IGN);
77 res = write(id->fd, buf, strlen(buf));
79 signal(SIGPIPE, old_sig);
81 return res;
82 }