net-sftp 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/doc/faq/faq.html +33 -33
 - data/doc/faq/faq.yml +1 -1
 - data/lib/net/sftp/operations/write.rb +1 -1
 - data/lib/net/sftp/protocol/04/impl.rb +16 -64
 - data/lib/net/sftp/protocol/04/packet-assistant.rb +0 -6
 - data/lib/net/sftp/protocol/05/impl.rb +90 -0
 - data/lib/net/sftp/protocol/05/packet-assistant.rb +34 -0
 - data/lib/net/sftp/protocol/05/services.rb +4 -4
 - data/lib/net/sftp/version.rb +1 -1
 - data/test/protocol/04/tc_impl.rb +21 -32
 - data/test/protocol/04/tc_packet_assistant.rb +0 -3
 - data/test/protocol/05/tc_impl.rb +61 -0
 - data/test/protocol/05/tc_packet_assistant.rb +32 -0
 - metadata +11 -4
 
    
        data/doc/faq/faq.html
    CHANGED
    
    | 
         @@ -60,56 +60,56 @@ 
     | 
|
| 
       60 
60 
     | 
    
         
             
              <h1>Net::SFTP FAQ</h1>
         
     | 
| 
       61 
61 
     | 
    
         
             
              <div class="faq-list">
         
     | 
| 
       62 
62 
     | 
    
         
             
            <ul>
         
     | 
| 
       63 
     | 
    
         
            -
            <li><a href='# 
     | 
| 
      
 63 
     | 
    
         
            +
            <li><a href='#2224878'>What is Net::SFTP?</a></li>
         
     | 
| 
       64 
64 
     | 
    
         
             
            <li>How do I…
         
     | 
| 
       65 
65 
     | 
    
         
             
            <ul>
         
     | 
| 
       66 
66 
     | 
    
         
             
            <li>...connect to an <span class="caps">SFTP</span> server?
         
     | 
| 
       67 
67 
     | 
    
         
             
            <ul>
         
     | 
| 
       68 
     | 
    
         
            -
            <li><a href='# 
     | 
| 
       69 
     | 
    
         
            -
            <li><a href='# 
     | 
| 
      
 68 
     | 
    
         
            +
            <li><a href='#2224778'>I’d like to connect without first getting a Net::SSH connection…</a></li>
         
     | 
| 
      
 69 
     | 
    
         
            +
            <li><a href='#2224728'>I already have an open Net::SSH connection…</a></li>
         
     | 
| 
       70 
70 
     | 
    
         
             
            </ul>
         
     | 
| 
       71 
71 
     | 
    
         
             
            </li>
         
     | 
| 
       72 
72 
     | 
    
         
             
            <li>...upload data?
         
     | 
| 
       73 
73 
     | 
    
         
             
            <ul>
         
     | 
| 
       74 
     | 
    
         
            -
            <li><a href='# 
     | 
| 
       75 
     | 
    
         
            -
            <li><a href='# 
     | 
| 
      
 74 
     | 
    
         
            +
            <li><a href='#2224628'>I want to upload an entire file on disk…</a></li>
         
     | 
| 
      
 75 
     | 
    
         
            +
            <li><a href='#2224588'>I want to upload bytes from a string or other object…</a></li>
         
     | 
| 
       76 
76 
     | 
    
         
             
            </ul>
         
     | 
| 
       77 
77 
     | 
    
         
             
            </li>
         
     | 
| 
       78 
78 
     | 
    
         
             
            <li>...download data?
         
     | 
| 
       79 
79 
     | 
    
         
             
            <ul>
         
     | 
| 
       80 
     | 
    
         
            -
            <li><a href='# 
     | 
| 
       81 
     | 
    
         
            -
            <li><a href='# 
     | 
| 
       82 
     | 
    
         
            -
            <li><a href='# 
     | 
| 
      
 80 
     | 
    
         
            +
            <li><a href='#2224508'>I want to download directly to a local file…</a></li>
         
     | 
| 
      
 81 
     | 
    
         
            +
            <li><a href='#2224458'>I want to download to a string in memory…</a></li>
         
     | 
| 
      
 82 
     | 
    
         
            +
            <li><a href='#292410'>I want to be notified of the progress of the download…</a></li>
         
     | 
| 
       83 
83 
     | 
    
         
             
            </ul>
         
     | 
| 
       84 
84 
     | 
    
         
             
            </li>
         
     | 
| 
       85 
85 
     | 
    
         
             
            <li>...manage file permissions?
         
     | 
| 
       86 
86 
     | 
    
         
             
            <ul>
         
     | 
| 
       87 
     | 
    
         
            -
            <li><a href='# 
     | 
| 
       88 
     | 
    
         
            -
            <li><a href='# 
     | 
| 
       89 
     | 
    
         
            -
            <li><a href='# 
     | 
| 
      
 87 
     | 
    
         
            +
            <li><a href='#292290'>I want to query a file’s permissions…</a></li>
         
     | 
| 
      
 88 
     | 
    
         
            +
            <li><a href='#292210'>I want to change a file’s permissions…</a></li>
         
     | 
| 
      
 89 
     | 
    
         
            +
            <li><a href='#292130'>I already have an open handle for the remote file…</a></li>
         
     | 
| 
       90 
90 
     | 
    
         
             
            </ul>
         
     | 
| 
       91 
91 
     | 
    
         
             
            </li>
         
     | 
| 
       92 
92 
     | 
    
         
             
            <li>...manage directories?
         
     | 
| 
       93 
93 
     | 
    
         
             
            <ul>
         
     | 
| 
       94 
     | 
    
         
            -
            <li><a href='# 
     | 
| 
       95 
     | 
    
         
            -
            <li><a href='# 
     | 
| 
       96 
     | 
    
         
            -
            <li><a href='# 
     | 
| 
      
 94 
     | 
    
         
            +
            <li><a href='#291970'>I want to query the contents of a directory…</a></li>
         
     | 
| 
      
 95 
     | 
    
         
            +
            <li><a href='#291870'>I want to create a directory…</a></li>
         
     | 
| 
      
 96 
     | 
    
         
            +
            <li><a href='#291750'>I want to remove a directory…</a></li>
         
     | 
| 
       97 
97 
     | 
    
         
             
            </ul>
         
     | 
| 
       98 
98 
     | 
    
         
             
            </li>
         
     | 
| 
       99 
     | 
    
         
            -
            <li><a href='# 
     | 
| 
       100 
     | 
    
         
            -
            <li><a href='# 
     | 
| 
      
 99 
     | 
    
         
            +
            <li><a href='#291670'>...delete a file?</a></li>
         
     | 
| 
      
 100 
     | 
    
         
            +
            <li><a href='#291630'>...rename a file?</a></li>
         
     | 
| 
       101 
101 
     | 
    
         
             
            </ul>
         
     | 
| 
       102 
102 
     | 
    
         
             
            </li>
         
     | 
| 
       103 
103 
     | 
    
         
             
            </ul>
         
     | 
| 
       104 
104 
     | 
    
         
             
            </div>
         
     | 
| 
       105 
     | 
    
         
            -
            <a name=' 
     | 
| 
      
 105 
     | 
    
         
            +
            <a name='2224878'></a>
         
     | 
| 
       106 
106 
     | 
    
         
             
            <div class='faq-title'>What is Net::SFTP?</div>
         
     | 
| 
       107 
107 
     | 
    
         
             
            <div class='faq-answer'><p>Net::SFTP is a pure-Ruby implementation of the <span class="caps">SFTP</span> protocol. That’s
         
     | 
| 
       108 
108 
     | 
    
         
             
            “SFTP” as in “Secure File Transfer Protocol”, as defined as an adjuct to the
         
     | 
| 
       109 
109 
     | 
    
         
             
            <span class="caps">SSH</span> specification. <em>Not</em> “SFTP” as in “Secure <span class="caps">FTP</span>” (a <em>completely</em> different
         
     | 
| 
       110 
110 
     | 
    
         
             
            beast). Nor is it an implementation of the “Simple File Transfer Protocol” 
         
     | 
| 
       111 
111 
     | 
    
         
             
            (which is in no way secure).</p></div>
         
     | 
| 
       112 
     | 
    
         
            -
            <a name=' 
     | 
| 
      
 112 
     | 
    
         
            +
            <a name='2224778'></a>
         
     | 
| 
       113 
