openchangedb.c File Reference

OpenChange Dispatcher database routines. More...

#include <inttypes.h>
#include "mapiproxy/dcesrv_mapiproxy.h"
#include "mapiproxy/libmapiproxy/libmapiproxy.h"
#include "mapiproxy/servers/default/emsmdb/dcesrv_exchange_emsmdb.h"
#include "libmapi/libmapi.h"
#include "libmapi/libmapi_private.h"
#include "mapiproxy/libmapiproxy/backends/openchangedb_mysql.h"
#include "mapiproxy/libmapiproxy/backends/openchangedb_ldb.h"
#include "mapiproxy/libmapiproxy/backends/openchangedb_logger.h"

Functions

_PUBLIC_ enum MAPISTATUS openchangedb_create_folder (struct openchangedb_context *oc_ctx, const char *username, uint64_t parentFolderID, uint64_t fid, uint64_t changeNumber, const char *MAPIStoreURI, int systemIdx)
 
_PUBLIC_ enum MAPISTATUS openchangedb_create_mailbox (struct openchangedb_context *oc_ctx, const char *username, const char *organization_name, const char *group_name, uint64_t fid, const char *display_name)
 
_PUBLIC_ enum MAPISTATUS openchangedb_delete_folder (struct openchangedb_context *oc_ctx, const char *username, uint64_t fid)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_distinguishedName (TALLOC_CTX *parent_ctx, struct openchangedb_context *oc_ctx, uint64_t fid, char **distinguishedName)
 FIXME Not used anywhere. More...
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_fid (struct openchangedb_context *oc_ctx, const char *mapistoreURL, uint64_t *fidp)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_fid_by_name (struct openchangedb_context *oc_ctx, const char *username, uint64_t parent_fid, const char *foldername, uint64_t *fid)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_fid_from_partial_uri (struct openchangedb_context *oc_ctx, const char *partialURI, uint64_t *fid)
 FIXME Not used anywhere, remove it? More...
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_folder_count (struct openchangedb_context *oc_ctx, const char *username, uint64_t fid, uint32_t *RowCount)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_folder_property (TALLOC_CTX *parent_ctx, struct openchangedb_context *oc_ctx, const char *username, uint32_t proptag, uint64_t fid, void **data)
 
_PUBLIC_ const char ** openchangedb_get_folders_names (TALLOC_CTX *mem_ctx, struct openchangedb_context *oc_ctx, const char *locale, const char *type)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_indexing_url (struct openchangedb_context *oc_ctx, const char *username, const char **indexing_url)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_MailboxGuid (struct openchangedb_context *oc_ctx, const char *recipient, struct GUID *MailboxGUID)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_MailboxReplica (struct openchangedb_context *oc_ctx, const char *recipient, uint16_t *ReplID, struct GUID *ReplGUID)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_mapistoreURI (TALLOC_CTX *parent_ctx, struct openchangedb_context *oc_ctx, const char *username, uint64_t fid, char **mapistoreURL, bool mailboxstore)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_MAPIStoreURIs (struct openchangedb_context *oc_ctx, const char *username, TALLOC_CTX *mem_ctx, struct StringArrayW_r **urisP)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_message_count (struct openchangedb_context *oc_ctx, const char *username, uint64_t fid, uint32_t *RowCount, bool fai)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_mid_by_subject (struct openchangedb_context *oc_ctx, const char *username, uint64_t parent_fid, const char *subject, bool mailboxstore, uint64_t *mid)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_new_changeNumber (struct openchangedb_context *oc_ctx, const char *username, uint64_t *cn)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_new_changeNumbers (struct openchangedb_context *oc_ctx, TALLOC_CTX *mem_ctx, const char *username, uint64_t max, struct UI8Array_r **cns_p)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_new_public_folderID (struct openchangedb_context *oc_ctx, const char *username, uint64_t *fid)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_next_changeNumber (struct openchangedb_context *oc_ctx, const char *username, uint64_t *cn)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_parent_fid (struct openchangedb_context *oc_ctx, const char *username, uint64_t fid, uint64_t *parent_fidp, bool mailboxstore)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_PublicFolderID (struct openchangedb_context *oc_ctx, const char *username, uint32_t SystemIdx, uint64_t *FolderId)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_PublicFolderReplica (struct openchangedb_context *oc_ctx, const char *username, uint16_t *ReplID, struct GUID *ReplGUID)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_ReceiveFolder (TALLOC_CTX *parent_ctx, struct openchangedb_context *oc_ctx, const char *recipient, const char *MessageClass, uint64_t *fid, const char **ExplicitMessageClass)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_ReceiveFolderTable (TALLOC_CTX *mem_ctx, struct openchangedb_context *oc_ctx, const char *recipient, uint32_t *cValues, struct ReceiveFolder **entries)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_SpecialFolderID (struct openchangedb_context *oc_ctx, const char *recipient, uint32_t SystemIdx, uint64_t *FolderId)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_system_idx (struct openchangedb_context *oc_ctx, const char *username, uint64_t fid, int *system_idx_p)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_SystemFolderID (struct openchangedb_context *oc_ctx, const char *recipient, uint32_t SystemIdx, uint64_t *FolderId)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_table_property (TALLOC_CTX *parent_ctx, struct openchangedb_context *oc_ctx, const char *ldb_filter, uint32_t proptag, uint32_t pos, void **data)
 FIXME Not used anywhere, remove it? see mapiproxy/servers/default/emsmdb/emsmdbp_object.c +1712. More...
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_TransportFolder (struct openchangedb_context *oc_ctx, const char *recipient, uint64_t *FolderId)
 
