Pull request up on GitHub; comment copied here. https://github.com/freebsd/freebsd-src/pull/456 This change makes the state consistent between user and system crontabs before processing options: blanks have been consumed and the next get_char() returns '-' or the start of the command. Details: On system crontabs, multiple blanks are not being consumed after reading the username. This change adds blank consumption before parsing any -[qn] options. Without this change, an entry like: * * * * * username -n true # Two spaces between username and option. will fail, as the shell will try to execute (' -n true'), while an entry like: * * * * * username -n true # One space between username and option. works as expected (executes 'true'). For entries without options, this is not an issue, as the leading blanks are ignored by the shell when executing the command. For entries with only one blank character between the username and options, this is also not an issue, as the next get_char() returns '-' and option processing occurs. For user crontabs, this is not an issue as the preceding (day of week or @shortcut) processing consumes any leading whitespace.
A commit in branch main references this bug: URL: https://cgit.FreeBSD.org/src/commit/?id=37cd6c20dbcf251e38d6dfb9d3e02022941f6fc7 commit 37cd6c20dbcf251e38d6dfb9d3e02022941f6fc7 Author: Oleksandr Tymoshenko <gonzo@FreeBSD.org> AuthorDate: 2021-03-04 07:23:31 +0000 Commit: Oleksandr Tymoshenko <gonzo@FreeBSD.org> CommitDate: 2021-03-04 07:23:31 +0000 cron: consume blanks in system crontabs before options On system crontabs, multiple blanks are not being consumed after reading the username. This change adds blank consumption before parsing any -[qn] options. Without this change, an entry like: * * * * * username -n true # Two spaces between username and option. will fail, as the shell will try to execute (' -n true'), while an entry like: * * * * * username -n true # One space between username and option. works as expected (executes 'true'). For user crontabs, this is not an issue as the preceding (day of week or @shortcut) processing consumes any leading whitespace. PR: 253699 Submitted by: Eric A. Borisch <eborisch@gmail.com> MFC after: 1 week usr.sbin/cron/lib/entry.c | 3 +++ 1 file changed, 3 insertions(+)
Thanks for the patch. I committed the change and will close the PR once it's MFCed.
With 13 out the door, can we get this MFC'ed? Thanks!
A commit in branch stable/13 references this bug: URL: https://cgit.FreeBSD.org/src/commit/?id=c69de0206511636ebe28ac226dce74f7b204735b commit c69de0206511636ebe28ac226dce74f7b204735b Author: Oleksandr Tymoshenko <gonzo@FreeBSD.org> AuthorDate: 2021-03-04 07:23:31 +0000 Commit: Oleksandr Tymoshenko <gonzo@FreeBSD.org> CommitDate: 2021-06-05 22:49:45 +0000 cron: consume blanks in system crontabs before options On system crontabs, multiple blanks are not being consumed after reading the username. This change adds blank consumption before parsing any -[qn] options. Without this change, an entry like: * * * * * username -n true # Two spaces between username and option. will fail, as the shell will try to execute (' -n true'), while an entry like: * * * * * username -n true # One space between username and option. works as expected (executes 'true'). For user crontabs, this is not an issue as the preceding (day of week or @shortcut) processing consumes any leading whitespace. PR: 253699 Submitted by: Eric A. Borisch <eborisch@gmail.com> MFC after: 1 week (cherry picked from commit 37cd6c20dbcf251e38d6dfb9d3e02022941f6fc7) usr.sbin/cron/lib/entry.c | 3 +++ 1 file changed, 3 insertions(+)
Merged. Sorry for the delay.