X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=secnet.git;a=blobdiff_plain;f=secnet.h;h=79a3fc448e4a1a3a8ca81333746f0e12ee091e75;hp=26a0b552608c35ac46500916d9a54d9b8599e1d6;hb=HEAD;hpb=b5cea714148a4954f141be22bee3d240a280a0e4 diff --git a/secnet.h b/secnet.h index 26a0b55..79a3fc4 100644 --- a/secnet.h +++ b/secnet.h @@ -198,7 +198,7 @@ extern item_t *list_elem(list_t *l, int32_t index); extern list_t *new_closure(closure_t *cl); extern void add_closure(dict_t *dict, cstring_t name, apply_fn apply); extern void *find_cl_if(dict_t *dict, cstring_t name, uint32_t type, - bool_t fail_if_invalid, cstring_t desc, + bool_t required, cstring_t desc, struct cloc loc); extern item_t *dict_find_item(dict_t *dict, cstring_t key, bool_t required, cstring_t desc, struct cloc loc); @@ -418,6 +418,7 @@ typedef bool_t sigscheme_loadpub(const struct sigscheme_info *algo, typedef bool_t sigscheme_loadpriv(const struct sigscheme_info *algo, struct buffer_if *privkeydata, struct sigprivkey_if **sigpriv_r, + closure_t **closure_r, struct log_if *log, struct cloc loc); /* Ideally, check whether privkeydata contains data for any algorithm. * That avoids security problems if a key file is misidentified (which @@ -461,6 +462,11 @@ extern sigscheme_loadpub rsa1_loadpub; #define CL_BUFFER 13 #define CL_NETLINK 14 #define CL_PRIVCACHE 15 +/* When editing this list, edit closure_type_names[] too */ + +extern const char *const closure_type_names[]; + +const char *closure_type_name(uint32_t ty, char buf[]); struct buffer_if; @@ -505,7 +511,6 @@ struct random_if { /* SIGPUBKEY interface */ -typedef void sig_sethash_fn(void *st, struct hash_if *hash); typedef void sig_dispose_fn(void *st); typedef bool_t sig_unpick_fn(void *sst, struct buffer_if *msg, @@ -514,7 +519,6 @@ typedef bool_t sig_checksig_fn(void *st, uint8_t *data, int32_t datalen, const struct alg_msg_data *sig); struct sigpubkey_if { void *st; - sig_sethash_fn *sethash; /* must be called before use, if non-0 */ sig_unpick_fn *unpick; sig_checksig_fn *check; const struct hash_if *hash; @@ -529,7 +533,6 @@ typedef bool_t sig_makesig_fn(void *st, uint8_t *data, int32_t datalen, struct buffer_if *msg); struct sigprivkey_if { void *st; - sig_sethash_fn *sethash; /* must be called before use, if non-0 */ sig_makesig_fn *sign; const struct hash_if *hash; sig_dispose_fn *dispose; @@ -540,8 +543,7 @@ struct sigprivkey_if { typedef struct sigprivkey_if *privcache_lookup_fn(void *st, const struct sigkeyid *id, struct log_if*); - /* Return is valid only until you return from the current event! - * You do not need to call ->sethash. */ + /* Return is valid only until you return from the current event! */ struct privcache_if { void *st; @@ -656,15 +658,18 @@ static inline void cfgfile_log_init(struct cfgfile_log *cfl, cfl->facility=facility; } +void log_early_init(void); +void log_early_setlevel(void); + /* SITE interface */ /* Pretty much a placeholder; allows starting and stopping of processing, key expiry, etc. */ -typedef void site_control_fn(void *st, bool_t run); +typedef void site_startup_fn(void *st); typedef uint32_t site_status_fn(void *st); struct site_if { void *st; - site_control_fn *control; + site_startup_fn *startup; site_status_fn *status; }; @@ -783,6 +788,8 @@ struct hash_if { hash_final_fn *final; }; +extern struct hash_if *const sha1_hash_if; /* for where this is hardcoded */ + /* BUFFER interface */ struct buffer_if { @@ -841,6 +848,10 @@ extern NORETURN(cfgfatal_maybefile(FILE *maybe_f, struct cloc loc, const char *message, ...)) FORMAT(printf,4,5); +extern NORETURN(cfgfatal_cl_type(struct cloc loc, const char *facility, + closure_t *cl, uint32_t exp_type, + const char *name)); + extern void Message(uint32_t class, const char *message, ...) FORMAT(printf,2,3); extern void log_from_fd(int fd, cstring_t prefix, struct log_if *log);