summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuke Leighton <lkcl@samba.org>2000-04-05 06:18:43 +0000
committerLuke Leighton <lkcl@samba.org>2000-04-05 06:18:43 +0000
commit4535905d1d398fdf8089ce73176e52e1a1b0be58 (patch)
tree514346ed1b5b76c00fc4b18d4741740cf1927bfa
parentab89e4128735253144507f9900b6498d1d996365 (diff)
downloadsamba-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.c60
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;
+}
+