components/proftpd/patches/proftpd-retry.patch
author Tomas Klacko <tomas.klacko@oracle.com>
Mon, 28 Jul 2014 03:27:16 -0700
branchs11u2-sru
changeset 3234 1de12229da80
parent 2724 90c18e89db60
permissions -rw-r--r--
18771389 Update proftpd to 1.3.5 18845170 fix for 17599705 breaks "NLST-a" ("ls -a") of current directory
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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