implement krb5_auth_con_genaddrs, and make setaddrs_from_fd use that

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@9286 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Johan Danielsson
2000-12-06 20:53:01 +00:00
parent b7a49c755a
commit 14aeed4a0c

View File

@@ -129,9 +129,9 @@ krb5_auth_con_setaddrs(krb5_context context,
} }
krb5_error_code krb5_error_code
krb5_auth_con_setaddrs_from_fd (krb5_context context, krb5_auth_con_genaddrs(krb5_context context,
krb5_auth_context auth_context, krb5_auth_context auth_context,
void *p_fd) int infd, int flags)
{ {
int fd = *((int *)p_fd); int fd = *((int *)p_fd);
krb5_error_code ret; krb5_error_code ret;
@@ -142,36 +142,59 @@ krb5_auth_con_setaddrs_from_fd (krb5_context context,
struct sockaddr *remote = (struct sockaddr *)&ss_remote; struct sockaddr *remote = (struct sockaddr *)&ss_remote;
socklen_t len; socklen_t len;
if (auth_context->local_address == NULL) { if(flags & KRB5_AUTH_CONTEXT_GENERATE_LOCAL_ADDR) {
len = sizeof(ss_local); if (auth_context->local_address == NULL) {
if(getsockname(fd, local, &len) < 0) { len = sizeof(ss_local);
ret = errno; if(getsockname(fd, local, &len) < 0) {
goto out; ret = errno;
goto out;
}
krb5_sockaddr2address (local, &local_k_address);
if(flags & KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR) {
krb5_sockaddr2port (local, &auth_context->local_port);
} else
auth_context->local_port = 0;
lptr = &local_k_address;
} }
krb5_sockaddr2address (local, &local_k_address);
krb5_sockaddr2port (local, &auth_context->local_port);
lptr = &local_k_address;
} }
if (auth_context->remote_address == NULL) { if(flags & KRB5_AUTH_CONTEXT_GENERATE_REMOTE_ADDR) {
len = sizeof(ss_remote); len = sizeof(ss_remote);
if(getpeername(fd, remote, &len) < 0) { if(getpeername(fd, remote, &len) < 0) {
ret = errno; ret = errno;
goto out; goto out;
} }
krb5_sockaddr2address (remote, &remote_k_address); krb5_sockaddr2address (remote, &remote_k_address);
krb5_sockaddr2port (remote, &auth_context->remote_port); if(flags & KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR) {
krb5_sockaddr2port (remote, &auth_context->remote_port);
} else
auth_context->remote_port = 0;
rptr = &remote_k_address; rptr = &remote_k_address;
} }
ret = krb5_auth_con_setaddrs (context, ret = krb5_auth_con_setaddrs (context,
auth_context, auth_context,
lptr, lptr,
rptr); rptr);
out: out:
if (lptr) if (lptr)
krb5_free_address (context, lptr); krb5_free_address (context, lptr);
if (rptr) if (rptr)
krb5_free_address (context, rptr); krb5_free_address (context, rptr);
return ret; return ret;
}
krb5_error_code
krb5_auth_con_setaddrs_from_fd (krb5_context context,
krb5_auth_context auth_context,
void *p_fd)
{
int fd = *(int*)p_fd;
int flags = 0;
if(auth_context->local_address == NULL)
flags |= KRB5_AUTH_CONTEXT_GENERATE_LOCAL_FULL_ADDR;
if(auth_context->remote_address == NULL)
flags |= KRB5_AUTH_CONTEXT_GENERATE_REMOTE_FULL_ADDR;
return krb5_auth_con_genaddrs(context, auth_context, fd, flags);
} }
krb5_error_code krb5_error_code