File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / ntp / ntpd / cmd_args.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:08:38 2012 UTC (12 years, 5 months ago) by misho
Branches: ntp, MAIN
CVS tags: v4_2_6p5p0, v4_2_6p5, HEAD
ntp 4.2.6p5

    1: /*
    2:  * cmd_args.c = command-line argument processing
    3:  */
    4: #ifdef HAVE_CONFIG_H
    5: # include <config.h>
    6: #endif
    7: 
    8: #include "ntpd.h"
    9: #include "ntp_stdlib.h"
   10: #include "ntp_cmdargs.h"
   11: 
   12: #include "ntpd-opts.h"
   13: 
   14: /*
   15:  * Definitions of things either imported from or exported to outside
   16:  */
   17: extern char const *progname;
   18: extern const char *specific_interface;
   19: 
   20: #ifdef HAVE_NETINFO
   21: extern int	check_netinfo;
   22: #endif
   23: 
   24: 
   25: /*
   26:  * getCmdOpts - get command line options
   27:  */
   28: void
   29: getCmdOpts(
   30: 	int argc,
   31: 	char *argv[]
   32: 	)
   33: {
   34: 	extern const char *config_file;
   35: 	int errflg;
   36: 	tOptions *myOptions = &ntpdOptions;
   37: 
   38: 	/*
   39: 	 * Initialize, initialize
   40: 	 */
   41: 	errflg = 0;
   42: 
   43: 	if (ipv4_works && ipv6_works) {
   44: 		if (HAVE_OPT( IPV4 ))
   45: 			ipv6_works = 0;
   46: 		else if (HAVE_OPT( IPV6 ))
   47: 			ipv4_works = 0;
   48: 	} else if (!ipv4_works && !ipv6_works) {
   49: 		msyslog(LOG_ERR, "Neither IPv4 nor IPv6 networking detected, fatal.");
   50: 		exit(1);
   51: 	} else if (HAVE_OPT( IPV4 ) && !ipv4_works)
   52: 		msyslog(LOG_WARNING, "-4/--ipv4 ignored, IPv4 networking not found.");
   53: 	else if (HAVE_OPT( IPV6 ) && !ipv6_works)
   54: 		msyslog(LOG_WARNING, "-6/--ipv6 ignored, IPv6 networking not found.");
   55: 
   56: 	if (HAVE_OPT( AUTHREQ ))
   57: 		proto_config(PROTO_AUTHENTICATE, 1, 0., NULL);
   58: 	else if (HAVE_OPT( AUTHNOREQ ))
   59: 		proto_config(PROTO_AUTHENTICATE, 0, 0., NULL);
   60: 
   61: 	if (HAVE_OPT( BCASTSYNC ))
   62: 		proto_config(PROTO_BROADCLIENT, 1, 0., NULL);
   63: 
   64: 	if (HAVE_OPT( CONFIGFILE )) {
   65: 		config_file = OPT_ARG( CONFIGFILE );
   66: #ifdef HAVE_NETINFO
   67: 		check_netinfo = 0;
   68: #endif
   69: 	}
   70: 
   71: 	if (HAVE_OPT( DRIFTFILE ))
   72: 		stats_config(STATS_FREQ_FILE, OPT_ARG( DRIFTFILE ));
   73: 
   74: 	if (HAVE_OPT( PANICGATE ))
   75: 		allow_panic = TRUE;
   76: 
   77: #ifdef HAVE_DROPROOT
   78: 	if (HAVE_OPT( JAILDIR )) {
   79: 		droproot = 1;
   80: 		chrootdir = OPT_ARG( JAILDIR );
   81: 	}
   82: #endif
   83: 
   84: 	if (HAVE_OPT( KEYFILE ))
   85: 		getauthkeys(OPT_ARG( KEYFILE ));
   86: 
   87: 	if (HAVE_OPT( PIDFILE ))
   88: 		stats_config(STATS_PID_FILE, OPT_ARG( PIDFILE ));
   89: 
   90: 	if (HAVE_OPT( QUIT ))
   91: 		mode_ntpdate = TRUE;
   92: 
   93: 	if (HAVE_OPT( PROPAGATIONDELAY ))
   94: 		do {
   95: 			double tmp;
   96: 			const char *my_ntp_optarg = OPT_ARG( PROPAGATIONDELAY );
   97: 
   98: 			if (sscanf(my_ntp_optarg, "%lf", &tmp) != 1) {
   99: 				msyslog(LOG_ERR,
  100: 					"command line broadcast delay value %s undecodable",
  101: 					my_ntp_optarg);
  102: 			} else {
  103: 				proto_config(PROTO_BROADDELAY, 0, tmp, NULL);
  104: 			}
  105: 		} while (0);
  106: 
  107: 	if (HAVE_OPT( STATSDIR ))
  108: 		stats_config(STATS_STATSDIR, OPT_ARG( STATSDIR ));
  109: 
  110: 	if (HAVE_OPT( TRUSTEDKEY )) {
  111: 		int		ct = STACKCT_OPT(  TRUSTEDKEY );
  112: 		const char**	pp = STACKLST_OPT( TRUSTEDKEY );
  113: 
  114: 		do  {
  115: 			u_long tkey;
  116: 			const char* p = *pp++;
  117: 
  118: 			tkey = (int)atol(p);
  119: 			if (tkey == 0 || tkey > NTP_MAXKEY) {
  120: 				msyslog(LOG_ERR,
  121: 				    "command line trusted key %s is invalid",
  122: 				    p);
  123: 			} else {
  124: 				authtrust(tkey, 1);
  125: 			}
  126: 		} while (--ct > 0);
  127: 	}
  128: 
  129: #ifdef HAVE_DROPROOT
  130: 	if (HAVE_OPT( USER )) {
  131: 		droproot = 1;
  132: 		user = estrdup(OPT_ARG( USER ));
  133: 		group = rindex(user, ':');
  134: 		if (group)
  135: 			*group++ = '\0'; /* get rid of the ':' */
  136: 	}
  137: #endif
  138: 
  139: 	if (HAVE_OPT( VAR )) {
  140: 		int		ct = STACKCT_OPT(  VAR );
  141: 		const char**	pp = STACKLST_OPT( VAR );
  142: 
  143: 		do  {
  144: 			const char* my_ntp_optarg = *pp++;
  145: 
  146: 			set_sys_var(my_ntp_optarg, strlen(my_ntp_optarg)+1,
  147: 			    (u_short) (RW));
  148: 		} while (--ct > 0);
  149: 	}
  150: 
  151: 	if (HAVE_OPT( DVAR )) {
  152: 		int		ct = STACKCT_OPT(  DVAR );
  153: 		const char**	pp = STACKLST_OPT( DVAR );
  154: 
  155: 		do  {
  156: 			const char* my_ntp_optarg = *pp++;
  157: 
  158: 			set_sys_var(my_ntp_optarg, strlen(my_ntp_optarg)+1,
  159: 			    (u_short) (RW | DEF));
  160: 		} while (--ct > 0);
  161: 	}
  162: 
  163: 	if (HAVE_OPT( SLEW )) {
  164: 		clock_max = 600;
  165: 		kern_enable = 0;
  166: 	}
  167: 	if (HAVE_OPT( UPDATEINTERVAL )) {
  168: 		long val = OPT_VALUE_UPDATEINTERVAL;
  169: 			  
  170: 		if (val >= 0)
  171: 			interface_interval = val;
  172: 		else {
  173: 			fprintf(stderr, 
  174: 				"command line interface update interval %ld must not be negative\n",
  175: 				val);
  176: 			msyslog(LOG_ERR, 
  177: 				"command line interface update interval %ld must not be negative",
  178: 				val);
  179: 			errflg++;
  180: 		}
  181: 	}
  182: #ifdef SIM
  183: 
  184: 	/* SK:
  185: 	 * The simulator no longer takes any command line arguments. Hence,
  186: 	 * all the code that was here has been removed.
  187: 	 */
  188: 
  189: #endif /* SIM */
  190: 
  191: 	if (errflg || argc) {
  192: 		if (argc)
  193: 			fprintf(stderr, "argc after processing is <%d>\n", argc);
  194: 		optionUsage(myOptions, 2);
  195: 	}
  196: 	return;
  197: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>