Fixed IP detection over HTTPS output
This commit is contained in:
parent
0f12e107de
commit
4a621ea5c0
2 changed files with 19 additions and 1 deletions
|
@ -436,13 +436,21 @@ void Socket::Buffer::clear(){
|
|||
}
|
||||
|
||||
void Socket::Connection::setBoundAddr(){
|
||||
//If a bound address was set through environment (e.g. HTTPS output), restore it from there.
|
||||
char * envbound = getenv("MIST_BOUND_ADDR");
|
||||
if (envbound){
|
||||
boundaddr = envbound;
|
||||
return;
|
||||
}
|
||||
//If we can't read the address, don't try
|
||||
if (!isTrueSocket){
|
||||
boundaddr = "";
|
||||
return;
|
||||
}
|
||||
//Otherwise, read from socket pointer. Works for both SSL and non-SSL sockets, and real sockets passed as fd's, but not for non-sockets (duh)
|
||||
struct sockaddr_in6 tmpaddr;
|
||||
socklen_t len = sizeof(tmpaddr);
|
||||
if (!getsockname(sSend, (sockaddr *)&tmpaddr, &len)){
|
||||
if (!getsockname(getSocket(), (sockaddr *)&tmpaddr, &len)){
|
||||
static char addrconv[INET6_ADDRSTRLEN];
|
||||
if (tmpaddr.sin6_family == AF_INET6){
|
||||
boundaddr = inet_ntop(AF_INET6, &(tmpaddr.sin6_addr), addrconv, INET6_ADDRSTRLEN);
|
||||
|
@ -649,12 +657,18 @@ void Socket::Connection::drop(){
|
|||
|
||||
/// Returns internal socket number.
|
||||
int Socket::Connection::getSocket(){
|
||||
#ifdef SSL
|
||||
if (sslConnected){return server_fd->fd;}
|
||||
#endif
|
||||
if (sSend != -1){return sSend;}
|
||||
return sRecv;
|
||||
}
|
||||
|
||||
/// Returns non-piped internal socket number.
|
||||
int Socket::Connection::getPureSocket(){
|
||||
#ifdef SSL
|
||||
if (sslConnected){return server_fd->fd;}
|
||||
#endif
|
||||
if (!isTrueSocket){return -1;}
|
||||
return sSend;
|
||||
}
|
||||
|
@ -790,6 +804,8 @@ void Socket::Connection::open(std::string host, int port, bool nonblock, bool wi
|
|||
}
|
||||
}
|
||||
sslConnected = true;
|
||||
isTrueSocket = true;
|
||||
setBoundAddr();
|
||||
Blocking = true;
|
||||
if (nonblock){setBlocking(false);}
|
||||
DONTEVEN_MSG("SSL connect success");
|
||||
|
|
|
@ -111,7 +111,9 @@ namespace Mist{
|
|||
}
|
||||
args.push_back("");
|
||||
Util::Procs::socketList.insert(fd[0]);
|
||||
setenv("MIST_BOUND_ADDR", myConn.getBoundAddress().c_str(), 1);
|
||||
pid_t http_proc = Util::Procs::StartPiped(args, &(fd[1]), &(fd[1]), &fderr);
|
||||
unsetenv("MIST_BOUND_ADDR");
|
||||
close(fd[1]);
|
||||
if (http_proc < 2){
|
||||
FAIL_MSG("Could not spawn MistOutHTTP process for SSL connection!");
|
||||
|
|
Loading…
Add table
Reference in a new issue