diff options
Diffstat (limited to '')
-rw-r--r-- | src/vfs/shell/helpers/Makefile.am | 10 | ||||
-rw-r--r-- | src/vfs/shell/helpers/Makefile.in (renamed from src/vfs/fish/helpers/Makefile.in) | 60 | ||||
-rw-r--r-- | src/vfs/shell/helpers/README.shell | 227 | ||||
-rw-r--r-- | src/vfs/shell/helpers/append | 15 | ||||
-rw-r--r-- | src/vfs/shell/helpers/chmod | 5 | ||||
-rw-r--r-- | src/vfs/shell/helpers/chown | 5 | ||||
-rw-r--r-- | src/vfs/shell/helpers/fexists | 2 | ||||
-rw-r--r-- | src/vfs/shell/helpers/get (renamed from src/vfs/fish/helpers/get) | 17 | ||||
-rw-r--r-- | src/vfs/shell/helpers/hardlink (renamed from src/vfs/fish/helpers/hardlink) | 5 | ||||
-rw-r--r-- | src/vfs/shell/helpers/info (renamed from src/vfs/fish/helpers/info) | 14 | ||||
-rw-r--r-- | src/vfs/shell/helpers/ln (renamed from src/vfs/fish/helpers/ln) | 5 | ||||
-rw-r--r-- | src/vfs/shell/helpers/ls (renamed from src/vfs/fish/helpers/ls) | 58 | ||||
-rw-r--r-- | src/vfs/shell/helpers/mkdir | 5 | ||||
-rw-r--r-- | src/vfs/shell/helpers/mv | 5 | ||||
-rw-r--r-- | src/vfs/shell/helpers/rmdir | 5 | ||||
-rw-r--r-- | src/vfs/shell/helpers/send | 16 | ||||
-rw-r--r-- | src/vfs/shell/helpers/unlink | 5 | ||||
-rw-r--r-- | src/vfs/shell/helpers/utime | 12 |
18 files changed, 389 insertions, 82 deletions
diff --git a/src/vfs/shell/helpers/Makefile.am b/src/vfs/shell/helpers/Makefile.am new file mode 100644 index 0000000..aa0db25 --- /dev/null +++ b/src/vfs/shell/helpers/Makefile.am @@ -0,0 +1,10 @@ +shelldir = $(libexecdir)/@PACKAGE@/shell + +# Files to install and distribute other than shell scripts +SHELL_MISC = README.shell + +# Install and distribute SHELL helper scripts w/o shebang & executable bit as data +shell_DATA = $(SHELL_MISC) ls mkdir fexists unlink chown chmod rmdir ln mv hardlink get send append info utime +shellconfdir = $(sysconfdir)/@PACKAGE@ + +EXTRA_DIST = $(shell_DATA) diff --git a/src/vfs/fish/helpers/Makefile.in b/src/vfs/shell/helpers/Makefile.in index c17efbb..cef7b97 100644 --- a/src/vfs/fish/helpers/Makefile.in +++ b/src/vfs/shell/helpers/Makefile.in @@ -88,7 +88,7 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ -subdir = src/vfs/fish/helpers +subdir = src/vfs/shell/helpers ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intlmacosx.m4 \ @@ -134,7 +134,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4.include/vfs/mc-vfs-sfs.m4 \ $(top_srcdir)/m4.include/vfs/mc-vfs-ftp.m4 \ $(top_srcdir)/m4.include/vfs/mc-vfs-sftp.m4 \ - $(top_srcdir)/m4.include/vfs/mc-vfs-fish.m4 \ + $(top_srcdir)/m4.include/vfs/mc-vfs-shell.m4 \ $(top_srcdir)/m4.include/vfs/mc-vfs-undelfs.m4 \ $(top_srcdir)/m4.include/vfs/mc-vfs-tarfs.m4 \ $(top_srcdir)/m4.include/vfs/mc-vfs-cpiofs.m4 \ @@ -196,8 +196,8 @@ am__uninstall_files_from_dir = { \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } -am__installdirs = "$(DESTDIR)$(fishdir)" -DATA = $(fish_DATA) +am__installdirs = "$(DESTDIR)$(shelldir)" +DATA = $(shell_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) @@ -410,15 +410,15 @@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -fishdir = $(libexecdir)/@PACKAGE@/fish +shelldir = $(libexecdir)/@PACKAGE@/shell -# Files to install and distribute other than fish scripts -FISH_MISC = README.fish +# Files to install and distribute other than shell scripts +SHELL_MISC = README.shell -# Install and distribute FISH helper scripts w/o shebang & executable bit as data -fish_DATA = $(FISH_MISC) ls mkdir fexists unlink chown chmod rmdir ln mv hardlink get send append info utime -fishconfdir = $(sysconfdir)/@PACKAGE@ -EXTRA_DIST = $(fish_DATA) +# Install and distribute SHELL helper scripts w/o shebang & executable bit as data +shell_DATA = $(SHELL_MISC) ls mkdir fexists unlink chown chmod rmdir ln mv hardlink get send append info utime +shellconfdir = $(sysconfdir)/@PACKAGE@ +EXTRA_DIST = $(shell_DATA) all: all-am .SUFFIXES: @@ -431,9 +431,9 @@ $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__confi exit 1;; \ esac; \ done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/vfs/fish/helpers/Makefile'; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/vfs/shell/helpers/Makefile'; \ $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --gnu src/vfs/fish/helpers/Makefile + $(AUTOMAKE) --gnu src/vfs/shell/helpers/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ @@ -457,27 +457,27 @@ mostlyclean-libtool: clean-libtool: -rm -rf .libs _libs -install-fishDATA: $(fish_DATA) +install-shellDATA: $(shell_DATA) @$(NORMAL_INSTALL) - @list='$(fish_DATA)'; test -n "$(fishdir)" || list=; \ + @list='$(shell_DATA)'; test -n "$(shelldir)" || list=; \ if test -n "$$list"; then \ - echo " $(MKDIR_P) '$(DESTDIR)$(fishdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(fishdir)" || exit 1; \ + echo " $(MKDIR_P) '$(DESTDIR)$(shelldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(shelldir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ - echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(fishdir)'"; \ - $(INSTALL_DATA) $$files "$(DESTDIR)$(fishdir)" || exit $$?; \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(shelldir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(shelldir)" || exit $$?; \ done -uninstall-fishDATA: +uninstall-shellDATA: @$(NORMAL_UNINSTALL) - @list='$(fish_DATA)'; test -n "$(fishdir)" || list=; \ + @list='$(shell_DATA)'; test -n "$(shelldir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ - dir='$(DESTDIR)$(fishdir)'; $(am__uninstall_files_from_dir) + dir='$(DESTDIR)$(shelldir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: @@ -521,7 +521,7 @@ check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: - for dir in "$(DESTDIR)$(fishdir)"; do \ + for dir in "$(DESTDIR)$(shelldir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am @@ -574,7 +574,7 @@ info: info-am info-am: -install-data-am: install-fishDATA +install-data-am: install-shellDATA install-dvi: install-dvi-am @@ -618,7 +618,7 @@ ps: ps-am ps-am: -uninstall-am: uninstall-fishDATA +uninstall-am: uninstall-shellDATA .MAKE: install-am install-strip @@ -626,13 +626,13 @@ uninstall-am: uninstall-fishDATA cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-fishDATA \ - install-html install-html-am install-info install-info-am \ - install-man install-pdf install-pdf-am install-ps \ - install-ps-am install-strip installcheck installcheck-am \ + install-dvi-am install-exec install-exec-am install-html \ + install-html-am install-info install-info-am install-man \ + install-pdf install-pdf-am install-ps install-ps-am \ + install-shellDATA install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ - ps ps-am tags-am uninstall uninstall-am uninstall-fishDATA + ps ps-am tags-am uninstall uninstall-am uninstall-shellDATA .PRECIOUS: Makefile diff --git a/src/vfs/shell/helpers/README.shell b/src/vfs/shell/helpers/README.shell new file mode 100644 index 0000000..8cc5347 --- /dev/null +++ b/src/vfs/shell/helpers/README.shell @@ -0,0 +1,227 @@ + + FIles transferred over SSH + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This protocol was designed for transferring files over a remote shell +connection (rsh and compatibles). It can be as well used for transfers over +rsh, and there may be other uses. + +Since version 4.8.31 Midnight Commander doesn't support FISH commands with form + +#FISH_COMMAND [arg1] [arg2] ... [argN] + +and sends requests as shell scripts only. + +First, MC looks for system-wide set of scripts, then it checks whether +current user has host-specific overrides in his per-user MC configuration +directory. User-defined overrides take priority over sytem-wide scripts +if they exist. The order in which the directories are traversed is as follows: + + /usr/libexec/mc/shell + ~/.local/share/mc/shell/<hostname>/ + +Server's reply is multiline, but always ends with + +### 000<optional text> + +line. ### is prefix to mark this line, 000 is return code. Return +codes are superset to those used in ftp. + +There are few new exit codes defined: + +000 don't know; if there were no previous lines, this marks COMPLETE +success, if they were, it marks failure. + +001 don't know; if there were no previous lines, this marks +PRELIMinary success, if they were, it marks failure + + Connecting + ~~~~~~~~~~ +MC uses "echo SHELL:;/bin/sh" as command executed on remote machine. + + Actions + ~~~~~~~ + +Get info about host into $result + + echo $result + echo '### 200' + +Script: info + +-------------------------------------------------------------------------------- + +List directory or get status information about single file. + + ls -lLa $1 | grep '^[^cbt]' | ( while read p x u g s m d y n; do echo "P$p $u.$g + S$s + d$m $d $y + :$n + "; done ) + ls -lLa $1 | grep '^[cb]' | ( while read p x u g a i m d y n; do echo "P$p $u.$g + E$a$i + dD$m $d $y + :$n + "; done ) + echo '### 200' + +Output is in following form (any line except :<filename> may be omitted): + +P<unix permissions> <owner>.<group> +S<size> +d<3-letters month name> <day> <year or HH:MM> +D<year> <month> <day> <hour> <minute> <second>[.1234] +E<major-of-device>,<minor> +:<filename> +L<filename symlink points to> +<blank line to separate items> + +Unix permissions are of form X--------- +where X is type of file: + '-' a regular file + 'd' a directory + 'c' a character device + 'b' a block device + 'l' a symbolic link + 'p' a FIFO + 's' a socket. + +'d' has three fields: + month (one of strings Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) + day of month + single number indicating year, or HH:MM field (assume current year in such + case). As you've probably noticed, this is pretty broken; it is for + compatibility with ls listing. + +Script: ls + +-------------------------------------------------------------------------------- + +Get file + + ls -l /some/name | ( read a b c d x e; echo $x ); echo '### 100'; cat /some/name; echo '### 200' + +Server sends line with filesize on it, followed by line with ### 100 +indicating partial success, then it sends binary data (exactly filesize bytes) +and follows them with (with no preceding newline) ### 200. + +Note that there's no way to abort running RETR command - except closing +the connection. + +Script: get + +-------------------------------------------------------------------------------- + +Put file + + > /file/name; echo '### 001'; ( dd bs=4096 count=<size/4096>; dd bs=<size%4096> count=1 ) 2>/dev/null | ( cat > %s; cat > /dev/null ); echo '### 200' + +This command is for storing /file/name, which is exactly size bytes big. +You probably think I went crazy. Well, I did not: that strange cat > /dev/null +has purpose to discard any extra data which was not written to disk (due to for +example out of space condition). + +[Why? Imagine uploading file with "rm -rf /" line in it.] + +Script: send + +-------------------------------------------------------------------------------- + +Change directory + + cd /somewhere; echo '### 000' + +It is specified here, but I'm not sure how wise idea is to use this one: +it breaks stateless-ness of the protocol. + +-------------------------------------------------------------------------------- + +Change mode + + chmod 1234 file; echo '### 000' + +Script: chmod + +-------------------------------------------------------------------------------- + +Change own + + chown user /file/name; echo '### 000' + +Script: chown + +-------------------------------------------------------------------------------- + +Remove file + + rm -f /some/path; echo '### 000' + +Sctipt: unlink + +-------------------------------------------------------------------------------- + +Make directory: + + mkdir /some/path; echo '### 000' + +Script: mkdir + +-------------------------------------------------------------------------------- + +Remove directory + + rmdir /some/path; echo '### 000' + +Script: rmdir + +-------------------------------------------------------------------------------- + +Rename/move file + + mv /path/a /path/b; echo '### 000' + +Script: mv + +-------------------------------------------------------------------------------- + +Make link + + ln /path/a /path/b; echo '### 000' + +Script: hardlink + +-------------------------------------------------------------------------------- + +Make symbolic link: + + ln -s /path/a /path/b; echo '### 000' + +Script: ln + +-------------------------------------------------------------------------------- + +You can use following parameters: +SHELL_FILESIZE +SHELL_FILENAME +SHELL_FILEMODE +SHELL_FILEOWNER +SHELL_FILEGROUPE +SHELL_FILEFROM +SHELL_FILETO + +NB: +'SHELL_FILESIZE' is used if we operate with single file name in 'unlink', 'rmdir', 'chmod', etc... +'SHELL_FILEFROM','SHELL_FILETO' are used if we operate with two files in 'ln', 'hardlink', 'mv' etc... +'SHELL_FILEOWNER', 'SHELL_FILEGROUPE' are a new user/group in chown + +and flags: +SHELL_HAVE_HEAD +SHELL_HAVE_SED +SHELL_HAVE_AWK +SHELL_HAVE_PERL +SHELL_HAVE_LSQ +SHELL_HAVE_DATE_MDYT + +That's all, folks! + pavel@ucw.cz + aborodin@vmail.ru diff --git a/src/vfs/shell/helpers/append b/src/vfs/shell/helpers/append new file mode 100644 index 0000000..a73d2cd --- /dev/null +++ b/src/vfs/shell/helpers/append @@ -0,0 +1,15 @@ +FILENAME="/${SHELL_FILENAME}" +echo "### 001" +{ + bss=4096 + bsl=4095 + if [ $SHELL_FILESIZE -lt $bss ]; then + bss=1; + bsl=0; + fi + while [ $SHELL_FILESIZE -gt 0 ]; do + cnt=`expr \\( $SHELL_FILESIZE + $bsl \\) / $bss` + n=`dd bs=$bss count=$cnt | tee -a "${FILENAME}" | wc -c` + SHELL_FILESIZE=`expr $SHELL_FILESIZE - $n` + done +}; echo "### 200" diff --git a/src/vfs/shell/helpers/chmod b/src/vfs/shell/helpers/chmod new file mode 100644 index 0000000..75ea024 --- /dev/null +++ b/src/vfs/shell/helpers/chmod @@ -0,0 +1,5 @@ +if chmod ${SHELL_FILEMODE} "/${SHELL_FILENAME}" 2>/dev/null; then + echo "### 000" +else + echo "### 500" +fi diff --git a/src/vfs/shell/helpers/chown b/src/vfs/shell/helpers/chown new file mode 100644 index 0000000..c2fc2b1 --- /dev/null +++ b/src/vfs/shell/helpers/chown @@ -0,0 +1,5 @@ +if chown ${SHELL_FILEOWNER}:${SHELL_FILEGROUP} "/${SHELL_FILENAME}" ; then + echo "### 000" +else + echo "### 500" +fi diff --git a/src/vfs/shell/helpers/fexists b/src/vfs/shell/helpers/fexists new file mode 100644 index 0000000..3d11574 --- /dev/null +++ b/src/vfs/shell/helpers/fexists @@ -0,0 +1,2 @@ +ls -l "/${SHELL_FILENAME}" >/dev/null 2>/dev/null +echo '### '$? diff --git a/src/vfs/fish/helpers/get b/src/vfs/shell/helpers/get index 762267a..b633a45 100644 --- a/src/vfs/fish/helpers/get +++ b/src/vfs/shell/helpers/get @@ -1,7 +1,6 @@ -#RETR $FISH_FILENAME $FISH_START_OFFSET LC_TIME=C export LC_TIME -fish_get_perl () +shell_get_perl () { FILENAME=$1 OFFSET=$2 @@ -35,7 +34,7 @@ exit 0 ' "${FILENAME}" $OFFSET } -fish_get_tail () +shell_get_tail () { FILENAME=$1 OFFSET=$2 @@ -67,7 +66,7 @@ else fi } -fish_get_dd () +shell_get_dd () { FILENAME=$1 OFFSET=$2 @@ -96,10 +95,10 @@ else fi } -if [ -n "${FISH_HAVE_PERL}" ]; then - fish_get_perl "/${FISH_FILENAME}" ${FISH_START_OFFSET} -elif [ -n "${FISH_HAVE_TAIL}" ]; then - fish_get_tail "/${FISH_FILENAME}" ${FISH_START_OFFSET} +if [ -n "${SHELL_HAVE_PERL}" ]; then + shell_get_perl "/${SHELL_FILENAME}" ${SHELL_START_OFFSET} +elif [ -n "${SHELL_HAVE_TAIL}" ]; then + shell_get_tail "/${SHELL_FILENAME}" ${SHELL_START_OFFSET} else - fish_get_dd "/${FISH_FILENAME}" ${FISH_START_OFFSET} + shell_get_dd "/${SHELL_FILENAME}" ${SHELL_START_OFFSET} fi diff --git a/src/vfs/fish/helpers/hardlink b/src/vfs/shell/helpers/hardlink index 4f36b3f..f92b332 100644 --- a/src/vfs/fish/helpers/hardlink +++ b/src/vfs/shell/helpers/hardlink @@ -1,6 +1,5 @@ -#LINK $FISH_FILEFROM $FISH_FILETO -FILEFROM="/${FISH_FILEFROM}" -FILETO="/${FISH_FILETO}" +FILEFROM="/${SHELL_FILEFROM}" +FILETO="/${SHELL_FILETO}" if ln "${FILEFROM}" "${FILETO}" 2>/dev/null; then echo "### 000" else diff --git a/src/vfs/fish/helpers/info b/src/vfs/shell/helpers/info index b85b0a7..053423a 100644 --- a/src/vfs/fish/helpers/info +++ b/src/vfs/shell/helpers/info @@ -1,12 +1,12 @@ LC_TIME=C export LC_TIME -#FISH_HAVE_HEAD 1 -#FISH_HAVE_SED 2 -#FISH_HAVE_AWK 4 -#FISH_HAVE_PERL 8 -#FISH_HAVE_LSQ 16 -#FISH_HAVE_DATE_MDYT 32 -#FISH_HAVE_TAIL 64 +#SHELL_HAVE_HEAD 1 +#SHELL_HAVE_SED 2 +#SHELL_HAVE_AWK 4 +#SHELL_HAVE_PERL 8 +#SHELL_HAVE_LSQ 16 +#SHELL_HAVE_DATE_MDYT 32 +#SHELL_HAVE_TAIL 64 res=0 if `echo yes| head -c 1 > /dev/null 2>&1` ; then res=`expr $res + 1` diff --git a/src/vfs/fish/helpers/ln b/src/vfs/shell/helpers/ln index a8445d8..15a20cd 100644 --- a/src/vfs/fish/helpers/ln +++ b/src/vfs/shell/helpers/ln @@ -1,6 +1,5 @@ -#SYMLINK $FISH_FILEFROM $FISH_FILETO -FILEFROM="${FISH_FILEFROM}" -FILETO="/${FISH_FILETO}" +FILEFROM="${SHELL_FILEFROM}" +FILETO="/${SHELL_FILETO}" if ln -s "${FILEFROM}" "${FILETO}" 2>/dev/null; then echo "### 000" else diff --git a/src/vfs/fish/helpers/ls b/src/vfs/shell/helpers/ls index 7165b51..c7701d6 100644 --- a/src/vfs/fish/helpers/ls +++ b/src/vfs/shell/helpers/ls @@ -1,11 +1,10 @@ -#LIST /${FISH_DIR} LC_TIME=C export LC_TIME perl_res="1" -fish_list_lsq () +shell_list_lsq () { -FISH_DIR="$1" -ls -Qlan "${FISH_DIR}" 2>/dev/null | grep '^[^cbt]' | ( +SHELL_DIR="$1" +ls -Qlan "${SHELL_DIR}" 2>/dev/null | grep '^[^cbt]' | ( while read p l u g s m d y n; do echo "P$p $u.$g" echo "S$s" @@ -15,7 +14,7 @@ while read p l u g s m d y n; do done ) -ls -Qlan "${FISH_DIR}" 2>/dev/null | grep '^[cb]' | ( +ls -Qlan "${SHELL_DIR}" 2>/dev/null | grep '^[cb]' | ( while read p l u g a i m d y n; do echo "P$p $u.$g" echo "E$a$i" @@ -27,13 +26,13 @@ done echo '### 200' } -fish_list_sed () +shell_list_sed () { -FISH_DIR="$1" -ls -lan "${FISH_DIR}" 2>/dev/null | grep '^[^cbt]' | ( +SHELL_DIR="$1" +ls -lan "${SHELL_DIR}" 2>/dev/null | grep '^[^cbt]' | ( while read p l u g s rec; do if [ -n "$g" ]; then - if [ -n "$FISH_HAVE_DATE_MDYT" ]; then + if [ -n "$SHELL_HAVE_DATE_MDYT" ]; then filename=`echo "$rec"| sed 's/[^[:space:]]\+ \+[^[:space:]]\+ \+[^[:space:]]\+ //'` filedate=`echo "$rec"| sed 's/\([^[:space:]]\+ \+[^[:space:]]\+ \+[^[:space:]]\+\) .*/\1/'` else @@ -43,7 +42,7 @@ while read p l u g s rec; do pfile=\"`echo "$filename" | sed -e 's#^\(.*\) -> \(.*\)#\1" -> "\2#'`\" echo "P$p $u.$g" echo "S$s" - if [ -n "$FISH_HAVE_DATE_MDYT" ]; then + if [ -n "$SHELL_HAVE_DATE_MDYT" ]; then echo "d$filedate" else echo "D$filedate" @@ -53,10 +52,10 @@ while read p l u g s rec; do fi done ) -ls -lan "${FISH_DIR}" 2>/dev/null | grep '^[cb]' | ( +ls -lan "${SHELL_DIR}" 2>/dev/null | grep '^[cb]' | ( while read p l u g a i rec; do if [ -n "$g" ]; then - if [ -n "$FISH_HAVE_DATE_MDYT" ]; then + if [ -n "$SHELL_HAVE_DATE_MDYT" ]; then filename=`echo "$rec"| sed 's/[^[:space:]]\+ \+[^[:space:]]\+ \+[^[:space:]]\+ //'` filedate=`echo "$rec"| sed 's/\([^[:space:]]\+ \+[^[:space:]]\+ \+[^[:space:]]\+\) .*/\1/'` else @@ -66,7 +65,7 @@ while read p l u g a i rec; do pfile=\"`echo "$filename" | sed -e 's#^\(.*\) -> \(.*\)#\1" -> "\2#'`\" echo "P$p $u.$g" echo "E$a$i" - if [ -n "$FISH_HAVE_DATE_MDYT" ]; then + if [ -n "$SHELL_HAVE_DATE_MDYT" ]; then echo "d$filedate" else echo "D$filedate" @@ -79,10 +78,10 @@ done echo '### 200' } -fish_list_poor_ls () +shell_list_poor_ls () { -FISH_DIR="$1" -ls -lan "${FISH_DIR}" 2>/dev/null | grep '^[^cbt]' | ( +SHELL_DIR="$1" +ls -lan "${SHELL_DIR}" 2>/dev/null | grep '^[^cbt]' | ( while read p l u g s m d y n n2 n3; do if [ -n "$g" ]; then if [ "$m" = "0" ]; then @@ -98,7 +97,7 @@ while read p l u g s m d y n n2 n3; do fi done ) -ls -lan "${FISH_DIR}" 2>/dev/null | grep '^[cb]' | ( +ls -lan "${SHELL_DIR}" 2>/dev/null | grep '^[cb]' | ( while read p l u g a i m d y n n2 n3; do if [ -n "$g" ]; then if [ "$a" = "0" ]; then @@ -117,15 +116,14 @@ done echo '### 200' } -fish_list_perl () +shell_list_perl () { -FISH_DIR=$1 +SHELL_DIR=$1 perl -e ' use strict; use POSIX; -use Fcntl; -use POSIX ":fcntl_h"; #S_ISLNK was here until 5.6 -import Fcntl ":mode" unless defined &S_ISLNK; #and is now here +use Fcntl ":mode"; # S_ISLNK, S_IFMT, S_IMODE are here +use POSIX ":fcntl_h"; # S_ISLNK might be here as well my $dirname = $ARGV[0]; if (opendir (DIR, $dirname)) { while((my $filename = readdir (DIR))){ @@ -152,19 +150,19 @@ while((my $filename = readdir (DIR))){ printf("### 500\n"); } exit 0 -' "/${FISH_DIR}" +' "/${SHELL_DIR}" perl_res=$? } -if [ -n "${FISH_HAVE_PERL}" ]; then - fish_list_perl "/${FISH_FILENAME}" +if [ -n "${SHELL_HAVE_PERL}" ]; then + shell_list_perl "/${SHELL_FILENAME}" fi if [ "${perl_res}" != "0" ]; then - if [ -n "${FISH_HAVE_LSQ}" ]; then - fish_list_lsq "/${FISH_FILENAME}" - elif [ -n "${FISH_HAVE_SED}" ]; then - fish_list_sed "/${FISH_FILENAME}" + if [ -n "${SHELL_HAVE_LSQ}" ]; then + shell_list_lsq "/${SHELL_FILENAME}" + elif [ -n "${SHELL_HAVE_SED}" ]; then + shell_list_sed "/${SHELL_FILENAME}" else - fish_list_poor_ls "/${FISH_FILENAME}" + shell_list_poor_ls "/${SHELL_FILENAME}" fi fi diff --git a/src/vfs/shell/helpers/mkdir b/src/vfs/shell/helpers/mkdir new file mode 100644 index 0000000..b05f125 --- /dev/null +++ b/src/vfs/shell/helpers/mkdir @@ -0,0 +1,5 @@ +if mkdir "/$SHELL_FILENAME" 2>/dev/null; then + echo "### 000" +else + echo "### 500" +fi diff --git a/src/vfs/shell/helpers/mv b/src/vfs/shell/helpers/mv new file mode 100644 index 0000000..1fd2327 --- /dev/null +++ b/src/vfs/shell/helpers/mv @@ -0,0 +1,5 @@ +if mv "/${SHELL_FILEFROM}" "/${SHELL_FILETO}" 2>/dev/null; then + echo "### 000" +else + echo "### 500" +fi diff --git a/src/vfs/shell/helpers/rmdir b/src/vfs/shell/helpers/rmdir new file mode 100644 index 0000000..88172c4 --- /dev/null +++ b/src/vfs/shell/helpers/rmdir @@ -0,0 +1,5 @@ +if rmdir "/${SHELL_FILENAME}" 2>/dev/null; then + echo "### 000" +else + echo "### 500" +fi diff --git a/src/vfs/shell/helpers/send b/src/vfs/shell/helpers/send new file mode 100644 index 0000000..66c2a1c --- /dev/null +++ b/src/vfs/shell/helpers/send @@ -0,0 +1,16 @@ +FILENAME="/${SHELL_FILENAME}" +echo "### 001" +{ + > "${FILENAME}" + bss=4096 + bsl=4095 + if [ $SHELL_FILESIZE -lt $bss ]; then + bss=1; + bsl=0; + fi + while [ $SHELL_FILESIZE -gt 0 ]; do + cnt=`expr \\( $SHELL_FILESIZE + $bsl \\) / $bss` + n=`dd bs=$bss count=$cnt | tee -a "${FILENAME}" | wc -c` + SHELL_FILESIZE=`expr $SHELL_FILESIZE - $n` + done +}; echo "### 200" diff --git a/src/vfs/shell/helpers/unlink b/src/vfs/shell/helpers/unlink new file mode 100644 index 0000000..f02f4d3 --- /dev/null +++ b/src/vfs/shell/helpers/unlink @@ -0,0 +1,5 @@ +if rm -f "/${SHELL_FILENAME}" 2>/dev/null; then + echo "### 000" +else + echo "### 500" +fi diff --git a/src/vfs/shell/helpers/utime b/src/vfs/shell/helpers/utime new file mode 100644 index 0000000..a563431 --- /dev/null +++ b/src/vfs/shell/helpers/utime @@ -0,0 +1,12 @@ +if TZ=UTC touch -h -m -d "$SHELL_TOUCHMTIME_W_NSEC" "/${SHELL_FILENAME}" 2>/dev/null && \ + TZ=UTC touch -h -a -d "$SHELL_TOUCHATIME_W_NSEC" "/${SHELL_FILENAME}" 2>/dev/null; then + echo "### 000" +elif TZ=UTC touch -h -m -t $SHELL_TOUCHMTIME "/${SHELL_FILENAME}" 2>/dev/null && \ + TZ=UTC touch -h -a -t $SHELL_TOUCHATIME "/${SHELL_FILENAME}" 2>/dev/null; then + echo "### 000" +elif [ -n "$SHELL_HAVE_PERL" ] && + perl -e 'utime '$SHELL_FILEATIME','$SHELL_FILEMTIME',@ARGV;' "/${SHELL_FILENAME}" 2>/dev/null; then + echo "### 000" +else + echo "### 500" +fi |