Author: metze
Date: 2005-10-14 12:47:57 +0000 (Fri, 14 Oct 2005)
New Revision: 11022

WebSVN: 
http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=11022

Log:
 [EMAIL PROTECTED]:  metze | 2005-09-19 11:08:37 +0200
 - add winsdb_connect() function, so that the winsdb can be opened by the 
wrepl_server/ code
 - remove maintaining of a min_version field, as it was implemented incorrect, 
and is maybe not needed at all
 - fix handling of max_version, (we started with 0, on each server start)
 
 metze

Modified:
   branches/SAMBA_4_0/
   branches/SAMBA_4_0/source/nbt_server/wins/winsdb.c
   branches/SAMBA_4_0/source/nbt_server/wins/winsdb.h
   branches/SAMBA_4_0/source/nbt_server/wins/winsserver.c


Changeset:

Property changes on: branches/SAMBA_4_0
___________________________________________________________________
Name: svk:merge
   - 0c0555d6-39d7-0310-84fc-f1cc0bd64818:/branches/tmp/samba4-winsrepl:10308
3a72dc49-98ff-0310-ab52-9b7ed7945d91:/local/samba4:9495
a953eb74-4aff-0310-a63c-855d20285ebb:/local/samba4:11632
d349723c-e9fc-0310-b8a8-fdedf1c27407:/local/SAMBA_4_0:5616
d349723c-e9fc-0310-b8a8-fdedf1c27407:/local/samba-SAMBA_4_0:5609
   + 0c0555d6-39d7-0310-84fc-f1cc0bd64818:/branches/tmp/samba4-winsrepl:10309
3a72dc49-98ff-0310-ab52-9b7ed7945d91:/local/samba4:9495
a953eb74-4aff-0310-a63c-855d20285ebb:/local/samba4:11632
d349723c-e9fc-0310-b8a8-fdedf1c27407:/local/SAMBA_4_0:5616
d349723c-e9fc-0310-b8a8-fdedf1c27407:/local/samba-SAMBA_4_0:5609

Modified: branches/SAMBA_4_0/source/nbt_server/wins/winsdb.c
===================================================================
--- branches/SAMBA_4_0/source/nbt_server/wins/winsdb.c  2005-10-14 12:46:51 UTC 
(rev 11021)
+++ branches/SAMBA_4_0/source/nbt_server/wins/winsdb.c  2005-10-14 12:47:57 UTC 
(rev 11022)
@@ -29,37 +29,51 @@
 #include "system/time.h"
 
 /*
-  save the min/max version IDs for the database
+  return the new maxVersion and save it
 */
