Mercurial > masqmail
diff src/libident/id_query.c @ 0:08114f7dcc23 0.2.21
this is masqmail-0.2.21 from oliver kurth
author | meillo@marmaro.de |
---|---|
date | Fri, 26 Sep 2008 17:05:23 +0200 |
parents | |
children | 26e34ae9a3e3 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/libident/id_query.c Fri Sep 26 17:05:23 2008 +0200 @@ -0,0 +1,88 @@ +/* +** id_query.c Transmit a query to an IDENT server +** +** Author: Peter Eriksson <pen@lysator.liu.se> +*/ + +#ifdef NeXT3 +# include <libc.h> +#endif + +#include <stdio.h> +#include <errno.h> +#include <signal.h> + +#ifdef HAVE_ANSIHEADERS +# include <stdlib.h> +# include <string.h> +# include <unistd.h> +#endif + +#include <sys/types.h> +#include <sys/wait.h> +#include <sys/time.h> + +#ifdef _AIX +# include <sys/select.h> +#endif + +#ifdef _AIX +# include <sys/select.h> +#endif +#ifdef VMS +# include <sys/socket.h> /* for fd_set */ +#endif +#define IN_LIBIDENT_SRC +#include "ident.h" + + +/* +int id_query __P4(ident_t *, id, + int, lport, + int, fport, + struct timeval *, timeout) +*/ + +int id_query __P(( ident_t *id, + int lport, + int fport, + __STRUCT_TIMEVAL_P timeout)) +{ +#ifdef SIGRETURNTYPE + SIGRETURNTYPE (*old_sig)(); +#else + void (*old_sig) __P((int)); +#endif + int res; + char buf[80]; + fd_set ws; + + sprintf(buf, "%d , %d\r\n", lport, fport); + + if (timeout) + { + FD_ZERO(&ws); + FD_SET(id->fd, &ws); + +#ifdef __hpux + if ((res = select(FD_SETSIZE, (int *)0, (int *)&ws, (int *)0, timeout)) < 0) +#else + if ((res = select(FD_SETSIZE, (fd_set *)0, &ws, (fd_set *)0, timeout)) < 0) +#endif + return -1; + + if (res == 0) + { + errno = ETIMEDOUT; + return -1; + } + } + + old_sig = signal(SIGPIPE, SIG_IGN); + + res = write(id->fd, buf, strlen(buf)); + + signal(SIGPIPE, old_sig); + + return res; +}