* fhandler_registry.cc (fhandler_registry::fstat): Set restrictive

permission and ownership if key can't be opened for reading security.
	(open_key): If opening key fails, retry opening with backup intent.
This commit is contained in:
Corinna Vinschen 2006-10-21 10:58:35 +00:00
parent d698e833cd
commit 9367c0dcff
2 changed files with 26 additions and 4 deletions

View file

@ -1,3 +1,9 @@
2006-10-21 Corinna Vinschen <corinna@vinschen.de>
* fhandler_registry.cc (fhandler_registry::fstat): Set restrictive
permission and ownership if key can't be opened for reading security.
(open_key): If opening key fails, retry opening with backup intent.
2006-10-20 Corinna Vinschen <corinna@vinschen.de>
* net.cc (cygwin_getnameinfo): Fix typo in comment.

View file

@ -286,6 +286,19 @@ fhandler_registry::fstat (struct __stat64 *buf)
}
RegCloseKey (hKey);
}
else
{
/* Here's the problem: If we can't open the key, we don't know
nothing at all about the key/value. It's only clear that
the current user has no read access. At this point it's
rather unlikely that the user has write or execute access
and it's also rather unlikely that the user is the owner.
Therefore it's probably most safe to assume unknown ownership
and no permissions for nobody. */
buf->st_uid = UNKNOWN_UID;
buf->st_gid = UNKNOWN_GID;
buf->st_mode &= ~0777;
}
}
return 0;
}
@ -667,10 +680,13 @@ open_key (const char *name, REGSAM access, DWORD wow64, bool isValue)
REGSAM effective_access = KEY_READ;
if ((strchr (name, '/') == NULL && isValue == true) || *name == 0)
effective_access = access;
LONG
error =
RegOpenKeyEx (hParentKey, component, 0, effective_access | wow64,
&hKey);
LONG error = RegOpenKeyEx (hParentKey, component, 0,
effective_access | wow64, &hKey);
if (error == ERROR_ACCESS_DENIED) /* Try opening with backup intent */
error = RegCreateKeyEx (hParentKey, component, 0, NULL,
REG_OPTION_BACKUP_RESTORE,
effective_access | wow64, NULL,
&hKey, NULL);
if (error != ERROR_SUCCESS)
{
hKey = (HKEY) INVALID_HANDLE_VALUE;