diff options
| author | Warner Losh <imp@FreeBSD.org> | 1997-02-09 04:18:43 +0000 |
|---|---|---|
| committer | Warner Losh <imp@FreeBSD.org> | 1997-02-09 04:18:43 +0000 |
| commit | 70dc969961bb4876b1381d577236c355e35154a8 (patch) | |
| tree | c248698250bdad3b19d0da3ac73901698251aa02 /libexec | |
| parent | 2631d5a8d1dd605944e6a78f826cfdbce242a725 (diff) | |
Notes
Diffstat (limited to 'libexec')
| -rw-r--r-- | libexec/rlogind/rlogind.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/libexec/rlogind/rlogind.c b/libexec/rlogind/rlogind.c index b19b0cf9c4f2..64b346e6e9a8 100644 --- a/libexec/rlogind/rlogind.c +++ b/libexec/rlogind/rlogind.c @@ -252,9 +252,8 @@ doit(f, fromp) } #ifdef IP_OPTIONS { - u_char optbuf[BUFSIZ/3], *cp; - char lbuf[BUFSIZ], *lp; - int optsize = sizeof(optbuf), ipproto; + u_char optbuf[BUFSIZ/3]; + int optsize = sizeof(optbuf), ipproto, i; struct protoent *ip; if ((ip = getprotobyname("ip")) != NULL) @@ -263,17 +262,18 @@ doit(f, fromp) ipproto = IPPROTO_IP; if (getsockopt(0, ipproto, IP_OPTIONS, (char *)optbuf, &optsize) == 0 && optsize != 0) { - lp = lbuf; - for (cp = optbuf; optsize > 0; cp++, optsize--, lp += 3) - sprintf(lp, " %2.2x", *cp); - syslog(LOG_NOTICE, - "Connection received using IP options (ignored):%s", - lbuf); - if (setsockopt(0, ipproto, IP_OPTIONS, - (char *)NULL, optsize) != 0) { - syslog(LOG_ERR, - "setsockopt IP_OPTIONS NULL: %m"); - exit(1); + for (i = 0; i < optsize; ) { + u_char c = optbuf[i]; + if (c == IPOPT_LSRR || c == IPOPT_SSRR) { + syslog(LOG_NOTICE, + "Connection refused from %s with IP option %s", + inet_ntoa(fromp->sin_addr), + c == IPOPT_LSRR ? "LSRR" : "SSRR"); + exit(1); + } + if (c == IPOPT_EOL) + break; + i += (c == IPOPT_NOP) ? 1 : optbuf[i+1]; } } } |