113 
     | 
    
         
             
            <div class='faq-title'>How do I… ...connect to an <span class="caps">SFTP</span> server? I’d like to connect without first getting a Net::SSH connection…</div>
         
     | 
| 
       114 
114 
     | 
    
         
             
            <div class='faq-answer'><p>Something like this:</p>
         
     | 
| 
       115 
115 
     | 
    
         | 
| 
         @@ -124,7 +124,7 @@ beast). Nor is it an implementation of the “Simple File Transfer Protocol& 
     | 
|
| 
       124 
124 
     | 
    
         | 
| 
       125 
125 
     | 
    
         
             
            	<p><code>Net::SFTP.start</code> accepts the same parameters as <code>Net::SSH.start</code>,
         
     | 
| 
       126 
126 
     | 
    
         
             
            so I’ll direct you to that documentation for all the particulars.</p></div>
         
     | 
| 
       127 
     | 
    
         
            -
            <a name=' 
     | 
| 
      
 127 
     | 
    
         
            +
            <a name='2224728'></a>
         
     | 
| 
       128 
128 
     | 
    
         
             
            <div class='faq-title'>How do I… ...connect to an <span class="caps">SFTP</span> server? I already have an open Net::SSH connection…</div>
         
     | 
| 
       129 
129 
     | 
    
         
             
            <div class='faq-answer'><p>You can piggy-back an <span class="caps">SFTP</span> connection on an existing Net::SSH
         
     | 
| 
       130 
130 
     | 
    
         
             
            connection, which can be useful if you’ve already got an <span class="caps">SSH</span>
         
     | 
| 
         @@ -143,7 +143,7 @@ connection that you’re using for port forwarding or whatever.</p> 
     | 
|
| 
       143 
143 
     | 
    
         
             
                ...
         
     | 
| 
       144 
144 
     | 
    
         
             
              end
         
     | 
| 
       145 
145 
     | 
    
         
             
            </pre></code></div>
         
     | 
| 
       146 
     | 
    
         
            -
            <a name=' 
     | 
| 
      
 146 
     | 
    
         
            +
            <a name='2224628'></a>
         
     | 
| 
       147 
147 
     | 
    
         
             
            <div class='faq-title'>How do I… ...upload data? I want to upload an entire file on disk…</div>
         
     | 
| 
       148 
148 
     | 
    
         
             
            <div class='faq-answer'><p>Assuming you already have an <span class="caps">SFTP</span> connection:</p>
         
     | 
| 
       149 
149 
     | 
    
         | 
| 
         @@ -151,7 +151,7 @@ connection that you’re using for port forwarding or whatever.</p> 
     | 
|
| 
       151 
151 
     | 
    
         
             
            <code><pre>
         
     | 
| 
       152 
152 
     | 
    
         
             
              sftp.put_file "/path/to/local.file", "/path/to/remote.file" 
         
     | 
| 
       153 
153 
     | 
    
         
             
            </pre></code></div>
         
     | 
| 
       154 
     | 
    
         
            -
            <a name=' 
     | 
| 
      
 154 
     | 
    
         
            +
            <a name='2224588'></a>
         
     | 
| 
       155 
155 
     | 
    
         
             
            <div class='faq-title'>How do I… ...upload data? I want to upload bytes from a string or other object…</div>
         
     | 
| 
       156 
156 
     | 
    
         
             
            <div class='faq-answer'><p>Assuming you already have an <span class="caps">SFTP</span> connection, and your data is stored
         
     | 
| 
       157 
157 
     | 
    
         
             
            in a string named <code>data</code>:</p>
         
     | 
| 
         @@ -174,7 +174,7 @@ without, but be sure to call <code>close_handle</code> when you’re done:</ 
     | 
|
| 
       174 
174 
     | 
    
         
             
              puts result.code # the result of the operation
         
     | 
| 
       175 
175 
     | 
    
         
             
              sftp.close_handle(handle)
         
     | 
| 
       176 
176 
     | 
    
         
             
            </pre></code></div>
         
     | 
| 
       177 
     | 
    
         
            -
            <a name=' 
     | 
| 
      
 177 
     | 
    
         
            +
            <a name='2224508'></a>
         
     | 
| 
       178 
178 
     | 
    
         
             
            <div class='faq-title'>How do I… ...download data? I want to download directly to a local file…</div>
         
     | 
| 
       179 
179 
     | 
    
         
             
            <div class='faq-answer'><p>Assuming you already have an <span class="caps">SFTP</span> connection:</p>
         
     | 
| 
       180 
180 
     | 
    
         | 
| 
         @@ -182,7 +182,7 @@ without, but be sure to call <code>close_handle</code> when you’re done:</ 
     | 
|
| 
       182 
182 
     | 
    
         
             
            <code><pre>
         
     | 
| 
       183 
183 
     | 
    
         
             
              sftp.get_file "/path/to/remote.file", "/path/to/local.file" 
         
     | 
| 
       184 
184 
     | 
    
         
             
            </pre></code></div>
         
     | 
| 
       185 
     | 
    
         
            -
            <a name=' 
     | 
| 
      
 185 
     | 
    
         
            +
            <a name='2224458'></a>
         
     | 
| 
       186 
186 
     | 
    
         
             
            <div class='faq-title'>How do I… ...download data? I want to download to a string in memory…</div>
         
     | 
| 
       187 
187 
     | 
    
         
             
            <div class='faq-answer'><p>Assuming you already have an <span class="caps">SFTP</span> connection:</p>
         
     | 
| 
       188 
188 
     | 
    
         | 
| 
         @@ -193,7 +193,7 @@ without, but be sure to call <code>close_handle</code> when you’re done:</ 
     | 
|
| 
       193 
193 
     | 
    
         
             
                data = sftp.read(handle)
         
     | 
| 
       194 
194 
     | 
    
         
             
              end
         
     | 
| 
       195 
195 
     | 
    
         
             
            </pre></code></div>
         
     | 
| 
       196 
     | 
    
         
            -
            <a name=' 
     | 
| 
      
 196 
     | 
    
         
            +
            <a name='292410'></a>
         
     | 
| 
       197 
197 
     | 
    
         
             
            <div class='faq-title'>How do I… ...download data? I want to be notified of the progress of the download…</div>
         
     | 
| 
       198 
198 
     | 
    
         
             
            <div class='faq-answer'><p>You can specify both a “chunk size” and a “progress callback”. The
         
     | 
| 
       199 
199 
     | 
    
         
             
            callback will be invoked for every “chunk size” bytes that are
         
     | 
| 
         @@ -212,7 +212,7 @@ received:</p> 
     | 
|
| 
       212 
212 
     | 
    
         
             
                end
         
     | 
| 
       213 
213 
     | 
    
         
             
              end
         
     | 
| 
       214 
214 
     | 
    
         
             
            </pre></code></div>
         
     | 
| 
       215 
     | 
    
         
            -
            <a name=' 
     | 
| 
      
 215 
     | 
    
         
            +
            <a name='292290'></a>
         
     | 
| 
       216 
216 
     | 
    
         
             
            <div class='faq-title'>How do I… ...manage file permissions? I want to query a file’s permissions…</div>
         
     | 
| 
       217 
217 
     | 
    
         
             
            <div class='faq-answer'><p>File permissions are one of the <code>stat</code> attributes of files and
         
     | 
| 
       218 
218 
     | 
    
         
             
            directories:</p>
         
     | 
| 
         @@ -221,7 +221,7 @@ directories:</p> 
     | 
|
| 
       221 
221 
     | 
    
         
             
            <code><pre>
         
     | 
| 
       222 
222 
     | 
    
         
             
              p sftp.stat("/path/to/remote.file").permissions
         
     | 
| 
       223 
223 
     | 
    
         
             
            </pre></code></div>
         
     | 
| 
       224 
     | 
    
         
            -
            <a name=' 
     | 
| 
      
 224 
     | 
    
         
            +
            <a name='292210'></a>
         
     | 
| 
       225 
225 
     | 
    
         
             
            <div class='faq-title'>How do I… ...manage file permissions? I want to change a file’s permissions…</div>
         
     | 
| 
       226 
226 
     | 
    
         
             
            <div class='faq-answer'><p>Just use <code>setstat</code> to change the permissions of an existing file:</p>
         
     | 
| 
       227 
227 
     | 
    
         | 
| 
         @@ -229,8 +229,8 @@ directories:</p> 
     | 
|
| 
       229 
229 
     | 
    
         
             
            <code><pre>
         
     | 
