Patch: Elm ME+ 2.5 PLalpha51 -> Elm ME+ 2.5 PLalpha52 [4/7] (4/5)
From
Kari Hurtta@21:1/5 to
All on Mon Jun 8 19:51:10 2020
[continued from previous message]
+ if (ra->socknameaddr.dummy) {
+ free(ra->socknameaddr.dummy);
+ ra->socknameaddr.dummy = NULL;
+ }
+ ra->socknamesize = 0;
}
void clear_remote_account(ra)
***************
*** 1446,1452 ****
return connect_fail;
}
! s = give_addr_as_string(ra->hostaddr.generic,mybuffer,sizeof mybuffer);
DPRINT(Debug,12,(&Debug,
"connect_one_IN: family=%d size=%ld",
--- 1522,1529 ----
return connect_fail;
}
! s = give_SOCKADDR_ptr_as_string(ra->hostaddr,ra->addrsize,
! mybuffer,sizeof mybuffer);
DPRINT(Debug,12,(&Debug,
"connect_one_IN: family=%d size=%ld",
***************
*** 2651,2656 ****
--- 2728,2844 ----
return r;
}
+ static void update_ra_sockname P_((int cur_socket, struct remote_account *ra));
+ static void update_ra_sockname(cur_socket,ra)
+ int cur_socket;
+ struct remote_account *ra;
+ {
+
+ #ifdef HAVE_GETSOCKNAME
+ SOCKADDR sockname;
+ GETSOCKNAME_SOCKLEN socknamelen = sizeof (sockname);
+ int r;
+
+ /* getsockname can return local address of machine
+ only after socket is connected. Before that
+ routing is not done and source address is not
+ selected. before that wildcard address may be
+ returned.
+ */
+
+ bzero(&sockname,sizeof (sockname));
+
+ r = getsockname(cur_socket,&sockname.sa,&socknamelen);
+