diff options
author | Angelos D. Keromytis <angelos@cvs.openbsd.org> | 2001-01-05 05:23:47 +0000 |
---|---|---|
committer | Angelos D. Keromytis <angelos@cvs.openbsd.org> | 2001-01-05 05:23:47 +0000 |
commit | bfd1c6f53c2ea423d1b3f84ff173ad077cf0b25b (patch) | |
tree | a9c55a16984ec6f34d690a44e0d408fdad7211f0 /sbin/routed | |
parent | 29983c42f2f1c3b88530ec2d2114271c1cc3388d (diff) |
Fix sending/receiving passwords (james@oaktree.co.uk)
Diffstat (limited to 'sbin/routed')
-rw-r--r-- | sbin/routed/input.c | 12 | ||||
-rw-r--r-- | sbin/routed/output.c | 23 |
2 files changed, 19 insertions, 16 deletions
diff --git a/sbin/routed/input.c b/sbin/routed/input.c index 2aa8a4c766f..e03b88465d9 100644 --- a/sbin/routed/input.c +++ b/sbin/routed/input.c @@ -1,4 +1,4 @@ -/* $OpenBSD: input.c,v 1.9 1997/07/30 23:28:41 deraadt Exp $ */ +/* $OpenBSD: input.c,v 1.10 2001/01/05 05:23:46 angelos Exp $ */ /* * Copyright (c) 1983, 1988, 1993 @@ -36,7 +36,7 @@ #if !defined(lint) static char sccsid[] = "@(#)input.c 8.1 (Berkeley) 6/5/93"; #else -static char rcsid[] = "$OpenBSD: input.c,v 1.9 1997/07/30 23:28:41 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: input.c,v 1.10 2001/01/05 05:23:46 angelos Exp $"; #endif #include "defs.h" @@ -90,6 +90,7 @@ input(struct sockaddr_in *from, /* received from this IP address */ struct interface *aifp; /* interface if via 1 hop */ struct rt_entry *rt; struct netinfo *n, *lim; + struct netauth *nap; struct interface *ifp1; naddr gate, mask, v1_mask, dst, ddst_h; int i; @@ -415,17 +416,16 @@ input(struct sockaddr_in *from, /* received from this IP address */ /* Authenticate the packet if we have a secret. */ if (aifp->int_passwd[0] != '\0') { + nap = (struct netauth *)(&n->n_tag); if (n >= lim || n->n_family != RIP_AF_AUTH - || ((struct netauth*)n)->a_type != RIP_AUTH_PW) { + || nap->a_type != RIP_AUTH_PW) { if (from->sin_addr.s_addr != use_auth) msglog("missing password from %s", naddr_ntoa(FROM_NADDR)); use_auth = from->sin_addr.s_addr; return; - - } else if (0 != bcmp(((struct netauth*)n)->au.au_pw, - aifp->int_passwd, + } else if (0 != bcmp(nap->au.au_pw, aifp->int_passwd, sizeof(aifp->int_passwd))) { if (from->sin_addr.s_addr != use_auth) msglog("bad password from %s", diff --git a/sbin/routed/output.c b/sbin/routed/output.c index 7c079a66f94..a19872cb17c 100644 --- a/sbin/routed/output.c +++ b/sbin/routed/output.c @@ -1,4 +1,4 @@ -/* $OpenBSD: output.c,v 1.5 1997/07/30 23:28:43 deraadt Exp $ */ +/* $OpenBSD: output.c,v 1.6 2001/01/05 05:23:46 angelos Exp $ */ /* * Copyright (c) 1983, 1988, 1993 @@ -36,7 +36,7 @@ #if !defined(lint) static char sccsid[] = "@(#)output.c 8.1 (Berkeley) 6/5/93"; #else -static char rcsid[] = "$OpenBSD: output.c,v 1.5 1997/07/30 23:28:43 deraadt Exp $"; +static char rcsid[] = "$OpenBSD: output.c,v 1.6 2001/01/05 05:23:46 angelos Exp $"; #endif #include "defs.h" @@ -204,13 +204,16 @@ output(enum output_type type, static void set_auth(struct ws_buf *w) { + struct netauth *nap; + if (ws.ifp != 0 && ws.ifp->int_passwd[0] != '\0' && (ws.state & WS_ST_RIP2_SAFE)) { + nap = (struct netauth *)(&w->n->n_tag); w->n->n_family = RIP_AF_AUTH; - ((struct netauth*)w->n)->a_type = RIP_AUTH_PW; - bcopy(ws.ifp->int_passwd, ((struct netauth*)w->n)->au.au_pw, - sizeof(((struct netauth*)w->n)->au.au_pw)); + nap->a_type = RIP_AUTH_PW; + bcopy(ws.ifp->int_passwd, nap->au.au_pw, + sizeof(nap->au.au_pw)); w->n++; } } @@ -617,11 +620,6 @@ supply(struct sockaddr_in *dst, } ripv12_buf.rip.rip_vers = vers; - ws.v12.n = ws.v12.base; - set_auth(&ws.v12); - ws.v2.n = ws.v2.base; - set_auth(&ws.v2); - switch (type) { case OUT_BROADCAST: ws.v2.type = ((ws.ifp != 0 @@ -671,6 +669,11 @@ supply(struct sockaddr_in *dst, ws.state |= WS_ST_SUB_AG; } + ws.v12.n = ws.v12.base; + set_auth(&ws.v12); + ws.v2.n = ws.v2.base; + set_auth(&ws.v2); + if (supplier) { /* Fake a default route if asked, and if there is not * a better, real default route. |