Merge branch 'master' of git.freeside.biz:/home/git/freeside
authorIvan Kohler <ivan@freeside.biz>
Sun, 19 Oct 2014 19:19:17 +0000 (12:19 -0700)
committerIvan Kohler <ivan@freeside.biz>
Sun, 19 Oct 2014 19:19:17 +0000 (12:19 -0700)
12 files changed:
FS/FS/Conf.pm
FS/FS/Misc/Geo.pm
httemplate/edit/part_pkg.cgi
httemplate/search/contact.html [new file with mode: 0644]
httemplate/search/elements/search.html
rt/etc/upgrade/3.8-branded-queues-extension [deleted file]
rt/etc/upgrade/3.8-ical-extension [deleted file]
rt/etc/upgrade/generate-rtaddressregexp [deleted file]
rt/etc/upgrade/split-out-cf-categories [deleted file]
rt/etc/upgrade/vulnerable-passwords [deleted file]
rt/t/data/configs/apache2.2+fastcgi.conf [deleted file]
rt/t/data/configs/apache2.2+mod_perl.conf [deleted file]

index 940303f..e410586 100644 (file)
@@ -4330,7 +4330,6 @@ and customer address. Include units.',
     'type'        => 'select',
     'select_hash' => [ '' => '', 
                        'usps'     => 'U.S. Postal Service',
-                       'ezlocate' => 'EZLocate',
                        'tomtom'   => 'TomTom',
                        'melissa'  => 'Melissa WebSmart',
                      ],
@@ -4353,25 +4352,11 @@ and customer address. Include units.',
   {
     'key'         => 'tomtom-userid',
     'section'     => 'UI',
-    'description' => 'TomTom geocoding service API key.  See <a href="http://www.tomtom.com/">the TomTom website</a> to obtain a key.  This is recommended for addresses in the United States only.',
+    'description' => 'TomTom geocoding service API key.  See <a href="http://geocoder.tomtom.com/">the TomTom website</a> to obtain a key.  This is recommended for addresses in the United States only.',
     'type'        => 'text',
   },
 
   {
-    'key'         => 'ezlocate-userid',
-    'section'     => 'UI',
-    'description' => 'User ID for EZ-Locate service.  See <a href="http://www.geocode.com/">the TomTom website</a> for access and pricing information.',
-    'type'        => 'text',
-  },
-
-  {
-    'key'         => 'ezlocate-password',
-    'section'     => 'UI',
-    'description' => 'Password for EZ-Locate service.',
-    'type'        => 'text'
-  },
-
-  {
     'key'         => 'melissa-userid',
     'section'     => 'UI', # it's really not...
     'description' => 'User ID for Melissa WebSmart service.  See <a href="http://www.melissadata.com/">the Melissa website</a> for access and pricing.',
index 1af4991..e41ba5d 100644 (file)
@@ -333,87 +333,6 @@ sub standardize_usps {
     addr_clean=> 'Y' }
 }
 
