Hi Daniil,
I realize now that the test for -f rather than -x was likely because in
the source bundle the exe file couldn't actually have the execute
permission. So -f was correct then while -x should I hope be correct
now. In which case you should be able to get rid of:
chmod ug+x $REVOKEALL
as well. But we'd need to be sure the execute bit is kept on the binary
after its built and shipped around to other test machines.
If in doubt restore the -f.
Otherwise the updates look good.
Thanks,
David
On 21/05/2019 11:02 am, Daniil Titov wrote:
Please review a new version of the fix that includes the changes David
suggested.
> The count-- is obvious as it is the loop counter, but it is far from
> clear to me that i++ is correct. I don't fully understand the logic
We need to increment i on line 354:
353 if (((ACCESS_ALLOWED_ACE *)ace)->Header.AceType !=
ACCESS_ALLOWED_ACE_TYPE) {
354 i++;
355 count--;
356 continue;
357 }
since the code iterates over all ACE entries for a given file and deletes ones
that grant non-owner access to the file. i is the index of the current ACE
entry
in the ACL structure. The current ACE entry is retrieved at the beginning of
the loop:
349 if (!GetAce(acl, i, &ace)) {
and the index is always incremented at the end of the loop unless the current
entry is deleted.
382 if (!deleted) {
383 str = getSIDString(sid);
384 if (str != NULL) {
385 printf("ALLOW %s (access mask=%x)\n", str, access->Mask);
386 free(str);
387 }
388
389 /* onto the next ACE */
390 i++;
391 }
392 count--;
I also created a new issue to replace revokeall.exe with Java code as Alan
suggested : https://bugs.openjdk.java.net/browse/JDK-8224255
Webrev: http://cr.openjdk.java.net/~dtitov/8214545/webrev.02
Bug: https://bugs.openjdk.java.net/browse/JDK-8214545
Thanks!
--Daniil
On 5/19/19, 5:43 PM, "David Holmes" <david.hol...@oracle.com> wrote:
Hi Daniil,
cc: Boris and Erik J.
On 20/05/2019 7:12 am, Daniil Titov wrote:
> Please review the change that fixes the failure of
sun/management/jmxremote/bootstrap JMX tests on Windows platform. While running,
these tests invoke revokeall.exe utility and this utility hangs.
>
> The problem here is that invokeall.exe goes into an endless loop while
iterating over Access Control Entries (ACE) for a given file if it encounters at
least one ACE with the type different from ACCESS_ALLOWED_ACE_TYPE.
>
> The change fixes this problem. It also removes revokeall.exe binary
from the repository and changes the makefile to get it built instead.
>
> Tier1, tier2, tier3, jdk_svc, and sun/management/jmxremote/bootstrap
tests succeeded in Mach5.
>
> Webrev: http://cr.openjdk.java.net/~dtitov/8214545
> Bug: https://bugs.openjdk.java.net/browse/JDK-8214545
I knew this seemed very familiar ... Boris had a fix for this a few
weeks ago under JDK-8220581. Similar but not identical to yours - see
below. Though getting rid of the exe from the repo is a good idea
(thanks Erik!).
A few comments
test/jdk/sun/management/jmxremote/bootstrap/GeneratePropertyPassword.sh
Pre-existing:
! REVOKEALL="$TESTNATIVEPATH/revokeall.exe"
if [ ! -f "$REVOKEALL" ] ; then
I would expect a -x test not -f.
---
test/jdk/sun/management/windows/README
The first copyright year should be 2004.
25 This directory contains the source and the binary version
Delete "and the binary version".
---
test/jdk/sun/management/windows/exerevokeall.c
Pre-existing:
31 * file - suitable for NT/2000/XP only.
Please delete everything after "file".
355 i++;
356 count--;
The count-- is obvious as it is the loop counter, but it is far from
clear to me that i++ is correct. I don't fully understand the logic but
i is only incremented under very specific conditions. If you rewrote the
code to avoid the use of the continue then i would not be modified
except where it currently is.
Thanks,
David
-----
> Thanks!
> --Daniil
>
>