From 8ca88042f0f4dae9f0207ec5de3074f26a2ef9cb Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Wed, 16 Dec 2009 16:06:55 +0100 Subject: s4-gensec: Replace gensec_get_my_addr with new tsocket based fn. --- source4/auth/gensec/gensec_krb5.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'source4/auth/gensec/gensec_krb5.c') diff --git a/source4/auth/gensec/gensec_krb5.c b/source4/auth/gensec/gensec_krb5.c index ee5f9c3c37..ff26018ae2 100644 --- a/source4/auth/gensec/gensec_krb5.c +++ b/source4/auth/gensec/gensec_krb5.c @@ -28,6 +28,7 @@ #include "auth/kerberos/kerberos.h" #include "auth/auth.h" #include "lib/socket/socket.h" +#include "lib/tsocket/tsocket.h" #include "librpc/rpc/dcerpc.h" #include "auth/credentials/credentials.h" #include "auth/gensec/gensec.h" @@ -89,7 +90,8 @@ static NTSTATUS gensec_krb5_start(struct gensec_security *gensec_security, bool krb5_error_code ret; struct gensec_krb5_state *gensec_krb5_state; struct cli_credentials *creds; - const struct socket_address *my_addr, *peer_addr; + const struct socket_address *peer_addr; + const struct tsocket_address *tlocal_addr; krb5_address my_krb5_addr, peer_krb5_addr; creds = gensec_get_credentials(gensec_security); @@ -141,10 +143,19 @@ static NTSTATUS gensec_krb5_start(struct gensec_security *gensec_security, bool return NT_STATUS_INTERNAL_ERROR; } - my_addr = gensec_get_my_addr(gensec_security); - if (my_addr && my_addr->sockaddr) { - ret = krb5_sockaddr2address(gensec_krb5_state->smb_krb5_context->krb5_context, - my_addr->sockaddr, &my_krb5_addr); + tlocal_addr = gensec_get_local_address(gensec_security); + if (tlocal_addr) { + ssize_t socklen; + struct sockaddr_storage ss; + + socklen = tsocket_address_bsd_sockaddr(tlocal_addr, + (struct sockaddr *) &ss, + sizeof(struct sockaddr_storage)); + if (socklen < 0) { + return NT_STATUS_INTERNAL_ERROR; + } + ret = krb5_sockaddr2address(gensec_krb5_state->smb_krb5_context->krb5_context, + (const struct sockaddr *) &ss, &my_krb5_addr); if (ret) { DEBUG(1,("gensec_krb5_start: krb5_sockaddr2address (local) failed (%s)\n", smb_get_krb5_error_message(gensec_krb5_state->smb_krb5_context->krb5_context, @@ -169,7 +180,7 @@ static NTSTATUS gensec_krb5_start(struct gensec_security *gensec_security, bool ret = krb5_auth_con_setaddrs(gensec_krb5_state->smb_krb5_context->krb5_context, gensec_krb5_state->auth_context, - my_addr ? &my_krb5_addr : NULL, + tlocal_addr ? &my_krb5_addr : NULL, peer_addr ? &peer_krb5_addr : NULL); if (ret) { DEBUG(1,("gensec_krb5_start: krb5_auth_con_setaddrs failed (%s)\n", -- cgit