~mdw
/
tripe
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
server/keymgmt.c: Capture copies of the keyring and tag strings.
[tripe]
/
server
/
keymgmt.c
diff --git
a/server/keymgmt.c
b/server/keymgmt.c
index
a72164e
..
48e4de6
100644
(file)
--- 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 *kind;
int (*load)(key_file *, key *, key_data *,
const dhops *, kdata *, dstr *, dstr *);
- c
onst c
har *kr;
+ char *kr;
key_file *kf;
fwatch w;
sym_table tab;
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)
{
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);
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);
if (kn->kd) km_unref(kn->kd);
sym_destroy(&kh->tab);
key_close(kh->kf);
+ xfree(kh->kr);
kh->kf = 0;
}
/*----- Main code ---------------------------------------------------------*/
kh->kf = 0;
}
/*----- Main code ---------------------------------------------------------*/
-c
onst char *tag_priv
;
+c
har *tag_priv = 0
;
kdata *master;
/* --- @km_init@ --- *
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);
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);
}
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; }
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@ --- *
}
/* --- @km_findpub@, @km_findpriv@ --- *