svn commit: samba r9358 - in branches/SAMBA_4_0/source/rpc_server/winreg: .

tridge at samba.org tridge at samba.org
Wed Aug 17 13:06:05 GMT 2005


Author: tridge
Date: 2005-08-17 13:06:05 +0000 (Wed, 17 Aug 2005)
New Revision: 9358

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

Log:

- opening a winreg key of "" is the same as re-opening the hive. The
  w2k3 regedit does this.

- w2k3 expects null termination is string lengths


Modified:
   branches/SAMBA_4_0/source/rpc_server/winreg/rpc_winreg.c


Changeset:
Modified: branches/SAMBA_4_0/source/rpc_server/winreg/rpc_winreg.c
===================================================================
--- branches/SAMBA_4_0/source/rpc_server/winreg/rpc_winreg.c	2005-08-17 12:51:07 UTC (rev 9357)
+++ branches/SAMBA_4_0/source/rpc_server/winreg/rpc_winreg.c	2005-08-17 13:06:05 UTC (rev 9358)
@@ -166,13 +166,15 @@
 	r->out.result = reg_key_get_subkey_by_index(mem_ctx, (struct registry_key *)h->data, r->in.enum_index, &key);
 
 	if (W_ERROR_IS_OK(r->out.result)) {
-		if (2*strlen_m(key->name) > r->in.name->size) {
+		if (2*strlen_m_term(key->name) > r->in.name->size) {
 			return WERR_MORE_DATA;
 		}
-		r->out.name->length = 2*strlen_m(key->name);
+		r->out.name->length = 2*strlen_m_term(key->name);
 		r->out.name->name = key->name;
 		r->out.class = talloc_zero(mem_ctx, struct winreg_StringBuf);
-		r->out.last_changed_time = &key->last_mod;
+		if (r->in.last_changed_time) {
+			r->out.last_changed_time = &key->last_mod;
+		}
 	}
 	
 	return r->out.result;
@@ -213,13 +215,13 @@
 	}
 	
 	/* and enough room for the name */
-	if (r->in.name->size < 2*strlen_m(value->name)) {
+	if (r->in.name->size < 2*strlen_m_term(value->name)) {
 		return WERR_MORE_DATA;		
 	}
 
 	r->out.name->name = value->name;
-	r->out.name->length = 2*strlen_m(value->name);
-	r->out.name->size = 2*strlen_m(value->name);
+	r->out.name->length = 2*strlen_m_term(value->name);
+	r->out.name->size = 2*strlen_m_term(value->name);
 
 	if (r->in.value) {
 		r->out.value = value->data_blk;
@@ -294,11 +296,15 @@
 
 	DCESRV_PULL_HANDLE_FAULT(h, r->in.handle, HTYPE_REGKEY);
 
-	newh = dcesrv_handle_new(dce_call->context, HTYPE_REGKEY);
-
-	result = reg_open_key(newh, (struct registry_key *)h->data, 
-			      r->in.keyname.name, (struct registry_key **)&newh->data);
-
+	if (r->in.keyname.name && strcmp(r->in.keyname.name, "") == 0) {
+		newh = talloc_reference(dce_call->context, h);
+		result = WERR_OK;
+	} else {
+		newh = dcesrv_handle_new(dce_call->context, HTYPE_REGKEY);
+		result = reg_open_key(newh, (struct registry_key *)h->data, 
+				      r->in.keyname.name, (struct registry_key **)&newh->data);
+	}
+	
 	if (W_ERROR_IS_OK(result)) {
 		r->out.handle = &newh->wire_handle; 
 	} else {



More information about the samba-cvs mailing list