diff options
-rwxr-xr-x | FS/FS/svc_broadband.pm | 6 | ||||
-rwxr-xr-x | fs_signup/fs_signup_server | 289 | ||||
-rw-r--r-- | httemplate/browse/part_virtual_field.cgi | 2 | ||||
-rw-r--r-- | httemplate/edit/part_virtual_field.cgi | 2 | ||||
-rwxr-xr-x | rt/README | 300 |
5 files changed, 4 insertions, 595 deletions
diff --git a/FS/FS/svc_broadband.pm b/FS/FS/svc_broadband.pm index 7789806..ec91532 100755 --- a/FS/FS/svc_broadband.pm +++ b/FS/FS/svc_broadband.pm @@ -155,10 +155,8 @@ sub check { if($self->speed_down < 0) { return 'speed_down must be positive'; } if (not($self->ip_addr) or $self->ip_addr eq '0.0.0.0') { - my $next_addr = $self->addr_block->next_free_addr; - if ($next_addr) { - $self->ip_addr($next_addr->addr); - } else { + $self->ip_addr($self->addr_block->next_free_addr->addr); + if (not $self->ip_addr) { return "No free addresses in addr_block (blocknum: ".$self->blocknum.")"; } } diff --git a/fs_signup/fs_signup_server b/fs_signup/fs_signup_server deleted file mode 100755 index d6eb4a8..0000000 --- a/fs_signup/fs_signup_server +++ /dev/null @@ -1,289 +0,0 @@ -#!/usr/bin/perl -Tw -# -# fs_signup_server -# - -use strict; -use vars qw($pid); -use IO::Handle; -use Storable qw(nstore_fd fd_retrieve); -use Tie::RefHash; -use Net::SSH qw(sshopen2); -use FS::UID qw(adminsuidsetup); -use FS::Conf; -use FS::Record qw( qsearch qsearchs ); -use FS::cust_main_county; -use FS::cust_main; -use FS::cust_bill; -use FS::cust_pkg; -use FS::Msgcat qw(gettext); - -use vars qw( $opt $Debug ); - -$Debug = 2; - -my $user = shift or die &usage; -&adminsuidsetup( $user ); - -my $conf = new FS::Conf; - -if ($conf->exists('signup_server-quiet')) { - $FS::cust_bill::quiet = 1; - $FS::cust_pkg::quiet = 1; -} - -#my @payby = qw(CARD PREPAY); -my @payby = $conf->config('signup_server-payby'); -my $smtpmachine = $conf->config('smtpmachine'); - -my $machine = shift or die &usage; - -my $agentnum = shift or die &usage; -my $agent = qsearchs( 'agent', { 'agentnum' => $agentnum } ) or die &usage; -my $pkgpart_href = $agent->pkgpart_hashref; - -my $refnum = shift or die &usage; - -#causing trouble for some folks -#$SIG{CHLD} = sub { wait() }; - -$SIG{HUP} = \&killssh; -$SIG{INT} = \&killssh; -$SIG{QUIT} = \&killssh; -$SIG{TERM} = \&killssh; -$SIG{PIPE} = \&killssh; -sub killssh { kill 'TERM', $pid if $pid; exit; }; - -my($fs_signupd)="/usr/local/sbin/fs_signupd"; - -while (1) { - my($reader,$writer)=(new IO::Handle, new IO::Handle); - #seems to be broken - calling ->flush explicitly# $writer->autoflush(1); - warn "[fs_signup_server] Connecting to $machine...\n" if $Debug; - $pid = sshopen2($machine,$reader,$writer,$fs_signupd); - - my @pops = qsearch('svc_acct_pop',{} ); - my $init_data = { - - #'_protocol' => 'signup', - #'_version' => '0.1', - #'_packet' => 'init' - - 'cust_main_county' => - [ map { $_->hashref } qsearch('cust_main_county', {}) ], - - 'part_pkg' => - [ - #map { $_->hashref } - map { { 'payby' => [ $_->payby ], %{$_->hashref} } } - grep { $_->svcpart('svc_acct') && $pkgpart_href->{ $_->pkgpart } } - qsearch( 'part_pkg', { 'disabled' => '' } ) - ], - - 'agentnum2part_pkg' => - { - map { - my $href = $_->pkgpart_hashref; - $_->agentnum => - [ - map { { 'payby' => [ $_->payby ], %{$_->hashref} } } - grep { $_->svcpart('svc_acct') && $href->{ $_->pkgpart } } - qsearch( 'part_pkg', { 'disabled' => '' } ) - ]; - } qsearch('agent', {} ) - }, - - 'svc_acct_pop' => [ map { $_->hashref } @pops ], - - 'security_phrase' => $conf->exists('security_phrase'), - - 'payby' => [ $conf->config('signup_server-payby') ], - - 'msgcat' => { map { $_=>gettext($_) } qw( - passwords_dont_match invalid_card unknown_card_type not_a - ) }, - - 'statedefault' => $conf->config('statedefault') || 'CA', - - 'countrydefault' => $conf->config('countrydefault') || 'US', - - }; - - warn "[fs_signup_server] Sending init data...\n" if $Debug; - nstore_fd($init_data, $writer) or die "can't send init data: $!"; - $writer->flush; - - warn "[fs_signup_server] Entering main loop...\n" if $Debug; - while (1) { - warn "[fs_signup_server] Reading (waiting for) signup data...\n" if $Debug; - my $signup_data = fd_retrieve($reader); - - if ( $Debug > 1 ) { - warn join('', - map { " $_ => ". $signup_data->{$_}. "\n" } keys %$signup_data ); - } - - warn "[fs_signup_server] Processing signup...\n" if $Debug; - - my $error = ''; - - #things that aren't necessary in base class, but are for signup server - #return "Passwords don't match" - # if $hashref->{'_password'} ne $hashref->{'_password2'} - $error ||= gettext('empty_password') unless $signup_data->{'_password'}; - $error ||= gettext('no_access_number_selected') - unless $signup_data->{'popnum'} || !scalar(@pops); - - #shares some stuff with htdocs/edit/process/cust_main.cgi... take any - # common that are still here and library them. - my $cust_main = new FS::cust_main ( { - #'custnum' => '', - 'agentnum' => $signup_data->{agentnum} || $agentnum, - 'refnum' => $refnum, - - map { $_ => $signup_data->{$_} } qw( - last first ss company address1 address2 city county state zip country - daytime night fax payby payinfo paydate payname referral_custnum comments - ), - - } ); - - $error ||= "Illegal payment type" - unless grep { $_ eq $signup_data->{'payby'} } @payby; - - $cust_main->payinfo($cust_main->daytime) - if $cust_main->payby eq 'LECB' && ! $cust_main->payinfo; - - my @invoicing_list = split( /\s*\,\s*/, $signup_data->{'invoicing_list'} ); - - $signup_data->{'pkgpart'} =~ /^(\d+)$/ or '' =~ /^()$/; - my $pkgpart = $1; - - my $part_pkg = - qsearchs( 'part_pkg', { 'pkgpart' => $pkgpart } ) - or $error ||= "WARNING: unknown pkgpart: $pkgpart"; - my $svcpart = $part_pkg->svcpart('svc_acct') unless $error; - - my $cust_pkg = new FS::cust_pkg ( { - #later#'custnum' => $custnum, - 'pkgpart' => $signup_data->{'pkgpart'}, - } ); - $error ||= $cust_pkg->check; - - my $svc_acct = new FS::svc_acct ( { - 'svcpart' => $svcpart, - map { $_ => $signup_data->{$_} } - qw( username _password sec_phrase popnum ), - } ); - - my $y = $svc_acct->setdefault; # arguably should be in new method - $error ||= $y unless ref($y); - - $error ||= $svc_acct->check; - - use Tie::RefHash; - tie my %hash, 'Tie::RefHash'; - %hash = ( $cust_pkg => [ $svc_acct ] ); - $error ||= $cust_main->insert( \%hash, \@invoicing_list ); #msgcat - - if ( ! $error && $conf->exists('signup_server-realtime') ) { - - warn "[fs_signup_server] Billing customer...\n" if $Debug; - - my $bill_error = $cust_main->bill; - warn "[fs_signup_server] error billing new customer: $bill_error" - if $bill_error; - - $cust_main->apply_payments; - $cust_main->apply_credits; - - $bill_error = $cust_main->collect; - warn "[fs_signup_server] error collecting from new customer: $bill_error" - if $bill_error; - - if ( $cust_main->balance > 0 ) { - - #this makes sense. credit is "un-doing" the invoice - $cust_main->credit( $cust_main->balance, 'signup server decline' ); - $cust_main->apply_credits; - - #should check list for errors... - #$cust_main->suspend; - $cust_main->cancel; - - $error = '_decline'; - } - } - - warn "[fs_signup_server] Sending results...\n" if $Debug; - print $writer $error, "\n"; - - next if $error; - - if ( $conf->config('signup_server-email') ) { - warn "[fs_signup_server] Sending email...\n" if $Debug; - - #false laziness w/FS::cust_bill::send & FS::cust_pay::delete - use Mail::Header; - use Mail::Internet 1.44; - use Date::Format; - my $from = $conf->config('invoice_from'); #??? as good as any - $ENV{MAILADDRESS} = $from; - my $header = new Mail::Header ( [ - "From: $from", - "To: ". $conf->config('signup_server-email'), - "Sender: $from", - "Reply-To: $from", - "Date: ". time2str("%a, %d %b %Y %X %z", time), - "Subject: FREESIDE NOTIFICATION: Signup Server", - ] ); - my $body = [ - "This is an automatic message from your Freeside installation\n", - "informing you a customer has signed up via the signup server:\n", - "\n", - 'custnum : '. $cust_main->custnum. "\n", - 'Name : '. $cust_main->last. ", ". $cust_main->first. "\n", - 'Agent : '. $cust_main->agent->agent. "\n", - 'Package : '. $part_pkg->pkg. ' - '. $part_pkg->comment. "\n", - 'Signup Date : '. time2str('%C', time). "\n", - 'Username : '. $svc_acct->username. "\n", - #'Password : '. # config file to turn this on if noment insists - 'Day phone : '. $cust_main->daytime. "\n", - 'Night phone : '. $cust_main->night. "\n", - 'Address : '. $cust_main->address1. "\n", - ( $cust_main->address2 - ? ' '. $cust_main->address2. "\n" - : '' ), - ' '. $cust_main->city. ', '. $cust_main->state. ' '. - $cust_main->zip. "\n", - ( $cust_main->country eq 'US' - ? '' - : ' '. $cust_main->country. "\n" ), - "\n", - ]; - #if ( $cust_main->balance > 0 ) { - # push @$body, - # "This customer has an outstanding balance and has been suspended.\n"; - #} - my $message = new Mail::Internet ( 'Header' => $header, 'Body' => $body ); - $!=0; - $message->smtpsend( Host => $smtpmachine ) - or $message->smtpsend( Host => $smtpmachine, Debug => 1 ) - or warn "[fs_signup_server] can't send email to ". - $conf->config('signup_server-email'). - " via server $smtpmachine with SMTP: $!"; - #end-of-send mail - } - - } - close $writer; - close $reader; - warn "connection to $machine lost! waiting 60 seconds...\n"; - sleep 60; - warn "reconnecting...\n"; -} - -sub usage { - die "Usage:\n\n fs_signup_server user machine agentnum refnum\n"; -} - diff --git a/httemplate/browse/part_virtual_field.cgi b/httemplate/browse/part_virtual_field.cgi index a0009da..9bb5c13 100644 --- a/httemplate/browse/part_virtual_field.cgi +++ b/httemplate/browse/part_virtual_field.cgi @@ -23,7 +23,7 @@ foreach (qsearch('part_virtual_field', {})) { <%=table()%> <TH><TD>Field name</TD><TD>Description</TD></TH> -<% foreach my $pvf (sort {$a->name cmp $b->name} @{ $pvfs{$dbtable} }) { %> +<% foreach $pvf (sort {$a->name cmp $b->name} @{ $pvfs{$dbtable} }) { %> <TR> <TD></TD> <TD> diff --git a/httemplate/edit/part_virtual_field.cgi b/httemplate/edit/part_virtual_field.cgi index fb10321..8bc8438 100644 --- a/httemplate/edit/part_virtual_field.cgi +++ b/httemplate/edit/part_virtual_field.cgi @@ -47,7 +47,7 @@ Field #<B><%=$vfieldpart or "(NEW)"%></B><BR><BR> <TD><% if ($action eq 'Add') { %> <SELECT SIZE=1 NAME="dbtable"><% my $dbdef = dbdef; # ick - foreach my $dbtable (sort { $a cmp $b } $dbdef->tables) { + foreach my $dbtable ($dbdef->tables) { if ($dbtable !~ /^h_/ and $dbdef->table($dbtable)->primary_key) { %> <OPTION VALUE="<%=$dbtable%>"><%=$dbtable%></OPTION><% diff --git a/rt/README b/rt/README deleted file mode 100755 index 7c5e4d4..0000000 --- a/rt/README +++ /dev/null @@ -1,300 +0,0 @@ -# BEGIN LICENSE BLOCK -# -# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com> -# -# (Except where explictly superceded by other copyright notices) -# -# 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. -# -# Unless otherwise specified, all modifications, corrections or -# extensions to this work which alter its source code become the -# property of Best Practical Solutions, LLC when submitted for -# inclusion in the work. -# -# -# END LICENSE BLOCK -RT is an enterprise-grade issue tracking system. It allows -organizations to keep track of their to-do lists, who is working -on which tasks, what's already been done, and when tasks were -completed. It is available under the terms of version 2 of the GNU -General Public License (GPL), so it doesn't cost anything to set -up and use. - - - Jesse Vincent - Best Practical Solutions, LLC - March 2003 - -REQUIRED PACKAGES: ------------------- - -o Perl 5.8.0 or later (http://www.perl.com). - - (If you intend to use the FastCGI or SpeedyCGI support, you - need to make sure that perl has been built with support for - setgid perl scripts.)` - - Perl 5.6.1 is currently deprecated and will be officially desupported - in a future release - -o A DB backend; MySQL is recommended ( http://www.mysql.com ) - Currently supported: Mysql 4.0.13 or later. - Postgres 7.2 or later. - - Mysql 3.23.46 or newer with support for InnoDB - is currently deprecated and will be officially - desupported in a future release. - -o Apache version 1.3.x or 2.x (http://httpd.apache.org) - with mod_perl -- (http://perl.apache.org ) - or a webserver with FastCGI support (www.fastcgi.com) - - mod_perl 2.0 isn't quite ready for prime_time just yet; - Best Practical Solutions strongly recommends that sites use - Apache 1.3 or FastCGI. - - Compiling mod_perl on Apache 1.3.x as a DSO has been known - to have massive stability problems and is not recommended. - - mod_perl 1.x must be build with EVERYTHING=1 - - RT's FastCGI handler runs setgid to the 'rt' group to - protect RT's database password. You may need to install - a special "suidperl" package or reconfigure your perl - setup to support "setuid scripts" if you intend to use RT - with FastCGI. - - Debian GNU/* 3.0+: the package which installs suidperl is - called perl-suid, and should work without any tweaking. - - FreeBSD 4.2+: the package is called sperl, and should - install a suidperl that just works - - Conectiva Linux 6.0+: suidperl is installed by default when - perl is installed, but the program /bin/suidperl is not setuid. - You must use chmod to make it setuid. - - - -o Various and sundry perl modules - A tool included with RT takes care of the installation of - most of these automatically during the install process. - - The tool supplied with RT uses Perl's CPAN system - (http://www.cpan.org) to install modules. Some operating - systems package all or some of the modules required and - you may be better off installing the modules that way. - - -GENERAL INSTALLATION --------------------- - -This is a rough guide to installing RT. For more detail, you'll want -to read 'Chapter 2: Installing' in RT's manual, available at -http://www.bestpractical.com/rt - -1 Unpack this distribution SOMWHERE OTHER THAN where you want to install RT - - Granted, you've already got it open. To do this cleanly: - - tar xzvf rt.tar.gz -C /tmp - -2 Run the "configure" script. - - ./configure --help to see the list of options - ./configure (with the flags you want) - -3 Satisfy RT's myriad dependencies. - -3.1 Check for compliance: - - perl sbin/rt-test-dependencies \ - --with-<databasename> --with-<web-environment> - - databasename is one of: mysql, postgres - web-environment is one of: fastcgi, modperl1, modperl2 - -3.2 If there are unsatisfied dependencies, install them by hand or run: - - perl sbin/rt-test-dependencies \ - --with-<databasename> --with-<web-environment> --install - - -3.3 Check to make sure everything was installed properly: - - perl sbin/rt-test-dependencies \ - --with-<databasename> --with-<web-environment> - -4 Create a group called 'rt' - -5a FOR A NEW INSTALLATION: - - As root, type: - make install (replace "make" with the local name for - Make, if you need to) - - - make initialize-database - - - If the make fails, type: - make dropdb - and start over from step 5a - -5b FOR UPGRADING: (Within the RT 3.0.x series) - - As root, type: - make upgrade (replace "make" with the local name for - Make, if you need to) - - This will build new binaries, config files and libraries without - overwriting your RT database. - - It may then instruct you to update your RT system database objects - -6 Edit etc/RT_SiteConfig.pm in your RT installation directory, by specifying - any values you need to change from the defaults in etc/RT_Config.pm - -7 Configure the email and web gateways, as described below. - -8 Stop and start your webserver, so it picks up your configuration changes. - - NOTE: root's password for the web interface is "password" - (without the quotes.) Not changing this is a SECURITY risk - -9 Configure RT per the instructions in RT's manual. - - Until you do this, RT will not be able to send or receive email, - nor will it be more than marginally functional. This is not an - optional step. - - -THE WEB INTERFACE ------------------ - -RT's web interface is based around HTML::Mason, which works best with the mod_perl -perl interpreter within Apache httpd. Alternatively, support for the FastCGI -(and plain CGI) interface is also provided as 'bin/mason_handler.fcgi'. - -Apache - You'll need to add a few lines to your httpd.conf telling it about RT: - -<VirtualHost your.ip.address> - ServerName your.rt.server.hostname - DocumentRoot /opt/rt3/share/html - AddDefaultCharset UTF-8 - - # this line applies to Apache2+mod_perl2 only - PerlModule Apache2 Apache::compat - - PerlModule Apache::DBI - PerlRequire /opt/rt3/bin/webmux.pl - - # this section applies to Apache 1 only - <Location /> - SetHandler perl-script - PerlHandler RT::Mason - </Location> - - # this section applies to Apache2+mod_perl2 only - <FilesMatch "\.html$"> - SetHandler perl-script - PerlHandler RT::Mason - </FilesMatch> - <LocationMatch "/Attachment/"> - SetHandler perl-script - PerlHandler RT::Mason - </LocationMatch> - <LocationMatch "/REST/"> - SetHandler perl-script - PerlHandler RT::Mason - </LocationMatch> -</VirtualHost> - - - -SETTING UP THE MAIL GATEWAY ---------------------------- - -An alias for the initial queue will need to be made in either your -global mail aliases file (if you are using NIS) or locally on your -machine. - -Add the following lines to /etc/aliases (or your local equivalent) : - -rt: "|/opt/rt3/bin/rt-mailgate --queue general --action correspond --url http://localhost/" -rt-comment: "|/opt/rt3/bin/rt-mailgate --queue general --action comment --url http://localhost/" - | | | - <queue-name>----/ | | - | | - <correspond or comment depending on whether | | - the mail should be resent to the requestor>---/ | - | - <URL for RT's web interface>---/ - - -BUGS ----- - -To report a bug, send email to rt-3.0-bugs@fsck.com. - -GETTING HELP ------------- - -If RT is mission-critical for you or if you use it heavily, we recommend that -you purchase a commercial support contract. Details on support contracts -are available at http://www.bestpractical.com. - -If you're interested in having RT extended or customized or would like more -information about commercial support options, please send email to -<sales@bestpractical.com> to discuss rates and availability. - - -RT-USERS MAILINGLIST --------------------- - -To keep up to date on the latest RT tips, techniques and extensions, -you probably want to join the rt-users mailing list. Send a message to: - - rt-users-request@lists.fsck.com - -With the body of the message consisting of only the word: - - subscribe - -If you're interested in hacking on RT, you'll want to subscribe to -rt-devel@lists.fsck.com. Subscribe to it with instructions similar to -those above. - -Address questions about the stable release to the rt-users list, and -questions about the development version to the rt-devel list. If you feel -your questions are best not asked publicly, send them personally to -<jesse@bestpractical.com>. - - -RT WEBSITE ----------- - -For current information about RT, check out the RT website at - http://www.bestpractical.com/ - -You'll find screenshots, a pointer to the current version of RT, contributed -patches, and lots of other great stuff. - - -TROUBLESHOOTING ---------------- - -If the solution to the problem you're running into isn't obvious and you've -checked the FAQ, feel free to send mail to rt-users@fsck.com (for released -versions of RT) or rt-devel@fsck.com (for development versions). - -Thanks! |