interposition.c
上传用户:zm130024
上传日期:2007-01-04
资源大小:432k
文件大小:17k
源码类别:

代理服务器

开发平台:

Unix_Linux

  1. /*
  2.  * Copyright (c) 1997, 1998, 1999
  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.  *  Gaustadal閑n 21
  36.  *  N-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. #define WE_DONT_WANT_NO_SOCKADDR_ARG_UNION
  44. #include "common.h"
  45. #if SOCKSLIBRARY_DYNAMIC
  46. #include "interposition.h"
  47. static const char rcsid[] =
  48. "$Id: interposition.c,v 1.53 1999/09/25 13:10:31 karls Exp $";
  49. #undef accept
  50. #undef bind
  51. #undef bindresvport
  52. #undef connect
  53. #undef gethostbyname
  54. #undef gethostbyname2
  55. #undef getpeername
  56. #undef getsockname
  57. #undef read
  58. #undef readv
  59. #undef recv
  60. #undef recvfrom
  61. #undef recvmsg
  62. #undef rresvport
  63. #undef send
  64. #undef sendmsg
  65. #undef sendto
  66. #undef write
  67. #undef writev
  68. #if NEED_DYNA_RTLD
  69. #define DL_LAZY RTLD_LAZY
  70. #endif  /* NEED_DYNA_RTLD */
  71. static struct libsymbol_t libsymbolv[] = {
  72. { SYMBOL_ACCEPT, LIBRARY_ACCEPT },
  73. { SYMBOL_BIND, LIBRARY_BIND },
  74. { SYMBOL_BINDRESVPORT, LIBRARY_BINDRESVPORT },
  75. { SYMBOL_CONNECT, LIBRARY_CONNECT },
  76. { SYMBOL_GETHOSTBYNAME, LIBRARY_GETHOSTBYNAME },
  77. { SYMBOL_GETHOSTBYNAME2, LIBRARY_GETHOSTBYNAME2 },
  78. { SYMBOL_GETPEERNAME, LIBRARY_GETPEERNAME },
  79. { SYMBOL_GETSOCKNAME, LIBRARY_GETSOCKNAME },
  80. { SYMBOL_READ, LIBRARY_READ },
  81. { SYMBOL_READV, LIBRARY_READV },
  82. { SYMBOL_RECV, LIBRARY_RECV },
  83. { SYMBOL_RECVMSG, LIBRARY_RECVMSG },
  84. { SYMBOL_RECVFROM, LIBRARY_RECVFROM },
  85. { SYMBOL_RRESVPORT, LIBRARY_RRESVPORT },
  86. { SYMBOL_SEND, LIBRARY_SEND },
  87. { SYMBOL_SENDMSG, LIBRARY_SENDMSG },
  88. { SYMBOL_SENDTO, LIBRARY_SENDTO },
  89. { SYMBOL_WRITE, LIBRARY_WRITE },
  90. { SYMBOL_WRITEV, LIBRARY_WRITEV },
  91. #if HAVE_EXTRA_OSF_SYMBOLS
  92. { SYMBOL_EACCEPT, LIBRARY_EACCEPT },
  93. { SYMBOL_EGETPEERNAME, LIBRARY_EGETPEERNAME },
  94. {  SYMBOL_EGETSOCKNAME, LIBRARY_EGETSOCKNAME },
  95. { SYMBOL_EREADV, LIBRARY_EREADV },
  96. { SYMBOL_ERECVFROM, LIBRARY_ERECVFROM },
  97. { SYMBOL_ERECVMSG, LIBRARY_ERECVMSG },
  98. {  SYMBOL_ESENDMSG, LIBRARY_ESENDMSG },
  99. { SYMBOL_EWRITEV, LIBRARY_EWRITEV },
  100. { SYMBOL_NACCEPT, LIBRARY_EACCEPT },
  101. { SYMBOL_NGETPEERNAME, LIBRARY_NGETPEERNAME },
  102. { SYMBOL_NGETSOCKNAME, LIBRARY_NGETSOCKNAME },
  103. {  SYMBOL_NRECVFROM, LIBRARY_NRECVFROM },
  104. {  SYMBOL_NRECVMSG, LIBRARY_NRECVMSG },
  105. { SYMBOL_NSENDMSG, LIBRARY_NSENDMSG },
  106. #endif  /* HAVE_EXTRA_OSF_SYMBOLS */
  107. };
  108. __BEGIN_DECLS
  109. static struct libsymbol_t *
  110. libsymbol __P((const char *symbol));
  111. /*
  112.  * Finds the libsymbol_t that "symbol" is defined in.
  113.  */
  114. __END_DECLS
  115. static struct libsymbol_t *
  116. libsymbol(symbol)
  117. const char *symbol;
  118. {
  119. const char *function = "libsymbol()";
  120. size_t i;
  121. for (i = 0; i < ELEMENTS(libsymbolv); ++i)
  122. if (strcmp(libsymbolv[i].symbol, symbol) == 0)
  123. return &libsymbolv[i];
  124. serrx(1, "%s: configuration error, can't find symbol %s", function, symbol);
  125. return NULL; /* please compiler. */
  126. }
  127. void *
  128. symbolfunction(symbol)
  129. char *symbol;
  130. {
  131. const char *function = "symbolfunction()";
  132. struct libsymbol_t *lib;
  133. lib = libsymbol(symbol);
  134. SASSERTX(lib != NULL);
  135. SASSERTX(lib->library != NULL);
  136. SASSERTX(strcmp(lib->symbol, symbol) == 0);
  137. if (lib->handle == NULL)
  138. if ((lib->handle = dlopen(lib->library, DL_LAZY)) == NULL)
  139. serrx(EXIT_FAILURE, "%s: %s: %s", function, lib->library, dlerror());
  140. if (lib->function == NULL)
  141. if ((lib->function = dlsym(lib->handle, symbol)) == NULL)
  142. serrx(EXIT_FAILURE, "%s: %s: %s", function, symbol, dlerror());
  143. #if 0
  144. if (strcmp(symbol, SYMBOL_WRITE) != 0)
  145. slog(LOG_DEBUG, "found symbol %s in library %s",
  146. lib->symbol, lib->library);
  147. #endif
  148. return lib->function;
  149. }
  150. /* the real system calls. */
  151. #if !HAVE_EXTRA_OSF_SYMBOLS
  152. HAVE_PROT_ACCEPT_0
  153. sys_accept(s, addr, addrlen)
  154. HAVE_PROT_ACCEPT_1 s;
  155. HAVE_PROT_ACCEPT_2 addr;
  156. HAVE_PROT_ACCEPT_3 addrlen;
  157. {
  158. int rc;
  159. HAVE_PROT_ACCEPT_0 (*function)(HAVE_PROT_ACCEPT_1 s, HAVE_PROT_ACCEPT_2 addr, HAVE_PROT_ACCEPT_3 addrlen);
  160. SYSCALL_START(s);
  161. function = symbolfunction(SYMBOL_ACCEPT);
  162. rc = function(s, addr, addrlen);
  163. SYSCALL_END(s);
  164. return rc;
  165. }
  166. #endif  /* !HAVE_EXTRA_OSF_SYMBOLS */
  167. #if !HAVE_EXTRA_OSF_SYMBOLS
  168. HAVE_PROT_BIND_0
  169. sys_bind(s, name, namelen)
  170. HAVE_PROT_BIND_1 s;
  171. HAVE_PROT_BIND_2 name;
  172. HAVE_PROT_BIND_3 namelen;
  173. {
  174. int rc;
  175. HAVE_PROT_BIND_0 (*function)(HAVE_PROT_BIND_1 s, HAVE_PROT_BIND_2 name, HAVE_PROT_BIND_3 namelen);
  176. SYSCALL_START(s);
  177. function = symbolfunction(SYMBOL_BIND);
  178. rc = function(s, name, namelen);
  179. SYSCALL_END(s);
  180. return rc;
  181. }
  182. #endif /* !HAVE_EXTRA_OSF_SYMBOLS */
  183. int
  184. sys_bindresvport(sd, sin)
  185. int sd;
  186. struct sockaddr_in *sin;
  187. {
  188. int rc;
  189. int (*function)(int sd, struct sockaddr_in *sin);
  190. SYSCALL_START(sd);
  191. function = symbolfunction(SYMBOL_BINDRESVPORT);
  192. rc = function(sd, sin);
  193. SYSCALL_END(sd);
  194. return rc;
  195. }
  196. #if !HAVE_EXTRA_OSF_SYMBOLS
  197. HAVE_PROT_CONNECT_0
  198. sys_connect(s, name, namelen)
  199. HAVE_PROT_CONNECT_1 s;
  200. HAVE_PROT_CONNECT_2 name;
  201. HAVE_PROT_CONNECT_3 namelen;
  202. {
  203. int rc;
  204. HAVE_PROT_CONNECT_0 (*function)(HAVE_PROT_CONNECT_1 s, HAVE_PROT_CONNECT_2 name, HAVE_PROT_CONNECT_3 namelen);
  205. SYSCALL_START(s);
  206. function = symbolfunction(SYMBOL_CONNECT);
  207. rc = function(s, name, namelen);
  208. SYSCALL_END(s);
  209. return rc;
  210. }
  211. #endif /* !HAVE_EXTRA_OSF_SYMBOLS */
  212. struct hostent *
  213. sys_gethostbyname(name)
  214. const char *name;
  215. {
  216. struct hostent *(*function)(const char *name);
  217. function = symbolfunction(SYMBOL_GETHOSTBYNAME);
  218. return function(name);
  219. }
  220. struct hostent *
  221. sys_gethostbyname2(name, af)
  222. const char *name;
  223. int af;
  224. {
  225. struct hostent *(*function)(const char *name, int af);
  226. function = symbolfunction(SYMBOL_GETHOSTBYNAME2);
  227. return function(name, af);
  228. }
  229. #if !HAVE_EXTRA_OSF_SYMBOLS
  230. HAVE_PROT_GETPEERNAME_0
  231. sys_getpeername(s, name, namelen)
  232. HAVE_PROT_GETPEERNAME_1 s;
  233. HAVE_PROT_GETPEERNAME_2 name;
  234. HAVE_PROT_GETPEERNAME_3 namelen;
  235. {
  236. int rc;
  237. HAVE_PROT_GETPEERNAME_0 (*function)(HAVE_PROT_GETPEERNAME_1 s, HAVE_PROT_GETPEERNAME_2 name, HAVE_PROT_GETPEERNAME_3 namelen);
  238. SYSCALL_START(s);
  239. function = symbolfunction(SYMBOL_GETPEERNAME);
  240. rc = function(s, name, namelen);
  241. SYSCALL_END(s);
  242. return rc;
  243. }
  244. #endif /* ! HAVE_EXTRA_OSF_SYMBOLS */
  245. #if !HAVE_EXTRA_OSF_SYMBOLS
  246. HAVE_PROT_GETSOCKNAME_0
  247. sys_getsockname(s, name, namelen)
  248. HAVE_PROT_GETSOCKNAME_1 s;
  249. HAVE_PROT_GETSOCKNAME_2 name;
  250. HAVE_PROT_GETSOCKNAME_3 namelen;
  251. {
  252. int rc;
  253. HAVE_PROT_GETSOCKNAME_0 (*function)(HAVE_PROT_GETSOCKNAME_1 s, HAVE_PROT_GETSOCKNAME_2 name, HAVE_PROT_GETSOCKNAME_3 namelen);
  254. SYSCALL_START(s);
  255. function = symbolfunction(SYMBOL_GETSOCKNAME);
  256. rc = function(s, name, namelen);
  257. SYSCALL_END(s);
  258. return rc;
  259. }
  260. #endif /* !HAVE_EXTRA_OSF_SYMBOLS */
  261. HAVE_PROT_READ_0
  262. sys_read(d, buf, nbytes)
  263. HAVE_PROT_READ_1 d;
  264. HAVE_PROT_READ_2 buf;
  265. HAVE_PROT_READ_3 nbytes;
  266. {
  267. ssize_t rc;
  268. HAVE_PROT_READ_0 (*function)(HAVE_PROT_READ_1 d, HAVE_PROT_READ_2 buf, HAVE_PROT_READ_3 nbytes);
  269. SYSCALL_START(d);
  270. function = symbolfunction(SYMBOL_READ);
  271. rc = function(d, buf, nbytes);
  272. SYSCALL_END(d);
  273. return rc;
  274. }
  275. #if !HAVE_EXTRA_OSF_SYMBOLS
  276. HAVE_PROT_READV_0
  277. sys_readv(d, iov, iovcnt)
  278. HAVE_PROT_READV_1 d;
  279. HAVE_PROT_READV_2 iov;
  280. HAVE_PROT_READV_3 iovcnt;
  281. {
  282. ssize_t rc;
  283. HAVE_PROT_READV_0 (*function)(HAVE_PROT_READV_1 d, HAVE_PROT_READV_2 iov, HAVE_PROT_READV_3 iovcnt);
  284. SYSCALL_START(d);
  285. function = symbolfunction(SYMBOL_READV);
  286. rc = function(d, iov, iovcnt);
  287. SYSCALL_END(d);
  288. return rc;
  289. }
  290. #endif /* HAVE_EXTRA_OSF_SYMBOLS */
  291. HAVE_PROT_RECV_0
  292. sys_recv(s, buf, len, flags)
  293. HAVE_PROT_RECV_1 s;
  294. HAVE_PROT_RECV_2 buf;
  295. HAVE_PROT_RECV_3 len;
  296. HAVE_PROT_RECV_4 flags;
  297. {
  298. ssize_t rc;
  299. HAVE_PROT_RECV_0 (*function)(HAVE_PROT_RECV_1 s, HAVE_PROT_RECV_2 buf, HAVE_PROT_RECV_3 len, HAVE_PROT_RECV_4 flags);
  300. SYSCALL_START(s);
  301. function = symbolfunction(SYMBOL_RECV);
  302. rc = function(s, buf, len, flags);
  303. SYSCALL_END(s);
  304. return rc;
  305. }
  306. #if !HAVE_EXTRA_OSF_SYMBOLS
  307. HAVE_PROT_RECVFROM_0
  308. sys_recvfrom(s, buf, len, flags, from, fromlen)
  309. HAVE_PROT_RECVFROM_1 s;
  310. HAVE_PROT_RECVFROM_2 buf;
  311. HAVE_PROT_RECVFROM_3 len;
  312. HAVE_PROT_RECVFROM_4 flags;
  313. HAVE_PROT_RECVFROM_5 from;
  314. HAVE_PROT_RECVFROM_6 fromlen;
  315. {
  316. int rc;
  317. HAVE_PROT_RECVFROM_0 (*function)(HAVE_PROT_RECVFROM_1 s, HAVE_PROT_RECVFROM_2 buf, HAVE_PROT_RECVFROM_3 len, HAVE_PROT_RECVFROM_4 flags, HAVE_PROT_RECVFROM_5 from, HAVE_PROT_RECVFROM_6 fromlen);
  318. SYSCALL_START(s);
  319. function = symbolfunction(SYMBOL_RECVFROM);
  320. rc = function(s, buf, len, flags, from, fromlen);
  321. SYSCALL_END(s);
  322. return rc;
  323. }
  324. #endif /* HAVE_EXTRA_OSF_SYMBOLS */
  325. #if !HAVE_EXTRA_OSF_SYMBOLS
  326. HAVE_PROT_RECVMSG_0
  327. sys_recvmsg(s, msg, flags)
  328. HAVE_PROT_RECVMSG_1 s;
  329. HAVE_PROT_RECVMSG_2 msg;
  330. HAVE_PROT_RECVMSG_3 flags;
  331. {
  332. ssize_t rc;
  333. HAVE_PROT_RECVMSG_0 (*function)(HAVE_PROT_RECVMSG_1 s, HAVE_PROT_RECVMSG_2 msg, HAVE_PROT_RECVMSG_3 flags);
  334. SYSCALL_START(s);
  335. function = symbolfunction(SYMBOL_RECVMSG);
  336. rc = function(s, msg, flags);
  337. SYSCALL_END(s);
  338. return rc;
  339. }
  340. #endif /* HAVE_EXTRA_OSF_SYMBOLS */
  341. int
  342. sys_rresvport(port)
  343. int *port;
  344. {
  345. int (*function)(int *port);
  346. function = symbolfunction(SYMBOL_RRESVPORT);
  347. return function(port);
  348. }
  349. HAVE_PROT_SEND_0
  350. sys_send(s, msg, len, flags)
  351. HAVE_PROT_SEND_1 s;
  352. HAVE_PROT_SEND_2 msg;
  353. HAVE_PROT_SEND_3 len;
  354. HAVE_PROT_SEND_4 flags;
  355. {
  356. ssize_t rc;
  357. HAVE_PROT_SEND_0 (*function)(HAVE_PROT_SEND_1 s, HAVE_PROT_SEND_2 msg, HAVE_PROT_SEND_3 len, HAVE_PROT_SEND_4 flags);
  358. SYSCALL_START(s);
  359. function = symbolfunction(SYMBOL_SEND);
  360. rc = function(s, msg, len, flags);
  361. SYSCALL_END(s);
  362. return rc;
  363. }
  364. #if !HAVE_EXTRA_OSF_SYMBOLS
  365. HAVE_PROT_SENDMSG_0
  366. sys_sendmsg(s, msg, flags)
  367. HAVE_PROT_SENDMSG_1 s;
  368. HAVE_PROT_SENDMSG_2 msg;
  369. HAVE_PROT_SENDMSG_3 flags;
  370. {
  371. ssize_t rc;
  372. HAVE_PROT_SENDMSG_0 (*function)(HAVE_PROT_SENDMSG_1 s, HAVE_PROT_SENDMSG_2 msg, HAVE_PROT_SENDMSG_3  flags);
  373. SYSCALL_START(s);
  374. function = symbolfunction(SYMBOL_SENDMSG);
  375. rc = function(s, msg, flags);
  376. SYSCALL_END(s);
  377. return rc;
  378. }
  379. #endif /* HAVE_EXTRA_OSF_SYMBOLS */
  380. #if !HAVE_EXTRA_OSF_SYMBOLS
  381. HAVE_PROT_SENDTO_0
  382. sys_sendto(s, msg, len, flags, to, tolen)
  383. HAVE_PROT_SENDTO_1 s;
  384. HAVE_PROT_SENDTO_2 msg;
  385. HAVE_PROT_SENDTO_3 len;
  386. HAVE_PROT_SENDTO_4 flags;
  387. HAVE_PROT_SENDTO_5 to;
  388. HAVE_PROT_SENDTO_6 tolen;
  389. {
  390. ssize_t rc;
  391. HAVE_PROT_SENDTO_0 (*function)(HAVE_PROT_SENDTO_1 s, HAVE_PROT_SENDTO_2 msg, HAVE_PROT_SENDTO_3 len, HAVE_PROT_SENDTO_4 flags, HAVE_PROT_SENDTO_5 to, HAVE_PROT_SENDTO_6 tolen);
  392. SYSCALL_START(s);
  393. function = symbolfunction(SYMBOL_SENDTO);
  394. rc = function(s, msg, len, flags, to, tolen);
  395. SYSCALL_END(s);
  396. return rc;
  397. }
  398. #endif /* !HAVE_EXTRA_OSF_SYMBOLS */
  399. HAVE_PROT_WRITE_0
  400. sys_write(d, buf, nbytes)
  401. HAVE_PROT_WRITE_1 d;
  402. HAVE_PROT_WRITE_2 buf;
  403. HAVE_PROT_WRITE_3 nbytes;
  404. {
  405. ssize_t rc;
  406. HAVE_PROT_WRITE_0 (*function)(HAVE_PROT_WRITE_1 d, HAVE_PROT_WRITE_2 buf, HAVE_PROT_WRITE_3 nbutes);
  407. SYSCALL_START(d);
  408. function = symbolfunction(SYMBOL_WRITE);
  409. rc = function(d, buf, nbytes);
  410. SYSCALL_END(d);
  411. return rc;
  412. }
  413. #if !HAVE_EXTRA_OSF_SYMBOLS
  414. HAVE_PROT_WRITEV_0
  415. sys_writev(d, iov, iovcnt)
  416. HAVE_PROT_WRITEV_1 d;
  417. HAVE_PROT_WRITEV_2 iov;
  418. HAVE_PROT_WRITEV_3 iovcnt;
  419. {
  420. ssize_t rc;
  421. HAVE_PROT_WRITEV_0 (*function)(HAVE_PROT_WRITEV_1 d, HAVE_PROT_WRITEV_2 buf, HAVE_PROT_WRITEV_3 iovcnt);
  422. SYSCALL_START(d);
  423. function = symbolfunction(SYMBOL_WRITEV);
  424. rc = function(d, iov, iovcnt);
  425. SYSCALL_END(d);
  426. return rc;
  427. }
  428. #endif /* HAVE_EXTRA_OSF_SYMBOLS */
  429. /*
  430.  * the interpositioned functions.
  431.  */
  432. #if !HAVE_EXTRA_OSF_SYMBOLS
  433. HAVE_PROT_ACCEPT_0
  434. accept(s, addr, addrlen)
  435. HAVE_PROT_ACCEPT_1 s;
  436. HAVE_PROT_ACCEPT_2 addr;
  437. HAVE_PROT_ACCEPT_3 addrlen;
  438. {
  439. if (ISSYSCALL(s))
  440. return sys_accept(s, addr, addrlen);
  441. return Raccept(s, addr, addrlen);
  442. }
  443. #endif /* HAVE_EXTRA_OSF_SYMBOLS */
  444. #if !HAVE_EXTRA_OSF_SYMBOLS
  445. HAVE_PROT_BIND_0
  446. bind(s, name, namelen)
  447. HAVE_PROT_BIND_1 s;
  448. HAVE_PROT_BIND_2 name;
  449. HAVE_PROT_BIND_3 namelen;
  450. {
  451. if (ISSYSCALL(s))
  452. return sys_bind(s, name, namelen);
  453. return Rbind(s, name, namelen);
  454. }
  455. #endif /* !HAVE_EXTRA_OSF_SYMBOLS */
  456. int
  457. bindresvport(sd, sin)
  458. int sd;
  459. struct sockaddr_in *sin;
  460. {
  461. if (ISSYSCALL(sd))
  462. return sys_bindresvport(sd, sin);
  463. return Rbindresvport(sd, sin);
  464. }
  465. #if !HAVE_EXTRA_OSF_SYMBOLS
  466. HAVE_PROT_CONNECT_0
  467. connect(s, name, namelen)
  468. HAVE_PROT_CONNECT_1 s;
  469. HAVE_PROT_CONNECT_2 name;
  470. HAVE_PROT_CONNECT_3 namelen;
  471. {
  472. if (ISSYSCALL(s))
  473. return sys_connect(s, name, namelen);
  474. return Rconnect(s, name, namelen);
  475. }
  476. #endif /* HAVE_EXTRA_OSF_SYMBOLS */
  477. struct hostent *
  478. gethostbyname(name)
  479. const char *name;
  480. {
  481. return Rgethostbyname(name);
  482. }
  483. struct hostent *
  484. gethostbyname2(name, af)
  485. const char *name;
  486. int af;
  487. {
  488. return Rgethostbyname2(name, af);
  489. }
  490. #if !HAVE_EXTRA_OSF_SYMBOLS
  491. HAVE_PROT_GETPEERNAME_0
  492. getpeername(s, name, namelen)
  493. HAVE_PROT_GETPEERNAME_1 s;
  494. HAVE_PROT_GETPEERNAME_2 name;
  495. HAVE_PROT_GETPEERNAME_3 namelen;
  496. {
  497. if (ISSYSCALL(s))
  498. return sys_getpeername(s, name, namelen);
  499. return Rgetpeername(s, name, namelen);
  500. }
  501. #endif /* HAVE_EXTRA_OSF_SYMBOLS */
  502. #if !HAVE_EXTRA_OSF_SYMBOLS
  503. HAVE_PROT_GETSOCKNAME_0
  504. getsockname(s, name, namelen)
  505. HAVE_PROT_GETSOCKNAME_1 s;
  506. HAVE_PROT_GETSOCKNAME_2 name;
  507. HAVE_PROT_GETSOCKNAME_3 namelen;
  508. {
  509. if (ISSYSCALL(s))
  510. return sys_getpeername(s, name, namelen);
  511. return Rgetsockname(s, name, namelen);
  512. }
  513. #endif /* HAVE_EXTRA_OSF_SYMBOLS */
  514. HAVE_PROT_READ_0
  515. read(d, buf, nbytes)
  516. HAVE_PROT_READ_1 d;
  517. HAVE_PROT_READ_2 buf;
  518. HAVE_PROT_READ_3 nbytes;
  519. {
  520. if (ISSYSCALL(d))
  521. return sys_read(d, buf, nbytes);
  522. return Rread(d, buf, nbytes);
  523. }
  524. #if !HAVE_EXTRA_OSF_SYMBOLS
  525. HAVE_PROT_READV_0
  526. readv(d, iov, iovcnt)
  527. HAVE_PROT_READV_1 d;
  528. HAVE_PROT_READV_2 iov;
  529. HAVE_PROT_READV_3 iovcnt;
  530. {
  531. if (ISSYSCALL(d))
  532. return sys_readv(d, iov, iovcnt);
  533. return Rreadv(d, iov, iovcnt);
  534. }
  535. #endif /* HAVE_EXTRA_OSF_SYMBOLS */
  536. HAVE_PROT_RECV_0
  537. recv(s, msg, len, flags)
  538. HAVE_PROT_RECV_1 s;
  539. HAVE_PROT_RECV_2 msg;
  540. HAVE_PROT_RECV_3 len;
  541. HAVE_PROT_RECV_4 flags;
  542. {
  543. if (ISSYSCALL(s))
  544. return sys_recv(s, msg, len, flags);
  545. return Rrecv(s, msg, len, flags);
  546. }
  547. #if !HAVE_EXTRA_OSF_SYMBOLS
  548. HAVE_PROT_RECVFROM_0
  549. recvfrom(s, buf, len, flags, from, fromlen)
  550. HAVE_PROT_RECVFROM_1 s;
  551. HAVE_PROT_RECVFROM_2 buf;
  552. HAVE_PROT_RECVFROM_3 len;
  553. HAVE_PROT_RECVFROM_4 flags;
  554. HAVE_PROT_RECVFROM_5 from;
  555. HAVE_PROT_RECVFROM_6 fromlen;
  556. {
  557. if (ISSYSCALL(s))
  558. return sys_recvfrom(s, buf, len, flags, from, fromlen);
  559. return Rrecvfrom(s, buf, len, flags, from, fromlen);
  560. }
  561. #endif /* HAVE_EXTRA_OSF_SYMBOLS */
  562. #if !HAVE_EXTRA_OSF_SYMBOLS
  563. HAVE_PROT_RECVMSG_0
  564. recvmsg(s, msg, flags)
  565. HAVE_PROT_RECVMSG_1 s;
  566. HAVE_PROT_RECVMSG_2 msg;
  567. HAVE_PROT_RECVMSG_3 flags;
  568. {
  569. if (ISSYSCALL(s))
  570. return sys_recvmsg(s, msg, flags);
  571. return Rrecvmsg(s, msg, flags);
  572. }
  573. #endif /* HAVE_EXTRA_OSF_SYMBOLS */
  574. int
  575. rresvport(port)
  576. int *port;
  577. {
  578. return Rrresvport(port);
  579. }
  580. HAVE_PROT_WRITE_0
  581. write(d, buf, nbytes)
  582. HAVE_PROT_WRITE_1 d;
  583. HAVE_PROT_WRITE_2 buf;
  584. HAVE_PROT_WRITE_3 nbytes;
  585. {
  586. if (ISSYSCALL(d))
  587. return sys_write(d, buf, nbytes);
  588. return Rwrite(d, buf, nbytes);
  589. }
  590. #if !HAVE_EXTRA_OSF_SYMBOLS
  591. HAVE_PROT_WRITEV_0
  592. writev(d, iov, iovcnt)
  593. HAVE_PROT_WRITEV_1 d;
  594. HAVE_PROT_WRITEV_2 iov;
  595. HAVE_PROT_WRITEV_3 iovcnt;
  596. {
  597. if (ISSYSCALL(d))
  598. return sys_writev(d, iov, iovcnt);
  599. return Rwritev(d, iov, iovcnt);
  600. }
  601. #endif /* HAVE_EXTRA_OSF_SYMBOLS */
  602. HAVE_PROT_SEND_0
  603. send(s, msg, len, flags)
  604. HAVE_PROT_SEND_1 s;
  605. HAVE_PROT_SEND_2 msg;
  606. HAVE_PROT_SEND_3 len;
  607. HAVE_PROT_SEND_4 flags;
  608. {
  609. if (ISSYSCALL(s))
  610. return sys_send(s, msg, len, flags);
  611. return Rsend(s, msg, len, flags);
  612. }
  613. #if !HAVE_EXTRA_OSF_SYMBOLS
  614. HAVE_PROT_SENDMSG_0
  615. sendmsg(s, msg, flags)
  616. HAVE_PROT_SENDMSG_1 s;
  617. HAVE_PROT_SENDMSG_2 msg;
  618. HAVE_PROT_SENDMSG_3 flags;
  619. {
  620. if (ISSYSCALL(s))
  621. return sys_sendmsg(s, msg, flags);
  622. return Rsendmsg(s, msg, flags);
  623. }
  624. #endif /* HAVE_EXTRA_OSF_SYMBOLS */
  625. #if !HAVE_EXTRA_OSF_SYMBOLS
  626. HAVE_PROT_SENDTO_0
  627. sendto(s, msg, len, flags, to, tolen)
  628. HAVE_PROT_SENDTO_1 s;
  629. HAVE_PROT_SENDTO_2 msg;
  630. HAVE_PROT_SENDTO_3 len;
  631. HAVE_PROT_SENDTO_4 flags;
  632. HAVE_PROT_SENDTO_5 to;
  633. HAVE_PROT_SENDTO_6 tolen;
  634. {
  635. if (ISSYSCALL(s))
  636. return sys_sendto(s, msg, len, flags, to, tolen);
  637. return Rsendto(s, msg, len, flags, to, tolen);
  638. }
  639. #endif /* !HAVE_EXTRA_OSF_SYMBOLS */
  640. #endif /* SOCKSLIBRARY_DYNAMIC */