From bc3da73c9bfb25bab7416b473bdbcbed38d7ef3f Mon Sep 17 00:00:00 2001 From: "bugreport%peshkin.net" <> Date: Wed, 27 Nov 2002 22:46:05 +0000 Subject: Bug 173761 Need ability to always require login patch by joel r=gerv, a=justdave --- CGI.pl | 23 +++++++++++++++++++---- defparams.pl | 9 +++++++++ index.cgi | 2 +- token.cgi | 2 +- 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/CGI.pl b/CGI.pl index 84c54ad6d..24f92c072 100644 --- a/CGI.pl +++ b/CGI.pl @@ -219,7 +219,14 @@ sub get_netaddr { return join(".", unpack("CCCC", pack("N", $addr))); } -sub quietly_check_login() { +my $login_cookie_set = 0; +# If quietly_check_login is called with no arguments and logins are +# required, it will prompt for a login. +sub quietly_check_login { + if (Param('requirelogin') && !(@_)) { + confirm_login(); + return; + } $::disabledreason = ''; my $userid = 0; my $ipaddr = $ENV{'REMOTE_ADDR'}; @@ -561,11 +568,19 @@ sub confirm_login { $::COOKIE{"Bugzilla_logincookie"} = $logincookie; my $cookiepath = Param("cookiepath"); - print "Set-Cookie: Bugzilla_login= " . url_quote($enteredlogin) . " ; path=$cookiepath; expires=Sun, 30-Jun-2029 00:00:00 GMT\n"; - print "Set-Cookie: Bugzilla_logincookie=$logincookie ; path=$cookiepath; expires=Sun, 30-Jun-2029 00:00:00 GMT\n"; + if ($login_cookie_set == 0) { + $login_cookie_set = 1; + print "Set-Cookie: Bugzilla_login= " . url_quote($enteredlogin) . " ; path=$cookiepath; expires=Sun, 30-Jun-2029 00:00:00 GMT\n"; + print "Set-Cookie: Bugzilla_logincookie=$logincookie ; path=$cookiepath; expires=Sun, 30-Jun-2029 00:00:00 GMT\n"; + } } - $userid = quietly_check_login(); + # If anonymous logins are disabled, quietly_check_login will force + # the user to log in by calling confirm_login() when called by any + # code that does not call it with an argument. When confirm_login + # calls quietly_check_login, it must not result in confirm_login + # being called back. + $userid = quietly_check_login('do_not_recurse_here'); if (!$userid) { if ($::disabledreason) { diff --git a/defparams.pl b/defparams.pl index b0567c783..ae0923295 100644 --- a/defparams.pl +++ b/defparams.pl @@ -963,6 +963,15 @@ Reason: %reason% checker => \&check_netmask }, + { + name => 'requirelogin', + desc => 'If this option is set, all access to the system beyond the ' . + ' front page will require a login. No anonymous users will ' . + ' be permitted.', + type => 'b', + default => '0' + }, + { name => 'usermatchmode', desc => 'Allow match strings to be entered for user names when entering ' . diff --git a/index.cgi b/index.cgi index 7e9fb5aab..f6e11ac21 100755 --- a/index.cgi +++ b/index.cgi @@ -45,7 +45,7 @@ use vars qw( ConnectToDatabase(); # Check whether or not the user is logged in and, if so, set the $::userid -quietly_check_login(); +quietly_check_login('permit_anonymous'); ############################################################################### # Main Body Execution diff --git a/token.cgi b/token.cgi index d4055d058..9a7efb5c5 100755 --- a/token.cgi +++ b/token.cgi @@ -36,7 +36,7 @@ require "CGI.pl"; # Establish a connection to the database backend. ConnectToDatabase(); -quietly_check_login(); +quietly_check_login('permit_anonymous'); # Use the "Token" module that contains functions for doing various # token-related tasks. -- cgit v1.2.1