From: Mark Wooding Date: Sat, 16 Jun 2018 12:16:11 +0000 (+0100) Subject: server/keymgmt.c: Capture copies of the keyring and tag strings. X-Git-Tag: 1.5.0~14 X-Git-Url: https://git.distorted.org.uk/~mdw/tripe/commitdiff_plain/cd2d678ee93ee3cab0c4f0df959489c27e9a8ad5 server/keymgmt.c: Capture copies of the keyring and tag strings. Slightly complicated because the private-key tag can legitimately be null to indicate that the old-fashioned search by key-exchange group thing should be done. --- diff --git a/server/keymgmt.c b/server/keymgmt.c index a72164e5..48e4de65 100644 --- a/server/keymgmt.c +++ b/server/keymgmt.c @@ -145,7 +145,7 @@ typedef struct keyhalf { const char *kind; int (*load)(key_file *, key *, key_data *, const dhops *, kdata *, dstr *, dstr *); - const char *kr; + char *kr; key_file *kf; fwatch w; sym_table tab; @@ -300,7 +300,7 @@ static int kh_reopen(keyhalf *kh) static void kh_init(keyhalf *kh, const char *kr) { - kh->kr = kr; + kh->kr = xstrdup(kr); fwatch_init(&kh->w, kr); sym_create(&kh->tab); if (kh_reopen(kh)) exit(EXIT_FAILURE); @@ -547,12 +547,13 @@ static void kh_clear(keyhalf *kh) if (kn->kd) km_unref(kn->kd); sym_destroy(&kh->tab); key_close(kh->kf); + xfree(kh->kr); kh->kf = 0; } /*----- Main code ---------------------------------------------------------*/ -const char *tag_priv; +char *tag_priv = 0; kdata *master; /* --- @km_init@ --- * @@ -583,7 +584,7 @@ void km_init(const char *privkr, const char *pubkr, const char *ptag) kh_init(&priv, privkr); kh_init(&pub, pubkr); - tag_priv = ptag; + tag_priv = ptag ? xstrdup(ptag) : 0; if ((master = km_findpriv(ptag)) == 0) exit(EXIT_FAILURE); } @@ -632,6 +633,7 @@ void km_clear(void) kh_clear(&priv); kh_clear(&pub); if (master) { km_unref(master); master = 0; } + if (tag_priv) { xfree(tag_priv); tag_priv = 0; } } /* --- @km_findpub@, @km_findpriv@ --- * diff --git a/server/tripe.h b/server/tripe.h index b062b366..bf75b45b 100644 --- a/server/tripe.h +++ b/server/tripe.h @@ -819,7 +819,7 @@ extern const tunnel_ops *tunnels[]; /* Table of tunnels (0-term) */ extern const tunnel_ops *tun_default; /* Default tunnel to use */ extern udpsocket udpsock[NADDRFAM]; /* The master UDP sockets */ extern kdata *master; /* Default private key */ -extern const char *tag_priv; /* Default private key tag */ +extern char *tag_priv; /* Default private key tag */ #ifndef NTRACE extern const trace_opt tr_opts[]; /* Trace options array */