Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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);
}