Search in sources :

Example 26 with LdapEntry

use of com.zimbra.cs.account.ldap.entry.LdapEntry in project zm-mailbox by Zimbra.

the class LdapProvisioning method createAddressList.

@Override
public String createAddressList(Domain domain, String name, String desc, Map<String, Object> attrs) throws ServiceException {
    String domainDn = ((LdapEntry) domain).getDN();
    Set<String> oc = new HashSet<String>();
    oc.add(AttributeClass.OC_zimbraAddressList);
    ZMutableEntry entry = LdapClient.createMutableEntry();
    if (attrs != null && attrs.size() > 0) {
        entry.mapToAttrs(attrs);
    }
    entry.addAttr(A_objectClass, oc);
    String zimbraIdStr = LdapUtil.generateUUID();
    entry.setAttr(A_zimbraId, zimbraIdStr);
    entry.setAttr(Provisioning.A_uid, name);
    if (!StringUtil.isNullOrEmpty(desc)) {
        entry.setAttr(Provisioning.A_description, desc);
    }
    entry.setAttr(Provisioning.A_zimbraIsAddressListActive, "TRUE");
    String dn = LdapConstants.ATTR_uid + "=" + name + "," + LdapConstants.ATTR_ou + "=" + LdapConstants.PEOPLE + "," + domainDn;
    ZimbraLog.addresslist.debug("Entry DN: %s", dn);
    entry.setDN(dn);
    ZLdapContext zlc = null;
    try {
        zlc = LdapClient.getContext(LdapServerType.MASTER, LdapUsage.CREATE_ADDRESS_LIST);
        zlc.createEntry(entry);
    } catch (ServiceException se) {
        ZimbraLog.addresslist.debug("Exception occured while creating addresslist in ldap: %s", se.getMessage());
        throw se;
    } finally {
        LdapClient.closeContext(zlc);
    }
    return zimbraIdStr;
}
Also used : ZMutableEntry(com.zimbra.cs.ldap.ZMutableEntry) ZLdapContext(com.zimbra.cs.ldap.ZLdapContext) AccountServiceException(com.zimbra.cs.account.AccountServiceException) AuthFailedServiceException(com.zimbra.cs.account.AccountServiceException.AuthFailedServiceException) ServiceException(com.zimbra.common.service.ServiceException) LdapEntry(com.zimbra.cs.account.ldap.entry.LdapEntry) HashSet(java.util.HashSet)

Example 27 with LdapEntry

use of com.zimbra.cs.account.ldap.entry.LdapEntry in project zm-mailbox by Zimbra.

the class TestProvAlias method testRemoveAlias_entryExist_aliasExist_aliasPointToOtherEntry.

