From 28a1de6319da8b481b9b5ec08f070bce65e17bb3 Mon Sep 17 00:00:00 2001 From: Dylan William Hardison Date: Fri, 4 Aug 2017 13:09:47 -0400 Subject: Bug 1387459 - Tidy the Bugzilla/Config/*.pm modules --- Bugzilla/Config/Common.pm | 195 +++++++++++++++++++++++----------------------- 1 file changed, 97 insertions(+), 98 deletions(-) (limited to 'Bugzilla/Config/Common.pm') diff --git a/Bugzilla/Config/Common.pm b/Bugzilla/Config/Common.pm index 897b4e2eb..cbb030a9c 100644 --- a/Bugzilla/Config/Common.pm +++ b/Bugzilla/Config/Common.pm @@ -21,32 +21,32 @@ use Bugzilla::Group; use Bugzilla::Status; use base qw(Exporter); -@Bugzilla::Config::Common::EXPORT = - qw(check_multi check_numeric check_regexp check_url check_group - check_sslbase check_priority check_severity check_platform - check_opsys check_shadowdb check_urlbase check_webdotbase - check_user_verify_class - check_mail_delivery_method check_notification check_utf8 - check_bug_status check_smtp_auth check_theschwartz_available - check_maxattachmentsize check_email - check_comment_taggers_group +@Bugzilla::Config::Common::EXPORT = qw( + check_multi check_numeric check_regexp check_url check_group + check_sslbase check_priority check_severity check_platform + check_opsys check_shadowdb check_urlbase check_webdotbase + check_user_verify_class + check_mail_delivery_method check_notification check_utf8 + check_bug_status check_smtp_auth check_theschwartz_available + check_maxattachmentsize check_email + check_comment_taggers_group ); # Checking functions for the various values sub check_multi { - my ($value, $param) = (@_); + my ( $value, $param ) = (@_); - if ($param->{'type'} eq "s") { - unless (scalar(grep {$_ eq $value} (@{$param->{'choices'}}))) { + if ( $param->{'type'} eq "s" ) { + unless ( scalar( grep { $_ eq $value } ( @{ $param->{'choices'} } ) ) ) { return "Invalid choice '$value' for single-select list param '$param->{'name'}'"; } return ""; } - elsif ($param->{'type'} eq 'm' || $param->{'type'} eq 'o') { - foreach my $chkParam (split(',', $value)) { - unless (scalar(grep {$_ eq $chkParam} (@{$param->{'choices'}}))) { + elsif ( $param->{'type'} eq 'm' || $param->{'type'} eq 'o' ) { + foreach my $chkParam ( split( ',', $value ) ) { + unless ( scalar( grep { $_ eq $chkParam } ( @{ $param->{'choices'} } ) ) ) { return "Invalid choice '$chkParam' for multi-select list param '$param->{'name'}'"; } } @@ -54,14 +54,13 @@ sub check_multi { return ""; } else { - return "Invalid param type '$param->{'type'}' for check_multi(); " . - "contact your Bugzilla administrator"; + return "Invalid param type '$param->{'type'}' for check_multi(); " . "contact your Bugzilla administrator"; } } sub check_numeric { my ($value) = (@_); - if ($value !~ /^[0-9]+$/) { + if ( $value !~ /^[0-9]+$/ ) { return "must be a numeric value"; } return ""; @@ -69,13 +68,13 @@ sub check_numeric { sub check_regexp { my ($value) = (@_); - eval { qr/$value/ }; + eval {qr/$value/}; return $@; } sub check_email { my ($value) = @_; - if ($value !~ $Email::Address::mailbox) { + if ( $value !~ $Email::Address::mailbox ) { return "must be a valid email address."; } return ""; @@ -83,23 +82,24 @@ sub check_email { sub check_sslbase { my $url = shift; - if ($url ne '') { - if ($url !~ m#^https://([^/]+).*/$#) { + if ( $url ne '' ) { + if ( $url !~ m#^https://([^/]+).*/$# ) { return "must be a legal URL, that starts with https and ends with a slash."; } my $host = $1; + # Fall back to port 443 if for some reason getservbyname() fails. - my $port = getservbyname('https', 'tcp') || 443; - if ($host =~ /^(.+):(\d+)$/) { + my $port = getservbyname( 'https', 'tcp' ) || 443; + if ( $host =~ /^(.+):(\d+)$/ ) { $host = $1; $port = $2; } local *SOCK; my $proto = getprotobyname('tcp'); - socket(SOCK, PF_INET, SOCK_STREAM, $proto); + socket( SOCK, PF_INET, SOCK_STREAM, $proto ); my $iaddr = inet_aton($host) || return "The host $host cannot be resolved"; - my $sin = sockaddr_in($port, $iaddr); - if (!connect(SOCK, $sin)) { + my $sin = sockaddr_in( $port, $iaddr ); + if ( !connect( SOCK, $sin ) ) { return "Failed to connect to $host:$port; unable to enable SSL"; } close(SOCK); @@ -109,12 +109,12 @@ sub check_sslbase { sub check_utf8 { my $utf8 = shift; + # You cannot turn off the UTF-8 parameter if you've already converted # your tables to utf-8. my $dbh = Bugzilla->dbh; - if ($dbh->isa('Bugzilla::DB::Mysql') && $dbh->bz_db_is_utf8 && !$utf8) { - return "You cannot disable UTF-8 support, because your MySQL database" - . " is encoded in UTF-8"; + if ( $dbh->isa('Bugzilla::DB::Mysql') && $dbh->bz_db_is_utf8 && !$utf8 ) { + return "You cannot disable UTF-8 support, because your MySQL database" . " is encoded in UTF-8"; } return ""; } @@ -122,9 +122,8 @@ sub check_utf8 { sub check_priority { my ($value) = (@_); my $legal_priorities = get_legal_field_values('priority'); - if (!grep($_ eq $value, @$legal_priorities)) { - return "Must be a legal priority value: one of " . - join(", ", @$legal_priorities); + if ( !grep( $_ eq $value, @$legal_priorities ) ) { + return "Must be a legal priority value: one of " . join( ", ", @$legal_priorities ); } return ""; } @@ -132,9 +131,8 @@ sub check_priority { sub check_severity { my ($value) = (@_); my $legal_severities = get_legal_field_values('bug_severity'); - if (!grep($_ eq $value, @$legal_severities)) { - return "Must be a legal severity value: one of " . - join(", ", @$legal_severities); + if ( !grep( $_ eq $value, @$legal_severities ) ) { + return "Must be a legal severity value: one of " . join( ", ", @$legal_severities ); } return ""; } @@ -142,9 +140,8 @@ sub check_severity { sub check_platform { my ($value) = (@_); my $legal_platforms = get_legal_field_values('rep_platform'); - if (!grep($_ eq $value, '', @$legal_platforms)) { - return "Must be empty or a legal platform value: one of " . - join(", ", @$legal_platforms); + if ( !grep( $_ eq $value, '', @$legal_platforms ) ) { + return "Must be empty or a legal platform value: one of " . join( ", ", @$legal_platforms ); } return ""; } @@ -152,18 +149,17 @@ sub check_platform { sub check_opsys { my ($value) = (@_); my $legal_OS = get_legal_field_values('op_sys'); - if (!grep($_ eq $value, '', @$legal_OS)) { - return "Must be empty or a legal operating system value: one of " . - join(", ", @$legal_OS); + if ( !grep( $_ eq $value, '', @$legal_OS ) ) { + return "Must be empty or a legal operating system value: one of " . join( ", ", @$legal_OS ); } return ""; } sub check_bug_status { my $bug_status = shift; - my @closed_bug_statuses = map {$_->name} closed_bug_statuses(); - if (!grep($_ eq $bug_status, @closed_bug_statuses)) { - return "Must be a valid closed status: one of " . join(', ', @closed_bug_statuses); + my @closed_bug_statuses = map { $_->name } closed_bug_statuses(); + if ( !grep( $_ eq $bug_status, @closed_bug_statuses ) ) { + return "Must be a valid closed status: one of " . join( ', ', @closed_bug_statuses ); } return ""; } @@ -171,8 +167,8 @@ sub check_bug_status { sub check_group { my $group_name = shift; return "" unless $group_name; - my $group = new Bugzilla::Group({'name' => $group_name}); - unless (defined $group) { + my $group = new Bugzilla::Group( { 'name' => $group_name } ); + unless ( defined $group ) { return "Must be an existing group name"; } return ""; @@ -181,11 +177,11 @@ sub check_group { sub check_shadowdb { my ($value) = (@_); $value = trim($value); - if ($value eq "") { + if ( $value eq "" ) { return ""; } - if (!Bugzilla->params->{'shadowdbhost'}) { + if ( !Bugzilla->params->{'shadowdbhost'} ) { return "You need to specify a host when using a shadow database"; } @@ -197,7 +193,7 @@ sub check_shadowdb { sub check_urlbase { my ($url) = (@_); - if ($url && $url !~ m:^http.*/$:) { + if ( $url && $url !~ m:^http.*/$: ) { return "must be a legal URL, that starts with http and ends with a slash."; } return ""; @@ -205,8 +201,8 @@ sub check_urlbase { sub check_url { my ($url) = (@_); - return '' if $url eq ''; # Allow empty URLs - if ($url !~ m:/$:) { + return '' if $url eq ''; # Allow empty URLs + if ( $url !~ m:/$: ) { return 'must be a legal URL, absolute or relative, ending with a slash.'; } return ''; @@ -215,19 +211,22 @@ sub check_url { sub check_webdotbase { my ($value) = (@_); $value = trim($value); - if ($value eq "") { + if ( $value eq "" ) { return ""; } - if($value !~ /^https?:/) { - if(! -x $value) { - return "The file path \"$value\" is not a valid executable. Please specify the complete file path to 'dot' if you intend to generate graphs locally."; + if ( $value !~ /^https?:/ ) { + if ( !-x $value ) { + return + "The file path \"$value\" is not a valid executable. Please specify the complete file path to 'dot' if you intend to generate graphs locally."; } + # Check .htaccess allows access to generated images my $webdotdir = bz_locations()->{'webdotdir'}; - if(-e "$webdotdir/.htaccess") { + if ( -e "$webdotdir/.htaccess" ) { open HTACCESS, "<", "$webdotdir/.htaccess"; - if(! grep(/ \\\.png\$/,)) { - return "Dependency graph images are not accessible.\nAssuming that you have not modified the file, delete $webdotdir/.htaccess and re-run checksetup.pl to rectify.\n"; + if ( !grep( / \\\.png\$/, ) ) { + return + "Dependency graph images are not accessible.\nAssuming that you have not modified the file, delete $webdotdir/.htaccess and re-run checksetup.pl to rectify.\n"; } close HTACCESS; } @@ -236,6 +235,7 @@ sub check_webdotbase { } sub check_user_verify_class { + # doeditparams traverses the list of params, and for each one it checks, # then updates. This means that if one param checker wants to look at # other params, it must be below that other one. So you can't have two @@ -245,24 +245,22 @@ sub check_user_verify_class { # So don't do that. my $params = Bugzilla->params; - my ($list, $entry) = @_; + my ( $list, $entry ) = @_; $list || return 'You need to specify at least one authentication mechanism'; - for my $class (split /,\s*/, $list) { - my $res = check_multi($class, $entry); + for my $class ( split /,\s*/, $list ) { + my $res = check_multi( $class, $entry ); return $res if $res; - if ($class eq 'RADIUS') { - if (!Bugzilla->feature('auth_radius')) { - return "RADIUS support is not available. Run checksetup.pl" - . " for more details"; + if ( $class eq 'RADIUS' ) { + if ( !Bugzilla->feature('auth_radius') ) { + return "RADIUS support is not available. Run checksetup.pl" . " for more details"; } return "RADIUS servername (RADIUS_server) is missing" if !$params->{"RADIUS_server"}; return "RADIUS_secret is empty" if !$params->{"RADIUS_secret"}; } - elsif ($class eq 'LDAP') { - if (!Bugzilla->feature('auth_ldap')) { - return "LDAP support is not available. Run checksetup.pl" - . " for more details"; + elsif ( $class eq 'LDAP' ) { + if ( !Bugzilla->feature('auth_ldap') ) { + return "LDAP support is not available. Run checksetup.pl" . " for more details"; } return "LDAP servername (LDAPserver) is missing" if !$params->{"LDAPserver"}; @@ -276,7 +274,8 @@ sub check_mail_delivery_method { my $check = check_multi(@_); return $check if $check; my $mailer = shift; - if ($mailer eq 'sendmail' and ON_WINDOWS) { + if ( $mailer eq 'sendmail' and ON_WINDOWS ) { + # look for sendmail.exe return "Failed to locate " . SENDMAIL_EXE unless -e SENDMAIL_EXE; @@ -288,59 +287,59 @@ sub check_maxattachmentsize { my $check = check_numeric(@_); return $check if $check; my $size = shift; - my $dbh = Bugzilla->dbh; - if ($dbh->isa('Bugzilla::DB::Mysql')) { - my (undef, $max_packet) = $dbh->selectrow_array( - q{SHOW VARIABLES LIKE 'max\_allowed\_packet'}); + my $dbh = Bugzilla->dbh; + if ( $dbh->isa('Bugzilla::DB::Mysql') ) { + my ( undef, $max_packet ) = $dbh->selectrow_array(q{SHOW VARIABLES LIKE 'max\_allowed\_packet'}); my $byte_size = $size * 1024; - if ($max_packet < $byte_size) { - return "You asked for a maxattachmentsize of $byte_size bytes," - . " but the max_allowed_packet setting in MySQL currently" - . " only allows packets up to $max_packet bytes"; + if ( $max_packet < $byte_size ) { + return + "You asked for a maxattachmentsize of $byte_size bytes," + . " but the max_allowed_packet setting in MySQL currently" + . " only allows packets up to $max_packet bytes"; } } return ""; } sub check_notification { - my $option = shift; - my @current_version = - (BUGZILLA_VERSION =~ m/^(\d+)\.(\d+)(?:(rc|\.)(\d+))?\+?$/); - if ($current_version[1] % 2 && $option eq 'stable_branch_release') { - return "You are currently running a development snapshot, and so your " . - "installation is not based on a branch. If you want to be notified " . - "about the next stable release, you should select " . - "'latest_stable_release' instead"; + my $option = shift; + my @current_version = ( BUGZILLA_VERSION =~ m/^(\d+)\.(\d+)(?:(rc|\.)(\d+))?\+?$/ ); + if ( $current_version[1] % 2 && $option eq 'stable_branch_release' ) { + return + "You are currently running a development snapshot, and so your " + . "installation is not based on a branch. If you want to be notified " + . "about the next stable release, you should select " + . "'latest_stable_release' instead"; } - if ($option ne 'disabled' && !Bugzilla->feature('updates')) { - return "Some Perl modules are missing to get notifications about " . - "new releases. See the output of checksetup.pl for more information"; + if ( $option ne 'disabled' && !Bugzilla->feature('updates') ) { + return "Some Perl modules are missing to get notifications about " + . "new releases. See the output of checksetup.pl for more information"; } return ""; } sub check_smtp_auth { my $username = shift; - if ($username and !Bugzilla->feature('smtp_auth')) { - return "SMTP Authentication is not available. Run checksetup.pl for" - . " more details"; + if ( $username and !Bugzilla->feature('smtp_auth') ) { + return "SMTP Authentication is not available. Run checksetup.pl for" . " more details"; } return ""; } sub check_theschwartz_available { my $use_queue = shift; - if ($use_queue && !Bugzilla->feature('jobqueue')) { - return "Using the job queue requires that you have certain Perl" - . " modules installed. See the output of checksetup.pl" - . " for more information"; + if ( $use_queue && !Bugzilla->feature('jobqueue') ) { + return + "Using the job queue requires that you have certain Perl" + . " modules installed. See the output of checksetup.pl" + . " for more information"; } return ""; } sub check_comment_taggers_group { my $group_name = shift; - if ($group_name && !Bugzilla->feature('jsonrpc')) { + if ( $group_name && !Bugzilla->feature('jsonrpc') ) { return "Comment tagging requires installation of the JSONRPC feature"; } return check_group($group_name); -- cgit v1.2.3-24-g4f1b