diff options
| author | itojun <> | 2000-02-25 04:39:08 +0000 |
|---|---|---|
| committer | itojun <> | 2000-02-25 04:39:08 +0000 |
| commit | 3b9588da09797abe4aab6d311630b9c5f9425c12 (patch) | |
| tree | 3f7b8d6aec8d73f65520018780c4e3175e5a7424 /src/lib/libc/net/rcmd.c | |
| parent | cabbb4908741a4504b0a41b0e90f0cfccf0a1e81 (diff) | |
| download | openbsd-3b9588da09797abe4aab6d311630b9c5f9425c12.tar.gz openbsd-3b9588da09797abe4aab6d311630b9c5f9425c12.tar.bz2 openbsd-3b9588da09797abe4aab6d311630b9c5f9425c12.zip | |
always pass salen as separate argument, so that it can be friendly with
systems with pre-4.2 sockaddrs.
Diffstat (limited to 'src/lib/libc/net/rcmd.c')
| -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 | ||
