Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-4398880

FTP URL processing modified to conform to RFC 1738 (4269403 follow-up)

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P3 P3
    • 1.4.0
    • 1.2.1, 1.3.0
    • core-libs
    • beta
    • generic, sparc
    • generic, solaris_8

      [0Q].KGK@S,)!'0>[C]45GNHBY+3TTV%OLM66G8MFJ-?GQJ^^&04ZT
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
      M+PNLSD47"E"$E^/SE'%G9X!9I@V\AG,'!K&#J#'-NT$M`NMLHH^NZ[`]'CLM+[/Z@8E''#Y(N``PSH):Q!6"NQ4]U<1^"A"#EA[/E1FF<XV`J(M>S8"9^Y)P
      MULK85BVU1XA,KD%'S.("(7RJR:(L5B`(PD3^NRI!++IM;@KN6^2?*ZC)HA:!
      MDE.9*@`8V@\AWJVF5!H";(1*^\K/N7(;*KLG2.<,%A6>]KK0Q>H$SJL7LR_J
      MJ5F%F+1\]E0K,_@\U]7O1=5HZX3^\+(L&P"O58"6HXU72+53:P^VZB0F/*F'
      MUK&L!%2H7Q?E#)!V+[`CB.<.1G,X_N-E5OHM8F<06`<$U^T+OUG<$JT6;36#
      M/)+J6Z5BQ)PPIDI/N#4:*22*:5:(M'W74G2`$%;21(TWPBVQ!SA'-*K:IIP]
      M:L8BW;67U5*-+.:XGG/D<2&B,362S`B`-\(&E\'9.\(0+`#ZBB6$((RA.2[7
      M<6,=+B;BUW,?ZP#ZA8PT?-QR$+EP':>#R9J&4HG:-\Y9"'"5=ETV34J@45LG
      MNH)5]/)6O"E`U\O[9[J4XEN8VD_P$)H[91D,,<:4^##RQU)-#/!T7:GC!SB6
      M!'H?W(#N#!=R-4(F0V-?X3Q:H,@=#H>(!D<^#D0W`[W_4!;J4Y$;I%<3<51"
      MP).70QCB'3HS+Z2WW7"BE70=PV,DSGH"O@-"_[9.5U8+1KBJ!Y+C_DX]`G_(
      MK%<:1GE#M$+K!WM/UGK4O=YVZD9,C?^[6M2V\A',YH]3"NR(KQ*]7=I/)007
      M=MWT+PA[,4Z?,#FH[$KX6*RP%"V\Q9<"Q`%=TNIN[R7_CUY[O:;ZU7D[E1.F
      M&8RGCX86OS:+<N"Y(1V:)R[2P7GB@CE8K:\)3?":N)?9X>Z4KSH>^,E6^-Y,
      M:/54'$,)!$*:"PA6+$"/@0/P"*BJ'%@+IQ+D1OI?()\-M^8;2$*S()Y+TK=E
      M-Y'48(^*POWP&W_5TT\$788NG=1?X//,RP"G5-"D2Z4%LK]]*IAU2:\M7.[R
      M@%WL4;@LF_6;'/\R>=-?K_QFDEZ92ER<RVJU?DM;2CJ*0A#9.45+D7<8/2.)
      MMX'@`FA2=1B7JA!D\=A#4,HSY/$QVRT!&'NO3,['&OEEG;,B/1RS07'&G8-V
      M0-(D!@[6#B^&&UA/\=!R"\29WD4?/GZ:?GC_[L^C0XH)F&"A2Y)C%H%+/Y\!
      M`-C<!)]X"M5FWKT"^_T]Q!T&]E^DHY'=?E:F7*UD">9O8Z7@,:=Q(0!*L?4`
      7"[,^JM#_HVGI\!U</OL5_67NGJN$````
      `
      end
      (Review ID: 108487)
      ======================================================================


      Name: krC82822 Date: 12/17/2000


      java version "1.2.1"
      Classic VM (build JDK-1.2.1-A, native threads)

      NOTE: My build includes my original changes to the FTP URL (Bug ID 4269403).

      This is a continuation of a previous patch (Bug ID 4269403) by the same author.
      The previous patch introduced the sharing of FtpClient objects to improve
      performance when transferring multiple files. Some of the changes introduced by
      4269403 violated RFC1738 and, as to be expected, proved to be a problem when the
      ftp server ran on an MVS platform.

      Summary of changes:

      FtpClient.java
      --------------
      1) Removed home directory (See preceeding comments).
      2) Declared sendServer/readServerResponse to include them in the javadoc.
      3) Implemented URL-PATH interpretation per RFC1738 section 3.2. The
         protected method, performAction, has been written to provide a re-usable
         implementation.
         RFC1738 has resulted in the following changes:

         1) The path components, the text between the slashes (/), is now assumed to
      be URL encoded. Spaces are expected to have been replaced by plus signs (+) and
      restricted characters should be encoded as %oo where oo is an octal number. For
      partial backwards-compatibility, decoding failures leave the component
      unchanged.

         2) The suffix ';type=<typecode>' where <typecode> is one of a, i, or d may be
      appended to the path to specify the transfer mode. A typecode of 'a' indicates
      ASCII, or text, transfer. Binary, or image, transfers are indicated by the 'i'
      typecode and by omitting the entire typecode suffix. The directory typecode,
      'd', indicates that the URL input stream should return the results of performing
      the NLST command. This is effectively the same as using an FTP URL to get a
      directory listing except that the NLST output will consist of a plain text
      listing with one file per line.

         3) The text following a literal pound (#) character is no longer ignored.

         4) The issueCommandCheck method uses the new performAction to correctly
      interprete the URL-PATH contained within the command string.

         5) Added code to set the file transfer mode (binary/text). During text
      transfers, the ftp server transparently handles adding/removing the cntl-M when
      working with Windows platforms and my MVS server handles the conversion of ASCII
      to EBCDIC.

         6) The login procedure has been rewritten to only send the password when it
      is requested by the server. RFC1738 states that the URL's password component is
      OPTIONAL so FtpClient shouldn't send an invalid default if it wasn't requested.

         7) Bug fix. Throws FtpLoginException if the FTP server requests the user's
      account. FTP URL's do not support account infomation.

         8) Added getCommandSocket to share the socket creation code used in get and
      put methods. The getCommandSocket method uses the new performAction method so
      this change provides RFC1738 support to the get/put methods.

         9) Added nlst method to support the directory typecode specified by RFC1738.

        10) Bug fix. The openDataConnection method throws an IOException but NEVER a
      FileNotFoundException. Therefore, the catch clause must use IOException.

        11) Enhanced the exception handling in the situation whereby the
      FtpProtocolException is thrown after parsing the URL into individual directories
      and a file name. In the original code, an exception was thrown, FtpClient
      attempted to handle the exception but fails with a FtpProtocolException, then
      the ORIGINAL exception is thrown to the caller. What the caller never saw was
      the reason that FtpClient failed to recover from this exception. In the new
      code, the second FtpProtocolException is thrown to the caller with a reference
      to the ORIGINAL exception. As a result, the caller will see both why
      FtpClient's exception handler failed and why the handler was originally called.

        12) Added delete and pasv methods for future use.

        13) Added binary(boolean) method to toggle between calls to existing binary()
      and ascii() methods.

      FtpLoginException.java
      ----------------------
      Added constructor for building a FtpLoginException that references a root, or
      original, exception. This change makes use of the modified
      FtpProtocolException.

      FtpProtocolException.java
      -------------------------
      Major rewrite to support exception chains. These chains permit reporting both
      the original exception and any exception(s) thrown by the exception handlers.
      The new printStackTrace methods automatically display the exception chains so
      that the typical exception handler need not be changed.

      FtpURLConnection.java
      ---------------------
      1) Added support for RFC1738's type component.
      2) Added code to correct the parse errors performed by java.net.URL and the
      sun.net.www.protocol.ftp.Handler classes.
         Note: Someone should be tasked with generalizing java.net.URL to handle
      schema-specific parsers.
         * The leading slash (/) separating the URL-PATH from the URL-HOST is NOT part
      of the file name.
         * The pound (#) character and the text following are no longer ignored.
         * The optional transfer mode suffix ';type=<typecode>' is no longer
      considered to be part of the file name.

      2) Since bug id 4269403, all ftp connection objects share a set of ftp client
      objects so that multiple files can be transferred using a single command
      connection. This model proved to be faulty when connecting to a ftp server on a
      MVS platform as it was not possible to restore a FtpClient to its original state
      (i.e. the original working directory). The solution introduced here was to
      create a FtpSharedClient class which detects when the cd method is called. When
      the cd method is called, FtpSharedClient arranges for the connection to have its
      own unique FtpClient object. This solution is fully compliant with RFC1630 and
      the control optimization discussed in RFC1738 paragraph 3.2.5.

      3) The getInputStream() now performs the same protocol consistency check (i.e.
      doInput must be true) as getOutputStream.

      4) The FtpURLConnection constructor now throws a java.io.IOException since it
      has to do some of the parsing that should have been performed by java.net.URL.

      5) It is no longer a syntax error to specify a user but not a password (See
      RFC1738 section 3.1).

      6) The FtpClient is set to binary/text mode per the connection's flag.

      7) Added code to interprete the typecode 'd' (;type=d) as request to perform
      the NLST command.

      Handler.java
      ------------
      It is legal, per RFC1738, for the FTP URL to not specify a password when the
      user name is specified.

      TelnetOutputStream.java
      -----------------------
        Fixed code to implement CR/LF processing per RFC 824 description.

      begin 644 patch.txt.gz
      M'XL("&D,FCD"`W!A=&-H+G1X=`#</&MSXS:2GY5?`2MUL631DF7+[_'4.AY/
      MQBG/HVS/IK9JJZYH$;*YID@=05JC9/W?K[OQY$M^S$PV=ZI)9)%`H]%H]!M8
      M6UMC_8&X]5,^&$>^$%P,1!X/8IX-KG@$7Q_S;)9GEUG*_6G_7_Z]WT^BH'69
      MQ^Q7^&]SFPTW#S9VX1_;W-C8^&%]??VY`%N_\0"`18P!L-'!UL[!QI8$ME;MX&^VL^'M[#'ZR1A;&\#_X=\LOX[",:,1674<QK]D/`X$^SF?3'C*@\++/WY8
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
      M5@CV+#(FVGN*PR;DLQCGA)"3B(&).,[3E-?.!)#N+9<E<22RIA!K[U&M^>'M\LK&#+^.%CU%BUZ!%D_99(],,0)Z%OGXDD=$H.9Y/U=J(IX@4DK@7S;EPO*K
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
      MLOTWGKV#1./LE8+-$A,TM=/3RM>1-7VGX>.3DPO+>A@8T&ACQMF@W`!-\:XX
      M+!BMAS;7]11;@>B'9IF*FE4B?,N`%#^"#N:`,V$WN_,QTRD8*1B\,C8Z8&%;
      MR3`D27-+LB.S2_M2KMCVM2>MI#Y14DHA[0Q9:[&6$:7CRG:Q5LK$7W'*D&L6
      MM]C>+FK!.2D7AJG:QVJP52=UUMCE#!@3[0:479BXU9!)=2B?'R.SVA2IE<YD
      M,/0-U%)$NM[\*CAPS72K[3R945P?\-%35G$">-%OII[LUB#0"UTUV"*\1_BF
      MY=!>XU9_>+!>#+H'[,KO+NE8=Y^G:?>Y8)?K%G/PL5F>VW!_K4C51<TOTBF:
      MKY^@5M09@1=/O:)8FJ=NA/G3IOXRA?+XU!TTEDR]5JNLF!,!PIPV+2B`93.S
      M=>I/U"8%L2,J#N,RQWP^GP]F:C=J=_KSQ;FMY?E*#_UI\)]WN'X+7/5]]RRG
      M-S('K="E2C-&2,/X?1CKL/ZQW(KOI!]8UT86K7S"3!,X:3*27&Y3$62U@\5W
      M<3*/WR4B6]KNO1]AT(X'@%UC0\&!E?%PO8M8_9D3;WM3!S04!%@5&@E6I?\>
      MDV@\D&0XK&]36*F:-K"@?9.1JGD/Y+D!1UQ@>=B2UZ=QEB[4_2I.$S-5%=3M!58CQ?QDMC@V&.%Y$)@M%J&A>X6A^1!+B91`9#?A/;[!N'-]**0P1^/Y%I_^
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
      MPQG('B

            jccollet Jean-Christophe Collet (Inactive)
            kryansunw Kevin Ryan (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved:
              Imported:
              Indexed: