From 4969b2891f8df93f78b94dc44dbf0543465255f5 Mon Sep 17 00:00:00 2001 From: Laurent Bercot Date: Fri, 10 Sep 2021 23:29:11 +0000 Subject: Fix, test and document nsssd-switch Signed-off-by: Laurent Bercot --- src/tests/test-nsssd-switch.baseline | 8 +++- src/tests/test-nsssd-switch.c | 84 +++++++++++++++++++++++++++++++++++- src/tests/test-nsssd-switch.wrapper | 6 +-- src/tests/test-switch.wrapper | 6 +-- 4 files changed, 96 insertions(+), 8 deletions(-) mode change 120000 => 100755 src/tests/test-nsssd-switch.baseline mode change 120000 => 100644 src/tests/test-nsssd-switch.c (limited to 'src/tests') diff --git a/src/tests/test-nsssd-switch.baseline b/src/tests/test-nsssd-switch.baseline deleted file mode 120000 index 28f1c7a..0000000 --- a/src/tests/test-nsssd-switch.baseline +++ /dev/null @@ -1 +0,0 @@ -test-switch.baseline \ No newline at end of file diff --git a/src/tests/test-nsssd-switch.baseline b/src/tests/test-nsssd-switch.baseline new file mode 100755 index 0000000..31fba7e --- /dev/null +++ b/src/tests/test-nsssd-switch.baseline @@ -0,0 +1,7 @@ +#!/bin/sh -e + +cat /etc/passwd +echo +id -u root +echo +cat /etc/group diff --git a/src/tests/test-nsssd-switch.c b/src/tests/test-nsssd-switch.c deleted file mode 120000 index 08323c4..0000000 --- a/src/tests/test-nsssd-switch.c +++ /dev/null @@ -1 +0,0 @@ -test-switch.c \ No newline at end of file diff --git a/src/tests/test-nsssd-switch.c b/src/tests/test-nsssd-switch.c new file mode 100644 index 0000000..e4289e4 --- /dev/null +++ b/src/tests/test-nsssd-switch.c @@ -0,0 +1,83 @@ +/* ISC license. */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define S "./.test-nsssd-switch-socket" + +int main (void) +{ + nsss_switch_t a = NSSS_SWITCH_ZERO ; + stralloc sa = STRALLOC_ZERO ; + genalloc ga = GENALLOC_ZERO ; + tain deadline ; + PROG = "test-nsssd-switch" ; + tain_now_set_stopwatch_g() ; + tain_from_millisecs(&deadline, 10000) ; + tain_add_g(&deadline, &deadline) ; + + if (!nsss_switch_start_g(&a, NSSS_SWITCH_PWD, S, &deadline)) + strerr_diefu1sys(111, "nsss_switch_start") ; + + for (;;) + { + struct passwd pw ; + errno = 0 ; + if (!nsss_switch_pwd_get_g(&a, &pw, &sa, &deadline)) break ; + lolprintf("%s:%s:%d:%d:%s:%s:%s\n", pw.pw_name, pw.pw_passwd, (int)pw.pw_uid, (int)pw.pw_gid, pw.pw_gecos, pw.pw_dir, pw.pw_shell) ; + sa.len = 0 ; + } + if (errno) + strerr_diefu1sys(111, "nsss_switch_pwd_get") ; + if (!nsss_switch_pwd_end_g(&a, &deadline)) + strerr_diefu1sys(111, "nsss_switch_pwd_end") ; + lolprintf("\n") ; + + { + struct passwd pw ; + if (!nsss_switch_pwd_getbyname_g(&a, &pw, &sa, "root", &deadline)) + strerr_diefu1sys(111, "nsss_switch_pwd_getbyname") ; + lolprintf("%u\n\n", (unsigned int)pw.pw_uid) ; + sa.len = 0 ; + } + + if (!nsss_switch_start_g(&a, NSSS_SWITCH_GRP, S, &deadline)) + strerr_diefu1sys(111, "nsss_switch_start") ; + nsss_switch_end(&a, NSSS_SWITCH_PWD) ; + buffer_flush(buffer_1) ; + + for (;;) + { + struct group gr ; + char **p ; + errno = 0 ; + if (!nsss_switch_grp_get_g(&a, &gr, &sa, &ga, &deadline)) break ; + p = gr.gr_mem ; + lolprintf("%s:%s:%d:", gr.gr_name, gr.gr_passwd, (int)gr.gr_gid) ; + buffer_flush(buffer_1) ; + if (*p) + { + while (*p) lolprintf("%s,", *p++) ; + buffer_unput(buffer_1, 1) ; + } + buffer_put(buffer_1, "\n", 1) ; + sa.len = 0 ; + genalloc_setlen(char *, &ga, 0) ; + } + if (errno) + strerr_diefu1sys(111, "nsss_switch_grp_get") ; + if (!nsss_switch_grp_end_g(&a, &deadline)) + strerr_diefu1sys(111, "nsss_switch_grp_end") ; + nsss_switch_end(&a, NSSS_SWITCH_GRP) ; + + buffer_flush(buffer_1) ; + return 0 ; +} diff --git a/src/tests/test-nsssd-switch.wrapper b/src/tests/test-nsssd-switch.wrapper index 8e05937..509bf18 100755 --- a/src/tests/test-nsssd-switch.wrapper +++ b/src/tests/test-nsssd-switch.wrapper @@ -1,13 +1,13 @@ #!/bin/sh -e -S=./.test-switch-socket -F=./.test-switch-fifo +S=./.test-nsssd-switch-socket +F=./.test-nsssd-switch-fifo pid=0 cleanup () { kill $pid - rm -f $S + rm -f ${S} ${S}.lock } mkfifo $F diff --git a/src/tests/test-switch.wrapper b/src/tests/test-switch.wrapper index 5117400..387595f 100755 --- a/src/tests/test-switch.wrapper +++ b/src/tests/test-switch.wrapper @@ -1,4 +1,4 @@ -#!/bin/sh -e +#!/bin/sh -ex S=./.test-switch-socket F=./.test-switch-fifo @@ -7,13 +7,13 @@ pid=0 cleanup () { kill $pid - rm -f $S + rm -f ${S} ${S}.lock } mkfifo $F head -n 1 < $F >/dev/null & pid=$! -s6-ipcserver -1 -- $S ./nsssd-unix > $F & +s6-ipcserver -1 -- ${S} ./nsssd-unix > $F & wait $pid pid=$! rm -f $F -- cgit v1.3.1