Repository navigation
Conversation
When a command's arguments are a regular expression (^...$), the GOTREGEX "$" rule validated sudoerstext in strict mode, which at that point is only the "$" that was just matched, not the expression collected in sudoerslval.command.args. As a result, visudo -c accepted invalid argument regexes such as "/bin/ls ^[a-z$", while the same mistake in a command path regex was reported. Compile the accumulated arguments instead.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
With an invalid regex in the command arguments,
visudo -csays everything is fine:The same mistake in a command path regex (
^/bin/[a-z$) is caught, so it's only the argument case that slips through.The strict-mode check in the GOTREGEX
$rule compilessudoerstext, which at that point is just the$that was matched, so it always passes. The full expression has already been collected insudoerslval.command.argsbyfill_args(), so this compiles that instead.toke.cgets the same one-line edit rather than a full regeneration.After the fix:
Valid argument regexes (
/bin/ls ^[a-z]+$) still parse OK, andmake -C plugins/sudoers checkpasses.