_PUBLIC_ enum MAPISTATUS openchangedb_get_users_from_partial_uri (TALLOC_CTX *parent_ctx, struct openchangedb_context *oc_ctx, const char *partialURI, uint32_t *count, char ***MAPIStoreURI, char ***users)
 FIXME broken? mailboxDN not saved? More...
 
_PUBLIC_ enum MAPISTATUS openchangedb_initialize (TALLOC_CTX *mem_ctx, struct loadparm_context *lp_ctx, struct openchangedb_context **oc_ctx)
 
_PUBLIC_ bool openchangedb_is_public_folder_id (struct openchangedb_context *oc_ctx, uint64_t fid)
 
_PUBLIC_ enum MAPISTATUS openchangedb_lookup_folder_property (struct openchangedb_context *oc_ctx, uint32_t proptag, uint64_t fid)
 FIXME Not used anywhere. More...
 
_PUBLIC_ enum MAPISTATUS openchangedb_set_folder_properties (struct openchangedb_context *oc_ctx, const char *username, uint64_t fid, struct SRow *row)
 
_PUBLIC_ char * openchangedb_set_folder_property_data (TALLOC_CTX *mem_ctx, struct SPropValue *value)
 
_PUBLIC_ bool openchangedb_set_locale (struct openchangedb_context *oc_ctx, const char *username, uint32_t lcid)
 
_PUBLIC_ enum MAPISTATUS openchangedb_set_mapistoreURI (struct openchangedb_context *oc_ctx, const char *username, uint64_t fid, const char *mapistoreURL)
 
_PUBLIC_ enum MAPISTATUS openchangedb_set_ReceiveFolder (struct openchangedb_context *oc_ctx, const char *recipient, const char *MessageClass, uint64_t fid)
 
_PUBLIC_ enum MAPISTATUS openchangedb_set_system_idx (struct openchangedb_context *oc_ctx, const char *username, uint64_t fid, int system_idx)
 
_PUBLIC_ enum MAPISTATUS openchangedb_transaction_commit (struct openchangedb_context *oc_ctx)
 
_PUBLIC_ enum MAPISTATUS openchangedb_transaction_start (struct openchangedb_context *oc_ctx)
 

Variables

const char * nil_string = "<nil>"
 

Detailed Description

OpenChange Dispatcher database routines.

Function Documentation

◆ openchangedb_create_folder()

_PUBLIC_ enum MAPISTATUS openchangedb_create_folder ( struct openchangedb_context *  oc_ctx,
const char *  username,
uint64_t  parentFolderID,
uint64_t  fid,
uint64_t  changeNumber,
const char *  MAPIStoreURI,
int  systemIdx 
)

Create a folder in openchangedb

Parameters
oc_ctxpointer to the openchange DB context
usernameThe name of the mailbox where the parent folder is
parentFolderIDthe FID of the parent folder
fidthe FID of the folder to create
changeNumberthe change number
MAPIStoreURIthe mapistore URI to associate to this folder
systemIdxthe systemIdx value for the new folder
Returns
MAPISTORE_SUCCESS on success, otherwise MAPISTORE error

Referenced by emsmdbp_mailbox_provision(), emsmdbp_mailbox_provision_public_freebusy(), emsmdbp_object_folder_commit_creation(), and emsmdbp_object_move_folder_to_mapistore_root().

◆ openchangedb_create_mailbox()

_PUBLIC_ enum MAPISTATUS openchangedb_create_mailbox ( struct openchangedb_context *  oc_ctx,
const char *  username,
const char *  organization_name,
const char *  group_name,
uint64_t  fid,
const char *  display_name 
)

