bufchain pending_output_data;
bufchain pending_input_data;
enum { EOF_NO, EOF_PENDING, EOF_SENT } outgoingeof;
-
- void *privptr;
};
static int localproxy_select_result(int fd, int event);
/* do nothing */
}
-static void sk_localproxy_set_private_ptr (Socket s, void *ptr)
-{
- Local_Proxy_Socket ps = (Local_Proxy_Socket) s;
- ps->privptr = ptr;
-}
-
-static void * sk_localproxy_get_private_ptr (Socket s)
-{
- Local_Proxy_Socket ps = (Local_Proxy_Socket) s;
- return ps->privptr;
-}
-
static void sk_localproxy_set_frozen (Socket s, int is_frozen)
{
Local_Proxy_Socket ps = (Local_Proxy_Socket) s;
return 1;
}
-Socket platform_new_connection(SockAddr addr, char *hostname,
+Socket platform_new_connection(SockAddr addr, const char *hostname,
int port, int privport,
int oobinline, int nodelay, int keepalive,
Plug plug, Conf *conf)
sk_localproxy_write_oob,
sk_localproxy_write_eof,
sk_localproxy_flush,
- sk_localproxy_set_private_ptr,
- sk_localproxy_get_private_ptr,
sk_localproxy_set_frozen,
- sk_localproxy_socket_error
+ sk_localproxy_socket_error,
+ NULL, /* peer_info */
};
Local_Proxy_Socket ret;
if (pipe(to_cmd_pipe) < 0 ||
pipe(from_cmd_pipe) < 0) {
ret->error = dupprintf("pipe: %s", strerror(errno));
+ sfree(cmd);
return (Socket)ret;
}
cloexec(to_cmd_pipe[1]);
dup2(from_cmd_pipe[1], 1);
close(to_cmd_pipe[0]);
close(from_cmd_pipe[1]);
- fcntl(0, F_SETFD, 0);
- fcntl(1, F_SETFD, 0);
+ noncloexec(0);
+ noncloexec(1);
execl("/bin/sh", "sh", "-c", cmd, (void *)NULL);
_exit(255);
}