summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/libc/net/rcmd.c42
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)
37static char *rcsid = "$OpenBSD: rcmd.c,v 1.35 2000/02/18 04:12:20 itojun Exp $"; 37static 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
60int __ivaliduser __P((FILE *, in_addr_t, const char *, const char *)); 60int __ivaliduser __P((FILE *, in_addr_t, const char *, const char *));
61int __ivaliduser_sa __P((FILE *, struct sockaddr *, const char *, const char *)); 61int __ivaliduser_sa __P((FILE *, struct sockaddr *, socklen_t,
62static int __icheckhost __P((struct sockaddr *, const char *)); 62 const char *, const char *));
63static char *__gethostloop __P((struct sockaddr *)); 63static int __icheckhost __P((struct sockaddr *, socklen_t, const char *));
64static char *__gethostloop __P((struct sockaddr *, socklen_t));
64 65
65int 66int
66rcmd(ahost, rport, locuser, remuser, cmd, fd2p) 67rcmd(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");
399again: 397again:
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
473int 472int
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 */
622static int 622static 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 */
677static char * 678static 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