X-Git-Url: https://git.distorted.org.uk/~mdw/tripe/blobdiff_plain/b50ba1bda8722c66c40005f43707ebc63515732b..cd2d678ee93ee3cab0c4f0df959489c27e9a8ad5:/server/keymgmt.c 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@ --- *