1 /*
2 * Copyright (c) 1997, 1998, 1999, 2000, 2001, 2008, 2009, 2010
3 * Inferno Nettverk A/S, Norway. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. The above copyright notice, this list of conditions and the following
9 * disclaimer must appear in all copies of the software, derivative works
10 * or modified versions, and any portions thereof, aswell as in all
11 * supporting documentation.
12 * 2. All advertising materials mentioning features or use of this software
13 * must display the following acknowledgement:
14 * This product includes software developed by
15 * Inferno Nettverk A/S, Norway.
16 * 3. The name of the author may not be used to endorse or promote products
17 * derived from this software without specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 *
30 * Inferno Nettverk A/S requests users of this software to return to
31 *
32 * Software Distribution Coordinator or sdc@inet.no
33 * Inferno Nettverk A/S
34 * Oslo Research Park
35 * Gaustadall�en 21
36 * NO-0349 Oslo
37 * Norway
38 *
39 * any improvements or extensions that they make and grant Inferno Nettverk A/S
40 * the rights to redistribute these changes.
41 *
42 */
43
44 #include "common.h"
45
46 #if HAVE_EXTRA_OSF_SYMBOLS
47
48 #if SOCKSLIBRARY_DYNAMIC
49
50 static const char rcsid[] =
51 "$Id: int_osf2.c,v 1.21 2011/05/18 13:48:45 karls Exp $";
52
53 #undef accept
54 #undef getpeername
55 #undef getsockname
56 #undef recvfrom
57 #undef recvmsg
58 #undef sendmsg
59
60 /* nfoo versions (with sockaddr len) of the system calls. */
61
62 int
sys_naccept(s,addr,addrlen)63 sys_naccept(s, addr, addrlen)
64 int s;
65 struct sockaddr *addr;
66 socklen_t *addrlen;
67 {
68 int rc;
69 int (*function)(int s, struct sockaddr *addr, socklen_t *addrlen);
70
71 socks_syscall_start(s);
72 function = symbolfunction(SYMBOL_NACCEPT);
73 rc = function(s, addr, addrlen);
74 socks_syscall_end(s);
75 return rc;
76 }
77
78 int
sys_ngetpeername(s,name,namelen)79 sys_ngetpeername(s, name, namelen)
80 int s;
81 struct sockaddr *name;
82 socklen_t *namelen;
83 {
84 int rc;
85 int (*function)(int s, const struct sockaddr *name, socklen_t *namelen);
86
87 socks_syscall_start(s);
88 function = symbolfunction(SYMBOL_NGETPEERNAME);
89 rc = function(s, name, namelen);
90 socks_syscall_end(s);
91 return rc;
92 }
93
94 int
sys_ngetsockname(s,name,namelen)95 sys_ngetsockname(s, name, namelen)
96 int s;
97 struct sockaddr *name;
98 socklen_t *namelen;
99 {
100 int rc;
101 int (*function)(int s, const struct sockaddr *name, socklen_t *namelen);
102
103 socks_syscall_start(s);
104 function = symbolfunction(SYMBOL_NGETSOCKNAME);
105 rc = function(s, name, namelen);
106 socks_syscall_end(s);
107 return rc;
108 }
109
110 int
sys_nrecvfrom(s,buf,len,flags,from,fromlen)111 sys_nrecvfrom(s, buf, len, flags, from, fromlen)
112 int s;
113 void *buf;
114 size_t len;
115 int flags;
116 struct sockaddr *from;
117 size_t *fromlen;
118 {
119 int rc;
120 int (*function)(int s, void *buf, size_t len, int flags,
121 struct sockaddr *from, socklen_t *fromlen);
122
123 socks_syscall_start(s);
124 function = symbolfunction(SYMBOL_NRECVFROM);
125 rc = function(s, buf, len, flags, from, fromlen);
126 socks_syscall_end(s);
127 return rc;
128 }
129
130 ssize_t
sys_nrecvmsg(s,msg,flags)131 sys_nrecvmsg(s, msg, flags)
132 int s;
133 struct msghdr *msg;
134 int flags;
135 {
136 ssize_t rc;
137 int (*function)(int s, struct msghdr *msg, int flags);
138
139 socks_syscall_start(s);
140 function = symbolfunction(SYMBOL_NRECVMSG);
141 rc = function(s, msg, flags);
142 socks_syscall_end(s);
143 return rc;
144 }
145
146 ssize_t
sys_nsendmsg(s,msg,flags)147 sys_nsendmsg(s, msg, flags)
148 int s;
149 const struct msghdr *msg;
150 int flags;
151 {
152 ssize_t rc;
153 int (*function)(int s, const struct msghdr *msg, int flags);
154
155 socks_syscall_start(s);
156 function = symbolfunction(SYMBOL_NSENDMSG);
157 rc = function(s, msg, flags);
158 socks_syscall_end(s);
159 return rc;
160 }
161
162 /*
163 * the interpositioned functions.
164 */
165
166 int
naccept(s,addr,addrlen)167 naccept(s, addr, addrlen)
168 int s;
169 struct sockaddr *addr;
170 socklen_t *addrlen;
171 {
172 if (socks_issyscall(s, SYMBOL_NACCEPT))
173 return sys_naccept(s, addr, addrlen);
174 return Raccept(s, addr, addrlen);
175 }
176 int
ngetpeername(s,name,namelen)177 ngetpeername(s, name, namelen)
178 int s;
179 struct sockaddr *name;
180 socklen_t *namelen;
181 {
182 if (socks_issyscall(s, SYMBOL_NGETPEERNAME))
183 return sys_ngetpeername(s, name, namelen);
184 return Rgetpeername(s, name, namelen);
185 }
186
187 int
ngetsockname(s,name,namelen)188 ngetsockname(s, name, namelen)
189 int s;
190 struct sockaddr *name;
191 socklen_t *namelen;
192 {
193 if (socks_issyscall(s, SYMBOL_NGETSOCKNAME))
194 return sys_ngetpeername(s, name, namelen);
195 return Rgetsockname(s, name, namelen);
196 }
197
198 ssize_t
nrecvfrom(s,buf,len,flags,from,fromlen)199 nrecvfrom(s, buf, len, flags, from, fromlen)
200 int s;
201 void *buf;
202 size_t len;
203 int flags;
204 struct sockaddr *from;
205 size_t *fromlen;
206 {
207 if (socks_issyscall(s, SYMBOL_NRECVFROM))
208 return sys_nrecvfrom(s, buf, len, flags, from, fromlen);
209 return Rrecvfrom(s, buf, len, flags, from, fromlen);
210 }
211
212 ssize_t
nrecvmsg(s,msg,flags)213 nrecvmsg(s, msg, flags)
214 int s;
215 struct msghdr *msg;
216 int flags;
217 {
218 if (socks_issyscall(s, SYMBOL_NRECVMSG))
219 return sys_nrecvmsg(s, msg, flags);
220 return Rrecvmsg(s, msg, flags);
221 }
222
223 ssize_t
nsendmsg(s,msg,flags)224 nsendmsg(s, msg, flags)
225 int s;
226 const struct msghdr *msg;
227 int flags;
228 {
229 if (socks_issyscall(s, SYMBOL_NSENDMSG))
230 return sys_nsendmsg(s, msg, flags);
231 return Rsendmsg(s, msg, flags);
232 }
233
234 #endif /* SOCKSLIBRARY_DYNAMIC */
235
236 #endif /* HAVE_EXTRA_OSF_SYMBOLS */
237