summaryrefslogtreecommitdiffstats
path: root/usr.sbin/inetd/builtins.c
diff options
context:
space:
mode:
authorgreen <green@FreeBSD.org>2000-05-30 22:51:05 +0000
committergreen <green@FreeBSD.org>2000-05-30 22:51:05 +0000
commit52697bb5ca8430c11b0bfedaa6813d6ecf085a95 (patch)
tree78026064a3c357c78e2ac6d2b152e9e428dd65c9 /usr.sbin/inetd/builtins.c
parentd4152c7d424de3498ed5cbc4475cd31cbdcd54dc (diff)
downloadFreeBSD-src-52697bb5ca8430c11b0bfedaa6813d6ecf085a95.zip
FreeBSD-src-52697bb5ca8430c11b0bfedaa6813d6ecf085a95.tar.gz
Fix the ident server up more: use ssize_t/size_t/socklen_t/int all in the
proper places and make the fakeid parsing code a bit less stupid. Also, remove an "Rflag" that snuck in there (-R wouldn't be accepted by it, anyway).
Diffstat (limited to 'usr.sbin/inetd/builtins.c')
-rw-r--r--usr.sbin/inetd/builtins.c45
1 files changed, 22 insertions, 23 deletions
diff --git a/usr.sbin/inetd/builtins.c b/usr.sbin/inetd/builtins.c
index b50f931..7516ed0 100644
--- a/usr.sbin/inetd/builtins.c
+++ b/usr.sbin/inetd/builtins.c
@@ -348,9 +348,11 @@ ident_stream(s, sep) /* Ident service (AKA "auth") */
fd_set fdset;
char buf[BUFSIZE], *cp = NULL, *p, **av, *osname = NULL, garbage[7];
char *fallback = NULL;
- size_t len;
+ socklen_t socklen;
+ ssize_t ssize;
+ size_t size;
int c, fflag = 0, nflag = 0, rflag = 0, argc = 0, usedfallback = 0;
- int gflag = 0, Rflag = 0, getcredfail = 0;
+ int gflag = 0, getcredfail = 0, onreadlen;
u_short lport, fport;
inetd_setproctitle(sep->se_service, s);
@@ -411,9 +413,6 @@ ident_stream(s, sep) /* Ident service (AKA "auth") */
case 'o':
osname = optarg;
break;
- case 'R':
- Rflag = 2;
- break;
case 'r':
rflag = 1;
break;
@@ -439,11 +438,11 @@ ident_stream(s, sep) /* Ident service (AKA "auth") */
iderror(0, 0, s, errno);
osname = un.sysname;
}
- len = sizeof(ss[0]);
- if (getsockname(s, (struct sockaddr *)&ss[0], &len) == -1)
+ socklen = sizeof(ss[0]);
+ if (getsockname(s, (struct sockaddr *)&ss[0], &socklen) == -1)
iderror(0, 0, s, errno);
- len = sizeof(ss[1]);
- if (getpeername(s, (struct sockaddr *)&ss[1], &len) == -1)
+ socklen = sizeof(ss[1]);
+ if (getpeername(s, (struct sockaddr *)&ss[1], &socklen) == -1)
iderror(0, 0, s, errno);
/*
* We're going to prepare for and execute reception of a
@@ -455,14 +454,14 @@ ident_stream(s, sep) /* Ident service (AKA "auth") */
FD_SET(s, &fdset);
if (select(s + 1, &fdset, NULL, NULL, &tv) == -1)
iderror(0, 0, s, errno);
- if (ioctl(s, FIONREAD, &len) == -1)
+ if (ioctl(s, FIONREAD, &onreadlen) == -1)
iderror(0, 0, s, errno);
- if (len >= sizeof(buf))
- len = sizeof(buf) - 1;
- len = read(s, buf, len);
- if (len == -1)
+ if (onreadlen >= sizeof(buf))
+ onreadlen = sizeof(buf) - 1;
+ ssize = read(s, buf, (size_t)onreadlen);
+ if (ssize == -1)
iderror(0, 0, s, errno);
- buf[len] = '\0';
+ buf[ssize] = '\0';
if (sscanf(buf, "%hu , %hu", &lport, &fport) != 2)
iderror(0, 0, s, 0);
if (gflag) {
@@ -495,14 +494,14 @@ ident_stream(s, sep) /* Ident service (AKA "auth") */
*/
if (ss[0].ss_family != ss[1].ss_family)
iderror(lport, fport, s, errno);
- len = sizeof(uc);
+ size = sizeof(uc);
switch (ss[0].ss_family) {
case AF_INET:
sin[0] = *(struct sockaddr_in *)&ss[0];
sin[0].sin_port = htons(lport);
sin[1] = *(struct sockaddr_in *)&ss[1];
sin[1].sin_port = htons(fport);
- if (sysctlbyname("net.inet.tcp.getcred", &uc, &len, sin,
+ if (sysctlbyname("net.inet.tcp.getcred", &uc, &size, sin,
sizeof(sin)) == -1)
getcredfail = 1;
break;
@@ -512,7 +511,7 @@ ident_stream(s, sep) /* Ident service (AKA "auth") */
sin6[0].sin6_port = htons(lport);
sin6[1] = *(struct sockaddr_in6 *)&ss[1];
sin6[1].sin6_port = htons(fport);
- if (sysctlbyname("net.inet6.tcp6.getcred", &uc, &len, sin6,
+ if (sysctlbyname("net.inet6.tcp6.getcred", &uc, &size, sin6,
sizeof(sin6)) == -1)
getcredfail = 1;
break;
@@ -584,16 +583,16 @@ ident_stream(s, sep) /* Ident service (AKA "auth") */
* in the form "identity\n", so we use strtok() to
* end the string (which fgets() doesn't do.)
*/
- strtok(buf, "\r\n");
- /* User names of >16 characters are invalid */
- if (strlen(buf) > 16)
- buf[16] = '\0';
+ buf[strcspn(buf, "\r\n")] = '\0';
cp = buf;
/* Allow for beginning white space... */
while (isspace(*cp))
cp++;
/* ...and ending white space. */
- strtok(cp, " \t");
+ cp[strcspn(cp, " \t")] = '\0';
+ /* User names of >16 characters are invalid */
+ if (strlen(cp) > 16)
+ cp[16] = '\0';
/*
* If the name is a zero-length string or matches
* the name of another user, it's invalid, so
OpenPOWER on IntegriCloud