summaryrefslogtreecommitdiffstats
path: root/src/lib/rpc
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/rpc')
-rw-r--r--src/lib/rpc/ChangeLog15
-rw-r--r--src/lib/rpc/clnt_generic.c2
-rw-r--r--src/lib/rpc/clnt_simple.c3
-rw-r--r--src/lib/rpc/configure.in6
-rw-r--r--src/lib/rpc/get_myaddress.c41
-rw-r--r--src/lib/rpc/getrpcport.c2
-rw-r--r--src/lib/rpc/types.hin4
-rw-r--r--src/lib/rpc/unit-test/ChangeLog4
-rw-r--r--src/lib/rpc/unit-test/Makefile.in6
9 files changed, 74 insertions, 9 deletions
diff --git a/src/lib/rpc/ChangeLog b/src/lib/rpc/ChangeLog
index 1f815211b1..904ca169ba 100644
--- a/src/lib/rpc/ChangeLog
+++ b/src/lib/rpc/ChangeLog
@@ -19,6 +19,21 @@ Wed Dec 4 12:42:49 1996 Barry Jaspan <bjaspan@mit.edu>
recvfrom in order to determine both source and dest address on
unconnected UDP socket, set xp_laddr and xp_laddrlen
+Fri Nov 22 15:50:42 1996 unknown <bjaspan@mit.edu>
+
+ * get_myaddress.c (get_myaddress): use krb5_os_localaddr instead
+ of ioctl() to get local IP addresses [krb5-libs/227]
+
+ * clnt_generic.c, clnt_simple.c, getrpcport.c: use sizeof instead
+ of h_length to determine number of bytes of addr to copy from DNS
+ response [krb5-misc/211]
+
+Fri Nov 22 11:49:43 1996 Sam Hartman <hartmans@mit.edu>
+
+ * types.hin: Include stdlib.h if found at config time [203]
+
+ * configure.in: Substitute STDLIB_INCLUDE into types.h. [203]
+
Tue Nov 12 16:27:27 1996 Barry Jaspan <bjaspan@mit.edu>
* auth_gssapi.c (auth_gssapi_create): handle channel bindings
diff --git a/src/lib/rpc/clnt_generic.c b/src/lib/rpc/clnt_generic.c
index f111c2e147..9eeabe1529 100644
--- a/src/lib/rpc/clnt_generic.c
+++ b/src/lib/rpc/clnt_generic.c
@@ -73,7 +73,7 @@ clnt_create(hostname, prog, vers, proto)
sin.sin_family = h->h_addrtype;
sin.sin_port = 0;
memset(sin.sin_zero, 0, sizeof(sin.sin_zero));
- memmove((char*)&sin.sin_addr, h->h_addr, h->h_length);
+ memmove((char*)&sin.sin_addr, h->h_addr, sizeof(sin.sin_addr));
p = getprotobyname(proto);
if (p == NULL) {
rpc_createerr.cf_stat = RPC_UNKNOWNPROTO;
diff --git a/src/lib/rpc/clnt_simple.c b/src/lib/rpc/clnt_simple.c
index 0d8f7a4df7..9b5ba9fa68 100644
--- a/src/lib/rpc/clnt_simple.c
+++ b/src/lib/rpc/clnt_simple.c
@@ -88,7 +88,8 @@ callrpc(host, prognum, versnum, procnum, inproc, in, outproc, out)
return ((int) RPC_UNKNOWNHOST);
timeout.tv_usec = 0;
timeout.tv_sec = 5;
- memmove((char *)&server_addr.sin_addr, hp->h_addr, hp->h_length);
+ memmove((char *)&server_addr.sin_addr, hp->h_addr,
+ sizeof(server_addr.sin_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = 0;
if ((crp->client = clntudp_create(&server_addr, (rpc_u_int32)prognum,
diff --git a/src/lib/rpc/configure.in b/src/lib/rpc/configure.in
index c2217044f8..dde9d53fa3 100644
--- a/src/lib/rpc/configure.in
+++ b/src/lib/rpc/configure.in
@@ -6,7 +6,11 @@ AC_PROG_ARCHIVE
AC_PROG_ARCHIVE_ADD
AC_PROG_RANLIB
AC_PROG_INSTALL
-
+dnl Arrange for types.hin to include stdlib.h
+AC_CHECK_HEADER(stdlib.h, [
+ STDLIB_INCLUDE="#include <stdlib.h>"],
+ [STDLIB_INCLUDE=""])
+AC_SUBST(STDLIB_INCLUDE) dnl
### Check where struct rpcent is declared.
#
# This is necessary to determine:
diff --git a/src/lib/rpc/get_myaddress.c b/src/lib/rpc/get_myaddress.c
index fa4c54e784..7986a384c7 100644
--- a/src/lib/rpc/get_myaddress.c
+++ b/src/lib/rpc/get_myaddress.c
@@ -38,6 +38,46 @@ static char sccsid[] = "@(#)get_myaddress.c 1.4 87/08/11 Copyr 1984 Sun Micro";
* Copyright (C) 1984, Sun Microsystems, Inc.
*/
+#ifdef GSSAPI_KRB5
+#include <rpc/types.h>
+#include <rpc/pmap_prot.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <krb5.h>
+/*
+ * don't use gethostbyname, which would invoke yellow pages
+ */
+get_myaddress(addr)
+ struct sockaddr_in *addr;
+{
+ krb5_address **addrs, **a;
+ int ret;
+
+ /* Hack! krb5_os_localaddr does not use the context arg! */
+ if (ret = krb5_os_localaddr(NULL, &addrs)) {
+ com_err("get_myaddress", ret, "calling krb5_os_localaddr");
+ exit(1);
+ }
+ a = addrs;
+ while (*a) {
+ if ((*a)->addrtype == ADDRTYPE_INET) {
+ memset(addr, 0, sizeof(*addr));
+ addr->sin_family = AF_INET;
+ addr->sin_port = htons(PMAPPORT);
+ memcpy(&addr->sin_addr, (*a)->contents, sizeof(addr->sin_addr));
+ break;
+ }
+ a++;
+ }
+ if (*a == NULL) {
+ com_err("get_myaddress", 0, "no local AF_INET address");
+ exit(1);
+ }
+ /* Hack! krb5_free_addresses does not use the context arg! */
+ krb5_free_addresses(NULL, addrs);
+}
+
+#else /* !GSSAPI_KRB5 */
#include <rpc/types.h>
#include <rpc/pmap_prot.h>
#include <sys/socket.h>
@@ -93,3 +133,4 @@ get_myaddress(addr)
}
(void) close(s);
}
+#endif /* !GSSAPI_KRB5 */
diff --git a/src/lib/rpc/getrpcport.c b/src/lib/rpc/getrpcport.c
index d209a15274..1bc239f942 100644
--- a/src/lib/rpc/getrpcport.c
+++ b/src/lib/rpc/getrpcport.c
@@ -48,7 +48,7 @@ getrpcport(host, prognum, versnum, proto)
if ((hp = gethostbyname(host)) == NULL)
return (0);
- memmove((char *) &addr.sin_addr, hp->h_addr, hp->h_length);
+ memmove((char *) &addr.sin_addr, hp->h_addr, sizeof(addr.sin_addr));
addr.sin_family = AF_INET;
addr.sin_port = 0;
return (pmap_getport(&addr, prognum, versnum, proto));
diff --git a/src/lib/rpc/types.hin b/src/lib/rpc/types.hin
index 9bd357d701..8722759cc8 100644
--- a/src/lib/rpc/types.hin
+++ b/src/lib/rpc/types.hin
@@ -61,9 +61,7 @@ typedef unsigned long rpc_u_int32;
# define NULL 0
#endif
-#if defined(__osf__)
-#include <stdlib.h>
-#endif
+@STDLIB_INCLUDE@
#define mem_alloc(bsize) (char *) malloc(bsize)
#define mem_free(ptr, bsize) free(ptr)
diff --git a/src/lib/rpc/unit-test/ChangeLog b/src/lib/rpc/unit-test/ChangeLog
index 05a3de5409..0303efb292 100644
--- a/src/lib/rpc/unit-test/ChangeLog
+++ b/src/lib/rpc/unit-test/ChangeLog
@@ -1,3 +1,7 @@
+Wed Nov 20 16:00:21 1996 Barry Jaspan <bjaspan@mit.edu>
+
+ * Makefile.in (unit-test-): warn more loudly about unrun tests
+
Thu Nov 14 22:27:05 1996 Tom Yu <tlyu@mit.edu>
* server.c (main): Add declaration of optind for systems that
diff --git a/src/lib/rpc/unit-test/Makefile.in b/src/lib/rpc/unit-test/Makefile.in
index 3690dc3493..26c10c79d3 100644
--- a/src/lib/rpc/unit-test/Makefile.in
+++ b/src/lib/rpc/unit-test/Makefile.in
@@ -29,8 +29,10 @@ client.o server.o: rpc_test.h
check unit-test:: unit-test-@DO_TEST@
unit-test-:
- @echo "The rpc tests require Perl, Tcl, and runtest"
- @echo "No tests run here"
+ @echo "+++"
+ @echo "+++ WARNING: lib/rpc unit tests not run."
+ @echo "+++ Either tcl, runtest, or Perl is unavailable."
+ @echo "+++"
unit-test-ok:: unit-test-setup unit-test-body unit-test-cleanup