| 
       230 
230 
     | 
    
         
             
              sftp.setstat("/path/to/remote.file", :permissions => 0644)
         
     | 
| 
       231 
231 
     | 
    
         
             
            </pre></code></div>
         
     | 
| 
       232 
     | 
    
         
            -
            <a name=' 
     | 
| 
       233 
     | 
    
         
            -
            <div class='faq-title'>How do I… ...manage file permissions? I already have an open handle for the  
     | 
| 
      
 232 
     | 
    
         
            +
            <a name='292130'></a>
         
     | 
| 
      
 233 
     | 
    
         
            +
            <div class='faq-title'>How do I… ...manage file permissions? I already have an open handle for the remote file…</div>
         
     | 
| 
       234 
234 
     | 
    
         
             
            <div class='faq-answer'><p>If you have a handle for the remote file, you can use <code>fstat</code> and
         
     | 
| 
       235 
235 
     | 
    
         
             
            <code>fsetstat</code> to query and set the permissions:</p>
         
     | 
| 
       236 
236 
     | 
    
         | 
| 
         @@ -241,7 +241,7 @@ directories:</p> 
     | 
|
| 
       241 
241 
     | 
    
         
             
                sftp.fsetstat(handle, :permissions => permissions | 0444)
         
     | 
| 
       242 
242 
     | 
    
         
             
              end
         
     | 
| 
       243 
243 
     | 
    
         
             
            </pre></code></div>
         
     | 
| 
       244 
     | 
    
         
            -
            <a name=' 
     | 
| 
      
 244 
     | 
    
         
            +
            <a name='291970'></a>
         
     | 
| 
       245 
245 
     | 
    
         
             
            <div class='faq-title'>How do I… ...manage directories? I want to query the contents of a directory…</div>
         
     | 
| 
       246 
246 
     | 
    
         
             
            <div class='faq-answer'><p>You query the contents of a directory by calling <code>opendir</code> to obtain
         
     | 
| 
       247 
247 
     | 
    
         
             
            a handle to the directory, and then using <code>readdir</code> on the handle to
         
     | 
| 
         @@ -259,7 +259,7 @@ you’re done:</p> 
     | 
|
| 
       259 
259 
     | 
    
         
             
              end
         
     | 
| 
       260 
260 
     | 
    
         
             
              sftp.close_handle(handle)
         
     | 
| 
       261 
261 
     | 
    
         
             
            </pre></code></div>
         
     | 
| 
       262 
     | 
    
         
            -
            <a name=' 
     | 
| 
      
 262 
     | 
    
         
            +
            <a name='291870'></a>
         
     | 
| 
       263 
263 
     | 
    
         
             
            <div class='faq-title'>How do I… ...manage directories? I want to create a directory…</div>
         
     | 
| 
       264 
264 
     | 
    
         
             
            <div class='faq-answer'><p>Use <code>mkdir</code>:</p>
         
     | 
| 
       265 
265 
     | 
    
         | 
| 
         @@ -267,7 +267,7 @@ you’re done:</p> 
     | 
|
| 
       267 
267 
     | 
    
         
             
            <code><pre>
         
     | 
| 
       268 
268 
     | 
    
         
             
              sftp.mkdir("/path/to/remote/dir", :permissions => 0500)
         
     | 
| 
       269 
269 
     | 
    
         
             
            </pre></code></div>
         
     | 
| 
       270 
     | 
    
         
            -
            <a name=' 
     | 
| 
      
 270 
     | 
    
         
            +
            <a name='291750'></a>
         
     | 
| 
       271 
271 
     | 
    
         
             
            <div class='faq-title'>How do I… ...manage directories? I want to remove a directory…</div>
         
     | 
| 
       272 
272 
     | 
    
         
             
            <div class='faq-answer'><p>Use <code>rmdir</code>:</p>
         
     | 
| 
       273 
273 
     | 
    
         | 
| 
         @@ -275,7 +275,7 @@ you’re done:</p> 
     | 
|
| 
       275 
275 
     | 
    
         
             
            <code><pre>
         
     | 
| 
       276 
276 
     | 
    
         
             
              sftp.rmdir("/path/to/remote/dir")
         
     | 
| 
       277 
277 
     | 
    
         
             
            </pre></code></div>
         
     | 
| 
       278 
     | 
    
         
            -
            <a name=' 
     | 
| 
      
 278 
     | 
    
         
            +
            <a name='291670'></a>
         
     | 
| 
       279 
279 
     | 
    
         
             
            <div class='faq-title'>How do I… ...delete a file?</div>
         
     | 
| 
       280 
280 
     | 
    
         
             
            <div class='faq-answer'><p>Use <code>remove</code>:</p>
         
     | 
| 
       281 
281 
     | 
    
         | 
| 
         @@ -283,7 +283,7 @@ you’re done:</p> 
     | 
|
| 
       283 
283 
     | 
    
         
             
            <code><pre>
         
     | 
| 
       284 
284 
     | 
    
         
             
              sftp.remove("/path/to/remote.file")
         
     | 
| 
       285 
285 
     | 
    
         
             
            </pre></code></div>
         
     | 
| 
       286 
     | 
    
         
            -
            <a name=' 
     | 
| 
      
 286 
     | 
    
         
            +
            <a name='291630'></a>
         
     | 
| 
       287 
287 
     | 
    
         
             
            <div class='faq-title'>How do I… ...rename a file?</div>
         
     | 
| 
       288 
288 
     | 
    
         
             
            <div class='faq-answer'><p>Use <code>rename</code>:</p>
         
     | 
| 
       289 
289 
     | 
    
         | 
    
        data/doc/faq/faq.yml
    CHANGED
    
    | 
         @@ -121,7 +121,7 @@ 
     | 
|
| 
       121 
121 
     | 
    
         
             
                        sftp.setstat("/path/to/remote.file", :permissions => 0644)
         
     | 
| 
       122 
122 
     | 
    
         
             
                      </pre></code>
         
     | 
| 
       123 
123 
     | 
    
         | 
| 
       124 
     | 
    
         
            -
                  - "I already have an open handle for the  
     | 
| 
      
 124 
     | 
    
         
            +
                  - "I already have an open handle for the remote file...": |
         
     | 
| 
       125 
125 
     | 
    
         
             
                      If you have a handle for the remote file, you can use @fstat@ and
         
     | 
| 
       126 
126 
     | 
    
         
             
                      @fsetstat@ to query and set the permissions:
         
     | 
| 
       127 
127 
     | 
    
         | 
| 
         @@ -23,7 +23,7 @@ module Net ; module SFTP ; module Operations 
     | 
|
| 
       23 
23 
     | 
    
         
             
              class Write < Abstract
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
25 
     | 
    
         
             
                # The maximum size of data that will be written at one time.
         
     | 
| 
       26 
     | 
    
         
            -
                CHUNK_SIZE =  
     | 
| 
      
 26 
     | 
    
         
            +
                CHUNK_SIZE = 32 * 1024
         
     | 
| 
       27 
27 
     | 
    
         | 
| 
       28 
28 
     | 
    
         
             
                # Perform the operation. Only CHUNK_SIZE portions of the +data+ parameter
         
     | 
| 
       29 
29 
     | 
    
         
             
                # will be written at a time, with subsequent chunks being writteni
         
     | 
| 
         @@ -21,70 +21,7 @@ module Net ; module SFTP ; module Protocol ; module V_04 
     | 
|
| 
       21 
21 
     | 
    
         
             
              # The implementation of the operations available to version 4 of the SFTP
         
     | 
| 
       22 
22 
     | 
    
         
             
              # protocol.
         
     | 
| 
       23 
23 
     | 
    
         
             
              class Impl < V_03::Impl
         
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
                F_CREATE_NEW         = 0x00000000
         
     | 
| 
       26 
     | 
    
         
            -
                F_CREATE_TRUNCATE    = 0x00000001
         
     | 
| 
       27 
     | 
    
         
            -
                F_OPEN_EXISTING      = 0x00000002
         
     | 
| 
       28 
     | 
    
         
            -
                F_OPEN_OR_CREATE     = 0x00000003
         
     | 
| 
       29 
     | 
    
         
            -
                F_TRUNCATE_EXISTING  = 0x00000004
         
     | 
| 
       30 
     | 
    
         
            -
             
     | 
| 
       31 
     | 
    
         
            -
                F_APPEND_DATA        = 0x00000008
         
     | 
