summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLaurent Bercot <ska-skaware@skarnet.org>2019-11-17 14:27:09 +0000
committerLaurent Bercot <ska-skaware@skarnet.org>2019-11-17 14:27:09 +0000
commitec17a98d42d8f90d8cbefb01943562a63f2e74d5 (patch)
tree511cbe97adce96983935c4cea14a067cc66ddce5 /src
parent29c3282e7c73474642dc48d60ef90d79385c2a1b (diff)
downloadbcnm-ec17a98d42d8f90d8cbefb01943562a63f2e74d5.tar.xz
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
Diffstat (limited to 'src')
-rw-r--r--src/include/bcnm/wpactrl.h3
-rw-r--r--src/libwpactrl/wpactrl_end.c7
-rw-r--r--src/libwpactrl/wpactrl_start.c13
3 files changed, 16 insertions, 7 deletions
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 <skalibs/posixplz.h>
#include <skalibs/stralloc.h>
#include <skalibs/djbunix.h>
+
#include <bcnm/wpactrl.h>
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 ;