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 |
Referenced by dcesrv_EcDoConnectEx().
|
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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(), and exchange_emsmdb_session::session.
|
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 |
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 |
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 |
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 |
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 |
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 |
|
static |
References EcDoRpc_RopCommitStream(), EcDoRpc_RopCopyFolder(), 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_RopMoveFolder(), 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 |
References emsmdbp_object::backend_object, 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::object, emsmdbp_object_table::prop_count, emsmdbp_object_table::properties, and emsmdbp_objects::table.
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/ |