diff options
author | Jerry Jelinek <jerry.jelinek@joyent.com> | 2020-08-26 13:42:44 +0000 |
---|---|---|
committer | Jerry Jelinek <jerry.jelinek@joyent.com> | 2020-08-26 13:42:44 +0000 |
commit | 82a64156a05f057b7e7c3cd9bbad35c59730dc69 (patch) | |
tree | c0c7df376804aecaa5635d77c75c15c2a648c00c /usr/src/cmd/cron/crontab.c | |
parent | c37fdb60f2ec20204a6b8fdbb774fddb0da87d41 (diff) | |
parent | dbe930bf51e0d7458b24d30e9f25756c5da54ddf (diff) | |
download | illumos-joyent-release-20200827.tar.gz |
[illumos-gate merge]release-20200827
commit dbe930bf51e0d7458b24d30e9f25756c5da54ddf
13040 grep can leverage bmg in more cases
commit 81dd18d87c3c2e198d2178dfd1f30d62a81b69ea
3546 add support for grep -o option
commit 8ccd021704a4fe1b4022c110d3dd497f8cd907d5
13038 grep could support --label
commit 2e5ac464a5683c5bf11439ccad74c9f279051820
13037 grep could support -L
commit f415aa8f1340638644c6cf63e9d11d3767f4cbba
13036 grep tests could be easier to extend
commit cd94aa947d1e02a1c25259f2cf06c165d75aa4fa
13061 Import sed tests from freebsd
commit c6fc7f7b786ce47c35645054cdce73e83f39e7f3
13051 sed: lastline check does not work properly with empty files
commit e0721d5ae1542c80097f6fcd487736fdfe601233
13003 console: multiple issues related to colors and font loading and switching
commit 6863ede29751efd2be66ec1b48c3c0ee705d7d61
13066 Want crontab -u
commit 31c9b836861e74f837a36ca29220b58f3657585a
13044 Clarify parts of getopt_long(3C)
commit 9fff840dca14d75459a8240b19c931e2fec186c5
13032 printf(3C) should talk about NULL string pointers
Conflicts:
usr/src/test/util-tests/tests/grep_xpg4/grep_test.ksh
usr/src/man/man1/crontab.1
usr/src/cmd/cron/crontab.c
Diffstat (limited to 'usr/src/cmd/cron/crontab.c')
-rw-r--r-- | usr/src/cmd/cron/crontab.c | 42 |
1 files changed, 28 insertions, 14 deletions
diff --git a/usr/src/cmd/cron/crontab.c b/usr/src/cmd/cron/crontab.c index 2d9eea8755..18716bc8c2 100644 --- a/usr/src/cmd/cron/crontab.c +++ b/usr/src/cmd/cron/crontab.c @@ -26,7 +26,7 @@ /* All Rights Reserved */ /* - * Copyright 2019 OmniOS Community Edition (OmniOSce) Association. + * Copyright 2020 OmniOS Community Edition (OmniOSce) Association. */ #include <sys/types.h> @@ -72,10 +72,9 @@ #define WARNSHELL "warning: commands will be executed using /usr/bin/sh\n" #define BADUSAGE \ "usage:\n" \ - "\tcrontab [file]\n" \ - "\tcrontab -e [username]\n" \ - "\tcrontab -l [-g] [username]\n" \ - "\tcrontab -r [username]" + "\tcrontab [-u username] [file]\n" \ + "\tcrontab [-u username] { -e | -g | -l | -r }\n" \ + "\tcrontab { -e | -g | -l | -r } [username]" #define INVALIDUSER "you are not a valid user (no entry in /etc/passwd)." #define NOTALLOWED "you are not authorized to use cron. Sorry." #define NOTROOT \ @@ -137,6 +136,7 @@ main(int argc, char **argv) int stat_loc; int ret; char real_login[UNAMESIZE]; + char *user = NULL; int tmpfd = -1; pam_handle_t *pamh; int pam_error; @@ -145,7 +145,7 @@ main(int argc, char **argv) (void) setlocale(LC_ALL, ""); #if !defined(TEXT_DOMAIN) /* Should be defined by cc -D */ -#define TEXT_DOMAIN "SYS_TEST" /* Use this only if it weren't */ +#define TEXT_DOMAIN "SYS_TEST" /* Use this only if it wasn't */ #endif (void) textdomain(TEXT_DOMAIN); @@ -155,7 +155,7 @@ main(int argc, char **argv) exit(1); } - while ((c = getopt(argc, argv, "eglr")) != EOF) + while ((c = getopt(argc, argv, "eglru:")) != EOF) { switch (c) { case 'e': eflag++; @@ -169,10 +169,17 @@ main(int argc, char **argv) case 'r': rflag++; break; + case 'u': + user = optarg; + break; case '?': errflg++; break; } + } + + argc -= optind; + argv += optind; if (eflag + lflag + rflag > 1) errflg++; @@ -180,8 +187,13 @@ main(int argc, char **argv) if (gflag && !lflag) errflg++; - argc -= optind; - argv += optind; + if ((eflag || lflag || rflag) && argc > 0) { + if (user != NULL) + errflg++; + else + user = *argv; + } + if (errflg || argc > 1) crabort(BADUSAGE); @@ -190,11 +202,12 @@ main(int argc, char **argv) crabort(INVALIDUSER); if (strlcpy(real_login, pwp->pw_name, sizeof (real_login)) - >= sizeof (real_login)) + >= sizeof (real_login)) { crabort(NAMETOOLONG); + } - if ((eflag || lflag || rflag) && argc == 1) { - if ((pwp = getpwnam(*argv)) == NULL) + if (user != NULL) { + if ((pwp = getpwnam(user)) == NULL) crabort(INVALIDUSER); if (!cron_admin(real_login)) { @@ -202,8 +215,9 @@ main(int argc, char **argv) crabort(NOTROOT); else pp = getuser(ruid); - } else - pp = *argv++; + } else { + pp = user; + } } else { pp = getuser(ruid); } |