X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=secnet.h;h=5c351afb44a6e04d3e78308a67627e4e383268a0;hb=328292c7927b477d9a732f21732edf5885d67793;hp=30a171d4da262160443b9029c1c137fe8f69e027;hpb=87af7c8c0f58eea212ec1207d0d343a509c5e7df;p=secnet.git diff --git a/secnet.h b/secnet.h index 30a171d..5c351af 100644 --- a/secnet.h +++ b/secnet.h @@ -377,6 +377,7 @@ typedef void init_module(dict_t *dict); extern void init_builtin_modules(dict_t *dict); +extern init_module pubkeys_init; extern init_module resolver_module; extern init_module random_module; extern init_module udp_module; @@ -404,14 +405,20 @@ struct sigscheme_info; typedef bool_t sigscheme_loadpub(const struct sigscheme_info *algo, struct buffer_if *pubkeydata, struct sigpubkey_if **sigpub_r, + closure_t **closure_r, struct log_if *log, struct cloc loc); /* pubkeydata is (supposedly) for this algorithm. * loadpub should log an error if it fails. - * pubkeydata may be modified (but not freed) */ + * pubkeydata may be modified (but not freed). + * both *sigpub_r and *closure_r must always be written and must + * refer to the same object, so on successful return + * (*closure_r)->type==CL_SIGPUBKEY + * and (*closure_r)->interface==*sigpub_r */ 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 @@ -634,6 +641,24 @@ FORMAT(printf,3,4); extern void vslilog_part(struct log_if *lf, int class, const char *message, va_list) FORMAT(printf,3,0); +void cfgfile_log__vmsg(void *sst, int class, const char *message, va_list); +struct cfgfile_log { + struct log_if log; + /* private fields */ + struct cloc loc; + const char *facility; +}; +static inline void cfgfile_log_init(struct cfgfile_log *cfl, + struct cloc loc, const char *facility) +{ + cfl->log.st=cfl; + cfl->log.vlogfn=cfgfile_log__vmsg; + cfl->loc=loc; + cfl->facility=facility; +} + +void log_early_init(void); + /* SITE interface */ /* Pretty much a placeholder; allows starting and stopping of processing, @@ -812,7 +837,7 @@ extern NORETURN(cfgfatal(struct cloc loc, cstring_t facility, extern void cfgfile_postreadcheck(struct cloc loc, FILE *f); extern NORETURN(vcfgfatal_maybefile(FILE *maybe_f, struct cloc loc, cstring_t facility, const char *message, - va_list)) + va_list, const char *suffix)) FORMAT(printf,4,0); extern NORETURN(cfgfatal_maybefile(FILE *maybe_f, struct cloc loc, cstring_t facility,