diff options
-rw-r--r-- | IkiWiki.pm | 1 | ||||
-rw-r--r-- | IkiWiki/CGI.pm | 22 | ||||
-rw-r--r-- | IkiWiki/Wrapper.pm | 2 | ||||
-rw-r--r-- | debian/changelog | 6 | ||||
-rw-r--r-- | doc/ikiwiki.setup | 2 | ||||
-rwxr-xr-x | ikiwiki.pl | 1 |
6 files changed, 32 insertions, 2 deletions
diff --git a/IkiWiki.pm b/IkiWiki.pm index 1a00f2dbd..5c62c7f9b 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -62,6 +62,7 @@ sub defaultconfig () { #{{{ timeformat => '%c', locale => undef, sslcookie => 0, + httpauth => 0, } #}}} sub checkconfig () { #{{{ diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm index f550b673a..b42489210 100644 --- a/IkiWiki/CGI.pm +++ b/IkiWiki/CGI.pm @@ -314,6 +314,11 @@ sub cgi_prefs ($$) { #{{{ if (! is_admin($user_name)) { $form->field(name => "locked_pages", type => "hidden"); } + + if ($config{httpauth}) { + $form->field(name => "password", type => "hidden"); + $form->field(name => "confirm_password", type => "hidden"); + } if (! $form->submitted) { $form->field(name => "email", force => 1, @@ -643,6 +648,7 @@ sub cgi () { #{{{ # Everything below this point needs the user to be signed in. if (((! $config{anonok} || $do eq 'prefs') && + (! $config{httpauth}) && (! defined $session->param("name") || ! userinfo_get($session->param("name"), "regdate"))) || $do eq 'signin') { cgi_signin($q, $session); @@ -654,6 +660,22 @@ sub cgi () { #{{{ return; } + + if ($config{httpauth} && (! defined $session->param("name"))) { + if (! defined $q->remote_user()) { + error("Could not determine authenticated username."); + } + else { + $session->param("name", $q->remote_user()); + if (!userinfo_get($session->param("name"),"regdate")) { + userinfo_setall($session->param("name"), { + email => "", + password => "", + regdate=>time, + }); + } + } + } if ($do eq 'create' || $do eq 'edit') { cgi_editpage($q, $session); diff --git a/IkiWiki/Wrapper.pm b/IkiWiki/Wrapper.pm index 4a98af622..a3ecccd5b 100644 --- a/IkiWiki/Wrapper.pm +++ b/IkiWiki/Wrapper.pm @@ -28,7 +28,7 @@ sub gen_wrapper () { #{{{ my @envsave; push @envsave, qw{REMOTE_ADDR QUERY_STRING REQUEST_METHOD REQUEST_URI CONTENT_TYPE CONTENT_LENGTH GATEWAY_INTERFACE - HTTP_COOKIE} if $config{cgi}; + HTTP_COOKIE REMOTE_USER} if $config{cgi}; my $envsave=""; foreach my $var (@envsave) { $envsave.=<<"EOF" diff --git a/debian/changelog b/debian/changelog index a6c7821f5..b037b517a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,12 @@ ikiwiki (1.29) UNRELEASED; urgency=low * Patch from Paul Tötterman to use CP in the Makefile. + * Patch from Alec Berryman adding a http_auth config item that allows + using HTTP Authentication instead of ikiwiki's built in authentication. + Useful for eg, large sites with their own previously existing user auth + setup. Closes: #384534 - -- Joey Hess <joeyh@debian.org> Thu, 28 Sep 2006 19:10:58 -0400 + -- Joey Hess <joeyh@debian.org> Mon, 2 Oct 2006 18:50:29 -0400 ikiwiki (1.28) unstable; urgency=low diff --git a/doc/ikiwiki.setup b/doc/ikiwiki.setup index a9d9414c0..18c413e6f 100644 --- a/doc/ikiwiki.setup +++ b/doc/ikiwiki.setup @@ -86,6 +86,8 @@ use IkiWiki::Setup::Standard { #locale => 'en_US.UTF-8', # Only send cookies over SSL connections. #sslcookie => 1, + # Use HTTP Authentication instead of Ikiwiki's. + #httpauth => 1, # Logging settings: verbose => 0, syslog => 0, diff --git a/ikiwiki.pl b/ikiwiki.pl index b4cf0e64a..b9a0db7e4 100755 --- a/ikiwiki.pl +++ b/ikiwiki.pl @@ -47,6 +47,7 @@ sub getconfig () { #{{{ "adminemail=s" => \$config{adminemail}, "timeformat=s" => \$config{timeformat}, "sslcookie!" => \$config{sslcookie}, + "httpauth!" => \$config{httpauth}, "exclude=s@" => sub { $config{wiki_file_prune_regexp}=qr/$config{wiki_file_prune_regexp}|$_[1]/; }, |