export updates
authorivan <ivan>
Thu, 27 Jun 2002 09:19:33 +0000 (09:19 +0000)
committerivan <ivan>
Thu, 27 Jun 2002 09:19:33 +0000 (09:19 +0000)
FS/FS/part_export/bsdshell.pm
FS/FS/part_export/null.pm [new file with mode: 0644]
FS/FS/part_export/sysvshell.pm [new file with mode: 0644]
FS/FS/part_export/www_shellcommands.pm [new file with mode: 0644]
FS/t/part_export-null.t [new file with mode: 0644]
FS/t/part_export-sysvshell.t [new file with mode: 0644]
FS/t/part_export-www_shellcommands.t [new file with mode: 0644]

index 4a890d0..0664209 100644 (file)
@@ -1,50 +1,7 @@
 package FS::part_export::bsdshell;
 
 use vars qw(@ISA);
-use FS::part_export;
+use FS::part_export::null;
 
-@ISA = qw(FS::part_export);
-
-sub rebless { shift; }
-
-sub _export_insert {
-  my($self, $svc_acct) = (shift, shift);
-  $err_or_queue = $self->bsdshell_queue( $svc_acct->svcnum, 'insert',
-    $svc_acct->username, $svc_acct->_password );
-  ref($err_or_queue) ? '' : $err_or_queue;
-}
-
-sub _export_replace {
-  my( $self, $new, $old ) = (shift, shift, shift);
-  #return "can't change username with bsdshell"
-  #  if $old->username ne $new->username;
-  #return '' unless $old->_password ne $new->_password;
-  $err_or_queue = $self->bsdshell_queue( $new->svcnum,
-    'replace', $new->username, $new->_password );
-  ref($err_or_queue) ? '' : $err_or_queue;
-}
-
-sub _export_delete {
-  my( $self, $svc_acct ) = (shift, shift);
-  $err_or_queue = $self->bsdshell_queue( $svc_acct->svcnum,
-    'delete', $svc_acct->username );
-  ref($err_or_queue) ? '' : $err_or_queue;
-}
-
-#a good idea to queue anything that could fail or take any time
-sub bsdshell_queue {
-  my( $self, $svcnum, $method ) = (shift, shift, shift);
-  my $queue = new FS::queue {
-    'svcnum' => $svcnum,
-    'job'    => "FS::part_export::bsdshell::bsdshell_$method",
-  };
-  $queue->insert( @_ ) or $queue;
-}
-
-sub bsdshell_insert { #subroutine, not method
-}
-sub bsdshell_replace { #subroutine, not method
-}
-sub bsdshell_delete { #subroutine, not method
-}
+@ISA = qw(FS::part_export::null);
 
diff --git a/FS/FS/part_export/null.pm b/FS/FS/part_export/null.pm
new file mode 100644 (file)
index 0000000..0145af3
--- /dev/null
@@ -0,0 +1,13 @@
+package FS::part_export::null;
+
+use vars qw(@ISA);
+use FS::part_export;
+
+@ISA = qw(FS::part_export);
+
+sub rebless { shift; }
+
+sub _export_insert {}
+sub _export_replace {}
+sub _export_delete {}
+
diff --git a/FS/FS/part_export/sysvshell.pm b/FS/FS/part_export/sysvshell.pm
new file mode 100644 (file)
index 0000000..f3f6b34
--- /dev/null
@@ -0,0 +1,7 @@
+package FS::part_export::sysvshell;
+
+use vars qw(@ISA);
+use FS::part_export::null;
+
+@ISA = qw(FS::part_export::null);
+
diff --git a/FS/FS/part_export/www_shellcommands.pm b/FS/FS/part_export/www_shellcommands.pm
new file mode 100644 (file)
index 0000000..870d7f1
--- /dev/null
@@ -0,0 +1,70 @@
+package FS::part_export::shellcommands;
+
+use vars qw(@ISA);
+use FS::part_export;
+
+@ISA = qw(FS::part_export);
+
+sub rebless { shift; }
+
+sub _export_insert {
+  my($self) = shift;
+  $self->_export_command('useradd', @_);
+}
+
+sub _export_delete {
+  my($self) = shift;
+  $self->_export_command('userdel', @_);
+}
+
+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,
+    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,
+    user         => $self->options('user')||'root',
+    host         => $self->options('machine'),
+    command      => eval(qq("$command")),
+    stdin_string => eval(qq("$stdin")),
+  );
+}
+
+#a good idea to queue anything that could fail or take any time
+sub shellcommands_queue {
+  my( $self, $svcnum ) = (shift, shift);
+  my $queue = new FS::queue {
+    'svcnum' => $svcnum,
+    '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
+#}
+#sub shellcommands_delete { #subroutine, not method
+#}
+
diff --git a/FS/t/part_export-null.t b/FS/t/part_export-null.t
new file mode 100644 (file)
index 0000000..055cdce
--- /dev/null
@@ -0,0 +1,5 @@
+BEGIN { $| = 1; print "1..1\n" }
+END {print "not ok 1\n" unless $loaded;}
+use FS::part_export::null;
+$loaded=1;
+print "ok 1\n";
diff --git a/FS/t/part_export-sysvshell.t b/FS/t/part_export-sysvshell.t
new file mode 100644 (file)
index 0000000..7fc24ac
--- /dev/null
@@ -0,0 +1,5 @@
+BEGIN { $| = 1; print "1..1\n" }
+END {print "not ok 1\n" unless $loaded;}
+use FS::part_export::sysvshell;
+$loaded=1;
+print "ok 1\n";
diff --git a/FS/t/part_export-www_shellcommands.t b/FS/t/part_export-www_shellcommands.t
new file mode 100644 (file)
index 0000000..2ea79cf
--- /dev/null
@@ -0,0 +1,5 @@
+BEGIN { $| = 1; print "1..1\n" }
+END {print "not ok 1\n" unless $loaded;}
+use FS::part_export::www_shellcommands;
+$loaded=1;
+print "ok 1\n";