Annotation of cci/usr/src/usr.bin/audfmt.c, revision 1.1.1.1

1.1       root        1: /*
                      2:  *
                      3:  *$Header: audfmt.c,v 1.1 85/07/08 10:24:44 root Exp $
                      4:  *
                      5:  *$Log:        audfmt.c,v $
                      6:  * Revision 1.1  85/07/08  10:24:44  root
                      7:  * Initial revision
                      8:  * 
                      9:  * Revision 1.1  84/04/19  08:00:54  brian
                     10:  * Initial revision
                     11:  * 
                     12:  */
                     13: 
                     14: static char rcsid[] = "$Header: audfmt.c,v 1.1 85/07/08 10:24:44 root Exp $";
                     15: 
                     16: #define VAX
                     17: #include <sys/param.h>
                     18: #include <sys/dir.h>
                     19: #include <stdio.h>
                     20: #include <signal.h>
                     21: #include <sys/audit.h>
                     22: #include <sys/time.h>
                     23: #include <errno.h>
                     24: #include <pwd.h>
                     25: 
                     26: #define NOUSER "invalid uid"
                     27: #define ROOT 0
                     28: #ifdef VAX
                     29: #define PATHLEN MAXPATHLEN
                     30: #else
                     31: #include <sys/stat.h>
                     32: #define PATHLEN 512
                     33: #endif
                     34: 
                     35: int    uid;
                     36: int    audfno;
                     37: char   result[PATHLEN];
                     38: char   name[PATHLEN];
                     39: #define AUDFILELOG "/usr/adm/audfile.log"
                     40: char   *audfile        = "/usr/adm/audit";
                     41: char   *outfile = NULL;
                     42: struct aud_rec audrec;
                     43: struct aud_rec *abp;
                     44: extern int errno;
                     45: 
                     46: char logpath[PATHLEN];
                     47: char buf[1024];
                     48: 
                     49: 
                     50: 
                     51: main(argc,argv)
                     52: int argc;
                     53: char **argv;
                     54: {
                     55:     register int n, m, i, num, logfd;
                     56:     int fdout = 1;
                     57:     register long check, offseek;
                     58:     char string[250];
                     59:     register char c;
                     60:     char *getwd();
                     61:     extern int optind;
                     62:     extern char *optarg;
                     63:     register char *bufp;
                     64: 
                     65:        if( (uid=getuid()) != ROOT)
                     66:        {
                     67:                        fprintf(stderr,"%s: must be superuser\n",argv[0]);
                     68:                        exit(1);
                     69:        }
                     70: 
                     71:     if(argc > 1)
                     72:     {
                     73:        while((c = getopt(argc,argv,"o:")) != EOF)
                     74:        {
                     75:           switch(c){
                     76:                case 'o':
                     77:                        outfile = optarg;
                     78:                         break;
                     79:                default:
                     80:                        printf("usage: audfmt [-o outfile] [file]\n");
                     81:                        exit(8);
                     82:            }
                     83:        }
                     84:         if(optind < argc)
                     85:        {
                     86:                if(*(argv[optind]) != '/')
                     87:                {
                     88:                        audfile = getwd(name);
                     89:                        if(strcmp(audfile,"/") != 0)
                     90:                                strncat(audfile,"/",PATHLEN);
                     91:                        strncat(audfile,argv[optind],PATHLEN);
                     92:                }
                     93:                else
                     94:                        audfile = argv[optind];
                     95:        }
                     96:        if(outfile != NULL)
                     97:        {
                     98:                 if((fdout=open(outfile,2)) < 0){
                     99:                     if((errno & ENOENT) == ENOENT){
                    100:                         if((fdout=creat(outfile,0666)) < 0){
                    101:                             fprintf(stderr,"creat: cannot create %s\n",outfile);
                    102:                             exit(9);
                    103:                         }
                    104:                     }
                    105:                    else 
                    106:                        perror(open);
                    107:                }
                    108:        }
                    109:     }
                    110:        if((logfd = open(AUDFILELOG,0)) < 0)
                    111:        {
                    112:                if(errno != ENOENT)
                    113:                {
                    114:                        fprintf(stderr,"%s: can't open %s\n",argv[0],AUDFILELOG);
                    115:                        exit(8);
                    116:                }
                    117:        }
                    118:        else
                    119:        {
                    120:                if(read(logfd,logpath,PATHLEN) < 0)
                    121:                {
                    122:                        fprintf(stderr,"%s: can't read %s\n",argv[0],AUDFILELOG);
                    123:                        exit(8);
                    124:                }
                    125:                if(strcmp(logpath,audfile) == 0)
                    126:                {
                    127:                        fprintf(stderr,"%s: %s is the active log file\n",argv[0],audfile);
                    128:                        exit(8);
                    129:                }
                    130:        }
                    131:        close(logfd);
                    132: 
                    133:        if((audfno = open(audfile,0)) < 0){
                    134:                        fprintf(stderr,"Can't open %s\n",audfile);
                    135:                        exit(8);
                    136:                }
                    137: 
                    138:        offseek = 0;
                    139:        while((n = read(audfno,buf,sizeof(audrec))) != 0){
                    140:                 if(n < 0){
                    141:                        fprintf(stderr,"read error");
                    142:                        perror(read);
                    143:                         }
                    144:                 bufp = buf;
                    145:                 m = audout(bufp,fdout);
                    146: 
                    147:                 offseek = offseek + m;
                    148:                if(( check=lseek(audfno,offseek,0)) < 0){
                    149:                         fprintf(stderr,"lseek: error\n\n");
                    150:                        perror(lseek);
                    151:                 }
                    152:        }
                    153: 
                    154: close(audfno);
                    155: }
                    156: 
                    157: 
                    158: audout(bp,fd)
                    159: int fd;
                    160: char *bp;
                    161: {
                    162:     register short *sp;
                    163:     register long *lp;
                    164:     register char *cp;
                    165:     register int i = 0;
                    166:     register int num, j;
                    167:     char string[250];
                    168:     char *p;
                    169:        abp = &audrec;
                    170:        sp = (short *)bp;
                    171:        abp->a_flag = *sp;
                    172:         bp += 2;
                    173:        i += 2;
                    174:        sp = (short *)bp;
                    175:        abp->a_uid = *sp;
                    176:         bp += 2;
                    177:        i +=  2;
                    178:         lp = (long *)bp;
                    179:        abp->a_time = *lp;
                    180:         i += 4;
                    181:         bp += 4;
                    182:         cp = abp->a_comm;
                    183:        while(*bp != '\0'){
                    184:                *cp++ = *bp++;
                    185:                i++;
                    186:        }                          /*end of command string*/
                    187:         *cp++ = '\0';
                    188:         i++;
                    189:        bp++;
                    190:        cp = abp->a_path;
                    191:        while(*bp != '\0'){
                    192:                *cp++ = *bp++;
                    193:                i++;
                    194:        }
                    195:        *cp++ = '\0';
                    196:        bp++;
                    197:         i++;
                    198:        num = audfrmt(&audrec,string);
                    199:        write(fd,string,num);
                    200: 
                    201:        return(i);             /*returns number of bytes processed */
                    202: }
                    203: 
                    204: 
                    205: 
                    206: 
                    207: audfrmt(recp,strp)
                    208: 
                    209: register struct aud_rec *recp; /* ptr to audit record */
                    210: register char *strp;           /* ptr to buffer to be stuffed */
                    211: 
                    212: {
                    213: struct passwd *passp;  /* ptr to passwd structure; for getpwuid */
                    214: register int num = 0;
                    215: register char *cp, *slashp;
                    216: char *ctime();
                    217: struct passwd *getpwuid();
                    218: 
                    219: 
                    220: /*
                    221: *      Flags section
                    222: */
                    223: if((recp->a_flag & AUDREAD) == AUDREAD){
                    224:        *strp++ = 'R';
                    225:         num++;
                    226:        }
                    227: else if((recp->a_flag & AUDWRITE) == AUDWRITE){
                    228:        *strp++ = 'W';
                    229:         num++;
                    230:        }
                    231: else if ((recp->a_flag & AUDEXEC) == AUDEXEC){
                    232:        *strp++ = 'E';
                    233:        num++;
                    234:        }
                    235: else if ((recp->a_flag & AUDUNLINK) == AUDUNLINK){
                    236:        *strp++ = 'L';
                    237:        num++;
                    238:        }
                    239: else if(( recp->a_flag & AUDOFFTON) == AUDOFFTON){
                    240:        *strp++ = 'N';
                    241:        num++;
                    242:        }
                    243: else if((recp->a_flag & AUDONTOFF) == AUDONTOFF){
                    244:        *strp++ = 'F';
                    245:        num++;
                    246:        }
                    247: else{
                    248:        *strp++ = ' ';
                    249:         num++;
                    250:        }
                    251: if((recp->a_flag & AUDSUCCESS) == AUDSUCCESS){
                    252:        *strp++ = 'S';
                    253:        num++;
                    254:        }
                    255: else{
                    256:        *strp++ = 'U';
                    257:        num++;
                    258:        }
                    259: 
                    260: *strp++ = ' ';
                    261: num++;
                    262: /*
                    263:  *     User name section
                    264:  */
                    265: if (( passp = getpwuid(recp->a_uid)) != (struct passwd *) NULL){
                    266:        cp = passp->pw_name;
                    267:        while(*cp != '\0'){
                    268:                *strp++ = *cp++;
                    269:                num++;
                    270:                }
                    271:        }
                    272: else{
                    273:         cp = NOUSER;
                    274:        while(*cp != '\0'){
                    275:                *strp++ = *cp++;
                    276:                num++;
                    277:                }
                    278:        }
                    279: *strp++ = ' ';
                    280: num++;
                    281: /*
                    282: *      Date\time section
                    283: */
                    284:        cp = ctime(&(recp->a_time));
                    285:        while(*cp != '\n'){
                    286:                *strp++ = *cp++;
                    287:                num++;
                    288:                }
                    289:        *strp++ = ' ';
                    290:        num++;
                    291: /*
                    292: *      command name section
                    293: */
                    294: cp = recp->a_comm;
                    295: while(*cp != '\0'){
                    296:        *strp++ = *cp++;
                    297:        num++;
                    298:        }
                    299: *strp++ = ' ';
                    300: num++;
                    301: /*
                    302: *      Path Name section
                    303: */
                    304: 
                    305: cp = recp->a_path;
                    306: while(*cp != '\0'){
                    307:         if (*cp == '/'){
                    308:                 *strp++ = *cp++;
                    309:                 slashp = cp;
                    310: 
                    311:                 if(*slashp == '.' && *(slashp+1) == '/'){
                    312: 
                    313:                         cp += 2;
                    314:                 }
                    315: 
                    316:                else if (*slashp =='.' && *(slashp+1) == '.' &&
                    317:                        *(slashp+2) == '/'){
                    318:                        cp += 2;
                    319:                        strp -= 2;
                    320:                        num -= 2;
                    321:                        while(*strp != '/'){
                    322:                                strp--;
                    323:                                num--;
                    324:                        }
                    325: 
                    326:                }
                    327: 
                    328:         }
                    329:         else
                    330:                *strp++ = *cp++;
                    331:         num++;
                    332:    }
                    333: *strp++ = '\n';
                    334: num++;
                    335: *strp++ = '\0';
                    336: num++;
                    337: return(num);
                    338: }
                    339: 
                    340: #ifdef POWER5
                    341: 
                    342: struct stat    d, dd;
                    343: struct direct  dir;
                    344: 
                    345: char   dot[]    = ".";
                    346: char   dotdot[] = "..";
                    347: 
                    348: int    file;
                    349: int    off = 0;
                    350: 
                    351: 
                    352: cat(path)
                    353: register char *path;
                    354: {
                    355:        register i, j;
                    356: 
                    357:        i = -1;
                    358:        while ((dir.d_name[++i] != 0) && (i < 14));
                    359:        if ((off+i+2) > (PATHLEN-1))
                    360:                return;
                    361:        for(j=off+1; j>=0; --j)
                    362:                path[j+i+1] = path[j];
                    363:        off=i+off+1;
                    364:        path[i] = '/';
                    365:        for(--i; i>=0; --i)
                    366:                path[i] = dir.d_name[i];
                    367: }
                    368: #endif
                    369: /*     @(#)getopt.c    1.5     */
                    370: /*     3.0 SID #       1.2     */
                    371: /*LINTLIBRARY*/
                    372: #define NULL   0
                    373: #define EOF    (-1)
                    374: #define ERR(s, c)      if(opterr){\
                    375:        extern int strlen(), write();\
                    376:        char errbuf[2];\
                    377:        errbuf[0] = c; errbuf[1] = '\n';\
                    378:        (void) write(2, argv[0], (unsigned)strlen(argv[0]));\
                    379:        (void) write(2, s, (unsigned)strlen(s));\
                    380:        (void) write(2, errbuf, 2);}
                    381: 
                    382: extern int strcmp();
                    383: extern char *strchr();
                    384: 
                    385: int    opterr = 1;
                    386: int    optind = 1;
                    387: int    optopt;
                    388: char   *optarg;
                    389: 
                    390: int
                    391: getopt(argc, argv, opts)
                    392: int    argc;
                    393: char   **argv, *opts;
                    394: {
                    395:        static int sp = 1;
                    396:        register int c;
                    397:        register char *cp;
                    398: 
                    399:        if(sp == 1)
                    400:                if(optind >= argc ||
                    401:                   argv[optind][0] != '-' || argv[optind][1] == '\0')
                    402:                        return(EOF);
                    403:                else if(strcmp(argv[optind], "--") == NULL) {
                    404:                        optind++;
                    405:                        return(EOF);
                    406:                }
                    407:        optopt = c = argv[optind][sp];
                    408:        if(c == ':' || (cp=strchr(opts, c)) == NULL) {
                    409:                ERR(": illegal option -- ", c);
                    410:                if(argv[optind][++sp] == '\0') {
                    411:                        optind++;
                    412:                        sp = 1;
                    413:                }
                    414:                return('?');
                    415:        }
                    416:        if(*++cp == ':') {
                    417:                if(argv[optind][sp+1] != '\0')
                    418:                        optarg = &argv[optind++][sp+1];
                    419:                else if(++optind >= argc) {
                    420:                        ERR(": option requires an argument -- ", c);
                    421:                        sp = 1;
                    422:                        return('?');
                    423:                } else
                    424:                        optarg = argv[optind++];
                    425:                sp = 1;
                    426:        } else {
                    427:                if(argv[optind][++sp] == '\0') {
                    428:                        sp = 1;
                    429:                        optind++;
                    430:                }
                    431:                optarg = NULL;
                    432:        }
                    433:        return(c);
                    434: }
                    435: 
                    436: /*     @(#)strchr.c    1.2     */
                    437: /*     3.0 SID #       1.2     */
                    438: /*LINTLIBRARY*/
                    439: /*
                    440:  * Return the ptr in sp at which the character c appears;
                    441:  * NULL if not found
                    442:  */
                    443: 
                    444: #define        NULL    0
                    445: 
                    446: char *
                    447: strchr(sp, c)
                    448: register char *sp, c;
                    449: {
                    450:        do {
                    451:                if(*sp == c)
                    452:                        return(sp);
                    453:        } while(*sp++);
                    454:        return(NULL);
                    455: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.