diff options
author | Michael Adam <obnox@samba.org> | 2013-08-28 14:20:13 +0200 |
---|---|---|
committer | Volker Lendecke <vl@samba.org> | 2013-10-01 11:59:29 +0000 |
commit | 173cdfe0a42f6d4917b0d28bfd23d7fff1ccf232 (patch) | |
tree | 6927da65d6c7db33e99b1fe1fd020572ef8624c6 /source3 | |
parent | f80f43c772e8c5504111dd4274eb928e61fa56ed (diff) | |
download | samba-173cdfe0a42f6d4917b0d28bfd23d7fff1ccf232.tar.gz samba-173cdfe0a42f6d4917b0d28bfd23d7fff1ccf232.tar.bz2 samba-173cdfe0a42f6d4917b0d28bfd23d7fff1ccf232.zip |
idmap_autorid_tdb: add idmap_autorid_getconfigstr()
Pair-Programmed-With: Atul Kulkarni <atul.kulkarni@in.ibm.com>
Signed-off-by: Michael Adam <obnox@samba.org>
Signed-off-by: Atul Kulkarni <atul.kulkarni@in.ibm.com>
Reviewed-by: Volker Lendecke <vl@samba.org>
Diffstat (limited to 'source3')
-rw-r--r-- | source3/include/idmap_autorid_tdb.h | 6 | ||||
-rw-r--r-- | source3/winbindd/idmap_autorid_tdb.c | 54 |
2 files changed, 60 insertions, 0 deletions
diff --git a/source3/include/idmap_autorid_tdb.h b/source3/include/idmap_autorid_tdb.h index 12151289cb..21e4ddbdc3 100644 --- a/source3/include/idmap_autorid_tdb.h +++ b/source3/include/idmap_autorid_tdb.h @@ -69,4 +69,10 @@ struct autorid_global_config *idmap_autorid_loadconfig(struct db_context *db, NTSTATUS idmap_autorid_saveconfig(struct db_context *db, struct autorid_global_config *cfg); +/** + * get the range config string stored in the database + */ +NTSTATUS idmap_autorid_getconfigstr(struct db_context *db, TALLOC_CTX *mem_ctx, + char **result); + #endif /* _IDMAP_AUTORID_H_ */ diff --git a/source3/winbindd/idmap_autorid_tdb.c b/source3/winbindd/idmap_autorid_tdb.c index fbb8a7cff6..6933c9e31e 100644 --- a/source3/winbindd/idmap_autorid_tdb.c +++ b/source3/winbindd/idmap_autorid_tdb.c @@ -207,6 +207,60 @@ NTSTATUS idmap_autorid_db_init(const char *path, return status; } +struct idmap_autorid_fetch_config_state { + TALLOC_CTX *mem_ctx; + char *configstr; +}; + +static void idmap_autorid_config_parser(TDB_DATA key, TDB_DATA value, + void *private_data) +{ + struct idmap_autorid_fetch_config_state *state; + + state = (struct idmap_autorid_fetch_config_state *)private_data; + + /* + * strndup because we have non-nullterminated strings in the db + */ + state->configstr = talloc_strndup( + state->mem_ctx, (const char *)value.dptr, value.dsize); +} + +NTSTATUS idmap_autorid_getconfigstr(struct db_context *db, TALLOC_CTX *mem_ctx, + char **result) +{ + TDB_DATA key; + NTSTATUS status; + struct idmap_autorid_fetch_config_state state; + + if (result == NULL) { + return NT_STATUS_INVALID_PARAMETER; + } + + key = string_term_tdb_data(CONFIGKEY); + + state.mem_ctx = mem_ctx; + state.configstr = NULL; + + status = dbwrap_parse_record(db, key, idmap_autorid_config_parser, + &state); + if (!NT_STATUS_IS_OK(status)) { + DEBUG(1, ("Error while retrieving config: %s\n", + nt_errstr(status))); + return status; + } + + if (state.configstr == NULL) { + DEBUG(1, ("Error while retrieving config\n")); + return NT_STATUS_NO_MEMORY; + } + + DEBUG(5, ("found CONFIG: %s\n", state.configstr)); + + *result = state.configstr; + return NT_STATUS_OK; +} + struct autorid_global_config *idmap_autorid_loadconfig(struct db_context *db, TALLOC_CTX *ctx) { |