From 6e8238868a4d17030bb4f01494961d0354a953bf Mon Sep 17 00:00:00 2001 From: Jakub Hrozek Date: Thu, 2 Feb 2012 08:55:28 +0100 Subject: AUTOFS: a command-line test client A very simply binary that can be used to test getting data from the library via SSSD in pretty much the same way SSSD would. A required positional parameter specifies the map name and the tool would print out all the key/value pairs using _sss_getautomntent_r(). You can also specify -n to query a specific key using _sss_getautomntbyname_r(). --- .gitignore | 1 + Makefile.am | 11 +++ src/sss_client/autofs/autofs_test_client.c | 116 +++++++++++++++++++++++++++++ 3 files changed, 128 insertions(+) create mode 100644 src/sss_client/autofs/autofs_test_client.c diff --git a/.gitignore b/.gitignore index dff3ae24..7510e61c 100644 --- a/.gitignore +++ b/.gitignore @@ -83,3 +83,4 @@ auth-tests check_and_open-tests sssd_sudo sss_sudo_cli +autofs_test_client diff --git a/Makefile.am b/Makefile.am index 27d17fa4..f235d39b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -845,10 +845,21 @@ noinst_PROGRAMS = pam_test_client if BUILD_SUDO noinst_PROGRAMS += sss_sudo_cli endif +if BUILD_AUTOFS +noinst_PROGRAMS += autofs_test_client +endif pam_test_client_SOURCES = src/sss_client/pam_test_client.c pam_test_client_LDFLAGS = -lpam -lpam_misc +if BUILD_AUTOFS +autofs_test_client_SOURCES = src/sss_client/autofs/autofs_test_client.c \ + src/sss_client/autofs/sss_autofs.c \ + src/sss_client/common.c +autofs_test_client_CFLAGS = $(AM_CFLAGS) +autofs_test_client_LDFLAGS = -lpopt +endif + #################### # Client Libraries # #################### diff --git a/src/sss_client/autofs/autofs_test_client.c b/src/sss_client/autofs/autofs_test_client.c new file mode 100644 index 00000000..6e95c174 --- /dev/null +++ b/src/sss_client/autofs/autofs_test_client.c @@ -0,0 +1,116 @@ +/* + Authors: + Jakub Hrozek + + Copyright (C) 2012 Red Hat + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see . +*/ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#include +#include +#include + +#include "util/util.h" +#include "sss_client/autofs/sss_autofs_private.h" + +struct automtent { + const char *mapname; + size_t cursor; +}; + +int main(int argc, const char *argv[]) +{ + void *ctx; + errno_t ret; + const char *mapname; + char *key; + char *value; + char *pc_key = NULL; + struct poptOption long_options[] = { + POPT_AUTOHELP + { "by-name", 'n', POPT_ARG_STRING, &pc_key, 0, "Request map by name", NULL }, + POPT_TABLEEND + }; + poptContext pc = NULL; + + pc = poptGetContext(NULL, argc, argv, long_options, 0); + poptSetOtherOptionHelp(pc, "MAPNAME"); + + while ((ret = poptGetNextOpt(pc)) > 0) + ; + + mapname = poptGetArg(pc); + if (mapname == NULL) { + poptPrintUsage(pc, stderr, 0); + fprintf(stderr, "Please specify the automounter map name\n"); + exit(EXIT_FAILURE); + } + + ret = _sss_setautomntent(mapname, &ctx); + if (ret) { + fprintf(stderr, "setautomntent failed [%d]: %s\n", + ret, strerror(ret)); + exit(EXIT_FAILURE); + } + printf("setautomntent done for %s\n", mapname); + + if (!pc_key) { + key = NULL; + value = NULL; + do { + ret = _sss_getautomntent_r(&key, &value, ctx); + if (ret == 0) { + printf("key: %s\t\tvalue: %s\n", key, value); + } + free(key); + free(value); + } while(ret == 0); + + if (ret != 0 && ret != ENOENT) { + fprintf(stderr, "getautomntent_r failed [%d]: %s\n", + ret, strerror(ret)); + exit(EXIT_FAILURE); + } + } else { + ret = _sss_getautomntbyname_r(pc_key, &value, ctx); + if (ret == ENOENT) { + fprintf(stderr, "no such entry in map\n"); + } else if (ret != 0) { + fprintf(stderr, "getautomntent_r failed [%d]: %s\n", + ret, strerror(ret)); + exit(EXIT_FAILURE); + } else { + printf("key: %s\t\tvalue: %s\n", pc_key, value); + } + free(value); + } + + ret = _sss_endautomntent(&ctx); + if (ret) { + fprintf(stderr, "endautomntent failed [%d]: %s\n", + ret, strerror(ret)); + exit(EXIT_FAILURE); + } + printf("endautomntent done for %s\n", mapname); + + poptFreeContext(pc); + return 0; +} -- cgit