]> git.donarmstrong.com Git - debbugs.git/blobdiff - Debbugs/Config.pm
use Sys::Hostname::hostname instead of hostname --fqdn
[debbugs.git] / Debbugs / Config.pm
index eeea7641a4a21fea55a53fa8a28ea9f14f7d5699..f70860452e042af31667570c5ccb3aa418044314 100644 (file)
@@ -59,7 +59,9 @@ BEGIN {
                                 qw($gMaintainerFileOverride $gPseudoMaintFile $gPseudoDescFile $gPackageSource),
                                 qw($gVersionPackagesDir $gVersionIndex $gBinarySourceMap $gSourceBinaryMap),
                                 qw($gVersionTimeIndex),
                                 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(%gSeverityDisplay @gTags @gSeverityList @gStrongSeverities),
                                 qw(%gTagsSingleLetter),
                                 qw(%gSearchEstraier),
@@ -76,14 +78,16 @@ BEGIN {
                                ],
                     text     => [qw($gBadEmailPrefix $gHTMLTail $gHTMLExpireNote),
                                 ],
                                ],
                     text     => [qw($gBadEmailPrefix $gHTMLTail $gHTMLExpireNote),
                                 ],
+                     cgi => [qw($gLibravatarUri $gLibravatarCacheDir $gLibravatarUriOptions @gLibravatarBlacklist)],
                     config   => [qw(%config)],
                    );
      @EXPORT_OK = ();
                     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};
 }
 
      $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;
 use File::Basename qw(dirname);
 use IO::File;
 use Safe;
@@ -101,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}) {
 # 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;
          $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');
 
 }
 read_config(exists $ENV{DEBBUGS_CONFIG_FILE}?$ENV{DEBBUGS_CONFIG_FILE}:'/etc/debbugs/config');
 
@@ -204,9 +210,21 @@ Domain where subscriptions to package lists happen
 
 =cut
 
 
 =cut
 
-
 set_default(\%config,'subscription_domain',undef);
 
 set_default(\%config,'subscription_domain',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
 =back
 
 =cut
@@ -281,18 +299,13 @@ set_default(\%config,'unknown_maintainer_email',$config{maintainer_email});
 The name of the machine that this instance of debbugs is running on
 (currently used for debbuging purposes and web page output.)
 
 The name of the machine that this instance of debbugs is running on
 (currently used for debbuging purposes and web page output.)
 
-Default: qx(hostname --fqdn)
+Default: Sys::Hostname::hostname()
 
 =back
 
 =cut
 
 
 =back
 
 =cut
 
-my $_old_path = $ENV{PATH};
-$ENV{PATH} = '/bin:/usr/bin:/usr/local/bin';
-my $temp_hostname = qx(hostname --fqdn);
-chomp $temp_hostname;
-set_default(\%config,'machine_name',$temp_hostname);
-$ENV{PATH} = $_old_path;
+set_default(\%config,'machine_name',Sys::Hostname::hostname());
 
 =head2 BTS Mailing Lists
 
 
 =head2 BTS Mailing Lists
 
@@ -348,6 +361,7 @@ Default: list_domain
 set_default(\%config,'bug_subscription_domain',$config{list_domain});
 
 
 set_default(\%config,'bug_subscription_domain',$config{list_domain});
 
 
+
 =head2 Misc Options
 
 =over
 =head2 Misc Options
 
 =over
@@ -739,6 +753,16 @@ Default: $config{spool_dir}/user
 
 set_default(\%config,'usertag_dir',$config{spool_dir}.'/user');
 set_default(\%config,'incoming_dir','incoming');
 
 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');
 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');
@@ -757,11 +781,22 @@ set_default(\%config,'maintainer_file',$config{config_dir}.'/Maintainers');
 set_default(\%config,'maintainer_file_override',$config{config_dir}.'/Maintainers.override');
 set_default(\%config,'source_maintainer_file',$config{config_dir}.'/Source_maintainers');
 set_default(\%config,'source_maintainer_file_override',undef);
 set_default(\%config,'maintainer_file_override',$config{config_dir}.'/Maintainers.override');
 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.maint');
+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');
 
 
 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
 =item version_packages_dir
 
 Location where the version package information is kept; defaults to
@@ -824,6 +859,14 @@ Sets the sendmail binary to execute; defaults to /usr/lib/sendmail
 
 set_default(\%config,'sendmail','/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
 =item spam_scan
 
 Whether or not spamscan is being used; defaults to 0 (not being used
@@ -920,6 +963,68 @@ set_default(\%config,'spam_rules_dir','/usr/share/spamassassin');
 
 =back
 
 
 =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','http://'.$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
 
 
 =head2 Text Fields
 
@@ -991,6 +1096,10 @@ set_default(\%config,'html_expire_note',
 
 sub read_config{
      my ($conf_file) = @_;
 
 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: $!";
      # 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: $!";
@@ -1017,7 +1126,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
          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");
               my ($hash_name,$glob_name,$glob_type) = __convert_name($variable);
               my $var_glob = $cpt->varglob($glob_name);
               my $value; #= $cpt->reval("return $variable");
@@ -1048,7 +1157,7 @@ sub __convert_name{
      $hash_name =~ s/^([\$\%\@])g//;
      my $glob_type = $1;
      my $glob_name = 'g'.$hash_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;
      $hash_name =~ s/^([A-Z]+)/lc($1)/e;
      $hash_name =~ s/([A-Z]+)/'_'.lc($1)/ge;
      return $hash_name unless wantarray;