aboutsummaryrefslogtreecommitdiff
path: root/src/lib/krb5/os/port2ip.c
diff options
context:
space:
mode:
authorJohn Kohl <jtkohl@mit.edu>1991-02-25 11:38:39 +0000
committerJohn Kohl <jtkohl@mit.edu>1991-02-25 11:38:39 +0000
commit40b2a1dbd01fca8d901f23abdbb307c0be80c45e (patch)
tree02254423b6d4f82d93276a5a24a70ce33222d50e /src/lib/krb5/os/port2ip.c
parenta044c995620f0462ca09dd5a296f4c4a54b2c2b7 (diff)
downloadkrb5-40b2a1dbd01fca8d901f23abdbb307c0be80c45e.zip
krb5-40b2a1dbd01fca8d901f23abdbb307c0be80c45e.tar.gz
krb5-40b2a1dbd01fca8d901f23abdbb307c0be80c45e.tar.bz2
*** empty log message ***
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@1773 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/krb5/os/port2ip.c')
-rw-r--r--src/lib/krb5/os/port2ip.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/lib/krb5/os/port2ip.c b/src/lib/krb5/os/port2ip.c
new file mode 100644
index 0000000..9fedb5c
--- /dev/null
+++ b/src/lib/krb5/os/port2ip.c
@@ -0,0 +1,75 @@
+/*
+ * $Source$
+ * $Author$
+ *
+ * Copyright 1991 by the Massachusetts Institute of Technology.
+ * All Rights Reserved.
+ *
+ * For copying and distribution information, please see the file
+ * <krb5/copyright.h>.
+ *
+ * Take an ADDRPORT address and split into IP addr & port.
+ */
+
+#if !defined(lint) && !defined(SABER)
+static char rcsid_port2ip_c[] =
+"$Id$";
+#endif /* !lint & !SABER */
+
+#include <krb5/krb5.h>
+#include <krb5/ext-proto.h>
+#include <krb5/libos-proto.h>
+#include <netinet/in.h>
+
+krb5_error_code
+krb5_unpack_full_ipaddr(inaddr, adr, port)
+krb5_address *inaddr;
+krb5_int32 *adr;
+krb5_int16 *port;
+{
+ unsigned long smushaddr;
+ unsigned short smushport;
+ register krb5_octet *marshal;
+ krb5_addrtype temptype;
+ krb5_int32 templength;
+
+ if (inaddr->addrtype != ADDRTYPE_ADDRPORT)
+ return KRB5KRB_AP_ERR_BADADDR; /* XXX */
+
+ if (inaddr->length != sizeof(smushaddr)+ sizeof(smushport) +
+ 2*sizeof(temptype) + 2*sizeof(templength))
+ return KRB5KRB_AP_ERR_BADADDR; /* XXX */
+
+ marshal = inaddr->contents;
+
+ (void) memcpy((char *)&temptype, (char *)marshal, sizeof(temptype));
+ marshal += sizeof(temptype);
+ if (temptype != htons(ADDRTYPE_INET))
+ return KRB5KRB_AP_ERR_BADADDR; /* XXX */
+
+ (void) memcpy((char *)&templength, (char *)marshal, sizeof(templength));
+ marshal += sizeof(templength);
+ if (templength != htonl(sizeof(smushaddr)))
+ return KRB5KRB_AP_ERR_BADADDR; /* XXX */
+
+ (void) memcpy((char *)&smushaddr, (char *)marshal, sizeof(smushaddr));
+ /* leave in net order */
+ marshal += sizeof(smushaddr);
+
+ (void) memcpy((char *)&temptype, (char *)marshal, sizeof(temptype));
+ marshal += sizeof(temptype);
+ if (temptype != htons(ADDRTYPE_IPPORT))
+ return KRB5KRB_AP_ERR_BADADDR; /* XXX */
+
+ (void) memcpy((char *)&templength, (char *)marshal, sizeof(templength));
+ marshal += sizeof(templength);
+ if (templength != htonl(sizeof(smushport)))
+ return KRB5KRB_AP_ERR_BADADDR; /* XXX */
+
+ (void) memcpy((char *)&smushport, (char *)marshal, sizeof(smushport));
+ /* leave in net order */
+
+ *adr = (krb5_int32) smushaddr;
+ *port = (krb5_int16) smushport;
+ return 0;
+}