caveats.c (2217B)
1 #include <assert.h> 2 3 #include "verify_common.h" 4 5 #include "caveats.h" 6 #include "caveats_impl.h" 7 #include "netstring.h" 8 #include "miniroon_caveat_name_perfhash.h" 9 typedef enum miniroon_caveat_name_perfhash_key miniroon_caveat_type; 10 11 void miniroon_caveats_state_init(miniroon_caveats_state *state) { 12 miniroon_env_map_init(&state->emap); 13 }; 14 15 void miniroon_caveats_state_exec(miniroon_caveats_state *state, char const *const *argv) { 16 miniroon_env_map_exec(&state->emap, argv); 17 }; 18 19 20 miniroon_caveat_type caveat_get_type(netstring_chunk *c, const bytebuffer caveat) { 21 netstring_chunk_init(c, caveat); 22 if(!netstring_chunk_next(c)) { 23 return miniroon_err1(MINIROON_ECAVEAT_MALFORMED, "Mising caveat name"); 24 } 25 dbg_print_bb1("Caveat ID", c->inner); 26 return miniroon_caveat_name_perfhash_hash(c->inner.data, c->inner.len); 27 } 28 29 miniroon_error miniroon_caveat_prepare(const bytebuffer caveat, miniroon_caveats_state *state) { 30 netstring_chunk c; 31 switch(caveat_get_type(&c, caveat)) { 32 case MINIROON_CAVEAT_UNDEFINED: 33 return miniroon_err1(MINIROON_ECAVEAT_NOT_RECOGNIZED, "Unrecognized caveat type"); 34 case MINIROON_CAVEAT_ENV_IS: 35 return miniroon_caveat_prepare_env_is(&c, state); 36 case MINIROON_CAVEAT_ENV_ABSENT: 37 return miniroon_caveat_prepare_env_absent(&c, state); 38 case MINIROON_CAVEAT_ENV_FNMATCH: 39 return miniroon_caveat_prepare_env_fnmatch(&c, state); 40 default: 41 return miniroon_err1(MINIROON_ECAVEAT_NOT_RECOGNIZED, "Unimplemented caveat type"); 42 } 43 } 44 45 miniroon_error miniroon_caveat_validate(const bytebuffer caveat, miniroon_caveats_state *state) { 46 netstring_chunk c; 47 switch(caveat_get_type(&c, caveat)) { 48 case MINIROON_CAVEAT_UNDEFINED: 49 return miniroon_err1(MINIROON_ECAVEAT_NOT_RECOGNIZED, "Unrecognized caveat type"); 50 case MINIROON_CAVEAT_ENV_IS: 51 return miniroon_caveat_validate_env_is(&c, state); 52 case MINIROON_CAVEAT_ENV_ABSENT: 53 return miniroon_caveat_validate_env_absent(&c, state); 54 case MINIROON_CAVEAT_ENV_FNMATCH: 55 return miniroon_caveat_validate_env_fnmatch(&c, state); 56 default: 57 return miniroon_err1(MINIROON_ECAVEAT_NOT_RECOGNIZED, "Unimplemented caveat type"); 58 } 59 } 60 61 /* vim: sts=2 sw=2 et 62 */