Example #1
0
NS_IMETHODIMP nsAbLDAPDirectory::DeleteCards(nsIArray *aCards)
{
    PRUint32 cardCount;
    PRUint32 i;
    nsCAutoString cardDN;

    nsresult rv = aCards->GetLength(&cardCount);
    NS_ENSURE_SUCCESS(rv, rv);

    for (i = 0; i < cardCount; ++i)
    {
        nsCOMPtr<nsIAbLDAPCard> card(do_QueryElementAt(aCards, i, &rv));
        if (NS_FAILED(rv))
        {
            NS_WARNING("Wrong type of card passed to nsAbLDAPDirectory::DeleteCards");
            break;
        }

        // Set up the search ldap url - this is mURL
        rv = Initiate();
        NS_ENSURE_SUCCESS(rv, rv);

        rv = card->GetDn(cardDN);
        NS_ENSURE_SUCCESS(rv, rv);

        // Launch query
        rv = DoModify(this, nsILDAPModification::MOD_DELETE, cardDN, nsnull,
                      EmptyCString(), EmptyCString());
        NS_ENSURE_SUCCESS(rv, rv);
    }

    return NS_OK;
}
Example #2
0
int FbAuthorModifyDlg::DoUpdate()
{
	if (m_exists) {
		ReplaceAuthor(m_id, m_exists);
		return m_exists;
	} else {
		DoModify();
		return m_id;
	}
}
Example #3
0
NS_IMETHODIMP nsAbLDAPDirectory::ModifyCard(nsIAbCard *aUpdatedCard)
{
    NS_ENSURE_ARG_POINTER(aUpdatedCard);

    nsCOMPtr<nsIAbLDAPAttributeMap> attrMap;
    nsresult rv = GetAttributeMap(getter_AddRefs(attrMap));
    NS_ENSURE_SUCCESS(rv, rv);

    // Get the LDAP card
    nsCOMPtr<nsIAbLDAPCard> card = do_QueryInterface(aUpdatedCard, &rv);
    NS_ENSURE_SUCCESS(rv, rv);

    rv = Initiate();
    NS_ENSURE_SUCCESS(rv, rv);

    // Retrieve preferences
    nsCAutoString prefString;
    rv = GetObjectClasses(prefString);
    NS_ENSURE_SUCCESS(rv, rv);

    CharPtrArrayGuard objClass;
    rv = SplitStringList(prefString, objClass.GetSizeAddr(),
                         objClass.GetArrayAddr());
    NS_ENSURE_SUCCESS(rv, rv);

    // Process updates
    nsCOMPtr<nsIArray> modArray;
    rv = card->GetLDAPMessageInfo(attrMap, objClass.GetSize(), objClass.GetArray(),
                                  nsILDAPModification::MOD_REPLACE, getter_AddRefs(modArray));
    NS_ENSURE_SUCCESS(rv, rv);

    // Get current DN
    nsCAutoString oldDN;
    rv = card->GetDn(oldDN);
    NS_ENSURE_SUCCESS(rv, rv);

    nsCOMPtr<nsILDAPService> ldapSvc = do_GetService(
                                           "@mozilla.org/network/ldap-service;1", &rv);
    NS_ENSURE_SUCCESS(rv, rv);

    // Retrieve base DN and RDN attributes
    nsCAutoString baseDN;
    nsCAutoString oldRDN;
    CharPtrArrayGuard rdnAttrs;
    rv = ldapSvc->ParseDn(oldDN.get(), oldRDN, baseDN,
                          rdnAttrs.GetSizeAddr(), rdnAttrs.GetArrayAddr());
    NS_ENSURE_SUCCESS(rv, rv);

    // Calculate new RDN and check whether it has changed
    nsCAutoString newRDN;
    rv = card->BuildRdn(attrMap, rdnAttrs.GetSize(), rdnAttrs.GetArray(),
                        newRDN);
    NS_ENSURE_SUCCESS(rv, rv);

    if (newRDN.Equals(oldRDN))
    {
        // Launch query
        rv = DoModify(this, nsILDAPModification::MOD_REPLACE, oldDN, modArray,
                      EmptyCString(), EmptyCString());
    }
    else
    {
        // Build and store the new DN
        nsCAutoString newDN(newRDN);
        newDN.AppendLiteral(",");
        newDN.Append(baseDN);

        rv = card->SetDn(newDN);
        NS_ENSURE_SUCCESS(rv, rv);

        // Launch query
        rv = DoModify(this, nsILDAPModification::MOD_REPLACE, oldDN, modArray,
                      newRDN, baseDN);
    }
    return rv;
}
Example #4
0
NS_IMETHODIMP nsAbLDAPDirectory::AddCard(nsIAbCard *aUpdatedCard,
        nsIAbCard **aAddedCard)
{
    NS_ENSURE_ARG_POINTER(aUpdatedCard);
    NS_ENSURE_ARG_POINTER(aAddedCard);

    nsCOMPtr<nsIAbLDAPAttributeMap> attrMap;
    nsresult rv = GetAttributeMap(getter_AddRefs(attrMap));
    NS_ENSURE_SUCCESS(rv, rv);

    // Create a new LDAP card
    nsCOMPtr<nsIAbLDAPCard> card =
        do_CreateInstance(NS_ABLDAPCARD_CONTRACTID, &rv);
    NS_ENSURE_SUCCESS(rv, rv);

    rv = Initiate();
    NS_ENSURE_SUCCESS(rv, rv);

    // Copy over the card data
    nsCOMPtr<nsIAbCard> copyToCard = do_QueryInterface(card, &rv);
    NS_ENSURE_SUCCESS(rv, rv);

    rv = copyToCard->Copy(aUpdatedCard);
    NS_ENSURE_SUCCESS(rv, rv);

    // Retrieve preferences
    nsCAutoString prefString;
    rv = GetRdnAttributes(prefString);
    NS_ENSURE_SUCCESS(rv, rv);

    CharPtrArrayGuard rdnAttrs;
    rv = SplitStringList(prefString, rdnAttrs.GetSizeAddr(),
                         rdnAttrs.GetArrayAddr());
    NS_ENSURE_SUCCESS(rv, rv);

    rv = GetObjectClasses(prefString);
    NS_ENSURE_SUCCESS(rv, rv);

    CharPtrArrayGuard objClass;
    rv = SplitStringList(prefString, objClass.GetSizeAddr(),
                         objClass.GetArrayAddr());
    NS_ENSURE_SUCCESS(rv, rv);

    // Process updates
    nsCOMPtr<nsIArray> modArray;
    rv = card->GetLDAPMessageInfo(attrMap, objClass.GetSize(), objClass.GetArray(),
                                  nsILDAPModification::MOD_ADD, getter_AddRefs(modArray));
    NS_ENSURE_SUCCESS(rv, rv);

    // For new cards, the base DN is the search base DN
    nsCOMPtr<nsILDAPURL> currentUrl;
    rv = GetLDAPURL(getter_AddRefs(currentUrl));
    NS_ENSURE_SUCCESS(rv, rv);

    nsCAutoString baseDN;
    rv = currentUrl->GetDn(baseDN);
    NS_ENSURE_SUCCESS(rv, rv);

    // Calculate DN
    nsCAutoString cardDN;
    rv = card->BuildRdn(attrMap, rdnAttrs.GetSize(), rdnAttrs.GetArray(),
                        cardDN);
    NS_ENSURE_SUCCESS(rv, rv);
    cardDN.AppendLiteral(",");
    cardDN.Append(baseDN);

    rv = card->SetDn(cardDN);
    NS_ENSURE_SUCCESS(rv, rv);

    // Launch query
    rv = DoModify(this, nsILDAPModification::MOD_ADD, cardDN, modArray,
                  EmptyCString(), EmptyCString());
    NS_ENSURE_SUCCESS(rv, rv);

    NS_ADDREF(*aAddedCard = copyToCard);
    return NS_OK;
}