]> git.donarmstrong.com Git - debbugs.git/blobdiff - Debbugs/Config.pm
Include the protocol (http://) in gWebDomain and gCGIDomain
[debbugs.git] / Debbugs / Config.pm
index d02629a0490a56342ca2ba7ef08d394c07acf6e4..c40b74d12bc5f1ff24b2baa2fff10395bc5e9202 100644 (file)
@@ -59,28 +59,35 @@ BEGIN {
                                 qw($gMaintainerFileOverride $gPseudoMaintFile $gPseudoDescFile $gPackageSource),
                                 qw($gVersionPackagesDir $gVersionIndex $gBinarySourceMap $gSourceBinaryMap),
                                 qw($gVersionTimeIndex),
-                                qw($gSendmail $gLibPath $gSpamScan @gExcludeFromControl),
+                                qw($gSimpleVersioning),
+                                qw($gCVETracker),
+                                qw($gSendmail @gSendmailArguments $gLibPath $gSpamScan @gExcludeFromControl),
                                 qw(%gSeverityDisplay @gTags @gSeverityList @gStrongSeverities),
+                                qw(%gTagsSingleLetter),
                                 qw(%gSearchEstraier),
                                 qw(%gDistributionAliases),
                                 qw(%gObsoleteSeverities),
                                 qw(@gPostProcessall @gRemovalDefaultDistributionTags @gRemovalDistributionTags @gRemovalArchitectures),
                                 qw(@gRemovalStrongSeverityDefaultDistributionTags),
+                                qw(@gAffectsDistributionTags),
                                 qw(@gDefaultArchitectures),
+                                qw($gMachineName),
                                 qw($gTemplateDir),
                                 qw($gDefaultPackage),
                                 qw($gSpamMaxThreads $gSpamSpamsPerThread $gSpamKeepRunning $gSpamScan $gSpamCrossassassinDb),
                                ],
                     text     => [qw($gBadEmailPrefix $gHTMLTail $gHTMLExpireNote),
                                 ],
+                     cgi => [qw($gLibravatarUri $gLibravatarCacheDir $gLibravatarUriOptions @gLibravatarBlacklist)],
                     config   => [qw(%config)],
                    );
      @EXPORT_OK = ();
-     Exporter::export_ok_tags(qw(globals text config));
+     Exporter::export_ok_tags(keys %EXPORT_TAGS);
      $EXPORT_TAGS{all} = [@EXPORT_OK];
      $ENV{HOME} = '' if not defined $ENV{HOME};
 }
 
+use Sys::Hostname;
 use File::Basename qw(dirname);
 use IO::File;
 use Safe;
@@ -98,13 +105,15 @@ use Safe;
 # untaint $ENV{DEBBUGS_CONFIG_FILE} if it's owned by us
 # This enables us to test things that are -T.
 if (exists $ENV{DEBBUGS_CONFIG_FILE}) {
-     if (${[stat($ENV{DEBBUGS_CONFIG_FILE})]}[4] = $<) {
+# This causes all sorts of problems for mirrors of debbugs; disable
+# it.
+#     if (${[stat($ENV{DEBBUGS_CONFIG_FILE})]}[4] == $<) {
          $ENV{DEBBUGS_CONFIG_FILE} =~ /(.+)/;
          $ENV{DEBBUGS_CONFIG_FILE} = $1;
-     }
-     else {
-         die "Environmental variable DEBBUGS_CONFIG_FILE set, and $ENV{DEBBUGS_CONFIG_FILE} is not owned by the user running this script.";
-     }
+     }
+     else {
+#        die "Environmental variable DEBBUGS_CONFIG_FILE set, and $ENV{DEBBUGS_CONFIG_FILE} is not owned by the user running this script.";
+     }
 }
 read_config(exists $ENV{DEBBUGS_CONFIG_FILE}?$ENV{DEBBUGS_CONFIG_FILE}:'/etc/debbugs/config');
 
@@ -142,12 +151,13 @@ set_default(\%config,'web_host_bug_dir','');
 
 =item web_domain $gWebDomain
 
