masqmail-0.2

annotate src/libident/ident.h @ 0:08114f7dcc23

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
rev   line source
meillo@0 1 /*
meillo@0 2 ** ident.h
meillo@0 3 **
meillo@0 4 ** Author: Peter Eriksson <pen@lysator.liu.se>
meillo@0 5 ** Intruder: Pär Emanuelsson <pell@lysator.liu.se>
meillo@0 6 */
meillo@0 7
meillo@0 8 #ifndef __IDENT_H__
meillo@0 9 #define __IDENT_H__
meillo@0 10
meillo@0 11 #ifdef __cplusplus
meillo@0 12 extern "C" {
meillo@0 13 #endif
meillo@0 14
meillo@0 15 /* Sigh */
meillo@0 16 #ifdef __STDC__
meillo@0 17 # if __STDC__ == 1
meillo@0 18 # define IS_STDC 1
meillo@0 19 # endif
meillo@0 20 #endif
meillo@0 21
meillo@0 22 #ifdef __P
meillo@0 23 # undef __P
meillo@0 24 #endif
meillo@0 25
meillo@0 26 #ifdef IS_STDC
meillo@0 27 # define __P(AL) AL
meillo@0 28
meillo@0 29 #ifdef IN_LIBIDENT_SRC
meillo@0 30
meillo@0 31 # define __P1(t1,a1) \
meillo@0 32 (t1 a1)
meillo@0 33
meillo@0 34 # define __P2(t1,a1,t2,a2) \
meillo@0 35 (t1 a1, t2 a2)
meillo@0 36
meillo@0 37 # define __P3(t1,a1,t2,a2,t3,a3) \
meillo@0 38 (t1 a1, t2 a2, t3 a3)
meillo@0 39
meillo@0 40 # define __P4(t1,a1,t2,a2,t3,a3,t4,a4) \
meillo@0 41 (t1 a1, t2 a2, t3 a3, t4 a4)
meillo@0 42
meillo@0 43 # define __P5(t1,a1,t2,a2,t3,a3,t4,a4,t5,a5) \
meillo@0 44 (t1 a1, t2 a2, t3 a3, t4 a4, t5 a5)
meillo@0 45
meillo@0 46 # define __P7(t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \
meillo@0 47 (t1 a1, t2 a2, t3 a3, t4 a4, t5 a5, t6 a6, t7 a7)
meillo@0 48 #endif
meillo@0 49
meillo@0 50 #else
meillo@0 51
meillo@0 52 # define __P(AL) ()
meillo@0 53
meillo@0 54 #ifdef IN_LIBIDENT_SRC
meillo@0 55
meillo@0 56 # define __P1(t1,a1) (a1) \
meillo@0 57 t1 a1;
meillo@0 58 # define __P2(t1,a1,t2,a2) (a1, a2) \
meillo@0 59 t1 a1; \
meillo@0 60 t2 a2;
meillo@0 61 # define __P3(t1,a1,t2,a2,t3,a3) (a1, a2, a3) \
meillo@0 62 t1 a1; \
meillo@0 63 t2 a2; \
meillo@0 64 t3 a3;
meillo@0 65 # define __P4(t1,a1,t2,a2,t3,a3,t4,a4) (a1, a2, a3, a4) \
meillo@0 66 t1 a1; \
meillo@0 67 t2 a2; \
meillo@0 68 t3 a3; \
meillo@0 69 t4 a4;
meillo@0 70 # define __P5(t1,a1,t2,a2,t3,a3,t4,a4,t5,a5) (a1, a2, a3, a4, a5) \
meillo@0 71 t1 a1; \
meillo@0 72 t2 a2; \
meillo@0 73 t3 a3; \
meillo@0 74 t4 a4; \
meillo@0 75 t5 a5;
meillo@0 76 # define __P7(t1,a1,t2,a2,t3,a3,t4,a4,t5,a5,t6,a6,t7,a7) \
meillo@0 77 (a1, a2, a3, a4, a5, a6, a7) \
meillo@0 78 t1 a1; \
meillo@0 79 t2 a2; \
meillo@0 80 t3 a3; \
meillo@0 81 t4 a4; \
meillo@0 82 t5 a5; \
meillo@0 83 t6 a6; \
meillo@0 84 t7 a7;
meillo@0 85 #endif
meillo@0 86 #endif
meillo@0 87
meillo@0 88 #ifdef IS_STDC
meillo@0 89 # undef IS_STDC
meillo@0 90 #endif
meillo@0 91
meillo@0 92 #ifdef _AIX
meillo@0 93 # include <sys/select.h>
meillo@0 94 #endif
meillo@0 95 #ifdef __sgi
meillo@0 96 # include <bstring.h>
meillo@0 97 #endif
meillo@0 98 #include <sys/types.h>
meillo@0 99 #include <netinet/in.h>
meillo@0 100 #include <sys/time.h>
meillo@0 101
meillo@0 102 #if defined(VMS) && !defined(FD_SETSIZE)
meillo@0 103 # define FD_SETSIZE 64
meillo@0 104 #endif
meillo@0 105
meillo@0 106 /*
meillo@0 107 * Sigh, GCC v2 complains when using undefined struct tags
meillo@0 108 * in function prototypes...
meillo@0 109 */
meillo@0 110 #if defined(__GNUC__) && !defined(INADDR_ANY)
meillo@0 111 # define __STRUCT_IN_ADDR_P void *
meillo@0 112 #else
meillo@0 113 # define __STRUCT_IN_ADDR_P struct in_addr *
meillo@0 114 #endif
meillo@0 115
meillo@0 116 #if defined(__GNUC__) && !defined(DST_NONE)
meillo@0 117 # define __STRUCT_TIMEVAL_P void *
meillo@0 118 #else
meillo@0 119 # define __STRUCT_TIMEVAL_P struct timeval *
meillo@0 120 #endif
meillo@0 121
meillo@0 122 #if defined(__sgi) && defined(_POSIX_SOURCE)
meillo@0 123 # undef __STRUCT_TIMEVAL_P
meillo@0 124 # define __STRUCT_TIMEVAL_P void *
meillo@0 125 #endif
meillo@0 126
meillo@0 127 #ifndef IDBUFSIZE
meillo@0 128 # define IDBUFSIZE 2048
meillo@0 129 #endif
meillo@0 130
meillo@0 131 #ifndef IDPORT
meillo@0 132 # define IDPORT 113
meillo@0 133 #endif
meillo@0 134
meillo@0 135 typedef struct
meillo@0 136 {
meillo@0 137 int fd;
meillo@0 138 char buf[IDBUFSIZE];
meillo@0 139 } ident_t;
meillo@0 140
meillo@0 141 typedef struct {
meillo@0 142 int lport; /* Local port */
meillo@0 143 int fport; /* Far (remote) port */
meillo@0 144 char *identifier; /* Normally user name */
meillo@0 145 char *opsys; /* OS */
meillo@0 146 char *charset; /* Charset (what did you expect?) */
meillo@0 147 } IDENT; /* For higher-level routines */
meillo@0 148
meillo@0 149 /* Low-level calls and macros */
meillo@0 150 #define id_fileno(ID) ((ID)->fd)
meillo@0 151
meillo@0 152 extern ident_t * id_open __P((__STRUCT_IN_ADDR_P laddr,
meillo@0 153 __STRUCT_IN_ADDR_P faddr,
meillo@0 154 __STRUCT_TIMEVAL_P timeout));
meillo@0 155
meillo@0 156 extern int id_close __P((ident_t *id));
meillo@0 157
meillo@0 158 extern int id_query __P((ident_t *id,
meillo@0 159 int lport,
meillo@0 160 int fport,
meillo@0 161 __STRUCT_TIMEVAL_P timeout));
meillo@0 162
meillo@0 163 extern int id_parse __P((ident_t *id,
meillo@0 164 __STRUCT_TIMEVAL_P timeout,
meillo@0 165 int *lport,
meillo@0 166 int *fport,
meillo@0 167 char **identifier,
meillo@0 168 char **opsys,
meillo@0 169 char **charset));
meillo@0 170
meillo@0 171 /* High-level calls */
meillo@0 172
meillo@0 173 extern IDENT *ident_lookup __P((int fd, int timeout));
meillo@0 174
meillo@0 175 extern char *ident_id __P((int fd, int timeout));
meillo@0 176
meillo@0 177 extern IDENT *ident_query __P(( __STRUCT_IN_ADDR_P laddr, __STRUCT_IN_ADDR_P raddr, int lport, int rport, int timeout));
meillo@0 178
meillo@0 179 extern void ident_free __P((IDENT *id));
meillo@0 180
meillo@0 181 extern char id_version[];
meillo@0 182
meillo@0 183 #ifdef IN_LIBIDENT_SRC
meillo@0 184
meillo@0 185 extern char *id_strdup __P((char *str));
meillo@0 186 extern char *id_strtok __P((char *cp, char *cs, char *dc));
meillo@0 187
meillo@0 188 #endif
meillo@0 189
meillo@0 190 #ifdef __cplusplus
meillo@0 191 }
meillo@0 192 #endif
meillo@0 193
meillo@0 194 #endif