| 
       32 
     | 
    
         
            -
                F_APPEND_DATA_ATOMIC = 0x00000010
         
     | 
| 
       33 
     | 
    
         
            -
                F_TEXT_MODE          = 0x00000020
         
     | 
| 
       34 
     | 
    
         
            -
                F_READ_LOCK          = 0x00000040
         
     | 
| 
       35 
     | 
    
         
            -
                F_WRITE_LOCK         = 0x00000080
         
     | 
| 
       36 
     | 
    
         
            -
                F_DELETE_LOCK        = 0x00000100
         
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                module ACE
         
     | 
| 
       39 
     | 
    
         
            -
                  F_READ_DATA         = 0x00000001
         
     | 
| 
       40 
     | 
    
         
            -
                  F_LIST_DIRECTORY    = 0x00000001
         
     | 
| 
       41 
     | 
    
         
            -
                  F_WRITE_DATA        = 0x00000002
         
     | 
| 
       42 
     | 
    
         
            -
                  F_ADD_FILE          = 0x00000002
         
     | 
| 
       43 
     | 
    
         
            -
                  F_APPEND_DATA       = 0x00000004
         
     | 
| 
       44 
     | 
    
         
            -
                  F_ADD_SUBDIRECTORY  = 0x00000004
         
     | 
| 
       45 
     | 
    
         
            -
                  F_READ_NAMED_ATTRS  = 0x00000008
         
     | 
| 
       46 
     | 
    
         
            -
                  F_WRITE_NAMED_ATTRS = 0x00000010
         
     | 
| 
       47 
     | 
    
         
            -
                  F_EXECUTE           = 0x00000020
         
     | 
| 
       48 
     | 
    
         
            -
                  F_DELETE_CHILD      = 0x00000040
         
     | 
| 
       49 
     | 
    
         
            -
                  F_READ_ATTRIBUTES   = 0x00000080
         
     | 
| 
       50 
     | 
    
         
            -
                  F_WRITE_ATTRIBUTES  = 0x00000100
         
     | 
| 
       51 
     | 
    
         
            -
                  F_DELETE            = 0x00010000
         
     | 
| 
       52 
     | 
    
         
            -
                  F_READ_ACL          = 0x00020000
         
     | 
| 
       53 
     | 
    
         
            -
                  F_WRITE_ACL         = 0x00040000
         
     | 
| 
       54 
     | 
    
         
            -
                  F_WRITE_OWNER       = 0x00080000
         
     | 
| 
       55 
     | 
    
         
            -
                  F_SYNCHRONIZE       = 0x00100000
         
     | 
| 
       56 
     | 
    
         
            -
                end
         
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
                # The open operation changed in version 4. This method keeps the same
         
     | 
| 
       59 
     | 
    
         
            -
                # interface as previous versions, but changes how the parameters are
         
     | 
| 
       60 
     | 
    
         
            -
                # interpreted and converted into a packet.
         
     | 
| 
       61 
     | 
    
         
            -
                def open( id, path, flags, mode=0660 )
         
     | 
| 
       62 
     | 
    
         
            -
                  sftp_flags, desired_access = case
         
     | 
| 
       63 
     | 
    
         
            -
                    when flags & IO::WRONLY != 0 then
         
     | 
| 
       64 
     | 
    
         
            -
                      [ F_CREATE_TRUNCATE,
         
     | 
| 
       65 
     | 
    
         
            -
                        ACE::F_WRITE_DATA | ACE::F_WRITE_ATTRIBUTES ]
         
     | 
| 
       66 
     | 
    
         
            -
                    when flags & IO::RDWR   != 0 then
         
     | 
| 
       67 
     | 
    
         
            -
                      [ F_OPEN_OR_CREATE,
         
     | 
| 
       68 
     | 
    
         
            -
                        ACE::F_READ_DATA | ACE::F_READ_ATTRIBUTES |
         
     | 
| 
       69 
     | 
    
         
            -
                        ACE::F_WRITE_DATA | ACE::F_WRITE_ATTRIBUTES ]
         
     | 
| 
       70 
     | 
    
         
            -
                    when flags & IO::APPEND != 0 then
         
     | 
| 
       71 
     | 
    
         
            -
                      [ F_OPEN_OR_CREATE | F_APPEND_DATA,
         
     | 
| 
       72 
     | 
    
         
            -
                        ACE::F_WRITE_DATA | ACE::F_WRITE_ATTRIBUTES |
         
     | 
| 
       73 
     | 
    
         
            -
                        ACE::F_APPEND_DATA ]
         
     | 
| 
       74 
     | 
    
         
            -
                    else
         
     | 
| 
       75 
     | 
    
         
            -
                      [ F_OPEN_EXISTING,
         
     | 
| 
       76 
     | 
    
         
            -
                        ACE::F_READ_DATA | ACE::F_READ_ATTRIBUTES ]
         
     | 
| 
       77 
     | 
    
         
            -
                  end
         
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
                  sftp_flags |= F_OPEN_OR_CREATE if flags & IO::CREAT != 0
         
     | 
| 
       80 
     | 
    
         
            -
                  sftp_flags |= F_TRUNCATE_EXISTING if flags & IO::TRUNC != 0
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
                  attributes = @attr_factory.empty
         
     | 
| 
       83 
     | 
    
         
            -
                  attributes.permissions = mode
         
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
                  open_raw id, path, desired_access, sftp_flags, attributes
         
     | 
| 
       86 
     | 
    
         
            -
                end
         
     | 
| 
       87 
     | 
    
         
            -
             
     | 
| 
      
 24 
     | 
    
         
            +
             
         
     | 
| 
       88 
25 
     | 
    
         
             
                # In version 4, stat accepts a flags parameter. If flags is +nil+, it
         
     | 
| 
       89 
26 
     | 
    
         
             
                # will default to returning all attributes. Otherwise, the flags parameter
         
     | 
| 
       90 
27 
     | 
    
         
             
                # should be a bitwise combination of the F_xxx constants of
         
     | 
| 
         @@ -129,6 +66,21 @@ module Net ; module SFTP ; module Protocol ; module V_04 
     | 
|
| 
       129 
66 
     | 
    
         
             
                end
         
     | 
| 
       130 
67 
     | 
    
         
             
                private :convert_flags
         
     | 
| 
       131 
68 
     | 
    
         | 
| 
      
 69 
     | 
    
         
            +
                # Used internally to handle +name+ packets. The +on_name+ callback is
         
     | 
| 
      
 70 
     | 
    
         
            +
                # invoked, if registered, with the driver, id, and array of items. The v4
         
     | 
| 
      
 71 
     | 
    
         
            +
                # version of this method sets the 'longname' member of the Name object to
         
     | 
| 
      
 72 
     | 
    
         
            +
                # +nil+ (it is not used in this version).
         
     | 
| 
      
 73 
     | 
    
         
            +
                def do_name( channel, content )
         
     | 
| 
      
 74 
     | 
    
         
            +
                  return unless has_on_name?
         
     | 
| 
      
 75 
     | 
    
         
            +
                  id = content.read_long
         
     | 
| 
      
 76 
     | 
    
         
            +
                  items = []
         
     | 
| 
      
 77 
     | 
    
         
            +
                  content.read_long.times do
         
     | 
| 
      
 78 
     | 
    
         
            +
                    items.push( Name.new( content.read_string, nil,
         
     | 
| 
      
 79 
     | 
    
         
            +
                      @attr_factory.from_buffer( content ) ) )
         
     | 
| 
      
 80 
     | 
    
         
            +
                  end
         
     | 
| 
      
 81 
     | 
    
         
            +
                  call_on_name( driver, id, items )
         
     | 
| 
      
 82 
     | 
    
         
            +
                end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
       132 
84 
     | 
    
         
             
              end
         
     | 
| 
       133 
85 
     | 
    
         | 
| 
       134 
86 
     | 
    
         
             
            end ; end ; end ; end
         
     | 
| 
         @@ -21,18 +21,12 @@ module Net ; module SFTP ; module Protocol ; module V_04 
     | 
|
| 
       21 
21 
     | 
    
         
             
              # Version 4 of the SFTP protocol changed the number of parameters to several
         
     | 
| 
       22 
22 
     | 
    
         
             
              # different packet types:
         
     | 
| 
       23 
23 
     | 
    
         
             
              #
         
     | 
| 
       24 
     | 
    
         
            -
              # * open( id, path, access, flags, attrs )
         
     | 
