From cf6020a0c273d549d33f3e9999bd8b68d9b6d133 Mon Sep 17 00:00:00 2001 From: ivan Date: Thu, 20 Jun 2002 01:29:21 +0000 Subject: [PATCH] shellcommands w/passwords --- FS/FS/part_export.pm | 16 ++++++++++++++-- FS/FS/part_export/shellcommands.pm | 21 ++++++++++++++++----- FS/bin/freeside-queued | 2 +- httemplate/edit/part_export.cgi | 2 ++ httemplate/edit/process/part_export.cgi | 6 +++++- 5 files changed, 38 insertions(+), 9 deletions(-) diff --git a/FS/FS/part_export.pm b/FS/FS/part_export.pm index 9af00174d..20e3ab474 100644 --- a/FS/FS/part_export.pm +++ b/FS/FS/part_export.pm @@ -526,21 +526,33 @@ tie my %shellcommands_options, 'Tie::IxHash', #'machine' => { label=>'Remote machine' }, 'user' => { label=>'Remote username', default=>'root' }, 'useradd' => { label=>'Insert command', - default=>'useradd -d $dir -m -s $shell -u $uid $username' + default=>'useradd -d $dir -m -s $shell -u $uid $username; passwd $username' #default=>'cp -pr /etc/skel $dir; chown -R $uid.$gid $dir' }, + 'useradd_stdin' => { label=>'Insert command STDIN', + type =>'textarea', + default=>'$_password\n$_password\n', + }, 'userdel' => { label=>'Delete command', default=>'userdel $username', #default=>'rm -rf $dir', }, + 'userdel_stdin' => { label=>'Delete command STDIN', + type =>'textarea', + default=>'', + }, 'usermod' => { label=>'Modify command', - default=>'usermod -d $new_dir -l $new_username -s $new_shell -u $new_uid $old_username', + default=>'usermod -d $new_dir -l $new_username -s $new_shell -u $new_uid $old_username; passwd $new_username', #default=>'[ -d $old_dir ] && mv $old_dir $new_dir || ( '. # 'chmod u+t $old_dir; mkdir $new_dir; cd $old_dir; '. # 'find . -depth -print | cpio -pdm $new_dir; '. # 'chmod u-t $new_dir; chown -R $uid.$gid $new_dir; '. # 'rm -rf $old_dir'. #')' + 'usermod_stdin' => { label=>'Modify command STDIN', + type =>'textarea', + default=>'$_password\n$_password\n', + }, }, ; diff --git a/FS/FS/part_export/shellcommands.pm b/FS/FS/part_export/shellcommands.pm index 7a87bd3e0..870d7f1ee 100644 --- a/FS/FS/part_export/shellcommands.pm +++ b/FS/FS/part_export/shellcommands.pm @@ -20,23 +20,29 @@ sub _export_delete { sub _export_command { my ( $self, $action, $svc_acct) = (shift, shift, shift); my $command = $self->option($action); + my $stdin = $self->option($action."_stdin"); no strict 'refs'; ${$_} = $svc_acct->getfield($_) foreach $svc_acct->fields; $self->shellcommands_queue( $svc_acct->svcnum, - $self->options('user')||'root'. "\@". $self->options('machine'), - eval(qq("$command")) + user => $self->options('user')||'root', + host => $self->options('machine'), + command => eval(qq("$command")), + stdin_string => eval(qq("$stdin")), ); } sub _export_replace { my($self, $new, $old ) = (shift, shift, shift); my $command = $self->option('usermod'); + my $stdin = $self->option('usermod_stdin'); no strict 'refs'; ${"old_$_"} = $old->getfield($_) foreach $old->fields; ${"new_$_"} = $new->getfield($_) foreach $new->fields; $self->shellcommands_queue( $new->svcnum, - $self->options('user')||'root'. "\@". $self->options('machine'), - eval(qq("$command")) + user => $self->options('user')||'root', + host => $self->options('machine'), + command => eval(qq("$command")), + stdin_string => eval(qq("$stdin")), ); } @@ -45,11 +51,16 @@ sub shellcommands_queue { my( $self, $svcnum ) = (shift, shift); my $queue = new FS::queue { 'svcnum' => $svcnum, - 'job' => "Net::SSH::ssh_cmd", #freeside-queued pre-uses... + 'job' => "FS::part_export::shellcommands::ssh_cmd", }; $queue->insert( @_ ); } +sub ssh_cmd { #subroutine, not method + use Net::SSH '0.06'; + &Net::SSH::ssh_cmd( { @_ } ); +} + #sub shellcommands_insert { #subroutine, not method #} #sub shellcommands_replace { #subroutine, not method diff --git a/FS/bin/freeside-queued b/FS/bin/freeside-queued index 846055dc3..48d283a75 100644 --- a/FS/bin/freeside-queued +++ b/FS/bin/freeside-queued @@ -15,7 +15,7 @@ use FS::queue_depend; # no autoloading just yet use FS::cust_main; use FS::svc_acct; -use Net::SSH 0.05; +use Net::SSH 0.06; use FS::part_export; $max_kids = '10'; #guess it should be a config file... diff --git a/httemplate/edit/part_export.cgi b/httemplate/edit/part_export.cgi index fbc698e8b..486bd4300 100644 --- a/httemplate/edit/part_export.cgi +++ b/httemplate/edit/part_export.cgi @@ -63,6 +63,8 @@ my $widget = new HTML::Widgets::SelectLayers( #} } $html .= ''; + } elsif ( $type eq 'textarea' ) { + $html .= qq!!; } elsif ( $type eq 'text' ) { $html .= qq!!; } else { diff --git a/httemplate/edit/process/part_export.cgi b/httemplate/edit/process/part_export.cgi index 6b4d007e4..fa009edbb 100644 --- a/httemplate/edit/process/part_export.cgi +++ b/httemplate/edit/process/part_export.cgi @@ -6,7 +6,11 @@ my $old = qsearchs('part_export', { 'exportnum'=>$exportnum } ) if $exportnum; #fixup options #warn join('-', split(',',$cgi->param('options'))); -my %options = map { $_=>$cgi->param($_) } split(',',$cgi->param('options')); +my %options = map { + my $value = $cgi->param($_); + $value =~ s/\r\n/\n/g; #browsers? (textarea) + $_ => $value; +} split(',', $cgi->param('options')); my $new = new FS::part_export ( { map { -- 2.11.0