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
|