summaryrefslogtreecommitdiff
path: root/source4/nbt_server/winsdb.c
diff options
context:
space:
mode:
Diffstat (limited to 'source4/nbt_server/winsdb.c')
-rw-r--r--source4/nbt_server/winsdb.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/source4/nbt_server/winsdb.c b/source4/nbt_server/winsdb.c
index 53fceedf37..f452e58e70 100644
--- a/source4/nbt_server/winsdb.c
+++ b/source4/nbt_server/winsdb.c
@@ -25,6 +25,7 @@
#include "nbt_server/winsdb.h"
#include "lib/ldb/include/ldb.h"
#include "db_wrap.h"
+#include "system/time.h"
/*
load a WINS entry from the database
@@ -72,6 +73,14 @@ struct winsdb_record *winsdb_load(struct wins_server *winssrv,
}
rec->addresses[i] = NULL;
+ /* see if it has already expired */
+ if (rec->state == WINS_REC_ACTIVE &&
+ rec->expire_time <= time(NULL)) {
+ DEBUG(5,("WINS: expiring name %s (expired at %s)\n",
+ nbt_name_string(tmp_ctx, rec->name), timestring(tmp_ctx, rec->expire_time)));
+ rec->state = WINS_REC_EXPIRED;
+ }
+
talloc_steal(mem_ctx, rec);
talloc_free(tmp_ctx);
return rec;
@@ -164,6 +173,32 @@ failed:
return NBT_RCODE_SVR;
}
+
+/*
+ delete a WINS record from the database
+*/
+uint8_t winsdb_delete(struct wins_server *winssrv, struct nbt_name *name)
+{
+ struct ldb_context *ldb = winssrv->wins_db->ldb;
+ TALLOC_CTX *tmp_ctx = talloc_new(winssrv);
+ int ret;
+ const char *dn;
+
+ dn = talloc_asprintf(tmp_ctx, "NAME=%s", nbt_name_string(tmp_ctx, name));
+ if (dn == NULL) goto failed;
+
+ ret = ldb_delete(ldb, dn);
+ if (ret != 0) goto failed;
+
+ talloc_free(tmp_ctx);
+ return NBT_RCODE_OK;
+
+failed:
+ talloc_free(tmp_ctx);
+ return NBT_RCODE_SVR;
+}
+
+
/*
connect to the WINS database
*/