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