diff -ur twiki/lib/TWiki.cfg twiki_patched/lib/TWiki.cfg --- twiki/lib/TWiki.cfg 2004-08-31 11:35:19.000000000 -0500 +++ twiki_patched/lib/TWiki.cfg 2005-03-31 11:41:14.000000000 -0600 @@ -361,6 +361,10 @@ $logFilename = "$logDir/log%DATE%.txt"; # Pathname of remote users file that maps IP to user : $remoteUserFilename = "$dataDir/remoteusers.txt"; +# Comma separated list of IPs and Networks that are allowed to +# be remembered. Keep it blank to remember all IPs +# Example: $remoteUserNets = '10.1.0.0/16,192.168.0.0/16'; +$remoteUserNets = ''; # %WIKIUSERSTOPIC% : Name of users list topic : $wikiUsersTopicname = "TWikiUsers"; # Pathname of WebUsers topic, used to map Intranet login name diff -ur twiki/lib/TWiki.pm twiki_patched/lib/TWiki.pm --- twiki/lib/TWiki.pm 2004-11-19 23:31:53.000000000 -0600 +++ twiki_patched/lib/TWiki.pm 2005-03-31 11:41:13.000000000 -0600 @@ -62,7 +62,7 @@ $scriptUrlPath $pubUrlPath $pubDir $templateDir $dataDir $logDir $siteWebTopicName $wikiToolName $securityFilter $uploadFilter $debugFilename $warningFilename $htpasswdFilename - $logFilename $remoteUserFilename $wikiUsersTopicname + $logFilename $remoteUserFilename $remoteUserNets $wikiUsersTopicname $userListFilename $doMapUserToWikiName $twikiWebname $mainWebname $mainTopicname $notifyTopicname $wikiPrefsTopicname $webPrefsTopicname @@ -1104,6 +1104,28 @@ return $remoteUser; } + # Only remember if $remoteAddr within $remoteUserNets + if( defined $remoteUserNets and $remoteUserNets ne '' ) { + require NetAddr::IP; + my $match = 0; + foreach my $netstr ( split( /,/, $remoteUserNets ) ) { + my $net = new NetAddr::IP $netstr; + + if( ! defined $net ) { + writeWarning "$netstr is not a valid IP Network address in \$remoteUserNets. Please fix in TWiki.cfg."; + next; + } + if( $net->contains( new NetAddr::IP $remoteAddr ) ) { + $match = 1; + last; + } + } + if( ! $match ) { + return $remoteUser; + } + } + + my $text = &TWiki::Store::readFile( $remoteUserFilename ); # Assume no I18N characters in userids, as for email addresses # FIXME: Needs fixing for IPv6?