Create a mailbox in openchangedb

Parameters
oc_ctxpointer to the openchange DB context
usernamethe owner of the mailbox
organization_namename of the organization of the user
group_namename of the group where the organization of the user belongs
fidThe fid used for the mailbox
display_nameName of the mailbox
Returns
MAPISTORE_SUCCESS on success, otherwise MAPISTORE error

References EMSMDBP_MAILBOX_ROOT.

Referenced by emsmdbp_mailbox_provision().

◆ openchangedb_delete_folder()

_PUBLIC_ enum MAPISTATUS openchangedb_delete_folder ( struct openchangedb_context *  oc_ctx,
const char *  username,
uint64_t  fid 
)

Delete a folder

Parameters
oc_ctxpointer to the openchange DB context
usernamemailbox name where the folder is
fidthe record folder identifier to be deleted
Returns
MAPI_E_SUCCESS on success, otherwise MAPI error

Referenced by emsmdbp_folder_delete(), emsmdbp_folder_move_folder(), and emsmdbp_mailbox_provision().

◆ openchangedb_get_distinguishedName()

_PUBLIC_ enum MAPISTATUS openchangedb_get_distinguishedName ( TALLOC_CTX *  parent_ctx,
struct openchangedb_context *  oc_ctx,
uint64_t  fid,
char **  distinguishedName 
)

FIXME Not used anywhere.

Remove it?

Retrieve the distinguishedName associated to a mailbox system folder.

Parameters
parent_ctxpointer to the parent memory context
oc_ctxpointer to the openchange DB context
fidthe Folder identifier to search for
distinguishedNamepointer on pointer to the distinguishedName string the function returns
Returns
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

◆ openchangedb_get_fid()

_PUBLIC_ enum MAPISTATUS openchangedb_get_fid ( struct openchangedb_context *  oc_ctx,
const char *  mapistoreURL,
uint64_t *  fidp 
)

Retrieve the fid associated with a mapistore URI.

Parameters
oc_ctxpointer to the openchange DB context
mapistoreURLmapistore URI to look for
fidppointer to fid the function returns
Returns
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

Referenced by emsmdbp_get_fid_from_uri(), and emsmdbp_mailbox_provision().

◆ openchangedb_get_fid_by_name()

_PUBLIC_ enum MAPISTATUS openchangedb_get_fid_by_name ( struct openchangedb_context *  oc_ctx,
const char *  username,
uint64_t  parent_fid,
const char *  foldername,
uint64_t *  fid 
)

Retrieve the folder ID associated with a given folder name

This function looks up the specified foldername (as a PidTagDisplayName) and returns the associated folder ID. Note that folder names are only unique in the context of a parent folder, so the parent folder needs to be provided.

Parameters
oc_ctxpointer to the openchange DB context
usernamemailbox name where the folder is
parent_fidthe folder ID of the parent folder
foldernamethe name to look up
fidthe folder ID for the folder with the specified name (0 if not found)
Returns
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

Referenced by emsmdbp_mailbox_provision(), emsmdbp_mailbox_provision_public_freebusy(), emsmdbp_object_create_folder(), emsmdbp_object_get_fid_by_name(), and emsmdbp_object_move_folder_to_mapistore_root().

◆ openchangedb_get_fid_from_partial_uri()

_PUBLIC_ enum MAPISTATUS openchangedb_get_fid_from_partial_uri ( struct openchangedb_context *  oc_ctx,
const char *  partialURI,
uint64_t *  fid 
)

FIXME Not used anywhere, remove it?

Get fid given a partial MAPIStoreURI

Parameters
oc_ctxpointer to the openchange DB context
partialURIpartial MAPIStoreURI to look for
fidpointer on function result for the message class
Returns
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

◆ openchangedb_get_folder_count()

_PUBLIC_ enum MAPISTATUS openchangedb_get_folder_count ( struct openchangedb_context *  oc_ctx,
const char *  username,
uint64_t  fid,
uint32_t *  RowCount 
)

Retrieve the number of sub folders for a given fid

Parameters
oc_ctxpointer to the openchange DB context
usernamename of the mailbox where the folder is
fidthe folder identifier to use for the search
RowCountpointer to the returned number of results
Returns
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

Referenced by emsmdbp_folder_get_folder_count(), and emsmdbp_object_get_properties_systemspecialfolder().

◆ openchangedb_get_folder_property()