| 
       25 
24 
     | 
    
         
             
              # * rename( id, old, new, flags )
         
     | 
| 
       26 
25 
     | 
    
         
             
              # * stat( id, path, flags )
         
     | 
| 
       27 
26 
     | 
    
         
             
              # * lstat( id, path, flags )
         
     | 
| 
       28 
27 
     | 
    
         
             
              # * fstat( id, handle, flags )
         
     | 
| 
       29 
28 
     | 
    
         
             
              class PacketAssistant < V_03::PacketAssistant
         
     | 
| 
       30 
29 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
                packet :open,     :string, # path
         
     | 
| 
       32 
     | 
    
         
            -
                                  :long,   # access
         
     | 
| 
       33 
     | 
    
         
            -
                                  :long,   # flags
         
     | 
| 
       34 
     | 
    
         
            -
                                  :attrs   # file attributes
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
30 
     | 
    
         
             
                packet :rename,   :string, # old name
         
     | 
| 
       37 
31 
     | 
    
         
             
                                  :string, # new name
         
     | 
| 
       38 
32 
     | 
    
         
             
                                  :long    # flags
         
     | 
| 
         @@ -0,0 +1,90 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # =============================================================================
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
         
     | 
| 
      
 4 
     | 
    
         
            +
            # All rights reserved.
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            # This source file is distributed as part of the Net::SFTP Secure FTP Client
         
     | 
| 
      
 7 
     | 
    
         
            +
            # library for Ruby. This file (and the library as a whole) may be used only as
         
     | 
| 
      
 8 
     | 
    
         
            +
            # allowed by either the BSD license, or the Ruby license (or, by association
         
     | 
| 
      
 9 
     | 
    
         
            +
            # with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
         
     | 
| 
      
 10 
     | 
    
         
            +
            # distribution for the texts of these licenses.
         
     | 
| 
      
 11 
     | 
    
         
            +
            # -----------------------------------------------------------------------------
         
     | 
| 
      
 12 
     | 
    
         
            +
            # net-sftp website: http://net-ssh.rubyforge.org/sftp
         
     | 
| 
      
 13 
     | 
    
         
            +
            # project website : http://rubyforge.org/projects/net-ssh
         
     | 
| 
      
 14 
     | 
    
         
            +
            # =============================================================================
         
     | 
| 
      
 15 
     | 
    
         
            +
            #++
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            require 'net/sftp/protocol/04/impl'
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            module Net ; module SFTP ; module Protocol ; module V_05
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              # The implementation of the operations available to version 5 of the SFTP
         
     | 
| 
      
 22 
     | 
    
         
            +
              # protocol.
         
     | 
| 
      
 23 
     | 
    
         
            +
              class Impl < V_04::Impl
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                F_CREATE_NEW         = 0x00000000
         
     | 
| 
      
 26 
     | 
    
         
            +
                F_CREATE_TRUNCATE    = 0x00000001
         
     | 
| 
      
 27 
     | 
    
         
            +
                F_OPEN_EXISTING      = 0x00000002
         
     | 
| 
      
 28 
     | 
    
         
            +
                F_OPEN_OR_CREATE     = 0x00000003
         
     | 
| 
      
 29 
     | 
    
         
            +
                F_TRUNCATE_EXISTING  = 0x00000004
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                F_APPEND_DATA        = 0x00000008
         
     | 
| 
      
 32 
     | 
    
         
            +
                F_APPEND_DATA_ATOMIC = 0x00000010
         
     | 
| 
      
 33 
     | 
    
         
            +
                F_TEXT_MODE          = 0x00000020
         
     | 
| 
      
 34 
     | 
    
         
            +
                F_READ_LOCK          = 0x00000040
         
     | 
| 
      
 35 
     | 
    
         
            +
                F_WRITE_LOCK         = 0x00000080
         
     | 
| 
      
 36 
     | 
    
         
            +
                F_DELETE_LOCK        = 0x00000100
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                module ACE
         
     | 
| 
      
 39 
     | 
    
         
            +
                  F_READ_DATA         = 0x00000001
         
     | 
| 
      
 40 
     | 
    
         
            +
                  F_LIST_DIRECTORY    = 0x00000001
         
     | 
| 
      
 41 
     | 
    
         
            +
                  F_WRITE_DATA        = 0x00000002
         
     | 
| 
      
 42 
     | 
    
         
            +
                  F_ADD_FILE          = 0x00000002
         
     | 
| 
      
 43 
     | 
    
         
            +
                  F_APPEND_DATA       = 0x00000004
         
     | 
| 
      
 44 
     | 
    
         
            +
                  F_ADD_SUBDIRECTORY  = 0x00000004
         
     | 
| 
      
 45 
     | 
    
         
            +
                  F_READ_NAMED_ATTRS  = 0x00000008
         
     | 
| 
      
 46 
     | 
    
         
            +
                  F_WRITE_NAMED_ATTRS = 0x00000010
         
     | 
| 
      
 47 
     | 
    
         
            +
                  F_EXECUTE           = 0x00000020
         
     | 
| 
      
 48 
     | 
    
         
            +
                  F_DELETE_CHILD      = 0x00000040
         
     | 
| 
      
 49 
     | 
    
         
            +
                  F_READ_ATTRIBUTES   = 0x00000080
         
     | 
| 
      
 50 
     | 
    
         
            +
                  F_WRITE_ATTRIBUTES  = 0x00000100
         
     | 
| 
      
 51 
     | 
    
         
            +
                  F_DELETE            = 0x00010000
         
     | 
| 
      
 52 
     | 
    
         
            +
                  F_READ_ACL          = 0x00020000
         
     | 
| 
      
 53 
     | 
    
         
            +
                  F_WRITE_ACL         = 0x00040000
         
     | 
| 
      
 54 
     | 
    
         
            +
                  F_WRITE_OWNER       = 0x00080000
         
     | 
| 
      
 55 
     | 
    
         
            +
                  F_SYNCHRONIZE       = 0x00100000
         
     | 
| 
      
 56 
     | 
    
         
            +
                end
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
                # The open operation changed in version 4. This method keeps the same
         
     | 
| 
      
 59 
     | 
    
         
            +
                # interface as previous versions, but changes how the parameters are
         
     | 
| 
      
 60 
     | 
    
         
            +
                # interpreted and converted into a packet.
         
     | 
| 
      
 61 
     | 
    
         
            +
                def open( id, path, flags, mode=0660 )
         
     | 
| 
      
 62 
     | 
    
         
            +
                  sftp_flags, desired_access = case
         
     | 
| 
      
 63 
     | 
    
         
            +
                    when flags & IO::WRONLY != 0 then
         
     | 
| 
      
 64 
     | 
    
         
            +
                      [ F_CREATE_TRUNCATE,
         
     | 
| 
      
 65 
     | 
    
         
            +
                        ACE::F_WRITE_DATA | ACE::F_WRITE_ATTRIBUTES ]
         
     | 
| 
      
 66 
     | 
    
         
            +
                    when flags & IO::RDWR   != 0 then
         
     | 
| 
      
 67 
     | 
    
         
            +
                      [ F_OPEN_OR_CREATE,
         
     | 
| 
      
 68 
     | 
    
         
            +
                        ACE::F_READ_DATA | ACE::F_READ_ATTRIBUTES |
         
     | 
| 
      
 69 
     | 
    
         
            +
                        ACE::F_WRITE_DATA | ACE::F_WRITE_ATTRIBUTES ]
         
     | 
| 
      
 70 
     | 
    
         
            +
                    when flags & IO::APPEND != 0 then
         
     | 
| 
      
 71 
     | 
    
         
            +
                      [ F_OPEN_OR_CREATE | F_APPEND_DATA,
         
     | 
| 
      
 72 
     | 
    
         
            +
                        ACE::F_WRITE_DATA | ACE::F_WRITE_ATTRIBUTES |
         
     | 
| 
      
 73 
     | 
    
         
            +
                        ACE::F_APPEND_DATA ]
         
     | 
| 
      
 74 
     | 
    
         
            +
                    else
         
     | 
| 
      
 75 
     | 
    
         
            +
                      [ F_OPEN_EXISTING,
         
     | 
| 
      
 76 
     | 
    
         
            +
                        ACE::F_READ_DATA | ACE::F_READ_ATTRIBUTES ]
         
     | 
