printf("Create profile with %s %s %s %s\n", username, password, domain, server); profname = g_strdup_printf("%s@%s", username, domain); workstation = "localhost"; //FIXME: USE g_build_filename profpath = g_strdup_printf("%s/%s", getenv("HOME"), DEFAULT_PROF_PATH); if (!g_file_test (profpath, G_FILE_TEST_EXISTS)) { /* Create MAPI Profile */ //FIXME: Get the PATH from Makefile if (CreateProfileStore (profpath, "/usr/local/samba/share/setup") != MAPI_E_SUCCESS) { g_warning ("Profile Database creation failed\n"); return NULL; } } if (MAPIInitialize(profpath) != MAPI_E_SUCCESS){ g_free(profpath); status = GetLastError(); if (status == MAPI_E_SESSION_LIMIT){ puts("[Openchange_plugin] openchange-lwmapi.c - Still connected"); mapi_errstr("MAPIInitialize", GetLastError()); } else return NULL; } //g_free(profpath); printf("[Openchange_plugin] Profile creation %s in %s",profname, profpath); while(CreateProfile(profname, username, password, 0) == -1){ retval = GetLastError(); if(retval == MAPI_E_NO_ACCESS){ printf("[Openchange_plugin] The profile alderly exist !. Deleting it and will recreate"); if (DeleteProfile(profname) == -1) { retval = GetLastError(); mapi_errstr("[Openchange_plugin] openchange_profile.c : DeleteProfile() ", retval); return NULL; } } } mapi_profile_add_string_attr(profname, "binding", server); mapi_profile_add_string_attr(profname, "workstation", workstation); mapi_profile_add_string_attr(profname, "domain", domain); /* This is only convenient here and should be replaced at some point */ mapi_profile_add_string_attr(profname, "codepage", "0x4e4"); mapi_profile_add_string_attr(profname, "language", "0x40c"); mapi_profile_add_string_attr(profname, "method", "0x409"); /* Login now */ printf("Logging into the server\n"); if (MapiLogonProvider(&session, profname, NULL, PROVIDER_ID_NSPI) == -1){ retval = GetLastError(); mapi_errstr("[Openchange_plugin] Error ", retval); if (retval == MAPI_E_NETWORK_ERROR){ printf("Network error\n"); return NULL; } if (retval == MAPI_E_LOGON_FAILED){ printf("LOGIN Failed\n"); return NULL; } printf("Generic error\n"); return NULL; } printf("Login succeeded: Yeh\n"); printf("[Openchange_plugin] Ambigous name and process filling"); if (ProcessNetworkProfile(session, username, NULL, NULL) == -1){ retval = GetLastError(); mapi_errstr("[Openchange_plugin] openchange_profile.c : ProcessNetworkProfile", retval); if (retval != MAPI_E_SUCCESS && retval != 0x1){ mapi_errstr("[Openchange_plugin] openchange_profile.c : Error ProcessNetworkProfile() ", retval); if (retval == MAPI_E_NOT_FOUND){ printf("Bad user\n"); } if (DeleteProfile(profname) == -1){ retval = GetLastError(); mapi_errstr("[Openchange_plugin] openchange_profile.c : DeleteProfile() ", retval); } return NULL; } } puts("[Openchange_plugin] Set profile by default"); if ((retval = SetDefaultProfile(profname)) != MAPI_E_SUCCESS){ mapi_errstr("[Openchange_plugin] openchange_profile.c : SetDefaultProfile() ", GetLastError()); return 0; } MAPIUninitialize (); if (MAPIInitialize(profpath) != MAPI_E_SUCCESS){ g_free(profpath); status = GetLastError(); if (status == MAPI_E_SESSION_LIMIT){ puts("[Openchange_plugin] openchange-lwmapi.c - Still connected"); mapi_errstr("MAPIInitialize", GetLastError()); } else return NULL; } if (MapiLogonEx(&session, profname, NULL) == -1){ retval = GetLastError(); mapi_errstr("[Openchange_plugin] Error ", retval); if (retval == MAPI_E_NETWORK_ERROR){ printf("Network error\n"); return NULL; } if (retval == MAPI_E_LOGON_FAILED){ printf("LOGIN Failed\n"); return NULL; } printf("Generic error\n"); return NULL; } fetch_data_from_server (); } gboolean fetch_data_from_server () { TALLOC_CTX *mem_ctx; mapi_object_t obj_store; enum MAPISTATUS retval; mapi_id_t id_mailbox; struct SPropTagArray *SPropTagArray; struct SPropValue *lpProps = NULL; uint32_t cValues; const char *mailbox_name; char *utf8_mailbox_name; GList *folders = NULL; ExchangeMAPIFolder *folder; printf("----------------s -----------------s -----------\n"); mem_ctx = talloc_init("Evolution"); mapi_object_init(&obj_store); /* Retrieve the mailbox folder name */ SPropTagArray = set_SPropTagArray(mem_ctx, 0x1, PR_DISPLAY_NAME); retval = GetProps(&obj_store, SPropTagArray, &lpProps, &cValues); MAPIFreeBuffer(SPropTagArray); if (retval != MAPI_E_SUCCESS) return FALSE; if (lpProps[0].value.lpszA) { mailbox_name = lpProps[0].value.lpszA; } else { return FALSE; } /* Prepare the directory listing */ retval = GetDefaultFolder(&obj_store, &id_mailbox, olFolderTopInformationStore); if (retval != MAPI_E_SUCCESS) { mapi_errstr("[Openchange_plugin] Error ", retval); return FALSE; } utf8_mailbox_name = utf8tolinux(mem_ctx, mailbox_name); /* FIXME: May have to get the child folders count? Do we need/use it? */ folder = exchange_mapi_folder_new (utf8_mailbox_name, NULL, id_mailbox, IPF_NOTE, 0, 0); folders = g_list_append (folders, folder); get_child_folders(mem_ctx, &obj_store, utf8_mailbox_name, id_mailbox, 0, folders); MAPIFreeBuffer(utf8_mailbox_name); }