From: Harlan Stenn Date: Tue, 16 Sep 2008 07:34:05 +0000 (-0400) Subject: Add options processing to ntpsnmpd. X-Git-Tag: NTP_4_2_5P133~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=81153ffe0cc9223490d441d12c17919e7b0f6490;p=thirdparty%2Fntp.git Add options processing to ntpsnmpd. bk: 48cf616dvkSDWW2z4RA_xdtNwhshPQ --- diff --git a/.point-changed-filelist b/.point-changed-filelist index 254814b39..575faf5bb 100644 --- a/.point-changed-filelist +++ b/.point-changed-filelist @@ -11,6 +11,10 @@ ntpq/ntpq-opts.c ntpq/ntpq-opts.h ntpq/ntpq-opts.texi ntpq/ntpq.1 +ntpsnmpd/ntpsnmpd-opts.c +ntpsnmpd/ntpsnmpd-opts.h +ntpsnmpd/ntpsnmpd-opts.texi +ntpsnmpd/ntpsnmpd.1 packageinfo.sh sntp/sntp-opts.c sntp/sntp-opts.h diff --git a/ChangeLog b/ChangeLog index 736b904d5..68fd31546 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,4 @@ +* Add options processing to ntpsnmpd. * [Bug 1062] Check net-snmp headers before deciding to build ntpsnmpd. * Clean up the libntpq.a build. * Regenerate ntp_parser.[ch] from ntp_parser.y diff --git a/ntpsnmpd/Makefile.am b/ntpsnmpd/Makefile.am index 4e8035722..d3681e093 100644 --- a/ntpsnmpd/Makefile.am +++ b/ntpsnmpd/Makefile.am @@ -1,9 +1,32 @@ AUTOMAKE_OPTIONS= sbin_PROGRAMS= ntpsnmpd -ntpsnmpd_SOURCES= ntpsnmpd.c ntpSnmpSubagentObject.c +ntpsnmpd_SOURCES= ntpsnmpd.c ntpSnmpSubagentObject.c \ + ntpsnmpd-opts.c ntpsnmpd-opts.h noinst_HEADERS= ntpSnmpSubagentObject.h # HMS: we probably want a version.o file here, too. -LDADD= ../ntpq/libntpq.a ../libntp/libntp.a @SNMP_LIBS@ -AM_CPPFLAGS= -I$(top_srcdir)/ntpq -I$(top_srcdir)/include @SNMP_CPPFLAGS@ +LDADD= ../ntpq/libntpq.a ../libntp/libntp.a @SNMP_LIBS@ \ + $(LIBOPTS_LDADD) +AM_CPPFLAGS= -I$(top_srcdir)/ntpq -I$(top_srcdir)/include @SNMP_CPPFLAGS@ \ + $(LIBOPTS_CFLAGS) AM_CFLAGS= @SNMP_CFLAGS@ +EXTRA_DIST= ntpsnmpd-opts.def ntpsnmpd.1 ntpsnmpd-opts.texi ntpsnmpd-opts.menu +BUILT_SOURCES= ntpsnmpd-opts.c ntpsnmpd-opts.h ntpsnmpd.1 ntpsnmpd-opts.texi ntpsnmpd-opts.menu +man_MANS= ntpsnmpd.1 +run_ag= cd $(srcdir) && autogen -L ../include --writable +std_def_list= $(top_srcdir)/include/debug-opt.def \ + $(top_srcdir)/include/autogen-version.def \ + $(top_srcdir)/include/copyright.def \ + $(top_srcdir)/include/homerc.def \ + $(top_srcdir)/include/version.def + +$(srcdir)/ntpsnmpd-opts.h: $(srcdir)/ntpsnmpd-opts.c +$(srcdir)/ntpsnmpd-opts.c: $(srcdir)/ntpsnmpd-opts.def $(std_def_list) + $(run_ag) ntpsnmpd-opts.def + +$(srcdir)/ntpsnmpd.1: $(srcdir)/ntpsnmpd-opts.def $(std_def_list) + $(run_ag) -Tagman1.tpl -bntpsnmpd ntpsnmpd-opts.def + +$(srcdir)/ntpsnmpd-opts.texi $(srcdir)/ntpsnmpd-opts.menu: $(srcdir)/ntpsnmpd-opts.def $(std_def_list) + $(run_ag) -Taginfo.tpl -DLEVEL=section ntpsnmpd-opts.def + diff --git a/ntpsnmpd/ntpsnmpd-opts.c b/ntpsnmpd/ntpsnmpd-opts.c new file mode 100644 index 000000000..fa3edeaa6 --- /dev/null +++ b/ntpsnmpd/ntpsnmpd-opts.c @@ -0,0 +1,398 @@ +/* + * EDIT THIS FILE WITH CAUTION (ntpsnmpd-opts.c) + * + * It has been AutoGen-ed Tuesday September 16, 2008 at 03:27:52 AM EDT + * From the definitions ntpsnmpd-opts.def + * and the template file options + * + * Generated from AutoOpts 29:0:4 templates. + */ + +/* + * This file was produced by an AutoOpts template. AutoOpts is a + * copyrighted work. This source file is not encumbered by AutoOpts + * licensing, but is provided under the licensing terms chosen by the + * ntpsnmpd author or copyright holder. AutoOpts is licensed under + * the terms of the LGPL. The redistributable library (``libopts'') is + * licensed under the terms of either the LGPL or, at the users discretion, + * the BSD license. See the AutoOpts and/or libopts sources for details. + * + * This source file is copyrighted and licensed under the following terms: + * + * ntpsnmpd copyright 1970-2008 David L. Mills and/or others - all rights reserved + * + * see html/copyright.html + */ + + +#include + +#define OPTION_CODE_COMPILE 1 +#include "ntpsnmpd-opts.h" + +#ifdef __cplusplus +extern "C" { +#endif +tSCC zCopyright[] = + "ntpsnmpd copyright (c) 1970-2008 David L. Mills and/or others, all rights reserved"; +tSCC zCopyrightNotice[] = + +/* extracted from ../include/copyright.def near line 8 */ +"see html/copyright.html"; +extern tUsageProc optionUsage; + +#ifndef NULL +# define NULL 0 +#endif +#ifndef EXIT_SUCCESS +# define EXIT_SUCCESS 0 +#endif +#ifndef EXIT_FAILURE +# define EXIT_FAILURE 1 +#endif +/* + * Nofork option description: + */ +tSCC zNoforkText[] = + "Do not fork"; +tSCC zNofork_NAME[] = "NOFORK"; +tSCC zNofork_Name[] = "nofork"; +#define NOFORK_FLAGS (OPTST_DISABLED) + +/* + * Syslog option description: + */ +tSCC zSyslogText[] = + "Log to syslog()"; +tSCC zSyslog_NAME[] = "SYSLOG"; +tSCC zSyslog_Name[] = "syslog"; +#define SYSLOG_FLAGS (OPTST_DISABLED) + +/* + * Help/More_Help/Version option descriptions: + */ +tSCC zHelpText[] = "Display usage information and exit"; +tSCC zHelp_Name[] = "help"; + +tSCC zMore_HelpText[] = "Extended usage information passed thru pager"; +tSCC zMore_Help_Name[] = "more-help"; + +tSCC zVersionText[] = "Output version information and exit"; +tSCC zVersion_Name[] = "version"; + +/* + * Save/Load_Opts option description: + */ +tSCC zSave_OptsText[] = "Save the option state to a config file"; +tSCC zSave_Opts_Name[] = "save-opts"; + +tSCC zLoad_OptsText[] = "Load options from a config file"; +tSCC zLoad_Opts_NAME[] = "LOAD_OPTS"; + +tSCC zNotLoad_Opts_Name[] = "no-load-opts"; +tSCC zNotLoad_Opts_Pfx[] = "no"; +#define zLoad_Opts_Name (zNotLoad_Opts_Name + 3) +/* + * Declare option callback procedures + */ +#if defined(TEST_NTPSNMPD_OPTS) +/* + * Under test, omit argument processing, or call optionStackArg, + * if multiple copies are allowed. + */ +extern tOptProc + optionPagedUsage, optionVersionStderr; +static tOptProc + doUsageOpt; + +#else /* NOT defined TEST_NTPSNMPD_OPTS */ +/* + * When not under test, there are different procs to use + */ +extern tOptProc + optionPagedUsage, optionPrintVersion; +static tOptProc + doUsageOpt; +#endif /* defined(TEST_NTPSNMPD_OPTS) */ +#ifdef TEST_NTPSNMPD_OPTS +# define DOVERPROC optionVersionStderr +#else +# define DOVERPROC optionPrintVersion +#endif /* TEST_NTPSNMPD_OPTS */ + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * + * Define the Ntpsnmpd Option Descriptions. + */ +static tOptDesc optDesc[ OPTION_CT ] = { + { /* entry idx, value */ 0, VALUE_OPT_NOFORK, + /* equiv idx, value */ 0, VALUE_OPT_NOFORK, + /* equivalenced to */ NO_EQUIVALENT, + /* min, max, act ct */ 0, 1, 0, + /* opt state flags */ NOFORK_FLAGS, 0, + /* last opt argumnt */ { NULL }, + /* arg list/cookie */ NULL, + /* must/cannot opts */ NULL, NULL, + /* option proc */ NULL, + /* desc, NAME, name */ zNoforkText, zNofork_NAME, zNofork_Name, + /* disablement strs */ NULL, NULL }, + + { /* entry idx, value */ 1, VALUE_OPT_SYSLOG, + /* equiv idx, value */ 1, VALUE_OPT_SYSLOG, + /* equivalenced to */ NO_EQUIVALENT, + /* min, max, act ct */ 0, 1, 0, + /* opt state flags */ SYSLOG_FLAGS, 0, + /* last opt argumnt */ { NULL }, + /* arg list/cookie */ NULL, + /* must/cannot opts */ NULL, NULL, + /* option proc */ NULL, + /* desc, NAME, name */ zSyslogText, zSyslog_NAME, zSyslog_Name, + /* disablement strs */ NULL, NULL }, + +#ifdef NO_OPTIONAL_OPT_ARGS +# define VERSION_OPT_FLAGS OPTST_IMM | OPTST_NO_INIT +#else +# define VERSION_OPT_FLAGS OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \ + OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT +#endif + + { /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION, + /* equiv idx value */ NO_EQUIVALENT, 0, + /* equivalenced to */ NO_EQUIVALENT, + /* min, max, act ct */ 0, 1, 0, + /* opt state flags */ VERSION_OPT_FLAGS, 0, + /* last opt argumnt */ { NULL }, + /* arg list/cookie */ NULL, + /* must/cannot opts */ NULL, NULL, + /* option proc */ DOVERPROC, + /* desc, NAME, name */ zVersionText, NULL, zVersion_Name, + /* disablement strs */ NULL, NULL }, + +#undef VERSION_OPT_FLAGS + + + { /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP, + /* equiv idx value */ NO_EQUIVALENT, 0, + /* equivalenced to */ NO_EQUIVALENT, + /* min, max, act ct */ 0, 1, 0, + /* opt state flags */ OPTST_IMM | OPTST_NO_INIT, 0, + /* last opt argumnt */ { NULL }, + /* arg list/cookie */ NULL, + /* must/cannot opts */ NULL, NULL, + /* option proc */ doUsageOpt, + /* desc, NAME, name */ zHelpText, NULL, zHelp_Name, + /* disablement strs */ NULL, NULL }, + + { /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP, + /* equiv idx value */ NO_EQUIVALENT, 0, + /* equivalenced to */ NO_EQUIVALENT, + /* min, max, act ct */ 0, 1, 0, + /* opt state flags */ OPTST_IMM | OPTST_NO_INIT, 0, + /* last opt argumnt */ { NULL }, + /* arg list/cookie */ NULL, + /* must/cannot opts */ NULL, NULL, + /* option proc */ optionPagedUsage, + /* desc, NAME, name */ zMore_HelpText, NULL, zMore_Help_Name, + /* disablement strs */ NULL, NULL }, + + { /* entry idx, value */ INDEX_OPT_SAVE_OPTS, VALUE_OPT_SAVE_OPTS, + /* equiv idx value */ NO_EQUIVALENT, 0, + /* equivalenced to */ NO_EQUIVALENT, + /* min, max, act ct */ 0, 1, 0, + /* opt state flags */ OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) + | OPTST_ARG_OPTIONAL | OPTST_NO_INIT, 0, + /* last opt argumnt */ { NULL }, + /* arg list/cookie */ NULL, + /* must/cannot opts */ NULL, NULL, + /* option proc */ NULL, + /* desc, NAME, name */ zSave_OptsText, NULL, zSave_Opts_Name, + /* disablement strs */ NULL, NULL }, + + { /* entry idx, value */ INDEX_OPT_LOAD_OPTS, VALUE_OPT_LOAD_OPTS, + /* equiv idx value */ NO_EQUIVALENT, 0, + /* equivalenced to */ NO_EQUIVALENT, + /* min, max, act ct */ 0, NOLIMIT, 0, + /* opt state flags */ OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) \ + | OPTST_DISABLE_IMM, 0, + /* last opt argumnt */ { NULL }, + /* arg list/cookie */ NULL, + /* must/cannot opts */ NULL, NULL, + /* option proc */ optionLoadOpt, + /* desc, NAME, name */ zLoad_OptsText, zLoad_Opts_NAME, zLoad_Opts_Name, + /* disablement strs */ zNotLoad_Opts_Name, zNotLoad_Opts_Pfx } +}; + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * + * Define the Ntpsnmpd Option Environment + */ +tSCC zPROGNAME[] = "NTPSNMPD"; +tSCC zUsageTitle[] = +"ntpsnmpd - NTP SNMP MIB agent - Ver. 4.2.5p132\n\ +USAGE: %s [ - | -- ]...\n"; +tSCC zRcName[] = ".ntprc"; +tSCC* apzHomeList[] = { + "$HOME", + ".", + NULL }; + +tSCC zBugsAddr[] = "http://bugs.ntp.org, bugs@ntp.org"; +#define zExplain NULL +#define zDetail NULL +tSCC zFullVersion[] = NTPSNMPD_FULL_VERSION; +/* extracted from /usr/local/gnu/share/autogen/optcode.tpl near line 408 */ + +#if defined(ENABLE_NLS) +# define OPTPROC_BASE OPTPROC_TRANSLATE + static tOptionXlateProc translate_option_strings; +#else +# define OPTPROC_BASE OPTPROC_NONE +# define translate_option_strings NULL +#endif /* ENABLE_NLS */ + +tOptions ntpsnmpdOptions = { + OPTIONS_STRUCT_VERSION, + 0, NULL, /* original argc + argv */ + ( OPTPROC_BASE + + OPTPROC_ERRSTOP + + OPTPROC_SHORTOPT + + OPTPROC_LONGOPT + + OPTPROC_NO_REQ_OPT + + OPTPROC_ENVIRON + + OPTPROC_NO_ARGS + + OPTPROC_HAS_IMMED ), + 0, NULL, /* current option index, current option */ + NULL, NULL, zPROGNAME, + zRcName, zCopyright, zCopyrightNotice, + zFullVersion, apzHomeList, zUsageTitle, + zExplain, zDetail, optDesc, + zBugsAddr, /* address to send bugs to */ + NULL, NULL, /* extensions/saved state */ + optionUsage, /* usage procedure */ + translate_option_strings, /* translation procedure */ + /* + * Indexes to special options + */ + { INDEX_OPT_MORE_HELP, + INDEX_OPT_SAVE_OPTS, + NO_EQUIVALENT /* index of '-#' option */, + NO_EQUIVALENT /* index of default opt */ + }, + 7 /* full option count */, 2 /* user option count */ +}; + +/* + * Create the static procedure(s) declared above. + */ +static void +doUsageOpt( + tOptions* pOptions, + tOptDesc* pOptDesc ) +{ + USAGE( EXIT_SUCCESS ); +} +/* extracted from /usr/local/gnu/share/autogen/optmain.tpl near line 92 */ + +#if defined(TEST_NTPSNMPD_OPTS) /* TEST MAIN PROCEDURE: */ + +int +main( int argc, char** argv ) +{ + int res = EXIT_SUCCESS; + (void)optionProcess( &ntpsnmpdOptions, argc, argv ); + { + void optionPutShell( tOptions* ); + optionPutShell( &ntpsnmpdOptions ); + } + return res; +} +#endif /* defined TEST_NTPSNMPD_OPTS */ +/* extracted from /usr/local/gnu/share/autogen/optcode.tpl near line 514 */ + +#if ENABLE_NLS +#include +#include +#include +#include +#include + +static char* AO_gettext( char const* pz ); +static void coerce_it(void** s); + +static char* +AO_gettext( char const* pz ) +{ + char* pzRes; + if (pz == NULL) + return NULL; + pzRes = _(pz); + if (pzRes == pz) + return pzRes; + pzRes = strdup( pzRes ); + if (pzRes == NULL) { + fputs( _("No memory for duping translated strings\n"), stderr ); + exit( EXIT_FAILURE ); + } + return pzRes; +} + +static void coerce_it(void** s) { *s = AO_gettext(*s); } +#define COERSION(_f) \ + coerce_it((void*)&(ntpsnmpdOptions._f)) + +/* + * This invokes the translation code (e.g. gettext(3)). + */ +static void +translate_option_strings( void ) +{ + /* + * Guard against re-translation. It won't work. The strings will have + * been changed by the first pass through this code. One shot only. + */ + if (option_usage_text.field_ct == 0) + return; + /* + * Do the translations. The first pointer follows the field count field. + * The field count field is the size of a pointer. + */ + { + char** ppz = (char**)(void*)&(option_usage_text); + int ix = option_usage_text.field_ct; + + do { + ppz++; + *ppz = AO_gettext(*ppz); + } while (--ix > 0); + } + option_usage_text.field_ct = 0; + + { + tOptDesc* pOD = ntpsnmpdOptions.pOptDesc; + int ix = ntpsnmpdOptions.optCt; + + for (;;) { + pOD->pzText = AO_gettext(pOD->pzText); + pOD->pz_NAME = AO_gettext(pOD->pz_NAME); + pOD->pz_Name = AO_gettext(pOD->pz_Name); + pOD->pz_DisableName = AO_gettext(pOD->pz_DisableName); + pOD->pz_DisablePfx = AO_gettext(pOD->pz_DisablePfx); + if (--ix <= 0) + break; + pOD++; + } + } + COERSION(pzCopyright); + COERSION(pzCopyNotice); + COERSION(pzFullVersion); + COERSION(pzUsageTitle); + COERSION(pzExplain); + COERSION(pzDetail); +} + +#endif /* ENABLE_NLS */ + +#ifdef __cplusplus +} +#endif +/* ntpsnmpd-opts.c ends here */ diff --git a/ntpsnmpd/ntpsnmpd-opts.def b/ntpsnmpd/ntpsnmpd-opts.def new file mode 100644 index 000000000..04bb7792c --- /dev/null +++ b/ntpsnmpd/ntpsnmpd-opts.def @@ -0,0 +1,28 @@ +/* -*- Mode: Text -*- */ + +autogen definitions options; + +#include copyright.def +#include homerc.def +#include autogen-version.def + +prog-name = "ntpsnmpd"; +prog-title = "NTP SNMP MIB agent"; + +test-main; + +flag = { + name = nofork; + value = n; + descrip = "Do not fork"; + doc = <<- _EndOfDoc_ + _EndOfDoc_; +}; + +flag = { + name = syslog; + value = p; + descrip = "Log to syslog()"; + doc = <<- _EndOfDoc_ + _EndOfDoc_; +}; diff --git a/ntpsnmpd/ntpsnmpd-opts.h b/ntpsnmpd/ntpsnmpd-opts.h new file mode 100644 index 000000000..1cbc16be0 --- /dev/null +++ b/ntpsnmpd/ntpsnmpd-opts.h @@ -0,0 +1,160 @@ +/* + * EDIT THIS FILE WITH CAUTION (ntpsnmpd-opts.h) + * + * It has been AutoGen-ed Tuesday September 16, 2008 at 03:27:52 AM EDT + * From the definitions ntpsnmpd-opts.def + * and the template file options + * + * Generated from AutoOpts 29:0:4 templates. + */ + +/* + * This file was produced by an AutoOpts template. AutoOpts is a + * copyrighted work. This header file is not encumbered by AutoOpts + * licensing, but is provided under the licensing terms chosen by the + * ntpsnmpd author or copyright holder. AutoOpts is licensed under + * the terms of the LGPL. The redistributable library (``libopts'') is + * licensed under the terms of either the LGPL or, at the users discretion, + * the BSD license. See the AutoOpts and/or libopts sources for details. + * + * This source file is copyrighted and licensed under the following terms: + * + * ntpsnmpd copyright 1970-2008 David L. Mills and/or others - all rights reserved + * + * see html/copyright.html + */ +/* + * This file contains the programmatic interface to the Automated + * Options generated for the ntpsnmpd program. + * These macros are documented in the AutoGen info file in the + * "AutoOpts" chapter. Please refer to that doc for usage help. + */ +#ifndef AUTOOPTS_NTPSNMPD_OPTS_H_GUARD +#define AUTOOPTS_NTPSNMPD_OPTS_H_GUARD +#include "config.h" +#include + +/* + * Ensure that the library used for compiling this generated header is at + * least as new as the version current when the header template was released + * (not counting patch version increments). Also ensure that the oldest + * tolerable version is at least as old as what was current when the header + * template was released. + */ +#define AO_TEMPLATE_VERSION 118784 +#if (AO_TEMPLATE_VERSION < OPTIONS_MINIMUM_VERSION) \ + || (AO_TEMPLATE_VERSION > OPTIONS_STRUCT_VERSION) +# error option template version mismatches autoopts/options.h header + Choke Me. +#endif + +/* + * Enumeration of each option: + */ +typedef enum { + INDEX_OPT_NOFORK = 0, + INDEX_OPT_SYSLOG = 1, + INDEX_OPT_VERSION = 2, + INDEX_OPT_HELP = 3, + INDEX_OPT_MORE_HELP = 4, + INDEX_OPT_SAVE_OPTS = 5, + INDEX_OPT_LOAD_OPTS = 6 +} teOptIndex; + +#define OPTION_CT 7 +#define NTPSNMPD_VERSION "4.2.5p132" +#define NTPSNMPD_FULL_VERSION "ntpsnmpd - NTP SNMP MIB agent - Ver. 4.2.5p132" + +/* + * Interface defines for all options. Replace "n" with the UPPER_CASED + * option name (as in the teOptIndex enumeration above). + * e.g. HAVE_OPT( NOFORK ) + */ +#define DESC(n) (ntpsnmpdOptions.pOptDesc[INDEX_OPT_## n]) +#define HAVE_OPT(n) (! UNUSED_OPT(& DESC(n))) +#define OPT_ARG(n) (DESC(n).optArg.argString) +#define STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK) +#define COUNT_OPT(n) (DESC(n).optOccCt) +#define ISSEL_OPT(n) (SELECTED_OPT(&DESC(n))) +#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n))) +#define ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n))) +#define STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt) +#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs) +#define CLEAR_OPT(n) STMTS( \ + DESC(n).fOptState &= OPTST_PERSISTENT_MASK; \ + if ( (DESC(n).fOptState & OPTST_INITENABLED) == 0) \ + DESC(n).fOptState |= OPTST_DISABLED; \ + DESC(n).optCookie = NULL ) + +/* + * Make sure there are no #define name conflicts with the option names + */ +#ifndef NO_OPTION_NAME_WARNINGS +# ifdef NOFORK +# warning undefining NOFORK due to option name conflict +# undef NOFORK +# endif +# ifdef SYSLOG +# warning undefining SYSLOG due to option name conflict +# undef SYSLOG +# endif +#else /* NO_OPTION_NAME_WARNINGS */ +# undef NOFORK +# undef SYSLOG +#endif /* NO_OPTION_NAME_WARNINGS */ + +/* + * Interface defines for specific options. + */ +#define VALUE_OPT_NOFORK 'n' +#define VALUE_OPT_SYSLOG 'p' + +#define VALUE_OPT_VERSION INDEX_OPT_VERSION +#define VALUE_OPT_HELP '?' +#define VALUE_OPT_MORE_HELP '!' +#define VALUE_OPT_SAVE_OPTS '>' +#define VALUE_OPT_LOAD_OPTS '<' +#define SET_OPT_SAVE_OPTS(a) STMTS( \ + DESC(SAVE_OPTS).fOptState &= OPTST_PERSISTENT_MASK; \ + DESC(SAVE_OPTS).fOptState |= OPTST_SET; \ + DESC(SAVE_OPTS).optArg.argString = (char const*)(a) ) +/* + * Interface defines not associated with particular options + */ +#define ERRSKIP_OPTERR STMTS( ntpsnmpdOptions.fOptSet &= ~OPTPROC_ERRSTOP ) +#define ERRSTOP_OPTERR STMTS( ntpsnmpdOptions.fOptSet |= OPTPROC_ERRSTOP ) +#define RESTART_OPT(n) STMTS( \ + ntpsnmpdOptions.curOptIdx = (n); \ + ntpsnmpdOptions.pzCurOpt = NULL ) +#define START_OPT RESTART_OPT(1) +#define USAGE(c) (*ntpsnmpdOptions.pUsageProc)( &ntpsnmpdOptions, c ) +/* extracted from /usr/local/gnu/share/autogen/opthead.tpl near line 360 */ + +/* * * * * * + * + * Declare the ntpsnmpd option descriptor. + */ +#ifdef __cplusplus +extern "C" { +#endif + +extern tOptions ntpsnmpdOptions; + +#ifndef _ +# if ENABLE_NLS +# include + static inline char* aoGetsText( char const* pz ) { + if (pz == NULL) return NULL; + return (char*)gettext( pz ); + } +# define _(s) aoGetsText(s) +# else /* ENABLE_NLS */ +# define _(s) s +# endif /* ENABLE_NLS */ +#endif + +#ifdef __cplusplus +} +#endif +#endif /* AUTOOPTS_NTPSNMPD_OPTS_H_GUARD */ +/* ntpsnmpd-opts.h ends here */ diff --git a/ntpsnmpd/ntpsnmpd-opts.menu b/ntpsnmpd/ntpsnmpd-opts.menu new file mode 100644 index 000000000..886e80a73 --- /dev/null +++ b/ntpsnmpd/ntpsnmpd-opts.menu @@ -0,0 +1 @@ +* ntpsnmpd Invocation:: Invoking ntpsnmpd diff --git a/ntpsnmpd/ntpsnmpd-opts.texi b/ntpsnmpd/ntpsnmpd-opts.texi new file mode 100644 index 000000000..edbe2261a --- /dev/null +++ b/ntpsnmpd/ntpsnmpd-opts.texi @@ -0,0 +1,52 @@ +@node ntpsnmpd Invocation +@section Invoking ntpsnmpd +@pindex ntpsnmpd +@cindex NTP SNMP MIB agent +@ignore +# +# EDIT THIS FILE WITH CAUTION (ntpsnmpd-opts.texi) +# +# It has been AutoGen-ed Tuesday September 16, 2008 at 03:27:54 AM EDT +# From the definitions ntpsnmpd-opts.def +# and the template file aginfo.tpl +@end ignore +This program has no explanation. + + + +This section was generated by @strong{AutoGen}, +the aginfo template and the option descriptions for the @command{ntpsnmpd} program. It documents the ntpsnmpd usage text and option meanings. + +This software is released under a specialized copyright license. + +@menu +* ntpsnmpd usage:: ntpsnmpd usage help (-?) +* ntpsnmpd nofork:: nofork option (-n) +* ntpsnmpd syslog:: syslog option (-p) +@end menu + +@node ntpsnmpd usage +@subsection ntpsnmpd usage help (-?) +@cindex ntpsnmpd usage + +This is the automatically generated usage text for ntpsnmpd: + +@exampleindent 0 +@example +ntpsnmpd is unavailable - no --help +@end example +@exampleindent 4 + +@node ntpsnmpd nofork +@subsection nofork option (-n) +@cindex ntpsnmpd-nofork + +This is the ``do not fork'' option. + + +@node ntpsnmpd syslog +@subsection syslog option (-p) +@cindex ntpsnmpd-syslog + +This is the ``log to syslog()'' option. + diff --git a/ntpsnmpd/ntpsnmpd.1 b/ntpsnmpd/ntpsnmpd.1 new file mode 100644 index 000000000..aa9351bab --- /dev/null +++ b/ntpsnmpd/ntpsnmpd.1 @@ -0,0 +1,77 @@ +.TH NTPSNMPD 1 2008-09-16 "( 4.2.5p132)" "Programmer's Manual" +.\" EDIT THIS FILE WITH CAUTION (ntpsnmpd.1) +.\" +.\" It has been AutoGen-ed Tuesday September 16, 2008 at 03:27:53 AM EDT +.\" From the definitions ntpsnmpd-opts.def +.\" and the template file agman1.tpl +.\" +.SH NAME +ntpsnmpd \- NTP SNMP MIB agent +.SH SYNOPSIS +.B ntpsnmpd +.\" Mixture of short (flag) options and long options +.RB [ \-\fIflag\fP " [\fIvalue\fP]]... [" \--\fIopt-name\fP " [[=| ]\fIvalue\fP]]..." +.PP +All arguments must be options. +.SH "DESCRIPTION" +This manual page documents, briefly, the \fBntpsnmpd\fP command. +Its description is not documented. +.SH OPTIONS +.TP +.BR \-n ", " \--nofork +Do not fork. +.sp + +.TP +.BR \-p ", " \--syslog +Log to syslog(). +.sp + +.TP +.BR \-? , " \--help" +Display usage information and exit. +.TP +.BR \-! , " \--more-help" +Extended usage information passed thru pager. +.TP +.BR \-> " [\fIrcfile\fP]," " \--save-opts" "[=\fIrcfile\fP]" +Save the option state to \fIrcfile\fP. The default is the \fIlast\fP +configuration file listed in the \fBOPTION PRESETS\fP section, below. +.TP +.BR \-< " \fIrcfile\fP," " \--load-opts" "=\fIrcfile\fP," " \--no-load-opts" +Load options from \fIrcfile\fP. +The \fIno-load-opts\fP form will disable the loading +of earlier RC/INI files. \fI--no-load-opts\fP is handled early, +out of order. +.TP +.BR \- " [{\fIv|c|n\fP}]," " \--version" "[=\fI{v|c|n}\fP]" +Output version of program and exit. The default mode is `v', a simple +version. The `c' mode will print copyright information and `n' will +print the full copyright notice. +.SH OPTION PRESETS +Any option that is not marked as \fInot presettable\fP may be preset +by loading values from configuration ("RC" or ".INI") file(s) and values from +environment variables named: +.nf + \fBNTPSNMPD_\fP or \fBNTPSNMPD\fP +.fi +.aj +The environmental presets take precedence (are processed later than) +the configuration files. +The \fIhomerc\fP files are "\fI$HOME\fP", and "\fI.\fP". +If any of these are directories, then the file \fI.ntprc\fP +is searched for within those directories. +.SH AUTHOR +David L. Mills and/or others +.br +Please send bug reports to: http://bugs.ntp.org, bugs@ntp.org + +.PP +.nf +.na +see html/copyright.html +.fi +.ad +.PP +This manual page was \fIAutoGen\fP-erated from the \fBntpsnmpd\fP +option definitions. diff --git a/ntpsnmpd/ntpsnmpd.c b/ntpsnmpd/ntpsnmpd.c index a21d43027..bfc326e9d 100644 --- a/ntpsnmpd/ntpsnmpd.c +++ b/ntpsnmpd/ntpsnmpd.c @@ -20,17 +20,21 @@ * ****************************************************************************/ -#include -#include -#include #include -#include #include -#include + #ifdef SOLARIS /* needed with at least Solaris 8 */ #include #endif +#include +#include +#include +#include + +#include +#include + static int keep_running; RETSIGTYPE @@ -45,12 +49,24 @@ stop_server(int a) { int main (int argc, char **argv) { int background = 0; /* start as background process */ - int syslog = 1; /* use syslog for logging */ + int use_syslog = 1; /* use syslog for logging */ char varvalue[1024]; + { + int optct = optionProcess(&ntpsnmpdOptions, argc, argv); + argc -= optct; + argv += optct; + } + + if (!HAVE_OPT(NOFORK)) + background = 1; + + if (!HAVE_OPT(SYSLOG)) + use_syslog = 0; + /* using the net-snmp syslog facility */ - if (syslog) + if (use_syslog) snmp_enable_calllog(); else snmp_enable_stderrlog(); @@ -59,7 +75,7 @@ main (int argc, char **argv) { netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1); /* go into background mode, if requested */ - if (background && netsnmp_daemonize(1, !syslog)) + if (background && netsnmp_daemonize(1, !use_syslog)) exit(1); /* Now register with the master Agent X process */