Skip to content

Commit 7bfba8c

Browse files
swaatiTelusdesouzas
authored andcommitted
ZBUG-2619:Incorrect Member format in Dynamic DL
1 parent d117656 commit 7bfba8c

File tree

3 files changed

+51
-41
lines changed

3 files changed

+51
-41
lines changed

store/src/java/com/zimbra/cs/account/soap/SoapDistributionList.java

Lines changed: 5 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ class SoapDistributionList extends DistributionList implements SoapEntry {
5252
super(dlInfo.getName(), dlInfo.getId(),
5353
new HashMap<String,Object>(), prov);
5454
// DistributionListMembershipInfo does not supply membership info
55-
resetDlm(getRawAttrs());
55+
addDlm(new ArrayList<String>(), getRawAttrs());
5656
}
5757

5858
SoapDistributionList(DistributionListInfo dlInfo, Provisioning prov)
@@ -72,7 +72,7 @@ class SoapDistributionList extends DistributionList implements SoapEntry {
7272
attrs.put(Provisioning.A_zimbraId, dlInfo.getId());
7373

7474
// DLInfo does not supply membership info
75-
resetDlm(getRawAttrs());
75+
addDlm(new ArrayList<String>(), getRawAttrs());
7676
}
7777

7878
SoapDistributionList(Element e, Provisioning prov) throws ServiceException {
@@ -81,30 +81,10 @@ class SoapDistributionList extends DistributionList implements SoapEntry {
8181
SoapProvisioning.getAttrs(e), prov);
8282
addDlm(e, getRawAttrs());
8383
}
84-
85-
/**
86-
* ZBUG-651: This method is modified as it is overriding the existing member/s value with zero
87-
* against zimbraMailForwardingAddress attribute.
88-
* So now checking if members list is zero than it should not override.
89-
* @param members This is list of members
90-
* @param attrs This is list of attribute
91-
* @return nothing
92-
*/
84+
9385
private void addDlm(List <String> members, Map<String, Object> attrs) {
94-
if (members.size() > 0) {
95-
attrs.put(Provisioning.A_zimbraMailForwardingAddress,
86+
attrs.put(Provisioning.A_zimbraMailForwardingAddress,
9687
members.toArray(new String[members.size()]));
97-
}
98-
}
99-
100-
/**
101-
* ZBUG-651: This method is added against the change in addDlm(), which provides blank list of members.
102-
* @param attrs to put/override attribute with blank member list.
103-
* @return nothing
104-
*/
105-
private void resetDlm(Map<String, Object> attrs) {
106-
attrs.put(Provisioning.A_zimbraMailForwardingAddress,
107-
new String[0]);
10888
}
10989

11090
private void addDlm(Element e, Map<String, Object> attrs) {
@@ -136,4 +116,4 @@ public void reload(SoapProvisioning prov) throws ServiceException {
136116
addDlm(dl, attrs);
137117
setAttrs(attrs);
138118
}
139-
}
119+
}

store/src/java/com/zimbra/cs/account/soap/SoapDynamicGroup.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ public String[] getAllMembers() throws ServiceException {
8383
if (membersList == null) {
8484
return new String[0];
8585
} else {
86-
return getMultiAttr(Provisioning.A_member);
86+
return membersList.toArray(new String[membersList.size()]);
8787
}
8888
}
8989

store/src/java/com/zimbra/cs/service/admin/GetAllDistributionLists.java

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,20 @@
1717

1818
package com.zimbra.cs.service.admin;
1919

20+
import java.util.Arrays;
2021
import java.util.Iterator;
2122
import java.util.List;
2223
import java.util.Map;
2324

2425
import com.zimbra.common.account.Key;
25-
import com.zimbra.common.account.Key.DomainBy;
2626
import com.zimbra.common.service.ServiceException;
2727
import com.zimbra.common.soap.AdminConstants;
2828
import com.zimbra.common.soap.Element;
29+
import com.zimbra.cs.account.AccessManager.AttrRightChecker;
2930
import com.zimbra.cs.account.AccountServiceException;
3031
import com.zimbra.cs.account.DistributionList;
3132
import com.zimbra.cs.account.Domain;
33+
import com.zimbra.cs.account.DynamicGroup;
3234
import com.zimbra.cs.account.Group;
3335
import com.zimbra.cs.account.Provisioning;
3436
import com.zimbra.cs.account.accesscontrol.AdminRight;
@@ -48,7 +50,7 @@ public boolean domainAuthSufficient(Map context) {
4850
}
4951

