summaryrefslogtreecommitdiffstats
path: root/lib/libalias/alias.c
diff options
context:
space:
mode:
authorbrian <brian@FreeBSD.org>1999-06-22 11:20:03 +0000
committerbrian <brian@FreeBSD.org>1999-06-22 11:20:03 +0000
commitc630b9512122039558f73abb4efdedc98da7e268 (patch)
treee8e9b7a26a41f420e4d29a0f13e43753599061db /lib/libalias/alias.c
parentec871a354c08172834bebb1450ec8f2c31ad2a6c (diff)
downloadFreeBSD-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.c16
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();
OpenPOWER on IntegriCloud