_PUBLIC_ enum MAPISTATUS openchangedb_get_folder_property ( TALLOC_CTX *  parent_ctx,
struct openchangedb_context *  oc_ctx,
const char *  username,
uint32_t  proptag,
uint64_t  fid,
void **  data 
)

Retrieve a MAPI property value from a folder record

Parameters
parent_ctxpointer to the memory context
oc_ctxpointer to the openchange DB context
usernamemailbox name where the folder is
proptagthe MAPI property tag to retrieve value for
fidthe record folder identifier
datapointer on pointer to the data the function returns
Returns
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

Referenced by emsmdbp_mailbox_provision(), emsmdbp_object_get_properties_mailbox(), emsmdbp_object_get_properties_mapistore_root(), emsmdbp_object_get_properties_systemspecialfolder(), emsmdbp_object_root_mapistore_folder_set(), emsmdbp_object_set_properties(), and oxosfld_is_special_folder().

◆ openchangedb_get_folders_names()

_PUBLIC_ const char ** openchangedb_get_folders_names ( TALLOC_CTX *  mem_ctx,
struct openchangedb_context *  oc_ctx,
const char *  locale,
const char *  type 
)

Get a list of names depending of the locale given as parameter

Parameters
mem_ctxcontext memory where the return value will be allocated
oc_ctxpointer to the openchange DB context
localesomething like en_UK or just en (in that case will be look for any en_* entries)
typethe table to look for values, it must be either "special_folders" or "folders"
Returns
array of strings with i18n folders names

Referenced by emsmdbp_get_folders_names(), and emsmdbp_get_special_folders().

◆ openchangedb_get_indexing_url()

_PUBLIC_ enum MAPISTATUS openchangedb_get_indexing_url ( struct openchangedb_context *  oc_ctx,
const char *  username,
const char **  indexing_url 
)

Get the indexing url backend for the user given as parameter. The user represents a mailbox. By default a tdb backend file per user will be used in case an error is returned.

Parameters
oc_ctxpointer to the openchange DB context
usernameName of the mailbox
indexing_urlpointer to the result returned

◆ openchangedb_get_MailboxGuid()

_PUBLIC_ enum MAPISTATUS openchangedb_get_MailboxGuid ( struct openchangedb_context *  oc_ctx,
const char *  recipient,
struct GUID *  MailboxGUID 
)

Retrieve the mailbox GUID for given recipient from openchange dispatcher database

Parameters
oc_ctxpointer to the OpenChangeDB context
recipientthe mailbox username
MailboxGUIDpointer to the mailbox GUID the function returns
Returns
MAPI_E_SUCCESS on success, otherwise MAPI error

Referenced by emsmdbp_mailbox_provision(), oxosfld_is_special_folder(), and RopLogon_Mailbox().

◆ openchangedb_get_MailboxReplica()

_PUBLIC_ enum MAPISTATUS openchangedb_get_MailboxReplica ( struct openchangedb_context *  oc_ctx,
const char *  recipient,
uint16_t *  ReplID,
struct GUID *  ReplGUID 
)

Retrieve the mailbox replica identifier and GUID for given recipient from openchange dispatcher database

Parameters
oc_ctxpointer to the OpenChangeDB context
recipientthe mailbox username
ReplIDpointer to the replica identifier the function returns
ReplGUIDpointer to the replica GUID the function returns
Returns
MAPI_E_SUCCESS on success, otherwise MAPI error

Referenced by EcDoRpc_RopSyncImportDeletes(), EcDoRpc_RopSyncImportHierarchyChange(), EcDoRpc_RopSyncImportMessageChange(), emsmdbp_guid_to_replid(), emsmdbp_mailbox_provision(), emsmdbp_object_synccontext_init(), emsmdbp_replid_to_guid(), emsmdbp_verify_user(), oxcfxics_fill_synccontext_with_messageChange(), oxcfxics_ndr_push_transfer_state(), oxcfxics_prepare_synccontext_with_folderChange(), oxosfld_is_special_folder(), and RopLogon_Mailbox().

◆ openchangedb_get_mapistoreURI()

_PUBLIC_ enum MAPISTATUS openchangedb_get_mapistoreURI ( TALLOC_CTX *  parent_ctx,
struct openchangedb_context *  oc_ctx,
const char *  username,
uint64_t  fid,
char **  mapistoreURL,
bool  mailboxstore 
)

Retrieve the mapistore URI associated to a mailbox system folder.

Parameters
parent_ctxpointer to the memory context
oc_ctxpointer to the openchange DB context
usernamecurrent user
fidthe Folder identifier to search for
mapistoreURLpointer on pointer to the mapistore URI the function returns
mailboxstoreboolean value which defines whether the record has to be searched within Public folders hierarchy or not FIXME mailboxstore always true? remove it?
Returns
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

