The Samba-Bugzilla – Attachment 10662 Details for
Bug 9810
validate_ldb of String(Generalized-Time) does not accept millisecond format ".000Z"
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Patches for v4-2-test
tmp42.diff.txt (text/plain), 64.22 KB, created by
Stefan Metzmacher
on 2015-01-25 16:22:53 UTC
(
hide
)
Description:
Patches for v4-2-test
Filename:
MIME Type:
Creator:
Stefan Metzmacher
Created:
2015-01-25 16:22:53 UTC
Size:
64.22 KB
patch
obsolete
>From a91440e24b8bfb69af9f7d2358c79bcdf0a711a8 Mon Sep 17 00:00:00 2001 >From: Samuel Cabrero <samuelcabrero@kernevil.me> >Date: Wed, 5 Nov 2014 11:02:25 +0100 >Subject: [PATCH 1/6] ldb: Allow to register extended match rules > >This allows to extend LDB by registering extended match rules from outside >the library itself. This is necessary when the implementation requires >knowledge about syntaxes implemented in samba extensions, like the >LDAP_MATCHING_RULE_TRANSITIVE_EVAL match. > >Signed-off-by: Samuel Cabrero <samuelcabrero@kernevil.me> >Singed-off-by: Andrew Bartlett <abartlet@samba.org> >Reviewed-by: Andrew Bartlett <abartlet@samba.org> >Reviewed-by: Garming Sam <garming@catalyst.net.nz> >(cherry picked from commit faa4be0535fd41bf282b1afc749a05412f4ee96c) >--- > lib/ldb/common/ldb.c | 5 ++ > lib/ldb/common/ldb_match.c | 177 +++++++++++++++++++++++++++++++++--------- > lib/ldb/include/ldb_module.h | 13 ++++ > lib/ldb/include/ldb_private.h | 6 ++ > 4 files changed, 165 insertions(+), 36 deletions(-) > >diff --git a/lib/ldb/common/ldb.c b/lib/ldb/common/ldb.c >index c49513c..0f0f5ab 100644 >--- a/lib/ldb/common/ldb.c >+++ b/lib/ldb/common/ldb.c >@@ -130,6 +130,11 @@ struct ldb_context *ldb_init(TALLOC_CTX *mem_ctx, struct tevent_context *ev_ctx) > ldb_set_create_perms(ldb, 0666); > ldb_set_modules_dir(ldb, LDB_MODULESDIR); > ldb_set_event_context(ldb, ev_ctx); >+ ret = ldb_register_extended_match_rules(ldb); >+ if (ret != LDB_SUCCESS) { >+ talloc_free(ldb); >+ return NULL; >+ } > > /* TODO: get timeout from options if available there */ > ldb->default_timeout = 300; /* set default to 5 minutes */ >diff --git a/lib/ldb/common/ldb_match.c b/lib/ldb/common/ldb_match.c >index 7918aec..a493dae 100644 >--- a/lib/ldb/common/ldb_match.c >+++ b/lib/ldb/common/ldb_match.c >@@ -33,6 +33,7 @@ > */ > > #include "ldb_private.h" >+#include "dlinklist.h" > > /* > check if the scope matches in a search result >@@ -342,7 +343,7 @@ static int ldb_match_substring(struct ldb_context *ldb, > > > /* >- bitwise-and comparator >+ bitwise and/or comparator depending on oid > */ > static int ldb_comparator_bitmask(const char *oid, const struct ldb_val *v1, const struct ldb_val *v2, > bool *matched) >@@ -385,10 +386,48 @@ static int ldb_comparator_bitmask(const char *oid, const struct ldb_val *v1, con > return LDB_SUCCESS; > } > >+static int ldb_match_bitmask(struct ldb_context *ldb, >+ const char *oid, >+ const struct ldb_message *msg, >+ const char *attribute_to_match, >+ const struct ldb_val *value_to_match, >+ bool *matched) >+{ >+ unsigned int i; >+ struct ldb_message_element *el; >+ >+ /* find the message element */ >+ el = ldb_msg_find_element(msg, attribute_to_match); >+ if (el == NULL) { >+ *matched = false; >+ return LDB_SUCCESS; >+ } >+ >+ for (i=0;i<el->num_values;i++) { >+ int ret; >+ struct ldb_val *v = &el->values[i]; >+ >+ ret = ldb_comparator_bitmask(oid, v, value_to_match, matched); >+ if (ret != LDB_SUCCESS) { >+ return ret; >+ } >+ if (*matched) { >+ return LDB_SUCCESS; >+ } >+ } >+ >+ *matched = false; >+ return LDB_SUCCESS; >+} >+ > /* > always return false > */ >-static int ldb_comparator_false(const char *oid, const struct ldb_val *v1, const struct ldb_val *v2, >+static int ldb_comparator_false(struct ldb_context *ldb, >+ const char *oid, >+ const struct ldb_message *msg, >+ const char *attribute_to_match, >+ const struct ldb_val *value_to_match, > bool *matched) > { > *matched = false; >@@ -396,6 +435,23 @@ static int ldb_comparator_false(const char *oid, const struct ldb_val *v1, const > } > > >+static const struct ldb_extended_match_rule *ldb_find_extended_match_rule(struct ldb_context *ldb, >+ const char *oid) >+{ >+ struct ldb_extended_match_entry *extended_match_rule; >+ >+ for (extended_match_rule = ldb->extended_match_rules; >+ extended_match_rule; >+ extended_match_rule = extended_match_rule->next) { >+ if (strcmp(extended_match_rule->rule->oid, oid) == 0) { >+ return extended_match_rule->rule; >+ } >+ } >+ >+ return NULL; >+} >+ >+ > /* > extended match, handles things like bitops > */ >@@ -404,17 +460,7 @@ static int ldb_match_extended(struct ldb_context *ldb, > const struct ldb_parse_tree *tree, > enum ldb_scope scope, bool *matched) > { >- unsigned int i; >- const struct { >- const char *oid; >- int (*comparator)(const char *, const struct ldb_val *, const struct ldb_val *, bool *); >- } rules[] = { >- { LDB_OID_COMPARATOR_AND, ldb_comparator_bitmask}, >- { LDB_OID_COMPARATOR_OR, ldb_comparator_bitmask}, >- { SAMBA_LDAP_MATCH_ALWAYS_FALSE, ldb_comparator_false} >- }; >- int (*comp)(const char *,const struct ldb_val *, const struct ldb_val *, bool *) = NULL; >- struct ldb_message_element *el; >+ const struct ldb_extended_match_rule *rule; > > if (tree->u.extended.dnAttributes) { > /* FIXME: We really need to find out what this ":dn" part in >@@ -432,33 +478,16 @@ static int ldb_match_extended(struct ldb_context *ldb, > return LDB_ERR_INAPPROPRIATE_MATCHING; > } > >- for (i=0;i<ARRAY_SIZE(rules);i++) { >- if (strcmp(rules[i].oid, tree->u.extended.rule_id) == 0) { >- comp = rules[i].comparator; >- break; >- } >- } >- if (comp == NULL) { >+ rule = ldb_find_extended_match_rule(ldb, tree->u.extended.rule_id); >+ if (rule == NULL) { > ldb_debug(ldb, LDB_DEBUG_ERROR, "ldb: unknown extended rule_id %s", > tree->u.extended.rule_id); > return LDB_ERR_INAPPROPRIATE_MATCHING; > } > >- /* find the message element */ >- el = ldb_msg_find_element(msg, tree->u.extended.attr); >- if (el == NULL) { >- *matched = false; >- return LDB_SUCCESS; >- } >- >- for (i=0;i<el->num_values;i++) { >- int ret = comp(tree->u.extended.rule_id, &el->values[i], &tree->u.extended.value, matched); >- if (ret != LDB_SUCCESS) return ret; >- if (*matched) return LDB_SUCCESS; >- } >- >- *matched = false; >- return LDB_SUCCESS; >+ return rule->callback(ldb, rule->oid, msg, >+ tree->u.extended.attr, >+ &tree->u.extended.value, matched); > } > > /* >@@ -587,5 +616,81 @@ int ldb_match_msg_objectclass(const struct ldb_message *msg, > return 0; > } > >+_PRIVATE_ int ldb_register_extended_match_rules(struct ldb_context *ldb) >+{ >+ struct ldb_extended_match_rule *bitmask_and; >+ struct ldb_extended_match_rule *bitmask_or; >+ struct ldb_extended_match_rule *always_false; >+ int ret; >+ >+ /* Register bitmask-and match */ >+ bitmask_and = talloc_zero(ldb, struct ldb_extended_match_rule); >+ if (bitmask_and == NULL) { >+ return LDB_ERR_OPERATIONS_ERROR; >+ } >+ >+ bitmask_and->oid = LDB_OID_COMPARATOR_AND; >+ bitmask_and->callback = ldb_match_bitmask; >+ >+ ret = ldb_register_extended_match_rule(ldb, bitmask_and); >+ if (ret != LDB_SUCCESS) { >+ return ret; >+ } >+ >+ /* Register bitmask-or match */ >+ bitmask_or = talloc_zero(ldb, struct ldb_extended_match_rule); >+ if (bitmask_or == NULL) { >+ return LDB_ERR_OPERATIONS_ERROR; >+ } >+ >+ bitmask_or->oid = LDB_OID_COMPARATOR_OR; >+ bitmask_or->callback = ldb_match_bitmask; >+ >+ ret = ldb_register_extended_match_rule(ldb, bitmask_or); >+ if (ret != LDB_SUCCESS) { >+ return ret; >+ } >+ >+ /* Register always-false match */ >+ always_false = talloc_zero(ldb, struct ldb_extended_match_rule); >+ if (always_false == NULL) { >+ return LDB_ERR_OPERATIONS_ERROR; >+ } >+ >+ always_false->oid = SAMBA_LDAP_MATCH_ALWAYS_FALSE; >+ always_false->callback = ldb_comparator_false; >+ >+ ret = ldb_register_extended_match_rule(ldb, always_false); >+ if (ret != LDB_SUCCESS) { >+ return ret; >+ } >+ >+ return LDB_SUCCESS; >+} >+ >+/* >+ register a new ldb backend >+ >+ if override is true, then override any existing backend for this prefix >+*/ >+int ldb_register_extended_match_rule(struct ldb_context *ldb, >+ const struct ldb_extended_match_rule *rule) >+{ >+ const struct ldb_extended_match_rule *lookup_rule; >+ struct ldb_extended_match_entry *entry; >+ >+ lookup_rule = ldb_find_extended_match_rule(ldb, rule->oid); >+ if (lookup_rule) { >+ return LDB_ERR_ENTRY_ALREADY_EXISTS; >+ } >+ >+ entry = talloc_zero(ldb, struct ldb_extended_match_entry); >+ if (!entry) { >+ return LDB_ERR_OPERATIONS_ERROR; >+ } >+ entry->rule = rule; >+ DLIST_ADD_END(ldb->extended_match_rules, entry, struct ldb_extended_match_entry); >+ >+ return LDB_SUCCESS; >+} > >- >diff --git a/lib/ldb/include/ldb_module.h b/lib/ldb/include/ldb_module.h >index be50c09..34e33c0 100644 >--- a/lib/ldb/include/ldb_module.h >+++ b/lib/ldb/include/ldb_module.h >@@ -162,6 +162,8 @@ int ldb_match_msg_error(struct ldb_context *ldb, > int ldb_match_msg_objectclass(const struct ldb_message *msg, > const char *objectclass); > >+int ldb_register_extended_match_rules(struct ldb_context *ldb); >+ > /* The following definitions come from lib/ldb/common/ldb_modules.c */ > > struct ldb_module *ldb_module_new(TALLOC_CTX *memctx, >@@ -369,4 +371,15 @@ bool ldb_msg_element_equal_ordered(const struct ldb_message_element *el1, > const struct ldb_message_element *el2); > > >+struct ldb_extended_match_rule >+{ >+ const char *oid; >+ int (*callback)(struct ldb_context *, const char *oid, >+ const struct ldb_message *, const char *, >+ const struct ldb_val *, bool *); >+}; >+ >+int ldb_register_extended_match_rule(struct ldb_context *ldb, >+ const struct ldb_extended_match_rule *rule); >+ > #endif >diff --git a/lib/ldb/include/ldb_private.h b/lib/ldb/include/ldb_private.h >index 526bf5e..79774487 100644 >--- a/lib/ldb/include/ldb_private.h >+++ b/lib/ldb/include/ldb_private.h >@@ -100,6 +100,12 @@ struct ldb_context { > /* debugging operations */ > struct ldb_debug_ops debug_ops; > >+ /* extended matching rules */ >+ struct ldb_extended_match_entry { >+ const struct ldb_extended_match_rule *rule; >+ struct ldb_extended_match_entry *prev, *next; >+ } *extended_match_rules; >+ > /* custom utf8 functions */ > struct ldb_utf8_fns utf8_fns; > >-- >1.9.1 > > >From aad48cd92707395eac081ab027c43979985d15aa Mon Sep 17 00:00:00 2001 >From: Andrew Bartlett <abartlet@samba.org> >Date: Fri, 19 Dec 2014 15:25:03 +1300 >Subject: [PATCH 2/6] ldb: bump to version 1.1.19 > >Signed-off-by: Andrew Bartlett <abartlet@samba.org> >Pair-programmed-by: Garming Sam <garming@catalyst.net.nz> >Signed-off-by: Garming Sam <garming@catalyst.net.nz> >(cherry picked from commit 02f6ab85a0dcec59c12384a8738eecf7d322071f) >--- > lib/ldb/ABI/ldb-1.1.19.sigs | 263 +++++++++++++++++++++++++++++++++++++ > lib/ldb/ABI/pyldb-util-1.1.19.sigs | 2 + > lib/ldb/wscript | 2 +- > 3 files changed, 266 insertions(+), 1 deletion(-) > create mode 100644 lib/ldb/ABI/ldb-1.1.19.sigs > create mode 100644 lib/ldb/ABI/pyldb-util-1.1.19.sigs > >diff --git a/lib/ldb/ABI/ldb-1.1.19.sigs b/lib/ldb/ABI/ldb-1.1.19.sigs >new file mode 100644 >index 0000000..b46c5c7 >--- /dev/null >+++ b/lib/ldb/ABI/ldb-1.1.19.sigs >@@ -0,0 +1,263 @@ >+ldb_add: int (struct ldb_context *, const struct ldb_message *) >+ldb_any_comparison: int (struct ldb_context *, void *, ldb_attr_handler_t, const struct ldb_val *, const struct ldb_val *) >+ldb_asprintf_errstring: void (struct ldb_context *, const char *, ...) >+ldb_attr_casefold: char *(TALLOC_CTX *, const char *) >+ldb_attr_dn: int (const char *) >+ldb_attr_in_list: int (const char * const *, const char *) >+ldb_attr_list_copy: const char **(TALLOC_CTX *, const char * const *) >+ldb_attr_list_copy_add: const char **(TALLOC_CTX *, const char * const *, const char *) >+ldb_base64_decode: int (char *) >+ldb_base64_encode: char *(TALLOC_CTX *, const char *, int) >+ldb_binary_decode: struct ldb_val (TALLOC_CTX *, const char *) >+ldb_binary_encode: char *(TALLOC_CTX *, struct ldb_val) >+ldb_binary_encode_string: char *(TALLOC_CTX *, const char *) >+ldb_build_add_req: int (struct ldb_request **, struct ldb_context *, TALLOC_CTX *, const struct ldb_message *, struct ldb_control **, void *, ldb_request_callback_t, struct ldb_request *) >+ldb_build_del_req: int (struct ldb_request **, struct ldb_context *, TALLOC_CTX *, struct ldb_dn *, struct ldb_control **, void *, ldb_request_callback_t, struct ldb_request *) >+ldb_build_extended_req: int (struct ldb_request **, struct ldb_context *, TALLOC_CTX *, const char *, void *, struct ldb_control **, void *, ldb_request_callback_t, struct ldb_request *) >+ldb_build_mod_req: int (struct ldb_request **, struct ldb_context *, TALLOC_CTX *, const struct ldb_message *, struct ldb_control **, void *, ldb_request_callback_t, struct ldb_request *) >+ldb_build_rename_req: int (struct ldb_request **, struct ldb_context *, TALLOC_CTX *, struct ldb_dn *, struct ldb_dn *, struct ldb_control **, void *, ldb_request_callback_t, struct ldb_request *) >+ldb_build_search_req: int (struct ldb_request **, struct ldb_context *, TALLOC_CTX *, struct ldb_dn *, enum ldb_scope, const char *, const char * const *, struct ldb_control **, void *, ldb_request_callback_t, struct ldb_request *) >+ldb_build_search_req_ex: int (struct ldb_request **, struct ldb_context *, TALLOC_CTX *, struct ldb_dn *, enum ldb_scope, struct ldb_parse_tree *, const char * const *, struct ldb_control **, void *, ldb_request_callback_t, struct ldb_request *) >+ldb_casefold: char *(struct ldb_context *, TALLOC_CTX *, const char *, size_t) >+ldb_casefold_default: char *(void *, TALLOC_CTX *, const char *, size_t) >+ldb_check_critical_controls: int (struct ldb_control **) >+ldb_comparison_binary: int (struct ldb_context *, void *, const struct ldb_val *, const struct ldb_val *) >+ldb_comparison_fold: int (struct ldb_context *, void *, const struct ldb_val *, const struct ldb_val *) >+ldb_connect: int (struct ldb_context *, const char *, unsigned int, const char **) >+ldb_control_to_string: char *(TALLOC_CTX *, const struct ldb_control *) >+ldb_controls_except_specified: struct ldb_control **(struct ldb_control **, TALLOC_CTX *, struct ldb_control *) >+ldb_debug: void (struct ldb_context *, enum ldb_debug_level, const char *, ...) >+ldb_debug_add: void (struct ldb_context *, const char *, ...) >+ldb_debug_end: void (struct ldb_context *, enum ldb_debug_level) >+ldb_debug_set: void (struct ldb_context *, enum ldb_debug_level, const char *, ...) >+ldb_delete: int (struct ldb_context *, struct ldb_dn *) >+ldb_dn_add_base: bool (struct ldb_dn *, struct ldb_dn *) >+ldb_dn_add_base_fmt: bool (struct ldb_dn *, const char *, ...) >+ldb_dn_add_child: bool (struct ldb_dn *, struct ldb_dn *) >+ldb_dn_add_child_fmt: bool (struct ldb_dn *, const char *, ...) >+ldb_dn_alloc_casefold: char *(TALLOC_CTX *, struct ldb_dn *) >+ldb_dn_alloc_linearized: char *(TALLOC_CTX *, struct ldb_dn *) >+ldb_dn_canonical_ex_string: char *(TALLOC_CTX *, struct ldb_dn *) >+ldb_dn_canonical_string: char *(TALLOC_CTX *, struct ldb_dn *) >+ldb_dn_check_local: bool (struct ldb_module *, struct ldb_dn *) >+ldb_dn_check_special: bool (struct ldb_dn *, const char *) >+ldb_dn_compare: int (struct ldb_dn *, struct ldb_dn *) >+ldb_dn_compare_base: int (struct ldb_dn *, struct ldb_dn *) >+ldb_dn_copy: struct ldb_dn *(TALLOC_CTX *, struct ldb_dn *) >+ldb_dn_escape_value: char *(TALLOC_CTX *, struct ldb_val) >+ldb_dn_extended_add_syntax: int (struct ldb_context *, unsigned int, const struct ldb_dn_extended_syntax *) >+ldb_dn_extended_filter: void (struct ldb_dn *, const char * const *) >+ldb_dn_extended_syntax_by_name: const struct ldb_dn_extended_syntax *(struct ldb_context *, const char *) >+ldb_dn_from_ldb_val: struct ldb_dn *(TALLOC_CTX *, struct ldb_context *, const struct ldb_val *) >+ldb_dn_get_casefold: const char *(struct ldb_dn *) >+ldb_dn_get_comp_num: int (struct ldb_dn *) >+ldb_dn_get_component_name: const char *(struct ldb_dn *, unsigned int) >+ldb_dn_get_component_val: const struct ldb_val *(struct ldb_dn *, unsigned int) >+ldb_dn_get_extended_comp_num: int (struct ldb_dn *) >+ldb_dn_get_extended_component: const struct ldb_val *(struct ldb_dn *, const char *) >+ldb_dn_get_extended_linearized: char *(TALLOC_CTX *, struct ldb_dn *, int) >+ldb_dn_get_linearized: const char *(struct ldb_dn *) >+ldb_dn_get_parent: struct ldb_dn *(TALLOC_CTX *, struct ldb_dn *) >+ldb_dn_get_rdn_name: const char *(struct ldb_dn *) >+ldb_dn_get_rdn_val: const struct ldb_val *(struct ldb_dn *) >+ldb_dn_has_extended: bool (struct ldb_dn *) >+ldb_dn_is_null: bool (struct ldb_dn *) >+ldb_dn_is_special: bool (struct ldb_dn *) >+ldb_dn_is_valid: bool (struct ldb_dn *) >+ldb_dn_map_local: struct ldb_dn *(struct ldb_module *, void *, struct ldb_dn *) >+ldb_dn_map_rebase_remote: struct ldb_dn *(struct ldb_module *, void *, struct ldb_dn *) >+ldb_dn_map_remote: struct ldb_dn *(struct ldb_module *, void *, struct ldb_dn *) >+ldb_dn_minimise: bool (struct ldb_dn *) >+ldb_dn_new: struct ldb_dn *(TALLOC_CTX *, struct ldb_context *, const char *) >+ldb_dn_new_fmt: struct ldb_dn *(TALLOC_CTX *, struct ldb_context *, const char *, ...) >+ldb_dn_remove_base_components: bool (struct ldb_dn *, unsigned int) >+ldb_dn_remove_child_components: bool (struct ldb_dn *, unsigned int) >+ldb_dn_remove_extended_components: void (struct ldb_dn *) >+ldb_dn_replace_components: bool (struct ldb_dn *, struct ldb_dn *) >+ldb_dn_set_component: int (struct ldb_dn *, int, const char *, const struct ldb_val) >+ldb_dn_set_extended_component: int (struct ldb_dn *, const char *, const struct ldb_val *) >+ldb_dn_update_components: int (struct ldb_dn *, const struct ldb_dn *) >+ldb_dn_validate: bool (struct ldb_dn *) >+ldb_dump_results: void (struct ldb_context *, struct ldb_result *, FILE *) >+ldb_error_at: int (struct ldb_context *, int, const char *, const char *, int) >+ldb_errstring: const char *(struct ldb_context *) >+ldb_extended: int (struct ldb_context *, const char *, void *, struct ldb_result **) >+ldb_extended_default_callback: int (struct ldb_request *, struct ldb_reply *) >+ldb_filter_from_tree: char *(TALLOC_CTX *, const struct ldb_parse_tree *) >+ldb_get_config_basedn: struct ldb_dn *(struct ldb_context *) >+ldb_get_create_perms: unsigned int (struct ldb_context *) >+ldb_get_default_basedn: struct ldb_dn *(struct ldb_context *) >+ldb_get_event_context: struct tevent_context *(struct ldb_context *) >+ldb_get_flags: unsigned int (struct ldb_context *) >+ldb_get_opaque: void *(struct ldb_context *, const char *) >+ldb_get_root_basedn: struct ldb_dn *(struct ldb_context *) >+ldb_get_schema_basedn: struct ldb_dn *(struct ldb_context *) >+ldb_global_init: int (void) >+ldb_handle_new: struct ldb_handle *(TALLOC_CTX *, struct ldb_context *) >+ldb_handler_copy: int (struct ldb_context *, void *, const struct ldb_val *, struct ldb_val *) >+ldb_handler_fold: int (struct ldb_context *, void *, const struct ldb_val *, struct ldb_val *) >+ldb_init: struct ldb_context *(TALLOC_CTX *, struct tevent_context *) >+ldb_ldif_message_string: char *(struct ldb_context *, TALLOC_CTX *, enum ldb_changetype, const struct ldb_message *) >+ldb_ldif_parse_modrdn: int (struct ldb_context *, const struct ldb_ldif *, TALLOC_CTX *, struct ldb_dn **, struct ldb_dn **, bool *, struct ldb_dn **, struct ldb_dn **) >+ldb_ldif_read: struct ldb_ldif *(struct ldb_context *, int (*)(void *), void *) >+ldb_ldif_read_file: struct ldb_ldif *(struct ldb_context *, FILE *) >+ldb_ldif_read_file_state: struct ldb_ldif *(struct ldb_context *, struct ldif_read_file_state *) >+ldb_ldif_read_free: void (struct ldb_context *, struct ldb_ldif *) >+ldb_ldif_read_string: struct ldb_ldif *(struct ldb_context *, const char **) >+ldb_ldif_write: int (struct ldb_context *, int (*)(void *, const char *, ...), void *, const struct ldb_ldif *) >+ldb_ldif_write_file: int (struct ldb_context *, FILE *, const struct ldb_ldif *) >+ldb_ldif_write_redacted_trace_string: char *(struct ldb_context *, TALLOC_CTX *, const struct ldb_ldif *) >+ldb_ldif_write_string: char *(struct ldb_context *, TALLOC_CTX *, const struct ldb_ldif *) >+ldb_load_modules: int (struct ldb_context *, const char **) >+ldb_map_add: int (struct ldb_module *, struct ldb_request *) >+ldb_map_delete: int (struct ldb_module *, struct ldb_request *) >+ldb_map_init: int (struct ldb_module *, const struct ldb_map_attribute *, const struct ldb_map_objectclass *, const char * const *, const char *, const char *) >+ldb_map_modify: int (struct ldb_module *, struct ldb_request *) >+ldb_map_rename: int (struct ldb_module *, struct ldb_request *) >+ldb_map_search: int (struct ldb_module *, struct ldb_request *) >+ldb_match_msg: int (struct ldb_context *, const struct ldb_message *, const struct ldb_parse_tree *, struct ldb_dn *, enum ldb_scope) >+ldb_match_msg_error: int (struct ldb_context *, const struct ldb_message *, const struct ldb_parse_tree *, struct ldb_dn *, enum ldb_scope, bool *) >+ldb_match_msg_objectclass: int (const struct ldb_message *, const char *) >+ldb_mod_register_control: int (struct ldb_module *, const char *) >+ldb_modify: int (struct ldb_context *, const struct ldb_message *) >+ldb_modify_default_callback: int (struct ldb_request *, struct ldb_reply *) >+ldb_module_call_chain: char *(struct ldb_request *, TALLOC_CTX *) >+ldb_module_connect_backend: int (struct ldb_context *, const char *, const char **, struct ldb_module **) >+ldb_module_done: int (struct ldb_request *, struct ldb_control **, struct ldb_extended *, int) >+ldb_module_flags: uint32_t (struct ldb_context *) >+ldb_module_get_ctx: struct ldb_context *(struct ldb_module *) >+ldb_module_get_name: const char *(struct ldb_module *) >+ldb_module_get_ops: const struct ldb_module_ops *(struct ldb_module *) >+ldb_module_get_private: void *(struct ldb_module *) >+ldb_module_init_chain: int (struct ldb_context *, struct ldb_module *) >+ldb_module_load_list: int (struct ldb_context *, const char **, struct ldb_module *, struct ldb_module **) >+ldb_module_new: struct ldb_module *(TALLOC_CTX *, struct ldb_context *, const char *, const struct ldb_module_ops *) >+ldb_module_next: struct ldb_module *(struct ldb_module *) >+ldb_module_popt_options: struct poptOption **(struct ldb_context *) >+ldb_module_send_entry: int (struct ldb_request *, struct ldb_message *, struct ldb_control **) >+ldb_module_send_referral: int (struct ldb_request *, char *) >+ldb_module_set_next: void (struct ldb_module *, struct ldb_module *) >+ldb_module_set_private: void (struct ldb_module *, void *) >+ldb_modules_hook: int (struct ldb_context *, enum ldb_module_hook_type) >+ldb_modules_list_from_string: const char **(struct ldb_context *, TALLOC_CTX *, const char *) >+ldb_modules_load: int (const char *, const char *) >+ldb_msg_add: int (struct ldb_message *, const struct ldb_message_element *, int) >+ldb_msg_add_empty: int (struct ldb_message *, const char *, int, struct ldb_message_element **) >+ldb_msg_add_fmt: int (struct ldb_message *, const char *, const char *, ...) >+ldb_msg_add_linearized_dn: int (struct ldb_message *, const char *, struct ldb_dn *) >+ldb_msg_add_steal_string: int (struct ldb_message *, const char *, char *) >+ldb_msg_add_steal_value: int (struct ldb_message *, const char *, struct ldb_val *) >+ldb_msg_add_string: int (struct ldb_message *, const char *, const char *) >+ldb_msg_add_value: int (struct ldb_message *, const char *, const struct ldb_val *, struct ldb_message_element **) >+ldb_msg_canonicalize: struct ldb_message *(struct ldb_context *, const struct ldb_message *) >+ldb_msg_check_string_attribute: int (const struct ldb_message *, const char *, const char *) >+ldb_msg_copy: struct ldb_message *(TALLOC_CTX *, const struct ldb_message *) >+ldb_msg_copy_attr: int (struct ldb_message *, const char *, const char *) >+ldb_msg_copy_shallow: struct ldb_message *(TALLOC_CTX *, const struct ldb_message *) >+ldb_msg_diff: struct ldb_message *(struct ldb_context *, struct ldb_message *, struct ldb_message *) >+ldb_msg_difference: int (struct ldb_context *, TALLOC_CTX *, struct ldb_message *, struct ldb_message *, struct ldb_message **) >+ldb_msg_element_compare: int (struct ldb_message_element *, struct ldb_message_element *) >+ldb_msg_element_compare_name: int (struct ldb_message_element *, struct ldb_message_element *) >+ldb_msg_element_equal_ordered: bool (const struct ldb_message_element *, const struct ldb_message_element *) >+ldb_msg_find_attr_as_bool: int (const struct ldb_message *, const char *, int) >+ldb_msg_find_attr_as_dn: struct ldb_dn *(struct ldb_context *, TALLOC_CTX *, const struct ldb_message *, const char *) >+ldb_msg_find_attr_as_double: double (const struct ldb_message *, const char *, double) >+ldb_msg_find_attr_as_int: int (const struct ldb_message *, const char *, int) >+ldb_msg_find_attr_as_int64: int64_t (const struct ldb_message *, const char *, int64_t) >+ldb_msg_find_attr_as_string: const char *(const struct ldb_message *, const char *, const char *) >+ldb_msg_find_attr_as_uint: unsigned int (const struct ldb_message *, const char *, unsigned int) >+ldb_msg_find_attr_as_uint64: uint64_t (const struct ldb_message *, const char *, uint64_t) >+ldb_msg_find_element: struct ldb_message_element *(const struct ldb_message *, const char *) >+ldb_msg_find_ldb_val: const struct ldb_val *(const struct ldb_message *, const char *) >+ldb_msg_find_val: struct ldb_val *(const struct ldb_message_element *, struct ldb_val *) >+ldb_msg_new: struct ldb_message *(TALLOC_CTX *) >+ldb_msg_normalize: int (struct ldb_context *, TALLOC_CTX *, const struct ldb_message *, struct ldb_message **) >+ldb_msg_remove_attr: void (struct ldb_message *, const char *) >+ldb_msg_remove_element: void (struct ldb_message *, struct ldb_message_element *) >+ldb_msg_rename_attr: int (struct ldb_message *, const char *, const char *) >+ldb_msg_sanity_check: int (struct ldb_context *, const struct ldb_message *) >+ldb_msg_sort_elements: void (struct ldb_message *) >+ldb_next_del_trans: int (struct ldb_module *) >+ldb_next_end_trans: int (struct ldb_module *) >+ldb_next_init: int (struct ldb_module *) >+ldb_next_prepare_commit: int (struct ldb_module *) >+ldb_next_remote_request: int (struct ldb_module *, struct ldb_request *) >+ldb_next_request: int (struct ldb_module *, struct ldb_request *) >+ldb_next_start_trans: int (struct ldb_module *) >+ldb_op_default_callback: int (struct ldb_request *, struct ldb_reply *) >+ldb_options_find: const char *(struct ldb_context *, const char **, const char *) >+ldb_pack_data: int (struct ldb_context *, const struct ldb_message *, struct ldb_val *) >+ldb_parse_control_from_string: struct ldb_control *(struct ldb_context *, TALLOC_CTX *, const char *) >+ldb_parse_control_strings: struct ldb_control **(struct ldb_context *, TALLOC_CTX *, const char **) >+ldb_parse_tree: struct ldb_parse_tree *(TALLOC_CTX *, const char *) >+ldb_parse_tree_attr_replace: void (struct ldb_parse_tree *, const char *, const char *) >+ldb_parse_tree_copy_shallow: struct ldb_parse_tree *(TALLOC_CTX *, const struct ldb_parse_tree *) >+ldb_parse_tree_walk: int (struct ldb_parse_tree *, int (*)(struct ldb_parse_tree *, void *), void *) >+ldb_qsort: void (void * const, size_t, size_t, void *, ldb_qsort_cmp_fn_t) >+ldb_register_backend: int (const char *, ldb_connect_fn, bool) >+ldb_register_extended_match_rule: int (struct ldb_context *, const struct ldb_extended_match_rule *) >+ldb_register_hook: int (ldb_hook_fn) >+ldb_register_module: int (const struct ldb_module_ops *) >+ldb_rename: int (struct ldb_context *, struct ldb_dn *, struct ldb_dn *) >+ldb_reply_add_control: int (struct ldb_reply *, const char *, bool, void *) >+ldb_reply_get_control: struct ldb_control *(struct ldb_reply *, const char *) >+ldb_req_get_custom_flags: uint32_t (struct ldb_request *) >+ldb_req_is_untrusted: bool (struct ldb_request *) >+ldb_req_location: const char *(struct ldb_request *) >+ldb_req_mark_trusted: void (struct ldb_request *) >+ldb_req_mark_untrusted: void (struct ldb_request *) >+ldb_req_set_custom_flags: void (struct ldb_request *, uint32_t) >+ldb_req_set_location: void (struct ldb_request *, const char *) >+ldb_request: int (struct ldb_context *, struct ldb_request *) >+ldb_request_add_control: int (struct ldb_request *, const char *, bool, void *) >+ldb_request_done: int (struct ldb_request *, int) >+ldb_request_get_control: struct ldb_control *(struct ldb_request *, const char *) >+ldb_request_get_status: int (struct ldb_request *) >+ldb_request_replace_control: int (struct ldb_request *, const char *, bool, void *) >+ldb_request_set_state: void (struct ldb_request *, int) >+ldb_reset_err_string: void (struct ldb_context *) >+ldb_save_controls: int (struct ldb_control *, struct ldb_request *, struct ldb_control ***) >+ldb_schema_attribute_add: int (struct ldb_context *, const char *, unsigned int, const char *) >+ldb_schema_attribute_add_with_syntax: int (struct ldb_context *, const char *, unsigned int, const struct ldb_schema_syntax *) >+ldb_schema_attribute_by_name: const struct ldb_schema_attribute *(struct ldb_context *, const char *) >+ldb_schema_attribute_remove: void (struct ldb_context *, const char *) >+ldb_schema_attribute_set_override_handler: void (struct ldb_context *, ldb_attribute_handler_override_fn_t, void *) >+ldb_search: int (struct ldb_context *, TALLOC_CTX *, struct ldb_result **, struct ldb_dn *, enum ldb_scope, const char * const *, const char *, ...) >+ldb_search_default_callback: int (struct ldb_request *, struct ldb_reply *) >+ldb_sequence_number: int (struct ldb_context *, enum ldb_sequence_type, uint64_t *) >+ldb_set_create_perms: void (struct ldb_context *, unsigned int) >+ldb_set_debug: int (struct ldb_context *, void (*)(void *, enum ldb_debug_level, const char *, va_list), void *) >+ldb_set_debug_stderr: int (struct ldb_context *) >+ldb_set_default_dns: void (struct ldb_context *) >+ldb_set_errstring: void (struct ldb_context *, const char *) >+ldb_set_event_context: void (struct ldb_context *, struct tevent_context *) >+ldb_set_flags: void (struct ldb_context *, unsigned int) >+ldb_set_modules_dir: void (struct ldb_context *, const char *) >+ldb_set_opaque: int (struct ldb_context *, const char *, void *) >+ldb_set_timeout: int (struct ldb_context *, struct ldb_request *, int) >+ldb_set_timeout_from_prev_req: int (struct ldb_context *, struct ldb_request *, struct ldb_request *) >+ldb_set_utf8_default: void (struct ldb_context *) >+ldb_set_utf8_fns: void (struct ldb_context *, void *, char *(*)(void *, void *, const char *, size_t)) >+ldb_setup_wellknown_attributes: int (struct ldb_context *) >+ldb_should_b64_encode: int (struct ldb_context *, const struct ldb_val *) >+ldb_standard_syntax_by_name: const struct ldb_schema_syntax *(struct ldb_context *, const char *) >+ldb_strerror: const char *(int) >+ldb_string_to_time: time_t (const char *) >+ldb_string_utc_to_time: time_t (const char *) >+ldb_timestring: char *(TALLOC_CTX *, time_t) >+ldb_timestring_utc: char *(TALLOC_CTX *, time_t) >+ldb_transaction_cancel: int (struct ldb_context *) >+ldb_transaction_cancel_noerr: int (struct ldb_context *) >+ldb_transaction_commit: int (struct ldb_context *) >+ldb_transaction_prepare_commit: int (struct ldb_context *) >+ldb_transaction_start: int (struct ldb_context *) >+ldb_unpack_data: int (struct ldb_context *, const struct ldb_val *, struct ldb_message *) >+ldb_val_dup: struct ldb_val (TALLOC_CTX *, const struct ldb_val *) >+ldb_val_equal_exact: int (const struct ldb_val *, const struct ldb_val *) >+ldb_val_map_local: struct ldb_val (struct ldb_module *, void *, const struct ldb_map_attribute *, const struct ldb_val *) >+ldb_val_map_remote: struct ldb_val (struct ldb_module *, void *, const struct ldb_map_attribute *, const struct ldb_val *) >+ldb_val_string_cmp: int (const struct ldb_val *, const char *) >+ldb_val_to_time: int (const struct ldb_val *, time_t *) >+ldb_valid_attr_name: int (const char *) >+ldb_vdebug: void (struct ldb_context *, enum ldb_debug_level, const char *, va_list) >+ldb_wait: int (struct ldb_handle *, enum ldb_wait_type) >diff --git a/lib/ldb/ABI/pyldb-util-1.1.19.sigs b/lib/ldb/ABI/pyldb-util-1.1.19.sigs >new file mode 100644 >index 0000000..74d6719 >--- /dev/null >+++ b/lib/ldb/ABI/pyldb-util-1.1.19.sigs >@@ -0,0 +1,2 @@ >+pyldb_Dn_FromDn: PyObject *(struct ldb_dn *) >+pyldb_Object_AsDn: bool (TALLOC_CTX *, PyObject *, struct ldb_context *, struct ldb_dn **) >diff --git a/lib/ldb/wscript b/lib/ldb/wscript >index 0fba225..4d44a0a 100755 >--- a/lib/ldb/wscript >+++ b/lib/ldb/wscript >@@ -1,7 +1,7 @@ > #!/usr/bin/env python > > APPNAME = 'ldb' >-VERSION = '1.1.18' >+VERSION = '1.1.19' > > blddir = 'bin' > >-- >1.9.1 > > >From 134128f2b4d545c471d5c2334c5db0a0824092cf Mon Sep 17 00:00:00 2001 >From: Petr Viktorin <pviktori@redhat.com> >Date: Wed, 3 Dec 2014 13:59:58 +0100 >Subject: [PATCH 3/6] Remove use of the "staticforward" macro > >This macro was used for compatibility with broken compilers. >Since Python 2.3, it is always defined as `static`, and only exists >"for source compatibility with old C extensions". > >Signed-off-by: Petr Viktorin <pviktori@redhat.com> >Reviewed-by: Jelmer Vernooij <jelmer@samba.org> >Reviewed-by: Andreas Schneider <asn@samba.org> >(cherry picked from commit 02980268e8641a1558c6f475d4669ce4d663504d) >--- > lib/ldb-samba/pyldb.c | 2 +- > lib/ldb/pyldb.c | 14 +++++++------- > lib/ntdb/pyntdb.c | 2 +- > lib/tevent/pytevent.c | 12 ++++++------ > pidl/lib/Parse/Pidl/Samba4/Python.pm | 4 ++-- > source3/passdb/py_passdb.c | 6 +++--- > source4/libcli/pysmb.c | 2 +- > source4/librpc/rpc/pyrpc.c | 2 +- > 8 files changed, 22 insertions(+), 22 deletions(-) > >diff --git a/lib/ldb-samba/pyldb.c b/lib/ldb-samba/pyldb.c >index aae25a0..6c0d2a7 100644 >--- a/lib/ldb-samba/pyldb.c >+++ b/lib/ldb-samba/pyldb.c >@@ -33,7 +33,7 @@ void init_ldb(void); > > static PyObject *pyldb_module; > static PyObject *py_ldb_error; >-staticforward PyTypeObject PySambaLdb; >+static PyTypeObject PySambaLdb; > > static void PyErr_SetLdbError(PyObject *error, int ret, struct ldb_context *ldb_ctx) > { >diff --git a/lib/ldb/pyldb.c b/lib/ldb/pyldb.c >index ee751b3..5bcff72 100644 >--- a/lib/ldb/pyldb.c >+++ b/lib/ldb/pyldb.c >@@ -36,16 +36,16 @@ void initldb(void); > static PyObject *PyLdbMessage_FromMessage(struct ldb_message *msg); > static PyObject *PyExc_LdbError; > >-staticforward PyTypeObject PyLdbControl; >-staticforward PyTypeObject PyLdbResult; >-staticforward PyTypeObject PyLdbMessage; >+static PyTypeObject PyLdbControl; >+static PyTypeObject PyLdbResult; >+static PyTypeObject PyLdbMessage; > #define PyLdbMessage_Check(ob) PyObject_TypeCheck(ob, &PyLdbMessage) >-staticforward PyTypeObject PyLdbModule; >-staticforward PyTypeObject PyLdbDn; >+static PyTypeObject PyLdbModule; >+static PyTypeObject PyLdbDn; > #define pyldb_Dn_Check(ob) PyObject_TypeCheck(ob, &PyLdbDn) >-staticforward PyTypeObject PyLdb; >+static PyTypeObject PyLdb; > #define PyLdb_Check(ob) PyObject_TypeCheck(ob, &PyLdb) >-staticforward PyTypeObject PyLdbMessageElement; >+static PyTypeObject PyLdbMessageElement; > #define pyldb_MessageElement_Check(ob) PyObject_TypeCheck(ob, &PyLdbMessageElement) > > staticforward PyTypeObject PyLdbTree; >diff --git a/lib/ntdb/pyntdb.c b/lib/ntdb/pyntdb.c >index b2a1f0c..72e6264 100644 >--- a/lib/ntdb/pyntdb.c >+++ b/lib/ntdb/pyntdb.c >@@ -38,7 +38,7 @@ typedef struct { > bool closed; > } PyNtdbObject; > >-staticforward PyTypeObject PyNtdb; >+static PyTypeObject PyNtdb; > > static void PyErr_SetTDBError(enum NTDB_ERROR e) > { >diff --git a/lib/tevent/pytevent.c b/lib/tevent/pytevent.c >index 870f5aa..af3f9d6 100644 >--- a/lib/tevent/pytevent.c >+++ b/lib/tevent/pytevent.c >@@ -57,12 +57,12 @@ typedef struct { > struct tevent_fd *fd; > } TeventFd_Object; > >-staticforward PyTypeObject TeventContext_Type; >-staticforward PyTypeObject TeventReq_Type; >-staticforward PyTypeObject TeventQueue_Type; >-staticforward PyTypeObject TeventSignal_Type; >-staticforward PyTypeObject TeventTimer_Type; >-staticforward PyTypeObject TeventFd_Type; >+static PyTypeObject TeventContext_Type; >+static PyTypeObject TeventReq_Type; >+static PyTypeObject TeventQueue_Type; >+static PyTypeObject TeventSignal_Type; >+static PyTypeObject TeventTimer_Type; >+static PyTypeObject TeventFd_Type; > > static int py_context_init(struct tevent_context *ev) > { >diff --git a/pidl/lib/Parse/Pidl/Samba4/Python.pm b/pidl/lib/Parse/Pidl/Samba4/Python.pm >index d603176..69b2914 100644 >--- a/pidl/lib/Parse/Pidl/Samba4/Python.pm >+++ b/pidl/lib/Parse/Pidl/Samba4/Python.pm >@@ -349,7 +349,7 @@ sub PythonStruct($$$$$$) > $self->pidl(""); > } > >- $self->pidl_hdr("staticforward PyTypeObject $name\_Type;\n"); >+ $self->pidl_hdr("static PyTypeObject $name\_Type;\n"); > $self->pidl(""); > my $docstring = $self->DocString($d, $name); > my $typeobject = "$name\_Type"; >@@ -685,7 +685,7 @@ sub Interface($$$) > } > > if (defined $interface->{PROPERTIES}->{uuid}) { >- $self->pidl_hdr("staticforward PyTypeObject $interface->{NAME}_InterfaceType;\n"); >+ $self->pidl_hdr("static PyTypeObject $interface->{NAME}_InterfaceType;\n"); > $self->pidl(""); > > my @fns = (); >diff --git a/source3/passdb/py_passdb.c b/source3/passdb/py_passdb.c >index 3a1e583..07540cd 100644 >--- a/source3/passdb/py_passdb.c >+++ b/source3/passdb/py_passdb.c >@@ -51,9 +51,9 @@ static PyTypeObject *dom_sid_Type = NULL; > static PyTypeObject *security_Type = NULL; > static PyTypeObject *guid_Type = NULL; > >-staticforward PyTypeObject PySamu; >-staticforward PyTypeObject PyGroupmap; >-staticforward PyTypeObject PyPDB; >+static PyTypeObject PySamu; >+static PyTypeObject PyGroupmap; >+static PyTypeObject PyPDB; > > static PyObject *py_pdb_error; > >diff --git a/source4/libcli/pysmb.c b/source4/libcli/pysmb.c >index 456b01d..dde37e0 100644 >--- a/source4/libcli/pysmb.c >+++ b/source4/libcli/pysmb.c >@@ -38,7 +38,7 @@ > #include "libcli/security/security_descriptor.h" > #include "librpc/rpc/pyrpc_util.h" > >-staticforward PyTypeObject PySMB; >+static PyTypeObject PySMB; > > void initsmb(void); > >diff --git a/source4/librpc/rpc/pyrpc.c b/source4/librpc/rpc/pyrpc.c >index 360fb24..09f6632 100644 >--- a/source4/librpc/rpc/pyrpc.c >+++ b/source4/librpc/rpc/pyrpc.c >@@ -30,7 +30,7 @@ > > void initbase(void); > >-staticforward PyTypeObject dcerpc_InterfaceType; >+static PyTypeObject dcerpc_InterfaceType; > > static PyTypeObject *ndr_syntax_id_Type; > >-- >1.9.1 > > >From 8f1b2d44ccbea50e8be4bbdddff59d290a6c2394 Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Mon, 19 Jan 2015 15:47:58 +0100 >Subject: [PATCH 4/6] lib/ldb: fix logic in ldb_val_to_time() >MIME-Version: 1.0 >Content-Type: text/plain; charset=UTF-8 >Content-Transfer-Encoding: 8bit > >040408072012Z should represent 20040408072012.0Z >as well as 20040408072012.000Z or >20040408072012.RandomIgnoredCharaters...Z > >Bug: https://bugzilla.samba.org/show_bug.cgi?id=9810 > >Signed-off-by: Stefan Metzmacher <metze@samba.org> >Reviewed-by: Andreas Schneider <asn@samba.org> >Reviewed-by: Günther Deschner <gd@samba.org> >(cherry picked from commit d1b515535da46591d3a646a848c7427b6ff951a7) >--- > lib/ldb/common/ldb_msg.c | 38 ++++++++++++++++++++++++++++++++------ > 1 file changed, 32 insertions(+), 6 deletions(-) > >diff --git a/lib/ldb/common/ldb_msg.c b/lib/ldb/common/ldb_msg.c >index 809e3af..3f65351 100644 >--- a/lib/ldb/common/ldb_msg.c >+++ b/lib/ldb/common/ldb_msg.c >@@ -1090,28 +1090,54 @@ time_t ldb_string_to_time(const char *s) > */ > int ldb_val_to_time(const struct ldb_val *v, time_t *t) > { >- struct tm tm; >+ char val[15] = {}; >+ struct tm tm = {}; > >- if (v == NULL || !v->data || (v->length != 17 && v->length != 13)) { >+ if (v == NULL) { > return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX; > } > >- memset(&tm, 0, sizeof(tm)); >+ if (v->data == NULL) { >+ return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX; >+ } >+ >+ if (v->length < 16 && v->length != 13) { >+ return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX; >+ } >+ >+ if (v->data[v->length - 1] != 'Z') { >+ return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX; >+ } > > if (v->length == 13) { >- if (sscanf((char *)v->data, "%02u%02u%02u%02u%02u%02uZ", >+ memcpy(val, v->data, 12); >+ >+ if (sscanf(val, "%02u%02u%02u%02u%02u%02u", > &tm.tm_year, &tm.tm_mon, &tm.tm_mday, > &tm.tm_hour, &tm.tm_min, &tm.tm_sec) != 6) { > return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX; > } >+ if (tm.tm_year < 50) { >+ tm.tm_year += 100; >+ } > } else { >- if (sscanf((char *)v->data, "%04u%02u%02u%02u%02u%02u.0Z", >+ >+ /* >+ * anything between '.' and 'Z' is silently ignored. >+ */ >+ if (v->data[14] != '.') { >+ return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX; >+ } >+ >+ memcpy(val, v->data, 14); >+ >+ if (sscanf(val, "%04u%02u%02u%02u%02u%02u", > &tm.tm_year, &tm.tm_mon, &tm.tm_mday, > &tm.tm_hour, &tm.tm_min, &tm.tm_sec) != 6) { > return LDB_ERR_INVALID_ATTRIBUTE_SYNTAX; > } >+ tm.tm_year -= 1900; > } >- tm.tm_year -= 1900; > tm.tm_mon -= 1; > > *t = timegm(&tm); >-- >1.9.1 > > >From baf69a2653ac6785062895243ad1ae1e268557c5 Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Mon, 19 Jan 2015 17:17:13 +0100 >Subject: [PATCH 5/6] ldb: version 1.1.20 >MIME-Version: 1.0 >Content-Type: text/plain; charset=UTF-8 >Content-Transfer-Encoding: 8bit > >- Bug 9810 - validate_ldb of String(Generalized-Time) does not accept millisecond format ".000Z" > >Signed-off-by: Stefan Metzmacher <metze@samba.org> >Reviewed-by: Andreas Schneider <asn@samba.org> >Reviewed-by: Günther Deschner <gd@samba.org> >(cherry picked from commit c7af8ae9d2aa19db2533e69b8a4d7c1b6f8e2d9f) >--- > lib/ldb/ABI/ldb-1.1.20.sigs | 263 +++++++++++++++++++++++++++++++++++++ > lib/ldb/ABI/pyldb-util-1.1.20.sigs | 2 + > lib/ldb/wscript | 2 +- > 3 files changed, 266 insertions(+), 1 deletion(-) > create mode 100644 lib/ldb/ABI/ldb-1.1.20.sigs > create mode 100644 lib/ldb/ABI/pyldb-util-1.1.20.sigs > >diff --git a/lib/ldb/ABI/ldb-1.1.20.sigs b/lib/ldb/ABI/ldb-1.1.20.sigs >new file mode 100644 >index 0000000..b46c5c7 >--- /dev/null >+++ b/lib/ldb/ABI/ldb-1.1.20.sigs >@@ -0,0 +1,263 @@ >+ldb_add: int (struct ldb_context *, const struct ldb_message *) >+ldb_any_comparison: int (struct ldb_context *, void *, ldb_attr_handler_t, const struct ldb_val *, const struct ldb_val *) >+ldb_asprintf_errstring: void (struct ldb_context *, const char *, ...) >+ldb_attr_casefold: char *(TALLOC_CTX *, const char *) >+ldb_attr_dn: int (const char *) >+ldb_attr_in_list: int (const char * const *, const char *) >+ldb_attr_list_copy: const char **(TALLOC_CTX *, const char * const *) >+ldb_attr_list_copy_add: const char **(TALLOC_CTX *, const char * const *, const char *) >+ldb_base64_decode: int (char *) >+ldb_base64_encode: char *(TALLOC_CTX *, const char *, int) >+ldb_binary_decode: struct ldb_val (TALLOC_CTX *, const char *) >+ldb_binary_encode: char *(TALLOC_CTX *, struct ldb_val) >+ldb_binary_encode_string: char *(TALLOC_CTX *, const char *) >+ldb_build_add_req: int (struct ldb_request **, struct ldb_context *, TALLOC_CTX *, const struct ldb_message *, struct ldb_control **, void *, ldb_request_callback_t, struct ldb_request *) >+ldb_build_del_req: int (struct ldb_request **, struct ldb_context *, TALLOC_CTX *, struct ldb_dn *, struct ldb_control **, void *, ldb_request_callback_t, struct ldb_request *) >+ldb_build_extended_req: int (struct ldb_request **, struct ldb_context *, TALLOC_CTX *, const char *, void *, struct ldb_control **, void *, ldb_request_callback_t, struct ldb_request *) >+ldb_build_mod_req: int (struct ldb_request **, struct ldb_context *, TALLOC_CTX *, const struct ldb_message *, struct ldb_control **, void *, ldb_request_callback_t, struct ldb_request *) >+ldb_build_rename_req: int (struct ldb_request **, struct ldb_context *, TALLOC_CTX *, struct ldb_dn *, struct ldb_dn *, struct ldb_control **, void *, ldb_request_callback_t, struct ldb_request *) >+ldb_build_search_req: int (struct ldb_request **, struct ldb_context *, TALLOC_CTX *, struct ldb_dn *, enum ldb_scope, const char *, const char * const *, struct ldb_control **, void *, ldb_request_callback_t, struct ldb_request *) >+ldb_build_search_req_ex: int (struct ldb_request **, struct ldb_context *, TALLOC_CTX *, struct ldb_dn *, enum ldb_scope, struct ldb_parse_tree *, const char * const *, struct ldb_control **, void *, ldb_request_callback_t, struct ldb_request *) >+ldb_casefold: char *(struct ldb_context *, TALLOC_CTX *, const char *, size_t) >+ldb_casefold_default: char *(void *, TALLOC_CTX *, const char *, size_t) >+ldb_check_critical_controls: int (struct ldb_control **) >+ldb_comparison_binary: int (struct ldb_context *, void *, const struct ldb_val *, const struct ldb_val *) >+ldb_comparison_fold: int (struct ldb_context *, void *, const struct ldb_val *, const struct ldb_val *) >+ldb_connect: int (struct ldb_context *, const char *, unsigned int, const char **) >+ldb_control_to_string: char *(TALLOC_CTX *, const struct ldb_control *) >+ldb_controls_except_specified: struct ldb_control **(struct ldb_control **, TALLOC_CTX *, struct ldb_control *) >+ldb_debug: void (struct ldb_context *, enum ldb_debug_level, const char *, ...) >+ldb_debug_add: void (struct ldb_context *, const char *, ...) >+ldb_debug_end: void (struct ldb_context *, enum ldb_debug_level) >+ldb_debug_set: void (struct ldb_context *, enum ldb_debug_level, const char *, ...) >+ldb_delete: int (struct ldb_context *, struct ldb_dn *) >+ldb_dn_add_base: bool (struct ldb_dn *, struct ldb_dn *) >+ldb_dn_add_base_fmt: bool (struct ldb_dn *, const char *, ...) >+ldb_dn_add_child: bool (struct ldb_dn *, struct ldb_dn *) >+ldb_dn_add_child_fmt: bool (struct ldb_dn *, const char *, ...) >+ldb_dn_alloc_casefold: char *(TALLOC_CTX *, struct ldb_dn *) >+ldb_dn_alloc_linearized: char *(TALLOC_CTX *, struct ldb_dn *) >+ldb_dn_canonical_ex_string: char *(TALLOC_CTX *, struct ldb_dn *) >+ldb_dn_canonical_string: char *(TALLOC_CTX *, struct ldb_dn *) >+ldb_dn_check_local: bool (struct ldb_module *, struct ldb_dn *) >+ldb_dn_check_special: bool (struct ldb_dn *, const char *) >+ldb_dn_compare: int (struct ldb_dn *, struct ldb_dn *) >+ldb_dn_compare_base: int (struct ldb_dn *, struct ldb_dn *) >+ldb_dn_copy: struct ldb_dn *(TALLOC_CTX *, struct ldb_dn *) >+ldb_dn_escape_value: char *(TALLOC_CTX *, struct ldb_val) >+ldb_dn_extended_add_syntax: int (struct ldb_context *, unsigned int, const struct ldb_dn_extended_syntax *) >+ldb_dn_extended_filter: void (struct ldb_dn *, const char * const *) >+ldb_dn_extended_syntax_by_name: const struct ldb_dn_extended_syntax *(struct ldb_context *, const char *) >+ldb_dn_from_ldb_val: struct ldb_dn *(TALLOC_CTX *, struct ldb_context *, const struct ldb_val *) >+ldb_dn_get_casefold: const char *(struct ldb_dn *) >+ldb_dn_get_comp_num: int (struct ldb_dn *) >+ldb_dn_get_component_name: const char *(struct ldb_dn *, unsigned int) >+ldb_dn_get_component_val: const struct ldb_val *(struct ldb_dn *, unsigned int) >+ldb_dn_get_extended_comp_num: int (struct ldb_dn *) >+ldb_dn_get_extended_component: const struct ldb_val *(struct ldb_dn *, const char *) >+ldb_dn_get_extended_linearized: char *(TALLOC_CTX *, struct ldb_dn *, int) >+ldb_dn_get_linearized: const char *(struct ldb_dn *) >+ldb_dn_get_parent: struct ldb_dn *(TALLOC_CTX *, struct ldb_dn *) >+ldb_dn_get_rdn_name: const char *(struct ldb_dn *) >+ldb_dn_get_rdn_val: const struct ldb_val *(struct ldb_dn *) >+ldb_dn_has_extended: bool (struct ldb_dn *) >+ldb_dn_is_null: bool (struct ldb_dn *) >+ldb_dn_is_special: bool (struct ldb_dn *) >+ldb_dn_is_valid: bool (struct ldb_dn *) >+ldb_dn_map_local: struct ldb_dn *(struct ldb_module *, void *, struct ldb_dn *) >+ldb_dn_map_rebase_remote: struct ldb_dn *(struct ldb_module *, void *, struct ldb_dn *) >+ldb_dn_map_remote: struct ldb_dn *(struct ldb_module *, void *, struct ldb_dn *) >+ldb_dn_minimise: bool (struct ldb_dn *) >+ldb_dn_new: struct ldb_dn *(TALLOC_CTX *, struct ldb_context *, const char *) >+ldb_dn_new_fmt: struct ldb_dn *(TALLOC_CTX *, struct ldb_context *, const char *, ...) >+ldb_dn_remove_base_components: bool (struct ldb_dn *, unsigned int) >+ldb_dn_remove_child_components: bool (struct ldb_dn *, unsigned int) >+ldb_dn_remove_extended_components: void (struct ldb_dn *) >+ldb_dn_replace_components: bool (struct ldb_dn *, struct ldb_dn *) >+ldb_dn_set_component: int (struct ldb_dn *, int, const char *, const struct ldb_val) >+ldb_dn_set_extended_component: int (struct ldb_dn *, const char *, const struct ldb_val *) >+ldb_dn_update_components: int (struct ldb_dn *, const struct ldb_dn *) >+ldb_dn_validate: bool (struct ldb_dn *) >+ldb_dump_results: void (struct ldb_context *, struct ldb_result *, FILE *) >+ldb_error_at: int (struct ldb_context *, int, const char *, const char *, int) >+ldb_errstring: const char *(struct ldb_context *) >+ldb_extended: int (struct ldb_context *, const char *, void *, struct ldb_result **) >+ldb_extended_default_callback: int (struct ldb_request *, struct ldb_reply *) >+ldb_filter_from_tree: char *(TALLOC_CTX *, const struct ldb_parse_tree *) >+ldb_get_config_basedn: struct ldb_dn *(struct ldb_context *) >+ldb_get_create_perms: unsigned int (struct ldb_context *) >+ldb_get_default_basedn: struct ldb_dn *(struct ldb_context *) >+ldb_get_event_context: struct tevent_context *(struct ldb_context *) >+ldb_get_flags: unsigned int (struct ldb_context *) >+ldb_get_opaque: void *(struct ldb_context *, const char *) >+ldb_get_root_basedn: struct ldb_dn *(struct ldb_context *) >+ldb_get_schema_basedn: struct ldb_dn *(struct ldb_context *) >+ldb_global_init: int (void) >+ldb_handle_new: struct ldb_handle *(TALLOC_CTX *, struct ldb_context *) >+ldb_handler_copy: int (struct ldb_context *, void *, const struct ldb_val *, struct ldb_val *) >+ldb_handler_fold: int (struct ldb_context *, void *, const struct ldb_val *, struct ldb_val *) >+ldb_init: struct ldb_context *(TALLOC_CTX *, struct tevent_context *) >+ldb_ldif_message_string: char *(struct ldb_context *, TALLOC_CTX *, enum ldb_changetype, const struct ldb_message *) >+ldb_ldif_parse_modrdn: int (struct ldb_context *, const struct ldb_ldif *, TALLOC_CTX *, struct ldb_dn **, struct ldb_dn **, bool *, struct ldb_dn **, struct ldb_dn **) >+ldb_ldif_read: struct ldb_ldif *(struct ldb_context *, int (*)(void *), void *) >+ldb_ldif_read_file: struct ldb_ldif *(struct ldb_context *, FILE *) >+ldb_ldif_read_file_state: struct ldb_ldif *(struct ldb_context *, struct ldif_read_file_state *) >+ldb_ldif_read_free: void (struct ldb_context *, struct ldb_ldif *) >+ldb_ldif_read_string: struct ldb_ldif *(struct ldb_context *, const char **) >+ldb_ldif_write: int (struct ldb_context *, int (*)(void *, const char *, ...), void *, const struct ldb_ldif *) >+ldb_ldif_write_file: int (struct ldb_context *, FILE *, const struct ldb_ldif *) >+ldb_ldif_write_redacted_trace_string: char *(struct ldb_context *, TALLOC_CTX *, const struct ldb_ldif *) >+ldb_ldif_write_string: char *(struct ldb_context *, TALLOC_CTX *, const struct ldb_ldif *) >+ldb_load_modules: int (struct ldb_context *, const char **) >+ldb_map_add: int (struct ldb_module *, struct ldb_request *) >+ldb_map_delete: int (struct ldb_module *, struct ldb_request *) >+ldb_map_init: int (struct ldb_module *, const struct ldb_map_attribute *, const struct ldb_map_objectclass *, const char * const *, const char *, const char *) >+ldb_map_modify: int (struct ldb_module *, struct ldb_request *) >+ldb_map_rename: int (struct ldb_module *, struct ldb_request *) >+ldb_map_search: int (struct ldb_module *, struct ldb_request *) >+ldb_match_msg: int (struct ldb_context *, const struct ldb_message *, const struct ldb_parse_tree *, struct ldb_dn *, enum ldb_scope) >+ldb_match_msg_error: int (struct ldb_context *, const struct ldb_message *, const struct ldb_parse_tree *, struct ldb_dn *, enum ldb_scope, bool *) >+ldb_match_msg_objectclass: int (const struct ldb_message *, const char *) >+ldb_mod_register_control: int (struct ldb_module *, const char *) >+ldb_modify: int (struct ldb_context *, const struct ldb_message *) >+ldb_modify_default_callback: int (struct ldb_request *, struct ldb_reply *) >+ldb_module_call_chain: char *(struct ldb_request *, TALLOC_CTX *) >+ldb_module_connect_backend: int (struct ldb_context *, const char *, const char **, struct ldb_module **) >+ldb_module_done: int (struct ldb_request *, struct ldb_control **, struct ldb_extended *, int) >+ldb_module_flags: uint32_t (struct ldb_context *) >+ldb_module_get_ctx: struct ldb_context *(struct ldb_module *) >+ldb_module_get_name: const char *(struct ldb_module *) >+ldb_module_get_ops: const struct ldb_module_ops *(struct ldb_module *) >+ldb_module_get_private: void *(struct ldb_module *) >+ldb_module_init_chain: int (struct ldb_context *, struct ldb_module *) >+ldb_module_load_list: int (struct ldb_context *, const char **, struct ldb_module *, struct ldb_module **) >+ldb_module_new: struct ldb_module *(TALLOC_CTX *, struct ldb_context *, const char *, const struct ldb_module_ops *) >+ldb_module_next: struct ldb_module *(struct ldb_module *) >+ldb_module_popt_options: struct poptOption **(struct ldb_context *) >+ldb_module_send_entry: int (struct ldb_request *, struct ldb_message *, struct ldb_control **) >+ldb_module_send_referral: int (struct ldb_request *, char *) >+ldb_module_set_next: void (struct ldb_module *, struct ldb_module *) >+ldb_module_set_private: void (struct ldb_module *, void *) >+ldb_modules_hook: int (struct ldb_context *, enum ldb_module_hook_type) >+ldb_modules_list_from_string: const char **(struct ldb_context *, TALLOC_CTX *, const char *) >+ldb_modules_load: int (const char *, const char *) >+ldb_msg_add: int (struct ldb_message *, const struct ldb_message_element *, int) >+ldb_msg_add_empty: int (struct ldb_message *, const char *, int, struct ldb_message_element **) >+ldb_msg_add_fmt: int (struct ldb_message *, const char *, const char *, ...) >+ldb_msg_add_linearized_dn: int (struct ldb_message *, const char *, struct ldb_dn *) >+ldb_msg_add_steal_string: int (struct ldb_message *, const char *, char *) >+ldb_msg_add_steal_value: int (struct ldb_message *, const char *, struct ldb_val *) >+ldb_msg_add_string: int (struct ldb_message *, const char *, const char *) >+ldb_msg_add_value: int (struct ldb_message *, const char *, const struct ldb_val *, struct ldb_message_element **) >+ldb_msg_canonicalize: struct ldb_message *(struct ldb_context *, const struct ldb_message *) >+ldb_msg_check_string_attribute: int (const struct ldb_message *, const char *, const char *) >+ldb_msg_copy: struct ldb_message *(TALLOC_CTX *, const struct ldb_message *) >+ldb_msg_copy_attr: int (struct ldb_message *, const char *, const char *) >+ldb_msg_copy_shallow: struct ldb_message *(TALLOC_CTX *, const struct ldb_message *) >+ldb_msg_diff: struct ldb_message *(struct ldb_context *, struct ldb_message *, struct ldb_message *) >+ldb_msg_difference: int (struct ldb_context *, TALLOC_CTX *, struct ldb_message *, struct ldb_message *, struct ldb_message **) >+ldb_msg_element_compare: int (struct ldb_message_element *, struct ldb_message_element *) >+ldb_msg_element_compare_name: int (struct ldb_message_element *, struct ldb_message_element *) >+ldb_msg_element_equal_ordered: bool (const struct ldb_message_element *, const struct ldb_message_element *) >+ldb_msg_find_attr_as_bool: int (const struct ldb_message *, const char *, int) >+ldb_msg_find_attr_as_dn: struct ldb_dn *(struct ldb_context *, TALLOC_CTX *, const struct ldb_message *, const char *) >+ldb_msg_find_attr_as_double: double (const struct ldb_message *, const char *, double) >+ldb_msg_find_attr_as_int: int (const struct ldb_message *, const char *, int) >+ldb_msg_find_attr_as_int64: int64_t (const struct ldb_message *, const char *, int64_t) >+ldb_msg_find_attr_as_string: const char *(const struct ldb_message *, const char *, const char *) >+ldb_msg_find_attr_as_uint: unsigned int (const struct ldb_message *, const char *, unsigned int) >+ldb_msg_find_attr_as_uint64: uint64_t (const struct ldb_message *, const char *, uint64_t) >+ldb_msg_find_element: struct ldb_message_element *(const struct ldb_message *, const char *) >+ldb_msg_find_ldb_val: const struct ldb_val *(const struct ldb_message *, const char *) >+ldb_msg_find_val: struct ldb_val *(const struct ldb_message_element *, struct ldb_val *) >+ldb_msg_new: struct ldb_message *(TALLOC_CTX *) >+ldb_msg_normalize: int (struct ldb_context *, TALLOC_CTX *, const struct ldb_message *, struct ldb_message **) >+ldb_msg_remove_attr: void (struct ldb_message *, const char *) >+ldb_msg_remove_element: void (struct ldb_message *, struct ldb_message_element *) >+ldb_msg_rename_attr: int (struct ldb_message *, const char *, const char *) >+ldb_msg_sanity_check: int (struct ldb_context *, const struct ldb_message *) >+ldb_msg_sort_elements: void (struct ldb_message *) >+ldb_next_del_trans: int (struct ldb_module *) >+ldb_next_end_trans: int (struct ldb_module *) >+ldb_next_init: int (struct ldb_module *) >+ldb_next_prepare_commit: int (struct ldb_module *) >+ldb_next_remote_request: int (struct ldb_module *, struct ldb_request *) >+ldb_next_request: int (struct ldb_module *, struct ldb_request *) >+ldb_next_start_trans: int (struct ldb_module *) >+ldb_op_default_callback: int (struct ldb_request *, struct ldb_reply *) >+ldb_options_find: const char *(struct ldb_context *, const char **, const char *) >+ldb_pack_data: int (struct ldb_context *, const struct ldb_message *, struct ldb_val *) >+ldb_parse_control_from_string: struct ldb_control *(struct ldb_context *, TALLOC_CTX *, const char *) >+ldb_parse_control_strings: struct ldb_control **(struct ldb_context *, TALLOC_CTX *, const char **) >+ldb_parse_tree: struct ldb_parse_tree *(TALLOC_CTX *, const char *) >+ldb_parse_tree_attr_replace: void (struct ldb_parse_tree *, const char *, const char *) >+ldb_parse_tree_copy_shallow: struct ldb_parse_tree *(TALLOC_CTX *, const struct ldb_parse_tree *) >+ldb_parse_tree_walk: int (struct ldb_parse_tree *, int (*)(struct ldb_parse_tree *, void *), void *) >+ldb_qsort: void (void * const, size_t, size_t, void *, ldb_qsort_cmp_fn_t) >+ldb_register_backend: int (const char *, ldb_connect_fn, bool) >+ldb_register_extended_match_rule: int (struct ldb_context *, const struct ldb_extended_match_rule *) >+ldb_register_hook: int (ldb_hook_fn) >+ldb_register_module: int (const struct ldb_module_ops *) >+ldb_rename: int (struct ldb_context *, struct ldb_dn *, struct ldb_dn *) >+ldb_reply_add_control: int (struct ldb_reply *, const char *, bool, void *) >+ldb_reply_get_control: struct ldb_control *(struct ldb_reply *, const char *) >+ldb_req_get_custom_flags: uint32_t (struct ldb_request *) >+ldb_req_is_untrusted: bool (struct ldb_request *) >+ldb_req_location: const char *(struct ldb_request *) >+ldb_req_mark_trusted: void (struct ldb_request *) >+ldb_req_mark_untrusted: void (struct ldb_request *) >+ldb_req_set_custom_flags: void (struct ldb_request *, uint32_t) >+ldb_req_set_location: void (struct ldb_request *, const char *) >+ldb_request: int (struct ldb_context *, struct ldb_request *) >+ldb_request_add_control: int (struct ldb_request *, const char *, bool, void *) >+ldb_request_done: int (struct ldb_request *, int) >+ldb_request_get_control: struct ldb_control *(struct ldb_request *, const char *) >+ldb_request_get_status: int (struct ldb_request *) >+ldb_request_replace_control: int (struct ldb_request *, const char *, bool, void *) >+ldb_request_set_state: void (struct ldb_request *, int) >+ldb_reset_err_string: void (struct ldb_context *) >+ldb_save_controls: int (struct ldb_control *, struct ldb_request *, struct ldb_control ***) >+ldb_schema_attribute_add: int (struct ldb_context *, const char *, unsigned int, const char *) >+ldb_schema_attribute_add_with_syntax: int (struct ldb_context *, const char *, unsigned int, const struct ldb_schema_syntax *) >+ldb_schema_attribute_by_name: const struct ldb_schema_attribute *(struct ldb_context *, const char *) >+ldb_schema_attribute_remove: void (struct ldb_context *, const char *) >+ldb_schema_attribute_set_override_handler: void (struct ldb_context *, ldb_attribute_handler_override_fn_t, void *) >+ldb_search: int (struct ldb_context *, TALLOC_CTX *, struct ldb_result **, struct ldb_dn *, enum ldb_scope, const char * const *, const char *, ...) >+ldb_search_default_callback: int (struct ldb_request *, struct ldb_reply *) >+ldb_sequence_number: int (struct ldb_context *, enum ldb_sequence_type, uint64_t *) >+ldb_set_create_perms: void (struct ldb_context *, unsigned int) >+ldb_set_debug: int (struct ldb_context *, void (*)(void *, enum ldb_debug_level, const char *, va_list), void *) >+ldb_set_debug_stderr: int (struct ldb_context *) >+ldb_set_default_dns: void (struct ldb_context *) >+ldb_set_errstring: void (struct ldb_context *, const char *) >+ldb_set_event_context: void (struct ldb_context *, struct tevent_context *) >+ldb_set_flags: void (struct ldb_context *, unsigned int) >+ldb_set_modules_dir: void (struct ldb_context *, const char *) >+ldb_set_opaque: int (struct ldb_context *, const char *, void *) >+ldb_set_timeout: int (struct ldb_context *, struct ldb_request *, int) >+ldb_set_timeout_from_prev_req: int (struct ldb_context *, struct ldb_request *, struct ldb_request *) >+ldb_set_utf8_default: void (struct ldb_context *) >+ldb_set_utf8_fns: void (struct ldb_context *, void *, char *(*)(void *, void *, const char *, size_t)) >+ldb_setup_wellknown_attributes: int (struct ldb_context *) >+ldb_should_b64_encode: int (struct ldb_context *, const struct ldb_val *) >+ldb_standard_syntax_by_name: const struct ldb_schema_syntax *(struct ldb_context *, const char *) >+ldb_strerror: const char *(int) >+ldb_string_to_time: time_t (const char *) >+ldb_string_utc_to_time: time_t (const char *) >+ldb_timestring: char *(TALLOC_CTX *, time_t) >+ldb_timestring_utc: char *(TALLOC_CTX *, time_t) >+ldb_transaction_cancel: int (struct ldb_context *) >+ldb_transaction_cancel_noerr: int (struct ldb_context *) >+ldb_transaction_commit: int (struct ldb_context *) >+ldb_transaction_prepare_commit: int (struct ldb_context *) >+ldb_transaction_start: int (struct ldb_context *) >+ldb_unpack_data: int (struct ldb_context *, const struct ldb_val *, struct ldb_message *) >+ldb_val_dup: struct ldb_val (TALLOC_CTX *, const struct ldb_val *) >+ldb_val_equal_exact: int (const struct ldb_val *, const struct ldb_val *) >+ldb_val_map_local: struct ldb_val (struct ldb_module *, void *, const struct ldb_map_attribute *, const struct ldb_val *) >+ldb_val_map_remote: struct ldb_val (struct ldb_module *, void *, const struct ldb_map_attribute *, const struct ldb_val *) >+ldb_val_string_cmp: int (const struct ldb_val *, const char *) >+ldb_val_to_time: int (const struct ldb_val *, time_t *) >+ldb_valid_attr_name: int (const char *) >+ldb_vdebug: void (struct ldb_context *, enum ldb_debug_level, const char *, va_list) >+ldb_wait: int (struct ldb_handle *, enum ldb_wait_type) >diff --git a/lib/ldb/ABI/pyldb-util-1.1.20.sigs b/lib/ldb/ABI/pyldb-util-1.1.20.sigs >new file mode 100644 >index 0000000..74d6719 >--- /dev/null >+++ b/lib/ldb/ABI/pyldb-util-1.1.20.sigs >@@ -0,0 +1,2 @@ >+pyldb_Dn_FromDn: PyObject *(struct ldb_dn *) >+pyldb_Object_AsDn: bool (TALLOC_CTX *, PyObject *, struct ldb_context *, struct ldb_dn **) >diff --git a/lib/ldb/wscript b/lib/ldb/wscript >index 4d44a0a..6391e74 100755 >--- a/lib/ldb/wscript >+++ b/lib/ldb/wscript >@@ -1,7 +1,7 @@ > #!/usr/bin/env python > > APPNAME = 'ldb' >-VERSION = '1.1.19' >+VERSION = '1.1.20' > > blddir = 'bin' > >-- >1.9.1 > > >From 12265b04f654cf38cb641788cdea197cfe210feb Mon Sep 17 00:00:00 2001 >From: Stefan Metzmacher <metze@samba.org> >Date: Fri, 9 Jan 2015 08:56:59 +0100 >Subject: [PATCH 6/6] s4:dsdb/tests: add test_timevalues1() to verify timestamp > values >MIME-Version: 1.0 >Content-Type: text/plain; charset=UTF-8 >Content-Transfer-Encoding: 8bit > >Bug: https://bugzilla.samba.org/show_bug.cgi?id=9810 > >Signed-off-by: Stefan Metzmacher <metze@samba.org> >Reviewed-by: Andreas Schneider <asn@samba.org> >Reviewed-by: Günther Deschner <gd@samba.org> > >Autobuild-User(master): Stefan Metzmacher <metze@samba.org> >Autobuild-Date(master): Sat Jan 24 20:17:20 CET 2015 on sn-devel-104 > >(cherry picked from commit dc2f91020e3b52942f8aab60fd1db70d2afadd51) >--- > source4/dsdb/tests/python/ldap.py | 40 +++++++++++++++++++++++++++++++++++++++ > 1 file changed, 40 insertions(+) > >diff --git a/source4/dsdb/tests/python/ldap.py b/source4/dsdb/tests/python/ldap.py >index f6b08e4..c0bb18c 100755 >--- a/source4/dsdb/tests/python/ldap.py >+++ b/source4/dsdb/tests/python/ldap.py >@@ -96,6 +96,7 @@ class BasicTests(samba.tests.TestCase): > delete_force(self.ldb, "description=xyz,cn=users," + self.base_dn) > delete_force(self.ldb, "ou=testou,cn=users," + self.base_dn) > delete_force(self.ldb, "cn=Test Secret,cn=system," + self.base_dn) >+ delete_force(self.ldb, "cn=testtimevaluesuser1,cn=users," + self.base_dn) > > def test_objectclasses(self): > """Test objectClass behaviour""" >@@ -2892,6 +2893,45 @@ nTSecurityDescriptor:: """ + desc_base64 > self.assertTrue("whenCreated" in res[0]) > self.assertTrue("whenChanged" in res[0]) > >+ def test_timevalues1(self): >+ """Tests possible syntax of time attributes""" >+ >+ user_name = "testtimevaluesuser1" >+ user_dn = "CN=%s,CN=Users,%s" % (user_name, self.base_dn) >+ >+ delete_force(self.ldb, user_dn) >+ self.ldb.add({ "dn": user_dn, >+ "objectClass": "user", >+ "sAMAccountName": user_name }) >+ >+ # >+ # We check the following values: >+ # >+ # 370101000000Z => 20370101000000.0Z >+ # 20370102000000.*Z => 20370102000000.0Z >+ # >+ ext = [ "Z", ".0Z", ".Z", ".000Z", ".RandomIgnoredCharacters...987654321Z" ] >+ for i in range(0, len(ext)): >+ v_raw = "203701%02d000000" % (i + 1) >+ if ext[i] == "Z": >+ v_set = v_raw[2:] + ext[i] >+ else: >+ v_set = v_raw + ext[i] >+ v_get = v_raw + ".0Z" >+ >+ m = Message() >+ m.dn = Dn(ldb, user_dn) >+ m["msTSExpireDate"] = MessageElement([v_set], >+ FLAG_MOD_REPLACE, >+ "msTSExpireDate") >+ self.ldb.modify(m) >+ >+ res = self.ldb.search(base=user_dn, scope=SCOPE_BASE, attrs=["msTSExpireDate"]) >+ self.assertTrue(len(res) == 1) >+ self.assertTrue("msTSExpireDate" in res[0]) >+ self.assertTrue(len(res[0]["msTSExpireDate"]) == 1) >+ self.assertEquals(res[0]["msTSExpireDate"][0], v_get) >+ > class BaseDnTests(samba.tests.TestCase): > > def setUp(self): >-- >1.9.1 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Flags:
metze
:
review?
(
abartlet
)
asn
:
review+
gd
:
review+
Actions:
View
Attachments on
bug 9810
:
8784
| 10662