|
|
1.1 ! root 1: /* ! 2: * The information contained herein is a trade secret of Mark Williams ! 3: * Company, and is confidential information. It is provided under a ! 4: * license agreement, and may be copied or disclosed only under the ! 5: * terms of that agreement. Any reproduction or disclosure of this ! 6: * material without the express written authorization of Mark Williams ! 7: * Company or persuant to the license agreement is unlawful. ! 8: * ! 9: * An unpublished work by Mark Williams Company, Chicago. ! 10: * All rights reserved. ! 11: */ ! 12: ! 13: /* ! 14: * crontab.c ! 15: * ! 16: * Emulation of the SV crontab command. ! 17: * ! 18: * The next table shows conditions when user is allowed to use crontab. ! 19: * ! 20: * \ deny exist exist exist doesn't ! 21: * \ is user no user but empty exist ! 22: * allow \ ! 23: * _______\________________________________________________________________ ! 24: * exist | ! 25: * is user | Y Y Y Y ! 26: * ------------------------------------------------------------------------ ! 27: * exist | ! 28: * no user | N N N N ! 29: * ------------------------------------------------------------------------ ! 30: * doesn't| ! 31: * exist | N Y Y N ! 32: * ! 33: * Where deny means the file /usr/lib/cron/cron.deny, and allow is ! 34: * the file /usr/lib/cron/cron.allow ! 35: * This table is not valid for user root hwich can always use crontab. ! 36: * ! 37: * $ 12-06-1991 vlad (Vladimir Smelyansky) ! 38: * ! 39: */ ! 40: #include <pwd.h> ! 41: #include <errno.h> ! 42: #include <stdio.h> ! 43: #include "cron.h" ! 44: ! 45: extern int iAllow(); /* Check permissions to use crontab */ ! 46: extern void vDelete(); /* Delete user crontable */ ! 47: extern void vList(); /* List user crontable */ ! 48: extern void vMailDisable(); /* Disable the mail messages */ ! 49: extern void vMailEnable(); /* Enable the mail messages */ ! 50: extern void vReplace(); /* Replace user crontable */ ! 51: ! 52: extern char *pcFileName; /* User crontab */ ! 53: ! 54: char acRealUser[MAX_UNAME]; /* Real user name */ ! 55: char *pcUserName; /* User name from a command line */ ! 56: FILE *pfNewTab; ! 57: int lFlag = FALSE, /* List crontab */ ! 58: rFlag = FALSE, /* Delete crontab */ ! 59: fFlag = FALSE, /* Replace crontab */ ! 60: uFlag = FALSE, /* User name */ ! 61: mFlag = FALSE, /* Mail enable/disable */ ! 62: ldrFlag = FALSE; ! 63: ! 64: main(argc, argv) ! 65: int argc; ! 66: char *argv[]; ! 67: { ! 68: int iChar; ! 69: extern int optind; ! 70: extern char *optarg; ! 71: ! 72: /* Check if user allowed to use the crontab. ! 73: * NOTICE: iAllow finds real user name (acRealUser). ! 74: */ ! 75: if (iAllow() != TRUE) { ! 76: fprintf(stderr, "Sorry, you are not authorized to use cron\n"); ! 77: exit(1); ! 78: } ! 79: ! 80: /* Ok, we have permissions to execute it. ! 81: */ ! 82: while((iChar = getopt(argc, argv, "u:lrf:m:")) != EOF) { ! 83: switch(iChar) { ! 84: case 'l': /* List crontab */ ! 85: if (ldrFlag) ! 86: usage(); ! 87: lFlag = ldrFlag = TRUE; ! 88: break; ! 89: case 'r': /* Remove crontab */ ! 90: if (ldrFlag) ! 91: usage(); ! 92: rFlag = ldrFlag = TRUE; ! 93: break; ! 94: case 'f': /* Replace crontab */ ! 95: if (ldrFlag) ! 96: usage(); ! 97: fFlag = ldrFlag = TRUE; ! 98: pcFileName = optarg; ! 99: Dprint("main: file is %s\n", pcFileName); ! 100: break; ! 101: case 'u': /* User name */ ! 102: if (strcmp(acRealUser, optarg)) { ! 103: if (strcmp(acRealUser, "root")) { ! 104: fprintf(stderr, ! 105: "Sorry, you are not autorized edit '%s' crontab\n", pcUserName); ! 106: exit(1); ! 107: } ! 108: strncpy(acRealUser, optarg, MAX_UNAME); ! 109: } ! 110: break; ! 111: case 'm': /* Enable disable mail */ ! 112: mFlag = TRUE; ! 113: switch(optarg[0]) { ! 114: case 'e': ! 115: Dprint("crontab: mail enable. %s\n", optarg); ! 116: vMailEnable(); ! 117: break; ! 118: case 'd': ! 119: Dprint("crontab: mail disable. %s\n", optarg); ! 120: vMailDisable(); ! 121: break; ! 122: default: ! 123: usage(); ! 124: } ! 125: break; ! 126: case '?': ! 127: default: ! 128: usage(); ! 129: } ! 130: } ! 131: ! 132: /* At least one option should be given. ! 133: */ ! 134: if (ldrFlag == FALSE && mFlag == FALSE) ! 135: usage(); ! 136: ! 137: if (lFlag) { /* List user crontab */ ! 138: vList(); ! 139: exit(0); ! 140: } ! 141: if (fFlag) { /* Replace user crontab */ ! 142: Dprint("main: Case replace. User %s\n", acRealUser); ! 143: vReplace(); ! 144: exit(0); ! 145: } ! 146: if (rFlag) { /* Remove user crontab */ ! 147: vDelete(); ! 148: exit(0); ! 149: } ! 150: exit(1); ! 151: } ! 152: ! 153: usage() ! 154: { ! 155: fprintf(stderr, "usage: crontab [-u user_name] ...\n"); ! 156: fprintf(stderr, "\t\t-l list user's crontab\n"); ! 157: fprintf(stderr, "\t\t-r remove user's crontab\n"); ! 158: fprintf(stderr, "\t\t-f file_name replace user's crontab\n"); ! 159: fprintf(stderr, "\t\t-m e[nable]/d[isable] enable/disable mail\n"); ! 160: exit(1); ! 161: } ! 162:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.