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.
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 *);
key_file *kf;
fwatch w;
sym_table tab;
key_file *kf;
fwatch w;
sym_table tab;
static void kh_init(keyhalf *kh, const char *kr)
{
static void kh_init(keyhalf *kh, const char *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);
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);
kh->kf = 0;
}
/*----- Main code ---------------------------------------------------------*/
kh->kf = 0;
}
/*----- Main code ---------------------------------------------------------*/
kdata *master;
/* --- @km_init@ --- *
kdata *master;
/* --- @km_init@ --- *
kh_init(&priv, privkr);
kh_init(&pub, pubkr);
kh_init(&priv, privkr);
kh_init(&pub, pubkr);
+ tag_priv = ptag ? xstrdup(ptag) : 0;
if ((master = km_findpriv(ptag)) == 0) exit(EXIT_FAILURE);
}
if ((master = km_findpriv(ptag)) == 0) exit(EXIT_FAILURE);
}
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@ --- *
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 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 */
#ifndef NTRACE
extern const trace_opt tr_opts[]; /* Trace options array */