From cf9f008216028a4140208f0b26bba773c01fc5a2 Mon Sep 17 00:00:00 2001 From: ivan Date: Thu, 27 May 2004 09:30:14 +0000 Subject: fixup domain svcpart selection --- bin/sqlradius.import | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/bin/sqlradius.import b/bin/sqlradius.import index 9cb518e7f..120cbf373 100644 --- a/bin/sqlradius.import +++ b/bin/sqlradius.import @@ -34,7 +34,7 @@ my $sqlradius_svcpart = &getpart; die "No services with svcdb svc_domain!\n" unless %domain_part_svc; -print "\n\n", &menu_svc, "\n", <svc, sort keys %part_svc ). "\n"; +} +sub menu_domain_svc { + ( join "\n", map "$_: ".$part_svc{$_}->svc, sort keys %domain_part_svc ). "\n"; +} sub getpart { $^W=0; # Term::Query isn't -w-safe my $return = query "Enter part number:", 'irk', [ keys %part_svc ]; -- cgit v1.2.1 From 08feb6698a96eed199404b8319a39ec4c02a084e Mon Sep 17 00:00:00 2001 From: ivan Date: Fri, 28 May 2004 07:02:37 +0000 Subject: report value passed for illegal action pseudo-field --- FS/FS/svc_domain.pm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/FS/FS/svc_domain.pm b/FS/FS/svc_domain.pm index b713e3e95..2642146ea 100644 --- a/FS/FS/svc_domain.pm +++ b/FS/FS/svc_domain.pm @@ -342,7 +342,8 @@ sub check { " (or unknown registry - try \$whois_hack)"; } - $recref->{action} =~ /^(M|N)$/ or return "Illegal action"; + $recref->{action} =~ /^(M|N)$/ + or return "Illegal action: ". $recref->{action}; $recref->{action} = $1; if ( $recref->{catchall} ne '' ) { -- cgit v1.2.1 From c4b0a99e8be89daf346273a4a9f8a8d8c1dc264f Mon Sep 17 00:00:00 2001 From: ivan Date: Fri, 28 May 2004 08:37:47 +0000 Subject: fixed up and working? --- bin/sqlradius.import | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/bin/sqlradius.import b/bin/sqlradius.import index 120cbf373..7203365f3 100644 --- a/bin/sqlradius.import +++ b/bin/sqlradius.import @@ -17,6 +17,7 @@ adminsuidsetup $user; #push @FS::svc_acct::shells, qw(/bin/sync /sbin/shutdown /bin/halt /sbin/halt); #others? $FS::svc_Common::noexport_hack = 1; +$FS::svc_domain::whois_hack = 1; ### @@ -47,7 +48,7 @@ sub menu_svc { ( join "\n", map "$_: ".$part_svc{$_}->svc, sort keys %part_svc ). "\n"; } sub menu_domain_svc { - ( join "\n", map "$_: ".$part_svc{$_}->svc, sort keys %domain_part_svc ). "\n"; + ( join "\n", map "$_: ".$domain_part_svc{$_}->svc, sort keys %domain_part_svc ). "\n"; } sub getpart { $^W=0; # Term::Query isn't -w-safe @@ -81,22 +82,24 @@ my $sth = $dbh->prepare('SELECT DISTINCT UserName, Realm FROM radcheck') $sth->execute or die $sth->errstr; my $row; -while ( $row = $sth->fetchrow_arrayref ) { +while ( defined ( $row = $sth->fetchrow_arrayref ) ) { my( $r_username, $realm ) = @$row; my( $username, $domain ); - if ( $r_username =~ s/([^@]+)\@([^@]+)$// ) { + if ( $r_username =~ /^([^@]+)\@([^@]+)$/ ) { $username = $1; $domain = $2; } else { $username = $r_username; $domain = $realm; } - my %svc_domain = ( 'svcpart' => $domain_svcpart, - 'domain' => $domain, ); - my $svc_domain = qsearchs('svc_domain', \%svc_domain ) - || new FS::svc_domain \%svc_domain; - unless ( $svc_domain->domsvc ) { + my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } ) + || new FS::svc_domain { + 'domain' => $domain, + 'svcpart' => $domain_svcpart, + 'action' => 'N', + }; + unless ( $svc_domain->svcnum ) { my $error = $svc_domain->insert; if ( $error ) { die "can't insert domain $domain: $error\n"; @@ -123,22 +126,22 @@ while ( $row = $sth->fetchrow_arrayref ) { } } - my $svc_acct = new FS::svc_acct ( + my $svc_acct = new FS::svc_acct { 'svcpart' => $sqlradius_svcpart, 'username' => $username, - 'domsvc' => $svc_domain->domsvc, + 'domsvc' => $svc_domain->svcnum, '_password' => $password, 'finger' => $finger, - ); + }; my($error); - #$error = $svc_acct->insert; - $error = $svc_acct->check; + $error = $svc_acct->insert; + #$error = $svc_acct->check; if ( $error ) { if ( $error =~ /duplicate/i ) { - warn "$r_username: $error"; + warn "$r_username / $realm: $error"; } else { - die "$r_username: $error"; + die "$r_username / $realm: $error"; } } -- cgit v1.2.1 From 59eec66f424ee1a5e25b2d5853dbe505581b9a07 Mon Sep 17 00:00:00 2001 From: ivan Date: Fri, 28 May 2004 08:40:46 +0000 Subject: really. --- bin/sqlradius.import | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/bin/sqlradius.import b/bin/sqlradius.import index 7203365f3..587d828e4 100644 --- a/bin/sqlradius.import +++ b/bin/sqlradius.import @@ -134,9 +134,8 @@ while ( defined ( $row = $sth->fetchrow_arrayref ) ) { 'finger' => $finger, }; - my($error); - $error = $svc_acct->insert; - #$error = $svc_acct->check; + my $error = $svc_acct->insert; + #my $error = $svc_acct->check; if ( $error ) { if ( $error =~ /duplicate/i ) { warn "$r_username / $realm: $error"; -- cgit v1.2.1 From 0d81e56d3651752576b4969b39b49dc80012fc0e Mon Sep 17 00:00:00 2001 From: ivan Date: Fri, 28 May 2004 10:17:08 +0000 Subject: correct count statement when searching for individual invoices by # --- httemplate/search/cust_bill.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/httemplate/search/cust_bill.html b/httemplate/search/cust_bill.html index 337e9e859..3ae624af2 100755 --- a/httemplate/search/cust_bill.html +++ b/httemplate/search/cust_bill.html @@ -41,7 +41,7 @@ } else { $cgi->param('invnum') =~ /^\s*(FS-)?(\d+)\s*$/; - $count_query = 'SELECT 1'; + $count_query = "SELECT COUNT(*) FROM cust_bill WHERE invnum = $2"; $sql_query = { 'table' => 'cust_bill', 'hashref' => { 'invnum' => $2 }, -- cgit v1.2.1 From d8ff6db2dbaec9cc8daad2d4af0254f167aa7a66 Mon Sep 17 00:00:00 2001 From: ivan Date: Fri, 28 May 2004 10:38:00 +0000 Subject: show a better message when no results are found --- httemplate/search/elements/search.html | 93 ++++++++++++++++++---------------- 1 file changed, 49 insertions(+), 44 deletions(-) diff --git a/httemplate/search/elements/search.html b/httemplate/search/elements/search.html index e739afb1d..12ab83ba5 100644 --- a/httemplate/search/elements/search.html +++ b/httemplate/search/elements/search.html @@ -67,55 +67,60 @@ 'maxrecords' => $maxrecords, ); %> -<%= $total %> total <%= $opt{'name'} %>
-<% if ( $opt{'count_addl'} ) { %> - <% my $n=0; foreach my $count ( @{$opt{'count_addl'}} ) { %> - <%= sprintf( $count, $count_arrayref->[++$n] ) %>
+<% unless ( $total ) { %> + No matching <%= $opt{'name'} %> found.
+<% } else { %> + <%= $total %> total <%= $opt{'name'} %>
+ <% if ( $opt{'count_addl'} ) { %> + <% my $n=0; foreach my $count ( @{$opt{'count_addl'}} ) { %> + <%= sprintf( $count, $count_arrayref->[++$n] ) %>
+ <% } %> <% } %> -<% } %> -
<%= $pager %> -<%= include( '/elements/table.html' ) %> - - <% foreach my $header ( @$header ) { %> - <%= $header %> - <% } %> - - <% foreach my $row ( @$rows ) { %> - - <% if ( $opt{'fields'} ) { %> - <% my $links = $opt{'links'} ? [ @{$opt{'links'}} ] : ''; %> - <% foreach my $field ( @{$opt{'fields'}} ) { %> - <% my $a = ''; %> - <% if ( $links ) { - my $link = shift @$links; - $link = &{$link}($row) if ref($link) eq 'CODE'; - if ( $link ) { - my( $url, $method ) = @{$link}; - if ( ref($method) eq 'CODE' ) { - $a = $url. &{$method}($row); - } else { - $a = $url. $row->$method(); +
<%= $pager %> + <%= include( '/elements/table.html' ) %> + + <% foreach my $header ( @$header ) { %> + <%= $header %> + <% } %> + + <% foreach my $row ( @$rows ) { %> + + <% if ( $opt{'fields'} ) { %> + <% my $links = $opt{'links'} ? [ @{$opt{'links'}} ] : ''; %> + <% foreach my $field ( @{$opt{'fields'}} ) { %> + <% my $a = ''; %> + <% if ( $links ) { + my $link = shift @$links; + $link = &{$link}($row) if ref($link) eq 'CODE'; + if ( $link ) { + my( $url, $method ) = @{$link}; + if ( ref($method) eq 'CODE' ) { + $a = $url. &{$method}($row); + } else { + $a = $url. $row->$method(); + } + $a = qq(); } - $a = qq(); } - } - %> - <% if ( ref($field) eq 'CODE' ) { %> - <%= $a %><%= &{$field}($row) %><%= $a ? '' : '' %> - <% } else { %> - <%= $a %><%= $row->$field() %><%= $a ? '' : '' %> + %> + <% if ( ref($field) eq 'CODE' ) { %> + <%= $a %><%= &{$field}($row) %><%= $a ? '' : '' %> + <% } else { %> + <%= $a %><%= $row->$field() %><%= $a ? '' : '' %> + <% } %> + <% } %> + <% } else { %> + <% foreach ( @$row ) { %> + <%= $_ %> <% } %> <% } %> - <% } else { %> - <% foreach ( @$row ) { %> - <%= $_ %> - <% } %> - <% } %> - - <% } %> - - -<%= $pager %> + + <% } %> + + + <%= $pager %> +<% } %> <% } %> + -- cgit v1.2.1 From 2e1a3719f1a9fb1f561d0eb4df349f3f03d66681 Mon Sep 17 00:00:00 2001 From: ivan Date: Fri, 28 May 2004 11:21:46 +0000 Subject: better error reporting on unparsable filenames --- httemplate/misc/upload-batch.cgi | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/httemplate/misc/upload-batch.cgi b/httemplate/misc/upload-batch.cgi index cc5346606..da5e41cbc 100644 --- a/httemplate/misc/upload-batch.cgi +++ b/httemplate/misc/upload-batch.cgi @@ -2,7 +2,7 @@ my $fh = $cgi->upload('batch_results'); my $filename = $cgi->param('batch_results'); - $filename =~ /^.*[\/\\]([^\/\\]+)$/ or die; + $filename =~ /^.*[\/\\]([^\/\\]+)$/ or die "unparsable filename: $filename\n"; my $paybatch = $1; my $error = defined($fh) -- cgit v1.2.1 From 038eaf525927a161e40577b2f2eec96c30523a6d Mon Sep 17 00:00:00 2001 From: ivan Date: Fri, 28 May 2004 11:33:21 +0000 Subject: not entirely sure why we're checking the filename at all... to catch empty form submissions? --- httemplate/misc/upload-batch.cgi | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/httemplate/misc/upload-batch.cgi b/httemplate/misc/upload-batch.cgi index da5e41cbc..5d0150177 100644 --- a/httemplate/misc/upload-batch.cgi +++ b/httemplate/misc/upload-batch.cgi @@ -2,8 +2,9 @@ my $fh = $cgi->upload('batch_results'); my $filename = $cgi->param('batch_results'); - $filename =~ /^.*[\/\\]([^\/\\]+)$/ or die "unparsable filename: $filename\n"; - my $paybatch = $1; + $filename =~ /^(.*[\/\\])?([^\/\\]+)$/ + or die "unparsable filename: $filename\n"; + my $paybatch = $2; my $error = defined($fh) ? FS::cust_pay_batch::import_results( { -- cgit v1.2.1 From 601023f13b2db7465f4c166181959dcf78ac1ecb Mon Sep 17 00:00:00 2001 From: ivan Date: Fri, 28 May 2004 13:48:34 +0000 Subject: adding --- bin/postfix_courierimap.import | 137 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100755 bin/postfix_courierimap.import diff --git a/bin/postfix_courierimap.import b/bin/postfix_courierimap.import new file mode 100755 index 000000000..ea7336794 --- /dev/null +++ b/bin/postfix_courierimap.import @@ -0,0 +1,137 @@ +#!/usr/bin/perl -Tw + +use strict; +use vars qw(%part_svc %domain_part_svc); +#use Date::Parse; +use DBI; +use Term::Query qw(query); +use FS::UID qw(adminsuidsetup); #datasrc +use FS::Record qw(qsearch qsearchs); +use FS::svc_acct; +use FS::part_svc; +use FS::svc_domain; + +my $user = shift or die &usage; +adminsuidsetup $user; + +#push @FS::svc_acct::shells, qw(/bin/sync /sbin/shutdown /bin/halt /sbin/halt); #others? + +$FS::svc_Common::noexport_hack = 1; +$FS::svc_domain::whois_hack = 1; + +### + +%part_svc=map { $_->svcpart, $_ } qsearch('part_svc',{'svcdb'=>'svc_acct'}); + +die "No services with svcdb svc_acct!\n" unless %part_svc; + +print "\n\n", &menu_svc, "\n", <svcpart, $_ } + qsearch('part_svc', { 'svcdb' => 'svc_domain'} ); + +die "No services with svcdb svc_domain!\n" unless %domain_part_svc; + +print "\n\n", &menu_domain_svc, "\n", <svc, sort keys %part_svc ). "\n"; +} +sub menu_domain_svc { + ( join "\n", map "$_: ".$domain_part_svc{$_}->svc, sort keys %domain_part_svc ). "\n"; +} +sub getpart { + $^W=0; # Term::Query isn't -w-safe + my $return = query "Enter part number:", 'irk', [ keys %part_svc ]; + $^W=1; + $return; +} +sub getdomainpart { + $^W=0; # Term::Query isn't -w-safe + my $return = query "Enter part number:", 'irk', [ keys %domain_part_svc ]; + $^W=1; + $return; +} +sub getvalue { + my $prompt = shift; + $^W=0; # Term::Query isn't -w-safe + my $return = query $prompt, ''; + $^W=1; + $return; +} + +print "\n\n"; + +### + +my $dbh = DBI->connect( $datasrc, $db_user, $db_pass ) + or die $DBI::errstr; + +my $sth = $dbh->prepare('SELECT username, password, crypt name, domain FROM mailbox') + or die $dbh->errstr; +$sth->execute or die $sth->errstr; + +my $row; +while ( defined ( $row = $sth->fetchrow_arrayref ) ) { + my( $r_username, $password, $crypt, $finger, $r_domain ) = @$row; + + my( $username, $domain ); + if ( $r_username =~ /^([^@]+)\@([^@]+)$/ ) { + $username = $1; + $domain = $2; + } else { + $username = $r_username; + $domain = $r_domain; + } + my $svc_domain = qsearchs('svc_domain', { 'domain' => $domain } ) + || new FS::svc_domain { + 'domain' => $domain, + 'svcpart' => $domain_svcpart, + 'action' => 'N', + }; + unless ( $svc_domain->svcnum ) { + my $error = $svc_domain->insert; + if ( $error ) { + die "can't insert domain $domain: $error\n"; + } + } + + $password = $crypt if $password eq '*CRYPTED*'; + + $finger =~ s/Outdoor Power.*$/Outdoor Power/; + + my $svc_acct = new FS::svc_acct { + 'svcpart' => $mailbox_svcpart, + 'username' => $username, + 'domsvc' => $svc_domain->svcnum, + '_password' => $password, + 'finger' => $finger, + }; + + my $error = $svc_acct->insert; + #my $error = $svc_acct->check; + if ( $error ) { + if ( $error =~ /duplicate/i ) { + warn "$r_username / $r_domain: $error"; + } else { + die "$r_username / $r_domain: $error"; + } + } + +} + +sub usage { + die "Usage:\n\n postfix_courierimap.import user\n"; +} + + -- cgit v1.2.1