diff options
-rw-r--r-- | src/lib/libc/net/rcmd.c | 42 |
1 files changed, 22 insertions, 20 deletions
diff --git a/src/lib/libc/net/rcmd.c b/src/lib/libc/net/rcmd.c index 874c810782..697c6d0c6f 100644 --- a/src/lib/libc/net/rcmd.c +++ b/src/lib/libc/net/rcmd.c | |||
@@ -34,7 +34,7 @@ | |||
34 | */ | 34 | */ |
35 | 35 | ||
36 | #if defined(LIBC_SCCS) && !defined(lint) | 36 | #if defined(LIBC_SCCS) && !defined(lint) |
37 | static char *rcsid = "$OpenBSD: rcmd.c,v 1.35 2000/02/18 04:12:20 itojun Exp $"; | 37 | static char *rcsid = "$OpenBSD: rcmd.c,v 1.36 2000/02/25 04:39:08 itojun Exp $"; |
38 | #endif /* LIBC_SCCS and not lint */ | 38 | #endif /* LIBC_SCCS and not lint */ |
39 | 39 | ||
40 | #include <sys/param.h> | 40 | #include <sys/param.h> |
@@ -58,9 +58,10 @@ static char *rcsid = "$OpenBSD: rcmd.c,v 1.35 2000/02/18 04:12:20 itojun Exp $"; | |||
58 | #include <netgroup.h> | 58 | #include <netgroup.h> |
59 | 59 | ||
60 | int __ivaliduser __P((FILE *, in_addr_t, const char *, const char *)); | 60 | int __ivaliduser __P((FILE *, in_addr_t, const char *, const char *)); |
61 | int __ivaliduser_sa __P((FILE *, struct sockaddr *, const char *, const char *)); | 61 | int __ivaliduser_sa __P((FILE *, struct sockaddr *, socklen_t, |
62 | static int __icheckhost __P((struct sockaddr *, const char *)); | 62 | const char *, const char *)); |
63 | static char *__gethostloop __P((struct sockaddr *)); | 63 | static int __icheckhost __P((struct sockaddr *, socklen_t, const char *)); |
64 | static char *__gethostloop __P((struct sockaddr *, socklen_t)); | ||
64 | 65 | ||
65 | int | 66 | int |
66 | rcmd(ahost, rport, locuser, remuser, cmd, fd2p) | 67 | rcmd(ahost, rport, locuser, remuser, cmd, fd2p) |
@@ -391,14 +392,11 @@ iruserok_sa(raddr, rlen, superuser, ruser, luser) | |||
391 | char pbuf[MAXPATHLEN]; | 392 | char pbuf[MAXPATHLEN]; |
392 | 393 | ||
393 | sa = (struct sockaddr *)raddr; | 394 | sa = (struct sockaddr *)raddr; |
394 | #ifdef lint | ||
395 | rlen = rlen; | ||
396 | #endif | ||
397 | first = 1; | 395 | first = 1; |
398 | hostf = superuser ? NULL : fopen(_PATH_HEQUIV, "r"); | 396 | hostf = superuser ? NULL : fopen(_PATH_HEQUIV, "r"); |
399 | again: | 397 | again: |
400 | if (hostf) { | 398 | if (hostf) { |
401 | if (__ivaliduser_sa(hostf, sa, luser, ruser) == 0) { | 399 | if (__ivaliduser_sa(hostf, sa, rlen, luser, ruser) == 0) { |
402 | (void)fclose(hostf); | 400 | (void)fclose(hostf); |
403 | return (0); | 401 | return (0); |
404 | } | 402 | } |
@@ -467,13 +465,15 @@ __ivaliduser(hostf, raddrl, luser, ruser) | |||
467 | sin.sin_family = AF_INET; | 465 | sin.sin_family = AF_INET; |
468 | sin.sin_len = sizeof(struct sockaddr_in); | 466 | sin.sin_len = sizeof(struct sockaddr_in); |
469 | memcpy(&sin.sin_addr, &raddrl, sizeof(sin.sin_addr)); | 467 | memcpy(&sin.sin_addr, &raddrl, sizeof(sin.sin_addr)); |
470 | return __ivaliduser_sa(hostf, (struct sockaddr *)&sin, luser, ruser); | 468 | return __ivaliduser_sa(hostf, (struct sockaddr *)&sin, sin.sin_len, |
469 | luser, ruser); | ||
471 | } | 470 | } |
472 | 471 | ||
473 | int | 472 | int |
474 | __ivaliduser_sa(hostf, raddr, luser, ruser) | 473 | __ivaliduser_sa(hostf, raddr, salen, luser, ruser) |
475 | FILE *hostf; | 474 | FILE *hostf; |
476 | struct sockaddr *raddr; | 475 | struct sockaddr *raddr; |
476 | socklen_t salen; | ||
477 | const char *luser, *ruser; | 477 | const char *luser, *ruser; |
478 | { | 478 | { |
479 | register char *user, *p; | 479 | register char *user, *p; |
@@ -536,14 +536,14 @@ __ivaliduser_sa(hostf, raddr, luser, ruser) | |||
536 | break; | 536 | break; |
537 | case '@': | 537 | case '@': |
538 | if (rhost == (char *)-1) | 538 | if (rhost == (char *)-1) |
539 | rhost = __gethostloop(raddr); | 539 | rhost = __gethostloop(raddr, salen); |
540 | hostok = 0; | 540 | hostok = 0; |
541 | if (rhost) | 541 | if (rhost) |
542 | hostok = innetgr(&ahost[2], rhost, | 542 | hostok = innetgr(&ahost[2], rhost, |
543 | NULL, domain); | 543 | NULL, domain); |
544 | break; | 544 | break; |
545 | default: | 545 | default: |
546 | hostok = __icheckhost(raddr, &ahost[1]); | 546 | hostok = __icheckhost(raddr, salen, &ahost[1]); |
547 | break; | 547 | break; |
548 | } | 548 | } |
549 | else if (ahost[0] == '-') | 549 | else if (ahost[0] == '-') |
@@ -553,18 +553,18 @@ __ivaliduser_sa(hostf, raddr, luser, ruser) | |||
553 | break; | 553 | break; |
554 | case '@': | 554 | case '@': |
555 | if (rhost == (char *)-1) | 555 | if (rhost == (char *)-1) |
556 | rhost = __gethostloop(raddr); | 556 | rhost = __gethostloop(raddr, salen); |
557 | hostok = 0; | 557 | hostok = 0; |
558 | if (rhost) | 558 | if (rhost) |
559 | hostok = -innetgr(&ahost[2], rhost, | 559 | hostok = -innetgr(&ahost[2], rhost, |
560 | NULL, domain); | 560 | NULL, domain); |
561 | break; | 561 | break; |
562 | default: | 562 | default: |
563 | hostok = -__icheckhost(raddr, &ahost[1]); | 563 | hostok = -__icheckhost(raddr, salen, &ahost[1]); |
564 | break; | 564 | break; |
565 | } | 565 | } |
566 | else | 566 | else |
567 | hostok = __icheckhost(raddr, ahost); | 567 | hostok = __icheckhost(raddr, salen, ahost); |
568 | 568 | ||
569 | 569 | ||
570 | if (auser[0] == '+') | 570 | if (auser[0] == '+') |
@@ -620,8 +620,9 @@ bail: | |||
620 | * if af == AF_INET6. | 620 | * if af == AF_INET6. |
621 | */ | 621 | */ |
622 | static int | 622 | static int |
623 | __icheckhost(raddr, lhost) | 623 | __icheckhost(raddr, salen, lhost) |
624 | struct sockaddr *raddr; | 624 | struct sockaddr *raddr; |
625 | socklen_t salen; | ||
625 | const char *lhost; | 626 | const char *lhost; |
626 | { | 627 | { |
627 | struct addrinfo hints, *res, *r; | 628 | struct addrinfo hints, *res, *r; |
@@ -634,7 +635,7 @@ __icheckhost(raddr, lhost) | |||
634 | #endif | 635 | #endif |
635 | 636 | ||
636 | h1[0] = '\0'; | 637 | h1[0] = '\0'; |
637 | if (getnameinfo(raddr, raddr->sa_len, h1, sizeof(h1), NULL, 0, | 638 | if (getnameinfo(raddr, salen, h1, sizeof(h1), NULL, 0, |
638 | niflags) != 0) | 639 | niflags) != 0) |
639 | return (0); | 640 | return (0); |
640 | 641 | ||
@@ -675,8 +676,9 @@ __icheckhost(raddr, lhost) | |||
675 | * if af == AF_INET6. | 676 | * if af == AF_INET6. |
676 | */ | 677 | */ |
677 | static char * | 678 | static char * |
678 | __gethostloop(raddr) | 679 | __gethostloop(raddr, salen) |
679 | struct sockaddr *raddr; | 680 | struct sockaddr *raddr; |
681 | socklen_t salen; | ||
680 | { | 682 | { |
681 | static char remotehost[NI_MAXHOST]; | 683 | static char remotehost[NI_MAXHOST]; |
682 | char h1[NI_MAXHOST], h2[NI_MAXHOST]; | 684 | char h1[NI_MAXHOST], h2[NI_MAXHOST]; |
@@ -689,10 +691,10 @@ __gethostloop(raddr) | |||
689 | #endif | 691 | #endif |
690 | 692 | ||
691 | h1[0] = remotehost[0] = '\0'; | 693 | h1[0] = remotehost[0] = '\0'; |
692 | if (getnameinfo(raddr, raddr->sa_len, remotehost, sizeof(remotehost), | 694 | if (getnameinfo(raddr, salen, remotehost, sizeof(remotehost), |
693 | NULL, 0, NI_NAMEREQD) != 0) | 695 | NULL, 0, NI_NAMEREQD) != 0) |
694 | return (NULL); | 696 | return (NULL); |
695 | if (getnameinfo(raddr, raddr->sa_len, h1, sizeof(h1), NULL, 0, | 697 | if (getnameinfo(raddr, salen, h1, sizeof(h1), NULL, 0, |
696 | niflags) != 0) | 698 | niflags) != 0) |
697 | return (NULL); | 699 | return (NULL); |
698 | 700 | ||