home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / languages / perl / scripts-convex / ftp.shar < prev    next >
SHell self-extracting ARchive  |  1992-08-17  |  12.6 KB

open in: MacOS 8.1     |     Win98     |     DOS

browse contents    |     view JSON data     |     view as text


This file was processed as: SHell self-extracting ARchive (archive/shar).

ConfidenceProgramDetectionMatch TypeSupport
100% dexvert SHell self-extracting ARchive (archive/shar) magic Supported
1% dexvert Text File (text/txt) fallback Supported
100% file POSIX shell script text executable default
99% file a /bin/sh script, ASCII text executable default (weak)
100% TrID Perl script default
100% checkBytes Printable ASCII default
100% perlTextCheck Likely Text (Perl) default
100% siegfried fmt/329 Shell Archive Format default
100% gt2 Shell Skript: '/bin/sh' default (weak)
100% detectItEasy Format: Plain text[LF] default
100% binwalkID Executable script, shebang: "/bin/sh" default (weak)
100% xdgMime application/x-shellscript default (weak)



hex view
+--------+-------------------------+-------------------------+--------+--------+
|00000000| 23 21 20 2f 62 69 6e 2f | 73 68 0a 23 20 54 68 69 |#! /bin/|sh.# Thi|
|00000010| 73 20 69 73 20 61 20 73 | 68 65 6c 6c 20 61 72 63 |s is a s|hell arc|
|00000020| 68 69 76 65 2c 20 6d 65 | 61 6e 69 6e 67 3a 0a 23 |hive, me|aning:.#|
|00000030| 20 31 2e 20 52 65 6d 6f | 76 65 20 65 76 65 72 79 | 1. Remo|ve every|
|00000040| 74 68 69 6e 67 20 61 62 | 6f 76 65 20 74 68 65 20 |thing ab|ove the |
|00000050| 23 21 20 2f 62 69 6e 2f | 73 68 20 6c 69 6e 65 2e |#! /bin/|sh line.|
|00000060| 0a 23 20 32 2e 20 53 61 | 76 65 20 74 68 65 20 72 |.# 2. Sa|ve the r|
|00000070| 65 73 75 6c 74 69 6e 67 | 20 74 65 78 74 20 69 6e |esulting| text in|
|00000080| 20 61 20 66 69 6c 65 2e | 0a 23 20 33 2e 20 45 78 | a file.|.# 3. Ex|
|00000090| 65 63 75 74 65 20 74 68 | 65 20 66 69 6c 65 20 77 |ecute th|e file w|
|000000a0| 69 74 68 20 2f 62 69 6e | 2f 73 68 20 28 6e 6f 74 |ith /bin|/sh (not|
|000000b0| 20 63 73 68 29 20 74 6f | 20 63 72 65 61 74 65 3a | csh) to| create:|
|000000c0| 0a 23 09 66 74 70 0a 23 | 20 54 68 69 73 20 61 72 |.#.ftp.#| This ar|
|000000d0| 63 68 69 76 65 20 63 72 | 65 61 74 65 64 3a 20 54 |chive cr|eated: T|
|000000e0| 75 65 20 41 75 67 20 31 | 38 20 31 39 3a 35 33 3a |ue Aug 1|8 19:53:|
|000000f0| 30 33 20 31 39 39 32 0a | 65 78 70 6f 72 74 20 50 |03 1992.|export P|
|00000100| 41 54 48 3b 20 50 41 54 | 48 3d 2f 62 69 6e 3a 2f |ATH; PAT|H=/bin:/|
|00000110| 75 73 72 2f 62 69 6e 3a | 24 50 41 54 48 0a 69 66 |usr/bin:|$PATH.if|
|00000120| 20 74 65 73 74 20 21 20 | 2d 64 20 27 66 74 70 27 | test ! |-d 'ftp'|
|00000130| 0a 74 68 65 6e 0a 09 65 | 63 68 6f 20 73 68 61 72 |.then..e|cho shar|
|00000140| 3a 20 22 63 72 65 61 74 | 69 6e 67 20 64 69 72 65 |: "creat|ing dire|
|00000150| 63 74 6f 72 79 20 27 66 | 74 70 27 22 0a 09 6d 6b |ctory 'f|tp'"..mk|
|00000160| 64 69 72 20 27 66 74 70 | 27 0a 66 69 0a 65 63 68 |dir 'ftp|'.fi.ech|
|00000170| 6f 20 73 68 61 72 3a 20 | 22 65 6e 74 65 72 69 6e |o shar: |"enterin|
|00000180| 67 20 64 69 72 65 63 74 | 6f 72 79 20 27 66 74 70 |g direct|ory 'ftp|
|00000190| 27 22 0a 63 64 20 27 66 | 74 70 27 0a 65 63 68 6f |'".cd 'f|tp'.echo|
|000001a0| 20 73 68 61 72 3a 20 22 | 65 78 74 72 61 63 74 69 | shar: "|extracti|
|000001b0| 6e 67 20 27 66 74 70 67 | 65 74 27 22 20 27 28 31 |ng 'ftpg|et'" '(1|
|000001c0| 32 30 33 20 63 68 61 72 | 61 63 74 65 72 73 29 27 |203 char|acters)'|
|000001d0| 0a 69 66 20 74 65 73 74 | 20 2d 66 20 27 66 74 70 |.if test| -f 'ftp|
|000001e0| 67 65 74 27 0a 74 68 65 | 6e 0a 09 65 63 68 6f 20 |get'.the|n..echo |
|000001f0| 73 68 61 72 3a 20 22 77 | 69 6c 6c 20 6e 6f 74 20 |shar: "w|ill not |
|00000200| 6f 76 65 72 2d 77 72 69 | 74 65 20 65 78 69 73 74 |over-wri|te exist|
|00000210| 69 6e 67 20 66 69 6c 65 | 20 27 66 74 70 67 65 74 |ing file| 'ftpget|
|00000220| 27 22 0a 65 6c 73 65 0a | 73 65 64 20 27 73 2f 5e |'".else.|sed 's/^|
|00000230| 09 58 2f 2f 27 20 3c 3c | 20 5c 53 48 41 52 5f 45 |.X//' <<| \SHAR_E|
|00000240| 4f 46 20 3e 20 27 66 74 | 70 67 65 74 27 0a 09 58 |OF > 'ft|pget'..X|
|00000250| 23 21 2f 75 73 72 2f 6c | 6f 63 61 6c 2f 70 65 72 |#!/usr/l|ocal/per|
|00000260| 6c 2f 70 65 72 6c 20 2d | 73 0a 09 58 0a 09 58 23 |l/perl -|s..X..X#|
|00000270| 0a 09 58 23 20 20 47 65 | 74 20 61 20 66 69 6c 65 |..X# Ge|t a file|
|00000280| 20 75 73 69 6e 67 20 66 | 74 70 2e 0a 09 58 23 0a | using f|tp...X#.|
|00000290| 09 58 23 20 20 20 66 74 | 70 67 65 74 20 68 6f 73 |.X# ft|pget hos|
|000002a0| 74 20 73 6f 75 72 63 65 | 20 64 65 73 74 0a 09 58 |t source| dest..X|
|000002b0| 23 20 20 20 20 20 20 67 | 65 74 73 20 66 69 6c 65 |# g|ets file|
|000002c0| 2c 20 6c 6f 67 67 69 6e | 67 20 69 6e 20 61 73 20 |, loggin|g in as |
|000002d0| 61 6e 6f 6e 79 6d 6f 75 | 73 20 77 69 74 68 20 75 |anonymou|s with u|
|000002e0| 73 65 72 40 68 6f 73 74 | 20 70 61 73 73 77 6f 72 |ser@host| passwor|
|000002f0| 64 20 28 64 65 66 61 75 | 6c 74 29 0a 09 58 23 20 |d (defau|lt)..X# |
|00000300| 20 20 66 74 70 67 65 74 | 20 75 73 65 72 40 68 6f | ftpget| user@ho|
|00000310| 73 74 20 73 6f 75 72 63 | 65 20 64 65 73 74 0a 09 |st sourc|e dest..|
|00000320| 58 23 20 20 20 20 20 20 | 67 65 74 73 20 66 69 6c |X# |gets fil|
|00000330| 65 20 61 73 20 75 73 65 | 72 20 22 75 73 65 72 22 |e as use|r "user"|
|00000340| 20 61 6e 64 20 70 72 6f | 6d 70 74 73 20 66 6f 72 | and pro|mpts for|
|00000350| 20 70 61 73 73 77 6f 72 | 64 0a 09 58 23 0a 09 58 | passwor|d..X#..X|
|00000360| 23 20 20 20 69 66 20 22 | 64 65 73 74 22 20 69 73 |# if "|dest" is|
|00000370| 20 61 20 64 69 72 65 63 | 74 6f 72 79 2c 20 66 69 | a direc|tory, fi|
|00000380| 6c 65 6e 61 6d 65 20 69 | 73 20 73 61 6d 65 20 61 |lename i|s same a|
|00000390| 73 20 72 65 6d 6f 74 65 | 20 66 69 6c 65 20 6e 61 |s remote| file na|
|000003a0| 6d 65 0a 09 58 23 0a 09 | 58 23 20 20 57 72 69 74 |me..X#..|X# Writ|
|000003b0| 74 65 6e 20 62 79 20 47 | 65 6e 65 20 53 70 61 66 |ten by G|ene Spaf|
|000003c0| 66 6f 72 64 20 20 3c 73 | 70 61 66 40 63 73 2e 70 |ford <s|paf@cs.p|
|000003d0| 75 72 64 75 65 2e 65 64 | 75 3e 0a 09 58 23 20 20 |urdue.ed|u>..X# |
|000003e0| 20 4c 61 73 74 20 75 70 | 64 61 74 65 2c 20 32 34 | Last up|date, 24|
|000003f0| 20 41 70 72 69 6c 20 31 | 39 39 32 0a 09 58 23 0a | April 1|992..X#.|
|00000400| 09 58 0a 09 58 75 6e 73 | 68 69 66 74 28 40 49 4e |.X..Xuns|hift(@IN|
|00000410| 43 2c 20 22 2f 68 6f 6d | 65 73 2f 73 70 61 66 2f |C, "/hom|es/spaf/|
|00000420| 6c 69 62 2f 70 65 72 6c | 22 29 3b 0a 09 58 72 65 |lib/perl|");..Xre|
|00000430| 71 75 69 72 65 20 22 66 | 74 70 6c 69 62 2e 70 6c |quire "f|tplib.pl|
|00000440| 22 3b 0a 09 58 0a 09 58 | 0a 09 58 64 69 65 20 22 |";..X..X|..Xdie "|
|00000450| 75 73 61 67 65 3a 20 66 | 74 70 67 65 74 20 5b 2d |usage: f|tpget [-|
|00000460| 61 73 63 69 69 5d 20 3c | 68 6f 73 74 3e 20 3c 73 |ascii] <|host> <s|
|00000470| 6f 75 72 63 65 3e 20 3c | 64 65 73 74 3e 0a 09 58 |ource> <|dest>..X|
|00000480| 20 20 20 20 77 68 65 72 | 65 20 3c 68 6f 73 74 3e | wher|e <host>|
|00000490| 20 6d 61 79 20 62 65 20 | 6f 66 20 74 68 65 20 66 | may be |of the f|
|000004a0| 6f 72 6d 20 75 73 65 72 | 40 68 6f 73 74 0a 09 58 |orm user|@host..X|
|000004b0| 20 20 20 20 75 73 65 72 | 20 64 65 66 61 75 6c 74 | user| default|
|000004c0| 73 20 74 6f 20 27 61 6e | 6f 6e 79 6d 6f 75 73 27 |s to 'an|onymous'|
|000004d0| 20 69 66 20 6e 6f 74 20 | 73 70 65 63 69 66 69 65 | if not |specifie|
|000004e0| 64 0a 09 58 22 20 75 6e | 6c 65 73 73 20 24 23 41 |d..X" un|less $#A|
|000004f0| 52 47 56 20 3d 3d 20 32 | 3b 0a 09 58 0a 09 58 28 |RGV == 2|;..X..X(|
|00000500| 24 48 6f 73 74 2c 20 24 | 53 6f 75 72 63 65 2c 20 |$Host, $|Source, |
|00000510| 24 44 65 73 74 29 20 3d | 20 40 41 52 47 56 3b 0a |$Dest) =| @ARGV;.|
|00000520| 09 58 0a 09 58 69 66 20 | 28 24 48 6f 73 74 20 3d |.X..Xif |($Host =|
|00000530| 7e 20 2f 5e 28 5c 53 2b | 29 40 28 5c 53 2b 29 24 |~ /^(\S+|)@(\S+)$|
|00000540| 2f 29 20 7b 20 20 20 23 | 20 75 73 65 72 40 68 6f |/) { #| user@ho|
|00000550| 73 74 20 66 6f 72 6d 61 | 74 3f 0a 09 58 20 20 20 |st forma|t?..X |
|00000560| 20 28 24 55 73 65 72 2c | 20 24 48 6f 73 74 29 20 | ($User,| $Host) |
|00000570| 3d 20 28 24 31 2c 20 24 | 32 29 3b 0a 09 58 20 20 |= ($1, $|2);..X |
|00000580| 20 20 70 72 69 6e 74 20 | 53 54 44 45 52 52 20 22 | print |STDERR "|
|00000590| 50 61 73 73 77 6f 72 64 | 20 74 6f 20 75 73 65 3a |Password| to use:|
|000005a0| 20 22 3b 0a 09 58 20 20 | 20 20 73 79 73 74 65 6d | ";..X | system|
|000005b0| 20 27 73 74 74 79 20 2d | 65 63 68 6f 27 3b 0a 09 | 'stty -|echo';..|
|000005c0| 58 20 20 20 20 63 68 6f | 70 28 24 50 61 73 73 20 |X cho|p($Pass |
|000005d0| 3d 20 3c 53 54 44 49 4e | 3e 29 3b 0a 09 58 20 20 |= <STDIN|>);..X |
|000005e0| 20 20 73 79 73 74 65 6d | 20 27 73 74 74 79 20 65 | system| 'stty e|
|000005f0| 63 68 6f 27 3b 0a 09 58 | 20 20 20 20 70 72 69 6e |cho';..X| prin|
|00000600| 74 20 53 54 44 45 52 52 | 20 22 5c 6e 22 3b 0a 09 |t STDERR| "\n";..|
|00000610| 58 7d 20 0a 09 58 0a 09 | 58 69 66 20 28 20 2d 64 |X} ..X..|Xif ( -d|
|00000620| 20 24 44 65 73 74 29 20 | 7b 09 09 23 20 69 73 20 | $Dest) |{..# is |
|00000630| 69 74 20 61 20 64 69 72 | 65 63 74 6f 72 79 3f 0a |it a dir|ectory?.|
|00000640| 09 58 20 20 20 20 6c 6f | 63 61 6c 28 24 74 6d 70 |.X lo|cal($tmp|
|00000650| 29 20 3d 20 28 24 53 6f | 75 72 63 65 29 3b 0a 09 |) = ($So|urce);..|
|00000660| 58 09 24 74 6d 70 20 3d | 7e 20 73 23 2e 2a 2f 23 |X.$tmp =|~ s#.*/#|
|00000670| 23 3b 0a 09 58 09 24 44 | 65 73 74 20 2e 3d 20 22 |#;..X.$D|est .= "|
|00000680| 2f 24 74 6d 70 22 3b 0a | 09 58 7d 0a 09 58 0a 09 |/$tmp";.|.X}..X..|
|00000690| 58 26 66 74 70 27 6f 70 | 65 6e 28 24 48 6f 73 74 |X&ftp'op|en($Host|
|000006a0| 2c 20 24 55 73 65 72 2c | 20 24 50 61 73 73 29 20 |, $User,| $Pass) |
|000006b0| 7c 7c 20 26 66 61 69 6c | 3b 0a 09 58 26 66 74 70 ||| &fail|;..X&ftp|
|000006c0| 27 74 79 70 65 28 24 61 | 73 63 69 69 20 3f 20 22 |'type($a|scii ? "|
|000006d0| 61 22 20 3a 20 22 69 22 | 29 20 7c 7c 20 26 66 61 |a" : "i"|) || &fa|
|000006e0| 69 6c 3b 0a 09 58 26 66 | 74 70 27 67 65 74 28 24 |il;..X&f|tp'get($|
|000006f0| 53 6f 75 72 63 65 2c 20 | 24 44 65 73 74 29 20 7c |Source, |$Dest) ||
|00000700| 7c 20 26 66 61 69 6c 3b | 0a 09 58 26 66 74 70 27 || &fail;|..X&ftp'|
|00000710| 63 6c 6f 73 65 3b 0a 09 | 58 0a 09 58 0a 09 58 73 |close;..|X..X..Xs|
|00000720| 75 62 20 66 61 69 6c 20 | 7b 0a 09 58 20 20 20 20 |ub fail |{..X |
|00000730| 24 73 61 76 65 20 3d 20 | 26 66 74 70 27 65 72 72 |$save = |&ftp'err|
|00000740| 6f 72 3b 0a 09 58 20 20 | 20 20 26 66 74 70 27 63 |or;..X | &ftp'c|
|00000750| 6c 6f 73 65 3b 0a 09 58 | 20 20 20 20 64 69 65 20 |lose;..X| die |
|00000760| 24 73 61 76 65 3b 0a 09 | 58 7d 0a 53 48 41 52 5f |$save;..|X}.SHAR_|
|00000770| 45 4f 46 0a 69 66 20 74 | 65 73 74 20 31 32 30 33 |EOF.if t|est 1203|
|00000780| 20 2d 6e 65 20 22 60 77 | 63 20 2d 63 20 3c 20 27 | -ne "`w|c -c < '|
|00000790| 66 74 70 67 65 74 27 60 | 22 0a 74 68 65 6e 0a 09 |ftpget'`|".then..|
|000007a0| 65 63 68 6f 20 73 68 61 | 72 3a 20 22 65 72 72 6f |echo sha|r: "erro|
|000007b0| 72 20 74 72 61 6e 73 6d | 69 74 74 69 6e 67 20 27 |r transm|itting '|
|000007c0| 66 74 70 67 65 74 27 22 | 20 27 28 73 68 6f 75 6c |ftpget'"| '(shoul|
|000007d0| 64 20 68 61 76 65 20 62 | 65 65 6e 20 31 32 30 33 |d have b|een 1203|
|000007e0| 20 63 68 61 72 61 63 74 | 65 72 73 29 27 0a 66 69 | charact|ers)'.fi|
|000007f0| 0a 63 68 6d 6f 64 20 37 | 37 35 20 27 66 74 70 67 |.chmod 7|75 'ftpg|
|00000800| 65 74 27 0a 66 69 0a 65 | 63 68 6f 20 73 68 61 72 |et'.fi.e|cho shar|
|00000810| 3a 20 22 65 78 74 72 61 | 63 74 69 6e 67 20 27 66 |: "extra|cting 'f|
|00000820| 74 70 6c 69 62 2e 70 6c | 27 22 20 27 28 38 33 34 |tplib.pl|'" '(834|
|00000830| 33 20 63 68 61 72 61 63 | 74 65 72 73 29 27 0a 69 |3 charac|ters)'.i|
|00000840| 66 20 74 65 73 74 20 2d | 66 20 27 66 74 70 6c 69 |f test -|f 'ftpli|
|00000850| 62 2e 70 6c 27 0a 74 68 | 65 6e 0a 09 65 63 68 6f |b.pl'.th|en..echo|
|00000860| 20 73 68 61 72 3a 20 22 | 77 69 6c 6c 20 6e 6f 74 | shar: "|will not|
|00000870| 20 6f 76 65 72 2d 77 72 | 69 74 65 20 65 78 69 73 | over-wr|ite exis|
|00000880| 74 69 6e 67 20 66 69 6c | 65 20 27 66 74 70 6c 69 |ting fil|e 'ftpli|
|00000890| 62 2e 70 6c 27 22 0a 65 | 6c 73 65 0a 73 65 64 20 |b.pl'".e|lse.sed |
|000008a0| 27 73 2f 5e 09 58 2f 2f | 27 20 3c 3c 20 5c 53 48 |'s/^.X//|' << \SH|
|000008b0| 41 52 5f 45 4f 46 20 3e | 20 27 66 74 70 6c 69 62 |AR_EOF >| 'ftplib|
|000008c0| 2e 70 6c 27 0a 09 58 23 | 0a 09 58 23 20 20 20 54 |.pl'..X#|..X# T|
|000008d0| 68 69 73 20 69 73 20 61 | 20 73 65 74 20 6f 66 20 |his is a| set of |
|000008e0| 66 74 70 20 6c 69 62 72 | 61 72 79 20 72 6f 75 74 |ftp libr|ary rout|
|000008f0| 69 6e 65 73 20 75 73 69 | 6e 67 20 63 68 61 74 32 |ines usi|ng chat2|
|00000900| 2e 70 6c 0a 09 58 23 20 | 0a 09 58 23 20 20 20 52 |.pl..X# |..X# R|
|00000910| 65 74 75 72 6e 20 63 6f | 64 65 20 69 6e 66 6f 72 |eturn co|de infor|
|00000920| 6d 61 74 69 6f 6e 20 74 | 61 6b 65 6e 20 66 72 6f |mation t|aken fro|
|00000930| 6d 20 52 46 43 20 39 35 | 39 0a 09 58 0a 09 58 23 |m RFC 95|9..X..X#|
|00000940| 20 20 20 57 72 69 74 74 | 65 6e 20 62 79 20 47 65 | Writt|en by Ge|
|00000950| 6e 65 20 53 70 61 66 66 | 6f 72 64 20 20 3c 73 70 |ne Spaff|ord <sp|
|00000960| 61 66 40 63 73 2e 70 75 | 72 64 75 65 2e 65 64 75 |af@cs.pu|rdue.edu|
|00000970| 3e 0a 09 58 23 20 20 20 | 20 20 20 20 4c 61 73 74 |>..X# | Last|
|00000980| 20 75 70 64 61 74 65 3a | 20 31 30 20 41 70 72 69 | update:| 10 Apri|
|00000990| 6c 20 39 32 2c 20 20 20 | 56 65 72 73 69 6f 6e 20 |l 92, |Version |
|000009a0| 30 2e 39 0a 09 58 23 0a | 09 58 0a 09 58 23 0a 09 |0.9..X#.|.X..X#..|
|000009b0| 58 23 20 20 20 4d 6f 73 | 74 20 6f 66 20 74 68 65 |X# Mos|t of the|
|000009c0| 73 65 20 72 6f 75 74 69 | 6e 65 73 20 63 6f 6d 6d |se routi|nes comm|
|000009d0| 75 6e 69 63 61 74 65 20 | 6f 76 65 72 20 61 6e 20 |unicate |over an |
|000009e0| 6f 70 65 6e 20 66 74 70 | 20 63 68 61 6e 6e 65 6c |open ftp| channel|
|000009f0| 0a 09 58 23 20 20 20 54 | 68 65 20 63 68 61 6e 6e |..X# T|he chann|
|00000a00| 65 6c 20 69 73 20 6f 70 | 65 6e 65 64 20 77 69 74 |el is op|ened wit|
|00000a10| 68 20 74 68 65 20 22 66 | 74 70 27 6f 70 65 6e 22 |h the "f|tp'open"|
|00000a20| 20 63 61 6c 6c 2e 0a 09 | 58 23 0a 09 58 0a 09 58 | call...|X#..X..X|
|00000a30| 70 61 63 6b 61 67 65 20 | 66 74 70 3b 0a 09 58 72 |package |ftp;..Xr|
|00000a40| 65 71 75 69 72 65 20 22 | 63 68 61 74 32 2e 70 6c |equire "|chat2.pl|
|00000a50| 22 3b 0a 09 58 72 65 71 | 75 69 72 65 20 22 73 79 |";..Xreq|uire "sy|
|00000a60| 73 63 61 6c 6c 2e 70 68 | 22 3b 0a 09 58 0a 09 58 |scall.ph|";..X..X|
|00000a70| 0a 09 58 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |..X#####|########|
|00000a80| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00000a90| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00000aa0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00000ab0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 0a 09 |########|######..|
|00000ac0| 58 23 0a 09 58 23 20 20 | 54 68 65 20 66 6f 6c 6c |X#..X# |The foll|
|00000ad0| 6f 77 69 6e 67 20 61 72 | 65 20 74 68 65 20 76 61 |owing ar|e the va|
|00000ae0| 72 69 61 62 6c 65 73 20 | 6c 6f 63 61 6c 20 74 6f |riables |local to|
|00000af0| 20 74 68 69 73 20 70 61 | 63 6b 61 67 65 2e 0a 09 | this pa|ckage...|
|00000b00| 58 23 20 20 49 20 64 65 | 63 6c 61 72 65 20 74 68 |X# I de|clare th|
|00000b10| 65 6d 20 61 6c 6c 20 75 | 70 20 66 72 6f 6e 74 20 |em all u|p front |
|00000b20| 73 6f 20 49 20 63 61 6e | 20 72 65 6d 65 6d 62 65 |so I can| remembe|
|00000b30| 72 20 77 68 61 74 20 49 | 20 63 61 6c 6c 65 64 20 |r what I| called |
|00000b40| 27 65 6d 2e 20 3a 2d 29 | 0a 09 58 23 0a 09 58 23 |'em. :-)|..X#..X#|
|00000b50| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00000b60| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00000b70| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00000b80| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00000b90| 23 23 23 23 23 23 23 23 | 23 23 0a 09 58 0a 09 58 |########|##..X..X|
|00000ba0| 4c 4f 43 41 4c 5f 56 41 | 52 53 3a 20 7b 09 0a 09 |LOCAL_VA|RS: {...|
|00000bb0| 58 20 20 20 20 24 43 6f | 6e 74 72 6f 6c 3b 0a 09 |X $Co|ntrol;..|
|00000bc0| 58 20 20 20 20 24 44 61 | 74 61 5f 68 61 6e 64 6c |X $Da|ta_handl|
|00000bd0| 65 3b 0a 09 58 20 20 20 | 20 24 48 6f 73 74 3b 0a |e;..X | $Host;.|
|00000be0| 09 58 20 20 20 20 24 4d | 79 68 6f 73 74 20 3d 20 |.X $M|yhost = |
|00000bf0| 22 5c 30 22 20 78 20 36 | 35 3b 0a 09 58 20 20 20 |"\0" x 6|5;..X |
|00000c00| 20 28 73 79 73 63 61 6c | 6c 28 26 53 59 53 5f 67 | (syscal|l(&SYS_g|
|00000c10| 65 74 68 6f 73 74 6e 61 | 6d 65 2c 20 24 4d 79 68 |ethostna|me, $Myh|
|00000c20| 6f 73 74 2c 20 36 35 29 | 20 3d 3d 20 30 29 20 7c |ost, 65)| == 0) ||
|00000c30| 7c 20 0a 09 58 09 64 69 | 65 20 22 43 61 6e 6e 6f || ..X.di|e "Canno|
|00000c40| 74 20 27 67 65 74 68 6f | 73 74 6e 61 6d 65 27 20 |t 'getho|stname' |
|00000c50| 6f 66 20 6c 6f 63 61 6c | 20 6d 61 63 68 69 6e 65 |of local| machine|
|00000c60| 20 28 69 6e 20 66 74 70 | 6c 69 62 29 5c 6e 22 3b | (in ftp|lib)\n";|
|00000c70| 0a 09 58 20 20 20 20 24 | 4d 79 68 6f 73 74 20 3d |..X $|Myhost =|
|00000c80| 7e 20 73 2f 5c 30 2a 24 | 2f 2f 3b 0a 09 58 20 20 |~ s/\0*$|//;..X |
|00000c90| 20 20 24 4e 65 65 64 73 | 43 6c 65 61 6e 75 70 3b | $Needs|Cleanup;|
|00000ca0| 0a 09 58 20 20 20 20 24 | 4e 65 65 64 73 43 6c 6f |..X $|NeedsClo|
|00000cb0| 73 65 3b 0a 09 58 20 20 | 20 20 24 66 74 70 5f 65 |se;..X | $ftp_e|
|00000cc0| 72 72 6f 72 3b 0a 09 58 | 20 20 20 20 24 66 74 70 |rror;..X| $ftp|
|00000cd0| 5f 6d 61 74 63 68 65 64 | 3b 0a 09 58 20 20 20 20 |_matched|;..X |
|00000ce0| 24 66 74 70 5f 74 72 61 | 6e 73 5f 66 6c 61 67 3b |$ftp_tra|ns_flag;|
|00000cf0| 0a 09 58 20 20 20 20 40 | 66 74 70 5f 6c 69 73 74 |..X @|ftp_list|
|00000d00| 3b 0a 09 58 0a 09 58 20 | 20 20 20 6c 6f 63 61 6c |;..X..X | local|
|00000d10| 28 40 74 6d 70 29 20 3d | 20 67 65 74 73 65 72 76 |(@tmp) =| getserv|
|00000d20| 62 79 6e 61 6d 65 28 22 | 66 74 70 22 2c 20 22 74 |byname("|ftp", "t|
|00000d30| 63 70 22 29 3b 0a 09 58 | 20 20 20 20 28 24 46 54 |cp");..X| ($FT|
|00000d40| 50 20 3d 20 24 74 6d 70 | 5b 32 5d 29 20 7c 7c 20 |P = $tmp|[2]) || |
|00000d50| 0a 09 58 09 64 69 65 20 | 22 55 6e 61 62 6c 65 20 |..X.die |"Unable |
|00000d60| 74 6f 20 67 65 74 20 73 | 65 72 76 69 63 65 20 6e |to get s|ervice n|
|00000d70| 75 6d 62 65 72 20 66 6f | 72 20 27 66 74 70 27 20 |umber fo|r 'ftp' |
|00000d80| 28 69 6e 20 66 74 70 6c | 69 62 29 21 5c 6e 22 3b |(in ftpl|ib)!\n";|
|00000d90| 0a 09 58 0a 09 58 20 20 | 20 20 40 73 74 64 5f 61 |..X..X | @std_a|
|00000da0| 63 74 69 6f 6e 73 20 3d | 20 28 0a 09 58 09 20 20 |ctions =| (..X. |
|00000db0| 20 20 27 54 49 4d 45 4f | 55 54 27 2c 0a 09 58 09 | 'TIMEO|UT',..X.|
|00000dc0| 20 20 20 20 71 28 24 66 | 74 70 5f 65 72 72 6f 72 | q($f|tp_error|
|00000dd0| 20 3d 20 22 43 6f 6e 6e | 65 63 74 69 6f 6e 20 74 | = "Conn|ection t|
|00000de0| 69 6d 65 64 20 6f 75 74 | 20 66 6f 72 20 24 48 6f |imed out| for $Ho|
|00000df0| 73 74 21 5c 6e 22 3b 20 | 75 6e 64 65 66 29 2c 0a |st!\n"; |undef),.|
|00000e00| 09 58 09 20 20 20 20 27 | 45 4f 46 27 2c 20 0a 09 |.X. '|EOF', ..|
|00000e10| 58 09 20 20 20 20 71 28 | 24 66 74 70 5f 65 72 72 |X. q(|$ftp_err|
|00000e20| 6f 72 20 3d 20 22 43 6f | 6e 6e 65 63 74 69 6f 6e |or = "Co|nnection|
|00000e30| 20 74 6f 20 24 48 6f 73 | 74 20 74 69 6d 65 64 20 | to $Hos|t timed |
|00000e40| 6f 75 74 20 75 6e 65 78 | 70 65 63 74 65 64 6c 79 |out unex|pectedly|
|00000e50| 21 5c 6e 22 3b 20 75 6e | 64 65 66 29 0a 09 58 20 |!\n"; un|def)..X |
|00000e60| 20 20 20 29 3b 0a 09 58 | 0a 09 58 20 20 20 20 40 | );..X|..X @|
|00000e70| 73 69 67 73 20 3d 20 28 | 27 49 4e 54 27 2c 20 27 |sigs = (|'INT', '|
|00000e80| 48 55 50 27 2c 20 27 54 | 45 52 4d 27 2c 20 27 51 |HUP', 'T|ERM', 'Q|
|00000e90| 55 49 54 27 29 3b 20 20 | 23 20 73 69 67 73 20 77 |UIT'); |# sigs w|
|00000ea0| 65 27 6c 6c 20 63 61 74 | 63 68 20 26 20 74 65 72 |e'll cat|ch & ter|
|00000eb0| 6d 69 6e 61 74 65 20 6f | 6e 0a 09 58 7d 0a 09 58 |minate o|n..X}..X|
|00000ec0| 0a 09 58 0a 09 58 0a 09 | 58 23 23 23 23 23 23 23 |..X..X..|X#######|
|00000ed0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00000ee0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00000ef0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00000f00| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00000f10| 23 23 23 23 0a 09 58 23 | 0a 09 58 23 20 20 54 68 |####..X#|..X# Th|
|00000f20| 65 20 66 6f 6c 6c 6f 77 | 69 6e 67 20 61 72 65 20 |e follow|ing are |
|00000f30| 69 6e 74 65 6e 64 65 64 | 20 74 6f 20 62 65 20 74 |intended| to be t|
|00000f40| 68 65 20 75 73 65 72 2d | 63 61 6c 6c 61 62 6c 65 |he user-|callable|
|00000f50| 20 72 6f 75 74 69 6e 65 | 73 2e 0a 09 58 23 20 20 | routine|s...X# |
|00000f60| 45 61 63 68 20 6f 66 20 | 74 68 65 73 65 20 64 6f |Each of |these do|
|00000f70| 65 73 20 6f 6e 65 20 6f | 66 20 74 68 65 20 66 74 |es one o|f the ft|
|00000f80| 70 20 6b 65 79 77 6f 72 | 64 20 66 75 6e 63 74 69 |p keywor|d functi|
|00000f90| 6f 6e 73 2e 0a 09 58 23 | 0a 09 58 23 23 23 23 23 |ons...X#|..X#####|
|00000fa0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00000fb0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00000fc0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00000fd0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00000fe0| 23 23 23 23 23 23 0a 09 | 58 0a 09 58 73 75 62 20 |######..|X..Xsub |
|00000ff0| 65 72 72 6f 72 20 7b 20 | 23 23 20 50 75 62 6c 69 |error { |## Publi|
|00001000| 63 0a 09 58 20 20 20 20 | 24 66 74 70 5f 65 72 72 |c..X |$ftp_err|
|00001010| 6f 72 3b 0a 09 58 7d 0a | 09 58 20 20 0a 09 58 23 |or;..X}.|.X ..X#|
|00001020| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00001030| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00001040| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00001050| 23 23 23 23 23 23 0a 09 | 58 0a 09 58 23 20 20 20 |######..|X..X# |
|00001060| 63 64 20 75 70 20 61 20 | 64 69 72 65 63 74 6f 72 |cd up a |director|
|00001070| 79 20 6c 65 76 65 6c 0a | 09 58 0a 09 58 73 75 62 |y level.|.X..Xsub|
|00001080| 20 63 64 75 70 20 7b 20 | 23 23 20 50 75 62 6c 69 | cdup { |## Publi|
|00001090| 63 0a 09 58 20 20 20 20 | 26 64 6f 5f 66 74 70 5f |c..X |&do_ftp_|
|000010a0| 63 6d 64 28 32 30 30 2c | 20 22 63 64 75 70 22 29 |cmd(200,| "cdup")|
|000010b0| 3b 0a 09 58 7d 0a 09 58 | 0a 09 58 23 23 23 23 23 |;..X}..X|..X#####|
|000010c0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|000010d0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|000010e0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|000010f0| 23 23 0a 09 58 0a 09 58 | 23 20 63 6c 6f 73 65 20 |##..X..X|# close |
|00001100| 61 6e 20 6f 70 65 6e 20 | 66 74 70 20 63 6f 6e 6e |an open |ftp conn|
|00001110| 65 63 74 69 6f 6e 0a 09 | 58 0a 09 58 73 75 62 20 |ection..|X..Xsub |
|00001120| 63 6c 6f 73 65 20 7b 20 | 23 23 20 50 75 62 6c 69 |close { |## Publi|
|00001130| 63 0a 09 58 20 20 20 20 | 72 65 74 75 72 6e 20 75 |c..X |return u|
|00001140| 6e 6c 65 73 73 20 24 4e | 65 65 64 73 43 6c 6f 73 |nless $N|eedsClos|
|00001150| 65 3b 0a 09 58 20 20 20 | 20 26 64 6f 5f 66 74 70 |e;..X | &do_ftp|
|00001160| 5f 63 6d 64 28 32 32 31 | 2c 20 22 71 75 69 74 22 |_cmd(221|, "quit"|
|00001170| 29 3b 0a 09 58 20 20 20 | 20 26 63 68 61 74 27 63 |);..X | &chat'c|
|00001180| 6c 6f 73 65 28 24 43 6f | 6e 74 72 6f 6c 29 3b 0a |lose($Co|ntrol);.|
|00001190| 09 58 20 20 20 20 75 6e | 64 65 66 20 24 4e 65 65 |.X un|def $Nee|
|000011a0| 64 73 43 6c 6f 73 65 3b | 0a 09 58 20 20 20 20 26 |dsClose;|..X &|
|000011b0| 64 6f 5f 66 74 70 5f 73 | 69 67 6e 61 6c 73 28 30 |do_ftp_s|ignals(0|
|000011c0| 29 3b 0a 09 58 7d 0a 09 | 58 0a 09 58 23 23 23 23 |);..X}..|X..X####|
|000011d0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|000011e0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|000011f0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00001200| 23 23 23 0a 09 58 0a 09 | 58 23 20 63 68 61 6e 67 |###..X..|X# chang|
|00001210| 65 20 72 65 6d 6f 74 65 | 20 64 69 72 65 63 74 6f |e remote| directo|
|00001220| 72 79 0a 09 58 0a 09 58 | 73 75 62 20 63 77 64 20 |ry..X..X|sub cwd |
|00001230| 7b 20 23 23 20 50 75 62 | 6c 69 63 0a 09 58 20 20 |{ ## Pub|lic..X |
|00001240| 20 20 26 64 6f 5f 66 74 | 70 5f 63 6d 64 28 32 35 | &do_ft|p_cmd(25|
|00001250| 30 2c 20 22 63 77 64 22 | 2c 20 40 5f 29 3b 0a 09 |0, "cwd"|, @_);..|
|00001260| 58 7d 0a 09 58 20 20 0a | 09 58 23 23 23 23 23 23 |X}..X .|.X######|
|00001270| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00001280| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00001290| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|000012a0| 23 0a 09 58 0a 09 58 23 | 20 20 64 65 6c 65 74 65 |#..X..X#| delete|
|000012b0| 20 61 20 72 65 6d 6f 74 | 65 20 66 69 6c 65 0a 09 | a remot|e file..|
|000012c0| 58 0a 09 58 73 75 62 20 | 64 65 6c 65 74 65 20 7b |X..Xsub |delete {|
|000012d0| 20 23 23 20 50 75 62 6c | 69 63 0a 09 58 20 20 20 | ## Publ|ic..X |
|000012e0| 20 20 26 64 6f 5f 66 74 | 70 5f 63 6d 64 28 32 35 | &do_ft|p_cmd(25|
|000012f0| 30 2c 20 22 64 65 6c 65 | 22 2c 20 40 5f 29 3b 20 |0, "dele|", @_); |
|00001300| 0a 09 58 7d 0a 09 58 0a | 09 58 23 23 23 23 23 23 |..X}..X.|.X######|
|00001310| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00001320| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00001330| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00001340| 23 0a 09 58 0a 09 58 23 | 20 20 67 65 74 20 61 20 |#..X..X#| get a |
|00001350| 64 69 72 65 63 74 6f 72 | 79 20 6c 69 73 74 69 6e |director|y listin|
|00001360| 67 20 6f 66 20 72 65 6d | 6f 74 65 20 64 69 72 65 |g of rem|ote dire|
|00001370| 63 74 6f 72 79 20 28 22 | 6c 73 20 2d 6c 22 29 0a |ctory ("|ls -l").|
|00001380| 09 58 0a 09 58 73 75 62 | 20 64 69 72 20 7b 20 23 |.X..Xsub| dir { #|
|00001390| 23 20 50 75 62 6c 69 63 | 0a 09 58 20 20 20 20 26 |# Public|..X &|
|000013a0| 64 6f 5f 66 74 70 5f 6c | 69 73 74 69 6e 67 28 22 |do_ftp_l|isting("|
|000013b0| 6c 69 73 74 22 2c 20 40 | 5f 29 3b 0a 09 58 7d 0a |list", @|_);..X}.|
|000013c0| 09 58 0a 09 58 23 23 23 | 23 23 23 23 23 23 23 23 |.X..X###|########|
|000013d0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|000013e0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|000013f0| 23 23 23 23 23 23 23 23 | 23 23 23 23 0a 09 58 0a |########|####..X.|
|00001400| 09 58 23 20 20 67 65 74 | 20 61 20 72 65 6d 6f 74 |.X# get| a remot|
|00001410| 65 20 66 69 6c 65 20 74 | 6f 20 61 20 6c 6f 63 61 |e file t|o a loca|
|00001420| 6c 20 66 69 6c 65 0a 09 | 58 23 20 20 20 20 67 65 |l file..|X# ge|
|00001430| 74 28 72 65 6d 6f 74 65 | 5b 2c 20 6c 6f 63 61 6c |t(remote|[, local|
|00001440| 5d 29 0a 09 58 0a 09 58 | 73 75 62 20 67 65 74 20 |])..X..X|sub get |
|00001450| 7b 20 23 23 20 50 75 62 | 6c 69 63 0a 09 58 20 20 |{ ## Pub|lic..X |
|00001460| 20 20 6c 6f 63 61 6c 28 | 24 72 65 6d 6f 74 65 2c | local(|$remote,|
|00001470| 20 24 6c 6f 63 61 6c 29 | 20 3d 20 40 5f 3b 0a 09 | $local)| = @_;..|
|00001480| 58 20 20 20 20 28 24 6c | 6f 63 61 6c 20 3d 20 24 |X ($l|ocal = $|
|00001490| 72 65 6d 6f 74 65 29 20 | 75 6e 6c 65 73 73 20 24 |remote) |unless $|
|000014a0| 6c 6f 63 61 6c 3b 0a 09 | 58 0a 09 58 20 20 20 20 |local;..|X..X |
|000014b0| 75 6e 6c 65 73 73 20 28 | 6f 70 65 6e 28 44 46 49 |unless (|open(DFI|
|000014c0| 4c 45 2c 20 22 3e 24 6c | 6f 63 61 6c 22 29 29 20 |LE, ">$l|ocal")) |
|000014d0| 7b 0a 09 58 09 24 66 74 | 70 5f 65 72 72 6f 72 20 |{..X.$ft|p_error |
|000014e0| 3d 20 20 22 4f 70 65 6e | 20 6f 66 20 6c 6f 63 61 |= "Open| of loca|
|000014f0| 6c 20 66 69 6c 65 20 24 | 6c 6f 63 61 6c 20 66 61 |l file $|local fa|
|00001500| 69 6c 65 64 3a 20 24 21 | 22 3b 0a 09 58 09 72 65 |iled: $!|";..X.re|
|00001510| 74 75 72 6e 20 75 6e 64 | 65 66 3b 0a 09 58 20 20 |turn und|ef;..X |
|00001520| 20 20 7d 20 65 6c 73 65 | 20 7b 0a 09 58 09 24 4e | } else| {..X.$N|
|00001530| 65 65 64 73 43 6c 65 61 | 6e 75 70 20 3d 20 24 6c |eedsClea|nup = $l|
|00001540| 6f 63 61 6c 3b 0a 09 58 | 20 20 20 20 7d 0a 09 58 |ocal;..X| }..X|
|00001550| 0a 09 58 20 20 20 20 72 | 65 74 75 72 6e 20 75 6e |..X r|eturn un|
|00001560| 64 65 66 20 75 6e 6c 65 | 73 73 20 26 64 6f 5f 6f |def unle|ss &do_o|
|00001570| 70 65 6e 5f 64 70 6f 72 | 74 3b 20 09 23 20 4f 70 |pen_dpor|t; .# Op|
|00001580| 65 6e 20 61 20 64 61 74 | 61 20 63 68 61 6e 6e 65 |en a dat|a channe|
|00001590| 6c 0a 09 58 20 20 20 20 | 75 6e 6c 65 73 73 20 28 |l..X |unless (|
|000015a0| 26 64 6f 5f 66 74 70 5f | 63 6d 64 28 31 35 30 2c |&do_ftp_|cmd(150,|
|000015b0| 20 22 72 65 74 72 20 24 | 72 65 6d 6f 74 65 22 29 | "retr $|remote")|
|000015c0| 29 20 7b 0a 09 58 09 24 | 66 74 70 5f 65 72 72 6f |) {..X.$|ftp_erro|
|000015d0| 72 20 2e 3d 20 22 5c 6e | 46 69 6c 65 20 24 72 65 |r .= "\n|File $re|
|000015e0| 6d 6f 74 65 20 6e 6f 74 | 20 66 65 74 63 68 65 64 |mote not| fetched|
|000015f0| 20 66 72 6f 6d 20 24 48 | 6f 73 74 5c 6e 22 3b 0a | from $H|ost\n";.|
|00001600| 09 58 09 63 6c 6f 73 65 | 20 44 46 49 4c 45 3b 0a |.X.close| DFILE;.|
|00001610| 09 58 09 75 6e 6c 69 6e | 6b 20 24 6c 6f 63 61 6c |.X.unlin|k $local|
|00001620| 3b 0a 09 58 09 75 6e 64 | 65 66 20 24 4e 65 65 64 |;..X.und|ef $Need|
|00001630| 73 43 6c 65 61 6e 75 70 | 3b 0a 09 58 09 72 65 74 |sCleanup|;..X.ret|
|00001640| 75 72 6e 3b 0a 09 58 20 | 20 20 20 7d 0a 09 58 0a |urn;..X | }..X.|
|00001650| 09 58 20 20 20 20 24 66 | 74 70 5f 74 72 61 6e 73 |.X $f|tp_trans|
|00001660| 5f 66 6c 61 67 20 3d 20 | 30 3b 0a 09 58 0a 09 58 |_flag = |0;..X..X|
|00001670| 20 20 20 20 64 6f 20 7b | 0a 09 58 09 26 63 68 61 | do {|..X.&cha|
|00001680| 74 27 65 78 70 65 63 74 | 28 24 44 61 74 61 5f 68 |t'expect|($Data_h|
|00001690| 61 6e 64 6c 65 2c 20 36 | 30 2c 0a 09 58 09 09 20 |andle, 6|0,..X.. |
|000016a0| 20 20 20 20 27 2e 7c 5c | 6e 27 2c 20 71 7b 70 72 | '.|\|n', q{pr|
|000016b0| 69 6e 74 20 44 46 49 4c | 45 20 28 24 63 68 61 74 |int DFIL|E ($chat|
|000016c0| 27 74 68 69 73 62 75 66 | 29 20 7c 7c 0a 09 58 09 |'thisbuf|) ||..X.|
|000016d0| 09 09 28 24 66 74 70 5f | 74 72 61 6e 73 5f 66 6c |..($ftp_|trans_fl|
|000016e0| 61 67 20 3d 20 33 29 3b | 20 75 6e 64 65 66 20 24 |ag = 3);| undef $|
|000016f0| 63 68 61 74 27 53 7d 2c | 0a 09 58 09 09 20 20 20 |chat'S},|..X.. |
|00001700| 20 20 27 45 4f 46 27 2c | 20 20 27 24 66 74 70 5f | 'EOF',| '$ftp_|
|00001710| 74 72 61 6e 73 5f 66 6c | 61 67 20 3d 20 31 27 2c |trans_fl|ag = 1',|
|00001720| 0a 09 58 09 09 20 20 20 | 20 20 27 54 49 4d 45 4f |..X.. | 'TIMEO|
|00001730| 55 54 27 2c 20 27 24 66 | 74 70 5f 74 72 61 6e 73 |UT', '$f|tp_trans|
|00001740| 5f 66 6c 61 67 20 3d 20 | 32 27 29 3b 0a 09 58 20 |_flag = |2');..X |
|00001750| 20 20 20 7d 20 75 6e 74 | 69 6c 20 24 66 74 70 5f | } unt|il $ftp_|
|00001760| 74 72 61 6e 73 5f 66 6c | 61 67 3b 0a 09 58 0a 09 |trans_fl|ag;..X..|
|00001770| 58 20 20 20 20 63 6c 6f | 73 65 20 44 46 49 4c 45 |X clo|se DFILE|
|00001780| 3b 0a 09 58 20 20 20 20 | 26 63 68 61 74 27 63 6c |;..X |&chat'cl|
|00001790| 6f 73 65 28 24 44 61 74 | 61 5f 68 61 6e 64 6c 65 |ose($Dat|a_handle|
|000017a0| 29 3b 09 09 23 20 43 6c | 6f 73 65 20 74 68 65 20 |);..# Cl|ose the |
|000017b0| 64 61 74 61 20 63 68 61 | 6e 6e 65 6c 0a 09 58 0a |data cha|nnel..X.|
|000017c0| 09 58 20 20 20 20 75 6e | 64 65 66 20 24 4e 65 65 |.X un|def $Nee|
|000017d0| 64 73 43 6c 65 61 6e 75 | 70 3b 0a 09 58 20 20 20 |dsCleanu|p;..X |
|000017e0| 20 69 66 20 28 24 66 74 | 70 5f 74 72 61 6e 73 5f | if ($ft|p_trans_|
|000017f0| 66 6c 61 67 20 3e 20 31 | 29 20 7b 0a 09 58 09 75 |flag > 1|) {..X.u|
|00001800| 6e 6c 69 6e 6b 20 24 6c | 6f 63 61 6c 3b 0a 09 58 |nlink $l|ocal;..X|
|00001810| 09 24 66 74 70 5f 65 72 | 72 6f 72 20 3d 20 22 55 |.$ftp_er|ror = "U|
|00001820| 6e 65 78 70 65 63 74 65 | 64 20 22 20 2e 20 28 24 |nexpecte|d " . ($|
|00001830| 66 74 70 5f 74 72 61 6e | 73 5f 66 6c 61 67 20 3d |ftp_tran|s_flag =|
|00001840| 3d 20 32 20 3f 20 22 74 | 69 6d 65 6f 75 74 22 20 |= 2 ? "t|imeout" |
|00001850| 3a 0a 09 58 09 09 28 24 | 66 74 70 5f 74 72 61 6e |:..X..($|ftp_tran|
|00001860| 73 5f 66 6c 61 67 20 21 | 3d 20 33 20 3f 20 22 66 |s_flag !|= 3 ? "f|
|00001870| 61 69 6c 75 72 65 22 20 | 3a 20 22 6c 6f 63 61 6c |ailure" |: "local|
|00001880| 20 77 72 69 74 65 20 66 | 61 69 6c 75 72 65 22 29 | write f|ailure")|
|00001890| 29 20 2e 0a 09 58 20 20 | 20 20 20 20 20 20 20 20 |) ...X | |
|000018a0| 20 20 20 20 20 20 22 20 | 67 65 74 74 69 6e 67 20 | " |getting |
|000018b0| 24 72 65 6d 6f 74 65 5c | 6e 22 3b 0a 09 58 20 20 |$remote\|n";..X |
|000018c0| 20 20 7d 0a 09 58 20 20 | 20 20 0a 09 58 20 20 20 | }..X | ..X |
|000018d0| 20 26 64 6f 5f 66 74 70 | 5f 63 6d 64 28 32 32 36 | &do_ftp|_cmd(226|
|000018e0| 29 3b 0a 09 58 7d 0a 09 | 58 0a 09 58 23 23 23 23 |);..X}..|X..X####|
|000018f0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00001900| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00001910| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00001920| 23 23 23 0a 09 58 0a 09 | 58 23 20 20 44 6f 20 61 |###..X..|X# Do a|
|00001930| 20 73 69 6d 70 6c 65 20 | 6e 61 6d 65 20 6c 69 73 | simple |name lis|
|00001940| 74 20 28 22 6c 73 22 29 | 0a 09 58 0a 09 58 73 75 |t ("ls")|..X..Xsu|
|00001950| 62 20 6c 69 73 74 20 7b | 20 23 23 20 50 75 62 6c |b list {| ## Publ|
|00001960| 69 63 0a 09 58 20 20 20 | 20 26 64 6f 5f 66 74 70 |ic..X | &do_ftp|
|00001970| 5f 6c 69 73 74 69 6e 67 | 28 22 6e 6c 73 74 22 2c |_listing|("nlst",|
|00001980| 20 40 5f 29 3b 0a 09 58 | 7d 0a 09 58 0a 09 58 23 | @_);..X|}..X..X#|
|00001990| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|000019a0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|000019b0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|000019c0| 23 23 23 23 23 23 0a 09 | 58 0a 09 58 23 20 20 20 |######..|X..X# |
|000019d0| 4d 61 6b 65 20 61 20 72 | 65 6d 6f 74 65 20 64 69 |Make a r|emote di|
|000019e0| 72 65 63 74 6f 72 79 0a | 09 58 0a 09 58 73 75 62 |rectory.|.X..Xsub|
|000019f0| 20 6d 6b 64 69 72 20 7b | 20 23 23 20 50 75 62 6c | mkdir {| ## Publ|
|00001a00| 69 63 0a 09 58 20 20 20 | 20 26 64 6f 5f 66 74 70 |ic..X | &do_ftp|
|00001a10| 5f 63 6d 64 28 32 35 37 | 2c 20 22 6d 6b 64 22 2c |_cmd(257|, "mkd",|
|00001a20| 20 40 5f 29 3b 0a 09 58 | 7d 0a 09 58 0a 09 58 23 | @_);..X|}..X..X#|
|00001a30| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00001a40| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00001a50| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00001a60| 23 23 23 23 23 23 0a 09 | 58 0a 09 58 23 20 20 4f |######..|X..X# O|
|00001a70| 70 65 6e 20 61 6e 20 66 | 74 70 20 63 6f 6e 6e 65 |pen an f|tp conne|
|00001a80| 63 74 69 6f 6e 20 74 6f | 20 72 65 6d 6f 74 65 20 |ction to| remote |
|00001a90| 68 6f 73 74 0a 09 58 0a | 09 58 73 75 62 20 6f 70 |host..X.|.Xsub op|
|00001aa0| 65 6e 20 7b 20 20 23 23 | 20 50 75 62 6c 69 63 0a |en { ##| Public.|
|00001ab0| 09 58 20 20 20 20 69 66 | 20 28 24 4e 65 65 64 73 |.X if| ($Needs|
|00001ac0| 43 6c 6f 73 65 29 20 7b | 0a 09 58 09 24 66 74 70 |Close) {|..X.$ftp|
|00001ad0| 5f 65 72 72 6f 72 20 3d | 20 22 43 6f 6e 6e 65 63 |_error =| "Connec|
|00001ae0| 74 69 6f 6e 20 73 74 69 | 6c 6c 20 6f 70 65 6e 20 |tion sti|ll open |
|00001af0| 74 6f 20 24 48 6f 73 74 | 21 22 3b 0a 09 58 09 72 |to $Host|!";..X.r|
|00001b00| 65 74 75 72 6e 20 75 6e | 64 65 66 3b 0a 09 58 20 |eturn un|def;..X |
|00001b10| 20 20 20 7d 0a 09 58 0a | 09 58 20 20 20 20 24 48 | }..X.|.X $H|
|00001b20| 6f 73 74 20 3d 20 73 68 | 69 66 74 28 40 5f 29 3b |ost = sh|ift(@_);|
|00001b30| 0a 09 58 20 20 20 20 6c | 6f 63 61 6c 28 24 55 73 |..X l|ocal($Us|
|00001b40| 65 72 2c 20 24 50 61 73 | 73 77 6f 72 64 2c 20 24 |er, $Pas|sword, $|
|00001b50| 41 63 63 74 29 20 3d 20 | 40 5f 3b 0a 09 58 20 20 |Acct) = |@_;..X |
|00001b60| 20 20 24 55 73 65 72 20 | 3d 20 22 61 6e 6f 6e 79 | $User |= "anony|
|00001b70| 6d 6f 75 73 22 20 75 6e | 6c 65 73 73 20 24 55 73 |mous" un|less $Us|
|00001b80| 65 72 3b 0a 09 58 20 20 | 20 20 24 50 61 73 73 77 |er;..X | $Passw|
|00001b90| 6f 72 64 20 3d 20 22 2d | 22 20 2e 20 24 6d 61 69 |ord = "-|" . $mai|
|00001ba0| 6e 27 45 4e 56 7b 27 55 | 53 45 52 27 7d 20 2e 20 |n'ENV{'U|SER'} . |
|00001bb0| 22 40 24 4d 79 68 6f 73 | 74 22 20 75 6e 6c 65 73 |"@$Myhos|t" unles|
|00001bc0| 73 20 24 50 61 73 73 77 | 6f 72 64 3b 0a 09 58 20 |s $Passw|ord;..X |
|00001bd0| 20 20 20 24 66 74 70 5f | 65 72 72 6f 72 20 3d 20 | $ftp_|error = |
|00001be0| 27 27 3b 0a 09 58 0a 09 | 58 20 20 20 20 75 6e 6c |'';..X..|X unl|
|00001bf0| 65 73 73 28 24 43 6f 6e | 74 72 6f 6c 20 3d 20 26 |ess($Con|trol = &|
|00001c00| 63 68 61 74 27 6f 70 65 | 6e 5f 70 6f 72 74 28 24 |chat'ope|n_port($|
|00001c10| 48 6f 73 74 2c 20 24 46 | 54 50 29 29 20 7b 0a 09 |Host, $F|TP)) {..|
|00001c20| 58 09 24 66 74 70 5f 65 | 72 72 6f 72 20 3d 20 22 |X.$ftp_e|rror = "|
|00001c30| 55 6e 61 62 6c 65 20 74 | 6f 20 63 6f 6e 6e 65 63 |Unable t|o connec|
|00001c40| 74 20 74 6f 20 24 48 6f | 73 74 20 66 74 70 20 70 |t to $Ho|st ftp p|
|00001c50| 6f 72 74 3a 20 24 21 22 | 3b 0a 09 58 09 72 65 74 |ort: $!"|;..X.ret|
|00001c60| 75 72 6e 20 75 6e 64 65 | 66 3b 0a 09 58 20 20 20 |urn unde|f;..X |
|00001c70| 20 7d 0a 09 58 0a 09 58 | 20 20 20 20 75 6e 6c 65 | }..X..X| unle|
|00001c80| 73 73 28 26 63 68 61 74 | 27 65 78 70 65 63 74 28 |ss(&chat|'expect(|
|00001c90| 24 43 6f 6e 74 72 6f 6c | 2c 20 36 30 2c 0a 09 58 |$Control|, 60,..X|
|00001ca0| 09 09 20 20 20 20 20 20 | 20 20 22 5e 32 32 30 20 |.. | "^220 |
|00001cb0| 2e 2a 5c 6e 22 2c 09 20 | 22 31 22 2c 0a 09 58 09 |.*\n",. |"1",..X.|
|00001cc0| 09 20 20 20 20 20 20 20 | 20 22 5e 5c 64 5c 64 5c |. | "^\d\d\|
|00001cd0| 64 20 2e 2a 5c 6e 22 2c | 20 20 22 75 6e 64 65 66 |d .*\n",| "undef|
|00001ce0| 22 29 29 20 7b 0a 09 58 | 09 24 66 74 70 5f 65 72 |")) {..X|.$ftp_er|
|00001cf0| 72 6f 72 20 3d 20 22 45 | 72 72 6f 72 20 65 73 74 |ror = "E|rror est|
|00001d00| 61 62 6c 69 73 68 69 6e | 67 20 63 6f 6e 74 72 6f |ablishin|g contro|
|00001d10| 6c 20 63 6f 6e 6e 65 63 | 74 69 6f 6e 20 74 6f 20 |l connec|tion to |
|00001d20| 24 48 6f 73 74 22 3b 0a | 09 58 20 20 20 20 20 20 |$Host";.|.X |
|00001d30| 20 20 26 63 68 61 74 27 | 63 6c 6f 73 65 28 24 43 | &chat'|close($C|
|00001d40| 6f 6e 74 72 6f 6c 29 3b | 0a 09 58 09 72 65 74 75 |ontrol);|..X.retu|
|00001d50| 72 6e 20 75 6e 64 65 66 | 3b 0a 09 58 20 20 20 20 |rn undef|;..X |
|00001d60| 7d 0a 09 58 20 20 20 20 | 26 64 6f 5f 66 74 70 5f |}..X |&do_ftp_|
|00001d70| 73 69 67 6e 61 6c 73 28 | 24 4e 65 65 64 73 43 6c |signals(|$NeedsCl|
|00001d80| 6f 73 65 20 3d 20 31 29 | 3b 0a 09 58 0a 09 58 20 |ose = 1)|;..X..X |
|00001d90| 20 20 20 75 6e 6c 65 73 | 73 20 28 26 64 6f 5f 66 | unles|s (&do_f|
|00001da0| 74 70 5f 63 6d 64 28 33 | 33 31 2c 20 22 75 73 65 |tp_cmd(3|31, "use|
|00001db0| 72 20 24 55 73 65 72 22 | 29 29 20 7b 0a 09 58 09 |r $User"|)) {..X.|
|00001dc0| 24 66 74 70 5f 65 72 72 | 6f 72 20 2e 3d 20 22 5c |$ftp_err|or .= "\|
|00001dd0| 6e 55 73 65 72 20 63 6f | 6d 6d 61 6e 64 20 66 61 |nUser co|mmand fa|
|00001de0| 69 6c 65 64 20 65 73 74 | 61 62 6c 69 73 68 69 6e |iled est|ablishin|
|00001df0| 67 20 63 6f 6e 6e 65 63 | 74 69 6f 6e 20 74 6f 20 |g connec|tion to |
|00001e00| 24 48 6f 73 74 22 3b 0a | 09 58 09 72 65 74 75 72 |$Host";.|.X.retur|
|00001e10| 6e 20 75 6e 64 65 66 3b | 0a 09 58 20 20 20 20 7d |n undef;|..X }|
|00001e20| 0a 09 58 0a 09 58 20 20 | 20 20 75 6e 6c 65 73 73 |..X..X | unless|
|00001e30| 20 28 26 64 6f 5f 66 74 | 70 5f 63 6d 64 28 22 28 | (&do_ft|p_cmd("(|
|00001e40| 32 33 30 7c 33 33 32 7c | 32 30 32 29 22 2c 20 22 |230|332||202)", "|
|00001e50| 70 61 73 73 20 24 50 61 | 73 73 77 6f 72 64 22 29 |pass $Pa|ssword")|
|00001e60| 29 20 7b 0a 09 58 09 24 | 66 74 70 5f 65 72 72 6f |) {..X.$|ftp_erro|
|00001e70| 72 20 2e 3d 20 22 5c 6e | 50 61 73 73 77 6f 72 64 |r .= "\n|Password|
|00001e80| 20 63 6f 6d 6d 61 6e 64 | 20 66 61 69 6c 65 64 20 | command| failed |
|00001e90| 65 73 74 61 62 6c 69 73 | 68 69 6e 67 20 63 6f 6e |establis|hing con|
|00001ea0| 6e 65 63 74 69 6f 6e 20 | 74 6f 20 24 48 6f 73 74 |nection |to $Host|
|00001eb0| 22 3b 0a 09 58 09 72 65 | 74 75 72 6e 20 75 6e 64 |";..X.re|turn und|
|00001ec0| 65 66 3b 0a 09 58 20 20 | 20 20 7d 0a 09 58 0a 09 |ef;..X | }..X..|
|00001ed0| 58 20 20 20 20 72 65 74 | 75 72 6e 20 31 20 75 6e |X ret|urn 1 un|
|00001ee0| 6c 65 73 73 20 24 41 63 | 63 74 3b 0a 09 58 0a 09 |less $Ac|ct;..X..|
|00001ef0| 58 20 20 20 20 75 6e 6c | 65 73 73 20 28 26 64 6f |X unl|ess (&do|
|00001f00| 5f 66 74 70 5f 63 6d 64 | 28 22 28 32 33 30 7c 32 |_ftp_cmd|("(230|2|
|00001f10| 30 32 29 22 2c 20 22 70 | 61 73 73 20 24 50 61 73 |02)", "p|ass $Pas|
|00001f20| 73 77 6f 72 64 22 29 29 | 20 7b 0a 09 58 09 24 66 |sword"))| {..X.$f|
|00001f30| 74 70 5f 65 72 72 6f 72 | 20 2e 3d 20 22 5c 6e 41 |tp_error| .= "\nA|
|00001f40| 63 63 74 20 63 6f 6d 6d | 61 6e 64 20 66 61 69 6c |cct comm|and fail|
|00001f50| 65 64 20 65 73 74 61 62 | 6c 69 73 68 69 6e 67 20 |ed estab|lishing |
|00001f60| 63 6f 6e 6e 65 63 74 69 | 6f 6e 20 74 6f 20 24 48 |connecti|on to $H|
|00001f70| 6f 73 74 22 3b 0a 09 58 | 09 72 65 74 75 72 6e 20 |ost";..X|.return |
|00001f80| 75 6e 64 65 66 3b 0a 09 | 58 20 20 20 20 7d 0a 09 |undef;..|X }..|
|00001f90| 58 20 20 20 20 31 3b 0a | 09 58 7d 0a 09 58 0a 09 |X 1;.|.X}..X..|
|00001fa0| 58 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |X#######|########|
|00001fb0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00001fc0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00001fd0| 23 23 23 23 23 23 23 23 | 0a 09 58 0a 09 58 23 20 |########|..X..X# |
|00001fe0| 20 47 65 74 20 6e 61 6d | 65 20 6f 66 20 63 75 72 | Get nam|e of cur|
|00001ff0| 72 65 6e 74 20 72 65 6d | 6f 74 65 20 64 69 72 65 |rent rem|ote dire|
|00002000| 63 74 6f 72 79 0a 09 58 | 0a 09 58 73 75 62 20 70 |ctory..X|..Xsub p|
|00002010| 77 64 20 7b 20 23 23 20 | 50 75 62 6c 69 63 0a 09 |wd { ## |Public..|
|00002020| 58 20 20 20 20 69 66 20 | 28 26 64 6f 5f 66 74 70 |X if |(&do_ftp|
|00002030| 5f 63 6d 64 28 32 35 37 | 2c 20 22 70 77 64 22 29 |_cmd(257|, "pwd")|
|00002040| 29 20 7b 0a 09 58 09 24 | 66 74 70 5f 6d 61 74 63 |) {..X.$|ftp_matc|
|00002050| 68 65 64 20 3d 7e 20 6d | 2f 5e 32 35 37 20 28 2e |hed =~ m|/^257 (.|
|00002060| 2b 29 5c 72 3f 5c 6e 2f | 3b 0a 09 58 09 24 31 3b |+)\r?\n/|;..X.$1;|
|00002070| 0a 09 58 20 20 20 20 7d | 20 65 6c 73 65 20 7b 0a |..X }| else {.|
|00002080| 09 58 09 75 6e 64 65 66 | 3b 0a 09 58 20 20 20 20 |.X.undef|;..X |
|00002090| 7d 20 20 20 20 0a 09 58 | 7d 0a 09 58 0a 09 58 23 |} ..X|}..X..X#|
|000020a0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|000020b0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|000020c0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|000020d0| 23 23 23 23 23 23 0a 09 | 58 0a 09 58 23 20 20 52 |######..|X..X# R|
|000020e0| 65 6e 61 6d 65 20 61 20 | 72 65 6d 6f 74 65 20 66 |ename a |remote f|
|000020f0| 69 6c 65 0a 09 58 0a 09 | 58 73 75 62 20 72 65 6e |ile..X..|Xsub ren|
|00002100| 61 6d 65 20 7b 20 23 23 | 20 50 75 62 6c 69 63 0a |ame { ##| Public.|
|00002110| 09 58 20 20 20 20 6c 6f | 63 61 6c 28 24 66 72 6f |.X lo|cal($fro|
|00002120| 6d 2c 20 24 74 6f 29 20 | 3d 20 40 5f 3b 0a 09 58 |m, $to) |= @_;..X|
|00002130| 0a 09 58 20 20 20 20 26 | 64 6f 5f 66 74 70 5f 63 |..X &|do_ftp_c|
|00002140| 6d 64 28 33 35 30 2c 20 | 22 72 6e 66 72 20 24 66 |md(350, |"rnfr $f|
|00002150| 72 6f 6d 22 29 20 26 26 | 20 26 64 6f 5f 66 74 70 |rom") &&| &do_ftp|
|00002160| 5f 63 6d 64 28 32 35 30 | 2c 20 22 72 6e 74 6f 20 |_cmd(250|, "rnto |
|00002170| 24 74 6f 22 29 3b 0a 09 | 58 7d 0a 09 58 0a 09 58 |$to");..|X}..X..X|
|00002180| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00002190| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|000021a0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|000021b0| 23 23 23 23 23 23 23 0a | 09 58 0a 09 58 23 20 20 |#######.|.X..X# |
|000021c0| 53 65 74 20 74 72 61 6e | 73 66 65 72 20 74 79 70 |Set tran|sfer typ|
|000021d0| 65 0a 09 58 0a 09 58 73 | 75 62 20 74 79 70 65 20 |e..X..Xs|ub type |
|000021e0| 7b 20 23 23 20 50 75 62 | 6c 69 63 0a 09 58 20 20 |{ ## Pub|lic..X |
|000021f0| 20 20 26 64 6f 5f 66 74 | 70 5f 63 6d 64 28 32 30 | &do_ft|p_cmd(20|
|00002200| 30 2c 20 22 74 79 70 65 | 22 2c 20 40 5f 29 3b 20 |0, "type|", @_); |
|00002210| 0a 09 58 7d 0a 09 58 0a | 09 58 0a 09 58 23 23 23 |..X}..X.|.X..X###|
|00002220| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00002230| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00002240| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00002250| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00002260| 23 23 23 23 23 23 23 23 | 0a 09 58 23 0a 09 58 23 |########|..X#..X#|
|00002270| 20 20 54 68 65 20 66 6f | 6c 6c 6f 77 69 6e 67 20 | The fo|llowing |
|00002280| 61 72 65 20 69 6e 74 65 | 6e 64 65 64 20 74 6f 20 |are inte|nded to |
|00002290| 62 65 20 75 74 69 6c 69 | 74 79 20 72 6f 75 74 69 |be utili|ty routi|
|000022a0| 6e 65 73 20 75 73 65 64 | 20 6f 6e 6c 79 20 6c 6f |nes used| only lo|
|000022b0| 63 61 6c 6c 79 2e 0a 09 | 58 23 20 20 55 73 65 72 |cally...|X# User|
|000022c0| 73 20 73 68 6f 75 6c 64 | 20 6e 6f 74 20 63 61 6c |s should| not cal|
|000022d0| 6c 20 74 68 65 73 65 20 | 64 69 72 65 63 74 6c 79 |l these |directly|
|000022e0| 2e 0a 09 58 23 0a 09 58 | 23 23 23 23 23 23 23 23 |...X#..X|########|
|000022f0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00002300| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00002310| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00002320| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00002330| 23 23 23 0a 09 58 0a 09 | 58 73 75 62 20 64 6f 5f |###..X..|Xsub do_|
|00002340| 66 74 70 5f 63 6d 64 20 | 7b 20 20 23 23 20 50 72 |ftp_cmd |{ ## Pr|
|00002350| 69 76 61 74 65 0a 09 58 | 20 20 20 20 6c 6f 63 61 |ivate..X| loca|
|00002360| 6c 28 24 6f 6b 61 79 2c | 20 40 63 6f 6d 6d 61 6e |l($okay,| @comman|
|00002370| 64 73 2c 20 24 76 61 6c | 29 20 3d 20 40 5f 3b 0a |ds, $val|) = @_;.|
|00002380| 09 58 0a 09 58 20 20 20 | 20 24 63 6f 6d 6d 61 6e |.X..X | $comman|
|00002390| 64 73 5b 30 5d 20 26 26 | 20 0a 09 58 09 26 63 68 |ds[0] &&| ..X.&ch|
|000023a0| 61 74 27 70 72 69 6e 74 | 28 24 43 6f 6e 74 72 6f |at'print|($Contro|
|000023b0| 6c 2c 20 6a 6f 69 6e 28 | 22 20 22 2c 20 40 63 6f |l, join(|" ", @co|
|000023c0| 6d 6d 61 6e 64 73 29 2c | 20 22 5c 72 5c 6e 22 29 |mmands),| "\r\n")|
|000023d0| 3b 0a 09 58 0a 09 58 20 | 20 20 20 26 63 68 61 74 |;..X..X | &chat|
|000023e0| 27 65 78 70 65 63 74 28 | 24 43 6f 6e 74 72 6f 6c |'expect(|$Control|
|000023f0| 2c 20 36 30 2c 20 0a 09 | 58 09 09 20 22 5e 24 6f |, 60, ..|X.. "^$o|
|00002400| 6b 61 79 20 2e 2a 5c 5c | 6e 22 2c 20 20 20 20 20 |kay .*\\|n", |
|00002410| 20 20 20 27 24 66 74 70 | 5f 6d 61 74 63 68 65 64 | '$ftp|_matched|
|00002420| 20 3d 20 24 26 3b 20 31 | 27 2c 0a 09 58 09 09 20 | = $&; 1|',..X.. |
|00002430| 27 5e 28 5c 64 29 5c 64 | 5c 64 20 2e 2a 5c 5c 6e |'^(\d)\d|\d .*\\n|
|00002440| 27 2c 20 27 28 24 53 74 | 72 69 6e 67 20 3d 20 24 |', '($St|ring = $|
|00002450| 26 29 20 3d 7e 20 79 2f | 5c 72 5c 6e 2f 2f 64 3b |&) =~ y/|\r\n//d;|
|00002460| 20 0a 09 58 09 09 20 20 | 20 20 20 24 66 74 70 5f | ..X.. | $ftp_|
|00002470| 65 72 72 6f 72 20 3d 20 | 71 71 7b 55 6e 65 78 70 |error = |qq{Unexp|
|00002480| 65 63 74 65 64 20 72 65 | 70 6c 79 20 66 6f 72 20 |ected re|ply for |
|00002490| 27 20 2e 0a 09 58 09 09 | 20 20 20 20 20 22 40 63 |' ...X..| "@c|
|000024a0| 6f 6d 6d 61 6e 64 73 22 | 20 2e 20 27 3a 20 24 53 |ommands"| . ': $S|
|000024b0| 74 72 69 6e 67 7d 3b 20 | 0a 09 58 09 09 20 20 20 |tring}; |..X.. |
|000024c0| 20 20 24 31 20 3e 20 33 | 20 3f 20 75 6e 64 65 66 | $1 > 3| ? undef|
|000024d0| 20 3a 20 31 27 2c 0a 09 | 58 09 09 20 40 73 74 64 | : 1',..|X.. @std|
|000024e0| 5f 61 63 74 69 6f 6e 73 | 0a 09 58 09 09 29 3b 0a |_actions|..X..);.|
|000024f0| 09 58 7d 0a 09 58 0a 09 | 58 23 23 23 23 23 23 23 |.X}..X..|X#######|
|00002500| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00002510| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00002520| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00002530| 0a 09 58 0a 09 58 73 75 | 62 20 64 6f 5f 66 74 70 |..X..Xsu|b do_ftp|
|00002540| 5f 6c 69 73 74 69 6e 67 | 20 7b 20 23 23 20 50 72 |_listing| { ## Pr|
|00002550| 69 76 61 74 65 0a 09 58 | 20 20 20 20 6c 6f 63 61 |ivate..X| loca|
|00002560| 6c 28 40 6c 63 6d 64 29 | 20 3d 20 40 5f 3b 0a 09 |l(@lcmd)| = @_;..|
|00002570| 58 20 20 20 20 40 66 74 | 70 5f 6c 69 73 74 20 3d |X @ft|p_list =|
|00002580| 20 28 29 3b 0a 09 58 20 | 20 20 20 24 66 74 70 5f | ();..X | $ftp_|
|00002590| 74 72 61 6e 73 5f 66 6c | 61 67 20 3d 20 30 3b 0a |trans_fl|ag = 0;.|
|000025a0| 09 58 0a 09 58 20 20 20 | 20 72 65 74 75 72 6e 20 |.X..X | return |
|000025b0| 75 6e 64 65 66 20 75 6e | 6c 65 73 73 20 26 64 6f |undef un|less &do|
|000025c0| 5f 6f 70 65 6e 5f 64 70 | 6f 72 74 3b 0a 09 58 0a |_open_dp|ort;..X.|
|000025d0| 09 58 20 20 20 20 72 65 | 74 75 72 6e 20 75 6e 64 |.X re|turn und|
|000025e0| 65 66 20 75 6e 6c 65 73 | 73 20 26 64 6f 5f 66 74 |ef unles|s &do_ft|
|000025f0| 70 5f 63 6d 64 28 31 35 | 30 2c 20 40 6c 63 6d 64 |p_cmd(15|0, @lcmd|
|00002600| 29 3b 0a 09 58 20 20 20 | 20 64 6f 20 7b 09 09 09 |);..X | do {...|
|00002610| 23 20 20 46 6f 6c 6c 6f | 77 69 6e 67 20 69 73 20 |# Follo|wing is |
|00002620| 67 72 6f 74 74 79 2c 20 | 62 75 74 20 63 68 61 74 |grotty, |but chat|
|00002630| 32 20 6d 61 6b 65 73 20 | 75 73 20 64 6f 20 69 74 |2 makes |us do it|
|00002640| 0a 09 58 20 20 20 20 20 | 20 20 20 26 63 68 61 74 |..X | &chat|
|00002650| 27 65 78 70 65 63 74 28 | 24 44 61 74 61 5f 68 61 |'expect(|$Data_ha|
|00002660| 6e 64 6c 65 2c 20 33 30 | 2c 0a 09 58 09 09 22 28 |ndle, 30|,..X.."(|
|00002670| 2e 2a 29 5c 72 3f 5c 6e | 22 2c 20 20 20 20 27 70 |.*)\r?\n|", 'p|
|00002680| 75 73 68 28 40 66 74 70 | 5f 6c 69 73 74 2c 20 24 |ush(@ftp|_list, $|
|00002690| 31 29 27 2c 0a 09 58 09 | 09 22 45 4f 46 22 2c 20 |1)',..X.|."EOF", |
|000026a0| 20 20 20 20 27 24 66 74 | 70 5f 74 72 61 6e 73 5f | '$ft|p_trans_|
|000026b0| 66 6c 61 67 20 3d 20 31 | 27 29 3b 0a 09 58 20 20 |flag = 1|');..X |
|000026c0| 20 20 7d 20 75 6e 74 69 | 6c 20 24 66 74 70 5f 74 | } unti|l $ftp_t|
|000026d0| 72 61 6e 73 5f 66 6c 61 | 67 3b 0a 09 58 0a 09 58 |rans_fla|g;..X..X|
|000026e0| 20 20 20 20 26 63 68 61 | 74 27 63 6c 6f 73 65 28 | &cha|t'close(|
|000026f0| 24 44 61 74 61 5f 68 61 | 6e 64 6c 65 29 3b 0a 09 |$Data_ha|ndle);..|
|00002700| 58 20 20 20 20 72 65 74 | 75 72 6e 20 75 6e 64 65 |X ret|urn unde|
|00002710| 66 20 75 6e 6c 65 73 73 | 20 26 64 6f 5f 66 74 70 |f unless| &do_ftp|
|00002720| 5f 63 6d 64 28 32 32 36 | 29 3b 0a 09 58 0a 09 58 |_cmd(226|);..X..X|
|00002730| 20 20 20 20 67 72 65 70 | 28 79 2f 5c 72 5c 6e 2f | grep|(y/\r\n/|
|00002740| 2f 64 2c 20 40 66 74 70 | 5f 6c 69 73 74 29 3b 0a |/d, @ftp|_list);.|
|00002750| 09 58 20 20 20 20 40 66 | 74 70 5f 6c 69 73 74 3b |.X @f|tp_list;|
|00002760| 0a 09 58 7d 20 20 0a 09 | 58 0a 09 58 23 23 23 23 |..X} ..|X..X####|
|00002770| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00002780| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00002790| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|000027a0| 23 23 23 0a 09 58 0a 09 | 58 73 75 62 20 64 6f 5f |###..X..|Xsub do_|
|000027b0| 6f 70 65 6e 5f 64 70 6f | 72 74 20 7b 20 23 23 20 |open_dpo|rt { ## |
|000027c0| 50 72 69 76 61 74 65 0a | 09 58 20 20 20 20 6c 6f |Private.|.X lo|
|000027d0| 63 61 6c 28 40 66 6f 6f | 2c 20 24 70 6f 72 74 29 |cal(@foo|, $port)|
|000027e0| 20 3d 20 26 63 68 61 74 | 27 6f 70 65 6e 5f 6c 69 | = &chat|'open_li|
|000027f0| 73 74 65 6e 3b 0a 09 58 | 20 20 20 20 28 24 70 6f |sten;..X| ($po|
|00002800| 72 74 2c 20 24 44 61 74 | 61 5f 68 61 6e 64 6c 65 |rt, $Dat|a_handle|
|00002810| 29 20 3d 20 73 70 6c 69 | 63 65 28 40 66 6f 6f 2c |) = spli|ce(@foo,|
|00002820| 20 34 2c 20 32 29 3b 0a | 09 58 0a 09 58 20 20 20 | 4, 2);.|.X..X |
|00002830| 20 75 6e 6c 65 73 73 20 | 28 24 44 61 74 61 5f 68 | unless |($Data_h|
|00002840| 61 6e 64 6c 65 29 20 7b | 0a 09 58 09 24 66 74 70 |andle) {|..X.$ftp|
|00002850| 5f 65 72 72 6f 72 20 3d | 20 20 22 55 6e 61 62 6c |_error =| "Unabl|
|00002860| 65 20 74 6f 20 6f 70 65 | 6e 20 64 61 74 61 20 70 |e to ope|n data p|
|00002870| 6f 72 74 3a 20 24 21 22 | 3b 0a 09 58 09 72 65 74 |ort: $!"|;..X.ret|
|00002880| 75 72 6e 20 75 6e 64 65 | 66 3b 0a 09 58 20 20 20 |urn unde|f;..X |
|00002890| 20 7d 0a 09 58 0a 09 58 | 20 20 20 20 70 75 73 68 | }..X..X| push|
|000028a0| 28 40 66 6f 6f 2c 20 24 | 70 6f 72 74 20 3e 3e 20 |(@foo, $|port >> |
|000028b0| 38 2c 20 24 70 6f 72 74 | 20 26 20 30 78 66 66 29 |8, $port| & 0xff)|
|000028c0| 3b 0a 09 58 20 20 20 20 | 6c 6f 63 61 6c 28 24 6d |;..X |local($m|
|000028d0| 79 68 6f 73 74 29 20 3d | 20 28 6a 6f 69 6e 28 27 |yhost) =| (join('|
|000028e0| 2c 27 2c 20 40 66 6f 6f | 29 29 3b 0a 09 58 20 20 |,', @foo|));..X |
|000028f0| 20 20 0a 09 58 20 20 20 | 20 26 64 6f 5f 66 74 70 | ..X | &do_ftp|
|00002900| 5f 63 6d 64 28 32 30 30 | 2c 20 22 70 6f 72 74 20 |_cmd(200|, "port |
|00002910| 24 6d 79 68 6f 73 74 22 | 29 3b 0a 09 58 7d 0a 09 |$myhost"|);..X}..|
|00002920| 58 0a 09 58 23 23 23 23 | 23 23 23 23 23 23 23 23 |X..X####|########|
|00002930| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00002940| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00002950| 23 23 23 23 23 23 23 23 | 23 23 23 0a 09 58 23 0a |########|###..X#.|
|00002960| 09 58 23 20 20 54 6f 20 | 63 6c 65 61 6e 75 70 20 |.X# To |cleanup |
|00002970| 61 66 74 65 72 20 61 20 | 70 72 6f 62 6c 65 6d 0a |after a |problem.|
|00002980| 09 58 23 0a 09 58 0a 09 | 58 73 75 62 20 64 6f 5f |.X#..X..|Xsub do_|
|00002990| 66 74 70 5f 61 62 6f 72 | 74 20 7b 0a 09 58 20 20 |ftp_abor|t {..X |
|000029a0| 20 20 64 69 65 20 75 6e | 6c 65 73 73 20 24 4e 65 | die un|less $Ne|
|000029b0| 65 64 73 43 6c 6f 73 65 | 3b 0a 09 58 0a 09 58 20 |edsClose|;..X..X |
|000029c0| 20 20 20 26 63 68 61 74 | 27 70 72 69 6e 74 28 24 | &chat|'print($|
|000029d0| 43 6f 6e 74 72 6f 6c 2c | 20 22 61 62 6f 72 22 2c |Control,| "abor",|
|000029e0| 20 22 5c 72 5c 6e 22 29 | 3b 0a 09 58 20 20 20 20 | "\r\n")|;..X |
|000029f0| 26 63 68 61 74 27 63 6c | 6f 73 65 28 24 44 61 74 |&chat'cl|ose($Dat|
|00002a00| 61 5f 68 61 6e 64 6c 65 | 29 3b 0a 09 58 20 20 20 |a_handle|);..X |
|00002a10| 20 26 63 68 61 74 27 65 | 78 70 65 63 74 28 24 43 | &chat'e|xpect($C|
|00002a20| 6f 6e 74 72 6f 6c 2c 20 | 31 30 2c 20 27 2e 27 2c |ontrol, |10, '.',|
|00002a30| 20 75 6e 64 65 66 29 3b | 0a 09 58 20 20 20 20 26 | undef);|..X &|
|00002a40| 63 68 61 74 27 63 6c 6f | 73 65 28 24 43 6f 6e 74 |chat'clo|se($Cont|
|00002a50| 72 6f 6c 29 3b 0a 09 58 | 0a 09 58 20 20 20 20 63 |rol);..X|..X c|
|00002a60| 6c 6f 73 65 20 44 46 49 | 4c 45 3b 0a 09 58 20 20 |lose DFI|LE;..X |
|00002a70| 20 20 75 6e 6c 69 6e 6b | 28 24 4e 65 65 64 73 43 | unlink|($NeedsC|
|00002a80| 6c 65 61 6e 75 70 29 20 | 69 66 20 24 4e 65 65 64 |leanup) |if $Need|
|00002a90| 73 43 6c 65 61 6e 75 70 | 3b 0a 09 58 20 20 20 20 |sCleanup|;..X |
|00002aa0| 64 69 65 3b 0a 09 58 7d | 0a 09 58 0a 09 58 23 23 |die;..X}|..X..X##|
|00002ab0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00002ac0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00002ad0| 23 23 23 23 23 23 23 23 | 23 23 23 23 23 23 23 23 |########|########|
|00002ae0| 23 23 23 23 23 0a 09 58 | 23 0a 09 58 23 20 20 54 |#####..X|#..X# T|
|00002af0| 6f 20 73 65 74 20 73 69 | 67 6e 61 6c 73 20 74 6f |o set si|gnals to|
|00002b00| 20 64 6f 20 74 68 65 20 | 61 62 6f 72 74 20 70 72 | do the |abort pr|
|00002b10| 6f 70 65 72 6c 79 0a 09 | 58 23 0a 09 58 0a 09 58 |operly..|X#..X..X|
|00002b20| 73 75 62 20 64 6f 5f 66 | 74 70 5f 73 69 67 6e 61 |sub do_f|tp_signa|
|00002b30| 6c 73 20 7b 0a 09 58 20 | 20 20 20 6c 6f 63 61 6c |ls {..X | local|
|00002b40| 28 24 66 6c 61 67 2c 20 | 24 73 69 67 29 20 3d 20 |($flag, |$sig) = |
|00002b50| 40 5f 3b 0a 09 58 0a 09 | 58 20 20 20 20 6c 6f 63 |@_;..X..|X loc|
|00002b60| 61 6c 20 28 24 6f 6c 64 | 2c 20 24 6e 65 77 29 20 |al ($old|, $new) |
|00002b70| 3d 20 28 27 44 45 46 41 | 55 4c 54 27 2c 20 22 66 |= ('DEFA|ULT', "f|
|00002b80| 74 70 27 64 6f 5f 66 74 | 70 5f 61 62 6f 72 74 22 |tp'do_ft|p_abort"|
|00002b90| 29 3b 0a 09 58 20 20 20 | 20 24 66 6c 61 67 20 7c |);..X | $flag ||
|00002ba0| 7c 20 28 28 24 6f 6c 64 | 2c 20 24 6e 65 77 29 20 || (($old|, $new) |
|00002bb0| 3d 20 28 24 6e 65 77 2c | 20 24 6f 6c 64 29 29 3b |= ($new,| $old));|
|00002bc0| 0a 09 58 20 20 20 20 66 | 6f 72 65 61 63 68 20 24 |..X f|oreach $|
|00002bd0| 73 69 67 20 28 40 73 69 | 67 73 29 20 7b 0a 09 58 |sig (@si|gs) {..X|
|00002be0| 09 28 24 53 49 47 7b 24 | 73 69 67 7d 20 3d 3d 20 |.($SIG{$|sig} == |
|00002bf0| 24 6f 6c 64 29 20 26 26 | 20 28 24 53 49 47 7b 24 |$old) &&| ($SIG{$|
|00002c00| 73 69 67 7d 20 3d 20 24 | 6e 65 77 29 3b 0a 09 58 |sig} = $|new);..X|
|00002c10| 20 20 20 20 7d 0a 09 58 | 7d 0a 09 58 0a 09 58 31 | }..X|}..X..X1|
|00002c20| 3b 0a 53 48 41 52 5f 45 | 4f 46 0a 69 66 20 74 65 |;.SHAR_E|OF.if te|
|00002c30| 73 74 20 38 33 34 33 20 | 2d 6e 65 20 22 60 77 63 |st 8343 |-ne "`wc|
|00002c40| 20 2d 63 20 3c 20 27 66 | 74 70 6c 69 62 2e 70 6c | -c < 'f|tplib.pl|
|00002c50| 27 60 22 0a 74 68 65 6e | 0a 09 65 63 68 6f 20 73 |'`".then|..echo s|
|00002c60| 68 61 72 3a 20 22 65 72 | 72 6f 72 20 74 72 61 6e |har: "er|ror tran|
|00002c70| 73 6d 69 74 74 69 6e 67 | 20 27 66 74 70 6c 69 62 |smitting| 'ftplib|
|00002c80| 2e 70 6c 27 22 20 27 28 | 73 68 6f 75 6c 64 20 68 |.pl'" '(|should h|
|00002c90| 61 76 65 20 62 65 65 6e | 20 38 33 34 33 20 63 68 |ave been| 8343 ch|
|00002ca0| 61 72 61 63 74 65 72 73 | 29 27 0a 66 69 0a 63 68 |aracters|)'.fi.ch|
|00002cb0| 6d 6f 64 20 36 36 34 20 | 27 66 74 70 6c 69 62 2e |mod 664 |'ftplib.|
|00002cc0| 70 6c 27 0a 66 69 0a 65 | 63 68 6f 20 73 68 61 72 |pl'.fi.e|cho shar|
|00002cd0| 3a 20 22 65 78 74 72 61 | 63 74 69 6e 67 20 27 66 |: "extra|cting 'f|
|00002ce0| 74 70 6c 73 27 22 20 27 | 28 39 32 39 20 63 68 61 |tpls'" '|(929 cha|
|00002cf0| 72 61 63 74 65 72 73 29 | 27 0a 69 66 20 74 65 73 |racters)|'.if tes|
|00002d00| 74 20 2d 66 20 27 66 74 | 70 6c 73 27 0a 74 68 65 |t -f 'ft|pls'.the|
|00002d10| 6e 0a 09 65 63 68 6f 20 | 73 68 61 72 3a 20 22 77 |n..echo |shar: "w|
|00002d20| 69 6c 6c 20 6e 6f 74 20 | 6f 76 65 72 2d 77 72 69 |ill not |over-wri|
|00002d30| 74 65 20 65 78 69 73 74 | 69 6e 67 20 66 69 6c 65 |te exist|ing file|
|00002d40| 20 27 66 74 70 6c 73 27 | 22 0a 65 6c 73 65 0a 73 | 'ftpls'|".else.s|
|00002d50| 65 64 20 27 73 2f 5e 09 | 58 2f 2f 27 20 3c 3c 20 |ed 's/^.|X//' << |
|00002d60| 5c 53 48 41 52 5f 45 4f | 46 20 3e 20 27 66 74 70 |\SHAR_EO|F > 'ftp|
|00002d70| 6c 73 27 0a 09 58 23 21 | 2f 75 73 72 2f 6c 6f 63 |ls'..X#!|/usr/loc|
|00002d80| 61 6c 2f 70 65 72 6c 2f | 70 65 72 6c 20 2d 73 0a |al/perl/|perl -s.|
|00002d90| 09 58 0a 09 58 23 0a 09 | 58 23 20 20 4c 69 73 74 |.X..X#..|X# List|
|00002da0| 20 61 20 72 65 6d 6f 74 | 65 20 64 69 72 65 63 74 | a remot|e direct|
|00002db0| 6f 72 79 0a 09 58 23 0a | 09 58 23 20 20 20 66 74 |ory..X#.|.X# ft|
|00002dc0| 70 6c 73 20 5b 2d 6c 5d | 20 68 6f 73 74 20 73 6f |pls [-l]| host so|
|00002dd0| 75 72 63 65 0a 09 58 23 | 20 20 20 66 74 70 6c 73 |urce..X#| ftpls|
|00002de0| 20 5b 2d 6c 5d 20 75 73 | 65 72 40 68 6f 73 74 20 | [-l] us|er@host |
|00002df0| 73 6f 75 72 63 65 20 0a | 09 58 23 0a 09 58 23 20 |source .|.X#..X# |
|00002e00| 20 57 72 69 74 74 65 6e | 20 62 79 20 47 65 6e 65 | Written| by Gene|
|00002e10| 20 53 70 61 66 66 6f 72 | 64 20 20 3c 73 70 61 66 | Spaffor|d <spaf|
|00002e20| 40 63 73 2e 70 75 72 64 | 75 65 2e 65 64 75 3e 0a |@cs.purd|ue.edu>.|
|00002e30| 09 58 23 20 20 20 4c 61 | 73 74 20 75 70 64 61 74 |.X# La|st updat|
|00002e40| 65 2c 20 32 34 20 41 70 | 72 69 6c 20 31 39 39 32 |e, 24 Ap|ril 1992|
|00002e50| 0a 09 58 23 0a 09 58 0a | 09 58 75 6e 73 68 69 66 |..X#..X.|.Xunshif|
|00002e60| 74 28 40 49 4e 43 2c 20 | 22 2f 68 6f 6d 65 73 2f |t(@INC, |"/homes/|
|00002e70| 73 70 61 66 2f 6c 69 62 | 2f 70 65 72 6c 22 29 3b |spaf/lib|/perl");|
|00002e80| 0a 09 58 72 65 71 75 69 | 72 65 20 22 66 74 70 6c |..Xrequi|re "ftpl|
|00002e90| 69 62 2e 70 6c 22 3b 0a | 09 58 0a 09 58 0a 09 58 |ib.pl";.|.X..X..X|
|00002ea0| 64 69 65 20 22 75 73 61 | 67 65 3a 20 66 74 70 6c |die "usa|ge: ftpl|
|00002eb0| 73 20 5b 2d 6c 5d 20 3c | 68 6f 73 74 3e 20 3c 64 |s [-l] <|host> <d|
|00002ec0| 69 72 3e 0a 09 58 20 20 | 20 20 77 68 65 72 65 20 |ir>..X | where |
|00002ed0| 3c 68 6f 73 74 3e 20 6d | 61 79 20 62 65 20 6f 66 |<host> m|ay be of|
|00002ee0| 20 74 68 65 20 66 6f 72 | 6d 20 75 73 65 72 40 68 | the for|m user@h|
|00002ef0| 6f 73 74 0a 09 58 20 20 | 20 20 75 73 65 72 20 64 |ost..X | user d|
|00002f00| 65 66 61 75 6c 74 73 20 | 74 6f 20 27 61 6e 6f 6e |efaults |to 'anon|
|00002f10| 79 6d 6f 75 73 27 20 69 | 66 20 6e 6f 74 20 73 70 |ymous' i|f not sp|
|00002f20| 65 63 69 66 69 65 64 0a | 09 58 22 20 75 6e 6c 65 |ecified.|.X" unle|
|00002f30| 73 73 20 28 40 41 52 47 | 56 20 3d 3d 20 32 29 3b |ss (@ARG|V == 2);|
|00002f40| 0a 09 58 0a 09 58 28 24 | 48 6f 73 74 2c 20 24 44 |..X..X($|Host, $D|
|00002f50| 69 72 29 20 3d 20 40 41 | 52 47 56 3b 0a 09 58 0a |ir) = @A|RGV;..X.|
|00002f60| 09 58 69 66 20 28 24 48 | 6f 73 74 20 3d 7e 20 2f |.Xif ($H|ost =~ /|
|00002f70| 28 5c 53 2b 29 40 28 5c | 53 2b 29 2f 29 20 7b 20 |(\S+)@(\|S+)/) { |
|00002f80| 20 20 23 20 75 73 65 72 | 40 68 6f 73 74 20 66 6f | # user|@host fo|
|00002f90| 72 6d 61 74 3f 0a 09 58 | 20 20 20 20 28 24 55 73 |rmat?..X| ($Us|
|00002fa0| 65 72 2c 20 24 48 6f 73 | 74 29 20 3d 20 28 24 31 |er, $Hos|t) = ($1|
|00002fb0| 2c 20 24 32 29 3b 0a 09 | 58 20 20 20 20 70 72 69 |, $2);..|X pri|
|00002fc0| 6e 74 20 53 54 44 45 52 | 52 20 22 50 61 73 73 77 |nt STDER|R "Passw|
|00002fd0| 6f 72 64 20 74 6f 20 75 | 73 65 3a 20 22 3b 0a 09 |ord to u|se: ";..|
|00002fe0| 58 20 20 20 20 73 79 73 | 74 65 6d 20 27 73 74 74 |X sys|tem 'stt|
|00002ff0| 79 20 2d 65 63 68 6f 27 | 3b 0a 09 58 20 20 20 20 |y -echo'|;..X |
|00003000| 63 68 6f 70 28 24 50 61 | 73 73 20 3d 20 3c 53 54 |chop($Pa|ss = <ST|
|00003010| 44 49 4e 3e 29 3b 0a 09 | 58 20 20 20 20 73 79 73 |DIN>);..|X sys|
|00003020| 74 65 6d 20 27 73 74 74 | 79 20 65 63 68 6f 27 3b |tem 'stt|y echo';|
|00003030| 0a 09 58 20 20 20 20 70 | 72 69 6e 74 20 53 54 44 |..X p|rint STD|
|00003040| 45 52 52 20 22 5c 6e 22 | 3b 0a 09 58 7d 20 0a 09 |ERR "\n"|;..X} ..|
|00003050| 58 0a 09 58 0a 09 58 26 | 66 74 70 27 6f 70 65 6e |X..X..X&|ftp'open|
|00003060| 28 24 48 6f 73 74 2c 20 | 24 55 73 65 72 2c 20 24 |($Host, |$User, $|
|00003070| 50 61 73 73 29 20 7c 7c | 20 26 66 61 69 6c 3b 0a |Pass) ||| &fail;.|
|00003080| 09 58 69 66 20 28 24 6c | 29 20 7b 0a 09 58 20 20 |.Xif ($l|) {..X |
|00003090| 20 20 28 40 66 69 6c 65 | 73 20 3d 20 26 66 74 70 | (@file|s = &ftp|
|000030a0| 27 64 69 72 28 24 44 69 | 72 29 29 20 7c 7c 20 26 |'dir($Di|r)) || &|
|000030b0| 66 61 69 6c 3b 0a 09 58 | 7d 20 65 6c 73 65 20 7b |fail;..X|} else {|
|000030c0| 0a 09 58 20 20 20 20 28 | 40 66 69 6c 65 73 20 3d |..X (|@files =|
|000030d0| 20 26 66 74 70 27 6c 69 | 73 74 28 24 44 69 72 29 | &ftp'li|st($Dir)|
|000030e0| 29 20 7c 7c 20 26 66 61 | 69 6c 3b 0a 09 58 7d 0a |) || &fa|il;..X}.|
|000030f0| 09 58 26 66 74 70 27 63 | 6c 6f 73 65 3b 0a 09 58 |.X&ftp'c|lose;..X|
|00003100| 0a 09 58 24 5c 20 3d 20 | 22 5c 6e 22 3b 0a 09 58 |..X$\ = |"\n";..X|
|00003110| 67 72 65 70 20 28 70 72 | 69 6e 74 2c 20 40 66 69 |grep (pr|int, @fi|
|00003120| 6c 65 73 29 3b 0a 09 58 | 0a 09 58 73 75 62 20 66 |les);..X|..Xsub f|
|00003130| 61 69 6c 20 7b 0a 09 58 | 20 20 20 20 24 73 61 76 |ail {..X| $sav|
|00003140| 65 20 3d 20 26 66 74 70 | 27 65 72 72 6f 72 3b 0a |e = &ftp|'error;.|
|00003150| 09 58 20 20 20 20 26 66 | 74 70 27 63 6c 6f 73 65 |.X &f|tp'close|
|00003160| 3b 0a 09 58 20 20 20 20 | 64 69 65 20 24 73 61 76 |;..X |die $sav|
|00003170| 65 3b 0a 09 58 7d 0a 53 | 48 41 52 5f 45 4f 46 0a |e;..X}.S|HAR_EOF.|
|00003180| 69 66 20 74 65 73 74 20 | 39 32 39 20 2d 6e 65 20 |if test |929 -ne |
|00003190| 22 60 77 63 20 2d 63 20 | 3c 20 27 66 74 70 6c 73 |"`wc -c |< 'ftpls|
|000031a0| 27 60 22 0a 74 68 65 6e | 0a 09 65 63 68 6f 20 73 |'`".then|..echo s|
|000031b0| 68 61 72 3a 20 22 65 72 | 72 6f 72 20 74 72 61 6e |har: "er|ror tran|
|000031c0| 73 6d 69 74 74 69 6e 67 | 20 27 66 74 70 6c 73 27 |smitting| 'ftpls'|
|000031d0| 22 20 27 28 73 68 6f 75 | 6c 64 20 68 61 76 65 20 |" '(shou|ld have |
|000031e0| 62 65 65 6e 20 39 32 39 | 20 63 68 61 72 61 63 74 |been 929| charact|
|000031f0| 65 72 73 29 27 0a 66 69 | 0a 63 68 6d 6f 64 20 37 |ers)'.fi|.chmod 7|
|00003200| 37 35 20 27 66 74 70 6c | 73 27 0a 66 69 0a 63 68 |75 'ftpl|s'.fi.ch|
|00003210| 6d 6f 64 20 37 37 35 20 | 2e 0a 65 63 68 6f 20 73 |mod 775 |..echo s|
|00003220| 68 61 72 3a 20 22 64 6f | 6e 65 20 77 69 74 68 20 |har: "do|ne with |
|00003230| 64 69 72 65 63 74 6f 72 | 79 20 27 66 74 70 27 22 |director|y 'ftp'"|
|00003240| 0a 63 64 20 2e 2e 0a 65 | 78 69 74 20 30 0a 23 09 |.cd ...e|xit 0.#.|
|00003250| 45 6e 64 20 6f 66 20 73 | 68 65 6c 6c 20 61 72 63 |End of s|hell arc|
|00003260| 68 69 76 65 0a | |hive. | |
+--------+-------------------------+-------------------------+--------+--------+