Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/usr.sbin/rtadvd more careful signed-ness handling in parsing...
details: https://anonhg.NetBSD.org/src/rev/e67bcfdb93b6
branches: trunk
changeset: 474386:e67bcfdb93b6
user: itojun <itojun%NetBSD.org@localhost>
date: Sun Jul 04 22:14:53 1999 +0000
description:
more careful signed-ness handling in parsing config file.
diffstat:
usr.sbin/rtadvd/config.c | 99 ++++++++++++++++++++++++++++-------------------
1 files changed, 59 insertions(+), 40 deletions(-)
diffs (173 lines):
diff -r 186fc005788f -r e67bcfdb93b6 usr.sbin/rtadvd/config.c
--- a/usr.sbin/rtadvd/config.c Sun Jul 04 22:11:06 1999 +0000
+++ b/usr.sbin/rtadvd/config.c Sun Jul 04 22:14:53 1999 +0000
@@ -76,9 +76,7 @@
int stat, pfxs, i;
char tbuf[BUFSIZ];
struct rainfo *tmp;
- char val8;
- short val16;
- int val32;
+ long val;
char buf[BUFSIZ];
char *bp = buf;
char *addr;
@@ -138,19 +136,16 @@
/*
* set router configuration variables.
*/
- MAYHAVE(val32, "maxinterval", DEF_MAXRTRADVINTERVAL);
- tmp->maxinterval = val32;
- if (tmp->maxinterval < MIN_MAXINTERVAL ||
- tmp->maxinterval > MAX_MAXINTERVAL) {
+ MAYHAVE(val, "maxinterval", DEF_MAXRTRADVINTERVAL);
+ if (val < MIN_MAXINTERVAL || val > MAX_MAXINTERVAL) {
syslog(LOG_ERR,
"<%s> maxinterval must be between %d and %d",
__FUNCTION__, MIN_MAXINTERVAL, MAX_MAXINTERVAL);
exit(1);
}
- MAYHAVE(val32, "mininterval", tmp->maxinterval/3);
- tmp->mininterval = val32;
- if (tmp->mininterval < MIN_MININTERVAL ||
- tmp->mininterval > (tmp->maxinterval * 3) / 4) {
+ tmp->maxinterval = (u_int)val;
+ MAYHAVE(val, "mininterval", tmp->maxinterval/3);
+ if (val < MIN_MININTERVAL || val > (tmp->maxinterval * 3) / 4) {
syslog(LOG_ERR,
"<%s> mininterval must be between %d and %d",
__FUNCTION__,
@@ -158,19 +153,17 @@
(tmp->maxinterval * 3) / 4);
exit(1);
}
+ tmp->mininterval = (u_int)val;
- MAYHAVE(val16, "chlim", DEF_ADVCURHOPLIMIT);
- tmp->hoplimit = 0xff & val16;
+ MAYHAVE(val, "chlim", DEF_ADVCURHOPLIMIT);
+ tmp->hoplimit = val & 0xff;
- MAYHAVE(val8, "raflags", 0);
- tmp->managedflg= val8 & ND_RA_FLAG_MANAGED;
- tmp->otherflg = val8 & ND_RA_FLAG_OTHER;
+ MAYHAVE(val, "raflags", 0);
+ tmp->managedflg= val & ND_RA_FLAG_MANAGED;
+ tmp->otherflg = val & ND_RA_FLAG_OTHER;
- MAYHAVE(val32, "rltime", tmp->maxinterval * 3);
- tmp->lifetime = (u_short)val32;
- if (tmp->lifetime &&
- (tmp->lifetime < tmp->maxinterval ||
- tmp->lifetime > MAXROUTERLIFETIME)) {
+ MAYHAVE(val, "rltime", tmp->maxinterval * 3);
+ if (val && (val < tmp->maxinterval || val > MAXROUTERLIFETIME)) {
syslog(LOG_ERR,
"<%s> router lifetime on %s must be 0 or"
" between %d and %d",
@@ -178,18 +171,24 @@
tmp->maxinterval, MAXROUTERLIFETIME);
exit(1);
}
+ tmp->lifetime = val & 0xffff;
- MAYHAVE(val32, "rtime", DEF_ADVREACHABLETIME);
- tmp->reachabletime = (u_int32_t)val32;
- if (tmp->reachabletime > MAXREACHABLETIME) {
+ MAYHAVE(val, "rtime", DEF_ADVREACHABLETIME);
+ if (val > MAXREACHABLETIME) {
syslog(LOG_ERR,
"<%s> reachable time must be no greater than %d",
__FUNCTION__, MAXREACHABLETIME);
exit(1);
}
+ tmp->reachabletime = (u_int32_t)val;
- MAYHAVE(val32, "retrans", DEF_ADVRETRANSTIMER);
- tmp->retranstimer = val32;
+ MAYHAVE(val, "retrans", DEF_ADVRETRANSTIMER);
+ if (val < 0 || val > 0xffffffff) {
+ syslog(LOG_ERR,
+ "<%s> retrans time out of range", __FUNCTION__);
+ exit(1);
+ }
+ tmp->retranstimer = (u_int32_t)val;
/* prefix information */
if ((pfxs = agetnum("addrs")) < 0) {
@@ -208,8 +207,6 @@
for (i = 0; i < pfxs; i++) {
struct prefix *pfx;
char entbuf[256];
- short val16;
- int val32;
int added = (pfxs > 1) ? 1 : 0;
/* allocate memory to store prefix information */
@@ -223,23 +220,40 @@
insque(pfx, &tmp->prefix);
makeentry(entbuf, i, "prefixlen", added);
- MAYHAVE(val32, entbuf, 64);
- pfx->prefixlen = (int)val32;
+ MAYHAVE(val, entbuf, 64);
+ if (val < 0 || val > 128) {
+ syslog(LOG_ERR,
+ "<%s> prefixlen out of range",
+ __FUNCTION__);
+ exit(1);
+ }
+ pfx->prefixlen = (int)val;
makeentry(entbuf, i, "pinfoflags", added);
- MAYHAVE(val16, entbuf,
+ MAYHAVE(val, entbuf,
(ND_OPT_PI_FLAG_ONLINK|ND_OPT_PI_FLAG_AUTO));
- val16 &= 0xc0;
- pfx->onlinkflg = val16 & ND_OPT_PI_FLAG_ONLINK;
- pfx->autoconfflg = val16 & ND_OPT_PI_FLAG_AUTO;
+ pfx->onlinkflg = val & ND_OPT_PI_FLAG_ONLINK;
+ pfx->autoconfflg = val & ND_OPT_PI_FLAG_AUTO;
makeentry(entbuf, i, "vltime", added);
- MAYHAVE(val32, entbuf, DEF_ADVVALIDLIFETIME);
- pfx->validlifetime = (u_int32_t)val32;
+ MAYHAVE(val, entbuf, DEF_ADVVALIDLIFETIME);
+ if (val < 0 || val > 0xffffffff) {
+ syslog(LOG_ERR,
+ "<%s> vltime out of range",
+ __FUNCTION__);
+ exit(1);
+ }
+ pfx->validlifetime = (u_int32_t)val;
makeentry(entbuf, i, "pltime", added);
- MAYHAVE(val32, entbuf, DEF_ADVPREFERREDLIFETIME);
- pfx->preflifetime = (u_int32_t)val32;
+ MAYHAVE(val, entbuf, DEF_ADVPREFERREDLIFETIME);
+ if (val < 0 || val > 0xffffffff) {
+ syslog(LOG_ERR,
+ "<%s> pltime out of range",
+ __FUNCTION__);
+ exit(1);
+ }
+ pfx->preflifetime = (u_int32_t)val;
makeentry(entbuf, i, "addr", added);
addr = (char *)agetstr(entbuf, &bp);
@@ -272,8 +286,13 @@
}
}
- MAYHAVE(val32, "mtu", 0);
- tmp->linkmtu = (u_int32_t)val32;
+ MAYHAVE(val, "mtu", 0);
+ if (val < 0 || val > 0xffffffff) {
+ syslog(LOG_ERR,
+ "<%s> mtu out of range", __FUNCTION__);
+ exit(1);
+ }
+ tmp->linkmtu = (u_int32_t)val;
if (tmp->linkmtu == 0) {
char *mtustr;
Home |
Main Index |
Thread Index |
Old Index