Referenced by emsmdbp_folder_delete(), emsmdbp_get_uri_from_fid(), emsmdbp_mailbox_provision(), emsmdbp_object_open_folder(), and emsmdbp_object_set_properties().

◆ openchangedb_get_MAPIStoreURIs()

_PUBLIC_ enum MAPISTATUS openchangedb_get_MAPIStoreURIs ( struct openchangedb_context *  oc_ctx,
const char *  username,
TALLOC_CTX *  mem_ctx,
struct StringArrayW_r **  urisP 
)

Retrieve a list of mapistore URI in use for a certain user

Parameters
oc_ctxpointer to the openchange DB context
usernamethe mailbox name
mem_ctxmemory context where found URIs will be allocated
urisPwhere the Mapistore URIs will be stored
Returns
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

Referenced by emsmdbp_mailbox_provision().

◆ openchangedb_get_message_count()

_PUBLIC_ enum MAPISTATUS openchangedb_get_message_count ( struct openchangedb_context *  oc_ctx,
const char *  username,
uint64_t  fid,
uint32_t *  RowCount,
bool  fai 
)

Retrieve the number of messages within the specified folder

Parameters
oc_ctxpointer to the openchange DB context
usernameName of the mailbox where the folder is
fidthe folder identifier to use for the search
RowCountpointer to the returned number of results
faiwhether we want to count fai messages or system messages
Returns
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

Referenced by emsmdbp_folder_open_table().

◆ openchangedb_get_mid_by_subject()

_PUBLIC_ enum MAPISTATUS openchangedb_get_mid_by_subject ( struct openchangedb_context *  oc_ctx,
const char *  username,
uint64_t  parent_fid,
const char *  subject,
bool  mailboxstore,
uint64_t *  mid 
)

Retrieve the message ID associated with a given subject (normalized)

Parameters
oc_ctxpointer to the openchange DB context
usernamemailbox name where the parent folder is
parent_fidthe folder ID of the parent folder
subjectthe normalized subject to look up
mailboxstorewhether the folder is under a mailbox or not
midthe message ID for the message (0 if not found)
Returns
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

Referenced by emsmdbp_mailbox_provision_public_freebusy().

◆ openchangedb_get_new_changeNumber()

_PUBLIC_ enum MAPISTATUS openchangedb_get_new_changeNumber ( struct openchangedb_context *  oc_ctx,
const char *  username,
uint64_t *  cn 
)

Allocates a new change number and returns it

Parameters
oc_ctxpointer to the openchange DB context
usernamecurrent user
cnpointer to the cn value the function returns
Returns
MAPI_E_SUCCESS on success, otherwise MAPI error

Referenced by EcDoRpc_RopCreateFolder(), EcDoRpc_RopSyncImportHierarchyChange(), emsmdbp_mailbox_provision(), emsmdbp_mailbox_provision_public_freebusy(), and emsmdbp_object_move_folder_to_mapistore_root().

◆ openchangedb_get_new_changeNumbers()

_PUBLIC_ enum MAPISTATUS openchangedb_get_new_changeNumbers ( struct openchangedb_context *  oc_ctx,
TALLOC_CTX *  mem_ctx,
const char *  username,
uint64_t  max,
struct UI8Array_r **  cns_p 
)

Allocates a batch of new change numbers and returns them

Parameters
oc_ctxpointer to the openchange DB context
mem_ctxmemory context where the change numbers will be allocated
usernamecurrent user
maxnumber of change number to allocate
cns_parray of pointers to the change numbers values the function returns
Returns
MAPI_E_SUCCESS on success, otherwise MAPI error

◆ openchangedb_get_new_public_folderID()

_PUBLIC_ enum MAPISTATUS openchangedb_get_new_public_folderID ( struct openchangedb_context *  oc_ctx,
const char *  username,
uint64_t *  fid 
)

Retrieve a new folder id for a public folder, only used on cases where the openchangedb backend uses folder ids per user. In that case the public folder ids will still be global, per organization

Parameters
oc_ctxpointer to the openchange DB context
usernameThe name of the current login user so we can now the current organization where the public folder will be created
fidpointer to the returned value

Referenced by EcDoRpc_RopCreateFolder(), and get_new_public_folder_id().

◆ openchangedb_get_next_changeNumber()

_PUBLIC_ enum MAPISTATUS openchangedb_get_next_changeNumber ( struct openchangedb_context *  oc_ctx,
const char *  username,
uint64_t *  cn 
)