| 
      
 77 
     | 
    
         
            +
                  end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                  sftp_flags |= F_OPEN_OR_CREATE if flags & IO::CREAT != 0
         
     | 
| 
      
 80 
     | 
    
         
            +
                  sftp_flags |= F_TRUNCATE_EXISTING if flags & IO::TRUNC != 0
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                  attributes = @attr_factory.empty
         
     | 
| 
      
 83 
     | 
    
         
            +
                  attributes.permissions = mode
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                  open_raw id, path, desired_access, sftp_flags, attributes
         
     | 
| 
      
 86 
     | 
    
         
            +
                end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
              end
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
            end ; end ; end ; end
         
     | 
| 
         @@ -0,0 +1,34 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # =============================================================================
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
         
     | 
| 
      
 4 
     | 
    
         
            +
            # All rights reserved.
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            # This source file is distributed as part of the Net::SFTP Secure FTP Client
         
     | 
| 
      
 7 
     | 
    
         
            +
            # library for Ruby. This file (and the library as a whole) may be used only as
         
     | 
| 
      
 8 
     | 
    
         
            +
            # allowed by either the BSD license, or the Ruby license (or, by association
         
     | 
| 
      
 9 
     | 
    
         
            +
            # with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
         
     | 
| 
      
 10 
     | 
    
         
            +
            # distribution for the texts of these licenses.
         
     | 
| 
      
 11 
     | 
    
         
            +
            # -----------------------------------------------------------------------------
         
     | 
| 
      
 12 
     | 
    
         
            +
            # net-sftp website: http://net-ssh.rubyforge.org/sftp
         
     | 
| 
      
 13 
     | 
    
         
            +
            # project website : http://rubyforge.org/projects/net-ssh
         
     | 
| 
      
 14 
     | 
    
         
            +
            # =============================================================================
         
     | 
| 
      
 15 
     | 
    
         
            +
            #++
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            require 'net/sftp/protocol/04/packet-assistant'
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            module Net ; module SFTP ; module Protocol ; module V_05
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              # Version 5 of the SFTP protocol changed the number of parameters to several
         
     | 
| 
      
 22 
     | 
    
         
            +
              # different packet types:
         
     | 
| 
      
 23 
     | 
    
         
            +
              #
         
     | 
| 
      
 24 
     | 
    
         
            +
              # * open( id, path, access, flags, attrs )
         
     | 
| 
      
 25 
     | 
    
         
            +
              class PacketAssistant < V_04::PacketAssistant
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                packet :open,     :string, # path
         
     | 
| 
      
 28 
     | 
    
         
            +
                                  :long,   # access
         
     | 
| 
      
 29 
     | 
    
         
            +
                                  :long,   # flags
         
     | 
| 
      
 30 
     | 
    
         
            +
                                  :attrs   # file attributes
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            end ; end ; end ; end
         
     | 
| 
         @@ -20,8 +20,8 @@ module Net ; module SFTP ; module Protocol ; module V_05 
     | 
|
| 
       20 
20 
     | 
    
         
             
                container.namespace_define :v_05 do |ns|
         
     | 
| 
       21 
21 
     | 
    
         | 
| 
       22 
22 
     | 
    
         
             
                  ns.packet_assistant do |c,|
         
     | 
| 
       23 
     | 
    
         
            -
                    require 'net/sftp/protocol/ 
     | 
| 
       24 
     | 
    
         
            -
                     
     | 
| 
      
 23 
     | 
    
         
            +
                    require 'net/sftp/protocol/05/packet-assistant'
         
     | 
| 
      
 24 
     | 
    
         
            +
                    PacketAssistant.new( c[:transport][:buffers],
         
     | 
| 
       25 
25 
     | 
    
         
             
                                         c[:driver] )
         
     | 
| 
       26 
26 
     | 
    
         
             
                  end
         
     | 
| 
       27 
27 
     | 
    
         | 
| 
         @@ -31,8 +31,8 @@ module Net ; module SFTP ; module Protocol ; module V_05 
     | 
|
| 
       31 
31 
     | 
    
         
             
                  end
         
     | 
| 
       32 
32 
     | 
    
         | 
| 
       33 
33 
     | 
    
         
             
                  ns.impl do |c,|
         
     | 
| 
       34 
     | 
    
         
            -
                    require 'net/sftp/protocol/ 
     | 
| 
       35 
     | 
    
         
            -
                     
     | 
| 
      
 34 
     | 
    
         
            +
                    require 'net/sftp/protocol/05/impl'
         
     | 
| 
      
 35 
     | 
    
         
            +
                    Impl.new( c[:transport][:buffers],
         
     | 
| 
       36 
36 
     | 
    
         
             
                              c[:driver], c[:packet_assistant],
         
     | 
| 
       37 
37 
     | 
    
         
             
                              c[:attr_factory] )
         
     | 
| 
       38 
38 
     | 
    
         
             
                  end
         
     | 
    
        data/lib/net/sftp/version.rb
    CHANGED
    
    
    
        data/test/protocol/04/tc_impl.rb
    CHANGED
    
    | 
         @@ -26,38 +26,6 @@ class TC_04_Impl < TC_03_Impl 
     | 
|
| 
       26 
26 
     | 
    
         
             
                Net::SFTP::Protocol::V_04::Impl
         
     | 
| 
       27 
27 
     | 
    
         
             
              end
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
       29 
     | 
    
         
            -
              unless defined?( IO_FLAGS_V4 )
         
     | 
| 
       30 
     | 
    
         
            -
                IO_FLAGS_V4 = [ IO::RDONLY, IO::WRONLY, IO::RDWR, IO::APPEND ]
         
     | 
| 
       31 
     | 
    
         
            -
                OTHER_FLAGS_V4 = [ 0, IO::CREAT, IO::TRUNC, IO::EXCL ]
         
     | 
| 
       32 
     | 
    
         
            -
                FLAG_MAP_V4 = { IO::RDONLY => 2, IO::WRONLY => 1, IO::RDWR => 3,
         
     | 
| 
       33 
     | 
    
         
            -
                  IO::APPEND => 11, IO::CREAT => 3, IO::TRUNC => 4 }
         
     | 
| 
       34 
     | 
    
         
            -
                ACCESS_MAP_V4 = { IO::RDONLY => 0x81, IO::WRONLY => 0x102,
         
     | 
| 
       35 
     | 
    
         
            -
                  IO::RDWR => 0x183, IO::APPEND => 0x106 }
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
                IO_FLAGS_V4.each do |flag|
         
     | 
| 
       38 
     | 
    
         
            -
                  OTHER_FLAGS_V4.each do |oflag|
         
     | 
| 
       39 
     | 
    
         
            -
                    [ nil, 0400 ].each do |mode|
         
     | 
| 
       40 
     | 
    
         
            -
                      define_method( "test_open_#{flag}_#{oflag}_#{mode||"nil"}" ) do
         
     | 
| 
       41 
     | 
    
         
            -
                        return if oflag == IO::EXCL
         
     | 
| 
       42 
     | 
    
         
            -
                        @assistant.mock_handle( :open ) { |*a| [ a[0], a[1..-1] ] }
         
     | 
| 
       43 
     | 
    
         
            -
                        args = [ 14, "a path", flag | oflag ]
         
     | 
| 
       44 
     | 
    
         
            -
                        args << mode if mode
         
     | 
| 
       45 
     | 
    
         
            -
                        assert_equal 14, @impl.open( *args )
         
     | 
| 
       46 
     | 
    
         
            -
                        assert_equal 1, @assistant.mock_count( :open )
         
     | 
| 
       47 
     | 
    
         
            -
                        assert_equal( ( mode || 0660 ), @permissions )
         
     | 
| 
       48 
     | 
    
         
            -
                        sftp_flag = FLAG_MAP_V4[flag] |
         
     | 
| 
       49 
     | 
    
         
            -
                          ( oflag == 0 ? 0 : FLAG_MAP_V4[oflag] )
         
     | 
| 
       50 
     | 
    
         
            -
                        access_flag = ACCESS_MAP_V4[flag]
         
     | 
| 
       51 
     | 
    
         
            -
                        assert_equal Net::SFTP::Protocol::Constants::FXP_OPEN,
         
     | 
| 
       52 
     | 
    
         
            -
                          @sent_data.first[0]
         
     | 
| 
       53 
     | 
    
         
            -
                        assert_equal [ "a path", access_flag, sftp_flag ],
         
     | 
| 
       54 
     | 
    
         
            -
                          @sent_data.first[1][0,3]
         
     | 
