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); }
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); }