-my %ezlocate_error = ( # USA_Geo_002 documentation
-  10  => 'State not found',
-  11  => 'City not found',
-  12  => 'Invalid street address',
-  14  => 'Street name not found',
-  15  => 'Address range does not exist',
-  16  => 'Ambiguous address',
-  17  => 'Intersection not found', #unused?
-);
-
-sub standardize_ezlocate {
-  my $self = shift;
-  my $location = shift;
-  my $class;
-  #if ( $location->{country} eq 'US' ) {
-  #  $class = 'USA_Geo_004Tool';
-  #}
-  #elsif ( $location->{country} eq 'CA' ) {
-  #  $class = 'CAN_Geo_001Tool';
-  #}
-  #else { # shouldn't be a fatal error, just pass through unverified address
-  #  warn "standardize_teleatlas: address lookup in '".$location->{country}.
-  #       "' not available\n";
-  #  return $location;
-  #}
-  #my $path = $conf->config('teleatlas-path') || '';
-  #local @INC = (@INC, $path);
-  #eval "use $class;";
-  #if ( $@ ) {
-  #  die "Loading $class failed:\n$@".
-  #      "\nMake sure the TeleAtlas Perl SDK is installed correctly.\n";
-  #}
-
-  $class = 'Geo::EZLocate'; # use our own library
-  eval "use $class 0.02"; #Geo::EZLocate 0.02 for error handling
-  die $@ if $@;
-
-  my $userid = $conf->config('ezlocate-userid')
-    or die "no ezlocate-userid configured\n";
-  my $password = $conf->config('ezlocate-password')
-    or die "no ezlocate-password configured\n";
-  
-  my $tool = $class->new($userid, $password);
-  my $match = $tool->findAddress(
-    $location->{address1},
-    $location->{city},
-    $location->{state},
-    $location->{zip}, #12345-6789 format is allowed
-  );
-  warn "ezlocate returned match:\n".Dumper($match) if $DEBUG > 1;
-  # error handling - B codes indicate success
-  die $ezlocate_error{$match->{MAT_STAT}}."\n"
-    unless $match->{MAT_STAT} =~ /^B\d$/;
-
-  my %result = (
-    address1    => $match->{MAT_ADDR},
-    address2    => $location->{address2},
-    city        => $match->{MAT_CITY},
-    state       => $match->{MAT_ST},
-    country     => $location->{country},
-    zip         => $match->{MAT_ZIP},
-    latitude    => $match->{MAT_LAT},
-    longitude   => $match->{MAT_LON},
-    censustract => $match->{FIPS_ST}.$match->{FIPS_CTY}.
-                   sprintf('%07.2f',$match->{CEN_TRCT}),
-    addr_clean  => 'Y',
-  );
-  if ( $match->{STD_ADDR} ) {
-    # then they have a postal standardized address for us
-    %result = ( %result,
-      address1    => $match->{STD_ADDR},
-      address2    => $location->{address2},
-      city        => $match->{STD_CITY},
-      state       => $match->{STD_ST},
-      zip         => $match->{STD_ZIP}.'-'.$match->{STD_P4},
-    );
-  }
-
-  \%result;
-}
-
 sub _tomtom_query { # helper method for the below
   my %args = @_;
   my $result = Geo::TomTom::Geocoding->query(%args);
index 3674778..af69f71 100755 (executable)
                      { field       => 'agent_type',
                        type        => 'select-agent_type',
                        disabled    => ! $acl_edit_global,
-                #XXX ???  'element_name' => 'agent_type',
                        element_etc => 'size="10"',
                        multiple    =>  '1', #cause edit.html is dum
                        curr_value_callback => sub {
diff --git a/httemplate/search/contact.html b/httemplate/search/contact.html
new file mode 100644 (file)
index 0000000..0292fa5
--- /dev/null
@@ -0,0 +1,43 @@
+<& elements/search.html,
+  title         => 'Contacts',
+  name_singular => 'contact',
+  query         => { select    => $select,
+                     table     => 'contact',
+                     addl_from => $addl_from,
+                     hashref   => \%hash,
+                     extra_sql => $extra_sql,
+                   },
+  count_query   => "SELECT COUNT(*) FROM contact $extra_sql", #XXX
+  header        => [ 'First', 'Last', 'Title', 'Company', 'Self-service', ],
+  fields        => [ 'first', 'last', 'title', 'company', 'selfservice_access' ],
+  links         => [ '', '', '', $company_link, '', ],
+&>
+<%init>
+
+my $select = 'contact.*';
+my %hash = ();
+my $addl_from = '';
+
+my $company_link = '';
+
+if ( $cgi->param('selfservice_access') eq 'Y' ) {
+  $hash{'selfservice_access'} = 'Y';
+}
+
+my $extra_sql = '';
+if ( $cgi->param('cust_main') ) {
+  $select .= ', cust_main.company';
+  $addl_from = ' LEFT JOIN cust_main USING ( custnum )';
+  $extra_sql = ' custnum IS NOT NULL ';
+  $company_link  = [ $p.'view/cust_main.cgi?', 'custnum' ];
+} elsif ( $cgi->param('prospect_main') ) {
+  $select .= ', prospect_main.company';
+  $addl_from = ' LEFT JOIN prospect_main USING ( prospectnum )';
+  $extra_sql = ' prospectnum IS NOT NULL ';
+  $company_link  = [ $p.'view/prospect_main.html?', 'prospectnum' ];
+}
+
+$extra_sql = (keys(%hash) ? ' AND ' : ' WHERE '). $extra_sql
+ if $extra_sql;
+
+</%init>
index e6309ea..3fb1e3e 100644 (file)
@@ -43,7 +43,7 @@ Example:
 
     #listref of column labels, <TH>
     #recommended unless 'query' is an SQL query string
-    # (if not specified the database column names will be used)
+    # (if not specified the database column names will be used) (XXX this is not currently working either)
     'header'      => [ '#',
                        'Item',
                        { 'label' => 'Another Item',
@@ -52,7 +52,7 @@ Example:
                      ],
 
     #listref - each item is a literal column name (or method) or coderef
-    #if not specified all columns will be shown
+    #if not specified all columns will be shown (XXX this is not currently working?)
     'fields'      => [
                        'column',
                        sub { my $row = shift; $row->column; },
@@ -130,7 +130,7 @@ Example:
     'agent_pos'             => 3, # optional position (starting from 0) to
                                   # insert an Agent column (query needs to be a
                                   # qsearch hashref and header & fields need to
-                                  # be defined)
+                                  # be defined)cust_pkg_susp.html
 
     # sort, link & display properties for fields
 
@@ -141,7 +141,7 @@ Example:
     #          or a listref of link and method name to append,
     #          or a listref of link and coderef to run and append
     #          or a coderef that returns such a listref
-    'links'       => [],`
+    'links'       => [],
 
     #listref - each item is the empty string,
     #          or a string onClick handler for the corresponding link
diff --git a/rt/etc/upgrade/3.8-branded-queues-extension b/rt/etc/upgrade/3.8-branded-queues-extension
deleted file mode 100755 (executable)
index 5f6e38a..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-#!/usr/bin/perl
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2013 Best Practical Solutions, LLC
-#                                          <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work is made available to you under the terms of Version 2 of
-# the GNU General Public License. A copy of that license should have
-# been provided with this software, but in any event can be snarfed
-# from www.gnu.org.
-#
-# This work is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license to use, copy, create derivative
-# works based on those contributions, and sublicense and distribute
-# those contributions and any derivatives thereof.
-#
-# END BPS TAGGED BLOCK }}}
-use strict;
-use warnings;
-
-use lib "/opt/rt3/local/lib";
-use lib "/opt/rt3/lib";
-
-
-use RT;
-RT::LoadConfig();
-RT::Init();
-
-use RT::Queues;
-
-my $queues = RT::Queues->new( RT->SystemUser );
-$queues->UnLimit();
-while ( my $queue = $queues->Next ) {
-    print "Processing queue ". ($queue->Name || $queue->id) ."...\n";
-    my $old_attr = $queue->FirstAttribute('BrandedSubjectTag');
-    unless ( $old_attr ) {
-        print "\thas no old-style subject tag. skipping\n";
-        next;
-    }
-    my $old_value = $old_attr->Content;
-    unless ( $old_value ) {
-        print "\thas empty old-style subject tag\n";
-    } else {
-        my ($status, $msg) = $queue->SetSubjectTag( $old_value );
-        unless ( $status ) {
-            print STDERR "\tERROR. Couldn't set tag: $msg\n";
-            next;
-        } else {
-            print "\thave set new-style subject tag to '$old_value'\n";
-        }
-    }
-
-    my ($status, $msg) = $queue->DeleteAttribute('BrandedSubjectTag');
-    unless ( $status ) {
-        print STDERR "\tERROR. Couldn't delete old-style tag: $msg\n";
-        next;
-    } else {
-        print "\tdeleted old-style tag entry\n";
-    }
-    print "\tDONE\n";
-}
-
-exit 0;
-
diff --git a/rt/etc/upgrade/3.8-ical-extension b/rt/etc/upgrade/3.8-ical-extension
deleted file mode 100755 (executable)
index 10239dc..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-#!/usr/bin/perl
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC
-#                                          <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work is made available to you under the terms of Version 2 of
-# the GNU General Public License. A copy of that license should have
-# been provided with this software, but in any event can be snarfed
-# from www.gnu.org.
-#
-# This work is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license to use, copy, create derivative
-# works based on those contributions, and sublicense and distribute
-# those contributions and any derivatives thereof.
-#
-# END BPS TAGGED BLOCK }}}
-use strict;
-use warnings;
-
-use lib "/opt/rt3/local/lib";
-use lib "/opt/rt3/lib";
-
-
-use RT;
-RT::LoadConfig();
-RT::Init();
-
-use RT::Attributes;
-my $attrs = RT::Attributes->new( RT->SystemUser );
-$attrs->Limit(FIELD => 'ObjectType', OPERATOR=> '=', VALUE => 'RT::User');
-$attrs->Limit(FIELD => 'Name', OPERATOR=> '=', VALUE => 'ical-auth-token');
-while ( my $attr = $attrs->Next ) {
-    my $uid = $attr->ObjectId;
-    print "Processing auth token of user #". $uid ."...\n";
-
-    my $user = RT::User->new( RT->SystemUser );
-    $user->Load( $uid );
-    unless ( $user->id ) {
-        print STDERR "\tERROR. Couldn't load user record\n";
-        next;
-    }
-
-    my ($status, $msg);
-
-    ($status, $msg) = $user->DeleteAttribute('AuthToken')
-        if $user->FirstAttribute('AuthToken');
-    unless ( $status ) {
-        print STDERR "\tERROR. Couldn't delete duplicated attribute: $msg\n";
-        next;
-    } else {
-        print "\tdeleted duplicate attribute\n";
-    }
-
-    ($status, $msg) = $attr->SetName('AuthToken');
-    unless ( $status ) {
-        print STDERR "\tERROR. Couldn't rename attribute: $msg\n";
-        next;
-    } else {
-        print "\trenamed attribute\n";
-    }
-    print "\tDONE\n";
-}
-
-exit 0;
diff --git a/rt/etc/upgrade/generate-rtaddressregexp b/rt/etc/upgrade/generate-rtaddressregexp
deleted file mode 100755 (executable)
index 729228a..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-#!/usr/bin/perl
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC
-#                                          <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work is made available to you under the terms of Version 2 of
-# the GNU General Public License. A copy of that license should have
-# been provided with this software, but in any event can be snarfed
-# from www.gnu.org.
-#
-# This work is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license to use, copy, create derivative
-# works based on those contributions, and sublicense and distribute
-# those contributions and any derivatives thereof.
-#
-# END BPS TAGGED BLOCK }}}
-use strict;
-use warnings;
-
-use lib "/opt/rt3/local/lib";
-use lib "/opt/rt3/lib";
-
-use RT;
-RT::LoadConfig();
-RT->Config->Set('LogToScreen' => 'debug');
-RT::Init();
-
-$| = 1;
-
-if (my $re = RT->Config->Get('RTAddressRegexp')) {
-    print "No need to use this script, you already have RTAddressRegexp set to $re\n";
-    exit;
-}
-
-use RT::Queues;
-my $queues = RT::Queues->new( RT->SystemUser );
-$queues->UnLimit;
-
-my %merged;
-merge(\%merged, RT->Config->Get('CorrespondAddress'), RT->Config->Get('CommentAddress'));
-while ( my $queue = $queues->Next ) {
-    merge(\%merged, $queue->CorrespondAddress, $queue->CommentAddress);
-}
-
-my @domains;
-for my $domain (sort keys %merged) {
-    my @addresses;
-    for my $base (sort keys %{$merged{$domain}}) {
-        my @subbits = keys(%{$merged{$domain}{$base}});
-        if (@subbits > 1) {
-            push @addresses, "\Q$base\E(?:".join("|",@subbits).")";
-        } else {
-            push @addresses, "\Q$base\E$subbits[0]";
-        }
-    }
-    if (@addresses > 1) {
-        push @domains, "(?:".join("|", @addresses).")\Q\@".$domain."\E";
-    } else {
-        push @domains, "$addresses[0]\Q\@$domain\E";
-    }
-}
-my $re = join "|", @domains;
-
-print <<ENDDESCRIPTION;
-You can add the following to RT_SiteConfig.pm, but may want to collapse it into a more efficient regexp.
-Keep in mind that this only contains the email addresses that RT knows about, you should also examine
-your mail system for aliases that reach RT but which RT doesn't know about.
-ENDDESCRIPTION
-print "Set(\$RTAddressRegexp,qr{^(?:${re})\$}i);\n";
-
-sub merge {
-    my $merged = shift;
-    for my $address (grep {defined and length} @_) {
-        $address =~ /^\s*(.*?)(-comments?)?\@(.*?)\s*$/;
-        $merged->{lc $3}{$1}{$2||''}++;
-    }
-}
diff --git a/rt/etc/upgrade/split-out-cf-categories b/rt/etc/upgrade/split-out-cf-categories
deleted file mode 100755 (executable)
index b61ade3..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-#!/usr/bin/perl
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC
-#                                          <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work is made available to you under the terms of Version 2 of
-# the GNU General Public License. A copy of that license should have
-# been provided with this software, but in any event can be snarfed
-# from www.gnu.org.
-#
-# This work is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license to use, copy, create derivative
-# works based on those contributions, and sublicense and distribute
-# those contributions and any derivatives thereof.
-#
-# END BPS TAGGED BLOCK }}}
-use strict;
-use warnings;
-
-use lib "/opt/rt3/local/lib";
-use lib "/opt/rt3/lib";
-
-use RT;
-RT::LoadConfig();
-RT->Config->Set('LogToScreen' => 'debug');
-RT::Init();
-
-$| = 1;
-
-$RT::Handle->BeginTransaction();
-
-use RT::CustomFields;
-my $CFs = RT::CustomFields->new( RT->SystemUser );
-$CFs->UnLimit;
-$CFs->Limit( FIELD => 'Type', VALUE => 'Select' );
-
-my $seen;
-while (my $cf  = $CFs->Next ) {
-    next if $cf->BasedOnObj->Id;
-    my @categories;
-    my %mapping;
-    my $values = $cf->Values;
-    while (my $value = $values->Next) {
-        next unless defined $value->Category and length $value->Category;
-        push @categories, $value->Category unless grep {$_ eq $value->Category} @categories;
-        $mapping{$value->Name} = $value->Category;
-    }
-    next unless @categories;
-
-    $seen++;
-    print "Found CF '@{[$cf->Name]}' with categories:\n";
-    print "  $_\n" for @categories;
-
-    print "Split this CF's categories into a hierarchical custom field (Y/n)? ";
-    my $dothis = <>;
-    next if $dothis =~ /n/i;
-
-    print "Enter name of CF to create as category ('@{[$cf->Name]} category'): ";
-    my $newname = <>;
-    chomp $newname;
-    $newname = $cf->Name . " category" unless length $newname;
-
-    # bump the CF's sort oder up by one
-    $cf->SetSortOrder( ($cf->SortOrder || 0) + 1 );
-
-    # ..and add a new CF before it
-    my $new = RT::CustomField->new( RT->SystemUser );
-    my ($id, $msg) = $new->Create(
-        Name => $newname,
-        Type => 'Select',
-        MaxValues => 1,
-        LookupType => $cf->LookupType,
-        SortOrder => $cf->SortOrder - 1,
-    );
-    die "Can't create custom field '$newname': $msg" unless $id;
-
-    # Set the CF to be based on what we just made
-    $cf->SetBasedOn( $new->Id );
-
-    # Apply it to all of the same things
-    {
-        my $ocfs = RT::ObjectCustomFields->new( RT->SystemUser );
-        $ocfs->LimitToCustomField( $cf->Id );
-        while (my $ocf = $ocfs->Next) {
-            my $newocf = RT::ObjectCustomField->new( RT->SystemUser );
-            ($id, $msg) = $newocf->Create(
-                SortOrder => $ocf->SortOrder,
-                CustomField => $new->Id,
-                ObjectId => $ocf->ObjectId,
-            );
-            die "Can't create ObjectCustomField: $msg" unless $id;
-        }
-    }
-
-    # Copy over all of the rights
-    {
-        my $acl = RT::ACL->new( RT->SystemUser );
-        $acl->LimitToObject( $cf );
-        while (my $ace = $acl->Next) {
-            my $newace = RT::ACE->new( RT->SystemUser );
-            ($id, $msg) = $newace->Create(
-                PrincipalId => $ace->PrincipalId,
-                PrincipalType => $ace->PrincipalType,
-                RightName => $ace->RightName,
-                Object => $new,
-            );
-            die "Can't assign rights: $msg" unless $id;
-        }
-    }
-
-    # Add values for all of the categories
-    for my $i (0..$#categories) {
-        ($id, $msg) = $new->AddValue(
-            Name => $categories[$i],
-            SortOrder => $i + 1,
-        );
-        die "Can't create custom field value: $msg" unless $id;
-    }
-
-    # Grovel through all ObjectCustomFieldValues, and add the
-    # appropriate category
-    {
-        my $ocfvs = RT::ObjectCustomFieldValues->new( RT->SystemUser );
-        $ocfvs->LimitToCustomField( $cf->Id );
-        while (my $ocfv = $ocfvs->Next) {
-            next unless exists $mapping{$ocfv->Content};
-            my $newocfv = RT::ObjectCustomFieldValue->new( RT->SystemUser );
-            ($id, $msg) = $newocfv->Create(
-                CustomField => $new->Id,
-                ObjectType => $ocfv->ObjectType,
-                ObjectId   => $ocfv->ObjectId,
-                Content    => $mapping{$ocfv->Content},
-            );
-        }
-    }
-}
-
-$RT::Handle->Commit;
-print "No custom fields with categories found\n" unless $seen;
diff --git a/rt/etc/upgrade/vulnerable-passwords b/rt/etc/upgrade/vulnerable-passwords
deleted file mode 100755 (executable)
index 7f278a0..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-#!/usr/bin/perl
-# BEGIN BPS TAGGED BLOCK {{{
-#
-# COPYRIGHT:
-#
-# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC
-#                                          <sales@bestpractical.com>
-#
-# (Except where explicitly superseded by other copyright notices)
-#
-#
-# LICENSE:
-#
-# This work is made available to you under the terms of Version 2 of
-# the GNU General Public License. A copy of that license should have
-# been provided with this software, but in any event can be snarfed
-# from www.gnu.org.
-#
-# This work is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-# 02110-1301 or visit their web page on the internet at
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
-#
-#
-# CONTRIBUTION SUBMISSION POLICY:
-#
-# (The following paragraph is not intended to limit the rights granted
-# to you to modify and distribute this software under the terms of
-# the GNU General Public License and is only of importance to you if
-# you choose to contribute your changes and enhancements to the
-# community by submitting them to Best Practical Solutions, LLC.)
-#
-# By intentionally submitting any modifications, corrections or
-# derivatives to this work, or any other work intended for use with
-# Request Tracker, to Best Practical Solutions, LLC, you confirm that
-# you are the copyright holder for those contributions and you grant
-# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
-# royalty-free, perpetual, license to use, copy, create derivative
-# works based on those contributions, and sublicense and distribute
-# those contributions and any derivatives thereof.
-#
-# END BPS TAGGED BLOCK }}}
-use strict;
-use warnings;
-
-use lib "/opt/rt3/local/lib";
-use lib "/opt/rt3/lib";
-
-use RT;
-RT::LoadConfig;
-RT::Init;
-
-$| = 1;
-
-use Getopt::Long;
-use Digest::SHA;
-my $fix;
-GetOptions("fix!" => \$fix);
-
-use RT::Users;
-my $users = RT::Users->new( $RT::SystemUser );
-$users->Limit(
-    FIELD => 'Password',
-    OPERATOR => 'IS NOT',
-    VALUE => 'NULL',
-    ENTRYAGGREGATOR => 'AND',
-);
-$users->Limit(
-    FIELD => 'Password',
-    OPERATOR => '!=',
-    VALUE => '*NO-PASSWORD*',
-    ENTRYAGGREGATOR => 'AND',
-);
-$users->Limit(
-    FIELD => 'Password',
-    OPERATOR => 'NOT STARTSWITH',
-    VALUE => '!',
-    ENTRYAGGREGATOR => 'AND',
-);
-push @{$users->{'restrictions'}{ "main.Password" }}, "AND", {
-    field => 'LENGTH(main.Password)',
-    op => '<',
-    value => '40',
-};
-
-# we want to update passwords on disabled users
-$users->{'find_disabled_rows'} = 1;
-
-my $count = $users->Count;
-if ($count == 0) {
-    print "No users with unsalted or weak cryptography found.\n";
-    exit 0;
-}
-
-if ($fix) {
-    print "Upgrading $count users...\n";
-    while (my $u = $users->Next) {
-        my $stored = $u->__Value("Password");
-        my $raw;
-        if (length $stored == 32) {
-            $raw = pack("H*",$stored);
-        } elsif (length $stored == 22) {
-            $raw = MIME::Base64::decode_base64($stored);
-        } elsif (length $stored == 13) {
-            printf "%20s => Old crypt() format, cannot upgrade\n", $u->Name;
-        } else {
-            printf "%20s => Unknown password format!\n", $u->Name;
-        }
-        next unless $raw;
-
-        my $salt = pack("C4",map{int rand(256)} 1..4);
-        my $sha = Digest::SHA::sha256(
-            $salt . $raw
-        );
-        $u->_Set(
-            Field => "Password",
-            Value => MIME::Base64::encode_base64(
-                $salt . substr($sha,0,26), ""),
-        );
-    }
-    print "Done.\n";
-    exit 0;
-} else {
-    if ($count < 20) {
-        print "$count users found with unsalted or weak-cryptography passwords:\n";
-        print "      Id | Name\n", "-"x9, "+", "-"x9, "\n";
-        while (my $u = $users->Next) {
-            printf "%8d | %s\n", $u->Id, $u->Name;
-        }
-    } else {
-        print "$count users found with unsalted or weak-cryptography passwords\n";
-    }
-
-    print "\n", "Run again with --fix to upgrade.\n";
-    exit 1;
-}
diff --git a/rt/t/data/configs/apache2.2+fastcgi.conf b/rt/t/data/configs/apache2.2+fastcgi.conf
deleted file mode 100644 (file)
index ab26136..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-ServerRoot %%SERVER_ROOT%%
-PidFile %%PID_FILE%%
-LockFile %%LOCK_FILE%%
-ServerAdmin root@localhost
-
-%%LOAD_MODULES%%
-
-<IfModule !mpm_netware_module>
-<IfModule !mpm_winnt_module>
-User freeside
-Group freeside
-</IfModule>
-</IfModule>
-
-ServerName localhost
-Listen %%LISTEN%%
-
-ErrorLog "%%LOG_FILE%%"
-LogLevel debug
-
-<Directory />
-    Options FollowSymLinks
-    AllowOverride None
-    Order deny,allow
-    Deny from all
-</Directory>
-
-AddDefaultCharset UTF-8
-
-FastCgiServer %%RT_SBIN_PATH%%/rt-server.fcgi \
-    -socket %%TMP_DIR%%/socket \
-    -processes 1 \
-    -idle-timeout 180 \
-    -initial-env RT_SITE_CONFIG=%%RT_SITE_CONFIG%% \
-    -initial-env RT_TESTING=1
-
-Alias /NoAuth/images/ %%DOCUMENT_ROOT%%/NoAuth/images/
-ScriptAlias / %%RT_SBIN_PATH%%/rt-server.fcgi/
-
-DocumentRoot "%%DOCUMENT_ROOT%%"
-<Location />
-    Order allow,deny
-    Allow from all
-
-%%BASIC_AUTH%%
-
-    Options +ExecCGI
-    AddHandler fastcgi-script fcgi
-</Location>
-
diff --git a/rt/t/data/configs/apache2.2+mod_perl.conf b/rt/t/data/configs/apache2.2+mod_perl.conf
deleted file mode 100644 (file)
index ae84c9d..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-<IfModule mpm_prefork_module>
-    StartServers          1
-    MinSpareServers       1
-    MaxSpareServers       1
-    MaxClients            1
-    MaxRequestsPerChild   0
-</IfModule>
-
-<IfModule mpm_worker_module>
-    StartServers          1
-    MinSpareThreads       1
-    MaxSpareThreads       1
-    ThreadLimit           1
-    ThreadsPerChild       1
-    MaxClients            1
-    MaxRequestsPerChild   0
-</IfModule>
-
-ServerRoot %%SERVER_ROOT%%
-PidFile %%PID_FILE%%
-LockFile %%LOCK_FILE%%
-ServerAdmin root@localhost
-
-%%LOAD_MODULES%%
-
-<IfModule !mpm_netware_module>
-<IfModule !mpm_winnt_module>
-User freeside
-Group freeside
-</IfModule>
-</IfModule>
-
-ServerName localhost
-Listen %%LISTEN%%
-
-ErrorLog "%%LOG_FILE%%"
-LogLevel debug
-
-<Directory />
-    Options FollowSymLinks
-    AllowOverride None
-    Order deny,allow
-    Deny from all
-</Directory>
-
-AddDefaultCharset UTF-8
-PerlSetEnv RT_SITE_CONFIG %%RT_SITE_CONFIG%%
-
-DocumentRoot "%%DOCUMENT_ROOT%%"
-<Location />
-    Order allow,deny
-    Allow from all
-
-%%BASIC_AUTH%%
-
-    SetHandler modperl
-
-    PerlResponseHandler Plack::Handler::Apache2
-    PerlSetVar psgi_app %%RT_SBIN_PATH%%/rt-server
-</Location>
-
-<Perl>
-    $ENV{RT_TESTING}=1;
-    use Plack::Handler::Apache2;
-    Plack::Handler::Apache2->preload("%%RT_SBIN_PATH%%/rt-server");
-</Perl>
-