diff options
author | Andrew Bartlett <abartlet@samba.org> | 2009-08-26 15:59:00 +1000 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2009-08-26 15:59:00 +1000 |
commit | 425386ff6141bba2e7b1d8f3c27e96aaf1c5cb95 (patch) | |
tree | 645da53767294cab003826df87a2502505c798b5 /source4/lib/ldb/common | |
parent | 3ed33813bb6aa1ca932372c2a2ce36152b6af50b (diff) | |
download | samba-425386ff6141bba2e7b1d8f3c27e96aaf1c5cb95.tar.gz samba-425386ff6141bba2e7b1d8f3c27e96aaf1c5cb95.tar.bz2 samba-425386ff6141bba2e7b1d8f3c27e96aaf1c5cb95.zip |
s4:ldb Add ldb_ldif_write_string() and python wrappers
This allows us to turn a python LdbMessage back into a string.
Andrew Bartlett
Diffstat (limited to 'source4/lib/ldb/common')
-rw-r--r-- | source4/lib/ldb/common/ldb_ldif.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/source4/lib/ldb/common/ldb_ldif.c b/source4/lib/ldb/common/ldb_ldif.c index d890ff8300..30370e6999 100644 --- a/source4/lib/ldb/common/ldb_ldif.c +++ b/source4/lib/ldb/common/ldb_ldif.c @@ -759,3 +759,43 @@ int ldb_ldif_write_file(struct ldb_context *ldb, FILE *f, const struct ldb_ldif state.f = f; return ldb_ldif_write(ldb, fprintf_file, &state, ldif); } + +/* + wrapper around ldif_write() for a string +*/ +struct ldif_write_string_state { + char *string; +}; + +static int ldif_printf_string(void *private_data, const char *fmt, ...) PRINTF_ATTRIBUTE(2, 3); + +static int ldif_printf_string(void *private_data, const char *fmt, ...) +{ + struct ldif_write_string_state *state = + (struct ldif_write_string_state *)private_data; + va_list ap; + size_t oldlen = strlen(state->string); + va_start(ap, fmt); + + state->string = talloc_vasprintf_append(state->string, fmt, ap); + va_end(ap); + if (!state->string) { + return -1; + } + + return strlen(state->string) - oldlen; +} + +char *ldb_ldif_write_string(struct ldb_context *ldb, TALLOC_CTX *mem_ctx, + const struct ldb_ldif *ldif) +{ + struct ldif_write_string_state state; + state.string = talloc_strdup(mem_ctx, ""); + if (!state.string) { + return NULL; + } + if (ldb_ldif_write(ldb, ldif_printf_string, &state, ldif) == -1) { + return NULL; + } + return state.string; +} |