X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=utils%2Fsvcgssd%2Fsvcgssd.c;fp=utils%2Fsvcgssd%2Fsvcgssd.c;h=0000000000000000000000000000000000000000;hb=4fde9011946076918021a7007408b0d9802e80d0;hp=4e0806c30a425df6f915825d469e196e2e54c2b3;hpb=9d0fbcdce0289509de015bef41ecf5d676045dc4;p=nfs-utils.git diff --git a/utils/svcgssd/svcgssd.c b/utils/svcgssd/svcgssd.c deleted file mode 100644 index 4e0806c..0000000 --- a/utils/svcgssd/svcgssd.c +++ /dev/null @@ -1,228 +0,0 @@ -/* - gssd.c - - Copyright (c) 2000 The Regents of the University of Michigan. - All rights reserved. - - Copyright (c) 2000 Dug Song . - Copyright (c) 2002 Andy Adamson . - Copyright (c) 2002 Marius Aamodt Eriksen . - Copyright (c) 2002 J. Bruce Fields . - All rights reserved, all wrongs reversed. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - 3. Neither the name of the University nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -*/ - -#include "config.h" - -#include -#include -#include -#include -#include -#include -#include - - -#include -#include -#include -#include -#include -#include -#include "nfslib.h" -#include "svcgssd.h" -#include "gss_util.h" -#include "err_util.h" - -/* - * mydaemon creates a pipe between the partent and child - * process. The parent process will wait until the - * child dies or writes a '1' on the pipe signaling - * that it started successfully. - */ -int pipefds[2] = { -1, -1}; - -static void -mydaemon(int nochdir, int noclose) -{ - int pid, status, tempfd; - - if (pipe(pipefds) < 0) { - printerr(1, "mydaemon: pipe() failed: errno %d (%s)\n", - errno, strerror(errno)); - exit(1); - } - if ((pid = fork ()) < 0) { - printerr(1, "mydaemon: fork() failed: errno %d (%s)\n", - errno, strerror(errno)); - exit(1); - } - - if (pid != 0) { - /* - * Parent. Wait for status from child. - */ - close(pipefds[1]); - if (read(pipefds[0], &status, 1) != 1) - exit(1); - exit (0); - } - /* Child. */ - close(pipefds[0]); - setsid (); - if (nochdir == 0) { - if (chdir ("/") == -1) { - printerr(1, "mydaemon: chdir() failed: errno %d (%s)\n", - errno, strerror(errno)); - exit(1); - } - } - - while (pipefds[1] <= 2) { - pipefds[1] = dup(pipefds[1]); - if (pipefds[1] < 0) { - printerr(1, "mydaemon: dup() failed: errno %d (%s)\n", - errno, strerror(errno)); - exit(1); - } - } - - if (noclose == 0) { - tempfd = open("/dev/null", O_RDWR); - dup2(tempfd, 0); - dup2(tempfd, 1); - dup2(tempfd, 2); - closeall(3); - } - - return; -} - -static void -release_parent() -{ - int status; - - if (pipefds[1] > 0) { - write(pipefds[1], &status, 1); - close(pipefds[1]); - pipefds[1] = -1; - } -} - -void -sig_die(int signal) -{ - /* destroy krb5 machine creds */ - printerr(1, "exiting on signal %d\n", signal); - exit(1); -} - -void -sig_hup(int signal) -{ - /* don't exit on SIGHUP */ - printerr(1, "Received SIGHUP... Ignoring.\n"); - return; -} - -static void -usage(char *progname) -{ - fprintf(stderr, "usage: %s [-n] [-f] [-v] [-r]\n", - progname); - exit(1); -} - -int -main(int argc, char *argv[]) -{ - int get_creds = 1; - int fg = 0; - int verbosity = 0; - int rpc_verbosity = 0; - int opt; - extern char *optarg; - char *progname; - - while ((opt = getopt(argc, argv, "fvrnp:")) != -1) { - switch (opt) { - case 'f': - fg = 1; - break; - case 'n': - get_creds = 0; - break; - case 'v': - verbosity++; - break; - case 'r': - rpc_verbosity++; - break; - default: - usage(argv[0]); - break; - } - } - - if ((progname = strrchr(argv[0], '/'))) - progname++; - else - progname = argv[0]; - - initerr(progname, verbosity, fg); -#ifdef HAVE_AUTHGSS_SET_DEBUG_LEVEL - authgss_set_debug_level(rpc_verbosity); -#else - if (rpc_verbosity > 0) - printerr(0, "Warning: rpcsec_gss library does not " - "support setting debug level\n"); -#endif - - if (!fg) - mydaemon(0, 0); - - signal(SIGINT, sig_die); - signal(SIGTERM, sig_die); - signal(SIGHUP, sig_hup); - - if (get_creds && !gssd_acquire_cred(GSSD_SERVICE_NAME)) { - printerr(0, "unable to obtain root (machine) credentials\n"); - printerr(0, "do you have a keytab entry for " - "nfs/@ in " - "/etc/krb5.keytab?\n"); - exit(1); - } - - if (!fg) - release_parent(); - - gssd_run(); - printerr(0, "gssd_run returned!\n"); - abort(); -}