Mercurial > masqmail
diff src/libident/ident.h @ 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/ident.h Fri Sep 26 17:05:23 2008 +0200 @@ -0,0 +1,194 @@ +/* +** ident.h +** +** Author: Peter Eriksson <pen@lysator.liu.se> +** Intruder: Pär Emanuelsson <pell@lysator.liu.se> +*/ + +#ifndef __IDENT_H__ +#define __IDENT_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* Sigh */ +#ifdef __STDC__ +# if __STDC__ == 1 +# define IS_STDC 1 +# endif +#endif + +#ifdef __P +# undef __P +#endif + +#ifdef IS_STDC +# define __P(AL) AL + +#ifdef IN_LIBIDENT_SRC + +# define __P1(t1,a1) \ + (t1 a1) + +# define __P2(t1,a1,t2,a2) \ + (t1 a1, t2 a2) + +# define __P3(t1,a1,t2,a2,t3,a3) \ + (t1 a1, t2 a2, t3 a3) + +# define __P4(t1,a1,t2,a2,t3,a3,t4,a4) \ + (t1 a1, t2 a2, t3 a3, t4 a4) + +# define __P5(t1,a1,t2,a2,t3,a3,t4,a4,t5,a5) \ + (t1 a1, t2 a2, t3 a3, t4 a4, t5 a5) + +# define __P7(t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \ + (t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6, t7 a7) +#endif + +#else + +# define __P(AL) () + +#ifdef IN_LIBIDENT_SRC + +# define __P1(t1,a1) (a1) \ + t1 a1; +# define __P2(t1,a1,t2,a2) (a1, a2) \ + t1 a1; \ + t2 a2; +# define __P3(t1,a1,t2,a2,t3,a3) (a1, a2, a3) \ + t1 a1; \ + t2 a2; \ + t3 a3; +# define __P4(t1,a1,t2,a2,t3,a3,t4,a4) (a1, a2, a3, a4) \ + t1 a1; \ + t2 a2; \ + t3 a3; \ + t4 a4; +# define __P5(t1,a1,t2,a2,t3,a3,t4,a4,t5,a5) (a1, a2, a3, a4, a5) \ + t1 a1; \ + t2 a2; \ + t3 a3; \ + t4 a4; \ + t5 a5; +# define __P7(t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \ + (a1, a2, a3, a4, a5, a6, a7) \ + t1 a1; \ + t2 a2; \ + t3 a3; \ + t4 a4; \ + t5 a5; \ + t6 a6; \ + t7 a7; +#endif +#endif + +#ifdef IS_STDC +# undef IS_STDC +#endif + +#ifdef _AIX +# include <sys/select.h> +#endif +#ifdef __sgi +# include <bstring.h> +#endif +#include <sys/types.h> +#include <netinet/in.h> +#include <sys/time.h> + +#if defined(VMS) && !defined(FD_SETSIZE) +# define FD_SETSIZE 64 +#endif + +/* + * Sigh, GCC v2 complains when using undefined struct tags + * in function prototypes... + */ +#if defined(__GNUC__) && !defined(INADDR_ANY) +# define __STRUCT_IN_ADDR_P void * +#else +# define __STRUCT_IN_ADDR_P struct in_addr * +#endif + +#if defined(__GNUC__) && !defined(DST_NONE) +# define __STRUCT_TIMEVAL_P void * +#else +# define __STRUCT_TIMEVAL_P struct timeval * +#endif + +#if defined(__sgi) && defined(_POSIX_SOURCE) +# undef __STRUCT_TIMEVAL_P +# define __STRUCT_TIMEVAL_P void * +#endif + +#ifndef IDBUFSIZE +# define IDBUFSIZE 2048 +#endif + +#ifndef IDPORT +# define IDPORT 113 +#endif + +typedef struct +{ + int fd; + char buf[IDBUFSIZE]; +} ident_t; + +typedef struct { + int lport; /* Local port */ + int fport; /* Far (remote) port */ + char *identifier; /* Normally user name */ + char *opsys; /* OS */ + char *charset; /* Charset (what did you expect?) */ +} IDENT; /* For higher-level routines */ + +/* Low-level calls and macros */ +#define id_fileno(ID) ((ID)->fd) + +extern ident_t * id_open __P((__STRUCT_IN_ADDR_P laddr, + __STRUCT_IN_ADDR_P faddr, + __STRUCT_TIMEVAL_P timeout)); + +extern int id_close __P((ident_t *id)); + +extern int id_query __P((ident_t *id, + int lport, + int fport, + __STRUCT_TIMEVAL_P timeout)); + +extern int id_parse __P((ident_t *id, + __STRUCT_TIMEVAL_P timeout, + int *lport, + int *fport, + char **identifier, + char **opsys, + char **charset)); + +/* High-level calls */ + +extern IDENT *ident_lookup __P((int fd, int timeout)); + +extern char *ident_id __P((int fd, int timeout)); + +extern IDENT *ident_query __P(( __STRUCT_IN_ADDR_P laddr, __STRUCT_IN_ADDR_P raddr, int lport, int rport, int timeout)); + +extern void ident_free __P((IDENT *id)); + +extern char id_version[]; + +#ifdef IN_LIBIDENT_SRC + +extern char *id_strdup __P((char *str)); +extern char *id_strtok __P((char *cp, char *cs, char *dc)); + +#endif + +#ifdef __cplusplus +} +#endif + +#endif