Ejemplo n.º 1
0
static int32_t
snmp_import_top(struct snmp_toolinfo *snmptoolctx, enum tok *tok)
{
	enum snmp_tc tc;
	struct enum_type *t;

	if (*tok == '(')
		return (snmp_import_tree(snmptoolctx, tok));

	if (*tok == TOK_TYPEDEF) {
		if ((*tok = gettoken(snmptoolctx)) != TOK_STR) {
			warnx("type name expected after typedef - %s",
			    input->fname);
			return (-1);
		}

		t = snmp_enumtc_init(nexttok);

		*tok = gettoken(snmptoolctx);
		t->is_enum = (*tok == TOK_ENUM);
		t->is_bits = (*tok == TOK_BITS);
		t->syntax = parse_type(snmptoolctx, tok, &tc, &(t->snmp_enum));
		snmp_enumtc_insert(snmptoolctx, t);

		return (1);
	}

	if (*tok == TOK_INCLUDE) {
		int i;

		*tok = gettoken(snmptoolctx);
		if (*tok != TOK_FILENAME) {
			warnx("filename expected in include directive - %s",
			    nexttok);
			return (-1);
		}

		if (( i = add_filename(snmptoolctx, nexttok, NULL, 1)) == 0) {
			*tok = gettoken(snmptoolctx);
			return (1);
		}

		if (i == -1)
			return (-1);

		input_fopen(nexttok);
		*tok = gettoken(snmptoolctx);
		return (1);
	}

	warnx("'(' or 'typedef' expected - %s", nexttok);
	return (-1);
}
Ejemplo n.º 2
0
dir_index_t * remove_old_files(fsid_index_t * fsid_index) {

	char txtbuf[100];


	DIR *directory_pointer;

	struct dirent *entry;
	dir_index_t * dir_index_list = NULL;
	dir_index_t * dir_index;

	if ((directory_pointer = opendir("/var/index/index")) == NULL) {
		return(0);
	}


	while ((entry = readdir(directory_pointer))) {
		if(strncmp(entry->d_name, ".", 1) != 0) {
			dir_index = new_dir_index();
			add_filename(dir_index, entry->d_name);
			dir_index_list = add_dir_index(dir_index_list, dir_index);
		}
	}

	closedir(directory_pointer);

	dir_index = dir_index_list;

	while(dir_index) {
		if(!file_present(dir_index, fsid_index)) {
			printf("Removing old index /var/index/index/%s\n",dir_index->filename);
			memset(txtbuf, '\0', 99);
			snprintf(txtbuf, 98,"/var/index/index/%s",dir_index->filename );
			if( unlink(txtbuf) == -1) {
				/* Okay this may be a fsid-no index file */
				printf("Removing old no index /var/index/index/%s-no\n",dir_index->filename);
				memset(txtbuf, '\0', 99);
				snprintf(txtbuf, 98,"/var/index/index/%s-no",dir_index->filename );
				unlink(txtbuf);
			}
		}
		dir_index = dir_index->next;
	}

	return(dir_index_list);

}
int main(int argc, char *argv[])
{
	struct stream_data	stream;
	struct stream_header	hdr;
	char const		*program = "/bin/false";
	struct signature_options sigopts = {
		.min_strength	=  0,
	};
	char			build_time[8*3 + 2];
	char			revision[8*3 + 2];
	int			notify_port = -1;

	while (1) {
		int         c = getopt_long(argc, argv, "vx:S:",
					    CMDLINE_OPTIONS, NULL);

		if (c==-1)
			break;

		switch (c) {
		case CMD_HELP     :  show_help();
		case CMD_VERSION  :  show_version();
		case 'x' :  program = optarg; break;
		case 'v' :  sigopts.min_strength = 1; break;
		case 'S':   sigopts.min_strength = atoi(optarg); break;

		case CMD_CAFILE:
			if (!add_filename(&sigopts.ca_files, optarg))
				return EX_OSERR;
			break;

		case CMD_CRLFILE:
			if (!add_filename(&sigopts.crl_files, optarg))
				return EX_OSERR;
			break;

		case CMD_NOTIFY_PORT:
			notify_port = atoi(optarg);
			break;

		default:
			fprintf(stderr, "Try --help for more information\n");
			return EX_USAGE;
		}
	}

	if (!notification_init(&stream.notify, notify_port))
		return EX_OSERR;

	if (!stream_data_open(&stream, 0))
		signal_return(&stream, EX_OSERR);

	if (!stream_data_read_params(&stream))
		signal_return(&stream, EX_DATAERR);

	if (!stream_data_read(&stream, &hdr, sizeof hdr, false))
		signal_return(&stream, EX_DATAERR);

	if (be32toh(hdr.magic) != STREAM_HEADER_MAGIC) {
		fprintf(stderr, "bad stream magic\n");
		signal_return(&stream, EX_DATAERR);
	}

	if (!read_hdr_ext(&stream, be32toh(hdr.version),
			  be32toh(hdr.extra_header)))
		signal_return(&stream, EX_DATAERR);

	sprintf(build_time, "%" PRIu64, be64toh(hdr.build_time));
	setenv("STREAM_BUILD_TIME", build_time, 1);

	sprintf(revision, "%" PRIx64, be64toh(stream.revision));
	setenv("STREAM_REVISION", revision, 1);

	notification_send_length(&stream.notify, stream.total_len);

	if (!stage_transaction(program, "start"))
		signal_return(&stream, EX_OSERR);

	for (;;) {
		struct stream_hunk_header	hhdr;
		struct memory_block_data	payload;
		struct memory_block_signature	signature;

		if (!stream_data_read(&stream, &hhdr, sizeof hhdr, true))
			signal_return(&stream, EX_DATAERR);

		if (stream.is_eos)
			break;

		payload.mem.stream   = &stream;
		payload.mem.len      = be32toh(hhdr.hunk_len);
		payload.mem.data     = NULL;
		payload.type         = be32toh(hhdr.type);
		payload.compression  = hhdr.compress_type;
		payload.len          = be32toh(hhdr.decompress_len);

		signature.opts       = &sigopts;
		signature.pre.stream = &stream;
		signature.pre.len    = be32toh(hhdr.prefix_len);
		signature.pre.data   = NULL;
		signature.mem.stream = &stream;
		signature.mem.len    = be32toh(hhdr.fixed_sign_len);
		signature.mem.data   = NULL;
		signature.type       = hhdr.sign_type;
		signature.shdr       = &hdr;
		signature.hhdr       = &hhdr;

		if (!process_hunk(program, &stream.notify, &payload, &signature))
			signal_return(&stream, EX_DATAERR);
	}

	stream_data_close(&stream);

	free(sigopts.ca_files.names);
	free(sigopts.crl_files.names);

	if (!stage_transaction(program, "end"))
		signal_return(&stream, EX_OSERR);

	signal_return(&stream, EX_OK);
}