-Full path of the web domain where bugs are kept, defaults to the
-concatenation of L</web_host> and L</web_host_bug_dir>
+Full path of the web domain where bugs are kept including the protocol (http://
+or https://). Defaults to the concatenation of 'http://', L</web_host> and
+L</web_host_bug_dir>
 
 =cut
 
-set_default(\%config,'web_domain',$config{web_host}.($config{web_host}=~m{/$}?'':'/').$config{web_host_bug_dir});
+set_default(\%config,'web_domain','http://'.$config{web_host}.($config{web_host}=~m{/$}?'':'/').$config{web_host_bug_dir});
 
 =item html_suffix $gHTMLSuffix
 
@@ -160,7 +170,7 @@ set_default(\%config,'html_suffix','.html');
 =item cgi_domain $gCGIDomain
 
 Full path of the web domain where cgi scripts are kept. Defaults to
-the concatentation of L</web_host> and cgi.
+the concatentation of L</web_domain> and cgi.
 
 =cut
 
@@ -201,9 +211,30 @@ Domain where subscriptions to package lists happen
 
 =cut
 
-
 set_default(\%config,'subscription_domain',undef);
 
+
+=item cc_all_mails_to_addr $gCcAllMailsToAddr
+
+Address to Cc (well, Bcc) all e-mails to
+
+=cut
+
+set_default(\%config,'cc_all_mails_to_addr',undef);
+
+
+=item cve_tracker $gCVETracker
+
+URI to CVE security tracker; in bugreport.cgi, CVE-2001-0002 becomes
+linked to http://$config{cve_tracker}CVE-2001-002
+
+Default: security-tracker.debian.org/tracker/
+
+=cut
+
+set_default(\%config,'cve_tracker','security-tracker.debian.org/tracker/');
+
+
 =back
 
 =cut
@@ -269,11 +300,22 @@ Email address where packages with an unknown maintainer will be sent
 
 Default: $config{maintainer_email}
 
+=cut
+
+set_default(\%config,'unknown_maintainer_email',$config{maintainer_email});
+
+=item machine_name
+
+The name of the machine that this instance of debbugs is running on
+(currently used for debbuging purposes and web page output.)
+
+Default: Sys::Hostname::hostname()
+
 =back
 
 =cut
 
-set_default(\%config,'unknown_maintainer_email',$config{maintainer_email});
+set_default(\%config,'machine_name',Sys::Hostname::hostname());
 
 =head2 BTS Mailing Lists
 
@@ -298,6 +340,8 @@ set_default(\%config,'unknown_maintainer_email',$config{maintainer_email});
 
 =item mirror_list
 
+=item strong_list
+
 =cut
 
 set_default(\%config,   'submit_list',   'bug-submit-list');
@@ -327,15 +371,44 @@ Default: list_domain
 set_default(\%config,'bug_subscription_domain',$config{list_domain});
 
 
+
 =head2 Misc Options
 
 =over
 
+=item mailer
+
+Name of the mailer to use
+
+Default: exim
+
 =cut
 
 set_default(\%config,'mailer','exim');
+
+
+=item bug
+
+Default: bug
+
+=item ubug
+
+Default: ucfirst($config{bug});
+
+=item bugs
+
+Default: bugs
+
+=item ubugs
+
+Default: ucfirst($config{ubugs});
+
+=cut
+
 set_default(\%config,'bug','bug');
+set_default(\%config,'ubug',ucfirst($config{bug}));
 set_default(\%config,'bugs','bugs');
+set_default(\%config,'ubugs',ucfirst($config{bugs}));
 
 =item remove_age
 
@@ -416,6 +489,25 @@ set_default(\%config,'default_architectures',
            [qw(i386 amd64 arm powerpc sparc alpha)]
           );
 
+=item affects_distribution_tags
+
+List of tags which restrict the buggy state to a set of distributions.
+
+The set of distributions that are buggy is the intersection of the set
+of distributions that would be buggy without reference to these tags
+and the set of these tags that are distributions which are set on a
+bug.
+
+Setting this to [] will remove this feature.
+
+Default: @{$config{distributions}}
+
+=cut
+
+set_default(\%config,'affects_distribution_tags',
+           [@{$config{distributions}}],
+          );
+
 =item removal_unremovable_tags
 
 Bugs which have these tags set cannot be archived
@@ -444,12 +536,12 @@ set_default(\%config,'removal_distribution_tags',
 For removal/archival purposes, all bugs are assumed to have these tags
 set.
 
-Default: qw(unstable testing);
+Default: qw(experimental unstable testing);
 
 =cut
 
 set_default(\%config,'removal_default_distribution_tags',
-           [qw(unstable testing)]
+           [qw(experimental unstable testing)]
           );
 
 =item removal_strong_severity_default_distribution_tags
@@ -457,12 +549,12 @@ set_default(\%config,'removal_default_distribution_tags',
 For removal/archival purposes, all bugs with strong severity are
 assumed to have these tags set.
 
-Default: qw(unstable testing stable);
+Default: qw(experimental unstable testing stable);
 
 =cut
 
 set_default(\%config,'removal_strong_severity_default_distribution_tags',
-           [qw(unstable testing stable)]
+           [qw(experimental unstable testing stable)]
           );
 
 
@@ -584,7 +676,10 @@ Default:
 
 set_default(\%config,'severity_display',{critical => "Critical $config{bugs}",
                                         grave    => "Grave $config{bugs}",
+                                        serious  => "Serious $config{bugs}",
+                                        important=> "Important $config{bugs}",
                                         normal   => "Normal $config{bugs}",
+                                        minor    => "Minor $config{bugs}",
                                         wishlist => "Wishlist $config{bugs}",
                                        });
 
@@ -642,6 +737,15 @@ set_default(\%config,'tags',[qw(patch wontfix moreinfo unreproducible fixed),
                             @{$config{distributions}}
                            ]);
 
+set_default(\%config,'tags_single_letter',
+           {patch => '+',
+            wontfix => '',
+            moreinfo => 'M',
+            unreproducible => 'R',
+            fixed   => 'F',
+           }
+          );
+
 set_default(\%config,'bounce_froms','^mailer|^da?emon|^post.*mast|^root|^wpuser|^mmdf|^smt.*|'.
            '^mrgate|^vmmail|^mail.*system|^uucp|-maiser-|^mal\@|'.
            '^mail.*agent|^tcpmail|^bitmail|^mailman');
@@ -659,6 +763,16 @@ Default: $config{spool_dir}/user
 
 set_default(\%config,'usertag_dir',$config{spool_dir}.'/user');
 set_default(\%config,'incoming_dir','incoming');
+
+=item web_dir $gWebDir
+
+Directory where base html files are kept. Should normally be the same
+as the web server's document root.
+
+Default: /var/lib/debbugs/www
+
+=cut
+
 set_default(\%config,'web_dir','/var/lib/debbugs/www');
 set_default(\%config,'doc_dir','/var/lib/debbugs/www/txt');
 set_default(\%config,'lib_path','/usr/lib/debbugs');
@@ -675,11 +789,24 @@ set_default(\%config,'template_dir','/usr/share/debbugs/templates');
 
 set_default(\%config,'maintainer_file',$config{config_dir}.'/Maintainers');
 set_default(\%config,'maintainer_file_override',$config{config_dir}.'/Maintainers.override');
-set_default(\%config,'pseudo_maint_file',$config{config_dir}.'/pseudo-packages.maint');
+set_default(\%config,'source_maintainer_file',$config{config_dir}.'/Source_maintainers');
+set_default(\%config,'source_maintainer_file_override',undef);
+set_default(\%config,'pseudo_maint_file',$config{config_dir}.'/pseudo-packages.maintainers');
 set_default(\%config,'pseudo_desc_file',$config{config_dir}.'/pseudo-packages.description');
 set_default(\%config,'package_source',$config{config_dir}.'/indices/sources');
 
 
+=item simple_versioning
+
+If true this causes debbugs to ignore version information and just
+look at whether a bug is done or not done. Primarily of interest for
+debbugs installs which don't track versions. defaults to false.
+
+=cut
+
+set_default(\%config,'simple_versioning',0);
+
+
 =item version_packages_dir
 
 Location where the version package information is kept; defaults to
@@ -742,6 +869,14 @@ Sets the sendmail binary to execute; defaults to /usr/lib/sendmail
 
 set_default(\%config,'sendmail','/usr/lib/sendmail');
 
+=item sendmail_arguments
+
+Default arguments to pass to sendmail. Defaults to C<qw(-oem -oi)>.
+
+=cut
+
+set_default(\%config,'sendmail_arguments',[qw(-oem -oi)]);
+
 =item spam_scan
 
 Whether or not spamscan is being used; defaults to 0 (not being used
@@ -838,6 +973,68 @@ set_default(\%config,'spam_rules_dir','/usr/share/spamassassin');
 
 =back
 
+=head2 CGI Options
+
+=over
+
+=item libravatar_uri $gLibravatarUri
+
+URI to a libravatar configuration. If empty or undefined, libravatar
+support will be disabled. Defaults to
+libravatar.cgi, our internal federated libravatar system.
+
+=cut
+
+set_default(\%config,'libravatar_uri',$config{cgi_domain}.'/libravatar.cgi?email=');
+
+=item libravatar_uri_options $gLibravatarUriOptions
+
+Options to append to the md5_hex of the e-mail. This sets the default
+avatar used when an avatar isn't available. Currently defaults to
+'?d=retro', which causes a bitmap-looking avatar to be displayed for
+unknown e-mails.
+
+Other options which make sense include ?d=404, ?d=wavatar, etc. See
+the API of libravatar for details.
+
+=cut
+
+set_default(\%config,'libravatar_uri_options','');
+
+=item libravatar_default_image
+
+Default image to serve for libravatar if there is no avatar for an
+e-mail address. By default, this is a 1x1 png. [This will also be the
+image served if someone specifies avatar=no.]
+
+Default: $config{web_dir}/1x1.png
+
+=cut
+
+set_default(\%config,'libravatar_default_image',$config{web_dir}.'/1x1.png');
+
+=item libravatar_cache_dir
+
+Directory where cached libravatar images are stored
+
+Default: $config{web_dir}/libravatar/
+
+=cut
+
+set_default(\%config,'libravatar_cache_dir',$config{web_dir}.'/libravatar/');
+
+=item libravatar_blacklist
+
+Array of regular expressions to match against emails, domains, or
+images to only show the default image
+
+Default: empty array
+
+=cut
+
+set_default(\%config,'libravatar_blacklist',[]);
+
+=back
 
 =head2 Text Fields
 
@@ -885,10 +1082,11 @@ set_default(\%config,'html_tail',<<END);
  SUBSTITUTE_DTIME
  <!--timestamp-->
  <P>
- <A HREF=\"http://$config{web_domain}/\">Debian $config{bug} tracking system</A><BR>
+ <A HREF=\"$config{web_domain}/\">Debian $config{bug} tracking system</A><BR>
  Copyright (C) 1999 Darren O. Benham,
  1997,2003 nCipher Corporation Ltd,
  1994-97 Ian Jackson.
+ </P>
  </ADDRESS>
 END
 
@@ -909,6 +1107,10 @@ set_default(\%config,'html_expire_note',
 
 sub read_config{
      my ($conf_file) = @_;
+     if (not -e $conf_file) {
+        print STDERR "configuration file '$conf_file' doesn't exist; skipping it\n" if $DEBUG;
+        return;
+     }
      # first, figure out what type of file we're reading in.
      my $fh = new IO::File $conf_file,'r'
          or die "Unable to open configuration file $conf_file for reading: $!";
@@ -935,7 +1137,7 @@ sub read_config{
          die "Error in configuration file: $@" if $@;
          # Now what we do is check out the contents of %EXPORT_TAGS to see exactly which variables
          # we want to glob in from the configuration file
-         for my $variable (@{$EXPORT_TAGS{globals}}) {
+         for my $variable (map {$_ =~ /^(?:config|all)$/ ? () : @{$EXPORT_TAGS{$_}}} keys %EXPORT_TAGS) {
               my ($hash_name,$glob_name,$glob_type) = __convert_name($variable);
               my $var_glob = $cpt->varglob($glob_name);
               my $value; #= $cpt->reval("return $variable");
@@ -966,7 +1168,7 @@ sub __convert_name{
      $hash_name =~ s/^([\$\%\@])g//;
      my $glob_type = $1;
      my $glob_name = 'g'.$hash_name;
-     $hash_name =~ s/(HTML|CGI)/ucfirst(lc($1))/ge;
+     $hash_name =~ s/(HTML|CGI|CVE)/ucfirst(lc($1))/ge;
      $hash_name =~ s/^([A-Z]+)/lc($1)/e;
      $hash_name =~ s/([A-Z]+)/'_'.lc($1)/ge;
      return $hash_name unless wantarray;