diff options
author | John Kohl <jtkohl@mit.edu> | 1991-02-25 11:38:39 +0000 |
---|---|---|
committer | John Kohl <jtkohl@mit.edu> | 1991-02-25 11:38:39 +0000 |
commit | 40b2a1dbd01fca8d901f23abdbb307c0be80c45e (patch) | |
tree | 02254423b6d4f82d93276a5a24a70ce33222d50e /src/lib/krb5/os/port2ip.c | |
parent | a044c995620f0462ca09dd5a296f4c4a54b2c2b7 (diff) | |
download | krb5-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.c | 75 |
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; +} |