| 
       55 
     | 
    
         
            -
                      end
         
     | 
| 
       56 
     | 
    
         
            -
                    end
         
     | 
| 
       57 
     | 
    
         
            -
                  end
         
     | 
| 
       58 
     | 
    
         
            -
                end
         
     | 
| 
       59 
     | 
    
         
            -
              end
         
     | 
| 
       60 
     | 
    
         
            -
             
     | 
| 
       61 
29 
     | 
    
         
             
              def test_stat_flags
         
     | 
| 
       62 
30 
     | 
    
         
             
                @assistant.mock_handle( :stat ) { |*a| [ a[0], a[1..-1] ] }
         
     | 
| 
       63 
31 
     | 
    
         
             
                id = @impl.stat( 14, :a, :b )
         
     | 
| 
         @@ -99,4 +67,25 @@ class TC_04_Impl < TC_03_Impl 
     | 
|
| 
       99 
67 
     | 
    
         
             
                  @sent_data
         
     | 
| 
       100 
68 
     | 
    
         
             
              end
         
     | 
| 
       101 
69 
     | 
    
         | 
| 
      
 70 
     | 
    
         
            +
              # overrides the v1 implementation of the test
         
     | 
| 
      
 71 
     | 
    
         
            +
              def test_do_name_with_callback
         
     | 
| 
      
 72 
     | 
    
         
            +
                buffer = Net::SSH::Util::ReaderBuffer.new( "\0\0\0\1\0\0\0\2" +
         
     | 
| 
      
 73 
     | 
    
         
            +
                  "\0\0\0\1a\0\0\0\0" +
         
     | 
| 
      
 74 
     | 
    
         
            +
                  "\0\0\0\1c\0\0\0\0" )
         
     | 
| 
      
 75 
     | 
    
         
            +
                called = false
         
     | 
| 
      
 76 
     | 
    
         
            +
                @impl.on_name do |d,i,names|
         
     | 
| 
      
 77 
     | 
    
         
            +
                  called = true
         
     | 
| 
      
 78 
     | 
    
         
            +
                  assert_equal 1, i
         
     | 
| 
      
 79 
     | 
    
         
            +
                  assert_equal 2, names.length
         
     | 
| 
      
 80 
     | 
    
         
            +
                  assert_equal "a", names.first.filename
         
     | 
| 
      
 81 
     | 
    
         
            +
                  assert_nil names.first.longname
         
     | 
| 
      
 82 
     | 
    
         
            +
                  assert_equal 0, names.first.attributes
         
     | 
| 
      
 83 
     | 
    
         
            +
                  assert_equal "c", names.last.filename
         
     | 
| 
      
 84 
     | 
    
         
            +
                  assert_nil names.last.longname
         
     | 
| 
      
 85 
     | 
    
         
            +
                  assert_equal 0, names.last.attributes
         
     | 
| 
      
 86 
     | 
    
         
            +
                end
         
     | 
| 
      
 87 
     | 
    
         
            +
                @impl.do_name nil, buffer
         
     | 
| 
      
 88 
     | 
    
         
            +
                assert called
         
     | 
| 
      
 89 
     | 
    
         
            +
              end
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
       102 
91 
     | 
    
         
             
            end
         
     | 
| 
         @@ -26,9 +26,6 @@ class TC_04_PacketAssistant < TC_03_PacketAssistant 
     | 
|
| 
       26 
26 
     | 
    
         
             
                Net::SFTP::Protocol::V_04::PacketAssistant
         
     | 
| 
       27 
27 
     | 
    
         
             
              end
         
     | 
| 
       28 
28 
     | 
    
         | 
| 
       29 
     | 
    
         
            -
              packet :open, [ "a path", 1, 2, "attrs" ],
         
     | 
| 
       30 
     | 
    
         
            -
                "\0\0\0\6a path\0\0\0\1\0\0\0\2attrs"
         
     | 
| 
       31 
     | 
    
         
            -
             
     | 
| 
       32 
29 
     | 
    
         
             
              packet :rename, [ "old name", "new name", 1 ],
         
     | 
| 
       33 
30 
     | 
    
         
             
                "\0\0\0\10old name\0\0\0\10new name\0\0\0\1"
         
     | 
| 
       34 
31 
     | 
    
         | 
| 
         @@ -0,0 +1,61 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # =============================================================================
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
         
     | 
| 
      
 4 
     | 
    
         
            +
            # All rights reserved.
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            # This source file is distributed as part of the Net::SFTP Secure FTP Client
         
     | 
| 
      
 7 
     | 
    
         
            +
            # library for Ruby. This file (and the library as a whole) may be used only as
         
     | 
| 
      
 8 
     | 
    
         
            +
            # allowed by either the BSD license, or the Ruby license (or, by association
         
     | 
| 
      
 9 
     | 
    
         
            +
            # with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
         
     | 
| 
      
 10 
     | 
    
         
            +
            # distribution for the texts of these licenses.
         
     | 
| 
      
 11 
     | 
    
         
            +
            # -----------------------------------------------------------------------------
         
     | 
| 
      
 12 
     | 
    
         
            +
            # net-sftp website: http://net-ssh.rubyforge.org/sftp
         
     | 
| 
      
 13 
     | 
    
         
            +
            # project website : http://rubyforge.org/projects/net-ssh
         
     | 
| 
      
 14 
     | 
    
         
            +
            # =============================================================================
         
     | 
| 
      
 15 
     | 
    
         
            +
            #++
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            $:.unshift "../../../lib"
         
     | 
| 
      
 18 
     | 
    
         
            +
            $:.unshift File.join( File.dirname( __FILE__ ), ".." )
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            require 'net/sftp/protocol/05/impl'
         
     | 
| 
      
 21 
     | 
    
         
            +
            require '04/tc_impl'
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            class TC_05_Impl < TC_04_Impl
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              def impl_class
         
     | 
| 
      
 26 
     | 
    
         
            +
                Net::SFTP::Protocol::V_05::Impl
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              unless defined?( IO_FLAGS_V4 )
         
     | 
| 
      
 30 
     | 
    
         
            +
                IO_FLAGS_V4 = [ IO::RDONLY, IO::WRONLY, IO::RDWR, IO::APPEND ]
         
     | 
| 
      
 31 
     | 
    
         
            +
                OTHER_FLAGS_V4 = [ 0, IO::CREAT, IO::TRUNC, IO::EXCL ]
         
     | 
| 
      
 32 
     | 
    
         
            +
                FLAG_MAP_V4 = { IO::RDONLY => 2, IO::WRONLY => 1, IO::RDWR => 3,
         
     | 
| 
      
 33 
     | 
    
         
            +
                  IO::APPEND => 11, IO::CREAT => 3, IO::TRUNC => 4 }
         
     | 
| 
      
 34 
     | 
    
         
            +
                ACCESS_MAP_V4 = { IO::RDONLY => 0x81, IO::WRONLY => 0x102,
         
     | 
| 
      
 35 
     | 
    
         
            +
                  IO::RDWR => 0x183, IO::APPEND => 0x106 }
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                IO_FLAGS_V4.each do |flag|
         
     | 
| 
      
 38 
     | 
    
         
            +
                  OTHER_FLAGS_V4.each do |oflag|
         
     | 
| 
      
 39 
     | 
    
         
            +
                    [ nil, 0400 ].each do |mode|
         
     | 
| 
      
 40 
     | 
    
         
            +
                      define_method( "test_open_#{flag}_#{oflag}_#{mode||"nil"}" ) do
         
     | 
| 
      
 41 
     | 
    
         
            +
                        return if oflag == IO::EXCL
         
     | 
| 
      
 42 
     | 
    
         
            +
                        @assistant.mock_handle( :open ) { |*a| [ a[0], a[1..-1] ] }
         
     | 
| 
      
 43 
     | 
    
         
            +
                        args = [ 14, "a path", flag | oflag ]
         
     | 
| 
      
 44 
     | 
    
         
            +
                        args << mode if mode
         
     | 
| 
      
 45 
     | 
    
         
            +
                        assert_equal 14, @impl.open( *args )
         
     | 
| 
      
 46 
     | 
    
         
            +
                        assert_equal 1, @assistant.mock_count( :open )
         
     | 
| 
      
 47 
     | 
    
         
            +
                        assert_equal( ( mode || 0660 ), @permissions )
         
     | 