Returns the change number that will be allocated when openchangedb_get_new_changeNumber is next invoked

Parameters
oc_ctxpointer to the openchange DB context
usernamecurrent user
cnpointer to the cn value the function returns
Returns
MAPI_E_SUCCESS on success, otherwise MAPI error

Referenced by oxcfxics_check_cnset().

◆ openchangedb_get_parent_fid()

_PUBLIC_ enum MAPISTATUS openchangedb_get_parent_fid ( struct openchangedb_context *  oc_ctx,
const char *  username,
uint64_t  fid,
uint64_t *  parent_fidp,
bool  mailboxstore 
)

Retrieve the parent fid associated to a mailbox system folder.

Parameters
oc_ctxpointer to the openchange DB context
usernamethe mailbox name
fidthe Folder identifier to search for
parent_fidppointer to the parent_fid the function returns
mailboxstoreboolean value which defines whether the record has to be searched within Public folders hierarchy or not
Returns
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

Referenced by emsmdbp_get_parent_fid(), and emsmdbp_object_open_folder().

◆ openchangedb_get_PublicFolderID()

_PUBLIC_ enum MAPISTATUS openchangedb_get_PublicFolderID ( struct openchangedb_context *  oc_ctx,
const char *  username,
uint32_t  SystemIdx,
uint64_t *  FolderId 
)

Retrieve the public folder FolderID (fid) for a given folder type

Parameters
oc_ctxpointer to the OpenChangeDB context
usernamecurrent user
SystemIdxthe system folder index
FolderIdpointer to the folder identifier the function returns
Returns
MAPI_E_SUCCESS on success, otherwise MAPI error

Referenced by emsmdbp_mailbox_provision_public_freebusy(), emsmdbp_object_mailbox_init(), and RopLogon_PublicFolder().

◆ openchangedb_get_PublicFolderReplica()

_PUBLIC_ enum MAPISTATUS openchangedb_get_PublicFolderReplica ( struct openchangedb_context *  oc_ctx,
const char *  username,
uint16_t *  ReplID,
struct GUID *  ReplGUID 
)

Retrieve the public folder replica identifier and GUID from the openchange dispatcher database

Parameters
oc_ctxpointer to the OpenChangeDB context
usernamecurrent user
ReplIDpointer to the replica identifier the function returns
ReplGUIDpointer to the replica GUID the function returns
Returns
MAPI_E_SUCCESS on success, otherwise MAPI error

Referenced by RopLogon_PublicFolder().

◆ openchangedb_get_ReceiveFolder()

_PUBLIC_ enum MAPISTATUS openchangedb_get_ReceiveFolder ( TALLOC_CTX *  parent_ctx,
struct openchangedb_context *  oc_ctx,
const char *  recipient,
const char *  MessageClass,
uint64_t *  fid,
const char **  ExplicitMessageClass 
)

Retrieve the Explicit message class and Folder identifier associated to the MessageClass search pattern.

Parameters
parent_ctxpointer to the memory context
oc_ctxpointer to the openchange DB context
recipientpointer to the mailbox's username
MessageClasssubstring to search for
fidpointer to the folder identifier the function returns
ExplicitMessageClasspointer on pointer to the complete message class the function returns
Returns
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

Referenced by RopGetReceiveFolder().

◆ openchangedb_get_ReceiveFolderTable()

_PUBLIC_ enum MAPISTATUS openchangedb_get_ReceiveFolderTable ( TALLOC_CTX *  mem_ctx,
struct openchangedb_context *  oc_ctx,
const char *  recipient,
uint32_t *  cValues,
struct ReceiveFolder **  entries 
)

Retrieve the list of receive folder identifier, message class along with latest modification time for the mailbox of the user.

Parameters
mem_ctxpointer to the memory context
oc_ctxpointer to the openchange DB context
recipientpointer to the mailbox's username
cValuespointer to the number of ReceiveFolder records the function returns
entriespointer on pointer to the list of ReceiveFolder structure to return
Returns
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

Referenced by RopGetReceiveFolderTable().

◆ openchangedb_get_SpecialFolderID()

_PUBLIC_ enum MAPISTATUS openchangedb_get_SpecialFolderID ( struct openchangedb_context *  oc_ctx,
const char *  recipient,
uint32_t  SystemIdx,
uint64_t *  FolderId 
)

Retrieve the folder id of a special folder with the specific SystemIdx for given recipient from openchange dispatcher database.

Parameters
oc_ctxpointer to the OpenChangeDB context
recipientthe mailbox username
SystemIdxthe system folder index
FolderIdpointer to the folder identifier the function returns
Returns
MAPI_E_SUCCESS on success, otherwise MAPI error

