diff options
author | Luke Leighton <lkcl@samba.org> | 2000-04-05 06:18:43 +0000 |
---|---|---|
committer | Luke Leighton <lkcl@samba.org> | 2000-04-05 06:18:43 +0000 |
commit | 4535905d1d398fdf8089ce73176e52e1a1b0be58 (patch) | |
tree | 514346ed1b5b76c00fc4b18d4741740cf1927bfa | |
parent | ab89e4128735253144507f9900b6498d1d996365 (diff) | |
download | samba-4535905d1d398fdf8089ce73176e52e1a1b0be58.tar.gz |
added tdbsec_delete. i wonder if there are any more of these.
tdbset_store, tdbset_fetch, tdbset_delete.
-rw-r--r-- | source/tdb/tdb_sec.c | 60 |
1 files changed, 58 insertions, 2 deletions
diff --git a/source/tdb/tdb_sec.c b/source/tdb/tdb_sec.c index 74da4d393fe..e7bef56b845 100644 --- a/source/tdb/tdb_sec.c +++ b/source/tdb/tdb_sec.c @@ -21,8 +21,12 @@ */ /* + * function prototypes: * - * int tdbsec_set(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA secdata) + * int tdbsec_setsec(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA secdata) + * + * + * int tdbsec_delsec(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA secdata) * * * TDB_DATA tdbsec_fetch(TDB_CONTEXT *tdb, TDB_DATA key, @@ -32,6 +36,17 @@ * int tdbsec_store(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA data, * int (*sec_check)(TDB_DATA , void *), void *arg) * + * + * example uses. must set security first, followed by store actual data. + * + * tdbsec_setsec(tdb, key, security_data_for_key); + * + * tdbsec_store (tdb, key, data, sec_store_check_fn()); + * tdbsec_fetch (tdb, key, data, sec_fetch_check_fn()); + * + * tdbsec_delete(tdb, key, sec_delete_check_fn()); + * tdbsec_delsec(tdb, key); + * */ #include "includes.h" @@ -89,6 +104,33 @@ TDB_DATA tdbsec_fetch(TDB_CONTEXT *tdb, TDB_DATA key, return null_data; } +int tdbsec_delete(TDB_CONTEXT *tdb, TDB_DATA key, + int (*sec_check)(TDB_DATA , void *), void *arg) +{ + TDB_DATA key2, data2; + + data2 = null_data; + + key2 = tdbsec_genkey(key); + if (!key2.dptr) goto failed; + + data2 = tdb_fetch(tdb, key2); + + if (sec_check(data2, arg) != 0) { + goto failed; + } + + tdbsec_free(key2); + tdbsec_free(data2); + + return tdb_delete(tdb, key); + + failed: + tdbsec_free(key2); + tdbsec_free(data2); + return -1; +} + int tdbsec_store(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA data, int (*sec_check)(TDB_DATA , void *), void *arg) { @@ -117,7 +159,7 @@ int tdbsec_store(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA data, } -int tdbsec_set(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA secdata) +int tdbsec_setsec(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA secdata) { int ret; TDB_DATA key2; @@ -131,3 +173,17 @@ int tdbsec_set(TDB_CONTEXT *tdb, TDB_DATA key, TDB_DATA secdata) return ret; } +int tdbsec_delsec(TDB_CONTEXT *tdb, TDB_DATA key) +{ + int ret; + TDB_DATA key2; + + key2 = tdbsec_genkey(key); + if (!key2.dptr) return -1; + + ret = tdb_delete(tdb, key2); + + tdbsec_free(key2); + return ret; +} + |