} END_TEST START_TEST (test_call_get_distinguishedName) { char *dn; CHECK_SUCCESS(openchangedb_get_distinguishedName(mem_ctx, oc_ctx, 1234, &dn)); ck_assert_int_eq(functions_called.get_distinguishedName, 1); } END_TEST
/** \details Initialize and create a message object \param mem_ctx pointer to the memory context to use for allocation \param ldb_ctx pointer to the ldb context \param messageID the identifier of the message to create \param folderID the identifier of the folder where the message is created \param message_object pointer on pointer to the message object to return \return MAPI_E_SUCCESS on success, otherwise MAPI error */ _PUBLIC_ enum MAPISTATUS openchangedb_message_create(TALLOC_CTX *mem_ctx, struct ldb_context *ldb_ctx, uint64_t messageID, uint64_t folderID, bool fai, void **message_object) { enum MAPISTATUS retval; struct openchangedb_message *msg; struct ldb_dn *basedn; char *dn; char *parentDN; char *mailboxDN; int i; /* Sanity checks */ OPENCHANGE_RETVAL_IF(!ldb_ctx, MAPI_E_NOT_INITIALIZED, NULL); OPENCHANGE_RETVAL_IF(!message_object, MAPI_E_NOT_INITIALIZED, NULL); /* Retrieve distinguishedName of parent folder */ retval = openchangedb_get_distinguishedName(mem_ctx, ldb_ctx, folderID, &parentDN); OPENCHANGE_RETVAL_IF(retval, retval, NULL); /* Retrieve mailboxDN of parent folder */ retval = openchangedb_get_mailboxDN(mem_ctx, ldb_ctx, folderID, &mailboxDN); if (retval) { mailboxDN = NULL; } dn = talloc_asprintf(mem_ctx, "CN=%"PRIu64",%s", messageID, parentDN); OPENCHANGE_RETVAL_IF(!dn, MAPI_E_NOT_ENOUGH_MEMORY, NULL); basedn = ldb_dn_new(mem_ctx, ldb_ctx, dn); talloc_free(dn); OPENCHANGE_RETVAL_IF(!ldb_dn_validate(basedn), MAPI_E_BAD_VALUE, NULL); msg = talloc_zero(mem_ctx, struct openchangedb_message); OPENCHANGE_RETVAL_IF(!msg, MAPI_E_NOT_ENOUGH_MEMORY, NULL); msg->status = OPENCHANGEDB_MESSAGE_CREATE; msg->folderID = folderID; msg->messageID = messageID; msg->ldb_ctx = ldb_ctx; msg->msg = NULL; msg->res = NULL; msg->msg = ldb_msg_new((TALLOC_CTX *)msg); OPENCHANGE_RETVAL_IF(!msg->msg, MAPI_E_NOT_ENOUGH_MEMORY, msg); msg->msg->dn = ldb_dn_copy((TALLOC_CTX *)msg->msg, basedn); /* Add openchangedb required attributes */ ldb_msg_add_string(msg->msg, "objectClass", fai ? "faiMessage" : "systemMessage"); ldb_msg_add_fmt(msg->msg, "cn", "%"PRIu64, messageID); ldb_msg_add_fmt(msg->msg, "PidTagParentFolderId", "%"PRIu64, folderID); ldb_msg_add_fmt(msg->msg, "PidTagMessageId", "%"PRIu64, messageID); ldb_msg_add_fmt(msg->msg, "distinguishedName", "%s", ldb_dn_get_linearized(msg->msg->dn)); if (mailboxDN) { ldb_msg_add_string(msg->msg, "mailboxDN", mailboxDN); } /* Add required properties as described in [MS_OXCMSG] 3.2.5.2 */ ldb_msg_add_string(msg->msg, "PidTagDisplayBcc", ""); ldb_msg_add_string(msg->msg, "PidTagDisplayCc", ""); ldb_msg_add_string(msg->msg, "PidTagDisplayTo", ""); /* PidTagMessageSize */ /* PidTagSecurityDescriptor */ /* ldb_msg_add_string(msg->msg, "PidTagCreationTime", ""); */ /* ldb_msg_add_string(msg->msg, "PidTagLastModificationTime", ""); */ /* PidTagSearchKey */ /* PidTagMessageLocalId */ /* PidTagCreatorName */ /* PidTagCreatorEntryId */ ldb_msg_add_fmt(msg->msg, "PidTagHasNamedProperties", "%d", 0x0); /* PidTagLocaleId same as PidTagMessageLocaleId */ /* PidTagLocalCommitTime same as PidTagCreationTime */ /* Set LDB flag */ for (i = 0; i < msg->msg->num_elements; i++) { msg->msg->elements[i].flags = LDB_FLAG_MOD_ADD; } *message_object = (void *)msg; return MAPI_E_SUCCESS; }