diff options
Diffstat (limited to 'lib/ldb/common/attrib_handlers.c')
-rw-r--r-- | lib/ldb/common/attrib_handlers.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/lib/ldb/common/attrib_handlers.c b/lib/ldb/common/attrib_handlers.c index 73e1705593..daeb422aca 100644 --- a/lib/ldb/common/attrib_handlers.c +++ b/lib/ldb/common/attrib_handlers.c @@ -387,6 +387,27 @@ static int ldb_canonicalise_utctime(struct ldb_context *ldb, void *mem_ctx, if (ret != LDB_SUCCESS) { return ret; } + out->data = (uint8_t *)ldb_timestring_utc(mem_ctx, t); + if (out->data == NULL) { + ldb_oom(ldb); + return LDB_ERR_OPERATIONS_ERROR; + } + out->length = strlen((char *)out->data); + return 0; +} + +/* + canonicalise a generalized time +*/ +static int ldb_canonicalise_generalizedtime(struct ldb_context *ldb, void *mem_ctx, + const struct ldb_val *in, struct ldb_val *out) +{ + time_t t; + int ret; + ret = ldb_val_to_time(in, &t); + if (ret != LDB_SUCCESS) { + return ret; + } out->data = (uint8_t *)ldb_timestring(mem_ctx, t); if (out->data == NULL) { ldb_oom(ldb); @@ -443,6 +464,13 @@ static const struct ldb_schema_syntax ldb_standard_syntaxes[] = { .comparison_fn = ldb_comparison_utctime }, { + .name = LDB_SYNTAX_GENERALIZED_TIME, + .ldif_read_fn = ldb_handler_copy, + .ldif_write_fn = ldb_handler_copy, + .canonicalise_fn = ldb_canonicalise_generalizedtime, + .comparison_fn = ldb_comparison_utctime + }, + { .name = LDB_SYNTAX_BOOLEAN, .ldif_read_fn = ldb_handler_copy, .ldif_write_fn = ldb_handler_copy, |