*** empty log message ***
authorJohn Kohl <jtkohl@mit.edu>
Mon, 25 Feb 1991 11:38:39 +0000 (11:38 +0000)
committerJohn Kohl <jtkohl@mit.edu>
Mon, 25 Feb 1991 11:38:39 +0000 (11:38 +0000)
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@1773 dc483132-0cff-0310-8789-dd5450dbe970

src/lib/krb5/os/full_ipadr.c [new file with mode: 0644]
src/lib/krb5/os/port2ip.c [new file with mode: 0644]

diff --git a/src/lib/krb5/os/full_ipadr.c b/src/lib/krb5/os/full_ipadr.c
new file mode 100644 (file)
index 0000000..06d3ad2
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * $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 IP addr & port and generate a full IP address.
+ */
+
+#if !defined(lint) && !defined(SABER)
+static char rcsid_full_ipadr_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_make_full_ipaddr(DECLARG(krb5_int32, adr),
+                     DECLARG(krb5_int16, port),
+                     DECLARG(krb5_address **,outaddr))
+OLDDECLARG(krb5_int32, adr)
+OLDDECLARG(krb5_int16, port)
+OLDDECLARG(krb5_address **,outaddr)
+{
+    unsigned long smushaddr = (unsigned long) adr; /* already in net order */
+    unsigned short smushport = (unsigned short) port; /* ditto */
+    register krb5_address *retaddr;
+    register krb5_octet *marshal;
+    krb5_addrtype temptype;
+    krb5_int32 templength;
+
+    if (!(retaddr = (krb5_address *)malloc(sizeof(*retaddr)))) {
+       return ENOMEM;
+    }
+    retaddr->addrtype = ADDRTYPE_ADDRPORT;
+    retaddr->length = sizeof(smushaddr)+ sizeof(smushport) +
+       2*sizeof(temptype) + 2*sizeof(templength);
+
+    if (!(retaddr->contents = (krb5_octet *)malloc(retaddr->length))) {
+       xfree(retaddr);
+       return ENOMEM;
+    }
+    marshal = retaddr->contents;
+
+    temptype = htons(ADDRTYPE_INET);
+    (void) memcpy((char *)marshal, (char *)&temptype, sizeof(temptype));
+    marshal += sizeof(temptype);
+
+    templength = htonl(sizeof(smushaddr));
+    (void) memcpy((char *)marshal, (char *)&templength, sizeof(templength));
+    marshal += sizeof(templength);
+
+    (void) memcpy((char *)marshal, (char *)&smushaddr, sizeof(smushaddr));
+    marshal += sizeof(smushaddr);
+
+    temptype = htons(ADDRTYPE_IPPORT);
+    (void) memcpy((char *)marshal, (char *)&temptype, sizeof(temptype));
+    marshal += sizeof(temptype);
+
+    templength = htonl(sizeof(smushport));
+    (void) memcpy((char *)marshal, (char *)&templength, sizeof(templength));
+    marshal += sizeof(templength);
+
+    (void) memcpy((char *)marshal, (char *)&smushport, sizeof(smushport));
+    marshal += sizeof(smushport);
+
+    *outaddr = retaddr;
+    return 0;
+}
diff --git a/src/lib/krb5/os/port2ip.c b/src/lib/krb5/os/port2ip.c
new file mode 100644 (file)
index 0000000..9fedb5c
--- /dev/null
@@ -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;
+}