-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathsocket.c
148 lines (132 loc) · 3.71 KB
/
socket.c
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#undef _FORTIFY_SOURCE
#include <features.h>
#include <sys/types.h>
#include <sys/socket.h>
#include "dbg.h"
#include "preload.h"
#include "fd_info.h"
int real_socket(int domain, int type, int protocol)
{
static int (*orig_socket)(int domain, int type, int protocol);
ASSIGN(socket);
return orig_socket(domain, type, protocol);
}
int accept(int fd, struct sockaddr *addr, socklen_t *addr_len)
{
static int (*orig_accept)(int fd, struct sockaddr *addr, socklen_t*);
int ret;
ASSIGN(accept);
ret = fd_accept(fd, addr, addr_len);
if (ret == FD_NONE)
ret = orig_accept(fd, addr, addr_len);
dbg("%s(fd=%d) = %d\n", __func__, fd, ret);
return ret;
}
int bind(int fd, const struct sockaddr *addr, socklen_t len)
{
static int (*orig_bind)(int fd, const struct sockaddr *addr, socklen_t);
int ret;
ASSIGN(bind);
ret = fd_bind(fd, addr, len);
if (ret == FD_NONE)
ret = orig_bind(fd, addr, len);
dbg("%s(fd=%d) = %d\n", __func__, fd, ret);
return ret;
}
int connect(int fd, const struct sockaddr *addr, socklen_t len)
{
static int (*orig_connect)(int fd, const struct sockaddr*, socklen_t);
int ret;
ASSIGN(connect);
ret = fd_connect(fd, addr, len);
if (ret == FD_NONE)
ret = orig_connect(fd, addr, len);
dbg("%s(fd=%d) = %d\n", __func__, fd, ret);
return ret;
}
int listen(int fd, int n)
{
static int (*orig_listen)(int fd, int n);
int ret;
ASSIGN(listen);
ret = fd_listen(fd, n);
if (ret == FD_NONE)
ret = orig_listen(fd, n);
dbg("%s(fd=%d) = %d\n", __func__, fd, ret);
return ret;
}
int socket(int domain, int type, int protocol)
{
int ret;
ret = fd_socket(domain, type, protocol);
if (ret == FD_NONE)
ret = real_socket(domain, type, protocol);
dbg("%s(domain=%d, type=%d, protocol=%d) = %d\n", __func__, domain,
type, protocol, ret);
return ret;
}
int getsockopt(int fd, int level, int name, void *val, socklen_t *len)
{
static int (*orig_getsockopt)(int, int, int, void*, socklen_t*);
int ret;
ASSIGN(getsockopt);
ret = fd_getsockopt(fd, level, name, val, len);
if (ret == FD_NONE)
ret = orig_getsockopt(fd, level, name, val, len);
return ret;
}
int setsockopt(int fd, int level, int name, const void *val, socklen_t len)
{
static int (*orig_setsockopt)(int, int, int, const void*, socklen_t);
int ret;
ASSIGN(setsockopt);
ret = fd_setsockopt(fd, level, name, val, len);
if (ret == FD_NONE)
ret = orig_setsockopt(fd, level, name, val, len);
return ret;
}
int getsockname(int fd, struct sockaddr *addr, socklen_t *len)
{
static int (*orig_getsockname)(int, struct sockaddr*, socklen_t*);
int ret;
ASSIGN(getsockname);
ret = fd_getsockname(fd, addr, len);
if (ret == FD_NONE)
ret = orig_getsockname(fd, addr, len);
return ret;
}
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen)
{
static ssize_t (*orig_recvfrom)(int, void*, size_t, int,
struct sockaddr*, socklen_t*);
int ret;
ASSIGN(recvfrom);
ret = fd_recvfrom(sockfd, buf, len, flags, src_addr, addrlen);
if (ret == FD_NONE)
ret = orig_recvfrom(sockfd, buf, len, flags, src_addr, addrlen);
dbg("%s(fd=%d) = %d\n", __func__, sockfd, ret);
return ret;
}
ssize_t recv(int sockfd, void *buf, size_t len, int flags)
{
static ssize_t (*orig_recv)(int, void*, size_t, int);
int ret;
ASSIGN(recv);
ret = fd_recv(sockfd, buf, len, flags);
if (ret == FD_NONE)
ret = orig_recv(sockfd, buf, len, flags);
dbg("%s(fd=%d) = %d\n", __func__, sockfd, ret);
return ret;
}
ssize_t send(int sockfd, const void *buf, size_t len, int flags)
{
static ssize_t (*orig_send)(int, const void*, size_t, int);
int ret;
ASSIGN(send);
ret = fd_send(sockfd, buf, len, flags);
if (ret == FD_NONE)
ret = orig_send(sockfd, buf, len, flags);
dbg("%s(fd=%d) = %d\n", __func__, sockfd, ret);
return ret;
}