int main(int argc, const char *argv[]) { TALLOC_CTX *mem_ctx; int retval; struct mapistore_context *mstore_ctx; struct loadparm_context *lp_ctx; struct backend_context *context; struct backend_context_list *context_list; poptContext pc; int opt, i; const char *opt_debug = NULL; uint32_t context_id = 0; void *root_folder; enum { OPT_DEBUG=1000 }; struct poptOption long_options[] = { POPT_AUTOHELP { "debuglevel", 'd', POPT_ARG_STRING, NULL, OPT_DEBUG, "set the debug level", NULL }, { NULL, 0, 0, NULL, 0, NULL, NULL } }; mem_ctx = talloc_named(NULL, 0, "mapistore_EL_test"); lp_ctx = loadparm_init_global(true); setup_logging(NULL, DEBUG_STDOUT); pc = poptGetContext("mapistore_test", argc, argv, long_options, 0); while ((opt = poptGetNextOpt(pc)) != -1) { switch (opt) { case OPT_DEBUG: opt_debug = poptGetOptArg(pc); break; } } poptFreeContext(pc); if (opt_debug) lpcfg_set_cmdline(lp_ctx, "log level", opt_debug); printf("Mapping path : "); retval = mapistore_set_mapping_path("/tmp"); if (retval != MAPISTORE_SUCCESS) { printf("ERROR: %s\n", mapistore_errstr(retval)); exit (1); } printf("OK\n"); printf("Initialise mapistore\n"); mstore_ctx = mapistore_init(mem_ctx, lp_ctx, NULL); if (!mstore_ctx) { printf("ERROR: %s\n", mapistore_errstr(retval)); exit (1); } printf("Adding a context (INBOX)\n"); retval = mapistore_add_context(mstore_ctx, "Administrator", "EasyLinux://INBOX", -1, &context_id, &root_folder); if (retval != MAPISTORE_SUCCESS) { printf("ERROR: %s\n", mapistore_errstr(retval)); exit (1); } //DEBUG(0,(" Root folder: %s",(char *)root_folder) ); /* DEBUG(0,("Delete context : ")); retval = mapistore_del_context(mstore_ctx, context_id); DEBUG(0,("OK\n")); */ DEBUG(0,("Release : ")); retval = mapistore_release(mstore_ctx); if (retval != MAPISTORE_SUCCESS) { DEBUG(0, ("%s\n", mapistore_errstr(retval))); exit (1); } DEBUG(0,("OK\n")); return 0; }
/** \details Initialize the EMSMDBP context and open connections to Samba databases. \param lp_ctx pointer to the loadparm_context \param username account name for current session \param ldb_ctx pointer to the openchange dispatcher ldb database \return Allocated emsmdbp_context pointer on success, otherwise NULL */ _PUBLIC_ struct emsmdbp_context *emsmdbp_init(struct loadparm_context *lp_ctx, const char *username, void *ldb_ctx) { TALLOC_CTX *mem_ctx; struct emsmdbp_context *emsmdbp_ctx; struct tevent_context *ev; enum mapistore_error ret; /* Sanity Checks */ if (!lp_ctx) return NULL; mem_ctx = talloc_named(NULL, 0, "emsmdbp_init"); emsmdbp_ctx = talloc_zero(mem_ctx, struct emsmdbp_context); if (!emsmdbp_ctx) { talloc_free(mem_ctx); return NULL; } emsmdbp_ctx->mem_ctx = mem_ctx; ev = tevent_context_init(mem_ctx); if (!ev) { talloc_free(mem_ctx); return NULL; } tevent_loop_allow_nesting(ev); /* Save a pointer to the loadparm context */ emsmdbp_ctx->lp_ctx = lp_ctx; /* return an opaque context pointer on samDB database */ emsmdbp_ctx->samdb_ctx = samdb_connect(mem_ctx, ev, lp_ctx, system_session(lp_ctx), 0); if (!emsmdbp_ctx->samdb_ctx) { talloc_free(mem_ctx); DEBUG(0, ("[%s:%d]: Connection to \"sam.ldb\" failed\n", __FUNCTION__, __LINE__)); return NULL; } /* Reference global OpenChange dispatcher database pointer within current context */ emsmdbp_ctx->oc_ctx = ldb_ctx; /* Initialize the mapistore context */ emsmdbp_ctx->mstore_ctx = mapistore_init(mem_ctx, lp_ctx, NULL); if (!emsmdbp_ctx->mstore_ctx) { DEBUG(0, ("[%s:%d]: MAPISTORE initialization failed\n", __FUNCTION__, __LINE__)); talloc_free(mem_ctx); return NULL; } ret = mapistore_set_connection_info(emsmdbp_ctx->mstore_ctx, emsmdbp_ctx->samdb_ctx, emsmdbp_ctx->oc_ctx, username); if (ret != MAPISTORE_SUCCESS) { DEBUG(0, ("[%s:%d]: MAPISTORE connection info initialization failed\n", __FUNCTION__, __LINE__)); talloc_free(mem_ctx); return NULL; } talloc_set_destructor((void *)emsmdbp_ctx->mstore_ctx, (int (*)(void *))emsmdbp_mapi_store_destructor); /* Initialize MAPI handles context */ emsmdbp_ctx->handles_ctx = mapi_handles_init(mem_ctx); if (!emsmdbp_ctx->handles_ctx) { DEBUG(0, ("[%s:%d]: MAPI handles context initialization failed\n", __FUNCTION__, __LINE__)); talloc_free(mem_ctx); return NULL; } talloc_set_destructor((void *)emsmdbp_ctx->handles_ctx, (int (*)(void *))emsmdbp_mapi_handles_destructor); return emsmdbp_ctx; }
/** \details Initialize the EMSMDBP context and open connections to Samba databases. \param lp_ctx pointer to the loadparm_context \param username account name for current session \param ldb_ctx pointer to the openchange dispatcher ldb database \return Allocated emsmdbp_context pointer on success, otherwise NULL */ _PUBLIC_ struct emsmdbp_context *emsmdbp_init(struct loadparm_context *lp_ctx, const char *username, void *oc_ctx) { TALLOC_CTX *mem_ctx; struct emsmdbp_context *emsmdbp_ctx; enum mapistore_error ret; /* Sanity Checks */ if (!lp_ctx) return NULL; mem_ctx = talloc_named(NULL, 0, "emsmdbp_init"); emsmdbp_ctx = talloc_zero(mem_ctx, struct emsmdbp_context); if (!emsmdbp_ctx) { talloc_free(mem_ctx); return NULL; } emsmdbp_ctx->mem_ctx = mem_ctx; /* Save a pointer to the loadparm context */ emsmdbp_ctx->lp_ctx = lp_ctx; emsmdbp_ctx->samdb_ctx = samdb_init(lp_ctx); if (!emsmdbp_ctx->samdb_ctx) { talloc_free(mem_ctx); OC_DEBUG(0, "Connection to \"sam.ldb\" failed\n"); return NULL; } /* Reference global OpenChange dispatcher database pointer within current context */ emsmdbp_ctx->oc_ctx = oc_ctx; /* Initialize the mapistore context */ emsmdbp_ctx->mstore_ctx = mapistore_init(mem_ctx, lp_ctx, NULL); if (!emsmdbp_ctx->mstore_ctx) { OC_DEBUG(0, "MAPISTORE initialization failed\n"); talloc_free(mem_ctx); return NULL; } ret = mapistore_set_connection_info(emsmdbp_ctx->mstore_ctx, emsmdbp_ctx->samdb_ctx, emsmdbp_ctx->oc_ctx, username); if (ret != MAPISTORE_SUCCESS) { OC_DEBUG(0, "MAPISTORE connection info initialization failed\n"); talloc_free(mem_ctx); return NULL; } talloc_set_destructor((void *)emsmdbp_ctx->mstore_ctx, (int (*)(void *))emsmdbp_mapi_store_destructor); /* Initialize MAPI handles context */ emsmdbp_ctx->handles_ctx = mapi_handles_init(mem_ctx); if (!emsmdbp_ctx->handles_ctx) { OC_DEBUG(0, "MAPI handles context initialization failed\n"); talloc_free(mem_ctx); return NULL; } talloc_set_destructor((void *)emsmdbp_ctx->handles_ctx, (int (*)(void *))emsmdbp_mapi_handles_destructor); return emsmdbp_ctx; }