// 
// A - alias points to other existing entry
// 
@Test
public void testRemoveAlias_entryExist_aliasExist_aliasPointToOtherEntry() throws Exception {
    String testName = getTestName();
    // create the domain
    String domainName = "EE-AE-aliasPointToOtherEntry" + "." + BASE_DOMAIN_NAME;
    domainName = domainName.toLowerCase();
    Map<String, Object> attrs = new HashMap<String, Object>();
    attrs.put(Provisioning.A_zimbraDomainType, Provisioning.DomainType.local.name());
    Domain domain = prov.createDomain(domainName, attrs);
    // create the account the alias points to
    String acctName = getEmail("acct-1", domainName);
    Account acct = prov.createAccount(acctName, PASSWORD, new HashMap<String, Object>());
    // add an alias to the account
    String aliasName = getEmail("alias-1", domainName);
    prov.addAlias(acct, aliasName);
    // create 2 DLs
    String dl1Name = getEmail("dl-1", domainName);
    DistributionList dl1 = prov.createDistributionList(dl1Name, new HashMap<String, Object>());
    String dl2Name = getEmail("dl-2", domainName);
    DistributionList dl2 = prov.createDistributionList(dl2Name, new HashMap<String, Object>());
    // add the alias to the two DLs
    prov.addMembers(dl1, new String[] { aliasName });
    prov.addMembers(dl2, new String[] { aliasName });
    // create another account
    String otherAcctName = getEmail("acct-other", domainName);
    Account otherAcct = prov.createAccount(otherAcctName, PASSWORD, new HashMap<String, Object>());
    // and hack the other account to also contain the alias in it's mail/zimbraMailAlias attrs
    // the hacked attrs should be removed after the removeAlais call
    {
        Map<String, Object> attributes = new HashMap<String, Object>();
        // can no long do this, we now have an unique constraint on mail
        // attributes.put(Provisioning.A_mail, aliasName);
        attributes.put(Provisioning.A_zimbraMailAlias, aliasName);
        LdapEntry ldapAccount = (LdapEntry) otherAcct;
        ((LdapProv) prov).getHelper().modifyEntry(ldapAccount.getDN(), attributes, (Entry) ldapAccount, LdapUsage.UNITTEST);
        // make sure the attrs did get hacked in
        prov.reload(otherAcct);
        Set<String> values;
        // values = otherAcct.getMultiAttrSet(Provisioning.A_mail);
        // assertTrue(values.contains(aliasName));
        values = otherAcct.getMultiAttrSet(Provisioning.A_zimbraMailAlias);
        assertTrue(values.contains(aliasName));
    }
    // remove the alias, on the "other" account, which is *not* the target for the alias we are removing
    // ensure we *do* get a NO_SUCH_ALIAS exception
    boolean good = false;
    try {
        prov.removeAlias(otherAcct, aliasName);
    } catch (ServiceException e) {
        assertEquals(e.getCode(), (AccountServiceException.NO_SUCH_ALIAS));
        good = true;
    }
    assertTrue(good);
    // reload all entries
    prov.reload(acct);
    prov.reload(otherAcct);
    prov.reload(dl1);
    prov.reload(dl2);
    Set<String> values;
    // ensure the alias is still on the account
    values = acct.getMultiAttrSet(Provisioning.A_mail);
    assertTrue(values.contains(aliasName));
    values = acct.getMultiAttrSet(Provisioning.A_zimbraMailAlias);
    assertTrue(values.contains(aliasName));
    // ensure the hacked in attrs are removed from the other account
    values = otherAcct.getMultiAttrSet(Provisioning.A_mail);
    assertFalse(values.contains(aliasName));
    values = otherAcct.getMultiAttrSet(Provisioning.A_zimbraMailAlias);
    assertFalse(values.contains(aliasName));
    // ensure the alias is *not* removed from any the DLs
    values = dl1.getMultiAttrSet(Provisioning.A_zimbraMailForwardingAddress);
    assertTrue(values.contains(aliasName));
    values = dl2.getMultiAttrSet(Provisioning.A_zimbraMailForwardingAddress);
    assertTrue(values.contains(aliasName));
    // ensure the alias entry is *not* removed
    List<NamedEntry> aliases = searchAliasesInDomain(domain);
    assertEquals(aliases.size(), 1);
    assertTrue(aliases.get(0).getName().equals(aliasName));
}
Also used : Account(com.zimbra.cs.account.Account) Set(java.util.Set) HashMap(java.util.HashMap) LdapEntry(com.zimbra.cs.account.ldap.entry.LdapEntry) LdapProv(com.zimbra.cs.account.ldap.LdapProv) NamedEntry(com.zimbra.cs.account.NamedEntry) NamedEntry(com.zimbra.cs.account.NamedEntry) CacheEntry(com.zimbra.cs.account.Provisioning.CacheEntry) Entry(com.zimbra.cs.account.Entry) LdapEntry(com.zimbra.cs.account.ldap.entry.LdapEntry) AccountServiceException(com.zimbra.cs.account.AccountServiceException) ServiceException(com.zimbra.common.service.ServiceException) Domain(com.zimbra.cs.account.Domain) HashMap(java.util.HashMap) Map(java.util.Map) DistributionList(com.zimbra.cs.account.DistributionList)

Example 28 with LdapEntry

use of com.zimbra.cs.account.ldap.entry.LdapEntry in project zm-mailbox by Zimbra.

the class TestProvAlias method testRemoveAlias_entryExist_aliasNotExist.

