IF YOU WOULD LIKE TO GET AN ACCOUNT, please write an
email to Administrator. User accounts are meant only to access repo
and report issues and/or generate pull requests.
This is a purpose-specific Git hosting for
BaseALT
projects. Thank you for your understanding!
Только зарегистрированные пользователи имеют доступ к сервису!
Для получения аккаунта, обратитесь к администратору.
The main change here is to work with the current module stack,
replacing only the objectGUID module, rather than a number of modules.
However, two changes were key:
- Fixing a typo search_req->handle -> change_req->handle
- Allowing an error of NO_SUCH_OBJECT - it is quite valid
for the object not to exist when being replicated in.
Other small changes were required to the ejs provision to match
changes in that code.
Andrew Bartlett
(I presume this has resulted from the global variable elimination)
Perhaps the iconv handle argument to ndr_push_struct needs to be
marked as 'not NULL' or similar?
Andrew Bartlett
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.
Rather than map the error returned by the registry to the correct error,
return the correct error in the first place.
Also deal with the fact that the right error code is now returned in a
couple of places.
The '#' character was causing problems, as it was not being escaped for the dn,
but the failure returned by ldb_dn_add_child_fmt() was not being caught. This
was causing the new value to be added on the parent key, not the current key.
When attempting to delete the new value (now on the parent key) the same
escaping error was returned by ldb_dn_add_child_fmt(), causing the delete to
delete the key and not the value.
When attempting to rename a value, Windows first tries to ensure the new name
does not already exist. When a value does not exist, Windows expects a return
value of WERR_BADFILE, but WERR_NOT_FOUND was being returned instead.
Providing the WERR_BADFILE that Windows expects allows values to be renamed.
There were a few cases left that attempted to detect errors from ldb_*()
function calls using "(ret < 0)". As all LDB_* error codes are greater than
zero, there was no chance any errors would be detected. Changed all such tests
to use "(ret != LDB_SUCCESS)".