-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathident.h
99 lines (74 loc) · 2.35 KB
/
ident.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/*
** ident.h
**
** Author: Peter Eriksson <[email protected]>
** Intruder: Pär Emanuelsson <[email protected]>
** Perturbed by: Rémi Denis-Courmont <[email protected]>
*/
#ifndef __IDENT_H__
# define __IDENT_H__
# ifdef __cplusplus
extern "C" {
# endif
/*
* Unfortunately, we can't use HAVE_*_H constants because this header
* might be used by not-autoconf-igured software. :-(
*/
# include <sys/types.h>
# include <sys/select.h> /* struct timeval (new POSIX) */
# include <sys/time.h> /* struct timeval (old POSIX) */
# include <sys/socket.h> /* struct sockaddr */
# include <netinet/in.h> /* struct in_addr */
# ifndef FD_SETSIZE
# define FD_SETSIZE 64
# endif
# ifndef IDBUFSIZE
# define IDBUFSIZE 2048
# endif
# ifndef IPPORT_IDENT
# define IPPORT_IDENT 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_addr (const struct sockaddr *laddr,
const struct sockaddr *faddr,
struct timeval *timeout);
extern ident_t *id_open (const struct in_addr *laddr,
const struct in_addr *faddr,
struct timeval *timeout);
extern int id_close (ident_t *id);
extern int id_query (ident_t *id, int lport, int fport,
struct timeval *timeout);
extern int id_parse (ident_t *id, struct timeval *timeout,
int *lport, int *fport, char **identifier,
char **opsys, char **charset);
/* High-level calls */
extern IDENT *ident_lookup (int fd, int timeout);
extern char *ident_id (int fd, int timeout); // result should be free()d
extern IDENT *ident_query_addr (const struct sockaddr *laddr,
const struct sockaddr *raddr, int timeout);
extern IDENT *ident_query (const struct in_addr *laddr,
const struct in_addr *faddr,
int lport, int rport, int timeout);
extern void ident_free (IDENT *id);
extern const char *id_version;
# ifdef IN_LIBIDENT_SRC
extern char *id_strdup (char *str);
extern char *id_strtok (char *cp, char *cs, char *dc);
# endif
# ifdef __cplusplus
}
# endif
#endif