// 
// B
// 
@Test
public void testRemoveAlias_entryExist_aliasNotExist() throws Exception {
    String testName = getTestName();
    // create the domain
    String domainName = "EE-AN" + "." + BASE_DOMAIN_NAME;
    domainName = domainName.toLowerCase();
    Map<String, Object> attrs = new HashMap<String, Object>();
    attrs.put(Provisioning.A_zimbraDomainType, Provisioning.DomainType.local.name());
    Domain domain = prov.createDomain(domainName, attrs);
    // create the account
    String acctName = getEmail("acct-1", domainName);
    Account acct = prov.createAccount(acctName, PASSWORD, new HashMap<String, Object>());
    // add an alias to the account
    String aliasName = getEmail("alias-1", domainName);
    prov.addAlias(acct, aliasName);
    // create 2 DLs
    String dl1Name = getEmail("dl-1", domainName);
    DistributionList dl1 = prov.createDistributionList(dl1Name, new HashMap<String, Object>());
    String dl2Name = getEmail("dl-2", domainName);
    DistributionList dl2 = prov.createDistributionList(dl2Name, new HashMap<String, Object>());
    // add the alias to the two DLs
    prov.addMembers(dl1, new String[] { aliasName });
    prov.addMembers(dl2, new String[] { aliasName });
    // now, hack it to delete the alias entry
    {
        List<NamedEntry> aliases = searchAliasesInDomain(domain);
        assertEquals(aliases.size(), 1);
        LdapEntry ldapAlias = (LdapEntry) aliases.get(0);
        String aliasDn = ldapAlias.getDN();
        ((LdapProv) prov).getHelper().deleteEntry(aliasDn, LdapUsage.UNITTEST);
    }
    // remove the alias
    // ensure we *do* get a NO_SUCH_ALIAS exception
    boolean good = false;
    try {
        prov.removeAlias(acct, aliasName);
    } catch (ServiceException e) {
        assertEquals(e.getCode(), (AccountServiceException.NO_SUCH_ALIAS));
        good = true;
    }
    assertTrue(good);
    // reload all entries
    prov.reload(acct);
    prov.reload(dl1);
    prov.reload(dl2);
    Set<String> values;
    // ensure the alias is removed from the account's mail/zimbraMailAlias attrs
    values = acct.getMultiAttrSet(Provisioning.A_mail);
    assertFalse(values.contains(aliasName));
    values = acct.getMultiAttrSet(Provisioning.A_zimbraMailAlias);
    assertFalse(values.contains(aliasName));
    // ensure the alias is removed from all the DLs
    values = dl1.getMultiAttrSet(Provisioning.A_zimbraMailForwardingAddress);
    assertFalse(values.contains(aliasName));
    values = dl2.getMultiAttrSet(Provisioning.A_zimbraMailForwardingAddress);
    assertFalse(values.contains(aliasName));
    // ensure the alias entry is removed (should have been removed when we hacked to unbind it)
    List<NamedEntry> aliases = searchAliasesInDomain(domain);
    assertEquals(aliases.size(), 0);
}
Also used : Account(com.zimbra.cs.account.Account) HashMap(java.util.HashMap) LdapEntry(com.zimbra.cs.account.ldap.entry.LdapEntry) LdapProv(com.zimbra.cs.account.ldap.LdapProv) NamedEntry(com.zimbra.cs.account.NamedEntry) AccountServiceException(com.zimbra.cs.account.AccountServiceException) ServiceException(com.zimbra.common.service.ServiceException) DistributionList(com.zimbra.cs.account.DistributionList) List(java.util.List) Domain(com.zimbra.cs.account.Domain) DistributionList(com.zimbra.cs.account.DistributionList)

Example 29 with LdapEntry

use of com.zimbra.cs.account.ldap.entry.LdapEntry in project zm-mailbox by Zimbra.

the class TestProvAlias method testRemoveAlias_entryExist_aliasExist_aliasPointToNonExistEntry.

