nsresult nsAbLDAPReplicationQuery::InitLDAPData() { nsCAutoString fileName; nsresult rv = mDirectory->GetReplicationFileName(fileName); NS_ENSURE_SUCCESS(rv, rv); // this is done here to take care of the problem related to bug # 99124. // earlier versions of Mozilla could have the fileName associated with the directory // to be abook.mab which is the profile's personal addressbook. If the pref points to // it, calls nsDirPrefs to generate a new server filename. if (fileName.IsEmpty() || fileName.EqualsLiteral(kPersonalAddressbook)) { // Ensure fileName is empty for DIR_GenerateAbFileName to work // correctly. fileName.Truncate(); nsCOMPtr<nsIAbDirectory> standardDir(do_QueryInterface(mDirectory, &rv)); NS_ENSURE_SUCCESS(rv, rv); nsCString dirPrefId; rv = standardDir->GetDirPrefId(dirPrefId); NS_ENSURE_SUCCESS(rv, rv); // XXX This should be replaced by a local function at some stage. // For now we'll continue using the nsDirPrefs version. DIR_Server* server = DIR_GetServerFromList(dirPrefId.get()); if (server) { DIR_SetServerFileName(server); // Now ensure the prefs are saved DIR_SavePrefsForOneServer(server); } } rv = mDirectory->SetReplicationFileName(fileName); NS_ENSURE_SUCCESS(rv, rv); rv = mDirectory->GetLDAPURL(getter_AddRefs(mURL)); NS_ENSURE_SUCCESS(rv, rv); rv = mDirectory->GetAuthDn(mLogin); NS_ENSURE_SUCCESS(rv, rv); mConnection = do_CreateInstance(NS_LDAPCONNECTION_CONTRACTID, &rv); if (NS_FAILED(rv)) return rv; mOperation = do_CreateInstance(NS_LDAPOPERATION_CONTRACTID, &rv); return rv; }
static void DIR_GetPrefsForOneServer(DIR_Server *server) { nsresult rv; nsCOMPtr<nsIPrefBranch> pPref(do_GetService(NS_PREFSERVICE_CONTRACTID, &rv)); if (NS_FAILED(rv)) return; char *prefstring = server->prefName; // this call fills in tempstring with the position pref, and // we then check to see if it's locked. server->position = DIR_GetIntPref (prefstring, "position", kDefaultPosition); // For default address books, this will get the name from the chrome // file referenced, for other address books it'll just retrieve it from prefs // as normal. server->description = DIR_GetDescription(prefstring); server->dirType = (DirectoryType)DIR_GetIntPref (prefstring, "dirType", LDAPDirectory); server->fileName = DIR_GetStringPref (prefstring, "filename", ""); // if we don't have a file name try and get one if (!server->fileName || !*(server->fileName)) DIR_SetServerFileName (server); if (server->fileName && *server->fileName) DIR_ConvertServerFileName(server); // the string "s" is the default uri ( <scheme> + "://" + <filename> ) nsCString s; switch (server->dirType) { case PABDirectory: case MAPIDirectory: s.Append(kMDBDirectoryRoot); break; case IMDirectory: s.Append(kIMDirectoryRoot); break; default: #if defined(MOZ_LDAP_XPCOM) s.Append(kLDAPDirectoryRoot); #else s.Append(kAllDirectoryRoot); #endif break; } s.Append (server->fileName); server->uri = DIR_GetStringPref (prefstring, "uri", s.get ()); }