зеркало из https://github.com/mozilla/pjs.git
Bug 316170 Address Book LDAP Replication doesn't work for authenticated connections. r=Neil,sr=bienvenu
This commit is contained in:
Родитель
e776e6606f
Коммит
cd65caad1f
|
@ -40,6 +40,7 @@
|
|||
|
||||
interface nsIMutableArray;
|
||||
interface nsIAbLDAPAttributeMap;
|
||||
interface nsILDAPURL;
|
||||
|
||||
%{C++
|
||||
#define kLDAPDirectoryRoot "moz-abldapdirectory://"
|
||||
|
@ -50,7 +51,7 @@ interface nsIAbLDAPAttributeMap;
|
|||
* XXX This should really inherit from nsIAbDirectory, and some day it will.
|
||||
* But for now, doing that complicates implementation.
|
||||
*/
|
||||
[scriptable, uuid(9857182c-9051-4788-9393-735ae7bdd8b3)]
|
||||
[scriptable, uuid(d67b4a29-10d5-4409-a693-3e8bab184948)]
|
||||
interface nsIAbLDAPDirectory : nsISupports
|
||||
{
|
||||
/**
|
||||
|
@ -89,5 +90,13 @@ interface nsIAbLDAPDirectory : nsISupports
|
|||
* The attribute map that is associated with this directory's server.
|
||||
*/
|
||||
readonly attribute nsIAbLDAPAttributeMap attributeMap;
|
||||
|
||||
/**
|
||||
* The LDAP URL for this directory. Note that this differs from
|
||||
* nsIAbDirectory::URI. This attribute will give you a true ldap
|
||||
* url, e.g. ldap://localhost:389/ whereas the uri will give you the
|
||||
* directories rdf uri, e.g. moz-abldapdirectory://<pref base name>/.
|
||||
*/
|
||||
readonly attribute nsILDAPURL lDAPURL;
|
||||
};
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
|
@ -35,17 +36,19 @@
|
|||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
#include "nsISupports.idl"
|
||||
#include "nsILDAPMessageListener.idl"
|
||||
|
||||
interface nsIAbLDAPDirectory;
|
||||
interface nsILDAPConnection;
|
||||
interface nsILDAPURL;
|
||||
interface nsIAbLDAPReplicationQuery;
|
||||
interface nsIWebProgressListener;
|
||||
|
||||
/**
|
||||
* this service does replication of an LDAP directory to a local Mork AB Database.
|
||||
*/
|
||||
[scriptable, uuid(00D568A2-3C3B-11d6-B7B9-00B0D06E5F27)]
|
||||
interface nsIAbLDAPProcessReplicationData : nsILDAPMessageListener {
|
||||
|
||||
[scriptable, uuid(e628bbc9-8793-4f0b-bce4-990d399b1fca)]
|
||||
interface nsIAbLDAPProcessReplicationData : nsISupports
|
||||
{
|
||||
/**
|
||||
* readonly attribute giving the current replication state
|
||||
*/
|
||||
|
@ -83,16 +86,15 @@ interface nsIAbLDAPProcessReplicationData : nsILDAPMessageListener {
|
|||
/**
|
||||
* this method initializes the implementation
|
||||
*/
|
||||
void init (in nsIAbLDAPReplicationQuery query, in nsIWebProgressListener progressListener);
|
||||
void init(in nsIAbLDAPDirectory directory,
|
||||
in nsILDAPConnection connection,
|
||||
in nsILDAPURL url,
|
||||
in nsIAbLDAPReplicationQuery query,
|
||||
in nsIWebProgressListener progressListener);
|
||||
|
||||
/**
|
||||
* this method a aborts the ongoing processing
|
||||
*/
|
||||
void abort();
|
||||
|
||||
/**
|
||||
* this utility method populates authentication data from Dir Server
|
||||
*/
|
||||
void populateAuthData();
|
||||
};
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
|
@ -19,6 +20,7 @@
|
|||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Mark Banner <bugzilla@standard8.demon.co.uk>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
|
@ -45,67 +47,53 @@ interface nsIAbLDAPDirectory;
|
|||
/**
|
||||
* this interface provides methods to perform LDAP Replication Queries
|
||||
*/
|
||||
[scriptable, uuid(91c213f7-a381-4b1d-adf3-af58a2bb95d2)]
|
||||
interface nsIAbLDAPReplicationQuery : nsISupports {
|
||||
|
||||
readonly attribute nsILDAPURL replicationURL;
|
||||
readonly attribute nsILDAPConnection connection;
|
||||
readonly attribute nsILDAPOperation operation;
|
||||
|
||||
readonly attribute nsIAbLDAPDirectory lDAPDirectory;
|
||||
|
||||
/**
|
||||
* initialize for the query
|
||||
*/
|
||||
void init (in ACString aPrefName, in nsIWebProgressListener aProgressListener);
|
||||
[scriptable, uuid(6d33127c-faef-4140-bb19-bb03c1590917)]
|
||||
interface nsIAbLDAPReplicationQuery : nsISupports
|
||||
{
|
||||
/**
|
||||
* initialize for the query
|
||||
*/
|
||||
void init(in ACString aPrefName, in nsIWebProgressListener aProgressListener);
|
||||
|
||||
/**
|
||||
* Starts an LDAP query to do replication as needed
|
||||
*/
|
||||
void doReplicationQuery();
|
||||
/**
|
||||
* Starts an LDAP query to do replication as needed
|
||||
*/
|
||||
void doReplicationQuery();
|
||||
|
||||
/**
|
||||
* connects to an LDAP Server using a DN
|
||||
*/
|
||||
void connectToLDAPServer(in nsILDAPURL aURL, in AUTF8String aAuthDN);
|
||||
* Cancels the currently executing query
|
||||
*/
|
||||
void cancelQuery();
|
||||
|
||||
/**
|
||||
* Starts an LDAP query to replicate all entries
|
||||
*/
|
||||
void queryAllEntries();
|
||||
|
||||
/**
|
||||
* Cancels the currently executing query
|
||||
*/
|
||||
void cancelQuery();
|
||||
|
||||
/**
|
||||
* this method is the callback when query is done, failed or successful
|
||||
*/
|
||||
void done(in boolean aSuccess);
|
||||
* this method is the callback when query is done, failed or successful
|
||||
*/
|
||||
void done(in boolean aSuccess);
|
||||
};
|
||||
|
||||
|
||||
// XXX This interface currently isn't implemented as it didn't work.
|
||||
// Bug 311632 should fix it
|
||||
[scriptable, uuid(126202D1-4460-11d6-B7C2-00B0D06E5F27)]
|
||||
interface nsIAbLDAPChangeLogQuery : nsISupports {
|
||||
interface nsIAbLDAPChangeLogQuery : nsISupports
|
||||
{
|
||||
/**
|
||||
* Starts an LDAP query to find auth DN
|
||||
*/
|
||||
void queryAuthDN(in AUTF8String aValueUsedToFindDn);
|
||||
* Starts an LDAP query to find auth DN
|
||||
*/
|
||||
void queryAuthDN(in AUTF8String aValueUsedToFindDn);
|
||||
|
||||
/**
|
||||
* Starts an LDAP query to search server's Root DSE
|
||||
*/
|
||||
void queryRootDSE();
|
||||
* Starts an LDAP query to search server's Root DSE
|
||||
*/
|
||||
void queryRootDSE();
|
||||
|
||||
/**
|
||||
* Starts an LDAP ChangeLog query to find changelog entries
|
||||
*/
|
||||
void queryChangeLog(in AUTF8String aChangeLogDN, in PRInt32 aLastChangeNo);
|
||||
* Starts an LDAP ChangeLog query to find changelog entries
|
||||
*/
|
||||
void queryChangeLog(in AUTF8String aChangeLogDN, in PRInt32 aLastChangeNo);
|
||||
|
||||
/**
|
||||
* Starts an LDAP query to find changed entries
|
||||
*/
|
||||
void queryChangedEntries(in AUTF8String aChangedEntryDN);
|
||||
* Starts an LDAP query to find changed entries
|
||||
*/
|
||||
void queryChangedEntries(in AUTF8String aChangedEntryDN);
|
||||
};
|
||||
|
||||
|
|
|
@ -77,7 +77,6 @@ public:
|
|||
|
||||
// nsAbLDAPDirectoryQuery methods
|
||||
nsresult GetLDAPConnection (nsILDAPConnection** connection);
|
||||
nsresult GetLDAPURL (nsILDAPURL** url);
|
||||
nsresult CreateCard (nsILDAPURL* uri, const char* dn, nsIAbCard** card);
|
||||
|
||||
// nsIAbDirectorySearch methods
|
||||
|
|
|
@ -432,10 +432,10 @@ nsAbLDAPDirectoryQuery::~nsAbLDAPDirectoryQuery()
|
|||
}
|
||||
|
||||
NS_IMETHODIMP nsAbLDAPDirectoryQuery::DoQuery(nsIAbDirectoryQueryArguments* arguments,
|
||||
nsIAbDirectoryQueryResultListener* listener,
|
||||
PRInt32 resultLimit,
|
||||
PRInt32 timeOut,
|
||||
PRInt32* _retval)
|
||||
nsIAbDirectoryQueryResultListener* listener,
|
||||
PRInt32 resultLimit,
|
||||
PRInt32 timeOut,
|
||||
PRInt32* _retval)
|
||||
{
|
||||
PRBool alreadyInitialized = mInitialized;
|
||||
mInitialized = PR_TRUE;
|
||||
|
@ -492,7 +492,10 @@ NS_IMETHODIMP nsAbLDAPDirectoryQuery::DoQuery(nsIAbDirectoryQueryArguments* argu
|
|||
}
|
||||
|
||||
// Set up the search ldap url
|
||||
rv = GetLDAPURL(getter_AddRefs(mDirectoryUrl));
|
||||
nsCOMPtr<nsIAbLDAPDirectory> directory(do_QueryInterface(this, &rv));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = directory->GetLDAPURL(getter_AddRefs(mDirectoryUrl));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCAutoString host;
|
||||
|
|
|
@ -60,7 +60,6 @@ public:
|
|||
void setLdapUrl (const char* aldapUrl);
|
||||
|
||||
virtual nsresult GetLDAPConnection (nsILDAPConnection** connection) = 0;
|
||||
virtual nsresult GetLDAPURL (nsILDAPURL** url) = 0;
|
||||
virtual nsresult CreateCard (nsILDAPURL* url, const char* dn, nsIAbCard** card) = 0;
|
||||
|
||||
protected:
|
||||
|
|
|
@ -67,6 +67,9 @@ nsAbLDAPListenerBase::~nsAbLDAPListenerBase()
|
|||
|
||||
nsresult nsAbLDAPListenerBase::Initiate()
|
||||
{
|
||||
if (!mConnection || !mDirectoryUrl)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
if (mInitialized)
|
||||
return NS_OK;
|
||||
|
||||
|
@ -81,6 +84,9 @@ nsresult nsAbLDAPListenerBase::Initiate()
|
|||
|
||||
NS_IMETHODIMP nsAbLDAPListenerBase::OnLDAPInit(nsILDAPConnection *aConn, nsresult aStatus)
|
||||
{
|
||||
if (!mConnection || !mDirectoryUrl)
|
||||
return NS_ERROR_NULL_POINTER;
|
||||
|
||||
nsresult rv;
|
||||
nsXPIDLString passwd;
|
||||
|
||||
|
@ -225,6 +231,7 @@ NS_IMETHODIMP nsAbLDAPListenerBase::OnLDAPInit(nsILDAPConnection *aConn, nsresul
|
|||
NS_STATIC_CAST(nsILDAPMessageListener *, this),
|
||||
NS_PROXY_SYNC | NS_PROXY_ALWAYS,
|
||||
getter_AddRefs(proxyListener));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = ldapOperation->Init(mConnection, proxyListener, nsnull);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
@ -269,7 +276,7 @@ nsresult nsAbLDAPListenerBase::OnLDAPMessageBind(nsILDAPMessage *aMessage)
|
|||
// pop up a dialog telling the user to go manually delete
|
||||
// this password in the password manager.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// XXX this error should be propagated back to the UI somehow
|
||||
return NS_ERROR_FAILURE;
|
||||
|
|
|
@ -53,9 +53,9 @@ class nsAbLDAPListenerBase : public nsILDAPMessageListener
|
|||
public:
|
||||
// Note that the directoryUrl is the details of the ldap directory
|
||||
// without any search params or attributes specified.
|
||||
nsAbLDAPListenerBase(nsILDAPURL* directoryUrl,
|
||||
nsILDAPConnection* connection,
|
||||
const nsACString &login,
|
||||
nsAbLDAPListenerBase(nsILDAPURL* directoryUrl = nsnull,
|
||||
nsILDAPConnection* connection = nsnull,
|
||||
const nsACString &login = EmptyCString(),
|
||||
const PRInt32 timeOut = 0);
|
||||
virtual ~nsAbLDAPListenerBase();
|
||||
|
||||
|
@ -74,8 +74,6 @@ protected:
|
|||
PRBool mBound;
|
||||
PRBool mInitialized;
|
||||
|
||||
nsCOMPtr<nsILDAPOperation> mOperation;
|
||||
|
||||
PRLock* mLock;
|
||||
};
|
||||
|
||||
|
|
|
@ -56,12 +56,13 @@
|
|||
// independently along with its related independent nsAbLDAPReplicationQuery object.
|
||||
NS_IMPL_THREADSAFE_ISUPPORTS2(nsAbLDAPProcessReplicationData, nsIAbLDAPProcessReplicationData, nsILDAPMessageListener)
|
||||
|
||||
nsAbLDAPProcessReplicationData::nsAbLDAPProcessReplicationData()
|
||||
: mState(kIdle),
|
||||
mProtocol(-1),
|
||||
mCount(0),
|
||||
mDBOpen(PR_FALSE),
|
||||
mInitialized(PR_FALSE)
|
||||
nsAbLDAPProcessReplicationData::nsAbLDAPProcessReplicationData() :
|
||||
nsAbLDAPListenerBase(),
|
||||
mState(kIdle),
|
||||
mProtocol(-1),
|
||||
mCount(0),
|
||||
mDBOpen(PR_FALSE),
|
||||
mInitialized(PR_FALSE)
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -72,35 +73,45 @@ nsAbLDAPProcessReplicationData::~nsAbLDAPProcessReplicationData()
|
|||
mReplicationDB->Close(PR_FALSE);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAbLDAPProcessReplicationData::Init(nsIAbLDAPReplicationQuery *query, nsIWebProgressListener *progressListener)
|
||||
NS_IMETHODIMP nsAbLDAPProcessReplicationData::Init(
|
||||
nsIAbLDAPDirectory *aDirectory,
|
||||
nsILDAPConnection *aConnection,
|
||||
nsILDAPURL* aURL,
|
||||
nsIAbLDAPReplicationQuery *aQuery,
|
||||
nsIWebProgressListener *aProgressListener)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(query);
|
||||
NS_ENSURE_ARG_POINTER(aDirectory);
|
||||
NS_ENSURE_ARG_POINTER(aConnection);
|
||||
NS_ENSURE_ARG_POINTER(aURL);
|
||||
NS_ENSURE_ARG_POINTER(aQuery);
|
||||
|
||||
mQuery = query;
|
||||
mDirectory = aDirectory;
|
||||
mConnection = aConnection;
|
||||
mDirectoryUrl = aURL;
|
||||
mQuery = aQuery;
|
||||
|
||||
nsresult rv = mQuery->GetLDAPDirectory(getter_AddRefs(mDirectory));
|
||||
if(NS_FAILED(rv)) {
|
||||
mQuery = nsnull;
|
||||
return rv;
|
||||
}
|
||||
mListener = aProgressListener;
|
||||
|
||||
rv = mDirectory->GetAttributeMap(getter_AddRefs(mAttrMap));
|
||||
if (NS_FAILED(rv)) {
|
||||
mQuery = nsnull;
|
||||
return rv;
|
||||
}
|
||||
nsresult rv = mDirectory->GetAttributeMap(getter_AddRefs(mAttrMap));
|
||||
if (NS_FAILED(rv)) {
|
||||
mQuery = nsnull;
|
||||
return rv;
|
||||
}
|
||||
|
||||
mListener = progressListener;
|
||||
rv = mDirectory->GetAuthDn(mLogin);
|
||||
if (NS_FAILED(rv)) {
|
||||
mQuery = nsnull;
|
||||
return rv;
|
||||
}
|
||||
|
||||
mInitialized = PR_TRUE;
|
||||
mInitialized = PR_TRUE;
|
||||
|
||||
return rv;
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAbLDAPProcessReplicationData::GetReplicationState(PRInt32 *aReplicationState)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aReplicationState);
|
||||
|
||||
*aReplicationState = mState;
|
||||
return NS_OK;
|
||||
}
|
||||
|
@ -112,243 +123,165 @@ NS_IMETHODIMP nsAbLDAPProcessReplicationData::GetProtocolUsed(PRInt32 *aProtocol
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAbLDAPProcessReplicationData::OnLDAPInit(nsILDAPConnection *aConn, nsresult aStatus)
|
||||
{
|
||||
if(!mInitialized)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
// Make sure that the Init() worked properly
|
||||
if(NS_FAILED(aStatus)) {
|
||||
Done(PR_FALSE);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsILDAPMessageListener> listener;
|
||||
nsresult rv = NS_GetProxyForObject(NS_PROXY_TO_CURRENT_THREAD,
|
||||
NS_GET_IID(nsILDAPMessageListener),
|
||||
NS_STATIC_CAST(nsILDAPMessageListener*, this),
|
||||
NS_PROXY_SYNC | NS_PROXY_ALWAYS,
|
||||
getter_AddRefs(listener));
|
||||
if(NS_FAILED(rv)) {
|
||||
Done(PR_FALSE);
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsILDAPOperation> operation;
|
||||
rv = mQuery->GetOperation(getter_AddRefs(operation));
|
||||
if(NS_FAILED(rv)) {
|
||||
Done(PR_FALSE);
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsILDAPConnection> connection;
|
||||
rv = mQuery->GetConnection(getter_AddRefs(connection));
|
||||
if(NS_FAILED(rv)) {
|
||||
Done(PR_FALSE);
|
||||
return rv;
|
||||
}
|
||||
|
||||
rv = operation->Init(connection, listener, nsnull);
|
||||
if(NS_FAILED(rv)) {
|
||||
Done(PR_FALSE);
|
||||
return rv;
|
||||
}
|
||||
|
||||
// Bind
|
||||
rv = operation->SimpleBind(mAuthPswd);
|
||||
mState = mAuthPswd.IsEmpty() ? kAnonymousBinding : kAuthenticatedBinding;
|
||||
|
||||
if(NS_FAILED(rv)) {
|
||||
Done(PR_FALSE);
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAbLDAPProcessReplicationData::OnLDAPMessage(nsILDAPMessage *aMessage)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aMessage);
|
||||
if(!mInitialized)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
NS_ENSURE_ARG_POINTER(aMessage);
|
||||
|
||||
PRInt32 messageType;
|
||||
nsresult rv = aMessage->GetType(&messageType);
|
||||
if(NS_FAILED(rv)) {
|
||||
#ifdef DEBUG_rdayal
|
||||
printf("LDAP Replication : OnLDAPMessage : couldnot GetType \n");
|
||||
#endif
|
||||
Done(PR_FALSE);
|
||||
return rv;
|
||||
}
|
||||
|
||||
switch(messageType)
|
||||
{
|
||||
case nsILDAPMessage::RES_BIND:
|
||||
rv = OnLDAPBind(aMessage);
|
||||
break;
|
||||
case nsILDAPMessage::RES_SEARCH_ENTRY:
|
||||
rv = OnLDAPSearchEntry(aMessage);
|
||||
break;
|
||||
case nsILDAPMessage::RES_SEARCH_RESULT:
|
||||
rv = OnLDAPSearchResult(aMessage);
|
||||
break;
|
||||
default:
|
||||
// for messageTypes we do not handle return NS_OK to LDAP and move ahead.
|
||||
rv = NS_OK;
|
||||
break;
|
||||
}
|
||||
if (!mInitialized)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
PRInt32 messageType;
|
||||
nsresult rv = aMessage->GetType(&messageType);
|
||||
if (NS_FAILED(rv)) {
|
||||
Done(PR_FALSE);
|
||||
return rv;
|
||||
}
|
||||
|
||||
switch (messageType)
|
||||
{
|
||||
case nsILDAPMessage::RES_BIND:
|
||||
rv = OnLDAPMessageBind(aMessage);
|
||||
if (NS_FAILED(rv))
|
||||
rv = Abort();
|
||||
break;
|
||||
case nsILDAPMessage::RES_SEARCH_ENTRY:
|
||||
rv = OnLDAPSearchEntry(aMessage);
|
||||
break;
|
||||
case nsILDAPMessage::RES_SEARCH_RESULT:
|
||||
rv = OnLDAPSearchResult(aMessage);
|
||||
break;
|
||||
default:
|
||||
// for messageTypes we do not handle return NS_OK to LDAP and move ahead.
|
||||
rv = NS_OK;
|
||||
break;
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAbLDAPProcessReplicationData::Abort()
|
||||
{
|
||||
if(!mInitialized)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
#ifdef DEBUG_rdayal
|
||||
printf ("ChangeLog Replication : ABORT called !!! \n");
|
||||
#endif
|
||||
|
||||
nsCOMPtr<nsILDAPOperation> operation;
|
||||
nsresult rv = mQuery->GetOperation(getter_AddRefs(operation));
|
||||
if(operation && mState != kIdle)
|
||||
{
|
||||
rv = operation->AbandonExt();
|
||||
if(NS_SUCCEEDED(rv))
|
||||
mState = kIdle;
|
||||
}
|
||||
|
||||
if(mReplicationDB && mDBOpen) {
|
||||
mReplicationDB->ForceClosed(); // force close since we need to delete the file.
|
||||
mDBOpen = PR_FALSE;
|
||||
|
||||
// delete the unsaved replication file
|
||||
if(mReplicationFile) {
|
||||
rv = mReplicationFile->Remove(PR_FALSE);
|
||||
if(NS_SUCCEEDED(rv) && mDirectory) {
|
||||
nsCAutoString fileName;
|
||||
rv = mDirectory->GetReplicationFileName(fileName);
|
||||
// now put back the backed up replicated file if aborted
|
||||
if(NS_SUCCEEDED(rv) && mBackupReplicationFile)
|
||||
rv = mBackupReplicationFile->MoveToNative(nsnull, fileName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Done(PR_FALSE);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
// this should get the authDN from prefs and password from PswdMgr
|
||||
NS_IMETHODIMP nsAbLDAPProcessReplicationData::PopulateAuthData()
|
||||
{
|
||||
if (!mDirectory)
|
||||
if (!mInitialized)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
nsCAutoString authDn;
|
||||
nsresult rv = mDirectory->GetAuthDn(authDn);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
mAuthDN.Assign(authDn);
|
||||
if (mState != kIdle && mOperation) {
|
||||
rv = mOperation->AbandonExt();
|
||||
if (NS_SUCCEEDED(rv))
|
||||
mState = kIdle;
|
||||
}
|
||||
|
||||
nsCOMPtr <nsIPasswordManagerInternal> passwordMgrInt = do_GetService(NS_PASSWORDMANAGER_CONTRACTID, &rv);
|
||||
if(NS_SUCCEEDED(rv) && passwordMgrInt) {
|
||||
// Get the current server URI
|
||||
nsCOMPtr<nsILDAPURL> url;
|
||||
rv = mQuery->GetReplicationURL(getter_AddRefs(url));
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
nsCAutoString serverUri;
|
||||
rv = url->GetSpec(serverUri);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
if (mReplicationDB && mDBOpen) {
|
||||
// force close since we need to delete the file.
|
||||
mReplicationDB->ForceClosed();
|
||||
mDBOpen = PR_FALSE;
|
||||
|
||||
nsCAutoString hostFound;
|
||||
nsAutoString userNameFound;
|
||||
nsAutoString passwordFound;
|
||||
|
||||
// Get password entry corresponding to the server URI we are passing in.
|
||||
rv = passwordMgrInt->FindPasswordEntry(serverUri, EmptyString(),
|
||||
EmptyString(), hostFound,
|
||||
userNameFound, passwordFound);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
if (!passwordFound.IsEmpty())
|
||||
CopyUTF16toUTF8(passwordFound, mAuthPswd);
|
||||
// delete the unsaved replication file
|
||||
if (mReplicationFile) {
|
||||
rv = mReplicationFile->Remove(PR_FALSE);
|
||||
if (NS_SUCCEEDED(rv) && mDirectory) {
|
||||
nsCAutoString fileName;
|
||||
rv = mDirectory->GetReplicationFileName(fileName);
|
||||
// now put back the backed up replicated file if aborted
|
||||
if (NS_SUCCEEDED(rv) && mBackupReplicationFile)
|
||||
rv = mBackupReplicationFile->MoveToNative(nsnull, fileName);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return rv;
|
||||
Done(PR_FALSE);
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsresult nsAbLDAPProcessReplicationData::OnLDAPBind(nsILDAPMessage *aMessage)
|
||||
nsresult nsAbLDAPProcessReplicationData::DoTask()
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aMessage);
|
||||
if(!mInitialized)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
PRInt32 errCode;
|
||||
|
||||
nsresult rv = aMessage->GetErrorCode(&errCode);
|
||||
if(NS_FAILED(rv)) {
|
||||
Done(PR_FALSE);
|
||||
return rv;
|
||||
}
|
||||
|
||||
if(errCode != nsILDAPErrors::SUCCESS) {
|
||||
Done(PR_FALSE);
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
rv = OpenABForReplicatedDir(PR_TRUE);
|
||||
if(NS_FAILED(rv)) {
|
||||
// do not call done here since it is called by OpenABForReplicationDir
|
||||
return rv;
|
||||
}
|
||||
|
||||
rv = mQuery->QueryAllEntries();
|
||||
if(NS_FAILED(rv)) {
|
||||
Done(PR_FALSE);
|
||||
return rv;
|
||||
}
|
||||
|
||||
mState = kReplicatingAll;
|
||||
|
||||
if(mListener && NS_SUCCEEDED(rv))
|
||||
mListener->OnStateChange(nsnull, nsnull, nsIWebProgressListener::STATE_START, PR_TRUE);
|
||||
if (!mInitialized)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
nsresult rv = OpenABForReplicatedDir(PR_TRUE);
|
||||
if (NS_FAILED(rv))
|
||||
// do not call done here since it is called by OpenABForReplicationDir
|
||||
return rv;
|
||||
|
||||
mOperation = do_CreateInstance(NS_LDAPOPERATION_CONTRACTID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsILDAPMessageListener> proxyListener;
|
||||
rv = NS_GetProxyForObject(NS_PROXY_TO_MAIN_THREAD,
|
||||
NS_GET_IID(nsILDAPMessageListener),
|
||||
NS_STATIC_CAST(nsILDAPMessageListener*, this),
|
||||
NS_PROXY_SYNC | NS_PROXY_ALWAYS,
|
||||
getter_AddRefs(proxyListener));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = mOperation->Init(mConnection, proxyListener, nsnull);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// get the relevant attributes associated with the directory server url
|
||||
nsCAutoString urlFilter;
|
||||
rv = mDirectoryUrl->GetFilter(urlFilter);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
nsCAutoString dn;
|
||||
rv = mDirectoryUrl->GetDn(dn);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
if (dn.IsEmpty())
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
|
||||
PRInt32 scope;
|
||||
rv = mDirectoryUrl->GetScope(&scope);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
CharPtrArrayGuard attributes;
|
||||
rv = mDirectoryUrl->GetAttributes(attributes.GetSizeAddr(),
|
||||
attributes.GetArrayAddr());
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
mState = kReplicatingAll;
|
||||
|
||||
if (mListener && NS_SUCCEEDED(rv))
|
||||
mListener->OnStateChange(nsnull, nsnull,
|
||||
nsIWebProgressListener::STATE_START, PR_TRUE);
|
||||
|
||||
return mOperation->SearchExt(dn, scope, urlFilter,
|
||||
attributes.GetSize(), attributes.GetArray(),
|
||||
0, 0);
|
||||
}
|
||||
|
||||
nsresult nsAbLDAPProcessReplicationData::OnLDAPSearchEntry(nsILDAPMessage *aMessage)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aMessage);
|
||||
if(!mInitialized)
|
||||
if (!mInitialized)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
// since this runs on the main thread and is single threaded, this will
|
||||
// take care of entries returned by LDAP Connection thread after Abort.
|
||||
if(!mReplicationDB || !mDBOpen)
|
||||
if (!mReplicationDB || !mDBOpen)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
// Although we would may naturally create an nsIAbLDAPCard here, we don't
|
||||
// need to as we are writing this straight to the database, so just create
|
||||
// the database version instead.
|
||||
nsCOMPtr<nsIAbMDBCard> dbCard(do_CreateInstance(NS_ABMDBCARD_CONTRACTID, &rv));
|
||||
if(NS_FAILED(rv)) {
|
||||
Abort();
|
||||
return rv;
|
||||
}
|
||||
// Although we would may naturally create an nsIAbLDAPCard here, we don't
|
||||
// need to as we are writing this straight to the database, so just create
|
||||
// the database version instead.
|
||||
nsCOMPtr<nsIAbMDBCard> dbCard(do_CreateInstance(NS_ABMDBCARD_CONTRACTID,
|
||||
&rv));
|
||||
if (NS_FAILED(rv)) {
|
||||
Abort();
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIAbCard> newCard(do_QueryInterface(dbCard, &rv));
|
||||
if(NS_FAILED(rv)) {
|
||||
Abort();
|
||||
return rv;
|
||||
}
|
||||
nsCOMPtr<nsIAbCard> newCard(do_QueryInterface(dbCard, &rv));
|
||||
if (NS_FAILED(rv)) {
|
||||
Abort();
|
||||
return rv;
|
||||
}
|
||||
|
||||
rv = mAttrMap->SetCardPropertiesFromLDAPMessage(aMessage, newCard);
|
||||
if (NS_FAILED(rv))
|
||||
|
@ -403,7 +336,7 @@ nsresult nsAbLDAPProcessReplicationData::OnLDAPSearchEntry(nsILDAPMessage *aMess
|
|||
|
||||
mCount ++;
|
||||
|
||||
if(!(mCount % 10)) // inform the listener every 10 entries
|
||||
if (mListener && !(mCount % 10)) // inform the listener every 10 entries
|
||||
{
|
||||
mListener->OnProgressChange(nsnull,nsnull,mCount, -1, mCount, -1);
|
||||
// in case if the LDAP Connection thread is starved and causes problem
|
||||
|
@ -614,8 +547,8 @@ void nsAbLDAPProcessReplicationData::Done(PRBool aSuccess)
|
|||
if(mListener)
|
||||
mListener->OnStateChange(nsnull, nsnull, nsIWebProgressListener::STATE_STOP, aSuccess);
|
||||
|
||||
// since this is called when all is done here, either on success, failure or abort
|
||||
// releas the query now.
|
||||
// since this is called when all is done here, either on success,
|
||||
// failure or abort release the query now.
|
||||
mQuery = nsnull;
|
||||
}
|
||||
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
#include "nsIAbLDAPReplicationData.h"
|
||||
#include "nsIWebProgressListener.h"
|
||||
#include "nsIAbLDAPReplicationQuery.h"
|
||||
#include "nsAbLDAPListenerBase.h"
|
||||
#include "nsIAddrDatabase.h"
|
||||
#include "nsILocalFile.h"
|
||||
#include "nsDirPrefs.h"
|
||||
|
@ -50,21 +51,26 @@
|
|||
#include "nsIAbLDAPDirectory.h"
|
||||
#include "nsString.h"
|
||||
|
||||
class nsAbLDAPProcessReplicationData : public nsIAbLDAPProcessReplicationData
|
||||
class nsAbLDAPProcessReplicationData : public nsIAbLDAPProcessReplicationData,
|
||||
public nsAbLDAPListenerBase
|
||||
{
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSIABLDAPPROCESSREPLICATIONDATA
|
||||
NS_DECL_NSILDAPMESSAGELISTENER
|
||||
|
||||
nsAbLDAPProcessReplicationData();
|
||||
virtual ~nsAbLDAPProcessReplicationData();
|
||||
|
||||
|
||||
// nsILDAPMessageListener
|
||||
NS_IMETHOD OnLDAPMessage(nsILDAPMessage *aMessage);
|
||||
|
||||
protected :
|
||||
nsCOMPtr<nsIAbLDAPReplicationQuery> mQuery;
|
||||
virtual nsresult DoTask();
|
||||
|
||||
// pointer to the interfaces used by this object
|
||||
nsCOMPtr<nsIWebProgressListener> mListener;
|
||||
// pointer to the query to call back to once we've finished
|
||||
nsCOMPtr<nsIAbLDAPReplicationQuery> mQuery;
|
||||
|
||||
nsCOMPtr<nsIAddrDatabase> mReplicationDB;
|
||||
nsCOMPtr <nsILocalFile> mReplicationFile;
|
||||
|
@ -78,11 +84,9 @@ protected :
|
|||
PRBool mInitialized;
|
||||
|
||||
nsCOMPtr<nsIAbLDAPDirectory> mDirectory;
|
||||
nsCString mAuthDN; // authDN of the user
|
||||
nsCString mAuthPswd; // pswd of the authDN user
|
||||
nsCOMPtr<nsILDAPOperation> mOperation;
|
||||
nsCOMPtr<nsIAbLDAPAttributeMap> mAttrMap; // maps ab properties to ldap attrs
|
||||
|
||||
virtual nsresult OnLDAPBind(nsILDAPMessage *aMessage);
|
||||
virtual nsresult OnLDAPSearchEntry(nsILDAPMessage *aMessage);
|
||||
virtual nsresult OnLDAPSearchResult(nsILDAPMessage *aMessage);
|
||||
|
||||
|
|
|
@ -51,7 +51,8 @@
|
|||
#include "prmem.h"
|
||||
#include "nsIRDFService.h"
|
||||
|
||||
NS_IMPL_ISUPPORTS1(nsAbLDAPReplicationQuery, nsIAbLDAPReplicationQuery)
|
||||
NS_IMPL_THREADSAFE_ISUPPORTS1(nsAbLDAPReplicationQuery,
|
||||
nsIAbLDAPReplicationQuery)
|
||||
|
||||
nsAbLDAPReplicationQuery::nsAbLDAPReplicationQuery()
|
||||
: mInitialized(PR_FALSE)
|
||||
|
@ -67,14 +68,14 @@ nsresult nsAbLDAPReplicationQuery::InitLDAPData()
|
|||
|
||||
nsCAutoString resourceURI(kLDAPDirectoryRoot);
|
||||
resourceURI.Append(mDirPrefName);
|
||||
|
||||
|
||||
nsCOMPtr<nsIRDFResource> resource;
|
||||
rv = rdfService->GetResource(resourceURI, getter_AddRefs(resource));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
|
||||
mDirectory = do_QueryInterface(resource, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
|
||||
nsCAutoString fileName;
|
||||
rv = mDirectory->GetReplicationFileName(fileName);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
@ -102,21 +103,12 @@ nsresult nsAbLDAPReplicationQuery::InitLDAPData()
|
|||
rv = mDirectory->SetReplicationFileName(fileName);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
mURL = do_CreateInstance(NS_LDAPURL_CONTRACTID, &rv);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
nsCOMPtr<nsIAbDirectory> abDirectory(do_QueryInterface(mDirectory, &rv));
|
||||
rv = mDirectory->GetLDAPURL(getter_AddRefs(mURL));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCAutoString uri;
|
||||
rv = abDirectory->GetURI(uri);
|
||||
rv = mDirectory->GetAuthDn(mLogin);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = mURL->SetSpec(uri);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
mConnection = do_CreateInstance(NS_LDAPCONNECTION_CONTRACTID, &rv);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
@ -126,40 +118,32 @@ nsresult nsAbLDAPReplicationQuery::InitLDAPData()
|
|||
return rv;
|
||||
}
|
||||
|
||||
nsresult nsAbLDAPReplicationQuery::CreateNewLDAPOperation()
|
||||
nsresult nsAbLDAPReplicationQuery::ConnectToLDAPServer()
|
||||
{
|
||||
nsresult rv;
|
||||
nsCOMPtr <nsILDAPMessageListener> oldListener;
|
||||
mOperation->GetMessageListener(getter_AddRefs(oldListener));
|
||||
// release old and create a new instance
|
||||
mOperation = do_CreateInstance(NS_LDAPOPERATION_CONTRACTID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
return mOperation->Init(mConnection, oldListener, nsnull);
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP nsAbLDAPReplicationQuery::ConnectToLDAPServer(nsILDAPURL *aURL, const nsACString & aAuthDN)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aURL);
|
||||
if (!mInitialized)
|
||||
if (!mInitialized || !mURL)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
nsCAutoString host;
|
||||
nsresult rv = aURL->GetHost(host);
|
||||
nsresult rv = mURL->GetHost(host);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
if (host.IsEmpty())
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
|
||||
PRInt32 port;
|
||||
rv = aURL->GetPort(&port);
|
||||
rv = mURL->GetPort(&port);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
if (!port)
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
|
||||
PRUint32 options;
|
||||
rv = aURL->GetOptions(&options);
|
||||
rv = mURL->GetOptions(&options);
|
||||
if (NS_FAILED(rv))
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
|
||||
nsCOMPtr<nsILDAPMessageListener> mDp = do_QueryInterface(mDataProcessor,
|
||||
&rv);
|
||||
if (NS_FAILED(rv))
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
|
||||
|
@ -167,7 +151,7 @@ NS_IMETHODIMP nsAbLDAPReplicationQuery::ConnectToLDAPServer(nsILDAPURL *aURL, co
|
|||
nsCOMPtr<nsILDAPMessageListener> listener;
|
||||
rv = NS_GetProxyForObject(NS_PROXY_TO_CURRENT_THREAD,
|
||||
NS_GET_IID(nsILDAPMessageListener),
|
||||
NS_STATIC_CAST(nsILDAPMessageListener*, mDataProcessor),
|
||||
mDp,
|
||||
NS_PROXY_SYNC | NS_PROXY_ALWAYS,
|
||||
getter_AddRefs(listener));
|
||||
if (!listener)
|
||||
|
@ -176,20 +160,9 @@ NS_IMETHODIMP nsAbLDAPReplicationQuery::ConnectToLDAPServer(nsILDAPURL *aURL, co
|
|||
// this could be a rebind call
|
||||
PRInt32 replicationState = nsIAbLDAPProcessReplicationData::kIdle;
|
||||
rv = mDataProcessor->GetReplicationState(&replicationState);
|
||||
if(NS_FAILED(rv))
|
||||
if (NS_FAILED(rv) ||
|
||||
replicationState != nsIAbLDAPProcessReplicationData::kIdle)
|
||||
return rv;
|
||||
if((replicationState != nsIAbLDAPProcessReplicationData::kIdle))
|
||||
{
|
||||
// release old and create a new instance
|
||||
mConnection = do_CreateInstance(NS_LDAPCONNECTION_CONTRACTID, &rv);
|
||||
if(NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
// release old and create a new instance
|
||||
mOperation = do_CreateInstance(NS_LDAPOPERATION_CONTRACTID, &rv);
|
||||
if(NS_FAILED(rv))
|
||||
return rv;
|
||||
}
|
||||
|
||||
PRUint32 protocolVersion;
|
||||
rv = mDirectory->GetProtocolVersion(&protocolVersion);
|
||||
|
@ -198,7 +171,7 @@ NS_IMETHODIMP nsAbLDAPReplicationQuery::ConnectToLDAPServer(nsILDAPURL *aURL, co
|
|||
// initialize the LDAP connection
|
||||
return mConnection->Init(host.get(), port,
|
||||
(options & nsILDAPURL::OPT_SECURE) ? PR_TRUE : PR_FALSE,
|
||||
aAuthDN, listener, nsnull, protocolVersion);
|
||||
mLogin, listener, nsnull, protocolVersion);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAbLDAPReplicationQuery::Init(const nsACString & aPrefName, nsIWebProgressListener *aProgressListener)
|
||||
|
@ -212,55 +185,21 @@ NS_IMETHODIMP nsAbLDAPReplicationQuery::Init(const nsACString & aPrefName, nsIWe
|
|||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
mDataProcessor = do_CreateInstance(NS_ABLDAP_PROCESSREPLICATIONDATA_CONTRACTID, &rv);
|
||||
mDataProcessor =
|
||||
do_CreateInstance(NS_ABLDAP_PROCESSREPLICATIONDATA_CONTRACTID, &rv);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
// 'this' initialized
|
||||
mInitialized = PR_TRUE;
|
||||
|
||||
return mDataProcessor->Init(this, aProgressListener);
|
||||
return mDataProcessor->Init(mDirectory, mConnection, mURL, this,
|
||||
aProgressListener);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAbLDAPReplicationQuery::DoReplicationQuery()
|
||||
{
|
||||
return ConnectToLDAPServer(mURL, EmptyCString());
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAbLDAPReplicationQuery::QueryAllEntries()
|
||||
{
|
||||
if (!mInitialized)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
// get the search filter associated with the directory server url;
|
||||
//
|
||||
nsCAutoString urlFilter;
|
||||
nsresult rv = mURL->GetFilter(urlFilter);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
nsCAutoString dn;
|
||||
rv = mURL->GetDn(dn);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
if (dn.IsEmpty())
|
||||
return NS_ERROR_UNEXPECTED;
|
||||
|
||||
PRInt32 scope;
|
||||
rv = mURL->GetScope(&scope);
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
CharPtrArrayGuard attributes;
|
||||
rv = mURL->GetAttributes(attributes.GetSizeAddr(), attributes.GetArrayAddr());
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
|
||||
rv = CreateNewLDAPOperation();
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
return mOperation->SearchExt(dn, scope, urlFilter,
|
||||
attributes.GetSize(), attributes.GetArray(),
|
||||
0, 0);
|
||||
return ConnectToLDAPServer();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAbLDAPReplicationQuery::CancelQuery()
|
||||
|
@ -275,7 +214,7 @@ NS_IMETHODIMP nsAbLDAPReplicationQuery::Done(PRBool aSuccess)
|
|||
{
|
||||
if (!mInitialized)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
nsCOMPtr<nsIAbLDAPReplicationService> replicationService =
|
||||
do_GetService(NS_ABLDAP_REPLICATIONSERVICE_CONTRACTID, &rv);
|
||||
|
@ -284,46 +223,3 @@ NS_IMETHODIMP nsAbLDAPReplicationQuery::Done(PRBool aSuccess)
|
|||
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
NS_IMETHODIMP nsAbLDAPReplicationQuery::GetOperation(nsILDAPOperation * *aOperation)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aOperation);
|
||||
if (!mInitialized)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
NS_IF_ADDREF(*aOperation = mOperation);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAbLDAPReplicationQuery::GetConnection(nsILDAPConnection * *aConnection)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aConnection);
|
||||
if (!mInitialized)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
NS_IF_ADDREF(*aConnection = mConnection);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAbLDAPReplicationQuery::GetReplicationURL(nsILDAPURL * *aReplicationURL)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aReplicationURL);
|
||||
if (!mInitialized)
|
||||
return NS_ERROR_NOT_INITIALIZED;
|
||||
|
||||
NS_IF_ADDREF(*aReplicationURL = mURL);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP nsAbLDAPReplicationQuery::GetLDAPDirectory(nsIAbLDAPDirectory * *aDirectory)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aDirectory);
|
||||
|
||||
NS_IF_ADDREF(*aDirectory = mDirectory);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
|
|
@ -57,7 +57,7 @@ public:
|
|||
nsAbLDAPReplicationQuery();
|
||||
|
||||
nsresult InitLDAPData();
|
||||
nsresult CreateNewLDAPOperation();
|
||||
nsresult ConnectToLDAPServer();
|
||||
|
||||
protected :
|
||||
// pointer to interfaces used by this object
|
||||
|
@ -68,8 +68,9 @@ protected :
|
|||
|
||||
nsCOMPtr<nsIAbLDAPProcessReplicationData> mDataProcessor;
|
||||
|
||||
PRBool mInitialized;
|
||||
nsCString mDirPrefName;
|
||||
PRBool mInitialized;
|
||||
nsCString mDirPrefName;
|
||||
nsCString mLogin;
|
||||
};
|
||||
|
||||
#endif // nsAbLDAPReplicationQuery_h__
|
||||
|
|
Загрузка…
Ссылка в новой задаче