kpasswd over firewall ans TCP
Meike Stone
meike.stone at googlemail.com
Thu May 7 12:02:14 EDT 2015
Oh thanks Greg,
2015-05-07 17:44 GMT+02:00 Greg Hudson <ghudson at mit.edu>:
> On 05/06/2015 12:35 PM, Meike Stone wrote:
>> The Client is KfW 4.0.1 32bit. The kpasswd Server is AD W2k8, udp and
>> tcp (port 464) on the Server are open.
>> On the firewall is a proxy firewall with a rule for port TCP 464.
>>
>> If I start kpasswd, I get at first a few port 88 (preauth) the I only
>> see a UDP package port 464, no tries for TCP:
>
> Thanks for the additional details.
>
> On a closer look, it appears that krb5 1.12 and prior try password
> changes with UDP only, and only retry with TCP if on a
> KRB5KRB_ERR_RESPONSE_TOO_BIG error (which is very unlikely to happen).
> krb5 1.13 tries both UDP and TCP, and switches to TCP-only on a too-big
> error. udp_preference_limit doesn't affect password changes in any
> version; it only applies to messages sent to a KDC.
That information helps me a lot! That can solve my problems!
>
> KfW 4.0 is based on krb5 1.10. The forthcoming KfW 4.1 will be based on
> krb5 1.13 and should fix this problem. Since you are looking at the
> source code, here is a simple patch against 1.10 which would make it
> behave like 1.13 in this respect:
ok, thanks!
>
> diff --git a/src/lib/krb5/os/changepw.c b/src/lib/krb5/os/changepw.c
> index 4ad8f32..57bd056 100644
> --- a/src/lib/krb5/os/changepw.c
> +++ b/src/lib/krb5/os/changepw.c
> @@ -256,7 +256,9 @@ change_set_password(krb5_context context,
> callback_ctx.local_seq_num =
> callback_ctx.auth_context->local_seq_number;
>
> do {
> - int socktype = (use_tcp ? SOCK_STREAM : SOCK_DGRAM);
> + int socktype = (use_tcp ? SOCK_STREAM : 0);
> + int socktype1 = (use_tcp ? SOCK_STREAM : SOCK_DGRAM);
> + int socktype2 = (use_tcp ? 0 : SOCK_STREAM);
> if ((code = locate_kpasswd(callback_ctx.context,
> krb5_princ_realm(callback_ctx.context,
> creds->server),
> @@ -270,7 +272,7 @@ change_set_password(krb5_context context,
> callback_info.pfn_cleanup = kpasswd_sendto_msg_cleanup;
> krb5_free_data_contents(callback_ctx.context, &chpw_rep);
>
> - code = k5_sendto(callback_ctx.context, NULL, &sl, socktype, 0,
> + code = k5_sendto(callback_ctx.context, NULL, &sl, socktype1,
> socktype2,
> &callback_info, &chpw_rep, ss2sa(&remote_addr),
> &addrlen, NULL, NULL, NULL);
> if (code) {
More information about the Kerberos
mailing list