Referenced by emsmdbp_mailbox_provision().

◆ openchangedb_get_system_idx()

_PUBLIC_ enum MAPISTATUS openchangedb_get_system_idx ( struct openchangedb_context *  oc_ctx,
const char *  username,
uint64_t  fid,
int *  system_idx_p 
)

Retrieve the system idx associated with a folder record

Parameters
oc_ctxpointer to the openchange DB context
usernamethe name of the mailbox where the folder is
fidthe folder identifier to use for the search
system_idx_ppointer to the returned value
Returns
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

Referenced by emsmdbp_folder_move_folder(), and oxosfld_is_special_folder().

◆ openchangedb_get_SystemFolderID()

_PUBLIC_ enum MAPISTATUS openchangedb_get_SystemFolderID ( struct openchangedb_context *  oc_ctx,
const char *  recipient,
uint32_t  SystemIdx,
uint64_t *  FolderId 
)

Retrieve the mailbox FolderID for given recipient from openchange dispatcher database

Parameters
oc_ctxpointer to the OpenChangeDB context
recipientthe mailbox username
SystemIdxthe system folder index
FolderIdpointer to the folder identifier the function returns
Returns
MAPI_E_SUCCESS on success, otherwise MAPI error

Referenced by emsmdbp_fetch_freebusy(), emsmdbp_mailbox_provision(), emsmdbp_object_mailbox_init(), oxosfld_is_special_folder(), RopGetReceiveFolder(), and RopLogon_Mailbox().

◆ openchangedb_get_table_property()

_PUBLIC_ enum MAPISTATUS openchangedb_get_table_property ( TALLOC_CTX *  parent_ctx,
struct openchangedb_context *  oc_ctx,
const char *  ldb_filter,
uint32_t  proptag,
uint32_t  pos,
void **  data 
)

FIXME Not used anywhere, remove it? see mapiproxy/servers/default/emsmdb/emsmdbp_object.c +1712.

Retrieve a MAPI property from a table (ldb search results)

Parameters
parent_ctxpointer to the memory context
oc_ctxpointer to the openchange DB context
ldb_filterthe ldb search string
proptagthe MAPI property tag to retrieve value for
posthe record position in search results
datapointer on pointer to the data the function returns
Returns
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

◆ openchangedb_get_TransportFolder()

_PUBLIC_ enum MAPISTATUS openchangedb_get_TransportFolder ( struct openchangedb_context *  oc_ctx,
const char *  recipient,
uint64_t *  FolderId 
)

Retrieve the Transport Folder FolderID for given recipient from openchange dispatcher database

Parameters
oc_ctxpointer to the OpenChangeDB context
recipientthe mailbox username
FolderIdpointer to the folder identifier the function returns
Returns
MAPI_E_SUCCESS on success, otherwise MAPI error

Referenced by EcDoRpc_RopGetTransportFolder().

◆ openchangedb_get_users_from_partial_uri()

_PUBLIC_ enum MAPISTATUS openchangedb_get_users_from_partial_uri ( TALLOC_CTX *  parent_ctx,
struct openchangedb_context *  oc_ctx,
const char *  partialURI,
uint32_t *  count,
char ***  MAPIStoreURI,
char ***  users 
)

FIXME broken? mailboxDN not saved?

Get users given a partial MAPIStoreURI

Parameters
parent_ctxmemory context
oc_ctxpointer to the openchange DB context
partialURIpartial MAPIStoreURI to look for
countnumber of users found
MAPIStoreURIMAPIStoreURIs of the users found from the partial MAPIStoreURI
usersname of the mailboxes found from the partial MAPIStoreURI
Returns
MAPI_E_SUCCESS on success, otherwise MAPI error

◆ openchangedb_initialize()

_PUBLIC_ enum MAPISTATUS openchangedb_initialize ( TALLOC_CTX *  mem_ctx,
struct loadparm_context *  lp_ctx,
struct openchangedb_context **  oc_ctx 
)

◆ openchangedb_is_public_folder_id()

_PUBLIC_ bool openchangedb_is_public_folder_id ( struct openchangedb_context *  oc_ctx,
uint64_t  fid 
)

Whether the current openchangedb backend uses folder ids per user and the given folder id as parameter belongs to a public folder id (which have global folder ids in an organization)

Parameters
oc_ctxpointer to the openchange DB context
fidfolder id to identify if belongs to a either public or system folder

Referenced by EcDoRpc_RopCreateFolder(), and get_new_public_folder_id().

◆ openchangedb_lookup_folder_property()

