diff options
author | Jakub Hrozek <jhrozek@redhat.com> | 2012-02-02 08:55:28 +0100 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2012-02-05 19:16:16 -0500 |
commit | 6e8238868a4d17030bb4f01494961d0354a953bf (patch) | |
tree | 5e7065d66e7423ef48cf5f7836fdaf54063f20d6 | |
parent | 2cbdd12983eb85eddb90f64cfafb24eae5b448f4 (diff) | |
download | sssd-6e8238868a4d17030bb4f01494961d0354a953bf.tar.gz sssd-6e8238868a4d17030bb4f01494961d0354a953bf.tar.bz2 sssd-6e8238868a4d17030bb4f01494961d0354a953bf.zip |
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().
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | Makefile.am | 11 | ||||
-rw-r--r-- | src/sss_client/autofs/autofs_test_client.c | 116 |
3 files changed, 128 insertions, 0 deletions
@@ -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 <jhrozek@redhat.com> + + 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 <http://www.gnu.org/licenses/>. +*/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <dlfcn.h> +#include <errno.h> +#include <popt.h> + +#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; +} |