/* ** Copyright (c) 1986, 1994, 1996, 2000, 2002 ** Jeff Forys (jeffware@marjum.com). All rights reserved. ** ** Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that: (1) Redistributions of ** source code must retain the above copyright notice, this list of ** conditions and the following disclaimer, (2) Redistributions in ** binary form must reproduce the above copyright notice, this list ** of conditions and the following disclaimer in the documentation ** and/or other materials provided with the distribution, (3) All ** advertising materials mentioning features or use of this software ** must display the following acknowledgment: ``This product includes ** software developed by Jeff Forys (jeffware@marjum.com).'', (4) ** The name of the author may not be used to endorse or promote products ** derived from this software without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED ** WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF ** MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ /* $Id: conf.h,v 1.20 2005/04/06 23:45:10 forys Exp $ */ #include #ifdef NO_TYPES_INC /* normally, includes this */ #include #endif #include #include /* * Set up common typedef's. */ #ifdef NO_UID_T /* "uid_t" arrived 20 months after 4.2BSD */ typedef int uid_T; /* uids */ #else typedef uid_t uid_T; /* uids */ #endif typedef dev_t tty_T; /* ttys (actually, device numbers) */ typedef int pid_T; /* process id's */ #define CMD_FLAG_EXACT 0x01 /* do exact match on command */ #define CMD_FLAG_REGEX 0x02 /* do regular expression match on command */ typedef struct { int flags; /* flags (see CMD_FLAG_* above) */ union { char *cmdstr; /* command */ void *regex; /* regular expression */ } cmd; } cmd_T; /* commands */ /* * Error codes used by Usage(). */ #define E_USAGE 1 /* generic usage error */ #define E_PRIOR 2 /* priority out of range */ #define E_SIGNO 3 /* invalid signal number */ #define E_VERS 4 /* display program version / copyright */ /* * Error codes used by exit(). */ #define EX_OKAY 0 /* success */ #define EX_UERR 1 /* user error */ #define EX_SERR 2 /* system error */ /* * Miscellaneous #define's. */ #define ROOTUID 0 /* super-user's UID */ #define ROOTUSR "root" /* what the Super-user likes to be called */ #define MAXUSR 64 /* maximum size of a user account name */ #define STREQU(s1,s2) ((*s1 == *s2) && (strcmp(s1,s2) == 0)) #define STRNEQU(s1,s2,n) ((*s1 == *s2) && (strncmp(s1,s2,n) == 0)) /* * This is all we need/want to know about a process. The machine-dependent * routine GetProc() returns a "struct ProcInfo" pointer (or NULL if no more * processes). */ struct ProcInfo { int pi_flags; /* various flags (see below) */ char * pi_cmd; /* pointer to path-stripped command name */ pid_T pi_pid; /* process id */ uid_T pi_uid; /* user id of process */ tty_T pi_tty; /* controlling tty */ }; /* pi_flags */ #define PI_CTLTTY 0x01 /* has a controlling tty ("pi_tty" valid) */ #define PI_ZOMBIE 0x02 /* is a zombie */ #define PI_SWEXIT 0x04 /* is in the process of exiting */ #define PI_ASKUSR 0x10 /* check with user before doing anything */ #ifndef NO_AEXTERN /* external variables (from "argparse.c") */ extern tty_T *TtyList; extern uid_T *UidList; extern pid_T *PidList; extern cmd_T *CmdList; extern int TtyIndx, UidIndx, PidIndx, CmdIndx; extern int Fflag, Iflag, Nflag, Vflag, Wflag; #endif /* NO_AEXTERN */ #ifndef NO_MEXTERN /* external variables (machine-dependent) */ extern char *SigMap[]; extern int NSig, Skill, PrioMin, PrioMax, SigPri; extern pid_T MyPid; extern uid_T MyUid; extern char *ProgName; extern int MdepAction(); extern void RegexComp(); extern int RegexMatch(); extern struct ProcInfo *GetProc(); #endif /* NO_MEXTERN */ void MdepInit(), ArgParse(), ListSigs(), Usage(), Not(), Exceed(); /* * Regular expression macros. * * Add one of the following macros in the machine dependent code * depending on whether or not the system support POSIX regcomp(3). * * NULL_REGEX_FUNCS - system does not support regcomp(3). * REAL_REGEX_FUNCS - #include , system supports regcomp(3). */ #define NULL_REGEX_FUNCS \ void RegexComp(pat, cmdptr) char *pat; cmd_T *cmdptr; \ { \ fprintf(stderr, "%s: /%s/: not compiled with regex(3) support\n", \ ProgName, pat); \ exit(EX_UERR); \ } \ int RegexMatch(cmd, cmdptr) char *cmd; cmd_T *cmdptr; \ { \ return 0; \ } #define REAL_REGEX_FUNCS \ void RegexComp(pat, cmdptr) char *pat; cmd_T *cmdptr; \ { \ regex_t *_r; \ if ((_r = (regex_t *)malloc(sizeof *_r)) == NULL) { \ fprintf(stderr, \ "%s: RegexComp: out of memory (wanted %u bytes)\n", \ ProgName, sizeof *_r); \ exit(EX_SERR); \ } \ if (regcomp(_r, pat, REG_EXTENDED) != 0) \ Not(pat, "valid regular expression (compilation failed)"); \ cmdptr->cmd.regex = _r; \ } \ int RegexMatch(cmd, cmdptr) char *cmd; cmd_T *cmdptr; \ { \ return ! regexec(cmdptr->cmd.regex, cmd, 0, NULL, 0); \ }