5052
public Element handle(Element request, Map<String, Object> context) throws ServiceException {
51-
53+
5254
ZimbraSoapContext zsc = getZimbraSoapContext(context);
5355
Provisioning prov = Provisioning.getInstance();
5456

@@ -69,7 +71,7 @@ public Element handle(Element request, Map<String, Object> context) throws Servi
6971
throw ServiceException.INVALID_REQUEST("unknown value for by: "+key, null);
7072
}
7173
if (domain == null)
72-
throw AccountServiceException.NO_SUCH_DOMAIN(value);
74+
throw AccountServiceException.NO_SUCH_DOMAIN(value);
7375
}
7476

7577
if (isDomainAdminOnly(zsc)) {
@@ -79,40 +81,68 @@ public Element handle(Element request, Map<String, Object> context) throws Servi
7981
domain = getAuthTokenAccountDomain(zsc);
8082
}
8183

82-
AdminAccessControl aac = AdminAccessControl.getAdminAccessControl(zsc);
83-
8484
if (domain != null) {
8585
response = zsc.createElement(AdminConstants.GET_ALL_DISTRIBUTION_LISTS_RESPONSE);
86-
doDomain(zsc, response, domain, aac);
86+
doDomain(zsc, response, domain);
8787
} else {
8888
response = zsc.createElement(AdminConstants.GET_ALL_DISTRIBUTION_LISTS_RESPONSE);
8989
List domains = prov.getAllDomains();
9090
for (Iterator dit=domains.iterator(); dit.hasNext(); ) {
9191
Domain dm = (Domain) dit.next();
92-
doDomain(zsc, response, dm, aac);
92+
doDomain(zsc, response, dm);
9393
}
9494
}
95-
return response;
95+
return response;
9696
}
97-
98-
private void doDomain(ZimbraSoapContext zsc, Element e, Domain d, AdminAccessControl aac) throws ServiceException {
97+
98+
private void doDomain(ZimbraSoapContext zsc, Element e, Domain d) throws ServiceException {
9999
List dls = Provisioning.getInstance().getAllGroups(d);
100+
Element eDL = null;
101+
AdminAccessControl aac = null;
102+
AttrRightChecker arc = null;
100103
for (Iterator it = dls.iterator(); it.hasNext(); ) {
101104
Group dl = (Group) it.next();
102105
boolean hasRightToList = true;
106+
boolean allowMembers = true;
107+
103108
if (dl.isDynamic()) {
104-
// TODO: fix me
109+
aac = checkDynamicGroupRight(zsc, (DynamicGroup) dl, AdminRight.PR_ALWAYS_ALLOW);
110+
arc = aac.getAttrRightChecker(dl);
105111
hasRightToList = true;
112+
allowMembers = arc == null ? true : arc.allowAttr(Provisioning.A_member);
106113
} else {
114+
aac = checkDistributionListRight(zsc,
115+
(DistributionList) dl, AdminRight.PR_ALWAYS_ALLOW);
116+
arc = aac.getAttrRightChecker(dl);
117+
allowMembers = arc == null ? true : arc.allowAttr(Provisioning.A_zimbraMailForwardingAddress);
107118
hasRightToList = aac.hasRightsToList(dl, Admin.R_listDistributionList, null);
108119
}
109-
110120
if (hasRightToList) {
111-
GetDistributionList.encodeDistributionList(e, dl, false, false, null, aac.getAttrRightChecker(dl));
121+
eDL = GetDistributionList.encodeDistributionList(e, dl, true, false, null, arc);
122+
}
123+
if (allowMembers) {
124+
encodeMembers(e, eDL, dl);
112125
}
113-
}
126+
}
114127
}
115-
128+
129+
private void encodeMembers(Element response, Element dlElement, Group group)
130+
throws ServiceException {
131+
String[] members;
132+
if (group instanceof DynamicGroup) {
133+
members = ((DynamicGroup)group).getAllMembers(true);
134+
} else {
135+
members = group.getAllMembers();
136+
}
137+
138+
Arrays.sort(members);
139+
for (int i = 0; i < members.length; i++) {
140+
dlElement.addElement(AdminConstants.E_DLM).setText(members[i]);
141+
}
142+
143+
response.addAttribute(AdminConstants.A_TOTAL, members.length);
144+
}
145+
116146
@Override
117147
public void docRights(List<AdminRight> relatedRights, List<String> notes) {
118148
relatedRights.add(Admin.R_listDistributionList);

0 commit comments

Comments
 (0)