mapiproxy/libmapiproxy/openchangedb.c File Reference

OpenChange Dispatcher database routines. More...

#include "mapiproxy/dcesrv_mapiproxy.h"
#include "libmapiproxy.h"
#include "libmapi/libmapi.h"
#include "libmapi/libmapi_private.h"

Functions

_PUBLIC_ enum MAPISTATUS openchangedb_get_distinguishedName (TALLOC_CTX *parent_ctx, void *ldb_ctx, uint64_t fid, char **distinguishedName)
_PUBLIC_ enum MAPISTATUS openchangedb_get_fid_by_name (void *ldb_ctx, uint64_t parent_fid, const char *foldername, uint64_t *fid)
_PUBLIC_ enum MAPISTATUS openchangedb_get_folder_count (void *ldb_ctx, uint64_t fid, uint32_t *RowCount)
_PUBLIC_ enum MAPISTATUS openchangedb_get_folder_property (TALLOC_CTX *parent_ctx, void *ldb_ctx, char *recipient, uint32_t proptag, uint64_t fid, void **data)
static void * openchangedb_get_folder_property_data (TALLOC_CTX *mem_ctx, struct ldb_result *res, uint32_t pos, uint32_t proptag, const char *PidTagAttr)
static void * openchangedb_get_folder_special_property (TALLOC_CTX *mem_ctx, void *ldb_ctx, char *recipient, struct ldb_result *res, uint32_t proptag, const char *PidTagAttr)
_PUBLIC_ enum MAPISTATUS openchangedb_get_MailboxGuid (void *ldb_ctx, char *recipient, struct GUID *MailboxGUID)
_PUBLIC_ enum MAPISTATUS openchangedb_get_MailboxReplica (void *ldb_ctx, char *recipient, uint16_t *ReplID, struct GUID *ReplGUID)
_PUBLIC_ enum MAPISTATUS openchangedb_get_mapistoreURI (TALLOC_CTX *parent_ctx, void *ldb_ctx, uint64_t fid, char **mapistoreURL, bool mailboxstore)
_PUBLIC_ enum MAPISTATUS openchangedb_get_new_folderID (void *ldb_ctx, uint64_t *fid)
_PUBLIC_ enum MAPISTATUS openchangedb_get_PublicFolderID (void *ldb_ctx, uint32_t SystemIdx, uint64_t *FolderId)
_PUBLIC_ enum MAPISTATUS openchangedb_get_PublicFolderReplica (void *ldb_ctx, uint16_t *ReplID, struct GUID *ReplGUID)
_PUBLIC_ enum MAPISTATUS openchangedb_get_ReceiveFolder (TALLOC_CTX *parent_ctx, void *ldb_ctx, const char *recipient, const char *MessageClass, uint64_t *fid, const char **ExplicitMessageClass)
_PUBLIC_ enum MAPISTATUS openchangedb_get_SystemFolderID (void *ldb_ctx, char *recipient, uint32_t SystemIdx, uint64_t *FolderId)
_PUBLIC_ enum MAPISTATUS openchangedb_get_table_property (TALLOC_CTX *parent_ctx, void *ldb_ctx, char *recipient, char *ldb_filter, uint32_t proptag, uint32_t pos, void **data)
_PUBLIC_ enum MAPISTATUS openchangedb_lookup_folder_property (void *ldb_ctx, uint32_t proptag, uint64_t fid)
_PUBLIC_ enum MAPISTATUS openchangedb_set_ReceiveFolder (TALLOC_CTX *parent_ctx, void *ldb_ctx, const char *recipient, const char *MessageClass, uint64_t fid)

Detailed Description

OpenChange Dispatcher database routines.


Function Documentation

_PUBLIC_ enum MAPISTATUS openchangedb_get_distinguishedName ( TALLOC_CTX *  parent_ctx,
void *  ldb_ctx,
uint64_t  fid,
char **  distinguishedName 
)

Retrieve the distinguishedName associated to a mailbox system folder.

Parameters:
parent_ctx pointer to the parent memory context
ldb_ctx pointer to the openchange LDB context
fid the Folder identifier to search for
distinguishedName pointer on pointer to the distinguishedName string the function returns
Returns:
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

Referenced by openchangedb_set_ReceiveFolder().

