5
5
package server
6
6
7
7
import (
8
- "encoding/binary"
9
8
"fmt"
10
9
"log"
11
10
"strconv"
12
11
"strings"
12
+
13
+ socket2 "github.com/elwin/transmit2/socket"
13
14
)
14
15
15
16
type Command interface {
@@ -277,22 +278,7 @@ func (cmd commandEprt) RequireAuth() bool {
277
278
}
278
279
279
280
func (cmd commandEprt ) Execute (conn * Conn , param string ) {
280
- delim := string (param [0 :1 ])
281
- parts := strings .Split (param , delim )
282
- addressFamily , err := strconv .Atoi (parts [1 ])
283
- host := parts [2 ]
284
- port , err := strconv .Atoi (parts [3 ])
285
- if addressFamily != 1 && addressFamily != 2 {
286
- conn .writeMessage (522 , "Network protocol not supported, use (1,2)" )
287
- return
288
- }
289
- socket , err := newActiveSocket (host , port , conn .logger , conn .sessionID )
290
- if err != nil {
291
- conn .writeMessage (425 , "Data connection failed" )
292
- return
293
- }
294
- conn .dataConn = socket
295
- conn .writeMessage (200 , "Connection established (" + strconv .Itoa (port )+ ")" )
281
+ conn .writeMessage (502 , "Active mode not supported, use passive mode instead" )
296
282
}
297
283
298
284
// commandLprt responds to the LPRT FTP command. It allows the client to
@@ -313,49 +299,8 @@ func (cmd commandLprt) RequireAuth() bool {
313
299
}
314
300
315
301
func (cmd commandLprt ) Execute (conn * Conn , param string ) {
316
- // No tests for this code yet
317
-
318
- parts := strings .Split (param , "," )
319
-
320
- addressFamily , err := strconv .Atoi (parts [0 ])
321
- if addressFamily != 4 {
322
- conn .writeMessage (522 , "Network protocol not supported, use 4" )
323
- return
324
- }
325
-
326
- addressLength , err := strconv .Atoi (parts [1 ])
327
- if addressLength != 4 {
328
- conn .writeMessage (522 , "Network IP length not supported, use 4" )
329
- return
330
- }
331
-
332
- host := strings .Join (parts [2 :2 + addressLength ], "." )
333
-
334
- portLength , err := strconv .Atoi (parts [2 + addressLength ])
335
- portAddress := parts [3 + addressLength : 3 + addressLength + portLength ]
302
+ conn .writeMessage (502 , "Active mode not supported, use passive mode instead" )
336
303
337
- // Convert string[] to byte[]
338
- portBytes := make ([]byte , portLength )
339
- for i := range portAddress {
340
- p , _ := strconv .Atoi (portAddress [i ])
341
- portBytes [i ] = byte (p )
342
- }
343
-
344
- // convert the bytes to an int
345
- port := int (binary .BigEndian .Uint16 (portBytes ))
346
-
347
- // if the existing connection is on the same host/port don't reconnect
348
- if conn .dataConn .Host () == host && conn .dataConn .Port () == port {
349
- return
350
- }
351
-
352
- socket , err := newActiveSocket (host , port , conn .logger , conn .sessionID )
353
- if err != nil {
354
- conn .writeMessage (425 , "Data connection failed" )
355
- return
356
- }
357
- conn .dataConn = socket
358
- conn .writeMessage (200 , "Connection established (" + strconv .Itoa (port )+ ")" )
359
304
}
360
305
361
306
// commandEpsv responds to the EPSV FTP command. It allows the client to
@@ -377,7 +322,7 @@ func (cmd commandEpsv) RequireAuth() bool {
377
322
378
323
func (cmd commandEpsv ) Execute (conn * Conn , param string ) {
379
324
addr := conn .passiveListenIP ()
380
- socket , err := newPassiveSocket (addr , conn .PassivePort , conn .logger , conn .sessionID )
325
+ socket , err := socket2 . NewPassiveSocket (addr , conn .PassivePort , conn .logger , conn .sessionID )
381
326
if err != nil {
382
327
log .Println (err )
383
328
conn .writeMessage (425 , "Data connection failed" )
@@ -646,7 +591,7 @@ func (cmd commandPasv) RequireAuth() bool {
646
591
647
592
func (cmd commandPasv ) Execute (conn * Conn , param string ) {
648
593
listenIP := conn .passiveListenIP ()
649
- socket , err := newPassiveSocket (listenIP , conn .PassivePort , conn .logger , conn .sessionID )
594
+ socket , err := socket2 . NewPassiveSocket (listenIP , conn .PassivePort , conn .logger , conn .sessionID )
650
595
if err != nil {
651
596
conn .writeMessage (425 , "Data connection failed" )
652
597
return
@@ -679,18 +624,7 @@ func (cmd commandPort) RequireAuth() bool {
679
624
}
680
625
681
626
func (cmd commandPort ) Execute (conn * Conn , param string ) {
682
- nums := strings .Split (param , "," )
683
- portOne , _ := strconv .Atoi (nums [4 ])
684
- portTwo , _ := strconv .Atoi (nums [5 ])
685
- port := (portOne * 256 ) + portTwo
686
- host := nums [0 ] + "." + nums [1 ] + "." + nums [2 ] + "." + nums [3 ]
687
- socket , err := newActiveSocket (host , port , conn .logger , conn .sessionID )
688
- if err != nil {
689
- conn .writeMessage (425 , "Data connection failed" )
690
- return
691
- }
692
- conn .dataConn = socket
693
- conn .writeMessage (200 , "Connection established (" + strconv .Itoa (port )+ ")" )
627
+ conn .writeMessage (502 , "Active mode not supported, use passive mode instead" )
694
628
}
695
629
696
630
// commandPwd responds to the PWD FTP command.
0 commit comments