tcp: bind http and htsp ports before setting uid / gid - fixes#2190
This commit is contained in:
parent
b64b62964a
commit
0addaf1389
8 changed files with 53 additions and 14 deletions
|
@ -2318,6 +2318,17 @@ htsp_init(const char *bindaddr)
|
|||
htsp_server_2 = tcp_server_create(bindaddr, tvheadend_htsp_port_extra, &ops, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
void
|
||||
htsp_register(void)
|
||||
{
|
||||
tcp_server_register(htsp_server);
|
||||
if (htsp_server_2)
|
||||
tcp_server_register(htsp_server_2);
|
||||
}
|
||||
|
||||
/**
|
||||
* Fire down HTSP server
|
||||
*/
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include "dvr/dvr.h"
|
||||
|
||||
void htsp_init(const char *bindaddr);
|
||||
void htsp_register(void);
|
||||
void htsp_done(void);
|
||||
|
||||
void htsp_channel_update_nownext(channel_t *ch);
|
||||
|
|
|
@ -972,6 +972,12 @@ http_server_init(const char *bindaddr)
|
|||
http_server = tcp_server_create(bindaddr, tvheadend_webui_port, &ops, NULL);
|
||||
}
|
||||
|
||||
void
|
||||
http_server_register(void)
|
||||
{
|
||||
tcp_server_register(http_server);
|
||||
}
|
||||
|
||||
void
|
||||
http_server_done(void)
|
||||
{
|
||||
|
|
|
@ -202,6 +202,7 @@ http_path_t *http_path_add(const char *path, void *opaque,
|
|||
http_callback_t *callback, uint32_t accessmask);
|
||||
|
||||
void http_server_init(const char *bindaddr);
|
||||
void http_server_register(void);
|
||||
void http_server_done(void);
|
||||
|
||||
int http_access_verify(http_connection_t *hc, int mask);
|
||||
|
|
11
src/main.c
11
src/main.c
|
@ -671,9 +671,14 @@ main(int argc, char **argv)
|
|||
tvhlog_init(log_level, log_options, opt_logpath);
|
||||
tvhlog_set_debug(log_debug);
|
||||
tvhlog_set_trace(log_trace);
|
||||
tvhinfo("main", "Log started");
|
||||
|
||||
signal(SIGPIPE, handle_sigpipe); // will be redundant later
|
||||
|
||||
tcp_server_preinit(opt_ipv6);
|
||||
http_server_init(opt_bindaddr); // bind to ports only
|
||||
htsp_init(opt_bindaddr); // bind to ports only
|
||||
|
||||
/* Daemonise */
|
||||
if(opt_fork) {
|
||||
const char *homedir;
|
||||
|
@ -807,8 +812,8 @@ main(int argc, char **argv)
|
|||
timeshift_init();
|
||||
#endif
|
||||
|
||||
tcp_server_init(opt_ipv6);
|
||||
http_server_init(opt_bindaddr);
|
||||
tcp_server_init();
|
||||
http_server_register();
|
||||
webui_init(opt_xspf);
|
||||
#if ENABLE_UPNP
|
||||
upnp_server_init(opt_bindaddr);
|
||||
|
@ -825,7 +830,7 @@ main(int argc, char **argv)
|
|||
|
||||
dbus_server_start();
|
||||
|
||||
htsp_init(opt_bindaddr);
|
||||
htsp_register();
|
||||
|
||||
|
||||
if(opt_subscribe != NULL)
|
||||
|
|
29
src/tcp.c
29
src/tcp.c
|
@ -545,15 +545,12 @@ tcp_server_create
|
|||
(const char *bindaddr, int port, tcp_server_ops_t *ops, void *opaque)
|
||||
{
|
||||
int fd, x;
|
||||
tvhpoll_event_t ev;
|
||||
tcp_server_t *ts;
|
||||
struct addrinfo hints, *res, *ressave, *use = NULL;
|
||||
char port_buf[6];
|
||||
int one = 1;
|
||||
int zero = 0;
|
||||
|
||||
memset(&ev, 0, sizeof(ev));
|
||||
|
||||
snprintf(port_buf, 6, "%d", port);
|
||||
|
||||
memset(&hints, 0, sizeof(struct addrinfo));
|
||||
|
@ -611,13 +608,25 @@ tcp_server_create
|
|||
ts->serverfd = fd;
|
||||
ts->ops = *ops;
|
||||
ts->opaque = opaque;
|
||||
return ts;
|
||||
}
|
||||
|
||||
ev.fd = fd;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
||||
void tcp_server_register(void *server)
|
||||
{
|
||||
tcp_server_t *ts = server;
|
||||
tvhpoll_event_t ev;
|
||||
|
||||
memset(&ev, 0, sizeof(ev));
|
||||
|
||||
ev.fd = ts->serverfd;
|
||||
ev.events = TVHPOLL_IN;
|
||||
ev.data.ptr = ts;
|
||||
tvhpoll_add(tcp_server_poll, &ev, 1);
|
||||
|
||||
return ts;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -678,12 +687,16 @@ tcp_server_connections ( void )
|
|||
pthread_t tcp_server_tid;
|
||||
|
||||
void
|
||||
tcp_server_init(int opt_ipv6)
|
||||
tcp_server_preinit(int opt_ipv6)
|
||||
{
|
||||
tvhpoll_event_t ev;
|
||||
if(opt_ipv6)
|
||||
tcp_preferred_address_family = AF_INET6;
|
||||
}
|
||||
|
||||
void
|
||||
tcp_server_init(void)
|
||||
{
|
||||
tvhpoll_event_t ev;
|
||||
tvh_pipe(O_NONBLOCK, &tcp_server_pipe);
|
||||
tcp_server_poll = tvhpoll_create(10);
|
||||
|
||||
|
|
|
@ -49,7 +49,8 @@ typedef struct tcp_server_ops
|
|||
|
||||
extern int tcp_preferred_address_family;
|
||||
|
||||
void tcp_server_init(int opt_ipv6);
|
||||
void tcp_server_preinit(int opt_ipv6);
|
||||
void tcp_server_init(void);
|
||||
void tcp_server_done(void);
|
||||
|
||||
int tcp_connect(const char *hostname, int port, const char *bindaddr,
|
||||
|
@ -62,6 +63,8 @@ typedef void (tcp_server_callback_t)(int fd, void *opaque,
|
|||
void *tcp_server_create(const char *bindaddr, int port,
|
||||
tcp_server_ops_t *ops, void *opaque);
|
||||
|
||||
void tcp_server_register(void *server);
|
||||
|
||||
void tcp_server_delete(void *server);
|
||||
|
||||
int tcp_read(int fd, void *buf, size_t len);
|
||||
|
|
|
@ -412,7 +412,7 @@ tvhlog_init ( int level, int options, const char *path )
|
|||
tvhlog_path = path ? strdup(path) : NULL;
|
||||
tvhlog_trace = NULL;
|
||||
tvhlog_debug = NULL;
|
||||
tvhlog_run = 0;
|
||||
tvhlog_run = 1;
|
||||
openlog("tvheadend", LOG_PID, LOG_DAEMON);
|
||||
pthread_mutex_init(&tvhlog_mutex, NULL);
|
||||
pthread_cond_init(&tvhlog_cond, NULL);
|
||||
|
@ -422,7 +422,6 @@ tvhlog_init ( int level, int options, const char *path )
|
|||
void
|
||||
tvhlog_start ( void )
|
||||
{
|
||||
tvhlog_run = 1;
|
||||
tvhthread_create(&tvhlog_tid, NULL, tvhlog_thread, NULL);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue