diff options
author | Chris Provenzano <proven@mit.edu> | 1995-04-26 03:04:19 +0000 |
---|---|---|
committer | Chris Provenzano <proven@mit.edu> | 1995-04-26 03:04:19 +0000 |
commit | 5c3b3b95259a2b73e7dbabcbda6996ded56b64d3 (patch) | |
tree | d08b7242138f126328788b010a8e89b92ca6a638 /src/lib/krb5/os/genaddrs.c | |
parent | b512f16eda5d2b4920490d2409d6a900030b32d0 (diff) | |
download | krb5-5c3b3b95259a2b73e7dbabcbda6996ded56b64d3.zip krb5-5c3b3b95259a2b73e7dbabcbda6996ded56b64d3.tar.gz krb5-5c3b3b95259a2b73e7dbabcbda6996ded56b64d3.tar.bz2 |
* Makefile.in : Added source files mk_faddr.c and genaddrs.c.
* mk_faddr.c (krb5_mk_fulladdr()): Makes a full address from
a struct sockaddr_in.
* genaddrs.c (krb5_auth_con_genaddrs()) : Generate a full address
from the active file descriptor and place it in the
auth_context for the calls mk_safe(), mk_priv(), mk_safe(),
rd_cred(), rd_priv(), and rd_safe().
* gen_rname.c (krb5_gen_replay_name()) : Fixed to take any type of
krb5_address and generate a rcache name.
* os-proto.h (krb5_make_full_ipaddr()) : Removed prototype.
git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@5490 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src/lib/krb5/os/genaddrs.c')
-rw-r--r-- | src/lib/krb5/os/genaddrs.c | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/src/lib/krb5/os/genaddrs.c b/src/lib/krb5/os/genaddrs.c new file mode 100644 index 0000000..1ca9dee --- /dev/null +++ b/src/lib/krb5/os/genaddrs.c @@ -0,0 +1,95 @@ +/* + * lib/krb5/os/genaddrs.c + * + * Copyright 1995 by the Massachusetts Institute of Technology. + * All Rights Reserved. + * + * Export of this software from the United States of America may + * require a specific license from the United States Government. + * It is the responsibility of any person or organization contemplating + * export to obtain such a license before exporting. + * + * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and + * distribute this software and its documentation for any purpose and + * without fee is hereby granted, provided that the above copyright + * notice appear in all copies and that both that copyright notice and + * this permission notice appear in supporting documentation, and that + * the name of M.I.T. not be used in advertising or publicity pertaining + * to distribution of the software without specific, written prior + * permission. M.I.T. makes no representations about the suitability of + * this software for any purpose. It is provided "as is" without express + * or implied warranty. + * + * + * Take an IP addr & port and generate a full IP address. + */ + +#define NEED_SOCKETS +#include "k5-int.h" +#include "os-proto.h" + +#ifndef _WINSOCKAPI_ +#include <netinet/in.h> +#endif + +krb5_error_code INTERFACE +krb5_auth_con_genaddrs(context, auth_context, fd, flags) + krb5_context context; + krb5_auth_context * auth_context; + int fd, flags; +{ + krb5_error_code retval; + krb5_address * laddr; + krb5_address * raddr; + +#ifdef KRB5_USE_INET + struct sockaddr_in saddr; + krb5_address lcaddr; + krb5_address rcaddr; + int ssize; + + ssize = sizeof(struct sockaddr); + if ((flags & KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR) || + (flags & KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR)) { + if (retval = getsockname(fd, &saddr, &ssize)) + return retval; + + if (flags & KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR) { + if (retval = krb5_make_fulladdr(context, &saddr, &lcaddr)) + return retval; + } else { + lcaddr.contents = (krb5_octet *)&saddr.sin_addr; + lcaddr.length = sizeof(saddr.sin_addr); + lcaddr.addrtype = ADDRTYPE_INET; + } + laddr = &lcaddr; + } else { + laddr = NULL; + } + + if ((flags & KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR) || + (flags & KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR)) { + if (retval = getpeername(fd, &saddr, &ssize)) + return retval; + + if (flags & KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR) { + if (retval = krb5_make_fulladdr(context, &saddr, &rcaddr)) { + if (flags & KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR) + krb5_xfree(laddr->contents); + return retval; + } + } else { + rcaddr.contents = (krb5_octet *)&saddr.sin_addr; + rcaddr.length = sizeof(saddr.sin_addr); + rcaddr.addrtype = ADDRTYPE_INET; + } + raddr = &rcaddr; + } else { + raddr = NULL; + } + + return (krb5_auth_con_setaddrs(context, auth_context, laddr, raddr)); +#else + return KRB5_PROG_ATYPE_NOSUPP; +#endif +} |