OpenChange EMSMDB Server implementation. More...
#include "mapiproxy/dcesrv_mapiproxy.h"
#include "mapiproxy/libmapiserver/libmapiserver.h"
#include "dcesrv_exchange_emsmdb.h"
Functions | |
static bool | clientVersionIsTooLow (const uint16_t rgwClientVersion[3]) |
static enum MAPISTATUS | dcesrv_EcDoAsyncConnectEx (struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct EcDoAsyncConnectEx *r) |
static enum MAPISTATUS | dcesrv_EcDoConnect (struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct EcDoConnect *r) |
static enum MAPISTATUS | dcesrv_EcDoConnectEx (struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct EcDoConnectEx *r) |
static enum MAPISTATUS | dcesrv_EcDoDisconnect (struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct EcDoDisconnect *r) |
static enum MAPISTATUS | dcesrv_EcDoRpc (struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct EcDoRpc *r) |
static enum MAPISTATUS | dcesrv_EcDoRpcExt (struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct EcDoRpcExt *r) |
static enum MAPISTATUS | dcesrv_EcDoRpcExt2 (struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct EcDoRpcExt2 *r) |
static void | dcesrv_EcDummyRpc (struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct EcDummyRpc *r) |
static void | dcesrv_EcGetMoreRpc (struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct EcGetMoreRpc *r) |
static void | dcesrv_EcRGetDCName (struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct EcRGetDCName *r) |
static void | dcesrv_EcRNetGetDCName (struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct EcRNetGetDCName *r) |
static enum MAPISTATUS | dcesrv_EcRRegisterPushNotification (struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct EcRRegisterPushNotification *r) |
static enum MAPISTATUS | dcesrv_EcRUnregisterPushNotification (struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct EcRUnregisterPushNotification *r) |
static void | dcesrv_EcUnknown0xC (struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct EcUnknown0xC *r) |
static void | dcesrv_EcUnknown0xD (struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct EcUnknown0xD *r) |
static NTSTATUS | dcesrv_exchange_emsmdb_dispatch (struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, void *r, struct mapiproxy *mapiproxy) |
static NTSTATUS | dcesrv_exchange_emsmdb_init (struct dcesrv_context *dce_ctx) |
static NTSTATUS | dcesrv_exchange_emsmdb_unbind (struct server_id server_id, uint32_t context_id) |
static struct exchange_emsmdb_session * | dcesrv_find_emsmdb_session (struct GUID *uuid) |
static struct mapi_response * | EcDoRpc_process_transaction (TALLOC_CTX *mem_ctx, struct emsmdbp_context *emsmdbp_ctx, struct mapi_request *mapi_request) |
static bool | emsmdbp_fill_notification (TALLOC_CTX *mem_ctx, struct emsmdbp_context *emsmdbp_ctx, struct EcDoRpc_MAPI_REPL *mapi_repl, struct mapistore_subscription *subscription, struct mapistore_notification *notification, uint16_t *sizep) |
NTSTATUS | samba_init_module (void) |
Variables | |
struct exchange_emsmdb_session * | emsmdb_session = NULL |
void * | openchange_ldb_ctx = NULL |
OpenChange EMSMDB Server implementation.
static bool clientVersionIsTooLow | ( | const uint16_t | rgwClientVersion[3] | ) | [static] |
Referenced by dcesrv_EcDoConnectEx().
static enum MAPISTATUS dcesrv_EcDoAsyncConnectEx | ( | struct dcesrv_call_state * | dce_call, |
TALLOC_CTX * | mem_ctx, | ||
struct EcDoAsyncConnectEx * | r | ||
) | [static] |
exchange_emsmdb EcGetMoreRpc (0xe) function
dce_call | pointer to the session context |
mem_ctx | pointer to the memory context |
r | pointer to the EcDoAsyncConnectExt request data |
static enum MAPISTATUS dcesrv_EcDoConnect | ( | struct dcesrv_call_state * | dce_call, |
TALLOC_CTX * | mem_ctx, | ||
struct EcDoConnect * | r | ||
) | [static] |
exchange_emsmdb EcDoConnect (0x0) function
dce_call | pointer to the session context |
mem_ctx | pointer to the memory context |
r | pointer to the EcDoConnect request data |
References mpm_session::context_id, dcesrv_find_emsmdb_session(), EMSMDB_PCMSPOLLMAX, EMSMDB_PCRETRY, EMSMDB_PCRETRYDELAY, emsmdbp_destructor(), emsmdbp_init(), emsmdbp_verify_user(), emsmdbp_verify_userdn(), EXCHANGE_HANDLE_EMSMDB, mpm_session_increment_ref_count(), mpm_session_init(), mpm_session_set_destructor(), mpm_session_set_private_data(), openchange_ldb_ctx, exchange_emsmdb_session::pullTimeStamp, exchange_emsmdb_session::session, emsmdbp_context::szDisplayName, emsmdbp_context::szUserDN, emsmdbp_context::userLanguage, and exchange_emsmdb_session::uuid.
static enum MAPISTATUS dcesrv_EcDoConnectEx | ( | struct dcesrv_call_state * | dce_call, |
TALLOC_CTX * | mem_ctx, | ||
struct EcDoConnectEx * | r | ||
) | [static] |
exchange_emsmdb EcDoConnectEx (0xA) function
dce_call | pointer to the session context |
mem_ctx | pointer to the memory context |
r | pointer to the EcDoConnectEx request data |
References clientVersionIsTooLow(), mpm_session::context_id, dcesrv_find_emsmdb_session(), EMSMDB_PCMSPOLLMAX, EMSMDB_PCRETRY, EMSMDB_PCRETRYDELAY, emsmdbp_destructor(), emsmdbp_init(), emsmdbp_verify_user(), emsmdbp_verify_userdn(), EXCHANGE_HANDLE_EMSMDB, mpm_session_increment_ref_count(), mpm_session_init(), mpm_session_set_destructor(), mpm_session_set_private_data(), openchange_ldb_ctx, exchange_emsmdb_session::pullTimeStamp, exchange_emsmdb_session::session, emsmdbp_context::szDisplayName, emsmdbp_context::szUserDN, emsmdbp_context::userLanguage, and exchange_emsmdb_session::uuid.
static enum MAPISTATUS dcesrv_EcDoDisconnect | ( | struct dcesrv_call_state * | dce_call, |
TALLOC_CTX * | mem_ctx, | ||
struct EcDoDisconnect * | r | ||
) | [static] |
exchange_emsmdb EcDoDisconnect (0x1) function
dce_call | pointer to the session context |
mem_ctx | pointer to the memory context |
r | pointer to the EcDoDisconnect request data |
References dcesrv_find_emsmdb_session(), mpm_session_release(), and exchange_emsmdb_session::session.
static enum MAPISTATUS dcesrv_EcDoRpc | ( | struct dcesrv_call_state * | dce_call, |
TALLOC_CTX * | mem_ctx, | ||
struct EcDoRpc * | r | ||
) | [static] |
exchange_emsmdb EcDoRpc (0x2) function
dce_call | pointer to the session context |
mem_ctx | pointer to the memory context |
r | pointer to the EcDoRpc request data |
References dcesrv_find_emsmdb_session(), EcDoRpc_process_transaction(), mpm_session::private_data, and exchange_emsmdb_session::session.
static enum MAPISTATUS dcesrv_EcDoRpcExt | ( | struct dcesrv_call_state * | dce_call, |
TALLOC_CTX * | mem_ctx, | ||
struct EcDoRpcExt * | r | ||
) | [static] |
exchange_emsmdb EcDoRpcExt (0x9) function
dce_call | pointer to the session context |
mem_ctx | pointer to the memory context |
r | pointer to the EcDoRpcExt request data |
static enum MAPISTATUS dcesrv_EcDoRpcExt2 | ( | struct dcesrv_call_state * | dce_call, |
TALLOC_CTX * | mem_ctx, | ||
struct EcDoRpcExt2 * | r | ||
) | [static] |
exchange_emsmdb EcDoRpcExt2 (0xB) function
dce_call | pointer to the session context |
mem_ctx | pointer to the memory context |
r | pointer to the EcDoRpcExt2 request data |
References dcesrv_find_emsmdb_session(), EcDoRpc_process_transaction(), mpm_session::private_data, and exchange_emsmdb_session::session.
static void dcesrv_EcDummyRpc | ( | struct dcesrv_call_state * | dce_call, |
TALLOC_CTX * | mem_ctx, | ||
struct EcDummyRpc * | r | ||
) | [static] |
exchange_emsmdb EcDummyRpc (0x6) function
dce_call | pointer to the session context |
mem_ctx | pointer to the memory context |
r | pointer to the EcDummyRpc request data |
static void dcesrv_EcGetMoreRpc | ( | struct dcesrv_call_state * | dce_call, |
TALLOC_CTX * | mem_ctx, | ||
struct EcGetMoreRpc * | r | ||
) | [static] |
exchange_emsmdb EcGetMoreRpc (0x3) function
dce_call | pointer to the session context |
mem_ctx | pointer to the memory context |
r | pointer to the EcGetMoreRpc request data |
static void dcesrv_EcRGetDCName | ( | struct dcesrv_call_state * | dce_call, |
TALLOC_CTX * | mem_ctx, | ||
struct EcRGetDCName * | r | ||
) | [static] |
exchange_emsmdb EcRGetDCName (0x7) function
dce_call | pointer to the session context |
mem_ctx | pointer to the memory context |
r | pointer to the EcRGetDCName request data |
static void dcesrv_EcRNetGetDCName | ( | struct dcesrv_call_state * | dce_call, |
TALLOC_CTX * | mem_ctx, | ||
struct EcRNetGetDCName * | r | ||
) | [static] |
exchange_emsmdb EcRNetGetDCName (0x8) function
dce_call | pointer to the session context |
mem_ctx | pointer to the memory context |
r | pointer to the EcRNetGetDCName request data |
static enum MAPISTATUS dcesrv_EcRRegisterPushNotification | ( | struct dcesrv_call_state * | dce_call, |
TALLOC_CTX * | mem_ctx, | ||
struct EcRRegisterPushNotification * | r | ||
) | [static] |
exchange_emsmdb EcRRegisterPushNotification (0x4) function
dce_call | pointer to the session context |
mem_ctx | pointer to the memory context |
r | pointer to the EcRRegisterPushNotification request data |
References dcesrv_find_emsmdb_session(), emsmdbp_context::mstore_ctx, mpm_session::private_data, and exchange_emsmdb_session::session.
static enum MAPISTATUS dcesrv_EcRUnregisterPushNotification | ( | struct dcesrv_call_state * | dce_call, |
TALLOC_CTX * | mem_ctx, | ||
struct EcRUnregisterPushNotification * | r | ||
) | [static] |
exchange_emsmdb EcRUnregisterPushNotification (0x5) function
dce_call | pointer to the session context |
mem_ctx | pointer to the memory context |
r | pointer to the EcRUnregisterPushNotification request data |
static void dcesrv_EcUnknown0xC | ( | struct dcesrv_call_state * | dce_call, |
TALLOC_CTX * | mem_ctx, | ||
struct EcUnknown0xC * | r | ||
) | [static] |
exchange_emsmdb EcUnknown0xC (0xc) function
dce_call | pointer to the session context |
mem_ctx | pointer to the memory context |
r | pointer to the EcUnknown0xC request data |
static void dcesrv_EcUnknown0xD | ( | struct dcesrv_call_state * | dce_call, |
TALLOC_CTX * | mem_ctx, | ||
struct EcUnknown0xD * | r | ||
) | [static] |
exchange_emsmdb EcUnknown0xD (0xc) function
dce_call | pointer to the session context |
mem_ctx | pointer to the memory context |
r | pointer to the EcUnknown0xD request data |
static NTSTATUS dcesrv_exchange_emsmdb_dispatch | ( | struct dcesrv_call_state * | dce_call, |
TALLOC_CTX * | mem_ctx, | ||
void * | r, | ||
struct mapiproxy * | mapiproxy | ||
) | [static] |
Dispatch incoming EMSMDB call to the correct OpenChange server function
dce_call | pointer to the session context |
mem_ctx | pointer to the memory context |
r | generic pointer on EMSMDB data |
mapiproxy | pointer to the mapiproxy structure controlling mapiproxy behavior |
References dcesrv_EcDoAsyncConnectEx(), dcesrv_EcDoConnect(), dcesrv_EcDoConnectEx(), dcesrv_EcDoDisconnect(), dcesrv_EcDoRpc(), dcesrv_EcDoRpcExt(), dcesrv_EcDoRpcExt2(), dcesrv_EcDummyRpc(), dcesrv_EcGetMoreRpc(), dcesrv_EcRGetDCName(), dcesrv_EcRNetGetDCName(), dcesrv_EcRRegisterPushNotification(), dcesrv_EcRUnregisterPushNotification(), dcesrv_EcUnknown0xC(), and dcesrv_EcUnknown0xD().
Referenced by samba_init_module().
static NTSTATUS dcesrv_exchange_emsmdb_init | ( | struct dcesrv_context * | dce_ctx | ) | [static] |
Initialize the EMSMDB OpenChange server
dce_ctx | pointer to the server context |
References emsmdbp_openchange_ldb_init(), openchange_ldb_ctx, and exchange_emsmdb_session::session.
Referenced by samba_init_module().
static NTSTATUS dcesrv_exchange_emsmdb_unbind | ( | struct server_id | server_id, |
uint32_t | context_id | ||
) | [static] |
Terminate the EMSMDB connection and release the associated session and context if still available. This case occurs when the client doesn't call EcDoDisconnect but quit unexpectedly.
server_id | reference to the server identifier structure |
context_id | the connection context identifier |
Referenced by samba_init_module().
static struct exchange_emsmdb_session* dcesrv_find_emsmdb_session | ( | struct GUID * | uuid | ) | [static, read] |
static struct mapi_response* EcDoRpc_process_transaction | ( | TALLOC_CTX * | mem_ctx, |
struct emsmdbp_context * | emsmdbp_ctx, | ||
struct mapi_request * | mapi_request | ||
) | [static, read] |
References EcDoRpc_RopCommitStream(), EcDoRpc_RopCopyTo(), EcDoRpc_RopCreateAttach(), EcDoRpc_RopCreateFolder(), EcDoRpc_RopCreateMessage(), EcDoRpc_RopDeleteFolder(), EcDoRpc_RopDeleteMessages(), EcDoRpc_RopDeleteProperties(), EcDoRpc_RopDeletePropertiesNoReplicate(), EcDoRpc_RopEmptyFolder(), EcDoRpc_RopFastTransferSourceCopyTo(), EcDoRpc_RopFastTransferSourceGetBuffer(), EcDoRpc_RopFindRow(), EcDoRpc_RopGetAddressTypes(), EcDoRpc_RopGetAttachmentTable(), EcDoRpc_RopGetContentsTable(), EcDoRpc_RopGetHierarchyTable(), EcDoRpc_RopGetLocalReplicaIds(), EcDoRpc_RopGetNamesFromIDs(), EcDoRpc_RopGetPermissionsTable(), EcDoRpc_RopGetPerUserGuid(), EcDoRpc_RopGetPerUserLongTermIds(), EcDoRpc_RopGetPropertiesAll(), EcDoRpc_RopGetPropertiesList(), EcDoRpc_RopGetPropertiesSpecific(), EcDoRpc_RopGetPropertyIdsFromNames(), EcDoRpc_RopGetReceiveFolder(), EcDoRpc_RopGetRulesTable(), EcDoRpc_RopGetSearchCriteria(), EcDoRpc_RopGetStoreState(), EcDoRpc_RopGetStreamSize(), EcDoRpc_RopGetTransportFolder(), EcDoRpc_RopIdFromLongTermId(), EcDoRpc_RopLogon(), EcDoRpc_RopLongTermIdFromId(), EcDoRpc_RopModifyPermissions(), EcDoRpc_RopModifyRecipients(), EcDoRpc_RopModifyRules(), EcDoRpc_RopMoveCopyMessages(), EcDoRpc_RopOpenAttach(), EcDoRpc_RopOpenEmbeddedMessage(), EcDoRpc_RopOpenFolder(), EcDoRpc_RopOpenMessage(), EcDoRpc_RopOpenStream(), EcDoRpc_RopOptionsData(), EcDoRpc_RopQueryPosition(), EcDoRpc_RopQueryRows(), EcDoRpc_RopReadPerUserInformation(), EcDoRpc_RopReadStream(), EcDoRpc_RopRegisterNotification(), EcDoRpc_RopRelease(), EcDoRpc_RopReloadCachedInformation(), EcDoRpc_RopRemoveAllRecipients(), EcDoRpc_RopResetTable(), EcDoRpc_RopRestrict(), EcDoRpc_RopSaveChangesAttachment(), EcDoRpc_RopSaveChangesMessage(), EcDoRpc_RopSeekRow(), EcDoRpc_RopSeekStream(), EcDoRpc_RopSetColumns(), EcDoRpc_RopSetLocalReplicaMidsetDeleted(), EcDoRpc_RopSetMessageReadFlag(), EcDoRpc_RopSetProperties(), EcDoRpc_RopSetReceiveFolder(), EcDoRpc_RopSetSearchCriteria(), EcDoRpc_RopSetSpooler(), EcDoRpc_RopSetStreamSize(), EcDoRpc_RopSortTable(), EcDoRpc_RopSubmitMessage(), EcDoRpc_RopSyncConfigure(), EcDoRpc_RopSyncGetTransferState(), EcDoRpc_RopSyncImportDeletes(), EcDoRpc_RopSyncImportHierarchyChange(), EcDoRpc_RopSyncImportMessageChange(), EcDoRpc_RopSyncImportMessageMove(), EcDoRpc_RopSyncImportReadStateChanges(), EcDoRpc_RopSyncOpenCollector(), EcDoRpc_RopSyncUploadStateStreamBegin(), EcDoRpc_RopSyncUploadStateStreamContinue(), EcDoRpc_RopSyncUploadStateStreamEnd(), EcDoRpc_RopTransportSend(), EcDoRpc_RopWriteStream(), emsmdbp_fill_notification(), and emsmdbp_context::mstore_ctx.
Referenced by dcesrv_EcDoRpc(), and dcesrv_EcDoRpcExt2().
static bool emsmdbp_fill_notification | ( | TALLOC_CTX * | mem_ctx, |
struct emsmdbp_context * | emsmdbp_ctx, | ||
struct EcDoRpc_MAPI_REPL * | mapi_repl, | ||
struct mapistore_subscription * | subscription, | ||
struct mapistore_notification * | notification, | ||
uint16_t * | sizep | ||
) | [static] |
References emsmdbp_object_table::denominator, emsmdbp_fill_table_row_blob(), emsmdbp_get_contextID(), emsmdbp_object_table_get_row_props(), emsmdbp_context::handles_ctx, libmapiserver_RopNotify_size(), mapi_handles_get_private_data(), mapi_handles_search(), emsmdbp_context::mstore_ctx, emsmdbp_object_table::numerator, emsmdbp_object_table::prop_count, and emsmdbp_object_table::properties.
Referenced by EcDoRpc_process_transaction().
NTSTATUS samba_init_module | ( | void | ) |
Entry point for the default OpenChange EMSMDB server
References dcesrv_exchange_emsmdb_dispatch(), dcesrv_exchange_emsmdb_init(), dcesrv_exchange_emsmdb_unbind(), mapiproxy_module::description, mapiproxy_module::dispatch, mapiproxy_module::endpoint, mapiproxy_module::init, MAPIPROXY_DEFAULT, mapiproxy_server_register(), mapiproxy_module::name, mapiproxy_module::ndr_pull, mapiproxy_module::pull, mapiproxy_module::push, mapiproxy_module::status, and mapiproxy_module::unbind.
struct exchange_emsmdb_session* emsmdb_session = NULL |
void* openchange_ldb_ctx = NULL |
Referenced by dcesrv_EcDoConnect(), dcesrv_EcDoConnectEx(), and dcesrv_exchange_emsmdb_init().
![]() ![]() ![]() |
This content is licensed under the Creative Commons Attribution ShareAlike License v. 3.0: http://creativecommons.org/licenses/by-sa/3.0/ |