int main(int argc, char *argv[]) { OVAL_FTS *ofts; OVAL_FTSENT *ofts_ent; SEXP_t *path, *filename, *behaviors, *filepath, *result; int ret = 0; if (argc < 11) { fprintf(stderr, "Invalid usage -- too few arguments supplied.\n"); fprintf(stderr, "The following arguments are required, but may be empty:\n\n"); fprintf(stderr, " argv[1] - path operation\n"); fprintf(stderr, " argv[2] - path argument (regex or paths)\n"); fprintf(stderr, " argv[3] - filename operation\n"); fprintf(stderr, " argv[4] - filename argument (regex or paths)\n"); fprintf(stderr, " argv[5] - filepath operation\n"); fprintf(stderr, " argv[6] - filepath argument (regex or paths)\n"); fprintf(stderr, " argv[7] - behaviors max_depth\n"); fprintf(stderr, " argv[8] - behaviors recurse\n"); fprintf(stderr, " argv[9] - behaviors recurse_direction\n"); fprintf(stderr, " argv[10] - behaviors recurse_file_system\n"); return 1; } ret = create_path_sexpr(argv[1], argv[2], &path); if (ret) return ret; ret = create_filename_sexpr(argv[3], argv[4], &filename); if (ret) return ret; ret = create_filepath_sexpr(argv[5], argv[6], &filepath); if (ret) return ret; ret = create_behaviors_sexpr(argv[7], argv[8], argv[9], argv[10], &behaviors); if (ret) return ret; result = probe_cobj_new(SYSCHAR_FLAG_UNKNOWN, NULL, NULL, NULL); fprintf(stderr, "path=%p\n" "filename=%p\n" "filepath=%p\n" "behaviors=%p\n", path, filename, filepath, behaviors); ofts = oval_fts_open_prefixed(NULL, path, filename, filepath, behaviors, result); if (ofts != NULL) { while ((ofts_ent = oval_fts_read(ofts)) != NULL) { printf("%s/%s\n", ofts_ent->path, ofts_ent->file ? ofts_ent->file : ""); oval_ftsent_free(ofts_ent); } oval_fts_close(ofts); } SEXP_free(path); SEXP_free(filename); SEXP_free(filepath); SEXP_free(behaviors); return 0; }
static int oval_probe_variable_eval(oval_probe_session_t *sess, struct oval_syschar *syschar) { struct oval_value_iterator *vit; struct oval_variable *var; struct oval_object *obj; oval_syschar_collection_flag_t flag = SYSCHAR_FLAG_ERROR; int ret = 0; obj = oval_syschar_get_object(syschar); var = oval_probe_variable_objgetvar(obj); if (var == NULL) { oval_syschar_set_flag(syschar, SYSCHAR_FLAG_ERROR); return(-1); } if (oval_probe_query_variable(sess, var) != 0) { oval_syschar_set_flag(syschar, SYSCHAR_FLAG_ERROR); return(-1); } flag = oval_variable_get_collection_flag(var); switch (flag) { case SYSCHAR_FLAG_COMPLETE: case SYSCHAR_FLAG_INCOMPLETE: break; default: { char msg[100]; snprintf(msg, sizeof(msg), "There was a problem processing referenced variable (%s).", oval_variable_get_id(var)); dW("%s\n", msg); oval_syschar_add_new_message(syschar, msg, OVAL_MESSAGE_LEVEL_WARNING); oval_syschar_set_flag(syschar, SYSCHAR_FLAG_ERROR); return(1); } } vit = oval_variable_get_values(var); if (vit == NULL) { flag = SYSCHAR_FLAG_ERROR; oval_syschar_set_flag(syschar, SYSCHAR_FLAG_ERROR); return(1); } else { SEXP_t *r0, *item, *cobj, *vrent, *val_sexp, *valent; char *var_ref; cobj = probe_cobj_new(SYSCHAR_FLAG_UNKNOWN, NULL, NULL); /* Create shared entity */ var_ref = oval_variable_get_id(var); vrent = probe_ent_creat1("var_ref", NULL, r0 = SEXP_string_new(var_ref, strlen(var_ref))); SEXP_free(r0); while (oval_value_iterator_has_more(vit)) { oval_datatype_t dtype; struct oval_value *val; val = oval_value_iterator_next(vit); oval_value_cast(val, OVAL_DATATYPE_STRING); dtype = oval_value_get_datatype(val); val_sexp = oval_value_to_sexp(val, dtype); assume_d(val_sexp != NULL, -1); valent = probe_ent_creat1("value", NULL, val_sexp); item = probe_item_creat("variable_item", NULL, NULL); /* temporary workaround to generate ids */ _gen_item_id(item); /* Add shared var_ref entity */ SEXP_list_add(item, vrent); /* Add value entity */ SEXP_list_add(item, valent); /* Add item to the item list */ probe_cobj_add_item(cobj, item); SEXP_vfree(item, valent, val_sexp, NULL); } oval_value_iterator_free(vit); probe_cobj_compute_flag(cobj); ret = oval_sexp2sysch(cobj, syschar); SEXP_vfree(cobj, vrent, NULL); } return(ret); }