_PUBLIC_ enum MAPISTATUS openchangedb_get_fid_by_name ( void *  ldb_ctx,
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:
ldb_ctx pointer to the openchange LDB context
parent_fid the folder ID of the parent folder
foldername the name to look up
fid the folder ID for the folder with the specified name (0 if not found)
Returns:
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND
_PUBLIC_ enum MAPISTATUS openchangedb_get_folder_count ( void *  ldb_ctx,
uint64_t  fid,
uint32_t *  RowCount 
)

Retrieve the number of sub folders for a given fid

Parameters:
ldb_ctx pointer to the openchange LDB context
fid the folder identifier to use for the search
RowCount pointer to the returned number of results
Returns:
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

Referenced by EcDoRpc_RopGetHierarchyTable().

_PUBLIC_ enum MAPISTATUS openchangedb_get_folder_property ( TALLOC_CTX *  parent_ctx,
void *  ldb_ctx,
char *  recipient,
uint32_t  proptag,
uint64_t  fid,
void **  data 
)

Retrieve a MAPI property value from a folder record

Parameters:
parent_ctx pointer to the memory context
ldb_ctx pointer to the openchange LDB context
recipient the mailbox username
proptag the MAPI property tag to retrieve value for
fid the record folder identifier
data pointer on pointer to the data the function returns
Returns:
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

References openchangedb_get_folder_property_data(), and openchangedb_get_folder_special_property().

Referenced by RopGetPropertiesSpecific_Mailbox(), and RopGetPropertiesSpecific_SystemSpecialFolder().

static void* openchangedb_get_folder_property_data ( TALLOC_CTX *  mem_ctx,
struct ldb_result *  res,
uint32_t  pos,
uint32_t  proptag,
const char *  PidTagAttr 
) [static]

Retrieve a MAPI property from a OpenChange LDB message

Parameters:
mem_ctx pointer to the memory context
res pointer to the LDB results
pos the LDB result index
proptag the MAPI property tag to lookup
PidTagAttr the mapped MAPI property name
Returns:
valid data pointer on success, otherwise NULL

Referenced by openchangedb_get_folder_property(), and openchangedb_get_table_property().

static void* openchangedb_get_folder_special_property ( TALLOC_CTX *  mem_ctx,
void *  ldb_ctx,
char *  recipient,
struct ldb_result *  res,
uint32_t  proptag,
const char *  PidTagAttr 
) [static]

Retrieve a special MAPI property from a folder record

Parameters:
mem_ctx pointer to the memory context
ldb_ctx pointer to the OpenChange LDB context
recipient the mailbox username
res pointer to the LDB result
proptag the MAPI property tag to lookup
PidTagAttr the mapped MAPI property name
Returns:
pointer to valid data on success, otherwise NULL

References entryid_set_folder_EntryID(), openchangedb_get_MailboxGuid(), and openchangedb_get_MailboxReplica().

Referenced by openchangedb_get_folder_property(), and openchangedb_get_table_property().

_PUBLIC_ enum MAPISTATUS openchangedb_get_MailboxGuid ( void *  ldb_ctx,
char *  recipient,
struct GUID *  MailboxGUID 
)

Retrieve the mailbox GUID for given recipient from openchange dispatcher database

Parameters:
ldb_ctx pointer to the OpenChange LDB context
recipient the mailbox username
MailboxGUID pointer to the mailbox GUID the function returns
Returns:
MAPI_E_SUCCESS on success, otherwise MAPI error

Referenced by openchangedb_get_folder_special_property(), and RopLogon_Mailbox().

_PUBLIC_ enum MAPISTATUS openchangedb_get_MailboxReplica ( void *  ldb_ctx,
char *  recipient,
uint16_t *  ReplID,
struct GUID *  ReplGUID 
)

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

Parameters:
ldb_ctx pointer to the OpenChange LDB context
recipient the mailbox username
ReplID pointer to the replica identifier the function returns
ReplGUID pointer to the replica GUID the function returns
Returns:
MAPI_E_SUCCESS on success, otherwise MAPI error

Referenced by openchangedb_get_folder_special_property(), and RopLogon_Mailbox().

_PUBLIC_ enum MAPISTATUS openchangedb_get_mapistoreURI ( TALLOC_CTX *  parent_ctx,
void *  ldb_ctx,
uint64_t  fid,
char **  mapistoreURL,
bool  mailboxstore 
)

Retrieve the mapistore URI associated to a mailbox system folder.

Parameters:
parent_ctx pointer to the memory context
ldb_ctx pointer to the openchange LDB context
fid the Folder identifier to search for
mapistoreURL pointer on pointer to the mapistore URI the function returns
mailboxstore boolean 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_object_folder_init().

_PUBLIC_ enum MAPISTATUS openchangedb_get_new_folderID ( void *  ldb_ctx,
uint64_t *  fid 
)

Return the next available FolderID

Parameters:
ldb_ctx pointer to the openchange LDB context
fid pointer to the fid value the function returns
Returns:
MAPI_E_SUCCESS on success, otherwise MAPI error

Referenced by EcDoRpc_RopCreateMessage().

_PUBLIC_ enum MAPISTATUS openchangedb_get_PublicFolderID ( void *  ldb_ctx,
uint32_t  SystemIdx,
uint64_t *  FolderId 
)

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

Parameters:
ldb_ctx pointer to the OpenChange LDB context
SystemIdx the system folder index
FolderId pointer to the folder identifier the function returns
Returns:
MAPI_E_SUCCESS on success, otherwise MAPI error

Referenced by emsmdbp_object_mailbox_init(), and RopLogon_PublicFolder().

_PUBLIC_ enum MAPISTATUS openchangedb_get_PublicFolderReplica ( void *  ldb_ctx,
uint16_t *  ReplID,
struct GUID *  ReplGUID 
)

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

Parameters:
ldb_ctx pointer to the OpenChange LDB context
ReplID pointer to the replica identifier the function returns
ReplGUID pointer to the replica GUID the function returns
Returns:
MAPI_E_SUCCESS on success, otherwise MAPI error

Referenced by RopLogon_PublicFolder().

_PUBLIC_ enum MAPISTATUS openchangedb_get_ReceiveFolder ( TALLOC_CTX *  parent_ctx,
void *  ldb_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_ctx pointer to the memory context
ldb_ctx pointer to the openchange LDB context
recipient pointer to the mailbox's username
MessageClass substring to search for
fid pointer to the folder identifier the function returns
ExplicitMessageClass pointer on pointer to the complete message class the function returns
Returns:
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

Referenced by RopGetReceiveFolder().

_PUBLIC_ enum MAPISTATUS openchangedb_get_SystemFolderID ( void *  ldb_ctx,
char *  recipient,
uint32_t  SystemIdx,
uint64_t *  FolderId 
)

Retrieve the mailbox FolderID for given recipient from openchange dispatcher database

Parameters:
ldb_ctx pointer to the OpenChange LDB context
recipient the mailbox username
SystemIdx the system folder index
FolderId pointer to the folder identifier the function returns
Returns:
MAPI_E_SUCCESS on success, otherwise MAPI error

Referenced by emsmdbp_object_mailbox_init(), and RopLogon_Mailbox().

_PUBLIC_ enum MAPISTATUS openchangedb_get_table_property ( TALLOC_CTX *  parent_ctx,
void *  ldb_ctx,
char *  recipient,
char *  ldb_filter,
uint32_t  proptag,
uint32_t  pos,
void **  data 
)

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

Parameters:
parent_ctx pointer to the memory context
ldb_ctx pointer to the openchange LDB context
recipient the mailbox username
ldb_filter the ldb search string
proptag the MAPI property tag to retrieve value for
pos the record position in search results
data pointer on pointer to the data the function returns
Returns:
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

References openchangedb_get_folder_property_data(), and openchangedb_get_folder_special_property().

Referenced by EcDoRpc_RopQueryRows().

_PUBLIC_ enum MAPISTATUS openchangedb_lookup_folder_property ( void *  ldb_ctx,
uint32_t  proptag,
uint64_t  fid 
)

Check if a property exists within an openchange dispatcher database record

Parameters:
ldb_ctx pointer to the openchange LDB context
proptag the MAPI property tag to lookup
fid the record folder identifier
Returns:
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

Referenced by RopGetPropertiesSpecific_SystemSpecialFolder().

_PUBLIC_ enum MAPISTATUS openchangedb_set_ReceiveFolder ( TALLOC_CTX *  parent_ctx,
void *  ldb_ctx,
const char *  recipient,
const char *  MessageClass,
uint64_t  fid 
)

Set the receive folder for a specific message class.

Parameters:
parent_ctx pointer to the memory context
ldb_ctx pointer to the openchange LDB context
recipient pointer to the mailbox's username
MessageClass message class (e.g. IPM.whatever) to set
fid folder identifier for the recipient folder for the message class
Returns:
MAPI_E_SUCCESS on success, otherwise MAPI_E_NOT_FOUND

References openchangedb_get_distinguishedName().

Referenced by RopSetReceiveFolder().


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/