summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile.am1
-rw-r--r--functions/interpreter/vyatta-image-complete20
-rw-r--r--functions/interpreter/vyatta-op-run4
-rwxr-xr-xscripts/vyatta-image-tools.pl289
-rw-r--r--templates/clone/node.def1
-rw-r--r--templates/clone/system/config/node.def1
-rw-r--r--templates/clone/system/config/node.tag/from/node.def1
-rw-r--r--templates/clone/system/config/node.tag/from/node.tag/node.def18
-rw-r--r--templates/clone/system/config/node.tag/node.def14
-rw-r--r--templates/clone/system/node.def1
-rw-r--r--templates/copy/file/node.def1
-rw-r--r--templates/copy/file/node.tag/node.def3
-rw-r--r--templates/copy/file/node.tag/to/node.def1
-rw-r--r--templates/copy/file/node.tag/to/node.tag/node.def10
-rw-r--r--templates/copy/node.def1
-rw-r--r--templates/delete/file/node.def1
-rw-r--r--templates/delete/file/node.tag/node.def10
-rw-r--r--templates/show/file/node.def1
-rw-r--r--templates/show/file/node.tag/node.def10
19 files changed, 14 insertions, 374 deletions
diff --git a/Makefile.am b/Makefile.am
index 398c259..c5d9322 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -21,7 +21,6 @@ bin_SCRIPTS += scripts/rename-image.pl
bin_SCRIPTS += scripts/show-image-storage.pl
bin_SCRIPTS += scripts/vyatta-op-cmd-wrapper
-sbin_SCRIPTS = scripts/vyatta-image-tools.pl
all-local:
./gen-unpriv-commands.sh
diff --git a/functions/interpreter/vyatta-image-complete b/functions/interpreter/vyatta-image-complete
index cfc1c90..48110cf 100644
--- a/functions/interpreter/vyatta-image-complete
+++ b/functions/interpreter/vyatta-image-complete
@@ -48,12 +48,14 @@ _vyatta_image_file_complete()
_vyatta_op_completions=( "" " " )
return 0;
fi
+
_vyatta_image_path_complete
}
-declare -a non_comps=( "http://<user>:<passwd>@<host>/<file>" \
+declare -a non_comps=( "http(s)://<user>:<passwd>@<host>/<file>" \
"scp://<user>:<passwd>@<host>/<file>" \
- "ftp://<user>:<passwd>@<host>/<file>" \
+ "sftp://<user>:<passwd>@<host>/<file>" \
+ "ftp(s)://<user>:<passwd>@<host>/<file>" \
"tftp://<host>/<file>" )
_vyatta_image_path_complete()
@@ -79,9 +81,9 @@ _vyatta_image_path_complete()
for i in `seq 0 $[${#reply[@]}-1]`; do
file=${reply[$i]}
reply[$i]=${file/#\/lib\/live\/mount\/persistence\/boot\//}
- reply[$i]="${reply[$i]}://config/"
+ reply[$i]="${reply[$i]}://"
done
- reply+=( "running://config/" )
+ reply+=( "running://" )
if [[ -d /lib/live/mount/persistence/opt/vyatta/etc/config || -d /lib/live/mount/persistence/config ]]; then
reply+=( "disk-install://" )
fi
@@ -108,13 +110,13 @@ _vyatta_image_path_complete()
for i in `seq 0 $[${#reply[@]}-1]`; do
file=${reply[$i]}
if [[ $isrunningimg == "running" ]];then
- reply[$i]="running://config/"
+ reply[$i]="running://"
elif [[ $isdiskinstall == "disk-install" ]]; then
reply[$i]="disk-install://"
else
reply[$i]=${file/#\/lib\/live\/mount\/persistence\/boot\//}
- if [[ -d /ib/live/mount/persistence/boot/${reply[$i]} ]]; then
- reply[$i]="${reply[$i]/#\//}://config/"
+ if [[ -d /lib/live/mount/persistence/boot/${reply[$i]} ]]; then
+ reply[$i]="${reply[$i]/#\//}://"
fi
fi
done
@@ -125,9 +127,9 @@ _vyatta_image_path_complete()
if [[ $topdir == "running" ]]; then
cur="/${cur}"
elif [[ $topdir == "disk-install" ]]; then
- cur="/ib/live/mount/persistence/${cur}"
+ cur="/lib/live/mount/persistence/${cur}"
else
- cur="/ib/live/mount/persistence/boot/${topdir}/rw/${cur}"
+ cur="/lib/live/mount/persistence/boot/${topdir}/rw/${cur}"
fi
reply=( $(compgen -f ${cur}) )
# for loop from _filedirs() in /etc/bash_completion
diff --git a/functions/interpreter/vyatta-op-run b/functions/interpreter/vyatta-op-run
index ee4cb1c..6bf6645 100644
--- a/functions/interpreter/vyatta-op-run
+++ b/functions/interpreter/vyatta-op-run
@@ -218,7 +218,9 @@ _vyatta_op_run ()
local run_cmd=$(_vyatta_op_get_node_def_field $tpath/node.def run)
run_cmd=$(_vyatta_op_conv_run_cmd "$run_cmd") # convert the positional parameters
local ret=0
- local cmd_regex="^(LESSOPEN=|less|pager|tail|/opt/vyatta/bin/vyatta-tshark-interface-port.pl).*"
+ # Exception for the `show file` command
+ local file_cmd='\$\{vyos_op_scripts_dir\}\/file\.py'
+ local cmd_regex="^(LESSOPEN=|less|pager|tail|(sudo )?$file_cmd).*"
if [ -n "$run_cmd" ]; then
eval $restore_shopts
if [[ -t 1 && "${args[1]}" == "show" && ! $run_cmd =~ $cmd_regex ]] ; then
diff --git a/scripts/vyatta-image-tools.pl b/scripts/vyatta-image-tools.pl
deleted file mode 100755
index d654a22..0000000
--- a/scripts/vyatta-image-tools.pl
+++ /dev/null
@@ -1,289 +0,0 @@
-#!/usr/bin/perl -w
-use Getopt::Long;
-use lib "/opt/vyatta/share/perl5/";
-
-use strict;
-use IO::Prompt;
-
-my ($show, $delete, $updateone);
-my @copy;
-my @update;
-
-GetOptions(
- "show=s" => \$show,
- "delete=s" => \$delete,
- "update=s{2}" => \@update,
- "updateone=s" => \$updateone,
- "copy=s{2}" => \@copy
-);
-
-if (defined $show){
- show($show);
-}
-if (defined $delete){
- delete_file($delete);
-}
-if (@update){
- update(@update);
-}
-if (defined($updateone)){
- update($updateone, "running");
-}
-if (@copy){
- copy(@copy);
-}
-
-sub conv_file {
- my $file = " ";
- my $filein = pop(@_);
- $file = $filein;
- my $topdir;
- if ($file =~ /(.+?):\/\/(.*)/){
- $topdir = $1;
- $file = $2;
- } elsif ($file =~ /^\//) {
- $topdir = "running";
- } else {
- print "File: $filein not found \n";
- exit 1;
- }
- if ($topdir eq "running") {
- $file = "/$file";
- } elsif (lc($topdir) eq 'disk-install') {
- $file = "/lib/live/mount/persistence/$file";
- } elsif (grep { lc($topdir) eq $_ } ("ftp", "tftp", "http", "https", "scp", "sftp")) {
- $file = $filein;
- $topdir = 'url';
- } else {
- if (!-d "/lib/live/mount/persistence/boot/$topdir/rw"){
- print "Image $topdir not found!\n";
- exit 1;
- }
- $file = "/lib/live/mount/persistence/boot/$topdir/rw/$file";
- }
- return ($topdir, $file);
-}
-
-sub conv_file_to_rel {
- my ($topdir, $filename) = @_;
- if ($topdir eq "running"){
- $filename =~ s?/?$topdir://?;
- } elsif ($topdir eq "disk-install") {
- $filename =~ s?/lib/live/mount/persistence/?$topdir://?;
- } else {
- $filename =~ s?/lib/live/mount/persistence/boot/$topdir/rw/?$topdir://?;
- }
- return $filename;
-}
-
-sub delete_file {
- my ($file) = @_;
- (my $topdir, $file) = conv_file($file);
- if ($topdir eq 'url'){
- print "Cannot delete files from a url\n";
- exit 1;
- }
- if (-d $file){
- my $print_dir = conv_file_to_rel($topdir,$file);
- if (y_or_n("Do you want to erase the entire $print_dir directory?")){
- system("rm -rf $file");
- print("Directory erased\n");
- }
- } elsif (-f $file) {
- my $print_file = conv_file_to_rel($topdir,$file);
- if (y_or_n("Do you want to erase the $print_file file?")){
- system("rm -rf $file");
- print("File erased\n");
- }
- }
-}
-
-sub url_copy {
- my ($from, $to) = @_;
- my ($f_topdir, $t_topdir);
- ($f_topdir, $from) = conv_file($from);
- ($t_topdir, $to) = conv_file($to);
- if ($t_topdir eq 'url' && $f_topdir eq 'url'){
- print "Cannot copy a url to a url\n";
- exit 1;
- } elsif($t_topdir eq 'url') {
- if (-d $from){
- print "Cannot upload an entire directory to url\n";
- exit 1;
- } elsif ($to =~ /http/){
- print "Cannot upload to http url\n";
- exit 1;
- }
- upload($from, $to);
- } elsif ($f_topdir eq 'url') {
- if (-d $to){
- $from =~ /.*\/(.*)/;
- my $from_file = $1;
- $to = "$to/$from_file";
- if (-f "$to") {
- if (!y_or_n("This file exists; overwrite if needed?")){
- exit 0;
- }
- }
- }
- print "Downloading...\n";
- download($from, $to);
- print "Download complete.\n";
- }
- exit 0;
-}
-
-sub copy {
- my ($from, $to) = @_;
- my ($f_topdir, $t_topdir);
- ($f_topdir, $from) = conv_file($from);
- if ($f_topdir eq 'url'){
- url_copy($from, $to);
- }
- ($t_topdir, $to) = conv_file($to);
- if ($t_topdir eq 'url'){
- url_copy($from, $to);
- }
- $from =~ /.*\/(.*)/;
- my $from_file = $1;
- if (-d $from && -e $to && !(-d $to)){
- print "Cannot copy a directory to a file.\n";
- return 1;
- } elsif (-f $to || (-d $to && -f "$to/$from_file")) {
- if (y_or_n("This file exists; overwrite if needed?")){
- rsync($from, $to);
- }
- } elsif (-d $to && -d $from){
- if (y_or_n("This directory exists; would you like to merge?")){
- rsync($from, $to);
- }
- } else {
- rsync($from, $to);
- }
-}
-
-sub update {
- my ($to, $from) = @_;
- my ($t_topdir, $f_topdir);
- ($f_topdir, $from) = conv_file("$from://");
- if ($f_topdir eq 'url'){
- print "Cannot clone from a url\n";
- exit 1;
- }
- ($t_topdir, $to) = conv_file("$to://");
- if ($t_topdir eq 'running'){
- print "Cannot clone to running\n";
- exit 1;
- }
- if ($t_topdir eq 'disk-install'){
- print "Cannot clone to disk-install\n";
- exit 1;
- }
- if ($t_topdir eq 'url'){
- print "Cannot clone to a url\n";
- exit 1;
- }
- my $print_from = conv_file_to_rel($f_topdir, $from);
- my $print_to = conv_file_to_rel($t_topdir, $to);
- my $msg = "WARNING: This is a destructive copy of the /config directories\n".
- "This will erase all data in the ".$print_to."config directory\n".
- "This data will be replaced with the data from ".$print_from."config\n".
- "The current config data will be backed up in ".$print_to."config.preclone\n".
- "Do you wish to continue?";
- if (y_or_n("$msg")){
- system("rm -rf $to/config.preclone");
- system("mv $to/config $to/config.preclone") if (-d "$to/config");
- my $confdir="config";
- $confdir="opt/vyatta/etc/config" if ($f_topdir eq "disk-install");
- if (rsync("$from/$confdir", $to) > 0){
- print "Clone Failed!\nRestoring old config\n";
- system("mv $to/config.preclone $to/config");
- }
- }
-}
-
-sub rsync {
- my ($from,$to) = @_;
- system("rsync -a --progress --exclude '.wh.*' $from $to");
- return $?;
-}
-
-sub upload {
- my ($from, $to) = @_;
- system("python3 -c 'from vyos.remote import upload; upload(\"$from\", \"$to\")'")
-}
-
-sub download {
- my ($from, $to) = @_;
- system("python3 -c 'from vyos.remote import download; download(\"$to\", \"$from\", progressbar=True, check_space=True)'");
-}
-
-sub y_or_n {
- my ($msg) = @_;
- my $process_client = $ENV{'VYATTA_PROCESS_CLIENT'};
- if (defined $process_client){
- return 1 if ($process_client =~ /gui2_rest/);
- }
- print "$msg (Y/N): ";
- my $input = <>;
- return 1 if ($input =~ /Y|y/);
- return 0;
-}
-
-sub show {
- my ($topdir, $file) = conv_file(pop(@_));
- my $output = "";
- if ($topdir eq 'url'){
- print "Cannot show files from a url\n";
- exit 1;
- }
- if (-d $file) {
- print "########### DIRECTORY LISTING ###########\n";
- system("ls -lGph --group-directories-first $file");
- } elsif (-T $file) {
- print "########### FILE INFO ###########\n";
- my $filename = conv_file_to_rel($topdir, $file);
- print "File Name: $filename\n";
- print "Text File: \n";
- my $lsstr = `ls -lGh $file`;
- parsels($lsstr);
- print " Description:\t";
- system("file -sb $file");
- print "\n########### FILE DATA ###########\n";
- system("cat $file");
- } elsif ($file =~ /.*\.pcap/){
- print "########### FILE INFO ###########\n";
- my $filename = conv_file_to_rel($topdir, $file);
- print "File Name: $filename\n";
- print "Binary File: \n";
- my $lsstr = `ls -lGh $file`;
- parsels($lsstr);
- print " Description:\t";
- system("file -sb $file");
- print "\n########### FILE DATA ###########\n";
- system("sudo tshark -r $file | less");
- } elsif (-B $file) {
- print "########### FILE INFO ###########\n";
- my $filename = conv_file_to_rel($topdir, $file);
- print "File Name: $filename\n";
- print "Binary File: \n";
- my $lsstr = `ls -lGh $file`;
- parsels($lsstr);
- print " Description:\t";
- system("file -sb $file");
- print "\n########### FILE DATA ###########\n";
- system("hexdump -C $file| less");
- } else {
- my $filename = conv_file_to_rel($topdir, $file);
- print "File: $filename not found\n";
- }
-}
-
-sub parsels {
- my $lsout = pop(@_);
- my @ls = split(' ', $lsout);
- print " Permissions: $ls[0]\n";
- print " Owner:\t$ls[2]\n";
- print " Size:\t\t$ls[3]\n";
- print " Modified:\t$ls[4] $ls[5] $ls[6]\n";
-}
diff --git a/templates/clone/node.def b/templates/clone/node.def
deleted file mode 100644
index 25c577a..0000000
--- a/templates/clone/node.def
+++ /dev/null
@@ -1 +0,0 @@
-help: Clone an object
diff --git a/templates/clone/system/config/node.def b/templates/clone/system/config/node.def
deleted file mode 100644
index 0b1b387..0000000
--- a/templates/clone/system/config/node.def
+++ /dev/null
@@ -1 +0,0 @@
-help: Clone system configuration
diff --git a/templates/clone/system/config/node.tag/from/node.def b/templates/clone/system/config/node.tag/from/node.def
deleted file mode 100644
index 6c2682c..0000000
--- a/templates/clone/system/config/node.tag/from/node.def
+++ /dev/null
@@ -1 +0,0 @@
-help: Image to clone from
diff --git a/templates/clone/system/config/node.tag/from/node.tag/node.def b/templates/clone/system/config/node.tag/from/node.tag/node.def
deleted file mode 100644
index d883c8c..0000000
--- a/templates/clone/system/config/node.tag/from/node.tag/node.def
+++ /dev/null
@@ -1,18 +0,0 @@
-help: Image to update from
-allowed: reply=( $(compgen -d /lib/live/mount/persistence/boot/ | grep -v grub) )
- for i in `seq 0 $[${#reply[@]}-1]`; do
- file=${reply[$i]}
- reply[$i]=${file/#\/lib\/live\/mount\/persistence\/boot\//}
- done
- reply+=( "running" )
- if [[ -d /lib/live/mount/persistence/config ]];then
- reply+=( "disk-install" )
- fi
- echo "${reply[*]}"
-run: if [ "$VYATTA_USER_LEVEL_DIR" == "/opt/vyatta/etc/shell/level/admin" ];
- then
- sudo ${vyatta_sbindir}/vyatta-image-tools.pl --update $4 $6
- else
- echo Must be an admin user to run this command.
- fi
-
diff --git a/templates/clone/system/config/node.tag/node.def b/templates/clone/system/config/node.tag/node.def
deleted file mode 100644
index ec82322..0000000
--- a/templates/clone/system/config/node.tag/node.def
+++ /dev/null
@@ -1,14 +0,0 @@
-help: Image to update
-allowed: reply=( $(compgen -d /lib/live/mount/persistence/boot/ | grep -v grub) )
- for i in `seq 0 $[${#reply[@]}-1]`; do
- file=${reply[$i]}
- reply[$i]=${file/#\/lib\/live\/mount\/persistence\/boot\//}
- done
- echo "${reply[*]}"
-run: if [ "$VYATTA_USER_LEVEL_DIR" == "/opt/vyatta/etc/shell/level/admin" ];
- then
- sudo ${vyatta_sbindir}/vyatta-image-tools.pl --updateone $4
- else
- echo Must be an admin user to run this command.
- fi
-
diff --git a/templates/clone/system/node.def b/templates/clone/system/node.def
deleted file mode 100644
index ea29628..0000000
--- a/templates/clone/system/node.def
+++ /dev/null
@@ -1 +0,0 @@
-help: Clone a system object
diff --git a/templates/copy/file/node.def b/templates/copy/file/node.def
deleted file mode 100644
index e1b2447..0000000
--- a/templates/copy/file/node.def
+++ /dev/null
@@ -1 +0,0 @@
-help: Copy files
diff --git a/templates/copy/file/node.tag/node.def b/templates/copy/file/node.tag/node.def
deleted file mode 100644
index 50b9153..0000000
--- a/templates/copy/file/node.tag/node.def
+++ /dev/null
@@ -1,3 +0,0 @@
-help: Copy files from specified source
-comptype: imagefiles
-allowed: echo -n "<imagefiles>"
diff --git a/templates/copy/file/node.tag/to/node.def b/templates/copy/file/node.tag/to/node.def
deleted file mode 100644
index 21f3ade..0000000
--- a/templates/copy/file/node.tag/to/node.def
+++ /dev/null
@@ -1 +0,0 @@
-help: Path to copy into
diff --git a/templates/copy/file/node.tag/to/node.tag/node.def b/templates/copy/file/node.tag/to/node.tag/node.def
deleted file mode 100644
index b9a136e..0000000
--- a/templates/copy/file/node.tag/to/node.tag/node.def
+++ /dev/null
@@ -1,10 +0,0 @@
-help: Copy files to specified destination
-comptype: imagefiles
-allowed: echo -n "<imagefiles>"
-run: if [ "$VYATTA_USER_LEVEL_DIR" == "/opt/vyatta/etc/shell/level/admin" ];
- then
- sudo ${vyatta_sbindir}/vyatta-image-tools.pl --copy $3 $5
- else
- echo Must be an admin user to run this command.
- fi
-
diff --git a/templates/copy/node.def b/templates/copy/node.def
deleted file mode 100644
index eb33037..0000000
--- a/templates/copy/node.def
+++ /dev/null
@@ -1 +0,0 @@
-help: Copy an object
diff --git a/templates/delete/file/node.def b/templates/delete/file/node.def
deleted file mode 100644
index 92c8f6c..0000000
--- a/templates/delete/file/node.def
+++ /dev/null
@@ -1 +0,0 @@
-help: Delete files in a particular image
diff --git a/templates/delete/file/node.tag/node.def b/templates/delete/file/node.tag/node.def
deleted file mode 100644
index 0faf383..0000000
--- a/templates/delete/file/node.tag/node.def
+++ /dev/null
@@ -1,10 +0,0 @@
-help: Delete files in the specified directory
-comptype: imagefiles
-allowed: echo -n "<imagefiles>"
-run: if [ "$VYATTA_USER_LEVEL_DIR" == "/opt/vyatta/etc/shell/level/admin" ];
- then
- sudo ${vyatta_sbindir}/vyatta-image-tools.pl --delete=$3
- else
- echo Must be an admin user to run this command.
- fi
-
diff --git a/templates/show/file/node.def b/templates/show/file/node.def
deleted file mode 100644
index a6c408d..0000000
--- a/templates/show/file/node.def
+++ /dev/null
@@ -1 +0,0 @@
-help: Show files for a particular image
diff --git a/templates/show/file/node.tag/node.def b/templates/show/file/node.tag/node.def
deleted file mode 100644
index 8d3eb32..0000000
--- a/templates/show/file/node.tag/node.def
+++ /dev/null
@@ -1,10 +0,0 @@
-help: Show files in the specified directory
-comptype: imagefiles
-allowed: echo -n "<imagefiles>"
-run: if [ "$VYATTA_USER_LEVEL_DIR" == "/opt/vyatta/etc/shell/level/admin" ];
- then
- sudo ${vyatta_sbindir}/vyatta-image-tools.pl --show=$3
- else
- echo Must be an admin user to run this command.
- fi
-