-static BOOL winsdb_save_version(struct wins_server *winssrv)
+static uint64_t winsdb_allocate_version(struct wins_server *winssrv)
 {
-       int i, ret = 0;
+       int ret;
        struct ldb_context *ldb = winssrv->wins_db;
-       struct ldb_message *msg = ldb_msg_new(winssrv);
-       if (msg == NULL) goto failed;
+       struct ldb_dn *dn;
+       struct ldb_message **res = NULL;
+       struct ldb_message *msg = NULL;
+       TALLOC_CTX *tmp_ctx = talloc_new(winssrv);
+       uint64_t maxVersion = 0;
 
-       msg->dn = ldb_dn_explode(msg, "CN=VERSION");
-       if (msg->dn == NULL) goto failed;
+       dn = ldb_dn_explode(tmp_ctx, "CN=VERSION");
+       if (!dn) goto failed;
 
        ret |= ldb_msg_add_string(msg, "objectClass", "winsEntry");
        ret |= ldb_msg_add_fmt(msg, "minVersion", "%llu", winssrv->min_version);
        ret |= ldb_msg_add_fmt(msg, "maxVersion", "%llu", winssrv->max_version);
        if (ret != 0) goto failed;
 
-       for (i=0;i<msg->num_elements;i++) {
-               msg->elements[i].flags = LDB_FLAG_MOD_REPLACE;
+       if (ret == 1) {
+               maxVersion = ldb_msg_find_uint64(res[0], "maxVersion", 0);
        }
+       maxVersion++;
 
+       msg = ldb_msg_new(tmp_ctx);
+       if (!msg) goto failed;
+       msg->dn = dn;
+
+
+       ret = ldb_msg_add_empty(ldb, msg, "maxVersion", LDB_FLAG_MOD_REPLACE);
+       if (ret != 0) goto failed;
+       ret = ldb_msg_add_fmt(ldb, msg, "maxVersion", "%llu", maxVersion);
+       if (ret != 0) goto failed;
+
        ret = ldb_modify(ldb, msg);
        if (ret != 0) ret = ldb_add(ldb, msg);
        if (ret != 0) goto failed;
 
-       talloc_free(msg);
-       return True;
+       talloc_free(tmp_ctx);
+       return maxVersion;
 
 failed:
-       talloc_free(msg);
-       return False;
+       talloc_free(tmp_ctx);
+       return 0;
 }
 
 /*
@@ -312,16 +326,7 @@
        return NBT_RCODE_SVR;
 }
 
-
-/*
-  connect to the WINS database
-*/
-NTSTATUS winsdb_init(struct wins_server *winssrv)
+struct ldb_context *winsdb_connect(TALLOC_CTX *mem_ctx)
 {
-       winssrv->wins_db = ldb_wrap_connect(winssrv, lp_wins_url(), 0, NULL);
-       if (winssrv->wins_db == NULL) {
-               return NT_STATUS_INTERNAL_DB_ERROR;
-       }
-
-       return NT_STATUS_OK;
+       return ldb_wrap_connect(mem_ctx, lp_wins_url(), 0, NULL);
 }

Modified: branches/SAMBA_4_0/source/nbt_server/wins/winsdb.h
===================================================================
--- branches/SAMBA_4_0/source/nbt_server/wins/winsdb.h  2005-10-14 12:46:51 UTC 
(rev 11021)
+++ branches/SAMBA_4_0/source/nbt_server/wins/winsdb.h  2005-10-14 12:47:57 UTC 
(rev 11022)
@@ -44,9 +44,4 @@
 
        uint32_t min_ttl;
        uint32_t max_ttl;
-
-       /* these are the minimum and maximum record version IDs in the
-          database. They are needed for replication */
-       uint64_t min_version;
-       uint64_t max_version;
 };

Modified: branches/SAMBA_4_0/source/nbt_server/wins/winsserver.c
===================================================================
--- branches/SAMBA_4_0/source/nbt_server/wins/winsserver.c      2005-10-14 
12:46:51 UTC (rev 11021)
+++ branches/SAMBA_4_0/source/nbt_server/wins/winsserver.c      2005-10-14 
12:47:57 UTC (rev 11022)
@@ -274,15 +274,18 @@
                return NT_STATUS_OK;
        }
 
-       nbtsrv->winssrv = talloc(nbtsrv, struct wins_server);
+       nbtsrv->winssrv = talloc_zero(nbtsrv, struct wins_server);
        NT_STATUS_HAVE_NO_MEMORY(nbtsrv->winssrv);
 
        nbtsrv->winssrv->max_ttl     = lp_max_wins_ttl();
        nbtsrv->winssrv->min_ttl     = lp_min_wins_ttl();
-       nbtsrv->winssrv->min_version = 0;
-       nbtsrv->winssrv->max_version = 0;
 
+       nbtsrv->winssrv->wins_db     = winsdb_connect(nbtsrv->winssrv);
+       if (!nbtsrv->winssrv->wins_db) {
+               return NT_STATUS_INTERNAL_DB_ERROR;
+       }
+
        irpc_add_name(nbtsrv->task->msg_ctx, "wins_server");
 
-       return winsdb_init(nbtsrv->winssrv);
+       return NT_STATUS_OK;
 }

Reply via email to