aboutsummaryrefslogtreecommitdiff
path: root/src/lib/rpc/get_myaddress.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/rpc/get_myaddress.c')
-rw-r--r--src/lib/rpc/get_myaddress.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/lib/rpc/get_myaddress.c b/src/lib/rpc/get_myaddress.c
index fa4c54e..7986a38 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 */