Print this page
13066 Want crontab -u
Change-ID: I3dc2251dbbcc721aeff25a9dde21a24271c927bc

*** 24,34 **** */ /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */ /* ! * Copyright 2019 OmniOS Community Edition (OmniOSce) Association. */ #include <sys/types.h> #include <sys/stat.h> #include <sys/types.h> --- 24,34 ---- */ /* Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */ /* ! * Copyright 2020 OmniOS Community Edition (OmniOSce) Association. */ #include <sys/types.h> #include <sys/stat.h> #include <sys/types.h>
*** 70,83 **** #define BADSHELL \ "because your login shell isn't /usr/bin/sh, you can't use cron." #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 [username]\n" \ ! "\tcrontab -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 \ "you must be super-user to access another user's crontab file" #define AUDITREJECT "The audit context for your shell has not been set." --- 70,82 ---- #define BADSHELL \ "because your login shell isn't /usr/bin/sh, you can't use cron." #define WARNSHELL "warning: commands will be executed using /usr/bin/sh\n" #define BADUSAGE \ "usage:\n" \ ! "\tcrontab [-u username] [file]\n" \ ! "\tcrontab [-u username] { -e | -l | -r }\n" \ ! "\tcrontab { -e | -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 \ "you must be super-user to access another user's crontab file" #define AUDITREJECT "The audit context for your shell has not been set."
*** 134,162 **** uid_t ruid; pid_t pid; int stat_loc; int ret; char real_login[UNAMESIZE]; int tmpfd = -1; pam_handle_t *pamh; int pam_error; char *buf; size_t buflen; (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 */ #endif (void) textdomain(TEXT_DOMAIN); if (init_yes() < 0) { (void) fprintf(stderr, gettext(ERR_MSG_INIT_YES), strerror(errno)); exit(1); } ! while ((c = getopt(argc, argv, "elr")) != EOF) switch (c) { case 'e': eflag++; break; case 'l': --- 133,162 ---- uid_t ruid; pid_t pid; int stat_loc; int ret; char real_login[UNAMESIZE]; + char *user = NULL; int tmpfd = -1; pam_handle_t *pamh; int pam_error; char *buf; size_t buflen; (void) setlocale(LC_ALL, ""); #if !defined(TEXT_DOMAIN) /* Should be defined by cc -D */ ! #define TEXT_DOMAIN "SYS_TEST" /* Use this only if it wasn't */ #endif (void) textdomain(TEXT_DOMAIN); if (init_yes() < 0) { (void) fprintf(stderr, gettext(ERR_MSG_INIT_YES), strerror(errno)); exit(1); } ! while ((c = getopt(argc, argv, "elru:")) != EOF) { switch (c) { case 'e': eflag++; break; case 'l':
*** 163,205 **** lflag++; break; case 'r': rflag++; break; case '?': errflg++; break; } if (eflag + lflag + rflag > 1) errflg++; ! argc -= optind; ! argv += optind; if (errflg || argc > 1) crabort(BADUSAGE); ruid = getuid(); if ((pwp = getpwuid(ruid)) == NULL) crabort(INVALIDUSER); if (strlcpy(real_login, pwp->pw_name, sizeof (real_login)) ! >= sizeof (real_login)) crabort(NAMETOOLONG); ! if ((eflag || lflag || rflag) && argc == 1) { ! if ((pwp = getpwnam(*argv)) == NULL) crabort(INVALIDUSER); if (!cron_admin(real_login)) { if (pwp->pw_uid != ruid) crabort(NOTROOT); else pp = getuser(ruid); - } else - pp = *argv++; } else { pp = getuser(ruid); } if (pp == NULL) { if (per_errno == 2) --- 163,219 ---- lflag++; break; case 'r': rflag++; break; + case 'u': + user = optarg; + break; case '?': errflg++; break; } + } + argc -= optind; + argv += optind; + if (eflag + lflag + rflag > 1) errflg++; ! if ((eflag || lflag || rflag) && argc > 0) { ! if (user != NULL) ! errflg++; ! else ! user = *argv; ! } ! if (errflg || argc > 1) crabort(BADUSAGE); ruid = getuid(); if ((pwp = getpwuid(ruid)) == NULL) crabort(INVALIDUSER); if (strlcpy(real_login, pwp->pw_name, sizeof (real_login)) ! >= sizeof (real_login)) { crabort(NAMETOOLONG); + } ! if (user != NULL) { ! if ((pwp = getpwnam(user)) == NULL) crabort(INVALIDUSER); if (!cron_admin(real_login)) { if (pwp->pw_uid != ruid) crabort(NOTROOT); else pp = getuser(ruid); } else { + pp = user; + } + } else { pp = getuser(ruid); } if (pp == NULL) { if (per_errno == 2)