| 
      
 48 
     | 
    
         
            +
                        sftp_flag = FLAG_MAP_V4[flag] |
         
     | 
| 
      
 49 
     | 
    
         
            +
                          ( oflag == 0 ? 0 : FLAG_MAP_V4[oflag] )
         
     | 
| 
      
 50 
     | 
    
         
            +
                        access_flag = ACCESS_MAP_V4[flag]
         
     | 
| 
      
 51 
     | 
    
         
            +
                        assert_equal Net::SFTP::Protocol::Constants::FXP_OPEN,
         
     | 
| 
      
 52 
     | 
    
         
            +
                          @sent_data.first[0]
         
     | 
| 
      
 53 
     | 
    
         
            +
                        assert_equal [ "a path", access_flag, sftp_flag ],
         
     | 
| 
      
 54 
     | 
    
         
            +
                          @sent_data.first[1][0,3]
         
     | 
| 
      
 55 
     | 
    
         
            +
                      end
         
     | 
| 
      
 56 
     | 
    
         
            +
                    end
         
     | 
| 
      
 57 
     | 
    
         
            +
                  end
         
     | 
| 
      
 58 
     | 
    
         
            +
                end
         
     | 
| 
      
 59 
     | 
    
         
            +
              end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,32 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # =============================================================================
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
         
     | 
| 
      
 4 
     | 
    
         
            +
            # All rights reserved.
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            # This source file is distributed as part of the Net::SFTP Secure FTP Client
         
     | 
| 
      
 7 
     | 
    
         
            +
            # library for Ruby. This file (and the library as a whole) may be used only as
         
     | 
| 
      
 8 
     | 
    
         
            +
            # allowed by either the BSD license, or the Ruby license (or, by association
         
     | 
| 
      
 9 
     | 
    
         
            +
            # with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
         
     | 
| 
      
 10 
     | 
    
         
            +
            # distribution for the texts of these licenses.
         
     | 
| 
      
 11 
     | 
    
         
            +
            # -----------------------------------------------------------------------------
         
     | 
| 
      
 12 
     | 
    
         
            +
            # net-sftp website: http://net-ssh.rubyforge.org/sftp
         
     | 
| 
      
 13 
     | 
    
         
            +
            # project website : http://rubyforge.org/projects/net-ssh
         
     | 
| 
      
 14 
     | 
    
         
            +
            # =============================================================================
         
     | 
| 
      
 15 
     | 
    
         
            +
            #++
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            $:.unshift "../../../lib"
         
     | 
| 
      
 18 
     | 
    
         
            +
            $:.unshift File.join( File.dirname( __FILE__ ), ".." )
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            require '04/tc_packet_assistant'
         
     | 
| 
      
 21 
     | 
    
         
            +
            require 'net/sftp/protocol/05/packet-assistant'
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            class TC_05_PacketAssistant < TC_04_PacketAssistant
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              def packet_assistant_class
         
     | 
| 
      
 26 
     | 
    
         
            +
                Net::SFTP::Protocol::V_05::PacketAssistant
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              packet :open, [ "a path", 1, 2, "attrs" ],
         
     | 
| 
      
 30 
     | 
    
         
            +
                "\0\0\0\6a path\0\0\0\1\0\0\0\2attrs"
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,10 +1,10 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification 
         
     | 
| 
       2 
     | 
    
         
            -
            rubygems_version: 0.8. 
     | 
| 
      
 2 
     | 
    
         
            +
            rubygems_version: 0.8.11
         
     | 
| 
       3 
3 
     | 
    
         
             
            specification_version: 1
         
     | 
| 
       4 
4 
     | 
    
         
             
            name: net-sftp
         
     | 
| 
       5 
5 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       6 
     | 
    
         
            -
              version: 1.0. 
     | 
| 
       7 
     | 
    
         
            -
            date: 2005-06- 
     | 
| 
      
 6 
     | 
    
         
            +
              version: 1.0.1
         
     | 
| 
      
 7 
     | 
    
         
            +
            date: 2005-12-06 00:00:00 -07:00
         
     | 
| 
       8 
8 
     | 
    
         
             
            summary: Net::SFTP is a pure-Ruby implementation of the SFTP client protocol.
         
     | 
| 
       9 
9 
     | 
    
         
             
            require_paths: 
         
     | 
| 
       10 
10 
     | 
    
         
             
              - lib
         
     | 
| 
         @@ -24,6 +24,8 @@ required_ruby_version: !ruby/object:Gem::Version::Requirement 
     | 
|
| 
       24 
24 
     | 
    
         
             
                    version: 0.0.0
         
     | 
| 
       25 
25 
     | 
    
         
             
              version: 
         
     | 
| 
       26 
26 
     | 
    
         
             
            platform: ruby
         
     | 
| 
      
 27 
     | 
    
         
            +
            signing_key: 
         
     | 
| 
      
 28 
     | 
    
         
            +
            cert_chain: 
         
     | 
| 
       27 
29 
     | 
    
         
             
            authors: 
         
     | 
| 
       28 
30 
     | 
    
         
             
              - Jamis Buck
         
     | 
| 
       29 
31 
     | 
    
         
             
            files: 
         
     | 
| 
         @@ -85,6 +87,8 @@ files: 
     | 
|
| 
       85 
87 
     | 
    
         
             
              - lib/net/sftp/protocol/04/impl.rb
         
     | 
| 
       86 
88 
     | 
    
         
             
              - lib/net/sftp/protocol/04/packet-assistant.rb
         
     | 
| 
       87 
89 
     | 
    
         
             
              - lib/net/sftp/protocol/04/services.rb
         
     | 
| 
      
 90 
     | 
    
         
            +
              - lib/net/sftp/protocol/05/impl.rb
         
     | 
| 
      
 91 
     | 
    
         
            +
              - lib/net/sftp/protocol/05/packet-assistant.rb
         
     | 
| 
       88 
92 
     | 
    
         
             
              - lib/net/sftp/protocol/05/services.rb
         
     | 
| 
       89 
93 
     | 
    
         
             
              - lib/uri/open-sftp.rb
         
     | 
| 
       90 
94 
     | 
    
         
             
              - lib/uri/sftp.rb
         
     | 
| 
         @@ -116,6 +120,7 @@ files: 
     | 
|
| 
       116 
120 
     | 
    
         
             
              - test/protocol/02
         
     | 
| 
       117 
121 
     | 
    
         
             
              - test/protocol/03
         
     | 
| 
       118 
122 
     | 
    
         
             
              - test/protocol/04
         
     | 
| 
      
 123 
     | 
    
         
            +
              - test/protocol/05
         
     | 
| 
       119 
124 
     | 
    
         
             
              - test/protocol/tc_driver.rb
         
     | 
| 
       120 
125 
     | 
    
         
             
              - test/protocol/01/tc_attributes.rb
         
     | 
| 
       121 
126 
     | 
    
         
             
              - test/protocol/01/tc_impl.rb
         
     | 
| 
         @@ -127,6 +132,8 @@ files: 
     | 
|
| 
       127 
132 
     | 
    
         
             
              - test/protocol/04/tc_attributes.rb
         
     | 
| 
       128 
133 
     | 
    
         
             
              - test/protocol/04/tc_impl.rb
         
     | 
| 
       129 
134 
     | 
    
         
             
              - test/protocol/04/tc_packet_assistant.rb
         
     | 
| 
      
 135 
     | 
    
         
            +
              - test/protocol/05/tc_impl.rb
         
     | 
| 
      
 136 
     | 
    
         
            +
              - test/protocol/05/tc_packet_assistant.rb
         
     | 
| 
       130 
137 
     | 
    
         
             
            test_files: 
         
     | 
| 
       131 
138 
     | 
    
         
             
              - test/ALL-TESTS.rb
         
     | 
| 
       132 
139 
     | 
    
         
             
            rdoc_options: []
         
     | 
| 
         @@ -143,5 +150,5 @@ dependencies: 
     | 
|
| 
       143 
150 
     | 
    
         
             
                    - 
         
     | 
| 
       144 
151 
     | 
    
         
             
                      - ">="
         
     | 
| 
       145 
152 
     | 
    
         
             
                      - !ruby/object:Gem::Version 
         
     | 
| 
       146 
     | 
    
         
            -
                        version: 0. 
     | 
| 
      
 153 
     | 
    
         
            +
                        version: 1.0.0
         
     | 
| 
       147 
154 
     | 
    
         
             
                  version: 
         
     |