// 
// A - alias points to a non-existing entry
// 
@Test
public void testRemoveAlias_entryExist_aliasExist_aliasPointToNonExistEntry() throws Exception {
    String testName = getTestName();
    // create the domain
    String domainName = "EE-AE-aliasPointToNonExistEntry" + "." + BASE_DOMAIN_NAME;
    domainName = domainName.toLowerCase();
    Map<String, Object> attrs = new HashMap<String, Object>();
    attrs.put(Provisioning.A_zimbraDomainType, Provisioning.DomainType.local.name());
    Domain domain = prov.createDomain(domainName, attrs);
    // create the account
    String acctName = getEmail("acct-1", domainName);
    Account acct = prov.createAccount(acctName, PASSWORD, new HashMap<String, Object>());
    // add an alias to the account
    String aliasName = getEmail("alias-1", domainName);
    prov.addAlias(acct, aliasName);
    // create 2 DLs
    String dl1Name = getEmail("dl-1", domainName);
    DistributionList dl1 = prov.createDistributionList(dl1Name, new HashMap<String, Object>());
    String dl2Name = getEmail("dl-2", domainName);
    DistributionList dl2 = prov.createDistributionList(dl2Name, new HashMap<String, Object>());
    // add the alias to the two DLs
    prov.addMembers(dl1, new String[] { aliasName });
    prov.addMembers(dl2, new String[] { aliasName });
    // now, hack it so the alias points to a non-existing entry
    {
        Map<String, Object> attributes = new HashMap<String, Object>();
        attributes.put(Provisioning.A_zimbraAliasTargetId, LdapUtil.generateUUID());
        List<NamedEntry> aliases = searchAliasesInDomain(domain);
        assertEquals(aliases.size(), 1);
        LdapEntry ldapAlias = (LdapEntry) aliases.get(0);
        ((LdapProv) prov).getHelper().modifyEntry(ldapAlias.getDN(), attributes, (Entry) ldapAlias, LdapUsage.UNITTEST);
    }
    // remove the alias
    // ensure we *do* get a NO_SUCH_ALIAS exception
    boolean good = false;
    try {
        prov.removeAlias(acct, aliasName);
    } catch (ServiceException e) {
        assertEquals(e.getCode(), (AccountServiceException.NO_SUCH_ALIAS));
        good = true;
    }
    assertTrue(good);
    // reload all entries
    prov.reload(acct);
    prov.reload(dl1);
    prov.reload(dl2);
    Set<String> values;
    // ensure the alias is removed from the account's mail/zimbraMailAlias attrs
    values = acct.getMultiAttrSet(Provisioning.A_mail);
    assertFalse(values.contains(aliasName));
    values = acct.getMultiAttrSet(Provisioning.A_zimbraMailAlias);
    assertFalse(values.contains(aliasName));
    // ensure the alias is removed from all the DLs
    values = dl1.getMultiAttrSet(Provisioning.A_zimbraMailForwardingAddress);
    assertFalse(values.contains(aliasName));
    values = dl2.getMultiAttrSet(Provisioning.A_zimbraMailForwardingAddress);
    assertFalse(values.contains(aliasName));
    // ensure the alias entry is removed
    List<NamedEntry> aliases = searchAliasesInDomain(domain);
    assertEquals(aliases.size(), 0);
}
Also used : Account(com.zimbra.cs.account.Account) HashMap(java.util.HashMap) LdapEntry(com.zimbra.cs.account.ldap.entry.LdapEntry) LdapProv(com.zimbra.cs.account.ldap.LdapProv) NamedEntry(com.zimbra.cs.account.NamedEntry) NamedEntry(com.zimbra.cs.account.NamedEntry) CacheEntry(com.zimbra.cs.account.Provisioning.CacheEntry) Entry(com.zimbra.cs.account.Entry) LdapEntry(com.zimbra.cs.account.ldap.entry.LdapEntry) AccountServiceException(com.zimbra.cs.account.AccountServiceException) ServiceException(com.zimbra.common.service.ServiceException) DistributionList(com.zimbra.cs.account.DistributionList) List(java.util.List) Domain(com.zimbra.cs.account.Domain) HashMap(java.util.HashMap) Map(java.util.Map) DistributionList(com.zimbra.cs.account.DistributionList)

Aggregations

LdapEntry (com.zimbra.cs.account.ldap.entry.LdapEntry)29 ServiceException (com.zimbra.common.service.ServiceException)20 AccountServiceException (com.zimbra.cs.account.AccountServiceException)20 AuthFailedServiceException (com.zimbra.cs.account.AccountServiceException.AuthFailedServiceException)17 ZLdapContext (com.zimbra.cs.ldap.ZLdapContext)15 Account (com.zimbra.cs.account.Account)10 DistributionList (com.zimbra.cs.account.DistributionList)9 Domain (com.zimbra.cs.account.Domain)9 HashMap (java.util.HashMap)9 NamedEntry (com.zimbra.cs.account.NamedEntry)7 List (java.util.List)7 LdapProv (com.zimbra.cs.account.ldap.LdapProv)6 LdapException (com.zimbra.cs.ldap.LdapException)5 LdapEntryAlreadyExistException (com.zimbra.cs.ldap.LdapException.LdapEntryAlreadyExistException)5 GuestAccount (com.zimbra.cs.account.GuestAccount)4 Signature (com.zimbra.cs.account.Signature)4 LdapAccount (com.zimbra.cs.account.ldap.entry.LdapAccount)4 LdapDataSource (com.zimbra.cs.account.ldap.entry.LdapDataSource)4 LdapIdentity (com.zimbra.cs.account.ldap.entry.LdapIdentity)4 LdapSignature (com.zimbra.cs.account.ldap.entry.LdapSignature)4