When Windows attempts to create a new key, it looks for an available key name
authorAndrew Kroeger <andrew@sprocks.gotdns.com>
Fri, 18 Jan 2008 01:51:51 +0000 (02:51 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Fri, 18 Jan 2008 02:41:59 +0000 (03:41 +0100)
commitd57792d67b865ef43e7f21640b158862627f4b45
tree0cf4d4c634d7b47ef60724510971c200935e74d7
parent1e31fcb8a097810a97e2d4bb1f243f1b34cc2415
When Windows attempts to create a new key, it looks for an available key name
starting with "New Key #1" and iterating up to "New Key #99" before giving up.
ldb_open_key() calls reg_path_to_ldb() to build the appropriate dn from the key
name.  reg_path_to_ldb() was not catching the error returned by
ldb_dn_add_base_fmt() due to the unescaped '#' character, causing the returned
dn to be that of the parent key, not the potential new key.  Additionally,
Windows expects a return value of WERR_BADFILE when a key does not exist, but
WERR_NOT_FOUND was being returned instead.  Correcting the building of the dn
and the providing the expected return value allows new key creation to succeed.

When attempting to delete a key, Windows passes the complete path to the key,
not just the name of the child key to be deleted.  Using reg_path_to_ldb() to
build the correct dn allows key deletion to succeed.
source/lib/registry/ldb.c
source/rpc_server/winreg/rpc_winreg.c