3d4d8cf
Fall back to TCP on kdc-unresolvable/unreachable errors.  We still have
3d4d8cf
to wait for UDP to fail, so this might not be ideal.  RT #5868.
3a41ec5
3a41ec5
Index: src/lib/krb5/os/changepw.c
3a41ec5
===================================================================
3a41ec5
--- src/lib/krb5/os/changepw.c	(revision 20199)
3a41ec5
+++ src/lib/krb5/os/changepw.c	(working copy)
3a41ec5
@@ -251,11 +251,22 @@
3a41ec5
 				   NULL,
3a41ec5
 				   NULL
3a41ec5
 		 ))) {
3a41ec5
-
3a41ec5
-	    /*
3a41ec5
-	     * Here we may want to switch to TCP on some errors.
3a41ec5
-	     * right?
3a41ec5
-	     */
3a41ec5
+	    /* if we're not using a stream socket, and it's an error which
3a41ec5
+	     * might reasonably be specific to a datagram "connection", try
3a41ec5
+	     * again with a stream socket */
3a41ec5
+	    if (!useTcp) {
3a41ec5
+		switch (code) {
3a41ec5
+		case KRB5_KDC_UNREACH:
3a41ec5
+		case KRB5_REALM_CANT_RESOLVE:
3a41ec5
+		case KRB5KRB_ERR_RESPONSE_TOO_BIG:
3a41ec5
+		/* should we do this for more result codes than these? */
3a41ec5
+		    krb5int_free_addrlist (&al);
3a41ec5
+		    useTcp = 1;
3a41ec5
+		    continue;
3a41ec5
+		default:
3a41ec5
+		    break;
3a41ec5
+		}
3a41ec5
+	    }
3a41ec5
 	    break;
3a41ec5
 	}
3a41ec5