Merge duplicate subsections in profile library
This commit is contained in:
parent
492b9109aa
commit
a48c97c32b
122
Merge-duplicate-subsections-in-profile-library.patch
Normal file
122
Merge-duplicate-subsections-in-profile-library.patch
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
From 77ece30d3df5b119a74f7fe9e2c0a4c693194917 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Robbie Harwood <rharwood@redhat.com>
|
||||||
|
Date: Tue, 10 Apr 2018 15:55:41 -0400
|
||||||
|
Subject: [PATCH] Merge duplicate subsections in profile library
|
||||||
|
|
||||||
|
Modify profile_add_node() to return the existing node, rather than
|
||||||
|
making a new one, when adding subsection configuration.
|
||||||
|
|
||||||
|
This fixes an issue where the first instance of a subsection will hide
|
||||||
|
the second instance entirely. In particular, it was previously
|
||||||
|
impossible to split realm-specific configuration across multiple
|
||||||
|
config files.
|
||||||
|
|
||||||
|
[ghudson@mit.edu: adjusted style, added test case]
|
||||||
|
|
||||||
|
ticket: 7863
|
||||||
|
tags: pullup
|
||||||
|
target_version: 1.16-next
|
||||||
|
target_version: 1.15-next
|
||||||
|
|
||||||
|
(cherry picked from commit efab9fa5a6d23c486467264e20b58bf5a9c60f0c)
|
||||||
|
---
|
||||||
|
src/util/profile/prof_test1 | 22 ++++++++++++++++++++++
|
||||||
|
src/util/profile/prof_tree.c | 15 +++++++++++----
|
||||||
|
src/util/profile/test.ini | 6 ++++++
|
||||||
|
3 files changed, 39 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/util/profile/prof_test1 b/src/util/profile/prof_test1
|
||||||
|
index 7e30fc12f..7d13c9389 100644
|
||||||
|
--- a/src/util/profile/prof_test1
|
||||||
|
+++ b/src/util/profile/prof_test1
|
||||||
|
@@ -341,6 +341,27 @@ proc test9 {} {
|
||||||
|
puts "OK: test9: profile_flush_to_file with no changes"
|
||||||
|
}
|
||||||
|
|
||||||
|
+proc test10 {} {
|
||||||
|
+ global wd verbose
|
||||||
|
+
|
||||||
|
+ # Regression test for #7863: multiply-specified subsections should
|
||||||
|
+ # be merged.
|
||||||
|
+ set p [profile_init_path $wd/test2.ini]
|
||||||
|
+ set x [profile_get_values $p {{test section 2} child_section2 child}]
|
||||||
|
+ if $verbose { puts "Read $x from profile" }
|
||||||
|
+ if ![string equal $x "slick harry {john\tb } ron"] {
|
||||||
|
+ puts stderr "Error: test10: Did not get expected merged children."
|
||||||
|
+ exit 1
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ set x [profile_get_string $p {test section 2} child_section2 chores]
|
||||||
|
+ if $verbose { puts "Read $x from profile" }
|
||||||
|
+ if ![string equal $x "cleaning"] {
|
||||||
|
+ puts stderr "Error: test10: Did not find expected chores."
|
||||||
|
+ exit 1
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
test1
|
||||||
|
test2
|
||||||
|
test3
|
||||||
|
@@ -350,5 +371,6 @@ test6
|
||||||
|
test7
|
||||||
|
test8
|
||||||
|
test9
|
||||||
|
+test10
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
diff --git a/src/util/profile/prof_tree.c b/src/util/profile/prof_tree.c
|
||||||
|
index 081f688e4..38aadc4e5 100644
|
||||||
|
--- a/src/util/profile/prof_tree.c
|
||||||
|
+++ b/src/util/profile/prof_tree.c
|
||||||
|
@@ -9,7 +9,7 @@
|
||||||
|
*
|
||||||
|
* Each node may represent either a relation or a section header.
|
||||||
|
*
|
||||||
|
- * A section header must have its value field set to 0, and may a one
|
||||||
|
+ * A section header must have its value field be null, and may have one
|
||||||
|
* or more child nodes, pointed to by first_child.
|
||||||
|
*
|
||||||
|
* A relation has as its value a pointer to allocated memory
|
||||||
|
@@ -159,15 +159,22 @@ errcode_t profile_add_node(struct profile_node *section, const char *name,
|
||||||
|
return PROF_ADD_NOT_SECTION;
|
||||||
|
|
||||||
|
/*
|
||||||
|
- * Find the place to insert the new node. We look for the
|
||||||
|
- * place *after* the last match of the node name, since
|
||||||
|
+ * Find the place to insert the new node. If we are adding a subsection
|
||||||
|
+ * and already have a subsection with that name, merge them. Otherwise,
|
||||||
|
+ * we look for the place *after* the last match of the node name, since
|
||||||
|
* order matters.
|
||||||
|
*/
|
||||||
|
for (p=section->first_child, last = 0; p; last = p, p = p->next) {
|
||||||
|
int cmp;
|
||||||
|
cmp = strcmp(p->name, name);
|
||||||
|
- if (cmp > 0)
|
||||||
|
+ if (cmp > 0) {
|
||||||
|
break;
|
||||||
|
+ } else if (value == NULL && cmp == 0 &&
|
||||||
|
+ p->value == NULL && p->deleted != 1) {
|
||||||
|
+ /* Found duplicate subsection, so don't make a new one. */
|
||||||
|
+ *ret_node = p;
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
retval = profile_create_node(name, value, &new);
|
||||||
|
if (retval)
|
||||||
|
diff --git a/src/util/profile/test.ini b/src/util/profile/test.ini
|
||||||
|
index 23ca89677..6622df108 100644
|
||||||
|
--- a/src/util/profile/test.ini
|
||||||
|
+++ b/src/util/profile/test.ini
|
||||||
|
@@ -10,6 +10,12 @@ this is a comment. Everything up to the first square brace is ignored.
|
||||||
|
}
|
||||||
|
child_section2 = foo
|
||||||
|
|
||||||
|
+[test section 2]
|
||||||
|
+ child_section2 = {
|
||||||
|
+ child = ron
|
||||||
|
+ chores = cleaning
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
[realms]
|
||||||
|
ATHENA.MIT.EDU = {
|
||||||
|
server = KERBEROS.MIT.EDU:88
|
@ -18,7 +18,7 @@ Summary: The Kerberos network authentication system
|
|||||||
Name: krb5
|
Name: krb5
|
||||||
Version: 1.16
|
Version: 1.16
|
||||||
# for prerelease, should be e.g., 0.% {prerelease}.1% { ?dist } (without spaces)
|
# for prerelease, should be e.g., 0.% {prerelease}.1% { ?dist } (without spaces)
|
||||||
Release: 21%{?dist}
|
Release: 22%{?dist}
|
||||||
|
|
||||||
# lookaside-cached sources; two downloads and a build artifact
|
# lookaside-cached sources; two downloads and a build artifact
|
||||||
Source0: https://web.mit.edu/kerberos/dist/krb5/1.16/krb5-%{version}%{prerelease}.tar.gz
|
Source0: https://web.mit.edu/kerberos/dist/krb5/1.16/krb5-%{version}%{prerelease}.tar.gz
|
||||||
@ -92,6 +92,7 @@ Patch65: Be-more-careful-asking-for-AS-key-in-SPAKE-client.patch
|
|||||||
Patch66: Save-SANs-separately-and-unparse-them-with-NO_REALM.patch
|
Patch66: Save-SANs-separately-and-unparse-them-with-NO_REALM.patch
|
||||||
Patch67: Return-UPN-SANs-as-strings.patch
|
Patch67: Return-UPN-SANs-as-strings.patch
|
||||||
Patch68: Restrict-pre-authentication-fallback-cases.patch
|
Patch68: Restrict-pre-authentication-fallback-cases.patch
|
||||||
|
Patch69: Merge-duplicate-subsections-in-profile-library.patch
|
||||||
|
|
||||||
License: MIT
|
License: MIT
|
||||||
URL: http://web.mit.edu/kerberos/www/
|
URL: http://web.mit.edu/kerberos/www/
|
||||||
@ -742,6 +743,9 @@ exit 0
|
|||||||
%{_libdir}/libkadm5srv_mit.so.*
|
%{_libdir}/libkadm5srv_mit.so.*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Apr 17 2018 Robbie Harwood <rharwood@redhat.com> - 1.16-22
|
||||||
|
- Merge duplicate subsections in profile library
|
||||||
|
|
||||||
* Mon Apr 09 2018 Robbie Harwood <rharwood@redhat.com> - 1.16-21
|
* Mon Apr 09 2018 Robbie Harwood <rharwood@redhat.com> - 1.16-21
|
||||||
- Restrict pre-authentication fallback cases
|
- Restrict pre-authentication fallback cases
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user