⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plutomain.c

📁 This a good VPN source
💻 C
📖 第 1 页 / 共 2 页
字号:
		    || count < -1)                    usage("<interval-time> must be a positive number, 0 or -1");                nhelpers = count;            }	    continue;	case 'd':	/* --nofork*/	    fork_desired = FALSE;	    continue;	case 'e':	/* --stderrlog */	    log_to_stderr_desired = TRUE;	    continue;	case 'n':	/* --noklips */	    no_klips = TRUE;	    continue;	case 'c':	/* --nocrsend */	    no_cr_send = TRUE;	    continue	    ;	case 'r':	/* --strictcrlpolicy */	    strict_crl_policy = TRUE;	    continue	    ;	case 'R':	    no_retransmits = TRUE;	    continue;	case 'x':	/* --crlcheckinterval <time>*/            if (optarg == NULL || !isdigit(optarg[0]))                usage("missing interval time");            {                char *endptr;                long interval = strtol(optarg, &endptr, 0);                if (*endptr != '\0' || endptr == optarg                || interval <= 0)                    usage("<interval-time> must be a positive number");                crl_check_interval = interval;            }	    continue	    ;	case 'o':	/* --ocspuri */	    ocspuri = optarg;	    continue;	case 'u':	/* --uniqueids */	    uniqueIDs = TRUE;	    continue;	case 'i':	/* --interface <ifname> */	    if (!use_interface(optarg))		usage("too many --interface specifications");	    continue;	case 'p':	/* --port <portnumber> */	    if (optarg == NULL || !isdigit(optarg[0]))		usage("missing port number");	    {		char *endptr;		long port = strtol(optarg, &endptr, 0);		if (*endptr != '\0' || endptr == optarg		|| port <= 0 || port > 0x10000)		    usage("<port-number> must be a number between 1 and 65535");		pluto_port = port;	    }	    continue;	case 'b':	/* --ctlbase <path> */	    if (snprintf(ctl_addr.sun_path, sizeof(ctl_addr.sun_path)	    , "%s%s", optarg, CTL_SUFFIX) == -1)		usage("<path>" CTL_SUFFIX " too long for sun_path");	    if (snprintf(info_addr.sun_path, sizeof(info_addr.sun_path)	    , "%s%s", optarg, INFO_SUFFIX) == -1)		usage("<path>" INFO_SUFFIX " too long for sun_path");	    if (snprintf(pluto_lock, sizeof(pluto_lock)	    , "%s%s", optarg, LOCK_SUFFIX) == -1)		usage("<path>" LOCK_SUFFIX " must fit");	    continue;	case 's':	/* --secretsfile <secrets-file> */	    shared_secrets_file = optarg;	    continue;	case 'f':	/* --ipsecdir <ipsec-dir> */	    ipsec_dir = optarg;	    continue;	case 'a':	/* --adns <pathname> */	    pluto_adns_option = optarg;	    continue;#ifdef DEBUG	case 'N':	/* --debug-none */	    base_debugging = DBG_NONE;	    continue;	case 'A':	/* --debug-all */	    base_debugging = DBG_ALL;	    continue;#endif	case 'P':       /* --perpeerlogbase */	    base_perpeer_logdir = optarg;	    continue;	case 'l':	    log_to_perpeer = TRUE;	    continue;#ifdef NAT_TRAVERSAL	case '1':	/* --nat_traversal */	    nat_traversal = TRUE;	    continue;	case '2':	/* --keep_alive */	    keep_alive = atoi(optarg);	    continue;	case '3':	/* --force_keepalive */	    force_keepalive = TRUE;	    continue;	case '4':	/* --disable_port_floating */	    nat_t_spf = FALSE;	    continue;	case '5':	/* --debug-nat_t */	    base_debugging |= DBG_NATT;	    continue;#endif#ifdef VIRTUAL_IP	case '6':	/* --virtual_private */	    virtual_private = optarg;	    continue;#endif	default:#ifdef DEBUG	    if (c >= DBG_OFFSET)	    {		base_debugging |= c - DBG_OFFSET;		continue;	    }#	undef DBG_OFFSET#endif	    bad_case(c);	}	break;    }    if (optind != argc)	usage("unexpected argument");    reset_debugging();    /* if a core dir was set, chdir there */    if(coredir) {	chdir(coredir);    }    lockfd = create_lock();    /* select between logging methods */    if (log_to_stderr_desired)	log_to_syslog = FALSE;    else	log_to_stderr = FALSE;    /* set the logging function of pfkey debugging */#ifdef DEBUG    pfkey_debug_func = DBG_log;    pfkey_error_func = DBG_log;#else    pfkey_debug_func = NULL;    pfkey_error_func = NULL;#endif    /** create control socket.     * We must create it before the parent process returns so that     * there will be no race condition in using it.  The easiest     * place to do this is before the daemon fork.     */    {	err_t ugh = init_ctl_socket();	if (ugh != NULL)	{	    fprintf(stderr, "pluto: %s", ugh);	    exit_pluto(1);	}    }#ifdef IPSECPOLICY    /* create info socket. */    {	err_t ugh = init_info_socket();	if (ugh != NULL)	{	    fprintf(stderr, "pluto: %s", ugh);	    exit_pluto(1);	}    }#endif    /* If not suppressed, do daemon fork */    if (fork_desired)    {	{	    pid_t pid = fork();	    if (pid < 0)	    {		int e = errno;		fprintf(stderr, "pluto: fork failed (%d %s)\n",		    errno, strerror(e));		exit_pluto(1);	    }	    if (pid != 0)	    {		/* parent: die, after filling PID into lock file.		 * must not use exit_pluto: lock would be removed!		 */		exit(fill_lock(lockfd, pid)? 0 : 1);	    }	}	if (setsid() < 0)	{	    int e = errno;	    fprintf(stderr, "setsid() failed in main(). Errno %d: %s\n",		errno, strerror(e));	    exit_pluto(1);	}    }    else    {	/* no daemon fork: we have to fill in lock file */	(void) fill_lock(lockfd, getpid());	fprintf(stdout, "Pluto initialized\n");	fflush(stdout);    }    /** Close everything but ctl_fd and (if needed) stderr.     * There is some danger that a library that we don't know     * about is using some fd that we don't know about.     * I guess we'll soon find out.     */    {	int i;	for (i = getdtablesize() - 1; i >= 0; i--)  /* Bad hack */	    if ((!log_to_stderr || i != 2)#ifdef IPSECPOLICY	    && i != info_fd#endif	    && i != ctl_fd)		close(i);	/* make sure that stdin, stdout, stderr are reserved */	if (open("/dev/null", O_RDONLY) != 0)	    abort();	if (dup2(0, 1) != 1)	    abort();	if (!log_to_stderr && dup2(0, 2) != 2)	    abort();    }    init_constants();    pluto_init_log();    /* Note: some scripts may look for this exact message -- don't change     * ipsec barf was one, but it no longer does.     */    {#ifdef PLUTO_SENDS_VENDORID        const char *v = init_pluto_vendorid();        openswan_log("Starting Pluto (Openswan Version %s%s; Vendor ID %s)"            , ipsec_version_code()            , compile_time_interop_options            , v);#else        openswan_log("Starting Pluto (Openswan Version %s%s)"            , ipsec_version_code()            , compile_time_interop_options);#endif    }    if(coredir) {	openswan_log("core dump dir: %s", coredir);    }/** Initialize all of the various features */#ifdef NAT_TRAVERSAL    init_nat_traversal(nat_traversal, keep_alive, force_keepalive, nat_t_spf);#endif#ifdef VIRTUAL_IP    init_virtual_ip(virtual_private);#endif    init_rnd_pool();    init_secret();    init_states();    init_crypto();    init_crypto_helpers(nhelpers);    init_demux();    init_kernel();    init_adns();    init_id();#ifdef HAVE_THREADS    init_fetch();#endif    ocsp_set_default_uri(ocspuri);    /* loading X.509 CA certificates */    load_authcerts("CA cert", CA_CERT_PATH, AUTH_CA);    /* loading X.509 AA certificates */    load_authcerts("AA cert", AA_CERT_PATH, AUTH_AA);    /* loading X.509 OCSP certificates */    load_authcerts("OCSP cert", OCSP_CERT_PATH, AUTH_OCSP);    /* loading X.509 CRLs */    load_crls();    /* loading attribute certificates (experimental) */    load_acerts();    daily_log_event();    call_server();    return -1;	/* Shouldn't ever reach this */}/* leave pluto, with status. * Once child is launched, parent must not exit this way because * the lock would be released. * *  0 OK *  1 general discomfort * 10 lock file exists */voidexit_pluto(int status){    reset_globals();	/* needed because we may be called in odd state */    free_preshared_secrets();    free_remembered_public_keys();    delete_every_connection();    /* free memory allocated by initialization routines.  Please don't       forget to do this. */#ifdef HAVE_THREADS    free_crl_fetch();          /* free chain of crl fetch requests */#endif#ifdef HAVE_OCSP    free_ocsp_fetch();         /* free chain of ocsp fetch requests */#endif    free_authcerts();          /* free chain of X.509 authority certificates */    free_crls();               /* free chain of X.509 CRLs */    free_acerts();             /* free chain of X.509 attribute certificates */    free_ocsp();               /* free ocsp cache */    free_ifaces();          /* free interface list from memory */    stop_adns();            /* Stop async DNS process (if running) */    free_md_pool();         /* free the md pool */    delete_lock();          /* delete any lock files */#ifdef LEAK_DETECTIVE    report_leaks();         /* report memory leaks now, after all free()s */#endif /* LEAK_DETECTIVE */    close_log();            /* close the logfiles */    exit(status);           /* exit, with our error code */}/* * Local Variables: * c-basic-offset:4 * c-style: pluto * End: */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -