Skip to content
Snippets Groups Projects
Commit 3e46884c authored by Patrick Dowler's avatar Patrick Dowler
Browse files

implemented public-attribute-only get option so caller doesn't need permission...

implemented public-attribute-only get option so caller doesn't need permission to get a member group
parent 7fe1b7b0
No related branches found
No related tags found
No related merge requests found
...@@ -112,11 +112,15 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO ...@@ -112,11 +112,15 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO
{ {
private static final Logger logger = Logger.getLogger(LdapGroupDAO.class); private static final Logger logger = Logger.getLogger(LdapGroupDAO.class);
private static String[] GROUP_ATTRS = new String[] private static final String[] PUB_GROUP_ATTRS = new String[]
{
"entrydn", "cn"
};
private static final String[] GROUP_ATTRS = new String[]
{ {
"entrydn", "cn", "nsaccountlock", "owner", "modifytimestamp", "description" "entrydn", "cn", "nsaccountlock", "owner", "modifytimestamp", "description"
}; };
private static String[] GROUP_AND_MEMBER_ATTRS = new String[] private static final String[] GROUP_AND_MEMBER_ATTRS = new String[]
{ {
"entrydn", "cn", "nsaccountlock", "owner", "modifytimestamp", "description", "uniquemember" "entrydn", "cn", "nsaccountlock", "owner", "modifytimestamp", "description", "uniquemember"
}; };
...@@ -399,35 +403,26 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO ...@@ -399,35 +403,26 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO
throws GroupNotFoundException, TransientException, throws GroupNotFoundException, TransientException,
AccessControlException AccessControlException
{ {
return getGroup(groupID, true); Group group = getGroup(getGroupDN(groupID), groupID, GROUP_AND_MEMBER_ATTRS);
}
private Group getGroup(final String groupID, final boolean withMembers)
throws GroupNotFoundException, TransientException,
AccessControlException
{
Group group = getGroup(getGroupDN(groupID), groupID, withMembers);
Group adminGroup = getGroup(getAdminGroupDN(groupID), null, true); Group adminGroup = getGroup(getAdminGroupDN(groupID), null, GROUP_AND_MEMBER_ATTRS);
group.getGroupAdmins().addAll(adminGroup.getGroupMembers()); group.getGroupAdmins().addAll(adminGroup.getGroupMembers());
group.getUserAdmins().addAll(adminGroup.getUserMembers()); group.getUserAdmins().addAll(adminGroup.getUserMembers());
return group; return group;
} }
// groupID is here so eceptions and loggiong have plain groupID instead of DN // groupID is here so exceptions and loggiong have plain groupID instead of DN
private Group getGroup(final DN groupDN, final String xgroupID, final boolean withMembers) private Group getGroup(final DN groupDN, final String xgroupID, String[] attributes)
throws GroupNotFoundException, TransientException, throws GroupNotFoundException, TransientException,
AccessControlException AccessControlException
{ {
logger.debug("getGroup: " + groupDN + " members: " + withMembers); logger.debug("getGroup: " + groupDN + " attrs: " + attributes.length);
String loggableGroupID = xgroupID; String loggableGroupID = xgroupID;
if (loggableGroupID == null) if (loggableGroupID == null)
loggableGroupID = groupDN.toString(); // member or admin group: same name, internal tree loggableGroupID = groupDN.toString(); // member or admin group: same name, internal tree
String[] attributes = GROUP_ATTRS;
if (withMembers)
attributes = GROUP_AND_MEMBER_ATTRS;
try try
{ {
Filter filter = Filter.createNOTFilter(Filter.createPresenceFilter("nsaccountlock")); Filter filter = Filter.createNOTFilter(Filter.createPresenceFilter("nsaccountlock"));
...@@ -450,7 +445,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO ...@@ -450,7 +445,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO
throw new GroupNotFoundException(loggableGroupID); throw new GroupNotFoundException(loggableGroupID);
} }
Group ldapGroup = createGroupFromEntry(searchEntry); Group ldapGroup = createGroupFromEntry(searchEntry, attributes);
if (searchEntry.getAttributeValues("uniquemember") != null) if (searchEntry.getAttributeValues("uniquemember") != null)
{ {
...@@ -475,7 +470,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO ...@@ -475,7 +470,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO
{ {
try try
{ {
ldapGroup.getGroupMembers().add(getGroup(memberDN, null, false)); ldapGroup.getGroupMembers().add(getGroup(memberDN, null, PUB_GROUP_ATTRS));
} }
catch(GroupNotFoundException e) catch(GroupNotFoundException e)
{ {
...@@ -673,7 +668,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO ...@@ -673,7 +668,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO
throws GroupNotFoundException, TransientException, throws GroupNotFoundException, TransientException,
AccessControlException AccessControlException
{ {
Group group = getGroup(groupDN, groupID, true); Group group = getGroup(groupDN, groupID, GROUP_AND_MEMBER_ATTRS);
List<Modification> modifs = new ArrayList<Modification>(); List<Modification> modifs = new ArrayList<Modification>();
modifs.add(new Modification(ModificationType.ADD, "nsaccountlock", "true")); modifs.add(new Modification(ModificationType.ADD, "nsaccountlock", "true"));
...@@ -711,7 +706,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO ...@@ -711,7 +706,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO
try try
{ {
getGroup(getGroupDN(group.getID()), null, false); getGroup(getGroupDN(group.getID()), null, GROUP_ATTRS);
throw new RuntimeException("BUG: group not deleted " + group.getID()); throw new RuntimeException("BUG: group not deleted " + group.getID());
} }
catch (GroupNotFoundException ignore) { } catch (GroupNotFoundException ignore) { }
...@@ -778,7 +773,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO ...@@ -778,7 +773,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO
} }
try try
{ {
Group g = getGroup(groupDN, null, false); Group g = getGroup(groupDN, null, GROUP_ATTRS);
logger.debug("found group: " + g.getID()); logger.debug("found group: " + g.getID());
ret.add(g); ret.add(g);
} }
...@@ -831,7 +826,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO ...@@ -831,7 +826,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO
SearchResult results = getConnection().search(searchRequest); SearchResult results = getConnection().search(searchRequest);
for (SearchResultEntry result : results.getSearchEntries()) for (SearchResultEntry result : results.getSearchEntries())
{ {
ret.add(createGroupFromEntry(result)); ret.add(createGroupFromEntry(result, GROUP_ATTRS));
} }
} }
catch (LDAPException e1) catch (LDAPException e1)
...@@ -842,15 +837,19 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO ...@@ -842,15 +837,19 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO
return ret; return ret;
} }
private Group createGroupFromEntry(SearchResultEntry result) private Group createGroupFromEntry(SearchResultEntry result, String[] attributes)
throws LDAPException throws LDAPException
{ {
if (result.getAttribute("nsaccountlock") != null) if (result.getAttribute("nsaccountlock") != null)
{ {
throw new RuntimeException("BUG: found group with nsaccountlock set: " + result.getAttributeValue("entrydn").toString()); throw new RuntimeException("BUG: found group with nsaccountlock set: " + result.getAttributeValue("entrydn").toString());
} }
String entryDN = result.getAttributeValue("entrydn"); String entryDN = result.getAttributeValue("entrydn");
String groupName = result.getAttributeValue("cn"); String groupName = result.getAttributeValue("cn");
if (attributes == PUB_GROUP_ATTRS)
return new Group(groupName);
DN ownerDN = result.getAttributeValueAsDN("owner"); DN ownerDN = result.getAttributeValueAsDN("owner");
if (ownerDN == null) if (ownerDN == null)
throw new AccessControlException(groupName); throw new AccessControlException(groupName);
...@@ -973,7 +972,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO ...@@ -973,7 +972,7 @@ public class LdapGroupDAO<T extends Principal> extends LdapDAO
{ {
try try
{ {
Group g = getGroup(groupID, false); Group g = getGroup(getGroupDN(groupID), groupID, GROUP_ATTRS);
return true; return true;
} }
catch(GroupNotFoundException ex) catch(GroupNotFoundException ex)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment