diff options
author | brian <brian@FreeBSD.org> | 1999-06-22 11:20:03 +0000 |
---|---|---|
committer | brian <brian@FreeBSD.org> | 1999-06-22 11:20:03 +0000 |
commit | c630b9512122039558f73abb4efdedc98da7e268 (patch) | |
tree | e8e9b7a26a41f420e4d29a0f13e43753599061db /lib/libalias/alias.c | |
parent | ec871a354c08172834bebb1450ec8f2c31ad2a6c (diff) | |
download | FreeBSD-src-c630b9512122039558f73abb4efdedc98da7e268.zip FreeBSD-src-c630b9512122039558f73abb4efdedc98da7e268.tar.gz |
Don't get caught in an infinite recursion when PKT_ALIAS_REVERSE
is set.
Document PKT_ALIAS_REVERSE.
Pointed out by: Jonathan Hanna <jh@cr1003333-a.crdva1.bc.home.com>
PR: 12304
Diffstat (limited to 'lib/libalias/alias.c')
-rw-r--r-- | lib/libalias/alias.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/libalias/alias.c b/lib/libalias/alias.c index 10e0ccc..8b18a73 100644 --- a/lib/libalias/alias.c +++ b/lib/libalias/alias.c @@ -1174,8 +1174,12 @@ PacketAliasIn(char *ptr, int maxpacketsize) struct ip *pip; int iresult; - if (packetAliasMode & PKT_ALIAS_REVERSE) - return PacketAliasOut(ptr, maxpacketsize); + if (packetAliasMode & PKT_ALIAS_REVERSE) { + packetAliasMode &= ~PKT_ALIAS_REVERSE; + iresult = PacketAliasOut(ptr, maxpacketsize); + packetAliasMode |= PKT_ALIAS_REVERSE; + return iresult; + } HouseKeeping(); ClearCheckNewLink(); @@ -1256,8 +1260,12 @@ PacketAliasOut(char *ptr, /* valid IP packet */ struct in_addr addr_save; struct ip *pip; - if (packetAliasMode & PKT_ALIAS_REVERSE) - return PacketAliasIn(ptr, maxpacketsize); + if (packetAliasMode & PKT_ALIAS_REVERSE) { + packetAliasMode &= ~PKT_ALIAS_REVERSE; + iresult = PacketAliasIn(ptr, maxpacketsize); + packetAliasMode |= PKT_ALIAS_REVERSE; + return iresult; + } HouseKeeping(); ClearCheckNewLink(); |