Skip to content

Commit

Permalink
Merge 'v2.3.1'
Browse files Browse the repository at this point in the history
* v2.3.1:
  Release notes for 2.3.1
  Release notes for 2.2.2.2
  Fix permissions bug caused by directly inheriting from All-Projects

Conflicts:
	gerrit-server/src/main/java/com/google/gerrit/server/project/SectionSortCache.java

Change-Id: Ic0282b03cd4736fc33558ecca02dd5e34686ea4a
  • Loading branch information
spearce committed Jun 21, 2012
2 parents 7c1a56f + adadb52 commit fd99f84
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 4 deletions.
24 changes: 24 additions & 0 deletions ReleaseNotes/ReleaseNotes-2.2.2.2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
Release notes for Gerrit 2.2.2.2
================================

Gerrit 2.2.2.2 is now available:

link:http://code.google.com/p/gerrit/downloads/detail?name=gerrit-2.2.2.2.war[http://code.google.com/p/gerrit/downloads/detail?name=gerrit-2.2.2.2.war]

There are no schema changes from 2.2.2, or 2.2.2.1.

However, if upgrading from anything earlier, follow the upgrade
procedure in the 2.2.2 link:ReleaseNotes-2.2.2.html[ReleaseNotes].

Security Fixes
--------------
* Some access control sections may be ignored
+
Gerrit sometimes ignored an access control section in a project
if the exact same section name appeared in All-Projects. The bug
required an unrelated project to have access.inheritFrom set to
All-Projects and be accessed before the project that has the same
section name as All-Projects. This is an unlikely scenario for
most servers, as Gerrit does not normally set inheritFrom equal to
All-Projects. The usual behavior is to not supply this property in
project.config, and permit the implicit inheritence to take place.
24 changes: 24 additions & 0 deletions ReleaseNotes/ReleaseNotes-2.3.1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
Release notes for Gerrit 2.3.1
==============================

Gerrit 2.3.1 is now available:

link:http://code.google.com/p/gerrit/downloads/detail?name=gerrit-2.3.1.war[http://code.google.com/p/gerrit/downloads/detail?name=gerrit-2.3.1.war]

There are no schema changes from 2.3.

However, if upgrading from anything earlier, follow the upgrade
procedure in the 2.3 link:ReleaseNotes-2.3.html[ReleaseNotes].

Security Fixes
--------------
* Some access control sections may be ignored
+
Gerrit sometimes ignored an access control section in a project
if the exact same section name appeared in All-Projects. The bug
required an unrelated project to have access.inheritFrom set to
All-Projects and be accessed before the project that has the same
section name as All-Projects. This is an unlikely scenario for
most servers, as Gerrit does not normally set inheritFrom equal to
All-Projects. The usual behavior is to not supply this property in
project.config, and permit the implicit inheritence to take place.
2 changes: 2 additions & 0 deletions ReleaseNotes/index.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,13 @@ Version 2.4.x
Version 2.3.x
-------------
* link:ReleaseNotes-2.3.html[2.3]
* link:ReleaseNotes-2.3.1.html[2.3.1]

[[2_2]]
Version 2.2.x
-------------
* link:ReleaseNotes-2.2.2.html[2.2.2],
* link:ReleaseNotes-2.2.2.2.html[2.2.2.2],
* link:ReleaseNotes-2.2.2.1.html[2.2.2.1],
* link:ReleaseNotes-2.2.1.html[2.2.1],
* link:ReleaseNotes-2.2.0.html[2.2.0]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,7 @@ List<SectionMatcher> getAllSections() {

List<SectionMatcher> all = new ArrayList<SectionMatcher>();
Set<Project.NameKey> seen = new HashSet<Project.NameKey>();
ProjectState allProjects = projectCache.getAllProjects();
seen.add(getProject().getNameKey());

ProjectState s = this;
Expand All @@ -210,7 +211,9 @@ List<SectionMatcher> getAllSections() {
}
s = projectCache.get(parent);
} while (s != null);
all.addAll(projectCache.getAllProjects().getLocalAccessSections());
if (seen.add(allProjects.getProject().getNameKey())) {
all.addAll(allProjects.getLocalAccessSections());
}
return all;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@
import com.google.inject.TypeLiteral;
import com.google.inject.name.Named;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Arrays;
import java.util.Collections;
import java.util.IdentityHashMap;
Expand All @@ -32,6 +35,9 @@
/** Caches the order AccessSections should be sorted for evaluation. */
@Singleton
public class SectionSortCache {
private static final Logger log =
LoggerFactory.getLogger(SectionSortCache.class);

private static final String CACHE_NAME = "permission_sort";

public static Module module() {
Expand Down Expand Up @@ -73,10 +79,11 @@ void sort(String ref, List<AccessSection> sections) {
}

} else {
boolean poison = false;
IdentityHashMap<AccessSection, Integer> srcMap =
new IdentityHashMap<AccessSection, Integer>();
for (int i = 0; i < cnt; i++) {
srcMap.put(sections.get(i), i);
poison |= srcMap.put(sections.get(i), i) != null;
}

Collections.sort(sections, new MostSpecificComparator(ref));
Expand All @@ -91,7 +98,11 @@ void sort(String ref, List<AccessSection> sections) {
}
}

cache.put(key, new EntryVal(srcIdx));
if (poison) {
log.error("Received duplicate AccessSection instances, not caching sort");
} else {
cache.put(key, new EntryVal(srcIdx));
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,18 @@ public void testInheritRead_SingleBranchDoesNotOverrideInherited() {
u.controlForRef("refs/heads/foobar").canUpload());
}

public void testInheritDuplicateSections() {
grant(parent, READ, admin, "refs/*");
grant(local, READ, devs, "refs/heads/*");
local.getProject().setParentName(parent.getProject().getName());
assertTrue("a can read", user("a", admin).isVisible());

local = new ProjectConfig(new Project.NameKey("local"));
local.createInMemory();
grant(local, READ, devs, "refs/*");
assertTrue("d can read", user("d", devs).isVisible());
}

public void testInheritRead_OverrideWithDeny() {
grant(parent, READ, registered, "refs/*");
grant(local, READ, registered, "refs/*").setDeny();
Expand Down Expand Up @@ -322,7 +334,6 @@ public void setUp() throws Exception {

local = new ProjectConfig(new Project.NameKey("local"));
local.createInMemory();
local.getProject().setParentName(parent.getProject().getName());

sectionSorter =
new PermissionCollection.Factory(
Expand Down

0 comments on commit fd99f84

Please sign in to comment.