_PUBLIC_ enum MAPISTATUS openchangedb_lookup_folder_property ( struct openchangedb_context *  oc_ctx,
uint32_t  proptag,
uint64_t  fid 
)

FIXME Not used anywhere.

Remove it?

Check if a property exists within an openchange dispatcher database record

Parameters
oc_ctxpointer to the openchange DB context
proptagthe MAPI property tag to lookup
fidthe record folder identifier
Returns
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

◆ openchangedb_set_folder_properties()

_PUBLIC_ enum MAPISTATUS openchangedb_set_folder_properties ( struct openchangedb_context *  oc_ctx,
const char *  username,
uint64_t  fid,
struct SRow *  row 
)

Set a MAPI property value from a folder record

Parameters
oc_ctxpointer to the openchange DB context
usernamename of the mailbox where the folder is
fidthe record folder identifier
rowthe MAPI property to set
Returns
MAPI_E_SUCCESS on success, otherwise MAPI error

Referenced by emsmdbp_mailbox_provision(), emsmdbp_object_folder_commit_creation(), and emsmdbp_object_set_properties().

◆ openchangedb_set_folder_property_data()

_PUBLIC_ char * openchangedb_set_folder_property_data ( TALLOC_CTX *  mem_ctx,
struct SPropValue *  value 
)

Build a MAPI property suitable for a OpenChange LDB message

Parameters
mem_ctxpointer to the memory context
valuethe MAPI property
Returns
valid string pointer on success, otherwise NULL

References nil_string, and openchangedb_set_folder_property_data().

Referenced by openchangedb_set_folder_property_data().

◆ openchangedb_set_locale()

_PUBLIC_ bool openchangedb_set_locale ( struct openchangedb_context *  oc_ctx,
const char *  username,
uint32_t  lcid 
)

Set the current locale of the mailbox

Parameters
oc_ctxpointer to the openchange DB context
usernameName of the mailbox
lcidlanguage id
Returns
Whether the locale has been changed or not

Referenced by emsmdbp_mailbox_provision().

◆ openchangedb_set_mapistoreURI()

_PUBLIC_ enum MAPISTATUS openchangedb_set_mapistoreURI ( struct openchangedb_context *  oc_ctx,
const char *  username,
uint64_t  fid,
const char *  mapistoreURL 
)

Store the mapistore URI associated to a mailbox system folder.

Parameters
oc_ctxpointer to the openchange DB context
usernamecurrent user
fidthe Folder identifier to search for
mapistoreURLThe mapistore URI to set
Returns
MAPI_E_SUCCESS on success, otherwise MAPI error

Referenced by emsmdbp_mailbox_provision(), emsmdbp_object_root_mapistore_folder_set(), and emsmdbp_object_set_properties().

◆ openchangedb_set_ReceiveFolder()

_PUBLIC_ enum MAPISTATUS openchangedb_set_ReceiveFolder ( struct openchangedb_context *  oc_ctx,
const char *  recipient,
const char *  MessageClass,
uint64_t  fid 
)

Set the receive folder for a specific message class.

Parameters
oc_ctxpointer to the openchange DB context
recipientpointer to the mailbox's username
MessageClassmessage class (e.g. IPM.whatever) to set
fidfolder identifier for the recipient folder for the message class
Returns
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

Referenced by emsmdbp_mailbox_provision(), and RopSetReceiveFolder().

◆ openchangedb_set_system_idx()

_PUBLIC_ enum MAPISTATUS openchangedb_set_system_idx ( struct openchangedb_context *  oc_ctx,
const char *  username,
uint64_t  fid,
int  system_idx 
)

Store the system index associated to a mailbox system folder.

Parameters
oc_ctxpointer to the openchange DB context
usernamecurrent user
fidthe Folder identifier to search for
system_idxthe system index
Returns
MAPI_E_SUCCESS on success, otherwise MAPI error

Referenced by emsmdbp_mailbox_provision().

◆ openchangedb_transaction_commit()

_PUBLIC_ enum MAPISTATUS openchangedb_transaction_commit ( struct openchangedb_context *  oc_ctx)

◆ openchangedb_transaction_start()

_PUBLIC_ enum MAPISTATUS openchangedb_transaction_start ( struct openchangedb_context *  oc_ctx)

Variable Documentation

◆ nil_string

const char* nil_string = "<nil>"

Creative Commons License
Creative Commons Attribution icon Creative Commons Share Alike icon
This content is licensed under the Creative Commons
Attribution ShareAlike License v. 3.0:
http://creativecommons.org/licenses/by-sa/3.0/