Hi Volker,
11/17/06, Volker Lendecke <Volker.Lendecke (AT) sernet (DOT) dewrote:
Hi, Chetan!
Fri, 13, 2006 at 06:50:30PM +0530, Chetan S wrote:
The winreg_enumvalue digs out values perfectly fine from the tdb and
this is observed in the server side log.smbd. However on the rpc
client side no value is listed. More importantly it receives junk.
Did you find out more about this? If not, then this bug
report is not really sufficient. We'd need more detailed
steps to reproduce and log files.
I did find more about it. The problem is with the UTF-8 / UTF-16
strings that get passed around. Here's the error reported by ndr_pull
:
[2006/11/20 14:23:17, 10] (894)
rpc_api_pipe: Remote machine 127.0.0.1 pipe \winreg fnum 0x75ab
returned 216 bytes.
[2006/11/20 14:23:17, 3] (343)
ndr_pull_error(0): Bad array size 7 should exceed array length 12
The client code trips on the fact that the array size is less that the
actual length of the string. The tcp dump+smbd log shows that the
values data is passed from the server side.
Steps to reproduce :
1. There are default values that smbd loads into the registry tdb in
registry/reg_db.c. one of them is "DisplayName" which should have the
value "Event Log". Enumerating the Event log key should result in
displaying the values within the subkey
/net rpc registry enumerate
"HKLM\\SYSTEM\\CurrentControlSet\\Services\\Eventlo g"
-Uusername%password -d 10 2>smbclient_err.log
Expected output :
List of subkeys and values for the Eventlog key.
Actual output :
Nothing.
Client Error log (at -d 10) : smbclient_err.log line 3014 states the
ndr_pull check error.
Samba Server log ( at -d 10 ) : log.smbd line 4357 states that the
value was retrieved.
Another thing: Did you already succeed in getting
registry-defined shares in smbd running? I'm asking because
I really want that feature, I'm close to doing it very soon
:-)
Not really. Am entagled in trying to understand the problem. My
immediate fear was whether the data I write goes in right or not. Its
really tricky to understand if a write to the registry has worked if
you cannot enumerate the values. Although the crude way I employed
was to tdbdump and grep :)
The UTF-16 requirements of windows clients creeps into the code. And
interchangeably dealing with UTF-8/16 is a problem.
Another problem with the UTF-16 code is the conversion routine
convert_string_allocate I haven't had much success converting a
CH_UNIX / CH_UTF8 string to UTF-16. The function returns a truncated
value.
Volker
Please let me know if you need any more information.
regards,
Chetan Shringarpure