On Wed, Feb 17, 2016 at 8:42 AM, Andrei Borzenkov <arvidj...@gmail.com> wrote:
> 17.02.2016 03:34, Alan Dunn пишет: > > Hi folks, > > > > Apologies if the following has already come up on this list; I looked for > > it and could not find any mention of it. > > > > I noticed that in a GRUB script "[ -f <dangling symlink path> ]" > evaluates > > to true. This is unlike the behavior of the "test" binary, in which it > > returns false: most file test operations dereference their symlinks > > recursively (i.e., strace on Linux reveals they use stat, which does > > this). By contrast, "[ -s <dangling symlink path> ]" evaluates to false, > > which seems inconsistent since if the file exists by -f, then it seems > like > > -f is referring to the symlink itself, which has non-zero file size. > > > > It looks rather side effect of implementation which looks for directory > entry. > > It is straightforward to fix it by just trying to grub_file_open() which > fails in this case. But the interesting question is semantic of both > tests with mandatory signature checking in place. I.e. if signature for > a file is invalid, should "test -s" and "test -f" still report true? I > suppose yes, because file still exists. > > > I was curious whether there is some motivation with respect to any > > deviations that GRUB has in interpreting file test operations in > comparison > > to the "test" binary, or whether this is considered a bug/thing that > should > > be improved in the documentation. The GRUB manual ( > > http://git.savannah.gnu.org/cgit/grub.git/tree/docs/grub.texi) only > > indicates that -f tests whether the "file exists and is not a directory" > > Well, current behavior is compliant with this description (symlink does > exist and it is not directory), it is just not very useful in practice. > Actually implementing "test -h" is pretty trivial. > > > without specifying the symlink behavior (unlike "man test"). > > > > I vote for changing it to follow symlink. Anyone has argument to keep > current behavior? > If I were going to design GRUB's behavior, I would make all file-related tests that GRUB implements (-d, -e, -f, -s, -nt, -ot) follow symlinks, like test in coreutils does, for consistency. If that sounds reasonable to the list, I'm happy to try to produce such a patch. Offhand, it seems like the basic strategy would be to modify get_fileinfo (in grub-core/commands/test.c) to follow symlinks. > _______________________________________________ > Grub-devel mailing list > Grub-devel@gnu.org > https://lists.gnu.org/mailman/listinfo/grub-devel >
_______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel