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:
@@ -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
|
||||||
|
Reference in New Issue
Block a user