author | Tomas Klacko <tomas.klacko@oracle.com> |
Thu, 19 Jun 2014 02:03:25 -0700 | |
changeset 1952 | edbaa9c65514 |
parent 1343 | a66d36656846 |
permissions | -rw-r--r-- |
1343
a66d36656846
16191277 problem in SERVICE/FTP-SERVER
Tomas Klacko <tomas.klacko@oracle.com>
parents:
554
diff
changeset
|
1 |
--- a/src/data.c |
a66d36656846
16191277 problem in SERVICE/FTP-SERVER
Tomas Klacko <tomas.klacko@oracle.com>
parents:
554
diff
changeset
|
2 |
+++ b/src/data.c |
1952
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
3 |
@@ -337,6 +337,7 @@ static int data_pasv_open(char *reason, off_t size) { |
554
0ed48135019d
7095498 Unable to build data connection: Address already in use
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff
changeset
|
4 |
static int data_active_open(char *reason, off_t size) { |
0ed48135019d
7095498 Unable to build data connection: Address already in use
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff
changeset
|
5 |
conn_t *c; |
1952
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
6 |
int bind_port, rev; |
554
0ed48135019d
7095498 Unable to build data connection: Address already in use
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff
changeset
|
7 |
+ int retries = 0; |
1343
a66d36656846
16191277 problem in SERVICE/FTP-SERVER
Tomas Klacko <tomas.klacko@oracle.com>
parents:
554
diff
changeset
|
8 |
pr_netaddr_t *bind_addr; |
1952
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
9 |
unsigned char *root_revoke = NULL; |
554
0ed48135019d
7095498 Unable to build data connection: Address already in use
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff
changeset
|
10 |
|
1952
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
11 |
@@ -368,7 +369,9 @@ static int data_active_open(char *reason, off_t size) { |
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
12 |
bind_port = INPORT_ANY; |
1343
a66d36656846
16191277 problem in SERVICE/FTP-SERVER
Tomas Klacko <tomas.klacko@oracle.com>
parents:
554
diff
changeset
|
13 |
} |
554
0ed48135019d
7095498 Unable to build data connection: Address already in use
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff
changeset
|
14 |
|
1952
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
15 |
- session.d = pr_inet_create_conn(session.pool, -1, bind_addr, bind_port, TRUE); |
554
0ed48135019d
7095498 Unable to build data connection: Address already in use
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff
changeset
|
16 |
+ for (;;) { |
1952
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
17 |
+ session.d = pr_inet_create_conn(session.pool, -1, bind_addr, bind_port, |
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
18 |
+ TRUE); |
554
0ed48135019d
7095498 Unable to build data connection: Address already in use
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff
changeset
|
19 |
|
1952
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
20 |
/* Default remote address to which to connect for an active transfer, |
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
21 |
* if the client has not specified a different address via PORT/EPRT, |
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
22 |
@@ -416,6 +419,15 @@ static int data_active_open(char *reason, off_t size) { |
554
0ed48135019d
7095498 Unable to build data connection: Address already in use
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff
changeset
|
23 |
|
1952
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
24 |
if (pr_inet_connect(session.d->pool, session.d, &session.data_addr, |
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
25 |
session.data_port) == -1) { |
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
26 |
+ |
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
27 |
+ if (session.d->xerrno == EADDRINUSE && retries < 16) { |
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
28 |
+ destroy_pool(session.d->pool); |
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
29 |
+ pr_signals_handle(); |
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
30 |
+ /* Wait up to MSL to avoid TIME_WAIT. */ |
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
31 |
+ sleep(retries++); |
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
32 |
+ continue; |
554
0ed48135019d
7095498 Unable to build data connection: Address already in use
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff
changeset
|
33 |
+ } |
1952
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
34 |
+ |
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
35 |
pr_log_debug(DEBUG6, |
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
36 |
"Error connecting to %s#%u for active data transfer: %s", |
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
37 |
pr_netaddr_get_ipstr(&session.data_addr), session.data_port, |
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
38 |
@@ -427,6 +439,9 @@ static int data_active_open(char *reason, off_t size) { |
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
39 |
destroy_pool(session.d->pool); |
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
40 |
session.d = NULL; |
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
41 |
return -1; |
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
42 |
+ } else |
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
43 |
+ break; |
edbaa9c65514
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
1343
diff
changeset
|
44 |
+ |
554
0ed48135019d
7095498 Unable to build data connection: Address already in use
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff
changeset
|
45 |
} |
0ed48135019d
7095498 Unable to build data connection: Address already in use
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff
changeset
|
46 |
|
0ed48135019d
7095498 Unable to build data connection: Address already in use
Milan Jurik <Milan.Jurik@oracle.com>
parents:
diff
changeset
|
47 |
c = pr_inet_openrw(session.pool, session.d, NULL, PR_NETIO_STRM_DATA, |
1343
a66d36656846
16191277 problem in SERVICE/FTP-SERVER
Tomas Klacko <tomas.klacko@oracle.com>
parents:
554
diff
changeset
|
48 |