Blob Blame History Raw
diff -up libsoup-2.56.0/libsoup/soup-auth-negotiate.c.negotiate-connection-close libsoup-2.56.0/libsoup/soup-auth-negotiate.c
--- libsoup-2.56.0/libsoup/soup-auth-negotiate.c.negotiate-connection-close	2017-06-20 14:38:57.074528827 +0200
+++ libsoup-2.56.0/libsoup/soup-auth-negotiate.c	2017-06-20 14:40:02.165257249 +0200
@@ -188,7 +188,29 @@ soup_auth_negotiate_get_connection_autho
 	SoupNegotiateConnectionState *conn = state;
 	char *header = NULL;
 
-	if (conn->state == SOUP_NEGOTIATE_RECEIVED_CHALLENGE) {
+	if (conn->state == SOUP_NEGOTIATE_NEW) {
+		GError *err = NULL;
+
+		if (!check_auth_trusted_uri (auth, msg)) {
+			conn->state = SOUP_NEGOTIATE_FAILED;
+			return NULL;
+		}
+
+		if (!soup_gss_build_response (conn, SOUP_AUTH (auth), &err)) {
+			/* FIXME: report further upward via
+			 * soup_message_get_error_message  */
+			if (conn->initialized)
+				g_warning ("gssapi step failed: %s", err ? err->message : "Unknown error");
+			else
+				g_warning ("gssapi init failed: %s", err ? err->message : "Unknown error");
+			conn->state = SOUP_NEGOTIATE_FAILED;
+			g_clear_error (&err);
+
+			return NULL;
+		}
+	}
+
+	if (conn->response_header) {
 		header = conn->response_header;
 		conn->response_header = NULL;
 		conn->state = SOUP_NEGOTIATE_SENT_RESPONSE;
@@ -251,7 +273,10 @@ soup_auth_negotiate_update_connection (S
 		} else {
 			/* FIXME: report further upward via
 			 * soup_message_get_error_message  */
-			g_warning ("gssapi step failed: %s", err ? err->message : "Unknown error");
+			if (conn->initialized)
+				g_warning ("gssapi step failed: %s", err ? err->message : "Unknown error");
+			else
+				g_warning ("gssapi init failed: %s", err ? err->message : "Unknown error");
 			success = FALSE;
 		}
 	} else if (!strncmp (header, "Negotiate ", 10)) {