Daemonize qrexec_daemon.
This commit is contained in:
parent
d6f327492d
commit
b899bfc9ba
@ -25,6 +25,8 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
#include "qrexec.h"
|
#include "qrexec.h"
|
||||||
#include "buffer.h"
|
#include "buffer.h"
|
||||||
#include "glue.h"
|
#include "glue.h"
|
||||||
@ -49,10 +51,37 @@ int server_fd;
|
|||||||
|
|
||||||
void init(int xid)
|
void init(int xid)
|
||||||
{
|
{
|
||||||
|
char dbg_log[256];
|
||||||
|
int logfd;
|
||||||
|
|
||||||
if (xid <= 0) {
|
if (xid <= 0) {
|
||||||
fprintf(stderr, "domain id=0?\n");
|
fprintf(stderr, "domain id=0?\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
switch (fork()) {
|
||||||
|
case -1:
|
||||||
|
perror("fork");
|
||||||
|
exit(1);
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
close(0);
|
||||||
|
snprintf(dbg_log, sizeof(dbg_log),
|
||||||
|
"/var/log/qubes/qrexec.%d.log", xid);
|
||||||
|
umask(0007);
|
||||||
|
logfd = open(dbg_log, O_WRONLY | O_CREAT | O_TRUNC, 0640);
|
||||||
|
umask(0077);
|
||||||
|
dup2(logfd, 1);
|
||||||
|
dup2(logfd, 2);
|
||||||
|
|
||||||
|
chdir("/var/run/qubes");
|
||||||
|
if (setsid() < 0) {
|
||||||
|
perror("setsid()");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
server_fd = get_server_socket(xid);
|
server_fd = get_server_socket(xid);
|
||||||
peer_client_init(xid, REXEC_PORT);
|
peer_client_init(xid, REXEC_PORT);
|
||||||
setuid(getuid());
|
setuid(getuid());
|
||||||
@ -209,8 +238,8 @@ void handle_agent_data()
|
|||||||
struct server_header s_hdr;
|
struct server_header s_hdr;
|
||||||
read_all_vchan_ext(&s_hdr, sizeof s_hdr);
|
read_all_vchan_ext(&s_hdr, sizeof s_hdr);
|
||||||
|
|
||||||
// fprintf(stderr, "got %x %x %x\n", s_hdr.type, s_hdr.clid,
|
// fprintf(stderr, "got %x %x %x\n", s_hdr.type, s_hdr.clid,
|
||||||
// s_hdr.len);
|
// s_hdr.len);
|
||||||
|
|
||||||
if (s_hdr.clid >= MAX_FDS || s_hdr.clid < 0) {
|
if (s_hdr.clid >= MAX_FDS || s_hdr.clid < 0) {
|
||||||
fprintf(stderr, "from agent: clid=%d\n", s_hdr.clid);
|
fprintf(stderr, "from agent: clid=%d\n", s_hdr.clid);
|
||||||
|
Loading…
Reference in New Issue
Block a user