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 | ||||
| Version: 1.16 | ||||
| # 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 | ||||
| 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 | ||||
| Patch67: Return-UPN-SANs-as-strings.patch | ||||
| Patch68: Restrict-pre-authentication-fallback-cases.patch | ||||
| Patch69: Merge-duplicate-subsections-in-profile-library.patch | ||||
| 
 | ||||
| License: MIT | ||||
| URL: http://web.mit.edu/kerberos/www/ | ||||
| @ -742,6 +743,9 @@ exit 0 | ||||
| %{_libdir}/libkadm5srv_mit.so.* | ||||
| 
 | ||||
| %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 | ||||
| - Restrict pre-authentication fallback cases | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user