dcesrv_exchange_emsmdb.c File Reference

OpenChange EMSMDB Server implementation. More...

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_sessionemsmdb_session = NULL
 
void * openchange_ldb_ctx = NULL
 

Detailed Description

OpenChange EMSMDB Server implementation.

Function Documentation

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

Parameters
dce_callpointer to the session context
mem_ctxpointer to the memory context
rpointer to the EcDoAsyncConnectExt request data
Returns
MAPI_E_SUCCESS on success
static enum MAPISTATUS dcesrv_EcDoConnect ( struct dcesrv_call_state *  dce_call,
TALLOC_CTX *  mem_ctx,
struct EcDoConnect *  r 
)
static
static enum MAPISTATUS dcesrv_EcDoConnectEx ( struct dcesrv_call_state *  dce_call,
TALLOC_CTX *  mem_ctx,
struct EcDoConnectEx *  r 
)
static
static enum MAPISTATUS dcesrv_EcDoDisconnect ( struct dcesrv_call_state *  dce_call,
TALLOC_CTX *  mem_ctx,
struct EcDoDisconnect *  r 
)
static

exchange_emsmdb EcDoDisconnect (0x1) function

Parameters
dce_callpointer to the session context
mem_ctxpointer to the memory context
rpointer to the EcDoDisconnect request data
Returns
MAPI_E_SUCCESS on success

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

Parameters
dce_callpointer to the session context
mem_ctxpointer to the memory context
rpointer to the EcDoRpc request data
Returns
MAPI_E_SUCCESS on success

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

Parameters
dce_callpointer to the session context
mem_ctxpointer to the memory context
rpointer to the EcDoRpcExt request data
Returns
MAPI_E_SUCCESS on success
static enum MAPISTATUS dcesrv_EcDoRpcExt2 ( struct dcesrv_call_state *  dce_call,
TALLOC_CTX *  mem_ctx,
struct EcDoRpcExt2 *  r 
)
static

exchange_emsmdb EcDoRpcExt2 (0xB) function

Parameters
dce_callpointer to the session context
mem_ctxpointer to the memory context
rpointer to the EcDoRpcExt2 request data
Returns
MAPI_E_SUCCESS on success

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

Parameters
dce_callpointer to the session context
mem_ctxpointer to the memory context
rpointer to the EcDummyRpc request data
Returns
MAPI_E_SUCCESS on success
static void dcesrv_EcGetMoreRpc ( struct dcesrv_call_state *  dce_call,
TALLOC_CTX *  mem_ctx,
struct EcGetMoreRpc *  r 
)
static

exchange_emsmdb EcGetMoreRpc (0x3) function

Parameters
dce_callpointer to the session context
mem_ctxpointer to the memory context
rpointer to the EcGetMoreRpc request data
Returns
MAPI_E_SUCCESS on success
static void dcesrv_EcRGetDCName ( struct dcesrv_call_state *  dce_call,
TALLOC_CTX *  mem_ctx,
struct EcRGetDCName *  r 
)
static

exchange_emsmdb EcRGetDCName (0x7) function

Parameters
dce_callpointer to the session context
mem_ctxpointer to the memory context
rpointer to the EcRGetDCName request data
Returns
MAPI_E_SUCCESS on success
static void dcesrv_EcRNetGetDCName ( struct dcesrv_call_state *  dce_call,
TALLOC_CTX *  mem_ctx,
struct EcRNetGetDCName *  r 
)
static

exchange_emsmdb EcRNetGetDCName (0x8) function

Parameters
dce_callpointer to the session context
mem_ctxpointer to the memory context
rpointer to the EcRNetGetDCName request data
Returns
MAPI_E_SUCCESS on success
static enum MAPISTATUS dcesrv_EcRRegisterPushNotification ( struct dcesrv_call_state *  dce_call,
TALLOC_CTX *  mem_ctx,
struct EcRRegisterPushNotification *  r 
)
static

exchange_emsmdb EcRRegisterPushNotification (0x4) function

Parameters
dce_callpointer to the session context
mem_ctxpointer to the memory context
rpointer to the EcRRegisterPushNotification request data
Returns
MAPI_E_SUCCESS on success

References dcesrv_find_emsmdb_session(), 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

Parameters
dce_callpointer to the session context
mem_ctxpointer to the memory context
rpointer to the EcRUnregisterPushNotification request data
Returns
MAPI_E_SUCCESS on success
static void dcesrv_EcUnknown0xC ( struct dcesrv_call_state *  dce_call,
TALLOC_CTX *  mem_ctx,
struct EcUnknown0xC *  r 
)
static

exchange_emsmdb EcUnknown0xC (0xc) function

Parameters
dce_callpointer to the session context
mem_ctxpointer to the memory context
rpointer to the EcUnknown0xC request data
Returns
MAPI_E_SUCCESS on success
static void dcesrv_EcUnknown0xD ( struct dcesrv_call_state *  dce_call,
TALLOC_CTX *  mem_ctx,
struct EcUnknown0xD *  r 
)
static

exchange_emsmdb EcUnknown0xD (0xc) function

Parameters
dce_callpointer to the session context
mem_ctxpointer to the memory context
rpointer to the EcUnknown0xD request data
Returns
MAPI_E_SUCCESS on success
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

Parameters
dce_callpointer to the session context
mem_ctxpointer to the memory context
rgeneric pointer on EMSMDB data
mapiproxypointer to the mapiproxy structure controlling mapiproxy behavior
Returns
NT_STATUS_OK;

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

Parameters
dce_ctxpointer to the server context
Returns
NT_STATUS_OK on success

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.

Parameters
server_idreference to the server identifier structure
context_idthe connection context identifier
Returns
NT_STATUS_OK on success

Referenced by samba_init_module().

static struct mapi_response* EcDoRpc_process_transaction ( TALLOC_CTX *  mem_ctx,
struct emsmdbp_context emsmdbp_ctx,
struct mapi_request *  mapi_request 
)
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 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

Variable Documentation

struct exchange_emsmdb_session* emsmdb_session = NULL
void* openchange_ldb_ctx = NULL

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/