svn commit: samba r2817 - in branches/SAMBA_4_0/source: librpc/idl scripting/swig/torture

tpot at samba.org tpot at samba.org
Mon Oct 4 06:29:06 GMT 2004


Author: tpot
Date: 2004-10-04 06:29:06 +0000 (Mon, 04 Oct 2004)
New Revision: 2817

WebSVN: http://websvn.samba.org/websvn/changeset.php?rep=samba&path=/branches/SAMBA_4_0/source&rev=2817&nolog=1

Log:
Get winreg_GetKeySecurity() working but use data blob instead of 
security descriptor.

Modified:
   branches/SAMBA_4_0/source/librpc/idl/winreg.idl
   branches/SAMBA_4_0/source/scripting/swig/torture/winreg.py


Changeset:
Modified: branches/SAMBA_4_0/source/librpc/idl/winreg.idl
===================================================================
--- branches/SAMBA_4_0/source/librpc/idl/winreg.idl	2004-10-04 05:40:59 UTC (rev 2816)
+++ branches/SAMBA_4_0/source/librpc/idl/winreg.idl	2004-10-04 06:29:06 UTC (rev 2817)
@@ -168,17 +168,24 @@
 		[in,ref] policy_handle *handle
 	);
 
+	typedef struct {
+		uint32 max_len;
+		uint32 offset;
+		uint32 len;
+	} KeySecuritySize;
+
+	typedef struct {
+		uint32 max_len;
+		DATA_BLOB data;
+	} KeySecurityData;
+
 	/******************/
 	/* Function: 0x0c */
 	WERROR winreg_GetKeySecurity(
 		[in,ref] policy_handle *handle,
-		[in] uint32 sec_info,
-		[in] uint32 *len1,
-		[in] uint32 empty,
-		[in] uint32 len2,
-		[in] uint32 unknown1,
-		[in] uint32 unknown2,
-		[out] sec_desc_buf *data
+		[in] uint32 unknown,
+		[in,out] KeySecuritySize *size,
+		[in,out] KeySecurityData data
 	);
 
 	/******************/

Modified: branches/SAMBA_4_0/source/scripting/swig/torture/winreg.py
===================================================================
--- branches/SAMBA_4_0/source/scripting/swig/torture/winreg.py	2004-10-04 05:40:59 UTC (rev 2816)
+++ branches/SAMBA_4_0/source/scripting/swig/torture/winreg.py	2004-10-04 06:29:06 UTC (rev 2817)
@@ -30,8 +30,50 @@
 
     dcerpc.winreg_CloseKey(pipe, r)
 
-def test_Enum(pipe, handle, name, depth = 0):
+def test_FlushKey(pipe, handle):
 
+    r = {}
+    r['handle'] = handle
+    
+    dcerpc.winreg_FlushKey(pipe, r)
+
+def test_GetVersion(pipe, handle):
+
+    r = {}
+    r['handle'] = handle
+    
+    dcerpc.winreg_GetVersion(pipe, r)
+
+def test_GetKeySecurity(pipe, handle):
+
+    r = {}
+    r['handle'] = handle
+    r['unknown'] = 4
+    r['size'] = None
+    r['data'] = {}
+    r['data']['max_len'] = 0
+    r['data']['data'] = ''
+
+    result = dcerpc.winreg_GetKeySecurity(pipe, r)
+
+    print result
+
+    if result['result'] == dcerpc.WERR_INSUFFICIENT_BUFFER:
+        r['size'] = {}
+        r['size']['max_len'] = result['data']['max_len']
+        r['size']['offset'] = 0
+        r['size']['len'] = result['data']['max_len']
+
+        result = dcerpc.winreg_GetKeySecurity(pipe, r)
+
+    print result
+
+    sys.exit(1)
+    
+def test_Key(pipe, handle, name, depth = 0):
+
+    # Don't descend too far.  Registries can be very deep.
+
     if depth > 2:
         return
 
@@ -41,10 +83,41 @@
         if arg[0] == dcerpc.WERR_ACCESS_DENIED:
             return
 
-    # Enumerate keys
+    test_GetVersion(pipe, handle)
 
+    test_FlushKey(pipe, handle)
+
+    test_GetKeySecurity(pipe, handle)
+
+    # Enumerate values in this key
+
     r = {}
     r['handle'] = handle
+    r['name_in'] = {}
+    r['name_in']['len'] = 0
+    r['name_in']['max_len'] = (keyinfo['max_valnamelen'] + 1) * 2
+    r['name_in']['buffer'] = {}
+    r['name_in']['buffer']['max_len'] = keyinfo['max_valnamelen']  + 1
+    r['name_in']['buffer']['offset'] = 0
+    r['name_in']['buffer']['len'] = 0
+    r['type'] = 0
+    r['value_in'] = {}
+    r['value_in']['max_len'] = keyinfo['max_valbufsize']
+    r['value_in']['offset'] = 0
+    r['value_in']['len'] = 0
+    r['value_len1'] = keyinfo['max_valbufsize']
+    r['value_len2'] = 0
+    
+    for i in range(0, keyinfo['num_values']):
+
+        r['enum_index'] = i
+
+        dcerpc.winreg_EnumValue(pipe, r)
+
+    # Recursively test subkeys of this key
+
+    r = {}
+    r['handle'] = handle
     r['key_name_len'] = 0
     r['unknown'] = 0x0414
     r['in_name'] = {}
@@ -72,41 +145,13 @@
 
         result = dcerpc.winreg_OpenKey(pipe, s)
 
-        test_Enum(pipe, result['handle'], name + '/' + s['keyname']['name'],
-                  depth + 1)
+        test_Key(pipe, result['handle'], name + '/' + s['keyname']['name'],
+                 depth + 1)
 
         test_CloseKey(pipe, result['handle'])
 
     # Enumerate values
 
-    r = {}
-    r['handle'] = handle
-
-    r['name_in'] = {}
-    r['name_in']['len'] = 0
-    r['name_in']['max_len'] = (keyinfo['max_valnamelen'] + 1) * 2
-    r['name_in']['buffer'] = {}
-    r['name_in']['buffer']['max_len'] = keyinfo['max_valnamelen']  + 1
-    r['name_in']['buffer']['offset'] = 0
-    r['name_in']['buffer']['len'] = 0
-    r['type'] = 0
-    r['value_in'] = {}
-    r['value_in']['max_len'] = keyinfo['max_valbufsize']
-    r['value_in']['offset'] = 0
-    r['value_in']['len'] = 0
-    r['value_len1'] = keyinfo['max_valbufsize']
-    r['value_len2'] = 0
-    
-    for i in range(0, keyinfo['num_values']):
-
-        r['enum_index'] = i
-
-        dcerpc.winreg_EnumValue(pipe, r)
-
-def test_Key(pipe, handle, name):
-
-    test_Enum(pipe, handle, name)
-
 def runtests(binding, domain, username, password):
     
     print 'Testing WINREG pipe'



More information about the samba-cvs mailing list