[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 5/5] tools/xenstore: drop creation of read-only socket in xenstored
With xs_daemon_open_readonly() now no longer using the read-only socket the creation of that socket can be dropped. Signed-off-by: Juergen Gross <jgross@xxxxxxxx> --- tools/xenstore/xenstored_core.c | 55 +++++++------------------------ tools/xenstore/xenstored_core.h | 3 -- tools/xenstore/xenstored_domain.c | 4 +-- tools/xenstore/xs_lib.c | 8 +---- 4 files changed, 14 insertions(+), 56 deletions(-) diff --git a/tools/xenstore/xenstored_core.c b/tools/xenstore/xenstored_core.c index 9700772d40..b4be374d3f 100644 --- a/tools/xenstore/xenstored_core.c +++ b/tools/xenstore/xenstored_core.c @@ -71,7 +71,6 @@ static unsigned int current_array_size; static unsigned int nr_fds; static int sock = -1; -static int ro_sock = -1; static bool verbose = false; LIST_HEAD(connections); @@ -311,8 +310,7 @@ fail: return -1; } -static void initialize_fds(int *p_sock_pollfd_idx, int *p_ro_sock_pollfd_idx, - int *ptimeout) +static void initialize_fds(int *p_sock_pollfd_idx, int *ptimeout) { struct connection *conn; struct wrl_timestampt now; @@ -325,8 +323,6 @@ static void initialize_fds(int *p_sock_pollfd_idx, int *p_ro_sock_pollfd_idx, if (sock != -1) *p_sock_pollfd_idx = set_fd(sock, POLLIN|POLLPRI); - if (ro_sock != -1) - *p_ro_sock_pollfd_idx = set_fd(ro_sock, POLLIN|POLLPRI); if (reopen_log_pipe[0] != -1) reopen_log_pipe0_pollfd_idx = set_fd(reopen_log_pipe[0], POLLIN|POLLPRI); @@ -472,9 +468,6 @@ static enum xs_perm_type perm_for_conn(struct connection *conn, unsigned int i; enum xs_perm_type mask = XS_PERM_READ|XS_PERM_WRITE|XS_PERM_OWNER; - if (!conn->can_write) - mask &= ~XS_PERM_WRITE; - /* Owners and tools get it all... */ if (!domain_is_unprivileged(conn) || perms[0].id == conn->id || (conn->target && perms[0].id == conn->target->id)) @@ -1422,7 +1415,6 @@ struct connection *new_connection(connwritefn_t *write, connreadfn_t *read) new->pollfd_idx = -1; new->write = write; new->read = read; - new->can_write = true; new->transaction_started = 0; INIT_LIST_HEAD(&new->out_list); INIT_LIST_HEAD(&new->watches); @@ -1435,7 +1427,7 @@ struct connection *new_connection(connwritefn_t *write, connreadfn_t *read) } #ifdef NO_SOCKETS -static void accept_connection(int sock, bool canwrite) +static void accept_connection(int sock) { } #else @@ -1477,7 +1469,7 @@ static int readfd(struct connection *conn, void *data, unsigned int len) return rc; } -static void accept_connection(int sock, bool canwrite) +static void accept_connection(int sock) { int fd; struct connection *conn; @@ -1487,10 +1479,9 @@ static void accept_connection(int sock, bool canwrite) return; conn = new_connection(writefd, readfd); - if (conn) { + if (conn) conn->fd = fd; - conn->can_write = canwrite; - } else + else close(fd); } #endif @@ -1794,28 +1785,21 @@ static void destroy_fds(void) { if (sock >= 0) close(sock); - if (ro_sock >= 0) - close(ro_sock); } static void init_sockets(void) { struct sockaddr_un addr; const char *soc_str = xs_daemon_socket(); - const char *soc_str_ro = xs_daemon_socket_ro(); /* Create sockets for them to listen to. */ atexit(destroy_fds); sock = socket(PF_UNIX, SOCK_STREAM, 0); if (sock < 0) barf_perror("Could not create socket"); - ro_sock = socket(PF_UNIX, SOCK_STREAM, 0); - if (ro_sock < 0) - barf_perror("Could not create socket"); /* FIXME: Be more sophisticated, don't mug running daemon. */ unlink(soc_str); - unlink(soc_str_ro); addr.sun_family = AF_UNIX; @@ -1825,17 +1809,10 @@ static void init_sockets(void) if (bind(sock, (struct sockaddr *)&addr, sizeof(addr)) != 0) barf_perror("Could not bind socket to %s", soc_str); - if(strlen(soc_str_ro) >= sizeof(addr.sun_path)) - barf_perror("socket string '%s' too long", soc_str_ro); - strcpy(addr.sun_path, soc_str_ro); - if (bind(ro_sock, (struct sockaddr *)&addr, sizeof(addr)) != 0) - barf_perror("Could not bind socket to %s", soc_str_ro); - - if (chmod(soc_str, 0600) != 0 - || chmod(soc_str_ro, 0660) != 0) + if (chmod(soc_str, 0600) != 0) barf_perror("Could not chmod sockets"); - if (listen(sock, 1) != 0 || listen(ro_sock, 1) != 0) + if (listen(sock, 1) != 0) barf_perror("Could not listen on sockets"); } #endif @@ -1893,7 +1870,7 @@ int priv_domid = 0; int main(int argc, char *argv[]) { int opt; - int sock_pollfd_idx = -1, ro_sock_pollfd_idx = -1; + int sock_pollfd_idx = -1; bool dofork = true; bool outputpid = false; bool no_domain_init = false; @@ -2010,7 +1987,7 @@ int main(int argc, char *argv[]) tracefile = talloc_strdup(NULL, tracefile); /* Get ready to listen to the tools. */ - initialize_fds(&sock_pollfd_idx, &ro_sock_pollfd_idx, &timeout); + initialize_fds(&sock_pollfd_idx, &timeout); /* Tell the kernel we're up and running. */ xenbus_notify_running(); @@ -2051,21 +2028,11 @@ int main(int argc, char *argv[]) barf_perror("sock poll failed"); break; } else if (fds[sock_pollfd_idx].revents & POLLIN) { - accept_connection(sock, true); + accept_connection(sock); sock_pollfd_idx = -1; } } - if (ro_sock_pollfd_idx != -1) { - if (fds[ro_sock_pollfd_idx].revents & ~POLLIN) { - barf_perror("ro sock poll failed"); - break; - } else if (fds[ro_sock_pollfd_idx].revents & POLLIN) { - accept_connection(ro_sock, false); - ro_sock_pollfd_idx = -1; - } - } - if (xce_pollfd_idx != -1) { if (fds[xce_pollfd_idx].revents & ~POLLIN) { barf_perror("xce_handle poll failed"); @@ -2128,7 +2095,7 @@ int main(int argc, char *argv[]) } } - initialize_fds(&sock_pollfd_idx, &ro_sock_pollfd_idx, &timeout); + initialize_fds(&sock_pollfd_idx, &timeout); } } diff --git a/tools/xenstore/xenstored_core.h b/tools/xenstore/xenstored_core.h index c4c32bc88f..1df6ad94ab 100644 --- a/tools/xenstore/xenstored_core.h +++ b/tools/xenstore/xenstored_core.h @@ -77,9 +77,6 @@ struct connection /* Who am I? 0 for socket connections. */ unsigned int id; - /* Is this a read-only connection? */ - bool can_write; - /* Buffered incoming data. */ struct buffered_data *in; diff --git a/tools/xenstore/xenstored_domain.c b/tools/xenstore/xenstored_domain.c index 0d5495745b..a2f144f6dd 100644 --- a/tools/xenstore/xenstored_domain.c +++ b/tools/xenstore/xenstored_domain.c @@ -372,7 +372,7 @@ int do_introduce(struct connection *conn, struct buffered_data *in) if (get_strings(in, vec, ARRAY_SIZE(vec)) < ARRAY_SIZE(vec)) return EINVAL; - if (domain_is_unprivileged(conn) || !conn->can_write) + if (domain_is_unprivileged(conn)) return EACCES; domid = atoi(vec[0]); @@ -438,7 +438,7 @@ int do_set_target(struct connection *conn, struct buffered_data *in) if (get_strings(in, vec, ARRAY_SIZE(vec)) < ARRAY_SIZE(vec)) return EINVAL; - if (domain_is_unprivileged(conn) || !conn->can_write) + if (domain_is_unprivileged(conn)) return EACCES; domid = atoi(vec[0]); diff --git a/tools/xenstore/xs_lib.c b/tools/xenstore/xs_lib.c index 3e43f8809d..9f1dc6d559 100644 --- a/tools/xenstore/xs_lib.c +++ b/tools/xenstore/xs_lib.c @@ -63,13 +63,7 @@ const char *xs_daemon_socket(void) const char *xs_daemon_socket_ro(void) { - static char buf[PATH_MAX]; - const char *s = xs_daemon_path(); - if (s == NULL) - return NULL; - if (snprintf(buf, sizeof(buf), "%s_ro", s) >= PATH_MAX) - return NULL; - return buf; + return xs_daemon_path(); } const char *xs_domain_dev(void) -- 2.26.2
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |