static nsresult dir_GetPrefs(nsVoidArray **list) { nsresult rv; nsCOMPtr<nsIPrefBranch> pPref(do_GetService(NS_PREFSERVICE_CONTRACTID, &rv)); if (NS_FAILED(rv)) return rv; (*list) = new nsVoidArray(); if (!(*list)) return NS_ERROR_OUT_OF_MEMORY; char **children; PRUint32 prefCount; rv = dir_GetChildList(NS_LITERAL_CSTRING(PREF_LDAP_SERVER_TREE_NAME "."), &prefCount, &children); if (NS_FAILED(rv)) return rv; /* TBD: Temporary code to read broken "ldap" preferences tree. * Remove line with if statement after M10. */ if (dir_UserId == 0) pPref->GetIntPref(PREF_LDAP_GLOBAL_TREE_NAME".user_id", &dir_UserId); for (PRUint32 i = 0; i < prefCount; ++i) { DIR_Server *server; server = (DIR_Server *)PR_Calloc(1, sizeof(DIR_Server)); if (server) { DIR_InitServer(server); server->prefName = strdup(children[i]); DIR_GetPrefsForOneServer(server); if (server->description && server->description[0] && ((server->dirType == PABDirectory || server->dirType == IMDirectory || server->dirType == MAPIDirectory || server->dirType == FixedQueryLDAPDirectory || // this one might go away server->dirType == LDAPDirectory))) { if (!dir_IsServerDeleted(server)) { (*list)->AppendElement(server); } else DIR_DeleteServer(server); } else { DIR_DeleteServer(server); } } } NS_FREE_XPCOM_ALLOCATED_POINTER_ARRAY(prefCount, children); return NS_OK; }
nsresult DIR_AddNewAddressBook(const nsAString &dirName, const nsACString &fileName, const nsACString &uri, DirectoryType dirType, const nsACString &prefName, DIR_Server** pServer) { DIR_Server * server = (DIR_Server *) PR_Malloc(sizeof(DIR_Server)); if (!server) return NS_ERROR_OUT_OF_MEMORY; DIR_InitServer(server, dirType); if (!dir_ServerList) DIR_GetDirServers(); if (dir_ServerList) { NS_ConvertUTF16toUTF8 utf8str(dirName); server->description = ToNewCString(utf8str); server->position = kDefaultPosition; // don't set position so alphabetic sort will happen. if (!fileName.IsEmpty()) server->fileName = ToNewCString(fileName); else if (dirType == PABDirectory) DIR_SetFileName(&server->fileName, kPersonalAddressbook); else if (dirType == IMDirectory) DIR_SetFileName(&server->fileName, kIMAddressbook); else if (dirType == LDAPDirectory) DIR_SetFileName(&server->fileName, kMainLdapAddressBook); if (dirType != PABDirectory && dirType != IMDirectory) { if (!uri.IsEmpty()) server->uri = ToNewCString(uri); } if (!prefName.IsEmpty()) server->prefName = ToNewCString(prefName); dir_ServerList->AppendElement(server); DIR_SavePrefsForOneServer(server); *pServer = server; // save new address book into pref file return SavePrefsFile(); } return NS_ERROR_FAILURE; }
/* dir_ValidateAndAddNewServer * * This function verifies that the position, serverName and description values * are set for the given prefName. If they are then it adds the server to the * unified server list. */ static PRBool dir_ValidateAndAddNewServer(nsVoidArray *wholeList, const char *fullprefname) { PRBool rc = PR_FALSE; const char *endname = PL_strchr(&fullprefname[PL_strlen(PREF_LDAP_SERVER_TREE_NAME) + 1], '.'); if (endname) { char *prefname = (char *)PR_Malloc(endname - fullprefname + 1); if (prefname) { PRInt32 dirType; char *t1 = nsnull, *t2 = nsnull; PL_strncpyz(prefname, fullprefname, endname - fullprefname + 1); dirType = DIR_GetIntPref(prefname, "dirType", -1); if (dirType != -1 && DIR_GetIntPref(prefname, "position", 0) != 0 && (t1 = DIR_GetStringPref(prefname, "description", nsnull)) != nsnull) { if (dirType == PABDirectory || dirType == IMDirectory || (t2 = DIR_GetStringPref(prefname, "serverName", nsnull)) != nsnull) { DIR_Server *server = (DIR_Server *)PR_Malloc(sizeof(DIR_Server)); if (server) { DIR_InitServer(server, (DirectoryType)dirType); server->prefName = prefname; DIR_GetPrefsForOneServer(server); DIR_SetServerPosition(wholeList, server, server->position); rc = PR_TRUE; } PR_FREEIF(t2); } PR_Free(t1); } else PR_Free(prefname); } } return rc; }
void XFE_PrefsLdapPropDialog::cb_ok(Widget w, XtPointer closure, XtPointer callData) { XFE_PrefsLdapPropDialog *theDialog = (XFE_PrefsLdapPropDialog *)closure; PrefsDataLdapProp *fep = theDialog->getData(); Bool create = theDialog->getEditDir() ? False : True; DIR_Server *dir = 0; if (create) { dir = (DIR_Server *)XP_ALLOC(sizeof(DIR_Server)); DIR_InitServer(dir); } else { dir = theDialog->getEditDir(); XP_FREEIF(dir->description); XP_FREEIF(dir->serverName); XP_FREEIF(dir->searchBase); DIR_InitServer(dir); } char *desc = 0; char *server = 0; char *root = 0; char *port_num_text = 0; char *num_hits_text = 0; char dummy; int port_num = 0; int num_hits = 0; Boolean b; char temp[1024]; char *ptr; // TODO: error checking desc = fe_GetTextField(fep->desc_text); server = fe_GetTextField(fep->server_text); root = fe_GetTextField(fep->root_text); XtVaGetValues(fep->port_number_text, XmNvalue, &port_num_text, 0); XtVaGetValues(fep->number_of_hit_text, XmNvalue, &num_hits_text, 0); if (1 != sscanf(port_num_text, " %d %c", &port_num, &dummy) || port_num < 0) { // TODO: error } if (port_num_text) XtFree(port_num_text); if (1 == sscanf(num_hits_text, " %d %c", &num_hits, &dummy) && num_hits < 0) { // TODO: error } if (num_hits_text) XtFree(num_hits_text); if (ptr = XP_STRCHR(server, '.')) { XP_STRCPY(temp, ptr+1); if (ptr = XP_STRCHR(temp, '.')) { *ptr = '\0'; } } else { XP_STRCPY(temp, server); } dir->description = desc ? desc : XP_STRDUP(""); dir->serverName = server ? server : XP_STRDUP(""); dir->searchBase = root ? root : XP_STRDUP(""); // dir->htmlGateway = NULL; // no loner use dir->fileName = WH_FileName(WH_TempName(xpAddrBook, temp), xpAddrBook); dir->port = port_num; dir->maxHits = num_hits; XtVaGetValues(fep->secure_toggle, XmNset, &b, 0); dir->isSecure = b; #if 0 XtVaGetValues(fep->save_passwd_toggle, XmNset, &b, 0); dir->savePassword = b; #endif dir->dirType = LDAPDirectory; // Insert into list if this is create if (create) { XFE_PrefsPageMailNewsAddrBook *dir_page = theDialog->getAddrBookPage(); dir_page->insertDir(dir); } // Simulate a cancel theDialog->cb_cancel(w, closure, callData); }