svn commit: samba r8734 - in branches/SAMBA_4_0/source/nbt_server/wins: .

tridge at samba.org tridge at samba.org
Sun Jul 24 12:18:12 GMT 2005


Author: tridge
Date: 2005-07-24 12:18:11 +0000 (Sun, 24 Jul 2005)
New Revision: 8734

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

Log:
fixed the wins server for the new ldb DN restrictions.

This gets it working, but I'm rather worried about the speed. We used
to get more than 5000 ops/sec, but now we are down to around 15
ops/sec. I suspect a bug in ldb.

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


Changeset:
Modified: branches/SAMBA_4_0/source/nbt_server/wins/winsdb.c
===================================================================
--- branches/SAMBA_4_0/source/nbt_server/wins/winsdb.c	2005-07-24 08:35:31 UTC (rev 8733)
+++ branches/SAMBA_4_0/source/nbt_server/wins/winsdb.c	2005-07-24 12:18:11 UTC (rev 8734)
@@ -83,7 +83,32 @@
 	}
 }
 
+
 /*
+  return a DN for a nbt_name
+*/
+static char *winsdb_dn(TALLOC_CTX *mem_ctx, struct nbt_name *name)
+{
+	char *ret = talloc_asprintf(mem_ctx, "type=%02x", name->type);
+	if (ret == NULL) {
+		return ret;
+	}
+	if (name->name && *name->name) {
+		ret = talloc_asprintf_append(ret, ",name=%s", name->name);
+	}
+	if (ret == NULL) {
+		return ret;
+	}
+	if (name->scope && *name->scope) {
+		ret = talloc_asprintf_append(ret, ",scope=%s", name->scope);
+	}
+	if (ret == NULL) {
+		return ret;
+	}
+	return ret;
+}
+
+/*
   load a WINS entry from the database
 */
 struct winsdb_record *winsdb_load(struct wins_server *winssrv, 
@@ -97,7 +122,7 @@
 	const char *expr;
 	int i;
 
-	expr = talloc_asprintf(tmp_ctx, "dn=NAME=%s", nbt_name_string(tmp_ctx, name));
+	expr = talloc_asprintf(tmp_ctx, "dn=%s", winsdb_dn(tmp_ctx, name));
 	if (expr == NULL) goto failed;
 
 	/* find the record in the WINS database */
@@ -159,8 +184,9 @@
 	struct ldb_message *msg = ldb_msg_new(mem_ctx);
 	if (msg == NULL) goto failed;
 
-	msg->dn = talloc_asprintf(msg, "NAME=%s", nbt_name_string(msg, rec->name));
+	msg->dn = winsdb_dn(msg, rec->name);
 	if (msg->dn == NULL) goto failed;
+	ret |= ldb_msg_add_fmt(ldb, msg, "objectClass", "wins");
 	ret |= ldb_msg_add_fmt(ldb, msg, "active", "%u", rec->state);
 	ret |= ldb_msg_add_fmt(ldb, msg, "nbFlags", "0x%04x", rec->nb_flags);
 	ret |= ldb_msg_add_string(ldb, msg, "registeredBy", rec->registered_by);
@@ -250,7 +276,7 @@
 
 	winsdb_remove_version(winssrv, rec->version);
 
-	dn = talloc_asprintf(tmp_ctx, "NAME=%s", nbt_name_string(tmp_ctx, rec->name));
+	dn = winsdb_dn(tmp_ctx, rec->name);
 	if (dn == NULL) goto failed;
 
 	ret = ldb_delete(ldb, dn);



More information about the samba-cvs mailing list