Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 5 Jun 2021 23:52:01 GMT
From:      Oleksandr Tymoshenko <gonzo@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: c69de0206511 - stable/13 - cron: consume blanks in system crontabs before options
Message-ID:  <202106052352.155Nq1AH091281@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by gonzo:

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(+)

diff --git a/usr.sbin/cron/lib/entry.c b/usr.sbin/cron/lib/entry.c
index 66ead885bea8..2693c9c8d07a 100644
--- a/usr.sbin/cron/lib/entry.c
+++ b/usr.sbin/cron/lib/entry.c
@@ -315,6 +315,9 @@ load_entry(file, error_func, pw, envp)
 			goto eof;
 		}
 
+		/* need to have consumed blanks when checking options below */
+		Skip_Blanks(ch, file)
+		unget_char(ch, file);
 #ifdef LOGIN_CAP
 		if ((s = strrchr(username, '/')) != NULL) {
 			*s = '\0';



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202106052352.155Nq1AH091281>