OpenBSD fixes: snprintf/strlc{at,py}

This commit is contained in:
matthieu 2006-11-28 15:54:52 +00:00
parent 605ae7a69f
commit 9a50b7f0ee
3 changed files with 51 additions and 50 deletions

View File

@ -219,13 +219,15 @@ TRANS(ParseAddress) (char *address, char **protocol, char **host, char **port)
char *_protocol, *_host, *_port;
char hostnamebuf[256];
int _host_len;
size_t len;
PRMSG (3,"ParseAddress(%s)\n", address, 0, 0);
/* Copy the string so it can be changed */
tmpptr = mybuf = (char *) xalloc (strlen (address) + 1);
strcpy (mybuf, address);
len = strlen (address) + 1;
tmpptr = mybuf = (char *) xalloc (len);
strlcpy (mybuf, address, len);
/* Parse the string to get each component */
@ -364,8 +366,8 @@ TRANS(ParseAddress) (char *address, char **protocol, char **host, char **port)
* Now that we have all of the components, allocate new
* string space for them.
*/
if ((*protocol = (char *) xalloc(strlen (_protocol) + 1)) == NULL)
len = strlen (_protocol) + 1;
if ((*protocol = (char *) xalloc(len)) == NULL)
{
/* Malloc failed */
*port = NULL;
@ -375,9 +377,10 @@ TRANS(ParseAddress) (char *address, char **protocol, char **host, char **port)
return 0;
}
else
strcpy (*protocol, _protocol);
strlcpy (*protocol, _protocol, len);
if ((*host = (char *) xalloc (strlen (_host) + 1)) == NULL)
len = strlen (_host) + 1;
if ((*host = (char *) xalloc (len)) == NULL)
{
/* Malloc failed */
*port = NULL;
@ -388,9 +391,10 @@ TRANS(ParseAddress) (char *address, char **protocol, char **host, char **port)
return 0;
}
else
strcpy (*host, _host);
strlcpy (*host, _host, len);
if ((*port = (char *) xalloc (strlen (_port) + 1)) == NULL)
len = strlen (_port) + 1;
if ((*port = (char *) xalloc (len)) == NULL)
{
/* Malloc failed */
*port = NULL;
@ -402,7 +406,7 @@ TRANS(ParseAddress) (char *address, char **protocol, char **host, char **port)
return 0;
}
else
strcpy (*port, _port);
strlcpy (*port, _port, len);
xfree (tmpptr);
@ -522,6 +526,7 @@ TRANS(Reopen) (int type, int trans_id, int fd, char *port)
Xtransport *thistrans = NULL;
char *save_port;
int i;
size_t len;
PRMSG (2,"Reopen(%d,%d,%s)\n", trans_id, fd, port);
@ -541,15 +546,16 @@ TRANS(Reopen) (int type, int trans_id, int fd, char *port)
return NULL;
}
if ((save_port = (char *) xalloc (strlen (port) + 1)) == NULL)
len = strlen (port) + 1;
if ((save_port = (char *) xalloc (len)) == NULL)
{
PRMSG (1,"Reopen: Unable to malloc port string\n", 0, 0, 0);
return NULL;
}
strcpy (save_port, port);
strlcpy (save_port, port, len);
/* Get a new XtransConnInfo object */
@ -664,18 +670,20 @@ TRANS(GetReopenInfo) (XtransConnInfo ciptr,
{
int i;
size_t len;
for (i = 0; i < NUMTRANS; i++)
if (Xtransports[i].transport == ciptr->transptr)
{
*trans_id = Xtransports[i].transport_id;
*fd = ciptr->fd;
if ((*port = (char *) xalloc (strlen (ciptr->port) + 1)) == NULL)
len = strlen (ciptr->port) + 1;
if ((*port = (char *) xalloc (len)) == NULL)
return 0;
else
{
strcpy (*port, ciptr->port);
strlcpy (*port, ciptr->port, len);
return 1;
}
}

View File

@ -288,9 +288,6 @@ static int TRANS(SocketINETClose) (XtransConnInfo ciptr);
#if defined(IPv6) && defined(AF_INET6)
static const struct in6_addr local_in6addr_any = IN6ADDR_ANY_INIT;
#pragma weak in6addr_any = local_in6addr_any
#ifndef __USLC__
#pragma weak getaddrinfo
#endif
static int haveIPv6 = 1;
#endif
@ -469,9 +466,6 @@ TRANS(SocketOpen) (int i, int type)
PRMSG (3,"SocketOpen(%d,%d)\n", i, type, 0);
#if defined(IPv6) && defined(AF_INET6)
if (getaddrinfo == NULL)
haveIPv6 = 0;
if (!haveIPv6 && Sockettrans2devtab[i].family == AF_INET6)
return NULL;
#endif
@ -846,11 +840,11 @@ set_sun_path(const char *port, const char *upath, char *path)
if (*port == '/') { /* a full pathname */
if (strlen(port) > maxlen)
return -1;
sprintf(path, "%s", port);
snprintf(path, maxlen+1, "%s", port);
} else {
if (strlen(port) + strlen(upath) > maxlen)
return -1;
sprintf(path, "%s%s", upath, port);
snprintf(path, maxlen+1, "%s%s", upath, port);
}
return 0;
}
@ -972,7 +966,7 @@ TRANS(SocketINETCreateListener) (XtransConnInfo ciptr, char *port, unsigned int
{
/* fixup the server port address */
tmpport = X_TCP_PORT + strtol (port, (char**)NULL, 10);
sprintf (portbuf,"%lu", tmpport);
snprintf (portbuf, sizeof(portbuf), "%lu", tmpport);
port = portbuf;
}
#endif
@ -1024,7 +1018,7 @@ TRANS(SocketINETCreateListener) (XtransConnInfo ciptr, char *port, unsigned int
} else {
namelen = sizeof (struct sockaddr_in6);
#ifdef SIN6_LEN
((struct sockaddr_in6 *)&sockname)->sin6_len = sizeof(sockname);
((struct sockaddr_in6 *)&sockname)->sin6_len = (u_int8_t)sizeof(sockname);
#endif
((struct sockaddr_in6 *)&sockname)->sin6_family = AF_INET6;
((struct sockaddr_in6 *)&sockname)->sin6_port = htons(sport);
@ -1456,7 +1450,7 @@ TRANS(SocketINETConnect) (XtransConnInfo ciptr, char *host, char *port)
if (is_numeric (port))
{
tmpport = X_TCP_PORT + strtol (port, (char**)NULL, 10);
sprintf (portbuf, "%lu", tmpport);
snprintf (portbuf, sizeof(portbuf), "%lu", tmpport);
port = portbuf;
}
#endif
@ -1813,11 +1807,6 @@ UnixHostReallyLocal (char *host)
{
char hostnamebuf[256];
#if defined(IPv6) && defined(AF_INET6)
if (getaddrinfo == NULL)
haveIPv6 = 0;
#endif
TRANS(GetHostname) (hostnamebuf, sizeof (hostnamebuf));
if (strcmp (hostnamebuf, host) == 0)

View File

@ -226,7 +226,7 @@ TRANS(ConvertAddress)(int *familyp, int *addrlenp, Xtransaddr **addrp)
if (!*addrp)
*addrp = (Xtransaddr *) xalloc (len + 1);
if (*addrp) {
strcpy ((char *) *addrp, hostnamebuf);
strlcpy ((char *) *addrp, hostnamebuf, len + 1);
*addrlenp = len;
} else {
*addrlenp = 0;
@ -259,6 +259,7 @@ TRANS(GetMyNetworkId) (XtransConnInfo ciptr)
char hostnamebuf[256];
char *networkId = NULL;
char *transName = ciptr->transptr->TransName;
size_t len;
if (gethostname (hostnamebuf, sizeof (hostnamebuf)) < 0)
{
@ -271,9 +272,10 @@ TRANS(GetMyNetworkId) (XtransConnInfo ciptr)
case AF_UNIX:
{
struct sockaddr_un *saddr = (struct sockaddr_un *) addr;
networkId = (char *) xalloc (3 + strlen (transName) +
strlen (hostnamebuf) + strlen (saddr->sun_path));
sprintf (networkId, "%s/%s:%s", transName,
len = 3 + strlen (transName) +
strlen (hostnamebuf) + strlen (saddr->sun_path);
networkId = (char *) xalloc (len);
snprintf (networkId, len, "%s/%s:%s", transName,
hostnamebuf, saddr->sun_path);
break;
}
@ -301,9 +303,11 @@ TRANS(GetMyNetworkId) (XtransConnInfo ciptr)
portnum = ntohs (saddr->sin_port);
snprintf (portnumbuf, sizeof(portnumbuf), "%d", portnum);
networkId = (char *) xalloc (3 + strlen (transName) +
strlen (hostnamebuf) + strlen (portnumbuf));
sprintf (networkId, "%s/%s:%s", transName, hostnamebuf, portnumbuf);
len = 3 + strlen (transName) +
strlen (hostnamebuf) + strlen (portnumbuf);
networkId = (char *) xalloc (len);
snprintf (networkId, len, "%s/%s:%s", transName, hostnamebuf,
portnumbuf);
break;
}
#endif /* defined(TCPCONN) || defined(STREAMSCONN) */
@ -312,10 +316,9 @@ TRANS(GetMyNetworkId) (XtransConnInfo ciptr)
case AF_DECnet:
{
struct sockaddr_dn *saddr = (struct sockaddr_dn *) addr;
networkId = (char *) xalloc (
13 + strlen (hostnamebuf) + saddr->sdn_objnamel);
sprintf (networkId, "dnet/%s::%s",
len = 13 + strlen (hostnamebuf) + saddr->sdn_objnamel;
networkId = (char *) xalloc (len);
snprintf (networkId, len, "dnet/%s::%s",
hostnamebuf, saddr->sdn_objname);
break;
}
@ -365,6 +368,7 @@ TRANS(GetPeerNetworkId) (XtransConnInfo ciptr)
char *hostname;
char addrbuf[256];
const char *addr = NULL;
size_t len;
switch (family)
{
@ -448,9 +452,10 @@ TRANS(GetPeerNetworkId) (XtransConnInfo ciptr)
if (np = getnodebyaddr(saddr->sdn_add.a_addr,
saddr->sdn_add.a_len, AF_DECnet)) {
sprintf(addrbuf, "%s:", np->n_name);
snprintf(addrbuf, sizeof(addrbuf), "%s:", np->n_name);
} else {
sprintf(addrbuf, "%s:", dnet_htoa(&saddr->sdn_add));
snprintf(addrbuf, sizeof(addrbuf), "%s:",
dnet_htoa(&saddr->sdn_add));
}
addr = addrbuf;
break;
@ -461,13 +466,12 @@ TRANS(GetPeerNetworkId) (XtransConnInfo ciptr)
return (NULL);
}
hostname = (char *) xalloc (
strlen (ciptr->transptr->TransName) + strlen (addr) + 2);
strcpy (hostname, ciptr->transptr->TransName);
strcat (hostname, "/");
len = strlen (ciptr->transptr->TransName) + strlen (addr) + 2;
hostname = (char *) xalloc (len);
strlcpy (hostname, ciptr->transptr->TransName, len);
strlcat (hostname, "/", len);
if (addr)
strcat (hostname, addr);
strlcat (hostname, addr, len);
return (hostname);
}