Blame SOURCES/libreswan-3.25-1664244-xauth-null-pwd.patch

0a8476
diff -Naur libreswan-3.25-orig/include/chunk.h libreswan-3.25/include/chunk.h
0a8476
--- libreswan-3.25-orig/include/chunk.h	2018-06-27 11:42:26.000000000 -0400
0a8476
+++ libreswan-3.25/include/chunk.h	2018-12-14 13:30:29.269684194 -0500
0a8476
@@ -55,6 +55,9 @@
0a8476
 
0a8476
 chunk_t clone_chunk(chunk_t old, const char *name);
0a8476
 
0a8476
+/* always NUL terminated; NULL is NULL */
0a8476
+char *clone_chunk_as_string(chunk_t chunk, const char *name);
0a8476
+
0a8476
 /* note: the caller must free the result */
0a8476
 char *str_from_chunk(chunk_t c, const char *name);
0a8476
 
0a8476
diff -Naur libreswan-3.25-orig/lib/libswan/chunk.c libreswan-3.25/lib/libswan/chunk.c
0a8476
--- libreswan-3.25-orig/lib/libswan/chunk.c	2018-06-27 11:42:26.000000000 -0400
0a8476
+++ libreswan-3.25/lib/libswan/chunk.c	2018-12-14 13:29:24.077050581 -0500
0a8476
@@ -49,3 +49,16 @@
0a8476
 	s[c.len] = '\0';	/* redundant */
0a8476
 	return s;
0a8476
 }
0a8476
+
0a8476
+char *clone_chunk_as_string(chunk_t chunk, const char *name)
0a8476
+{
0a8476
+	if (chunk.ptr == NULL) {
0a8476
+		return NULL;
0a8476
+	} else if (chunk.len > 0 && chunk.ptr[chunk.len - 1] == '\0') {
0a8476
+		return clone_bytes(chunk.ptr, chunk.len, name);
0a8476
+	} else {
0a8476
+		char *string = alloc_things(char, chunk.len + 1, name);
0a8476
+		memcpy(string, chunk.ptr, chunk.len);
0a8476
+		return string;
0a8476
+	}
0a8476
+}
0a8476
diff -Naur libreswan-3.25-orig/programs/pluto/ikev1_xauth.c libreswan-3.25/programs/pluto/ikev1_xauth.c
0a8476
--- libreswan-3.25-orig/programs/pluto/ikev1_xauth.c	2018-06-27 11:42:26.000000000 -0400
0a8476
+++ libreswan-3.25/programs/pluto/ikev1_xauth.c	2018-12-14 13:29:24.078050590 -0500
0a8476
@@ -1214,8 +1214,8 @@
0a8476
 		return 0;
0a8476
 #endif
0a8476
 
0a8476
-	char *arg_name = str_from_chunk(*name, "XAUTH Name");
0a8476
-	char *arg_password = str_from_chunk(*password, "XAUTH Name");
0a8476
+	char *arg_name = clone_chunk_as_string(*name, "XAUTH Name");
0a8476
+	char *arg_password = clone_chunk_as_string(*password, "XAUTH Name");
0a8476
 
0a8476
 	/*
0a8476
 	 * For XAUTH, we're flipping between retransmitting the packet