[SUBSYSTEM::WINSDB]
OBJ_FILES = \
wins/winsdb.o
+PRIVATE_PROTO_HEADER = wins/winsdb_proto.h
REQUIRED_SUBSYSTEMS = \
LIBLDB
# End SUBSYSTEM WINSDB
/*
return the new maxVersion and save it
*/
-static uint64_t winsdb_allocate_version(struct ldb_context *wins_db)
+static uint64_t winsdb_allocate_version(struct winsdb_handle *h)
{
int trans;
int ret;
struct ldb_dn *dn;
struct ldb_result *res = NULL;
struct ldb_message *msg = NULL;
+ struct ldb_context *wins_db = h->ldb;
TALLOC_CTX *tmp_ctx = talloc_new(wins_db);
uint64_t maxVersion = 0;
/*
load a WINS entry from the database
*/
-NTSTATUS winsdb_lookup(struct ldb_context *wins_db,
+NTSTATUS winsdb_lookup(struct winsdb_handle *h,
struct nbt_name *name,
TALLOC_CTX *mem_ctx,
struct winsdb_record **_rec)
struct ldb_result *res = NULL;
int ret;
struct winsdb_record *rec;
+ struct ldb_context *wins_db = h->ldb;
TALLOC_CTX *tmp_ctx = talloc_new(mem_ctx);
/* find the record in the WINS database */
/*
save a WINS record into the database
*/
-uint8_t winsdb_add(struct ldb_context *wins_db, struct winsdb_record *rec, uint32_t flags)
+uint8_t winsdb_add(struct winsdb_handle *h, struct winsdb_record *rec, uint32_t flags)
{
struct ldb_message *msg;
+ struct ldb_context *wins_db = h->ldb;
TALLOC_CTX *tmp_ctx = talloc_new(wins_db);
int trans = -1;
int ret = 0;
if (trans != LDB_SUCCESS) goto failed;
if (flags & WINSDB_FLAG_ALLOC_VERSION) {
- rec->version = winsdb_allocate_version(wins_db);
+ rec->version = winsdb_allocate_version(h);
if (rec->version == 0) goto failed;
}
if (flags & WINSDB_FLAG_TAKE_OWNERSHIP) {
/*
modify a WINS record in the database
*/
-uint8_t winsdb_modify(struct ldb_context *wins_db, struct winsdb_record *rec, uint32_t flags)
+uint8_t winsdb_modify(struct winsdb_handle *h, struct winsdb_record *rec, uint32_t flags)
{
struct ldb_message *msg;
+ struct ldb_context *wins_db = h->ldb;
TALLOC_CTX *tmp_ctx = talloc_new(wins_db);
int trans;
int ret;
if (trans != LDB_SUCCESS) goto failed;
if (flags & WINSDB_FLAG_ALLOC_VERSION) {
- rec->version = winsdb_allocate_version(wins_db);
+ rec->version = winsdb_allocate_version(h);
if (rec->version == 0) goto failed;
}
if (flags & WINSDB_FLAG_TAKE_OWNERSHIP) {
/*
delete a WINS record from the database
*/
-uint8_t winsdb_delete(struct ldb_context *wins_db, struct winsdb_record *rec)
+uint8_t winsdb_delete(struct winsdb_handle *h, struct winsdb_record *rec)
{
+ struct ldb_context *wins_db = h->ldb;
TALLOC_CTX *tmp_ctx = talloc_new(wins_db);
const struct ldb_dn *dn;
int trans;
return NBT_RCODE_SVR;
}
-struct ldb_context *winsdb_connect(TALLOC_CTX *mem_ctx)
+struct winsdb_handle *winsdb_connect(TALLOC_CTX *mem_ctx)
{
- return ldb_wrap_connect(mem_ctx, lock_path(mem_ctx, lp_wins_url()),
- system_session(mem_ctx), NULL, 0, NULL);
+ struct winsdb_handle *h = NULL;
+
+ h = talloc(mem_ctx, struct winsdb_handle);
+ if (!h) return NULL;
+
+ h->ldb = ldb_wrap_connect(h, lock_path(h, lp_wins_url()),
+ system_session(h), NULL, 0, NULL);
+ if (!h->ldb) goto failed;
+
+ return h;
+failed:
+ talloc_free(h);
+ return NULL;
}
const char *registered_by;
};
+struct winsdb_handle {
+ /* wins server database handle */
+ struct ldb_context *ldb;
+};
+
struct wins_server {
/* wins server database handle */
- struct ldb_context *wins_db;
+ struct winsdb_handle *wins_db;
/* some configuration */
struct {
uint32_t tombstone_interval;
} config;
};
+
+#include "nbt_server/wins/winsdb_proto.h"
(long long)owner_in->min_version,
(long long)owner_in->max_version);
NT_STATUS_HAVE_NO_MEMORY(filter);
- ret = ldb_search(service->wins_db, NULL, LDB_SCOPE_SUBTREE, filter, NULL, &res);
+ ret = ldb_search(service->wins_db->ldb, NULL, LDB_SCOPE_SUBTREE, filter, NULL, &res);
if (ret != LDB_SUCCESS) return NT_STATUS_INTERNAL_DB_CORRUPTION;
talloc_steal(call, res);
if (res->count == 0) {
"(expireTime<=%s)(!(isStatic=1)))",
WINSDB_OWNER_LOCAL, now_timestr);
NT_STATUS_HAVE_NO_MEMORY(filter);
- ret = ldb_search(service->wins_db, NULL, LDB_SCOPE_SUBTREE, filter, NULL, &res);
+ ret = ldb_search(service->wins_db->ldb, NULL, LDB_SCOPE_SUBTREE, filter, NULL, &res);
if (ret != LDB_SUCCESS) return NT_STATUS_INTERNAL_DB_CORRUPTION;
talloc_steal(tmp_mem, res);
"(!(recordState=%u))(expireTime<=%s)(!(isStatic=1)))",
WINSDB_OWNER_LOCAL, WREPL_STATE_ACTIVE, now_timestr);
NT_STATUS_HAVE_NO_MEMORY(filter);
- ret = ldb_search(service->wins_db, NULL, LDB_SCOPE_SUBTREE, filter, NULL, &res);
+ ret = ldb_search(service->wins_db->ldb, NULL, LDB_SCOPE_SUBTREE, filter, NULL, &res);
if (ret != LDB_SUCCESS) return NT_STATUS_INTERNAL_DB_CORRUPTION;
talloc_steal(tmp_mem, res);
"(recordState=%u)(expireTime<=%s)(!(isStatic=1)))",
WINSDB_OWNER_LOCAL, WREPL_STATE_ACTIVE, now_timestr);
NT_STATUS_HAVE_NO_MEMORY(filter);
- ret = ldb_search(service->wins_db, NULL, LDB_SCOPE_SUBTREE, filter, NULL, &res);
+ ret = ldb_search(service->wins_db->ldb, NULL, LDB_SCOPE_SUBTREE, filter, NULL, &res);
if (ret != LDB_SUCCESS) return NT_STATUS_INTERNAL_DB_CORRUPTION;
talloc_steal(tmp_mem, res);
uint64_t wreplsrv_local_max_version(struct wreplsrv_service *service)
{
int ret;
- struct ldb_context *ldb = service->wins_db;
+ struct ldb_context *ldb = service->wins_db->ldb;
struct ldb_dn *dn;
struct ldb_result *res = NULL;
TALLOC_CTX *tmp_ctx = talloc_new(service);
int ret;
NTSTATUS status;
TALLOC_CTX *tmp_ctx = talloc_new(service);
+ struct ldb_context *ldb = service->wins_db->ldb;
int i;
const char *wins_owner;
uint64_t version;
};
/* find the record in the WINS database */
- ret = ldb_search(service->wins_db, NULL, LDB_SCOPE_SUBTREE,
+ ret = ldb_search(ldb, NULL, LDB_SCOPE_SUBTREE,
"(objectClass=winsRecord)", attrs, &res);
status = NT_STATUS_INTERNAL_DB_CORRUPTION;
if (ret != LDB_SUCCESS) goto failed;
struct timeval startup_time;
/* the winsdb handle */
- struct ldb_context *wins_db;
+ struct winsdb_handle *wins_db;
/* some configuration */
struct {