X-Git-Url: https://git.distorted.org.uk/~mdw/tripe/blobdiff_plain/eb5f3fea8a65306e424a353951208b11bd3aac22..9e0161ce6242483f0400c561014ea8bf12df6d45:/server/peer.c diff --git a/server/peer.c b/server/peer.c index 3cb12ea2..456efd77 100644 --- a/server/peer.c +++ b/server/peer.c @@ -737,14 +737,16 @@ peer *p_create(peerspec *spec) T( trace(T_PEER, "peer: creating new peer `%s'", spec->name); ) p->spec = *spec; p->spec.name = (/*unconst*/ char *)SYM_NAME(p->byname); + if (spec->tag) + p->spec.tag = xstrdup(spec->tag); p->ks = 0; p->pings = 0; p->ifname = 0; memset(&p->st, 0, sizeof(stats)); p->st.t_start = time(0); - if (!tops->open) + if (!(tops->flags & TUNF_PRIVOPEN)) fd = -1; - else if ((fd = tops->open(&p->ifname)) < 0) + else if ((fd = ps_tunfd(tops, &p->ifname)) < 0) goto tidy_2; if ((p->t = tops->create(p, fd, &p->ifname)) == 0) goto tidy_3; @@ -773,6 +775,7 @@ tidy_3: if (fd >= 0) close(fd); tidy_2: am_remove(&byaddr, p->byaddr); + if (p->spec.tag) xfree(p->spec.tag); tidy_1: sym_remove(&byname, p->byname); tidy_0: @@ -789,6 +792,16 @@ tidy_0: const char *p_name(peer *p) { return (p->spec.name); } +/* --- @p_tag@ --- * + * + * Arguments: @peer *p@ = pointer to a peer block + * + * Returns: A pointer to the peer's public key tag. + */ + +const char *p_tag(peer *p) + { return (p->spec.tag ? p->spec.tag : p->spec.name); } + /* --- @p_spec@ --- * * * Arguments: @peer *p@ = pointer to a peer block @@ -853,6 +866,8 @@ void p_destroy(peer *p) kx_free(&p->kx); if (p->ifname) xfree(p->ifname); + if (p->spec.tag) + xfree(p->spec.tag); p->t->ops->destroy(p->t); if (p->spec.t_ka) sel_rmtimer(&p->tka);