From: John Kohl Date: Mon, 25 Feb 1991 11:38:39 +0000 (+0000) Subject: *** empty log message *** X-Git-Tag: krb5-1.0-alpha4~199 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=40b2a1dbd01fca8d901f23abdbb307c0be80c45e;p=krb5.git *** empty log message *** git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@1773 dc483132-0cff-0310-8789-dd5450dbe970 --- diff --git a/src/lib/krb5/os/full_ipadr.c b/src/lib/krb5/os/full_ipadr.c new file mode 100644 index 000000000..06d3ad264 --- /dev/null +++ b/src/lib/krb5/os/full_ipadr.c @@ -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 + * . + * + * 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 +#include +#include +#include + +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 index 000000000..9fedb5c41 --- /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 + * . + * + * 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 +#include +#include +#include + +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; +}