int main(int argc, char *argv[]) { int fg = 0; int verbosity = 0; int opt; extern char *optarg; char *progname; while ((opt = getopt(argc, argv, "fvrmMp:k:d:")) != -1) { switch (opt) { case 'f': fg = 1; break; case 'M': use_memcache = 1; break; case 'v': verbosity++; break; case 'p': strlcpy(pipefs_dir, optarg, sizeof(pipefs_dir)); if (pipefs_dir[sizeof(pipefs_dir)-1] != '\0') errx(1, "pipefs path name too long"); break; case 'k': strlcpy(keytabfile, optarg, sizeof(keytabfile)); if (keytabfile[sizeof(keytabfile)-1] != '\0') errx(1, "keytab path name too long"); break; case 'd': strlcpy(ccachedir, optarg, sizeof(ccachedir)); if (ccachedir[sizeof(ccachedir)-1] != '\0') errx(1, "ccachedir path name too long"); break; default: usage(argv[0]); break; } } if ((progname = strrchr(argv[0], '/'))) progname++; else progname = argv[0]; initerr(progname, verbosity, fg); if (gssd_check_mechs() != 0) errx(1, "Problem with gssapi library"); if (gssd_get_local_realm()) errx(1, "get local realm"); if (!fg && daemon(0, 0) < 0) errx(1, "fork"); /* This should be checked _after_ daemon(), because we need to own * the undo-able semaphore by this process */ gssd_init_unique(GSSD_CLI); /* Process keytab file and get machine credentials. This will modify * disk status so do it after we are sure we are the only instance */ if (gssd_refresh_krb5_machine_creds()) return -1; signal(SIGINT, sig_die); signal(SIGTERM, sig_die); signal(SIGHUP, sig_hup); #if 0 /* Determine Kerberos information from the kernel */ gssd_obtain_kernel_krb5_info(); #endif lgssd_init_mutexs(); printerr(0, "lgssd initialized and ready to serve\n"); lgssd_run(); lgssd_cleanup(); printerr(0, "lgssd exiting\n"); return 0; }
int main(int argc, char *argv[]) { int fg = 0; int verbosity = 0; int rpc_verbosity = 0; int opt; extern char *optarg; char *progname; while ((opt = getopt(argc, argv, "fvrmp:k:d:")) != -1) { switch (opt) { case 'f': fg = 1; break; case 'm': /* Accept but ignore this. Now the default. */ break; case 'v': verbosity++; break; case 'r': rpc_verbosity++; break; case 'p': strncpy(pipefsdir, optarg, sizeof(pipefsdir)); if (pipefsdir[sizeof(pipefsdir)-1] != '\0') errx(1, "pipefs path name too long"); break; case 'k': strncpy(keytabfile, optarg, sizeof(keytabfile)); if (keytabfile[sizeof(keytabfile)-1] != '\0') errx(1, "keytab path name too long"); break; case 'd': strncpy(ccachedir, optarg, sizeof(ccachedir)); if (ccachedir[sizeof(ccachedir-1)] != '\0') errx(1, "ccachedir path name too long"); break; default: usage(argv[0]); break; } } strncat(pipefsdir + strlen(pipefsdir), "/" GSSD_SERVICE_NAME, sizeof(pipefsdir)-strlen(pipefsdir)); if (pipefsdir[sizeof(pipefsdir)-1] != '\0') errx(1, "pipefs path name too long"); 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 (gssd_check_mechs() != 0) errx(1, "Problem with gssapi library"); if (!fg && daemon(0, 0) < 0) errx(1, "fork"); signal(SIGINT, sig_die); signal(SIGTERM, sig_die); signal(SIGHUP, sig_hup); /* Process keytab file and get machine credentials */ gssd_refresh_krb5_machine_creds(); gssd_run(); printerr(0, "gssd_run returned!\n"); abort(); }