mirror of https://github.com/hak5/openwrt-owl.git
uhttpd: unblock signals in CGI childs, solves hanging ssh logout after server restart from within LuCI and similar problems
SVN-Revision: 27628owl
parent
d7fa989b42
commit
53a5beaca8
|
@ -1,5 +1,5 @@
|
||||||
#
|
#
|
||||||
# Copyright (C) 2010 Jo-Philipp Wich <xm@subsignal.org>
|
# Copyright (C) 2010-2011 Jo-Philipp Wich <xm@subsignal.org>
|
||||||
#
|
#
|
||||||
# This is free software, licensed under the GNU General Public License v2.
|
# This is free software, licensed under the GNU General Public License v2.
|
||||||
# See /LICENSE for more information.
|
# See /LICENSE for more information.
|
||||||
|
@ -8,7 +8,7 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=uhttpd
|
PKG_NAME:=uhttpd
|
||||||
PKG_RELEASE:=22
|
PKG_RELEASE:=23
|
||||||
|
|
||||||
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
||||||
PKG_BUILD_DEPENDS := libcyassl liblua
|
PKG_BUILD_DEPENDS := libcyassl liblua
|
||||||
|
|
|
@ -157,6 +157,8 @@ void uh_cgi_request(
|
||||||
fd_set reader;
|
fd_set reader;
|
||||||
fd_set writer;
|
fd_set writer;
|
||||||
|
|
||||||
|
sigset_t ss;
|
||||||
|
|
||||||
struct sigaction sa;
|
struct sigaction sa;
|
||||||
struct timeval timeout;
|
struct timeval timeout;
|
||||||
struct http_response *res;
|
struct http_response *res;
|
||||||
|
@ -187,6 +189,10 @@ void uh_cgi_request(
|
||||||
|
|
||||||
/* exec child */
|
/* exec child */
|
||||||
case 0:
|
case 0:
|
||||||
|
/* unblock signals */
|
||||||
|
sigemptyset(&ss);
|
||||||
|
sigprocmask(SIG_SETMASK, &ss, NULL);
|
||||||
|
|
||||||
/* restore SIGTERM */
|
/* restore SIGTERM */
|
||||||
sa.sa_flags = 0;
|
sa.sa_flags = 0;
|
||||||
sa.sa_handler = SIG_DFL;
|
sa.sa_handler = SIG_DFL;
|
||||||
|
@ -201,6 +207,10 @@ void uh_cgi_request(
|
||||||
dup2(rfd[1], 1);
|
dup2(rfd[1], 1);
|
||||||
dup2(wfd[0], 0);
|
dup2(wfd[0], 0);
|
||||||
|
|
||||||
|
/* avoid leaking our pipe into child-child processes */
|
||||||
|
fd_cloexec(rfd[1]);
|
||||||
|
fd_cloexec(wfd[0]);
|
||||||
|
|
||||||
/* check for regular, world-executable file _or_ interpreter */
|
/* check for regular, world-executable file _or_ interpreter */
|
||||||
if( ((pi->stat.st_mode & S_IFREG) &&
|
if( ((pi->stat.st_mode & S_IFREG) &&
|
||||||
(pi->stat.st_mode & S_IXOTH)) || (ip != NULL)
|
(pi->stat.st_mode & S_IXOTH)) || (ip != NULL)
|
||||||
|
|
|
@ -621,7 +621,7 @@ static void uh_mainloop(struct config *conf, fd_set serv_fds, int max_fd)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_TLS
|
#ifdef HAVE_TLS
|
||||||
static inline uh_inittls(struct config *conf)
|
static inline int uh_inittls(struct config *conf)
|
||||||
{
|
{
|
||||||
/* library handle */
|
/* library handle */
|
||||||
void *lib;
|
void *lib;
|
||||||
|
|
Loading…
Reference in New Issue