KDC HA Failure with krb5-1.9.1 and pam-krb5 4.4

Nalin Dahyabhai nalin at redhat.com
Fri Nov 18 18:32:09 EST 2011


On Fri, Nov 18, 2011 at 05:41:44PM -0500, Tom Parker wrote:
> Thanks for your quick reply.  I have attached my results below.  When 
> one of my KDCs is down the client kinit fails with: kinit: 
> sendto_kdc.c:617: cm_get_ssflags: Assertion `i < selstate->nfds' failed.

That looks like a bug that we ran into when the send-to-kdc code was
reworked to use poll() (RT#6905) and we pulled it from trunk to add to
our 1.9 and 1.9.1 binary packages.  The fix was RT#6951.  We ran into
another case, too, but by then that part of the library had been
reworked again so that trunk didn't need the fix, so I didn't open a
ticket for it.  I'll append the patch for it below.

HTH,

Nalin

If we exit the transmit loop cleanly, don't overestimate the size of the
connections array.  This bug appears to have been removed upstream when
this function was rewritten in trunk, and the select()-based implementation
is still what's in 1.9, so this patch has nowhere to go.
--- krb5-1.9.1/src/lib/krb5/os/sendto_kdc.c	2011-09-28 14:54:20.560811664 -0400
+++ krb5-1.9.1/src/lib/krb5/os/sendto_kdc.c	2011-09-28 14:54:11.396812292 -0400
@@ -1317,7 +1319,10 @@ krb5int_sendto (krb5_context context, co
            call with the last one from the above loop, if the loop
            actually calls select.  */
         sel_state->end_time.tv_sec += delay_this_pass;
-        e = service_fds(context, sel_state, conns, host+1, &winning_conn,
+        i = host+1;
+        if (i > n_conns)
+            i = n_conns;
+        e = service_fds(context, sel_state, conns, i, &winning_conn,
                         sel_state+1, msg_handler, msg_handler_data);
         if (e)
             break;



More information about the Kerberos mailing list