* Copyright (c) 1992, 1993, 1994
* The Regents of the University of California. All rights reserved.
* This code is derived from software donated to Berkeley by
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* @(#)pt_tcp.c 8.5 (Berkeley) 4/28/95
* $Id: pt_tcp.c,v 1.1 1992/05/25 21:43:09 jsp Exp jsp $
* Key will be tcp/host/port[/"priv"]
* Create a TCP socket connected to the
* requested host and port.
* Some trailing suffix values have special meanings.
* An unrecognised suffix is an error.
int portal_tcp(pcr
, key
, v
, kso
, fdp
)
char host
[MAXHOSTNAMELEN
];
char port
[MAXHOSTNAMELEN
];
char *p
= key
+ (v
[1] ? strlen(v
[1]) : 0);
if (q
== 0 || q
- p
>= sizeof(host
))
if (strlen(p
) >= sizeof(port
))
if (strcmp(p
, "priv") == 0) {
hp
= gethostbyname(host
);
ipp
= (struct in_addr
**) hp
->h_addr_list
;
ina
.s_addr
= inet_addr(host
);
if (ina
.s_addr
== INADDR_NONE
)
sp
= getservbyname(port
, "tcp");
s_port
= strtoul(port
, &p
, 0);
if (s_port
== 0 || *p
!= '\0')
memset(&sain
, 0, sizeof(sain
));
sain
.sin_len
= sizeof(sain
);
sain
.sin_family
= AF_INET
;
so
= rresvport((int *) 0);
so
= socket(AF_INET
, SOCK_STREAM
, 0);
syslog(LOG_ERR
, "socket: %m");
if (connect(so
, (struct sockaddr
*) &sain
, sizeof(sain
)) == 0) {