Beispiel #1
0
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;
}
Beispiel #2
0
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;
}
Beispiel #3
0
/* 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;
}
Beispiel #4
0
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);
}