mirror of
https://github.com/rn10950/RetroZilla.git
synced 2024-11-13 03:10:10 +01:00
449 lines
17 KiB
C++
449 lines
17 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/* ***** BEGIN LICENSE BLOCK *****
|
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
*
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
* http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
* for the specific language governing rights and limitations under the
|
|
* License.
|
|
*
|
|
* The Original Code is mozilla.org code.
|
|
*
|
|
* The Initial Developer of the Original Code is
|
|
* Netscape Communications Corporation.
|
|
* Portions created by the Initial Developer are Copyright (C) 1999
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*
|
|
* Alternatively, the contents of this file may be used under the terms of
|
|
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
|
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
* of those above. If you wish to allow use of your version of this file only
|
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
* use your version of this file under the terms of the MPL, indicate your
|
|
* decision by deleting the provisions above and replace them with the notice
|
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
* the provisions above, a recipient may use your version of this file under
|
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
*
|
|
* ***** END LICENSE BLOCK ***** */
|
|
|
|
#ifndef _NSDIRPREFS_H_
|
|
#define _NSDIRPREFS_H_
|
|
|
|
class nsVoidArray;
|
|
class nsIPref;
|
|
|
|
#define kPreviousListVersion 2
|
|
#define kCurrentListVersion 3
|
|
#define PREF_LDAP_GLOBAL_TREE_NAME "ldap_2"
|
|
#define PREF_LDAP_VERSION_NAME "ldap_2.version"
|
|
#define PREF_LDAP_SERVER_TREE_NAME "ldap_2.servers"
|
|
|
|
/* RDF roor for all types of address books */
|
|
/* use this to get all directories, create new directory*/
|
|
#define kAllDirectoryRoot "moz-abdirectory://"
|
|
|
|
#define kMDBDirectoryRoot "moz-abmdbdirectory://"
|
|
#define kMDBDirectoryRootLen 21
|
|
|
|
#define kLDAPDirectoryRoot "moz-abldapdirectory://"
|
|
#define kLDAPDirectoryRootLen 22
|
|
|
|
#define kPersonalAddressbook "abook.mab"
|
|
#define kPersonalAddressbookUri "moz-abmdbdirectory://abook.mab"
|
|
#define kCollectedAddressbook "history.mab"
|
|
#define kCollectedAddressbookUri "moz-abmdbdirectory://history.mab"
|
|
|
|
|
|
#define kABFileName_PreviousSuffix ".na2" /* final v2 address book format */
|
|
#define kABFileName_PreviousSuffixLen 4
|
|
#define kABFileName_CurrentSuffix ".mab" /* v3 address book extension */
|
|
#define kMainLdapAddressBook "ldap.mab" /* v3 main ldap address book file */
|
|
|
|
/* DIR_Server.dirType */
|
|
typedef enum
|
|
{
|
|
LDAPDirectory,
|
|
HTMLDirectory,
|
|
PABDirectory,
|
|
MAPIDirectory,
|
|
FixedQueryLDAPDirectory = 777
|
|
} DirectoryType;
|
|
|
|
typedef enum
|
|
{
|
|
cn,
|
|
givenname,
|
|
sn,
|
|
mail,
|
|
telephonenumber, /* work */
|
|
o,
|
|
ou,
|
|
l,
|
|
street,
|
|
auth,
|
|
/* mscott: I've added these extra DIR_AttributeIDs because the new address book can handle these */
|
|
carlicense,
|
|
businesscategory,
|
|
departmentnumber,
|
|
description,
|
|
employeetype,
|
|
facsimiletelephonenumber,
|
|
/* jpegPhoto */
|
|
manager,
|
|
objectclass,
|
|
postaladdress,
|
|
postalcode,
|
|
secretary,
|
|
title,
|
|
custom1,
|
|
custom2,
|
|
custom3,
|
|
custom4,
|
|
custom5,
|
|
nickname, /* only valid on address book directories as LDAP does not have a nick name field */
|
|
mobiletelephonenumber, /* cell phone */
|
|
pager,
|
|
homephone
|
|
} DIR_AttributeId;
|
|
|
|
/* these enumerated types are returned by DIR_ValidateDirectoryDescription for validating a description name */
|
|
typedef enum
|
|
{
|
|
DIR_ValidDescription = 0,
|
|
DIR_DuplicateDescription,
|
|
DIR_InvalidDescription
|
|
} DIR_DescriptionCode;
|
|
|
|
typedef enum
|
|
{
|
|
idNone = 0, /* Special value */
|
|
idPrefName,
|
|
idPosition,
|
|
idRefCount,
|
|
idDescription,
|
|
idServerName,
|
|
idSearchBase,
|
|
idFileName,
|
|
idPort,
|
|
idMaxHits,
|
|
idUri,
|
|
idLastSearchString,
|
|
idType,
|
|
idCSID,
|
|
idLocale,
|
|
idPositionLocked,
|
|
idDeletable,
|
|
idStopFiltersOnHit,
|
|
idIsOffline,
|
|
idIsSecure,
|
|
idVLVDisabled,
|
|
idSaveResults,
|
|
idEfficientWildcards,
|
|
idEnableAuth,
|
|
idSavePassword,
|
|
idCustomFilters,
|
|
idCustomAttributes,
|
|
idAutoCompleteNever,
|
|
idAutoCompleteEnabled,
|
|
idAutoCompleteFilter,
|
|
idTokenSeps,
|
|
idColumnAttributes,
|
|
idDnAttributes,
|
|
idDnAttributesCount,
|
|
idSuppressedAttributes,
|
|
idSuppressedAttributesCount,
|
|
idUriAttributes,
|
|
idUriAttributesCount,
|
|
idBasicSearchAttributes,
|
|
idBasicSearchAttributesCount,
|
|
idCustomDisplayUrl,
|
|
idAuthDn,
|
|
idPassword,
|
|
idSearchPairList,
|
|
idReplNever,
|
|
idReplEnabled,
|
|
idReplDescription,
|
|
idReplFileName,
|
|
idReplFilter,
|
|
idReplLastChangeNumber,
|
|
idReplDataVersion,
|
|
idReplSyncURL,
|
|
idReplExcludedAttributes,
|
|
idReplExcludedAttributesCount,
|
|
idPalmCategory,
|
|
idPalmSyncTimeStamp,
|
|
idProtocolVersion
|
|
} DIR_PrefId;
|
|
|
|
|
|
typedef struct _DIR_ReplicationInfo
|
|
|
|
{
|
|
char *description; /* Human readable description of replica */
|
|
char *fileName; /* File name of replication database */
|
|
char *filter; /* LDAP filter string which constrains the repl search */
|
|
PRInt32 lastChangeNumber; /* Last change we saw -- start replicating here */
|
|
char *syncURL; /* Points to the server to use for replication */
|
|
char *dataVersion; /* LDAP server's scoping of the lastChangeNumber */
|
|
/* Changes when the server's DB gets reloaded from LDIF */
|
|
char **excludedAttributes; /* List of attributes we shouldn't replicate */
|
|
PRInt32 excludedAttributesCount; /* Number of attributes we shouldn't replicat */
|
|
} DIR_ReplicationInfo;
|
|
|
|
#define DIR_Server_typedef 1 /* this quiets a redeclare warning in libaddr */
|
|
|
|
typedef struct DIR_Server
|
|
{
|
|
/* Housekeeping fields */
|
|
char *prefName; /* preference name, this server's subtree */
|
|
PRInt32 position; /* relative position in server list */
|
|
PRUint32 refCount; /* Use count for server */
|
|
|
|
/* General purpose fields */
|
|
char *description; /* human readable name */
|
|
char *serverName; /* network host name */
|
|
char *searchBase; /* DN suffix to search at */
|
|
char *fileName; /* XP path name of local DB */
|
|
PRInt32 port; /* network port number */
|
|
PRInt32 maxHits; /* maximum number of hits to return */
|
|
char *lastSearchString; /* required if saving results */
|
|
DirectoryType dirType;
|
|
PRInt16 csid; /* LDAP entries' codeset (normally UTF-8) */
|
|
char *locale; /* the locale associated with the address book or directory */
|
|
char *uri; // URI of the address book
|
|
|
|
/* Flags */
|
|
/* TBD: All the PRBool fields should eventually merge into "flags" */
|
|
PRUint32 flags;
|
|
PRPackedBool stopFiltersOnHit;
|
|
PRPackedBool isOffline;
|
|
PRPackedBool isSecure; /* use SSL? */
|
|
PRPackedBool saveResults;
|
|
PRPackedBool efficientWildcards; /* server can match substrings */
|
|
PRPackedBool enableAuth; /* AUTH: Use DN/password when binding? */
|
|
PRPackedBool savePassword; /* AUTH: Remember DN and password? */
|
|
|
|
/* site-configurable attributes and filters */
|
|
nsVoidArray *customFilters;
|
|
nsVoidArray *customAttributes;
|
|
char *tokenSeps;
|
|
char *autoCompleteFilter;
|
|
|
|
/* site-configurable display column attributes */
|
|
char *columnAttributes; /* comma separated list of display columns */
|
|
|
|
/* site-configurable list of attributes whose values are DNs */
|
|
char **dnAttributes;
|
|
PRInt32 dnAttributesCount;
|
|
|
|
/* site-configurable list of attributes we shouldn't display in HTML */
|
|
char **suppressedAttributes;
|
|
PRInt32 suppressedAttributesCount;
|
|
|
|
/* site-configurable list of attributes that contain URLs */
|
|
char **uriAttributes;
|
|
PRInt32 uriAttributesCount;
|
|
|
|
/* site-configurable list of attributes for the Basic Search dialog */
|
|
DIR_AttributeId *basicSearchAttributes;
|
|
PRInt32 basicSearchAttributesCount;
|
|
|
|
/* site-configurable URL to open LDAP results */
|
|
char *customDisplayUrl;
|
|
|
|
/* authentication fields */
|
|
char *authDn; /* DN to give to authenticate as */
|
|
char *password; /* Password for the DN */
|
|
|
|
/* Replication fields */
|
|
DIR_ReplicationInfo *replInfo;
|
|
|
|
/* VLV fields */
|
|
char *searchPairList;
|
|
|
|
/* fields for palm Sync */
|
|
PRInt32 PalmCategoryId;
|
|
PRUint32 PalmSyncTimeStamp;
|
|
} DIR_Server;
|
|
|
|
/* We are developing a new model for managing DIR_Servers. In the 4.0x world, the FEs managed each list.
|
|
Calls to FE_GetDirServer caused the FEs to manage and return the DIR_Server list. In our new view of the
|
|
world, the back end does most of the list management so we are going to have the back end create and
|
|
manage the list. Replace calls to FE_GetDirServers() with DIR_GetDirServers(). */
|
|
|
|
nsVoidArray* DIR_GetDirectories();
|
|
nsresult DIR_GetDirServers();
|
|
nsresult DIR_ShutDown(void); /* FEs should call this when the app is shutting down. It frees all DIR_Servers regardless of ref count values! */
|
|
|
|
nsresult DIR_AddNewAddressBook(const PRUnichar *dirName, const char *fileName, PRBool migrating, const char * uri, int maxHits, const char * authDn, DirectoryType dirType, DIR_Server** pServer);
|
|
nsresult DIR_ContainsServer(DIR_Server* pServer, PRBool *hasDir);
|
|
|
|
nsresult DIR_DecrementServerRefCount (DIR_Server *);
|
|
nsresult DIR_IncrementServerRefCount (DIR_Server *);
|
|
|
|
/* We are trying to phase out use of FE_GetDirServers. The back end is now managing the dir server list. So you should
|
|
be calling DIR_GetDirServers instead. */
|
|
|
|
nsVoidArray * FE_GetDirServers(void);
|
|
|
|
/* Since the strings in DIR_Server are allocated, we have bottleneck
|
|
* routines to help with memory mgmt
|
|
*/
|
|
|
|
nsresult DIR_InitServerWithType(DIR_Server * server, DirectoryType dirType);
|
|
nsresult DIR_InitServer (DIR_Server *);
|
|
nsresult DIR_CopyServer (DIR_Server *in, DIR_Server **out);
|
|
PRBool DIR_AreServersSame (DIR_Server *first, DIR_Server *second);
|
|
DIR_Server *DIR_LookupServer(char *serverName, PRInt32 port, char *searchBase);
|
|
|
|
nsresult DIR_DeleteServer (DIR_Server *);
|
|
nsresult DIR_DeleteServerFromList (DIR_Server *);
|
|
nsresult DIR_DeleteServerList(nsVoidArray *wholeList);
|
|
|
|
#define DIR_POS_APPEND 0x80000000
|
|
#define DIR_POS_DELETE 0x80000001
|
|
PRBool DIR_SetServerPosition(nsVoidArray *wholeList, DIR_Server *server, PRInt32 position);
|
|
|
|
/* These two routines should be called to initialize and save
|
|
* directory preferences from the XP Java Script preferences
|
|
*/
|
|
nsresult DIR_GetServerPreferences(nsVoidArray** list);
|
|
nsresult DIR_SaveServerPreferences(nsVoidArray *wholeList);
|
|
void DIR_GetPrefsForOneServer(DIR_Server *server, PRBool reinitialize, PRBool oldstyle);
|
|
void DIR_SavePrefsForOneServer(DIR_Server *server);
|
|
|
|
/* This routine will clean up files for deleted directories */
|
|
|
|
/* you should never need to call this function!!! Just set the clear
|
|
flag for the entry you want cleaned up. When all references to
|
|
the server are released, the object will be cleaned up */
|
|
nsresult DIR_CleanUpServerPreferences(nsVoidArray *deletedList);
|
|
void DIR_ClearPrefBranch(const char *branch);
|
|
|
|
/* Returns an allocated list of a subset of the unified list of DIR servers.
|
|
*/
|
|
nsresult DIR_GetDirServerSubset(nsVoidArray *wholeList, nsVoidArray *subList, PRUint32 flags);
|
|
PRInt32 DIR_GetDirServerSubsetCount(nsVoidArray *wholeList, PRUint32 flags);
|
|
|
|
/* We need to validate directory descriptions to make sure they are unique. They can use this API for that */
|
|
DIR_DescriptionCode DIR_ValidateDirectoryDescription(nsVoidArray * wholeList, DIR_Server * serverToValidate);
|
|
|
|
char *DIR_CreateServerPrefName (DIR_Server *server, char *name);
|
|
void DIR_SetServerFileName(DIR_Server* pServer, const char* leafName);
|
|
|
|
/* APIs for site-configurability of LDAP attribute names and
|
|
* search filter behavior.
|
|
*
|
|
* Strings are NOT allocated, and arrays are NULL-terminated
|
|
*/
|
|
const char *DIR_GetAttributeName (DIR_Server *server, DIR_AttributeId id);
|
|
const char **DIR_GetAttributeStrings (DIR_Server *server, DIR_AttributeId id);
|
|
const char *DIR_GetFirstAttributeString (DIR_Server *server, DIR_AttributeId id);
|
|
const char *DIR_GetFilterString (DIR_Server *server);
|
|
const char *DIR_GetReplicationFilter (DIR_Server *server);
|
|
const char *DIR_GetTokenSeparators (DIR_Server *server);
|
|
PRBool DIR_RepeatFilterForTokens (DIR_Server *server, const char *filter);
|
|
PRBool DIR_SubstStarsForSpaces (DIR_Server *server, const char *filter);
|
|
PRBool DIR_UseCustomAttribute (DIR_Server *server, DIR_AttributeId id);
|
|
|
|
PRBool DIR_IsDnAttribute (DIR_Server *s, const char *attr);
|
|
PRBool DIR_IsAttributeExcludedFromHtml (DIR_Server *s, const char *attr);
|
|
PRBool DIR_IsUriAttribute (DIR_Server *s, const char *attrib);
|
|
|
|
nsresult DIR_AttributeNameToId (DIR_Server *server, const char *attrName, DIR_AttributeId *id);
|
|
|
|
/* APIs for authentication */
|
|
void DIR_SetAuthDN (DIR_Server *s, const char *dn);
|
|
void DIR_SetPassword (DIR_Server *s, const char *password);
|
|
|
|
/* APIs for unescaping LDAP special chars */
|
|
char *DIR_Unescape (const char *src, PRBool makeHtml);
|
|
PRBool DIR_IsEscapedAttribute (DIR_Server *s, const char *attrib);
|
|
|
|
/* API for building a URL */
|
|
char *DIR_BuildUrl (DIR_Server *s, const char *dn, PRBool forAddToAB);
|
|
|
|
/* Walks the list enforcing the rule that only one LDAP server can be configured for autocomplete */
|
|
void DIR_SetAutoCompleteEnabled (nsVoidArray *list, DIR_Server *server, PRBool enabled);
|
|
|
|
/* Callback Notification Flags/Types/Functions */
|
|
#define DIR_NOTIFY_ADD 0x00000001
|
|
#define DIR_NOTIFY_DELETE 0x00000002
|
|
#define DIR_NOTIFY_PROPERTY_CHANGE 0x00000004
|
|
#define DIR_NOTIFY_SCRAMBLE 0x00000008
|
|
#define DIR_NOTIFY_ALL 0x0000000F
|
|
|
|
typedef PRInt32 (*DIR_NOTIFICATION_FN)(DIR_Server *server, PRUint32 flag, DIR_PrefId id, void *inst_data);
|
|
|
|
PRBool DIR_RegisterNotificationCallback(DIR_NOTIFICATION_FN fn, PRUint32 flags, void *inst_data);
|
|
PRBool DIR_DeregisterNotificationCallback(DIR_NOTIFICATION_FN fn, void *inst_data);
|
|
PRBool DIR_SendNotification(DIR_Server *server, PRUint32 flag, DIR_PrefId id);
|
|
|
|
DIR_PrefId DIR_AtomizePrefName(const char *prefname);
|
|
char *DIR_CopyServerStringPref(DIR_Server *server, DIR_PrefId prefid, PRInt16 csid);
|
|
PRBool DIR_SetServerStringPref(DIR_Server *server, DIR_PrefId prefid, char *pref, PRInt16 csid);
|
|
|
|
/* Flags manipulation
|
|
*/
|
|
#define DIR_AUTO_COMPLETE_ENABLED 0x00000001 /* Directory is configured for autocomplete addressing */
|
|
#define DIR_ENABLE_AUTH 0x00000002 /* Directory is configured for LDAP simple authentication */
|
|
#define DIR_SAVE_PASSWORD 0x00000004
|
|
#define DIR_IS_SECURE 0x00000008
|
|
#define DIR_SAVE_RESULTS 0x00000010 /* not used by the FEs */
|
|
#define DIR_EFFICIENT_WILDCARDS 0x00000020 /* not used by the FEs */
|
|
#define DIR_LDAP_VERSION3 0x00000040
|
|
#define DIR_LDAP_VLV_DISABLED 0x00000080 /* not used by the FEs */
|
|
#define DIR_LDAP_VLV_SUPPORTED 0x00000100 /* not used by the FEs */
|
|
#define DIR_LDAP_ROOTDSE_PARSED 0x00000200 /* not used by the FEs */
|
|
#define DIR_AUTO_COMPLETE_NEVER 0x00000400 /* Directory is never to be used for autocompletion */
|
|
#define DIR_REPLICATION_ENABLED 0x00000800 /* Directory is configured for offline use */
|
|
#define DIR_REPLICATE_NEVER 0x00001000 /* Directory is never to be replicated */
|
|
#define DIR_UNDELETABLE 0x00002000
|
|
#define DIR_POSITION_LOCKED 0x00004000
|
|
|
|
/* The following flags are not used by the FEs. The are operational flags
|
|
* that get set in occasionally to keep track of special states.
|
|
*/
|
|
/* Set when a DIR_Server is being saved. Keeps the pref callback code from
|
|
* reinitializing the DIR_Server structure, which in this case would always
|
|
* be a waste of time.
|
|
*/
|
|
#define DIR_SAVING_SERVER 0x40000000
|
|
/* Set by back end when all traces of the DIR_Server need to be removed (i.e.
|
|
* destroying the file) when the last reference to to the DIR_Server is
|
|
* released. This is used primarily when the user decides to delete the
|
|
* DIR_Server but it is referenced by other objects. When no one is using the
|
|
* dir server anymore, we destroy the file and clear the server
|
|
*/
|
|
#define DIR_CLEAR_SERVER 0x80000000
|
|
|
|
|
|
/* DIR_GetDirServerSubset flags
|
|
*/
|
|
#define DIR_SUBSET_HTML_ALL 0x00000001
|
|
#define DIR_SUBSET_LDAP_ALL 0x00000002
|
|
#define DIR_SUBSET_LDAP_AUTOCOMPLETE 0x00000004
|
|
#define DIR_SUBSET_LDAP_REPLICATE 0x00000008
|
|
#define DIR_SUBSET_PAB_ALL 0x00000010
|
|
|
|
|
|
PRBool DIR_TestFlag (DIR_Server *server, PRUint32 flag);
|
|
void DIR_SetFlag (DIR_Server *server, PRUint32 flag);
|
|
void DIR_ClearFlag (DIR_Server *server, PRUint32 flag);
|
|
void DIR_ForceFlag (DIR_Server *server, PRUint32 flag, PRBool forceOnOrOff);
|
|
|
|
char *DIR_ConvertToServerCharSet (DIR_Server *s, char *src, PRInt16 srcCsid);
|
|
char *DIR_ConvertFromServerCharSet (DIR_Server *s, char *src, PRInt16 dstCsid);
|
|
char *DIR_ConvertString(PRInt16 srcCSID, PRInt16 dstCSID, const char *string);
|
|
|
|
#endif /* dirprefs.h */
|