int getacdir(char *dir, int len) { int retstat = SUCCESS, gotone = 0, dirlen, dirst; char entry[LEN]; /* * open file if it is not already opened */ if (acf == NULL && (acf = fopen(AUDIT_CTRL, "r")) == NULL) retstat = ERROR; else if (LASTOP != DIROP && DIRINIT == 1) { retstat = REW_WARN; setac(); } else { DIRINIT = 1; LASTOP == DIROP; } if (retstat >= SUCCESS) { do { if (fgets(entry, LEN, acf) != NULL) { switch(*entry) { case '#': break; case 'd': /* * return directory entry */ if (!strncmp(entry,DIRLABEL,strlen(DIRLABEL))) { if ((strlen(entry)+1) > len) retstat = FORMAT_ERR; else { /* * allow zero or one blank * between colon and directory */ if (entry[strlen(DIRLABEL)] == ' ') { dirst = strlen(DIRLABEL)+1; dirlen = strlen(entry) - (strlen(DIRLABEL)+2); } else { dirst = strlen(DIRLABEL); dirlen = strlen(entry) - (strlen(DIRLABEL)+1); } strcpy(dir, entry+dirst); strcpy(dir+dirlen, "\0"); gotone = 1; } } else retstat = FORMAT_ERR; break; case 'm': break; case 'f': break; default: break; } } else if ((feof(acf)) == 0) retstat = ERROR; else retstat = EOF_ERR; } while (gotone == 0 && retstat >= SUCCESS); } return (retstat); }
static void audump_control(void) { char string[PATH_MAX], string2[PATH_MAX]; int ret, val; long policy; time_t age; size_t size; ret = getacflg(string, PATH_MAX); if (ret == -2) err(-1, "getacflg"); if (ret != 0) errx(-1, "getacflg: %d", ret); printf("flags:%s\n", string); ret = getacmin(&val); if (ret == -2) err(-1, "getacmin"); if (ret != 0) errx(-1, "getacmin: %d", ret); printf("min:%d\n", val); ret = getacna(string, PATH_MAX); if (ret == -2) err(-1, "getacna"); if (ret != 0) errx(-1, "getacna: %d", ret); printf("naflags:%s\n", string); setac(); do { ret = getacdir(string, PATH_MAX); if (ret == -1) break; if (ret == -2) err(-1, "getacdir"); if (ret != 0) errx(-1, "getacdir: %d", ret); printf("dir:%s\n", string); } while (ret == 0); ret = getacpol(string, PATH_MAX); if (ret != 0) err(-1, "getacpol"); if (au_strtopol(string, &policy) < 0) err(-1, "au_strtopol"); if (au_poltostr(policy, PATH_MAX, string2) < 0) err(-1, "au_poltostr"); printf("policy:%s\n", string2); ret = getacfilesz(&size); if (ret == -2) err(-1, "getacfilesz"); if (ret != 0) err(-1, "getacfilesz: %d", ret); printf("filesz:%ldB\n", size); ret = getachost(string, PATH_MAX); if (ret == -2) err(-1, "getachost"); if (ret == -3) err(-1, "getachost: %d", ret); if (ret == 0 && ret != 1) printf("host:%s\n", string); ret = getacexpire(&val, &age, &size); if (ret == -2) err(-1, "getacexpire"); if (ret == -1) err(-1, "getacexpire: %d", ret); if (ret == 0 && ret != 1) printf("expire-after:%ldB %s %lds\n", size, val ? "AND" : "OR", age); }