From: <svn...@op...> - 2009-03-28 18:09:35
|
Author: scriptor Date: Sat Mar 28 19:09:31 2009 New Revision: 5382 URL: http://www.opensync.org/changeset/5382 Log: Applied patches provided by Daniel Gollub for adjusting the LDAP plugin to API changes as laid out in http://opensync.org/changeset/5371 and http://opensync.org/changeset/5375 The build and a "make test" were successful on my machine after that. Modified: plugins/ldap-sync/src/CMakeLists.txt plugins/ldap-sync/src/ldap_connect.c plugins/ldap-sync/src/ldap_format.c plugins/ldap-sync/src/ldap_plugin.c plugins/ldap-sync/src/ldap_plugin.h Modified: plugins/ldap-sync/src/CMakeLists.txt ============================================================================== --- plugins/ldap-sync/src/CMakeLists.txt Sat Mar 28 18:45:34 2009 (r5381) +++ plugins/ldap-sync/src/CMakeLists.txt Sat Mar 28 19:09:31 2009 (r5382) @@ -22,7 +22,7 @@ # -LINK_DIRECTORIES( ${GLIB2_LIBRARY_DIRS} ${LIBXML2_LIBRARY_DIRS} ${LIBXSLT_LIBRARY_DIRS} ${LDAP_LIBRARY_DIRS} ${SASL2_LIBRARY_DIRS} ${GSSAPIV2_LIBRARY_DIRS}) +LINK_DIRECTORIES( ${OPENSYNC_LIBRARY_DIRS} ${GLIB2_LIBRARY_DIRS} ${LIBXML2_LIBRARY_DIRS} ${LIBXSLT_LIBRARY_DIRS} ${LDAP_LIBRARY_DIRS} ${SASL2_LIBRARY_DIRS} ${GSSAPIV2_LIBRARY_DIRS}) INCLUDE_DIRECTORIES( ${CMAKE_BINARY_DIR} ${OPENSYNC_INCLUDE_DIRS} ${GLIB2_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIRS} ${LIBXSLT_INCLUDE_DIRS} ${LDAP_INCLUDE_DIRS} ${SASL2_INCLUDE_DIRS} ${GSSAPIV2_INCLUDE_DIRS}) INCLUDE( Compiler ) Modified: plugins/ldap-sync/src/ldap_connect.c ============================================================================== --- plugins/ldap-sync/src/ldap_connect.c Sat Mar 28 18:45:34 2009 (r5381) +++ plugins/ldap-sync/src/ldap_connect.c Sat Mar 28 19:09:31 2009 (r5382) @@ -617,11 +617,6 @@ //Close all stuff you need to close ldap_plugin_do_disconnect(ctx, sinkenv, &error); - - //Close the hashtable - osync_hashtable_unref(sinkenv->hashtable); - - //Answer the call osync_context_report_success(ctx); osync_trace(TRACE_EXIT, "%s", __func__); @@ -658,8 +653,6 @@ osync_bool ldap_plugin_set_ldap_protocol (OSyncContext *ctx, OSyncPluginInfo *info, sink_environment *sinkenv, OSyncError **error) { int *ldap_version = NULL; - OSyncObjTypeSink *sink = NULL; - osync_trace(TRACE_ENTRY, "%s(%p, %p, %p, %p)", __func__, ctx, info, sinkenv, error); @@ -675,14 +668,6 @@ goto error; } - - sink = (OSyncObjTypeSink *)osync_plugin_info_get_sink(info); - if (sink == NULL) { - osync_error_set(error, OSYNC_ERROR_GENERIC, "%s:%i: ERROR: sink = NULL. Returning.\n", __FILE__, __LINE__); - goto error; - } - - if (sinkenv == NULL) { osync_error_set(error, OSYNC_ERROR_GENERIC, "%s:%i: ERROR: sinkenv = NULL. Returning.\n", __FILE__, __LINE__); goto error; @@ -2081,15 +2066,37 @@ */ osync_bool ldap_plugin_get_all_uids_from_hashtable(OSyncContext *ctx, sink_environment *sinkenv, GList **all_uids, OSyncError **error) { + OSyncHashTable *hashtable = NULL; + + osync_trace(TRACE_ENTRY, "%s(%p, %p, %p, %p)", __func__, ctx, sinkenv, all_uids, error); if (all_uids == NULL) { - osync_error_set(error, OSYNC_ERROR_GENERIC, "Unable to get config data."); + osync_error_set(error, OSYNC_ERROR_GENERIC, "%s:%i: ERROR: Unable to get config data.", __FILE__, __LINE__); goto error; } - osync_hashtable_foreach(sinkenv->hashtable, ldap_plugin_add_uid_to_list, all_uids); + if (sinkenv == NULL) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "%s:%i: ERROR: sinkenv is NULL.", __FILE__, __LINE__); + goto error; + } + + if (sinkenv->sink == NULL) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "%s:%i: ERROR: sinkenv->sink is NULL. This sink must have been disabled. So %s() should not have been reached, at all.", __FILE__, __LINE__, __func__); + goto error; + } + + + // Get HashTable + hashtable = osync_objtype_sink_get_hashtable(sinkenv->sink); + if (hashtable == NULL) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "%s:%i: ERROR: hashtable is NULL.", __FILE__, __LINE__); + goto error; + } + + + osync_hashtable_foreach(hashtable, ldap_plugin_add_uid_to_list, all_uids); osync_trace(TRACE_EXIT, "%s", __func__); @@ -2559,6 +2566,16 @@ osync_trace(TRACE_ENTRY, "%s(%p, %p, %p, %p, %p)", __func__, ctx, sinkenv, uids_hashtable, uids_ldap_server, differing_entries); + if (sinkenv == NULL) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "%s:%i: ERROR: sinkenv = NULL.\n", __FILE__, __LINE__); + goto error; + } + + if (sinkenv->sink == NULL) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "%s:%i: ERROR: sinkenv->sink = NULL. This sink must have been disabled. So %s() should not have been reached, at all.\n", __FILE__, __LINE__, __func__); + goto error; + } + if (uids_ldap_server == NULL) { osync_error_set(error, OSYNC_ERROR_GENERIC, "%s:%i: ERROR: uids_ldap_server = NULL.\n", __FILE__, __LINE__); goto error; @@ -2578,6 +2595,7 @@ // On this occasion we compare the hash values to find any differences: char *actual_hash = NULL; char *theoretical_hash = NULL; + OSyncHashTable *hashtable = NULL; if (!ldap_plugin_get_hash_from_ldap_server(ctx, sinkenv, uid->data, &actual_hash, error)) { @@ -2588,7 +2606,17 @@ goto error; } - theoretical_hash = (char *)osync_hashtable_get_hash(sinkenv->hashtable, uid->data); + + // Get HashTable + osync_assert(sinkenv); + osync_assert(sinkenv->sink); + hashtable = osync_objtype_sink_get_hashtable(sinkenv->sink); + if (hashtable == NULL) { + osync_error_set(error, OSYNC_ERROR_GENERIC, "%s:%i: ERROR: hashtable = NULL. ", __FILE__, __LINE__); + goto error; + } + + theoretical_hash = (char *)osync_hashtable_get_hash(hashtable, uid->data); #ifdef DEBUG_fastsync ldap_plugin_printf("\nTheoretical hash: \"%s\"", theoretical_hash); Modified: plugins/ldap-sync/src/ldap_format.c ============================================================================== --- plugins/ldap-sync/src/ldap_format.c Sat Mar 28 18:45:34 2009 (r5381) +++ plugins/ldap-sync/src/ldap_format.c Sat Mar 28 19:09:31 2009 (r5382) @@ -1718,8 +1718,9 @@ const char *path = LDAP_PLUGIN_OPENSYNC_SCHEMASDIR; char fullpath[65535]; struct stat stat_buffer; - - + xmlSchemaValidCtxtPtr dtd = NULL; + xmlSchemaPtr xsd = NULL; + xmlSchemaParserCtxtPtr xsd_file = NULL; osync_trace(TRACE_ENTRY, "%s(%p, %i, %p, %p, %p)", __func__, input, inpsize, xmlcard, stylesheet_file, error); @@ -1784,19 +1785,19 @@ - xmlSchemaParserCtxtPtr xsd_file = xmlSchemaNewParserCtxt(fullpath); + xsd_file = xmlSchemaNewParserCtxt(fullpath); if (xsd_file == NULL) { osync_trace(TRACE_ERROR, "%s:%i: ERROR: xmlSchemaNewParserCtxt() has failed.\n", __FILE__, __LINE__); goto error; } - xmlSchemaPtr xsd = xmlSchemaParse(xsd_file); + xsd = xmlSchemaParse(xsd_file); if (xsd == NULL) { osync_trace(TRACE_ERROR, "%s:%i: ERROR: xmlSchemaParse() has failed.\n", __FILE__, __LINE__); goto error; } - xmlSchemaValidCtxtPtr dtd = xmlSchemaNewValidCtxt(xsd); + dtd = xmlSchemaNewValidCtxt(xsd); if (dtd == NULL) { osync_trace(TRACE_ERROR, "%s:%i: ERROR: xmlSchemaNewValidCtxt() has failed.\n", __FILE__, __LINE__); goto error; @@ -5252,7 +5253,7 @@ * */ -static void ldap_format_destroy_format1(char *input , size_t inpsize, void *user_data) +static void ldap_format_destroy_format1(char *input , unsigned int inpsize, void *user_data) { OSyncError *error = NULL; Modified: plugins/ldap-sync/src/ldap_plugin.c ============================================================================== --- plugins/ldap-sync/src/ldap_plugin.c Sat Mar 28 18:45:34 2009 (r5381) +++ plugins/ldap-sync/src/ldap_plugin.c Sat Mar 28 19:09:31 2009 (r5382) @@ -384,6 +384,7 @@ osync_bool ldap_plugin_check_anchor_system(OSyncContext *ctx, sink_environment *sinkenv, OSyncError **error) { + char *timestamp = NULL; osync_trace(TRACE_ENTRY, "%s(%p, %p, %p)", __func__, ctx, sinkenv, error); @@ -409,7 +410,7 @@ } - char *timestamp = osync_anchor_retrieve(anchor, error); + timestamp = osync_anchor_retrieve(anchor, error); if (timestamp) { osync_trace(TRACE_INTERNAL, "Latest timestamp in anchordb is: %s (objtype: \"%s\")\n", timestamp, osync_objtype_sink_get_name(sinkenv->sink)); @@ -975,7 +976,6 @@ osync_trace(TRACE_INTERNAL, "sinkenv->sink = %p", sinkenv->sink); osync_trace(TRACE_INTERNAL, "sinkenv->objformat = %p", sinkenv->objformat); - osync_trace(TRACE_INTERNAL, "sinkenv->hashtable = %p", sinkenv->hashtable); if (sinkenv->servername) osync_trace(TRACE_INTERNAL, "sinkenv->servername = \"%s\"", sinkenv->servername); @@ -1138,11 +1138,10 @@ char *uid = NULL; OSyncChange *change = NULL; glist_container *to_be_reported = NULL; - + OSyncHashTable *hashtable = NULL; osync_trace(TRACE_ENTRY, "%s(%p, %p, %i, %p, %p, %p)", __func__, ctx, sinkenv, slow_sync_requested, changetype_from_caller, list_to_be_reported, error); - if (ctx == NULL) { osync_error_set(error, OSYNC_ERROR_GENERIC, "%s:%i: ERROR: ctx = NULL.", __FILE__, __LINE__); goto error; @@ -1179,6 +1178,9 @@ return TRUE; } + // Get HashTable + hashtable = osync_objtype_sink_get_hashtable(sinkenv->sink); + osync_assert(hashtable); // Make a new change for reporting change = osync_change_new(error); @@ -1249,7 +1251,7 @@ if (slow_sync_requested) { changetype_from_hashtable = OSYNC_CHANGE_TYPE_ADDED; } else { - changetype_from_hashtable = osync_hashtable_get_changetype(sinkenv->hashtable, change); + changetype_from_hashtable = osync_hashtable_get_changetype(hashtable, change); #ifdef DEBUG_fastsync ldap_plugin_printf("%s:%i: Fast sync: changetype from hashtable: %s", __FILE__, __LINE__, ldap_plugin_translate_changetype(changetype_from_hashtable)); ldap_plugin_printf("%s:%i: Fast sync: changetype from caller: %s", __FILE__, __LINE__, ldap_plugin_translate_changetype(changetype_from_caller)); @@ -1267,7 +1269,7 @@ ldap_plugin_printf("%s:%i: About to call osync_hashtable_update_change() for id = \"%s\" with changetype \"%s\"", __FILE__, __LINE__, uid, ldap_plugin_translate_changetype(changetype_from_hashtable)); #endif - osync_hashtable_update_change(sinkenv->hashtable, change); + osync_hashtable_update_change(hashtable, change); osync_change_unref(change); osync_trace(TRACE_EXIT, "%s", __func__); @@ -1366,7 +1368,7 @@ ldap_plugin_printf("%s:%i: About to call osync_hashtable_update_change() for id = \"%s\" with changetype \"%s\"", __FILE__, __LINE__, uid, ldap_plugin_translate_changetype(changetype_from_hashtable)); #endif - osync_hashtable_update_change(sinkenv->hashtable, change); + osync_hashtable_update_change(hashtable, change); // Report this change to "the framework" @@ -1432,6 +1434,7 @@ OSyncFormatEnv *formatenv = NULL; OSyncList *uids = NULL; OSyncList *u = NULL; + OSyncHashTable *hashtable = NULL; @@ -1466,10 +1469,11 @@ + // Get HashTable + hashtable = osync_objtype_sink_get_hashtable(sinkenv->sink); + osync_assert(hashtable); - - - uids = osync_hashtable_get_deleted(sinkenv->hashtable); + uids = osync_hashtable_get_deleted(hashtable); for (u = uids; u; u = u->next) { OSyncChange *change = osync_change_new(error); if (!change) { @@ -1525,7 +1529,7 @@ ldap_plugin_printf("%s:%i:%s(): About to call osync_hashtable_update_change()", __FILE__, __LINE__, __func__); #endif - osync_hashtable_update_change(sinkenv->hashtable, change); + osync_hashtable_update_change(hashtable, change); osync_change_unref(change); } // for (i = 0; uids[i]; i++) @@ -1883,6 +1887,7 @@ osync_bool ldap_plugin_report_changes_to_be_kept_being_unmodified(OSyncContext *ctx, sink_environment *sinkenv, int slow_sync_requested, GList *unmodified_uids, OSyncError **error) { GList *list = NULL; + OSyncHashTable *hashtable = NULL; osync_trace(TRACE_ENTRY, "%s(%p, %p, %d, %p, %p)", __func__, ctx, sinkenv, slow_sync_requested, unmodified_uids, error); @@ -1913,9 +1918,9 @@ return TRUE; } - - - + // Get Hashtable + hashtable = osync_objtype_sink_get_hashtable(sinkenv->sink); + osync_assert(hashtable); if (unmodified_uids == NULL) { @@ -1941,7 +1946,7 @@ ldap_plugin_printf("%s:%i: About to call osync_hashtable_update_change() for id = \"%s\" with changetype OSYNC_CHANGE_TYPE_UNMODIFIED.", __FILE__, __LINE__, (char *)list->data); #endif - osync_hashtable_update_change(sinkenv->hashtable, change); + osync_hashtable_update_change(hashtable, change); osync_change_unref(change); } @@ -1985,6 +1990,8 @@ */ osync_bool ldap_plugin_do_get_changes(OSyncContext *ctx, sink_environment *sinkenv, int *slow_sync_requested, GList **ldaplist_added, GList **ldaplist_modified, GList **deleted_uids, GList **unmodified_uids, OSyncError **error) { + OSyncHashTable *hashtable = NULL; + osync_trace(TRACE_ENTRY, "%s(%p, %p, %d, %p, %p, %p, %p, %p)", __func__, ctx, sinkenv, slow_sync_requested, ldaplist_added, ldaplist_modified, deleted_uids, unmodified_uids, error); if (ctx == NULL) { @@ -2019,8 +2026,9 @@ goto error; } - - + // Get Hashtable + hashtable = osync_objtype_sink_get_hashtable(sinkenv->sink); + osync_assert(hashtable); // If you use opensync hashtables you can detect if you need @@ -2040,7 +2048,7 @@ // Tell hashtable about slow-sync: - if (!osync_hashtable_slowsync(sinkenv->hashtable, error)) { + if (!osync_hashtable_slowsync(hashtable, error)) { if (!osync_error_is_set(error)) { osync_error_set(error, OSYNC_ERROR_GENERIC, "%s:%i: ERROR: osync_hashtable_slowsync() has failed.", __FILE__, __LINE__); } @@ -2622,6 +2630,7 @@ { gchar *dn = NULL; gchar *id = NULL; + OSyncHashTable *hashtable = NULL; @@ -2648,6 +2657,9 @@ goto error; } + // Get HashTable + hashtable = osync_objtype_sink_get_hashtable(sinkenv->sink); + osync_assert(hashtable); #ifdef DEBUG_ldapdata_to_server ldap_plugin_printf("%s:%i:%s: OSYNC_CHANGE_TYPE_DELETED", __FILE__, __LINE__, __func__); @@ -2674,7 +2686,7 @@ // Update hash if (*result == LDAP_SUCCESS && *result != LDAP_NO_SUCH_OBJECT) { - osync_hashtable_update_change(sinkenv->hashtable, change); + osync_hashtable_update_change(hashtable, change); } else { ldap_plugin_compose_ldap_error_message(sinkenv, __FILE__, __LINE__, NULL, dn, change, *result, error); goto error; @@ -3691,6 +3703,7 @@ int result = LDAP_SUCCESS; OSyncError *error = NULL; sink_environment *sinkenv = NULL; + OSyncHashTable *hashtable = NULL; osync_trace(TRACE_ENTRY, "%s(%p, %p, %p, %p, %p)", __func__, sink, info, ctx, change, userdata); @@ -3749,6 +3762,9 @@ osync_trace(TRACE_INTERNAL, "%s: Is this sink (%s) enabled? %d", __func__, osync_objtype_sink_get_name(sinkenv->sink), osync_objtype_sink_is_enabled(sinkenv->sink)); } + // Get HashTable + hashtable = osync_objtype_sink_get_hashtable(sinkenv->sink); + osync_assert(hashtable); // Check for write permission if (!(sinkenv->ldap_write)) { @@ -3886,7 +3902,7 @@ } // if (result != LDAP_SUCCESS) - osync_hashtable_update_change(sinkenv->hashtable, change); + osync_hashtable_update_change(hashtable, change); if (ldap_entries) { @@ -4012,13 +4028,6 @@ #endif - // Save hashtable - if (!osync_hashtable_save(sinkenv->hashtable, &error)) { - ldap_plugin_printf("%s:%i: ERROR: osync_hashtable_save() has failed.", __FILE__, __LINE__); - goto error; - } - - //Answer the call osync_context_report_success(ctx); // ldap_plugin_sync_done() osync_trace(TRACE_EXIT, "%s", __func__); @@ -4364,7 +4373,6 @@ goto error_free_db; } - osync_trace(TRACE_INTERNAL, "The configuration dir: %s", osync_plugin_info_get_configdir (info)); osync_trace(TRACE_INTERNAL, "The group name: %s", osync_plugin_info_get_groupname(info)); @@ -4406,31 +4414,8 @@ osync_objtype_sink_set_functions(sinkenv->sink, functions, sinkenv); - - - - // Establish hashtable - char *tablepath = g_strdup_printf("%s/hashtable.db", osync_plugin_info_get_configdir(info)); - sinkenv->hashtable = osync_hashtable_new(tablepath, osync_objtype_sink_get_name(sinkenv->sink), error); - g_free(tablepath); - tablepath = NULL; - - if (!sinkenv->hashtable) { - if (!osync_error_is_set(error)) { - osync_error_set(error, OSYNC_ERROR_GENERIC, "%s:%i: ERROR: sinkenv->hashtable = NULL.\n", __FILE__, __LINE__); - } - - goto error_free_db; - } - - if (!osync_hashtable_load(sinkenv->hashtable, error)) { - if (!osync_error_is_set(error)) { - osync_error_set(error, OSYNC_ERROR_GENERIC, "%s:%i: ERROR: hashtable could not be loaded.\n", __FILE__, __LINE__); - } - - goto error_free_db; - } - + // Initialize hashtable system + osync_objtype_sink_enable_hashtable(sinkenv->sink, TRUE); // Initialize anchor system osync_objtype_sink_enable_anchor(sinkenv->sink, TRUE); Modified: plugins/ldap-sync/src/ldap_plugin.h ============================================================================== --- plugins/ldap-sync/src/ldap_plugin.h Sat Mar 28 18:45:34 2009 (r5381) +++ plugins/ldap-sync/src/ldap_plugin.h Sat Mar 28 19:09:31 2009 (r5382) @@ -290,7 +290,6 @@ ///< as a void pointer. OSyncObjTypeSink *sink; ///< Reference to the "sink" OSyncObjFormat *objformat; ///< The corresponding format object for this sink. - OSyncHashTable *hashtable; ///< The hashtable for this particular sink. char *servername; ///< Hostname or IP of LDAP server int serverport; ///< Port number, on which runs server char *protocol; ///< Protocol (ldap or ldaps) |