author | Tomas Klacko <tomas.klacko@oracle.com> |
Mon, 28 Jul 2014 03:27:16 -0700 | |
branch | s11u2-sru |
changeset 3234 | 1de12229da80 |
parent 2724 | 90c18e89db60 |
permissions | -rw-r--r-- |
2724
90c18e89db60
16191277 problem in SERVICE/FTP-SERVER
Tomas Klacko <tomas.klacko@oracle.com>
parents:
554
diff
changeset
|
1 |
--- a/src/data.c |
90c18e89db60
16191277 problem in SERVICE/FTP-SERVER
Tomas Klacko <tomas.klacko@oracle.com>
parents:
554
diff
changeset
|
2 |
+++ b/src/data.c |
3234
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
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; |
3234
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
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; |
2724
90c18e89db60
16191277 problem in SERVICE/FTP-SERVER
Tomas Klacko <tomas.klacko@oracle.com>
parents:
554
diff
changeset
|
8 |
pr_netaddr_t *bind_addr; |
3234
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
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 |
|
3234
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
11 |
@@ -368,7 +369,9 @@ static int data_active_open(char *reason, off_t size) { |
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
12 |
bind_port = INPORT_ANY; |
2724
90c18e89db60
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 |
|
3234
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
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 (;;) { |
3234
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
17 |
+ session.d = pr_inet_create_conn(session.pool, -1, bind_addr, bind_port, |
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
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 |
|
3234
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
20 |
/* Default remote address to which to connect for an active transfer, |
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
21 |
* if the client has not specified a different address via PORT/EPRT, |
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
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 |
|
3234
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
24 |
if (pr_inet_connect(session.d->pool, session.d, &session.data_addr, |
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
25 |
session.data_port) == -1) { |
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
26 |
+ |
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
27 |
+ if (session.d->xerrno == EADDRINUSE && retries < 16) { |
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
28 |
+ destroy_pool(session.d->pool); |
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
29 |
+ pr_signals_handle(); |
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
30 |
+ /* Wait up to MSL to avoid TIME_WAIT. */ |
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
31 |
+ sleep(retries++); |
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
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 |
+ } |
3234
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
34 |
+ |
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
35 |
pr_log_debug(DEBUG6, |
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
36 |
"Error connecting to %s#%u for active data transfer: %s", |
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
37 |
pr_netaddr_get_ipstr(&session.data_addr), session.data_port, |
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
38 |
@@ -427,6 +439,9 @@ static int data_active_open(char *reason, off_t size) { |
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
39 |
destroy_pool(session.d->pool); |
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
40 |
session.d = NULL; |
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
41 |
return -1; |
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
42 |
+ } else |
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
diff
changeset
|
43 |
+ break; |
1de12229da80
18771389 Update proftpd to 1.3.5
Tomas Klacko <tomas.klacko@oracle.com>
parents:
2724
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, |
2724
90c18e89db60
16191277 problem in SERVICE/FTP-SERVER
Tomas Klacko <tomas.klacko@oracle.com>
parents:
554
diff
changeset
|
48 |