diff options
Diffstat (limited to 'bin/svc_acct.import')
-rwxr-xr-x | bin/svc_acct.import | 87 |
1 files changed, 64 insertions, 23 deletions
diff --git a/bin/svc_acct.import b/bin/svc_acct.import index c4b8c5ec5..6541a9fd4 100755 --- a/bin/svc_acct.import +++ b/bin/svc_acct.import @@ -1,5 +1,7 @@ #!/usr/bin/perl -Tw # +# $Id: svc_acct.import,v 1.7 1999-07-08 02:32:26 ivan Exp $ +# # ivan@sisd.com 98-mar-9 # # changed 'password' field to '_password' because PgSQL 6.3 reserves this word @@ -13,19 +15,41 @@ # arbitrary radius attributes ivan@sisd.com 98-aug-9 # # don't import /var/spool/freeside/conf/shells! ivan@sisd.com 98-aug-13 +# +# $Log: svc_acct.import,v $ +# Revision 1.7 1999-07-08 02:32:26 ivan +# import fix, noticed by Ben Leibig and Joel Griffiths +# +# Revision 1.6 1999/07/08 01:49:00 ivan +# updates to avoid -w warnings from Joel Griffiths <griff@aver-computer.com> +# +# Revision 1.5 1999/03/25 08:42:19 ivan +# import stuff uses Term::Query and spits out (some kinds of) nonsensical input +# +# Revision 1.4 1999/03/24 00:43:38 ivan +# die if no relevant services +# +# Revision 1.3 1998/12/10 07:23:16 ivan +# use FS::Conf, need user (for datasrc) +# +# Revision 1.2 1998/10/13 12:07:51 ivan +# Assigns password from the shadow file for RADIUS password "UNIX" +# use strict; use vars qw(%part_svc); use Date::Parse; +use Term::Query qw(query); use FS::SSH qw(iscp); -use FS::UID qw(adminsuidsetup); +use FS::UID qw(adminsuidsetup datasrc); use FS::Record qw(qsearch); use FS::svc_acct; +use FS::part_svc; -adminsuidsetup; +my $user = shift or die &usage; +adminsuidsetup $user; -#my($spooldir)="/var/spool/freeside/export"; -my($spooldir)="unix/"; +my($spooldir)="/usr/local/etc/freeside/export.". datasrc; $FS::svc_acct::nossh_hack = 1; @@ -33,6 +57,8 @@ $FS::svc_acct::nossh_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", <<END; Most accounts probably have entries in passwd and users (with Port-Limit nonexistant or 1). @@ -58,8 +84,7 @@ my($oisdn_svcpart)=&getpart; print "\n\n", &menu_svc, "\n", <<END; POP mail accounts have entries in passwd only, and have a particular shell. END -print "Enter that shell: "; -my($pop_shell)=&getvalue; +my($pop_shell)=&getvalue("Enter that shell:"); my($popmail_svcpart)=&getpart; print "\n\n", &menu_svc, "\n", <<END; @@ -71,37 +96,38 @@ print "\n\n", <<END; Enter the location and name of your _user_ passwd file, for example "mail.isp.com:/etc/passwd" or "nis.isp.com:/etc/global/passwd" END -print ":"; -my($loc_passwd)=&getvalue; +my($loc_passwd)=&getvalue(":"); iscp("root\@$loc_passwd", "$spooldir/passwd.import"); print "\n\n", <<END; Enter the location and name of your _user_ shadow file, for example "mail.isp.com:/etc/shadow" or "bsd.isp.com:/etc/master.passwd" END -print ":"; -my($loc_shadow)=&getvalue; +my($loc_shadow)=&getvalue(":"); iscp("root\@$loc_shadow", "$spooldir/shadow.import"); print "\n\n", <<END; Enter the location and name of your radius "users" file, for example "radius.isp.com:/etc/raddb/users" END -print ":"; -my($loc_users)=&getvalue; +my($loc_users)=&getvalue(":"); iscp("root\@$loc_users", "$spooldir/users.import"); sub menu_svc { ( join "\n", map "$_: ".$part_svc{$_}->svc, sort keys %part_svc ). "\n"; } sub getpart { - print "Enter part number, or 0 for none: "; - &getvalue; + $^W=0; # Term::Query isn't -w-safe + my $return = query "Enter part number:", 'irk', [ keys %part_svc ]; + $^W=1; + $return; } sub getvalue { - my($x)=scalar(<STDIN>); - chop $x; - $x; + my $prompt = shift; + $^W=0; # Term::Query isn't -w-safe + my $return = query $prompt, ''; + $^W=1; + $return; } print "\n\n"; @@ -122,6 +148,7 @@ while (<USERS>) { or die "1Unexpected line in users.import: $_"; my($password,$expiration); ($username,$password,$expiration)=(lc($1),$2,$4); + $password = '' if $password eq 'UNIX'; $upassword{$username}=$password; undef %param; } else { @@ -130,8 +157,12 @@ while (<USERS>) { while (<USERS>) { chop; if ( /^\s*$/ ) { - $ip{$username}=$param{'radius_Framed_IP_Address'}||'0e0'; - delete $param{'radius_Framed_IP_Address'}; + if ( defined $param{'radius_Framed_IP_Address'} ) { + $ip{$username} = $param{'radius_Framed_IP_Address'}; + delete $param{'radius_Framed_IP_Address'}; + } else { + $ip{$username} = '0e0'; + } $allparam{$username}={ %param }; last; } elsif ( /^\s+([\w\-]+)\s=\s"?([\w\.\-\s]+)"?,?\s*$/ ) { @@ -144,8 +175,12 @@ while (<USERS>) { } } #? incase there isn't a terminating blank line ? -$ip{$username}=$param{'radius_Framed_IP_Address'}||'0e0'; -delete $param{'radius_Framed_IP_Address'}; +if ( defined $param{'radius_Framed_IP_Address'} ) { + $ip{$username} = $param{'radius_Framed_IP_Address'}; + delete $param{'radius_Framed_IP_Address'}; +} else { + $ip{$username} = '0e0'; +} $allparam{$username}={ %param }; my(%password); @@ -176,7 +211,7 @@ while (<PASSWD>) { $svcpart = $shell_svcpart; } - my($svc_acct) = create FS::svc_acct ({ + my($svc_acct) = new FS::svc_acct ({ 'svcpart' => $svcpart, 'username' => $username, 'password' => $password, @@ -210,7 +245,7 @@ foreach $username ( keys %upassword ) { die "Illegal Port-Limit in users!\n"; } - my($svc_acct) = create FS::svc_acct ({ + my($svc_acct) = new FS::svc_acct ({ 'svcpart' => $svcpart, 'username' => $username, 'password' => $password, @@ -225,3 +260,9 @@ foreach $username ( keys %upassword ) { delete $upassword{$username}; } +# + +sub usage { + die "Usage:\n\n svc_acct.export user\n"; +} + |