From ec17a98d42d8f90d8cbefb01943562a63f2e74d5 Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Sun, 17 Nov 2019 14:27:09 +0000 Subject: Actually clean up the filesystem when ending a session This requires storing the client path in the wpactrl_t, which uses memory, GOD I HATE THAT STUPID IPC MECHANISM --- doc/libwpactrl/index.html | 5 ++++- src/include/bcnm/wpactrl.h | 3 ++- src/libwpactrl/wpactrl_end.c | 7 +++++++ src/libwpactrl/wpactrl_start.c | 13 +++++++------ 4 files changed, 20 insertions(+), 8 deletions(-) diff --git a/doc/libwpactrl/index.html b/doc/libwpactrl/index.html index 6f114c3..204f9f8 100644 --- a/doc/libwpactrl/index.html +++ b/doc/libwpactrl/index.html @@ -132,7 +132,10 @@ will immediately be aborted.

int wpactrl_end (wpactrl_t *a)
-Ends the session, freeing all used resources. +Ends the session, freeing all used resources. It is important +to use this function even if your process exits right away, +because wpactrl_end() will also delete entries in +the filesystem.

Low-level command sending

diff --git a/src/include/bcnm/wpactrl.h b/src/include/bcnm/wpactrl.h index 102c063..a81385e 100644 --- a/src/include/bcnm/wpactrl.h +++ b/src/include/bcnm/wpactrl.h @@ -47,8 +47,9 @@ struct wpactrl_s size_t datahead ; stralloc data ; stralloc filters ; + stralloc clientpath ; } ; -#define WPACTRL_ZERO { -1, -1, 0, TAIN_ZERO, 0, STRALLOC_ZERO, STRALLOC_ZERO } +#define WPACTRL_ZERO { -1, -1, 0, TAIN_ZERO, 0, STRALLOC_ZERO, STRALLOC_ZERO, STRALLOC_ZERO } #define WPACTRL_OPTION_NOFILTER 0x0001U diff --git a/src/libwpactrl/wpactrl_end.c b/src/libwpactrl/wpactrl_end.c index a14b6c8..41ea81a 100644 --- a/src/libwpactrl/wpactrl_end.c +++ b/src/libwpactrl/wpactrl_end.c @@ -1,14 +1,21 @@ /* ISC license. */ +#include #include #include + #include void wpactrl_end (wpactrl_t *a) { + a->clientpath.s[a->clientpath.len - 2] = 's' ; + unlink_void(a->clientpath.s) ; + a->clientpath.s[a->clientpath.len - 2] = 'a' ; + unlink_void(a->clientpath.s) ; fd_close(a->fda) ; fd_close(a->fds) ; stralloc_free(&a->filters) ; stralloc_free(&a->data) ; + stralloc_free(&a->clientpath) ; *a = wpactrl_zero ; } diff --git a/src/libwpactrl/wpactrl_start.c b/src/libwpactrl/wpactrl_start.c index a3e5331..df2b480 100644 --- a/src/libwpactrl/wpactrl_start.c +++ b/src/libwpactrl/wpactrl_start.c @@ -18,14 +18,13 @@ int wpactrl_start (wpactrl_t *a, char const *path, unsigned int timeout, tain_t { tain_t tto, deadline ; int fda, fds ; - size_t pos ; stralloc sa = STRALLOC_ZERO ; if (timeout) tain_from_millisecs(&tto, timeout) ; else tto = tain_infinite_relative ; if (!stralloc_cats(&sa, BCNM_TMPDIR)) return 0 ; - if (!stralloc_cats(&sa, "/clientfds")) goto err ; - pos = sa.len - 1 ; - if (!sauniquename(&sa) || !stralloc_0(&sa)) goto err ; + if (!stralloc_cats(&sa, "/libwpactrl") + || !sauniquename(&sa) + || !stralloc_catb(&sa, ":s", 3)) goto err ; fds = ipc_datagram_nbcoe() ; if (fds < 0) goto err ; unlink_void(sa.s) ; @@ -34,7 +33,7 @@ int wpactrl_start (wpactrl_t *a, char const *path, unsigned int timeout, tain_t || !ipc_timed_connect(fds, path, &deadline, stamp)) goto errs ; fda = ipc_datagram_nbcoe() ; if (fda < 0) goto errs ; - sa.s[pos] = 'a' ; + sa.s[sa.len - 2] = 'a' ; unlink_void(sa.s) ; if (ipc_bind(fda, sa.s) == -1 || !ipc_timed_connect(fda, path, &deadline, stamp) @@ -45,7 +44,9 @@ int wpactrl_start (wpactrl_t *a, char const *path, unsigned int timeout, tain_t r = wpactrl_fd_timed_recv(fda, answer, 3, &deadline, stamp) ; if (r != 3 || memcmp(answer, "OK\n", 3)) goto erra ; } - stralloc_free(&sa) ; + if (!stralloc_shrink(&sa)) goto erra ; + + a->clientpath = sa ; a->fds = fds ; a->fda = fda ; a->tto = tto ; -- cgit 1.4.1