282
277
for (i = 0; i < num_backends; i++) {
283
278
if (backends[i].backend) {
284
MSTORE_DEBUG_INFO(MSTORE_LEVEL_NORMAL, "MAPISTORE backend '%s' loaded\n", backends[i].backend->name);
285
retval = backends[i].backend->init();
279
retval = backends[i].backend->backend.init();
286
280
if (retval != MAPISTORE_SUCCESS) {
292
return (status != true) ? MAPISTORE_SUCCESS : MAPISTORE_ERR_BACKEND_INIT;
296
enum MAPISTORE_ERROR mapistore_backend_get_next_backend(const char **backend_name,
297
const char **backend_namespace,
298
const char **backend_description,
299
uint32_t *backend_index)
281
DEBUG(3, ("[!] MAPISTORE backend '%s' initialization failed\n", backends[i].backend->backend.name));
283
DEBUG(3, ("MAPISTORE backend '%s' loaded\n", backends[i].backend->backend.name));
288
return (status != true) ? MAPISTORE_SUCCESS : MAPISTORE_ERR_BACKEND_INIT;
292
\details List backend contexts for given user
294
\param mem_ctx pointer to the memory context
295
\param namespace the backend namespace
296
\param uri the backend parameters which can be passes inline
298
\return a valid backend_context pointer on success, otherwise NULL
300
enum mapistore_error mapistore_backend_list_contexts(const char *username, struct tdb_wrap *tdbwrap, TALLOC_CTX *mem_ctx, struct mapistore_contexts_list **contexts_listP)
304
MAPISTORE_RETVAL_IF(!backend_name, MAPISTORE_ERR_INVALID_PARAMETER, NULL);
305
MAPISTORE_RETVAL_IF(!backend_namespace, MAPISTORE_ERR_INVALID_PARAMETER, NULL);
306
MAPISTORE_RETVAL_IF(!backend_description, MAPISTORE_ERR_INVALID_PARAMETER, NULL);
307
MAPISTORE_RETVAL_IF(!backend_index, MAPISTORE_ERR_INVALID_PARAMETER, NULL);
310
MAPISTORE_RETVAL_IF((i >= num_backends), MAPISTORE_ERR_NOT_FOUND, NULL);
311
MAPISTORE_RETVAL_IF(!backends[i].backend, MAPISTORE_ERR_NOT_FOUND, NULL);
313
*backend_name = backends[i].backend->name;
314
*backend_namespace = backends[i].backend->uri_namespace;
315
*backend_description = backends[i].backend->description;
302
enum mapistore_error retval;
304
struct mapistore_contexts_list *contexts_list = NULL, *current_contexts_list;
306
MAPISTORE_RETVAL_IF(!username, MAPISTORE_ERR_INVALID_PARAMETER, NULL);
307
MAPISTORE_RETVAL_IF(!contexts_listP, MAPISTORE_ERR_INVALID_PARAMETER, NULL);
309
for (i = 0; i < num_backends; i++) {
310
retval = backends[i].backend->backend.list_contexts(username, tdbwrap, mem_ctx, ¤t_contexts_list);
311
if (retval != MAPISTORE_SUCCESS) {
314
DLIST_CONCATENATE(contexts_list, current_contexts_list, void);
317
*contexts_listP = contexts_list;
318
(void) talloc_reference(mem_ctx, contexts_list);
318
320
return MAPISTORE_SUCCESS;
322
\details Return the LDIF data associated to a mapistore backend
324
\param mem_ctx pointer to the mapistore context
325
\param backend_name pointer to the backend name to retrieve LDIF data from
326
\param ldif pointer on pointer to the LDIF data to return
327
\param ntype pointer to the LDIF provision data type to return
329
\return MAPISTORE_SUCCESS on success, MAPISTORE_ERR_NOT_FOUND if
330
the specified backend name was not found,
331
MAPSITORE_ERR_NOT_IMPLEMENTED if the backend doesn't handle the
332
ldif op, otherwise MAPISTORE error
324
\details Create backend context
326
\param mem_ctx pointer to the memory context
327
\param namespace the backend namespace
328
\param uri the backend parameters which can be passes inline
330
\return a valid backend_context pointer on success, otherwise NULL
334
enum MAPISTORE_ERROR mapistore_backend_get_namedprops_ldif(TALLOC_CTX *mem_ctx,
335
const char *backend_name,
337
enum MAPISTORE_NAMEDPROPS_PROVISION_TYPE *ntype)
332
enum mapistore_error mapistore_backend_create_context(TALLOC_CTX *mem_ctx, struct mapistore_connection_info *conn_info, struct tdb_wrap *tdbwrap,
333
const char *namespace, const char *uri, uint64_t fid, struct backend_context **context_p)
339
enum MAPISTORE_ERROR retval;
340
enum MAPISTORE_NAMEDPROPS_PROVISION_TYPE _ntype;
345
MAPISTORE_RETVAL_IF(!ldif, MAPISTORE_ERR_INVALID_PARAMETER, NULL);
346
MAPISTORE_RETVAL_IF(!backend_name, MAPISTORE_ERR_INVALID_PARAMETER, NULL);
347
MAPISTORE_RETVAL_IF(!ntype, MAPISTORE_ERR_INVALID_PARAMETER, NULL);
335
struct backend_context *context;
336
enum mapistore_error retval;
338
void *backend_object = NULL;
341
DEBUG(0, ("namespace is %s and backend_uri is '%s'\n", namespace, uri));
343
context = talloc_zero(NULL, struct backend_context);
349
345
for (i = 0; i < num_backends; i++) {
350
if (backends[i].backend && backends[i].backend->name &&
351
!strncmp(backends[i].backend->name, backend_name, strlen(backends[i].backend->name))) {
346
if (backends[i].backend->backend.namespace &&
347
!strcmp(namespace, backends[i].backend->backend.namespace)) {
349
retval = backends[i].backend->backend.create_context(context, conn_info, tdbwrap, uri, &backend_object);
350
if (retval != MAPISTORE_SUCCESS) {
356
if (i >= num_backends) return MAPISTORE_ERR_NOT_FOUND;
358
retval = backends[i].backend->op_db_provision_namedprops(mem_ctx, &_ldif, &_ntype);
359
MAPISTORE_RETVAL_IF(retval, retval, NULL);
361
if (_ldif && _ntype != MAPISTORE_NAMEDPROPS_PROVISION_NONE) {
362
*ldif = talloc_strdup(mem_ctx, _ldif);
372
static enum MAPISTORE_ERROR delete_context(void *data)
374
struct backend_context *context = (struct backend_context *) data;
376
context->backend->delete_context(context->private_data);
378
return MAPISTORE_SUCCESS;
382
\details Create backend context
384
\param mem_ctx pointer to the memory context
385
\param login_user the username used for authentication
386
\param username the username we want to impersonate
387
\param uri_namespace the backend namespace
388
\param uri the backend parameters which can be passes inline
390
\return a valid backend_context pointer on success, otherwise NULL
392
struct backend_context *mapistore_backend_create_context(TALLOC_CTX *mem_ctx,
393
const char *login_user,
394
const char *username,
395
const char *uri_namespace,
398
struct backend_context *context;
401
void *private_data = NULL;
404
MSTORE_DEBUG_INFO(MSTORE_LEVEL_INFO, "namespace is %s and backend URI is %s\n", uri_namespace, uri);
405
for (i = 0; i < num_backends; i++) {
406
if (backends[i].backend->uri_namespace &&
407
!strcmp(uri_namespace, backends[i].backend->uri_namespace)) {
409
retval = backends[i].backend->create_context(mem_ctx, login_user, username, uri, &private_data);
410
if (retval != MAPISTORE_SUCCESS) {
411
MSTORE_DEBUG_ERROR(MSTORE_LEVEL_CRITICAL, "Failed to create context for backend '%s': %s\n",
412
backends[i].backend->name, mapistore_errstr(retval));
419
if (found == false) {
420
MSTORE_DEBUG_ERROR(MSTORE_LEVEL_CRITICAL, "No backend with namespace '%s' is available\n", uri_namespace);
424
context = talloc_zero(mem_ctx, struct backend_context);
425
talloc_set_destructor((void *)context, (int (*)(void *))delete_context);
426
context->backend = backends[i].backend;
427
context->private_data = private_data;
428
context->ref_count = 0;
429
context->uri = talloc_strdup(context, uri);
430
talloc_steal(context, private_data);
436
\details Increase the ref count associated to a given backend
438
\param bctx pointer to the backend context
440
\return MAPISTORE_SUCCESS on success, otherwise MAPISTORE_ERROR
442
_PUBLIC_ enum MAPISTORE_ERROR mapistore_backend_add_ref_count(struct backend_context *bctx)
445
MAPISTORE_RETVAL_IF(!bctx, MAPISTORE_ERROR, NULL);
447
bctx->ref_count += 1;
449
return MAPISTORE_SUCCESS;
454
\details Delete a context from the specified backend
456
\param bctx pointer to the backend context
458
\return MAPISTORE_SUCCESS on success, otherwise MAPISTORE error
460
_PUBLIC_ enum MAPISTORE_ERROR mapistore_backend_delete_context(struct backend_context *bctx)
462
enum MAPISTORE_ERROR retval;
465
MAPISTORE_RETVAL_IF(!bctx->backend->delete_context, MAPISTORE_ERROR, NULL);
467
if (bctx->indexing) {
468
retval = mapistore_indexing_del_ref_count(bctx->indexing);
471
if (bctx->ref_count) {
472
bctx->ref_count -= 1;
473
return MAPISTORE_ERR_REF_COUNT;
476
retval = bctx->backend->delete_context(bctx->private_data);
477
talloc_set_destructor((void *)bctx, NULL);
483
_PUBLIC_ enum MAPISTORE_ERROR mapistore_backend_release_record(struct backend_context *bctx, const char *uri, uint8_t type)
485
return bctx->backend->release_record(bctx->private_data, uri, type);
489
_PUBLIC_ enum MAPISTORE_ERROR mapistore_backend_create_uri(TALLOC_CTX *mem_ctx,
490
enum MAPISTORE_DFLT_FOLDERS index,
491
const char *uri_namespace,
492
const char *username,
495
enum MAPISTORE_ERROR retval;
358
if (found == false) {
359
DEBUG(0, ("MAPISTORE: no backend with namespace '%s' is available\n", namespace));
360
retval = MAPISTORE_ERR_NOT_FOUND;
364
context->backend_object = backend_object;
365
context->backend = backends[i].backend;
366
retval = context->backend->context.get_root_folder(backend_object, context, fid, &context->root_folder_object);
367
if (retval != MAPISTORE_SUCCESS) {
371
context->ref_count = 1;
372
context->uri = talloc_asprintf(context, "%s%s", namespace, uri);
373
*context_p = context;
375
(void) talloc_reference(mem_ctx, context);
378
talloc_unlink(NULL, context);
384
enum mapistore_error mapistore_backend_create_root_folder(const char *username, enum mapistore_context_role ctx_role, uint64_t fid, const char *name, TALLOC_CTX *mem_ctx, char **mapistore_urip)
386
enum mapistore_error retval = MAPISTORE_ERR_NOT_FOUND;
389
for (i = 0; retval == MAPISTORE_ERR_NOT_FOUND && i < num_backends; i++) {
390
retval = backends[i].backend->backend.create_root_folder(username, ctx_role, fid, name, mem_ctx, mapistore_urip);
397
\details Increase the ref count associated to a given backend
399
\param bctx pointer to the backend context
401
\return MAPISTORE_SUCCESS on success, otherwise MAPISTORE_ERROR
403
_PUBLIC_ enum mapistore_error mapistore_backend_add_ref_count(struct backend_context *bctx)
406
return MAPISTORE_ERROR;
409
bctx->ref_count += 1;
411
return MAPISTORE_SUCCESS;
416
\details Delete a context from the specified backend
418
\param bctx pointer to the backend context
420
\return MAPISTORE_SUCCESS on success, otherwise MAPISTORE error
422
_PUBLIC_ enum mapistore_error mapistore_backend_delete_context(struct backend_context *bctx)
424
if (bctx->ref_count) {
425
bctx->ref_count -= 1;
426
return MAPISTORE_ERR_REF_COUNT;
431
return MAPISTORE_SUCCESS;
436
\details find the context matching given context identifier
438
\param backend_list_ctx pointer to the backend context list
439
\param context_id the context identifier to search
441
\return Pointer to the mapistore_backend context on success, otherwise NULL
443
_PUBLIC_ struct backend_context *mapistore_backend_lookup(struct backend_context_list *backend_list_ctx,
446
struct backend_context_list *el;
449
if (!backend_list_ctx) return NULL;
451
for (el = backend_list_ctx; el; el = el->next) {
452
if (el->ctx && el->ctx->context_id == context_id) {
461
\details find the context matching given uri string
463
\param backend_list_ctx pointer to the backend context list
464
\param uri the uri string to search
466
\return Pointer to the mapistore_backend context on success,
469
_PUBLIC_ struct backend_context *mapistore_backend_lookup_by_uri(struct backend_context_list *backend_list_ctx,
472
struct backend_context_list *el;
475
if (!backend_list_ctx) return NULL;
476
if (!uri) return NULL;
478
for (el = backend_list_ctx; el; el = el->next) {
479
if (el->ctx && el->ctx->uri &&
480
!strcmp(el->ctx->uri, uri)) {
489
\details Return a pointer on backend functions given its name
491
\param mem_ctx pointer to the memory context
492
\param name the backend name to lookup
494
\return Allocated pointer to the mapistore_backend context on success,
497
_PUBLIC_ struct backend_context *mapistore_backend_lookup_by_name(TALLOC_CTX *mem_ctx, const char *name)
499
struct backend_context *context = NULL;
503
if (!name) return NULL;
499
505
for (i = 0; i < num_backends; i++) {
500
if (backends[i].backend->uri_namespace &&
501
!strcmp(uri_namespace, backends[i].backend->uri_namespace)) {
502
retval = backends[i].backend->op_db_create_uri(mem_ctx, index, username, &_uri);
503
if (retval == MAPISTORE_SUCCESS) {
510
return MAPISTORE_ERR_NOT_FOUND;
514
enum MAPISTORE_ERROR mapistore_backend_root_mkdir(struct backend_context *bctx, enum MAPISTORE_DFLT_FOLDERS system_idx,
515
const char *mapistore_uri, const char *folder_name)
517
return bctx->backend->op_db_mkdir(bctx->private_data, system_idx, mapistore_uri, folder_name);
522
\details find the context matching given context identifier
524
\param backend_list_ctx pointer to the backend context list
525
\param context_id the context identifier to search
527
\return Pointer to the mapistore_backend context on success, otherwise NULL
529
_PUBLIC_ struct backend_context *mapistore_backend_lookup(struct backend_context_list *backend_list_ctx,
532
struct backend_context_list *el;
535
if (!backend_list_ctx) return NULL;
537
for (el = backend_list_ctx; el; el = el->next) {
538
if (el->ctx && el->ctx->context_id == context_id) {
548
\details find the context matching given uri string
550
\param backend_list_ctx pointer to the backend context list
551
\param uri the uri string to search
553
\return Pointer to the mapistore_backend context on success,
556
_PUBLIC_ struct backend_context *mapistore_backend_lookup_by_uri(struct backend_context_list *backend_list_ctx,
559
struct backend_context_list *el;
562
if (!backend_list_ctx) return NULL;
563
if (!uri) return NULL;
565
for (el = backend_list_ctx; el; el = el->next) {
566
if (el->ctx && el->ctx->uri &&
567
!strcmp(el->ctx->uri, uri)) {
575
enum MAPISTORE_ERROR mapistore_get_path(struct backend_context *bctx, const char *uri, uint8_t type, char **path)
577
enum MAPISTORE_ERROR ret;
581
MAPISTORE_RETVAL_IF(!bctx, MAPISTORE_ERR_NOT_INITIALIZED, NULL);
582
MAPISTORE_RETVAL_IF(!uri, MAPISTORE_ERR_INVALID_PARAMETER, NULL);
583
MAPISTORE_RETVAL_IF(!path, MAPISTORE_ERR_INVALID_PARAMETER, NULL);
585
ret = bctx->backend->get_path(bctx->private_data, uri, type, &bpath);
588
*path = talloc_asprintf(bctx, "%s%s", bctx->backend->uri_namespace, bpath);
597
/* enum MAPISTORE_ERROR mapistore_backend_opendir(struct backend_context *bctx, uint64_t parent_fid, uint64_t fid) */
599
/* return bctx->backend->op_opendir(bctx->private_data, parent_fid, fid); */
602
enum MAPISTORE_ERROR mapistore_backend_opendir(struct backend_context *bctx,
603
const char *parent_uri,
604
const char *folder_uri)
606
return bctx->backend->op_opendir(bctx->private_data, parent_uri, folder_uri);
610
enum MAPISTORE_ERROR mapistore_backend_mkdir(struct backend_context *bctx,
612
const char *folder_name,
613
const char *folder_desc,
614
enum FOLDER_TYPE folder_type,
617
enum MAPISTORE_ERROR retval;
619
retval = bctx->backend->op_mkdir(bctx->private_data, parent_uri, folder_name, folder_desc, folder_type, folder_uri);
624
enum MAPISTORE_ERROR mapistore_backend_closedir(struct backend_context *bctx,
625
const char *folder_uri)
627
return bctx->backend->op_closedir(bctx->private_data, folder_uri);
630
enum MAPISTORE_ERROR mapistore_backend_rmdir(struct backend_context *bctx,
631
const char *parent_uri,
632
const char *folder_uri)
634
return bctx->backend->op_rmdir(bctx->private_data, parent_uri, folder_uri);
638
enum MAPISTORE_ERROR mapistore_backend_readdir_count(struct backend_context *bctx,
639
const char *folder_uri,
640
enum MAPISTORE_TABLE_TYPE table_type,
643
enum MAPISTORE_ERROR retval;
646
retval = bctx->backend->op_readdir_count(bctx->private_data, folder_uri, table_type, &count);
653
enum MAPISTORE_ERROR mapistore_backend_get_table_property(struct backend_context *bctx,
654
const char * folder_uri,
655
enum MAPISTORE_TABLE_TYPE table_type,
657
enum MAPITAGS proptag,
660
return bctx->backend->op_get_table_property(bctx->private_data, folder_uri, table_type, pos, proptag, data);
664
enum MAPISTORE_ERROR mapistore_backend_openmessage(struct backend_context *bctx,
665
const char *parent_uri,
666
const char *message_uri,
667
struct mapistore_message *msg)
669
return bctx->backend->op_openmessage(bctx->private_data, parent_uri, message_uri, msg);
673
enum MAPISTORE_ERROR mapistore_backend_createmessage(struct backend_context *bctx,
674
const char *parent_uri,
678
return bctx->backend->op_createmessage(bctx->private_data, parent_uri, message_uri, uri_register);
682
enum MAPISTORE_ERROR mapistore_backend_savechangesmessage(struct backend_context *bctx,
683
const char *message_uri,
686
return bctx->backend->op_savechangesmessage(bctx->private_data, message_uri, flags);
690
enum MAPISTORE_ERROR mapistore_backend_submitmessage(struct backend_context *bctx,
691
const char *message_uri,
694
return bctx->backend->op_submitmessage(bctx->private_data, message_uri, flags);
698
enum MAPISTORE_ERROR mapistore_backend_getprops(struct backend_context *bctx,
701
struct SPropTagArray *SPropTagArray,
704
return bctx->backend->op_getprops(bctx->private_data, uri, type, SPropTagArray, aRow);
708
enum MAPISTORE_ERROR mapistore_backend_get_uri_by_name(struct backend_context *bctx,
709
const char *parent_uri,
713
return bctx->backend->op_get_uri_by_name(bctx->private_data, parent_uri, name, uri);
718
enum MAPISTORE_ERROR mapistore_backend_setprops(struct backend_context *bctx,
723
return bctx->backend->op_setprops(bctx->private_data, uri, type, aRow);
726
enum MAPISTORE_ERROR mapistore_backend_deletemessage(struct backend_context *bctx,
727
const char *message_uri,
728
enum MAPISTORE_DELETION_TYPE deletion_type)
730
return bctx->backend->op_deletemessage(bctx->private_data, message_uri, deletion_type);
506
if (backends[i].backend && !strcmp(backends[i].backend->backend.name, name)) {
507
context = talloc_zero(mem_ctx, struct backend_context);
508
context->backend = backends[i].backend;
509
context->ref_count = 0;
519
enum mapistore_error mapistore_backend_get_path(struct backend_context *bctx, TALLOC_CTX *mem_ctx, uint64_t fmid, char **path)
521
enum mapistore_error ret;
524
ret = bctx->backend->context.get_path(bctx->backend_object, mem_ctx, fmid, &bpath);
527
*path = talloc_asprintf(mem_ctx, "%s%s", bctx->backend->backend.namespace, bpath);
535
enum mapistore_error mapistore_backend_folder_open_folder(struct backend_context *bctx, void *folder, TALLOC_CTX *mem_ctx, uint64_t fid, void **child_folder)
537
return bctx->backend->folder.open_folder(folder, mem_ctx, fid, child_folder);
540
enum mapistore_error mapistore_backend_folder_create_folder(struct backend_context *bctx, void *folder,
541
TALLOC_CTX *mem_ctx, uint64_t fid, struct SRow *aRow, void **child_folder)
543
return bctx->backend->folder.create_folder(folder, mem_ctx, fid, aRow, child_folder);
546
enum mapistore_error mapistore_backend_folder_delete(struct backend_context *bctx, void *folder)
548
return bctx->backend->folder.delete(folder);
551
enum mapistore_error mapistore_backend_folder_open_message(struct backend_context *bctx, void *folder,
552
TALLOC_CTX *mem_ctx, uint64_t mid, bool read_write, void **messagep)
554
return bctx->backend->folder.open_message(folder, mem_ctx, mid, read_write, messagep);
557
enum mapistore_error mapistore_backend_folder_create_message(struct backend_context *bctx, void *folder, TALLOC_CTX *mem_ctx, uint64_t mid, uint8_t associated, void **messagep)
559
return bctx->backend->folder.create_message(folder, mem_ctx, mid, associated, messagep);
562
enum mapistore_error mapistore_backend_folder_delete_message(struct backend_context *bctx, void *folder, uint64_t mid, uint8_t flags)
564
return bctx->backend->folder.delete_message(folder, mid, flags);
567
enum mapistore_error mapistore_backend_folder_move_copy_messages(struct backend_context *bctx, void *target_folder, void *source_folder, uint32_t mid_count, uint64_t *source_mids, uint64_t *target_mids, struct Binary_r **target_change_keys, uint8_t want_copy)
569
return bctx->backend->folder.move_copy_messages(target_folder, source_folder, mid_count, source_mids, target_mids, target_change_keys, want_copy);
572
enum mapistore_error mapistore_backend_folder_get_deleted_fmids(struct backend_context *bctx, void *folder, TALLOC_CTX *mem_ctx, enum mapistore_table_type table_type, uint64_t change_num, struct I8Array_r **fmidsp, uint64_t *cnp)
574
return bctx->backend->folder.get_deleted_fmids(folder, mem_ctx, table_type, change_num, fmidsp, cnp);
577
enum mapistore_error mapistore_backend_folder_get_child_count(struct backend_context *bctx, void *folder, enum mapistore_table_type table_type, uint32_t *RowCount)
579
return bctx->backend->folder.get_child_count(folder, table_type, RowCount);
582
enum mapistore_error mapistore_backend_folder_get_child_fid_by_name(struct backend_context *bctx, void *folder, const char *name, uint64_t *fidp)
584
enum mapistore_error ret = MAPISTORE_SUCCESS;
585
struct mapi_SRestriction name_restriction;
590
struct mapistore_property_data *data_pointers;
593
mem_ctx = talloc_zero(NULL, TALLOC_CTX);
595
if (mapistore_backend_folder_open_table(bctx, folder, mem_ctx, MAPISTORE_FOLDER_TABLE, 0, &table, &row_count)) {
596
talloc_free(mem_ctx);
597
return MAPISTORE_ERROR;
600
name_restriction.rt = RES_PROPERTY;
601
name_restriction.res.resProperty.relop = RELOP_EQ;
602
name_restriction.res.resProperty.ulPropTag = PR_DISPLAY_NAME_UNICODE;
603
name_restriction.res.resProperty.lpProp.ulPropTag = name_restriction.res.resProperty.ulPropTag;
604
name_restriction.res.resProperty.lpProp.value.lpszW = name;
607
mapistore_backend_table_set_columns(bctx, table, 1, &col);
608
mapistore_backend_table_set_restrictions(bctx, table, &name_restriction, &status);
609
ret = mapistore_backend_table_get_row(bctx, table, mem_ctx, MAPISTORE_PREFILTERED_QUERY, 0, &data_pointers);
611
if (data_pointers[0].error) {
612
ret = MAPISTORE_ERROR;
615
*fidp = *(uint64_t *) data_pointers[0].data;
619
talloc_free(mem_ctx);
624
enum mapistore_error mapistore_backend_folder_open_table(struct backend_context *bctx, void *folder,
625
TALLOC_CTX *mem_ctx, enum mapistore_table_type table_type, uint32_t handle_id, void **table, uint32_t *row_count)
627
return bctx->backend->folder.open_table(folder, mem_ctx, table_type, handle_id, table, row_count);
630
enum mapistore_error mapistore_backend_folder_modify_permissions(struct backend_context *bctx, void *folder,
631
uint8_t flags, uint16_t pcount, struct PermissionData *permissions)
633
return bctx->backend->folder.modify_permissions(folder, flags, pcount, permissions);
636
enum mapistore_error mapistore_backend_message_get_message_data(struct backend_context *bctx, void *message, TALLOC_CTX *mem_ctx, struct mapistore_message **msg)
638
return bctx->backend->message.get_message_data(message, mem_ctx, msg);
641
enum mapistore_error mapistore_backend_message_modify_recipients(struct backend_context *bctx, void *message, struct SPropTagArray *columns, uint16_t count, struct mapistore_message_recipient *recipients)
643
return bctx->backend->message.modify_recipients(message, columns, count, recipients);
646
enum mapistore_error mapistore_backend_message_set_read_flag(struct backend_context *bctx, void *message, uint8_t flag)
648
return bctx->backend->message.set_read_flag(message, flag);
651
enum mapistore_error mapistore_backend_message_save(struct backend_context *bctx, void *message)
653
return bctx->backend->message.save(message);
656
enum mapistore_error mapistore_backend_message_submit(struct backend_context *bctx, void *message, enum SubmitFlags flags)
658
return bctx->backend->message.submit(message, flags);
661
enum mapistore_error mapistore_backend_message_open_attachment(struct backend_context *bctx, void *message, TALLOC_CTX *mem_ctx, uint32_t aid, void **attachment)
663
return bctx->backend->message.open_attachment(message, mem_ctx, aid, attachment);
666
enum mapistore_error mapistore_backend_message_create_attachment(struct backend_context *bctx, void *message, TALLOC_CTX *mem_ctx, void **attachment, uint32_t *aid)
668
return bctx->backend->message.create_attachment(message, mem_ctx, attachment, aid);
671
enum mapistore_error mapistore_backend_message_get_attachment_table(struct backend_context *bctx, void *message, TALLOC_CTX *mem_ctx, void **table, uint32_t *row_count)
673
return bctx->backend->message.get_attachment_table(message, mem_ctx, table, row_count);
676
enum mapistore_error mapistore_backend_message_attachment_open_embedded_message(struct backend_context *bctx, void *message, TALLOC_CTX *mem_ctx, void **embedded_message, uint64_t *mid, struct mapistore_message **msg)
678
return bctx->backend->message.open_embedded_message(message, mem_ctx, embedded_message, mid, msg);
681
enum mapistore_error mapistore_backend_table_get_available_properties(struct backend_context *bctx, void *table, TALLOC_CTX *mem_ctx, struct SPropTagArray **propertiesp)
683
return bctx->backend->table.get_available_properties(table, mem_ctx, propertiesp);
686
enum mapistore_error mapistore_backend_table_set_columns(struct backend_context *bctx, void *table, uint16_t count, enum MAPITAGS *properties)
688
return bctx->backend->table.set_columns(table, count, properties);
691
enum mapistore_error mapistore_backend_table_set_restrictions(struct backend_context *bctx, void *table, struct mapi_SRestriction *restrictions, uint8_t *table_status)
693
return bctx->backend->table.set_restrictions(table, restrictions, table_status);
696
enum mapistore_error mapistore_backend_table_set_sort_order(struct backend_context *bctx, void *table, struct SSortOrderSet *sort_order, uint8_t *table_status)
698
return bctx->backend->table.set_sort_order(table, sort_order, table_status);
701
enum mapistore_error mapistore_backend_table_get_row(struct backend_context *bctx, void *table, TALLOC_CTX *mem_ctx,
702
enum mapistore_query_type query_type, uint32_t rowid,
703
struct mapistore_property_data **data)
705
return bctx->backend->table.get_row(table, mem_ctx, query_type, rowid, data);
708
enum mapistore_error mapistore_backend_table_get_row_count(struct backend_context *bctx, void *table, enum mapistore_query_type query_type, uint32_t *row_countp)
710
return bctx->backend->table.get_row_count(table, query_type, row_countp);
713
enum mapistore_error mapistore_backend_table_handle_destructor(struct backend_context *bctx, void *table, uint32_t handle_id)
715
return bctx->backend->table.handle_destructor(table, handle_id);
718
enum mapistore_error mapistore_backend_properties_get_available_properties(struct backend_context *bctx, void *object, TALLOC_CTX *mem_ctx, struct SPropTagArray **propertiesp)
720
return bctx->backend->properties.get_available_properties(object, mem_ctx, propertiesp);
723
enum mapistore_error mapistore_backend_properties_get_properties(struct backend_context *bctx,
724
void *object, TALLOC_CTX *mem_ctx,
725
uint16_t count, enum MAPITAGS
727
struct mapistore_property_data *data)
729
return bctx->backend->properties.get_properties(object, mem_ctx, count, properties, data);
732
enum mapistore_error mapistore_backend_properties_set_properties(struct backend_context *bctx, void *object, struct SRow *aRow)
734
return bctx->backend->properties.set_properties(object, aRow);
737
enum mapistore_error mapistore_backend_manager_generate_uri(struct backend_context *bctx, TALLOC_CTX *mem_ctx,
738
const char *username, const char *folder,
739
const char *message, const char *root_uri, char **uri)
741
return bctx->backend->manager.generate_uri(mem_ctx, username, folder, message, root_uri, uri);