X-Git-Url: https://git.ladys.computer/Gitweb/blobdiff_plain/315cc1be722664043b30df1c3ae440e2f8886f9e9793b9812d099cc75783ebdb..31fa693948b9e688aef8adaae5c6dc8487287c6dee3f868e5de71452c0b4df83:/gitweb.cgi diff --git a/gitweb.cgi b/gitweb.cgi index 871ad1f..f6d1d97 100755 --- a/gitweb.cgi +++ b/gitweb.cgi @@ -1,6 +1,6 @@ #!/usr/bin/perl -# gitweb.pl - simple web interface to track changes in git repositories +# gitweb - simple web interface to track changes in git repositories # # (C) 2005, Kay Sievers # (C) 2005, Christian Gierke @@ -9,12 +9,13 @@ use strict; use warnings; -use CGI qw(:standard :escapeHTML); +use CGI qw(:standard :escapeHTML -nosticky); +use CGI::Util qw(unescape); use CGI::Carp qw(fatalsToBrowser); use Fcntl ':mode'; my $cgi = new CGI; -my $version = "143"; +my $version = "220"; my $my_url = $cgi->url(); my $my_uri = $cgi->url(-absolute => 1); my $rss_link = ""; @@ -26,7 +27,7 @@ my $projectroot = "/pub/scm"; my $gitbin = "/usr/bin"; # location for temporary files needed for diffs -my $gittmp = "/tmp/gitweb"; +my $git_temp = "/tmp/gitweb"; # target of the home link on top of all pages my $home_link = $my_uri; @@ -36,18 +37,21 @@ my $home_text = "indextext.html"; # source of projects list #my $projects_list = $projectroot; -my $projects_list = "index/index.txt"; +my $projects_list = "index/index.aux"; # input validation and dispatch my $action = $cgi->param('a'); if (defined $action) { - if ($action =~ m/[^0-9a-zA-Z\.\-]+/) { + if ($action =~ m/[^0-9a-zA-Z\.\-_]+/) { undef $action; die_error(undef, "Invalid action parameter."); } if ($action eq "git-logo.png") { git_logo(); exit; + } elsif ($action eq "opml") { + git_opml(); + exit; } } else { $action = "summary"; @@ -73,7 +77,6 @@ if (defined $project) { } $rss_link = ""; $ENV{'GIT_OBJECT_DIRECTORY'} = "$projectroot/$project/objects"; - $ENV{'SHA1_FILE_DIRECTORY'} = "$projectroot/$project/objects"; } else { git_project_list(); exit; @@ -109,23 +112,39 @@ if (defined $hash_base && !($hash_base =~ m/^[0-9a-fA-F]{40}$/)) { die_error(undef, "Invalid parent hash parameter."); } -my $time_back = $cgi->param('t'); -if (defined $time_back) { - if ($time_back =~ m/^[^0-9]+$/) { - undef $time_back; - die_error(undef, "Invalid time parameter."); +my $page = $cgi->param('pg'); +if (defined $page) { + if ($page =~ m/^[^0-9]+$/) { + undef $page; + die_error(undef, "Invalid page parameter."); + } +} + + +my $searchtext = $cgi->param('s'); +if (defined $searchtext) { + if ($searchtext =~ m/[^a-zA-Z0-9_\.\/\-\+\:\@ ]/) { + undef $searchtext; + die_error(undef, "Invalid search parameter."); } + $searchtext = quotemeta $searchtext; } if ($action eq "summary") { git_summary(); exit; +} elsif ($action eq "branches") { + git_branches(); + exit; } elsif ($action eq "tags") { git_tags(); exit; } elsif ($action eq "blob") { git_blob(); exit; +} elsif ($action eq "blob_plain") { + git_blob_plain(); + exit; } elsif ($action eq "tree") { git_tree(); exit; @@ -141,12 +160,24 @@ if ($action eq "summary") { } elsif ($action eq "blobdiff") { git_blobdiff(); exit; +} elsif ($action eq "blobdiff_plain") { + git_blobdiff_plain(); + exit; } elsif ($action eq "commitdiff") { git_commitdiff(); exit; +} elsif ($action eq "commitdiff_plain") { + git_commitdiff_plain(); + exit; } elsif ($action eq "history") { git_history(); exit; +} elsif ($action eq "search") { + git_search(); + exit; +} elsif ($action eq "shortlog") { + git_shortlog(); + exit; } else { undef $action; die_error(undef, "Unknown action."); @@ -170,6 +201,8 @@ sub git_header_html { + + $title $rss_link