qrexec: remove socket at daemon exit
This commit is contained in:
parent
4e5aa3ce05
commit
c03a37f2bf
@ -86,6 +86,20 @@ void sigchld_parent_handler(int x)
|
|||||||
void sigchld_handler(int x);
|
void sigchld_handler(int x);
|
||||||
|
|
||||||
const char *remote_domain_name; // guess what
|
const char *remote_domain_name; // guess what
|
||||||
|
int remote_domain_xid; // guess what
|
||||||
|
|
||||||
|
void unlink_qrexec_socket()
|
||||||
|
{
|
||||||
|
char socket_address[40];
|
||||||
|
char link_to_socket_name[strlen(remote_domain_name) + sizeof(socket_address)];
|
||||||
|
|
||||||
|
snprintf(socket_address, sizeof(socket_address),
|
||||||
|
QREXEC_DAEMON_SOCKET_DIR "/qrexec.%d", remote_domain_xid);
|
||||||
|
snprintf(link_to_socket_name, sizeof link_to_socket_name,
|
||||||
|
QREXEC_DAEMON_SOCKET_DIR "/qrexec.%s", remote_domain_name);
|
||||||
|
unlink(socket_address);
|
||||||
|
unlink(link_to_socket_name);
|
||||||
|
}
|
||||||
|
|
||||||
int create_qrexec_socket(int domid, const char *domname)
|
int create_qrexec_socket(int domid, const char *domname)
|
||||||
{
|
{
|
||||||
@ -101,6 +115,7 @@ int create_qrexec_socket(int domid, const char *domname)
|
|||||||
fprintf(stderr, "symlink(%s,%s) failed: %s\n", socket_address,
|
fprintf(stderr, "symlink(%s,%s) failed: %s\n", socket_address,
|
||||||
link_to_socket_name, strerror (errno));
|
link_to_socket_name, strerror (errno));
|
||||||
}
|
}
|
||||||
|
atexit(unlink_qrexec_socket);
|
||||||
return get_server_socket(socket_address);
|
return get_server_socket(socket_address);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -526,7 +541,7 @@ void handle_execute_predefined_command(void)
|
|||||||
remote_domain_name, params.target_vmname,
|
remote_domain_name, params.target_vmname,
|
||||||
params.exec_index, params.process_fds.ident, NULL);
|
params.exec_index, params.process_fds.ident, NULL);
|
||||||
perror("execl");
|
perror("execl");
|
||||||
exit(1);
|
_exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void check_client_id_in_range(unsigned int untrusted_client_id)
|
void check_client_id_in_range(unsigned int untrusted_client_id)
|
||||||
@ -668,7 +683,8 @@ int main(int argc, char **argv)
|
|||||||
remote_domain_name = argv[2];
|
remote_domain_name = argv[2];
|
||||||
if (argc == 4)
|
if (argc == 4)
|
||||||
default_user = argv[3];
|
default_user = argv[3];
|
||||||
init(atoi(argv[1]));
|
remote_domain_xid = atoi(argv[1]);
|
||||||
|
init(remote_domain_xid);
|
||||||
sigemptyset(&chld_set);
|
sigemptyset(&chld_set);
|
||||||
sigaddset(&chld_set, SIGCHLD);
|
sigaddset(&chld_set, SIGCHLD);
|
||||||
/*
|
/*
|
||||||
|
Loading…
Reference in New Issue
Block a user