1 /*	$NetBSD: ntp-keygen-opts.c,v 1.2 2010/12/04 23:08:48 christos Exp $	*/
2 
3 /*
4  *  EDIT THIS FILE WITH CAUTION  (ntp-keygen-opts.c)
5  *
6  *  It has been AutoGen-ed  December 10, 2009 at 05:08:21 AM by AutoGen 5.10
7  *  From the definitions    ntp-keygen-opts.def
8  *  and the template file   options
9  *
10  * Generated from AutoOpts 33:0:8 templates.
11  */
12 
13 /*
14  *  This file was produced by an AutoOpts template.  AutoOpts is a
15  *  copyrighted work.  This source file is not encumbered by AutoOpts
16  *  licensing, but is provided under the licensing terms chosen by the
17  *  ntp-keygen author or copyright holder.  AutoOpts is licensed under
18  *  the terms of the LGPL.  The redistributable library (``libopts'') is
19  *  licensed under the terms of either the LGPL or, at the users discretion,
20  *  the BSD license.  See the AutoOpts and/or libopts sources for details.
21  *
22  * This source file is copyrighted and licensed under the following terms:
23  *
24  * ntp-keygen copyright (c) 1970-2009 David L. Mills and/or others - all rights reserved
25  *
26  * see html/copyright.html
27  */
28 
29 #include <sys/types.h>
30 #include <limits.h>
31 #include <stdio.h>
32 #include <stdlib.h>
33 #include <errno.h>
34 extern FILE * option_usage_fp;
35 #define OPTION_CODE_COMPILE 1
36 #include "ntp-keygen-opts.h"
37 
38 #ifdef  __cplusplus
39 extern "C" {
40 #endif
41 
42 /* TRANSLATORS: choose the translation for option names wisely because you
43                 cannot ever change your mind. */
44 tSCC zCopyright[] =
45        "ntp-keygen copyright (c) 1970-2009 David L. Mills and/or others, all rights reserved"
46 /* extracted from ../include/copyright.def near line 8 */
47 ;
48 tSCC zCopyrightNotice[24] =
49 "see html/copyright.html";
50 
51 extern tUsageProc optionUsage;
52 
53 /*
54  *  global included definitions
55  */
56 #include <stdlib.h>
57 #ifdef __windows
58   extern int atoi(const char*);
59 #else
60 # include <stdlib.h>
61 #endif
62 
63 #ifndef NULL
64 #  define NULL 0
65 #endif
66 #ifndef EXIT_SUCCESS
67 #  define  EXIT_SUCCESS 0
68 #endif
69 #ifndef EXIT_FAILURE
70 #  define  EXIT_FAILURE 1
71 #endif
72 
73 /*
74  *  Certificate option description:
75  */
76 #ifdef OPENSSL
77 tSCC    zCertificateText[] =
78         "certificate scheme";
79 tSCC    zCertificate_NAME[]        = "CERTIFICATE";
80 tSCC    zCertificate_Name[]        = "certificate";
81 #define CERTIFICATE_FLAGS       (OPTST_DISABLED \
82         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
83 
84 #else   /* disable Certificate */
85 #define CERTIFICATE_FLAGS       (OPTST_OMITTED | OPTST_NO_INIT)
86 #define zCertificate_NAME      NULL
87 #define zCertificateText       NULL
88 #define zCertificate_Name      NULL
89 #endif  /* OPENSSL */
90 
91 /*
92  *  Debug_Level option description:
93  */
94 tSCC    zDebug_LevelText[] =
95         "Increase output debug message level";
96 tSCC    zDebug_Level_NAME[]        = "DEBUG_LEVEL";
97 tSCC    zDebug_Level_Name[]        = "debug-level";
98 #define DEBUG_LEVEL_FLAGS       (OPTST_DISABLED)
99 
100 /*
101  *  Set_Debug_Level option description:
102  */
103 tSCC    zSet_Debug_LevelText[] =
104         "Set the output debug message level";
105 tSCC    zSet_Debug_Level_NAME[]    = "SET_DEBUG_LEVEL";
106 tSCC    zSet_Debug_Level_Name[]    = "set-debug-level";
107 #define SET_DEBUG_LEVEL_FLAGS       (OPTST_DISABLED \
108         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
109 
110 /*
111  *  Id_Key option description:
112  */
113 #ifdef OPENSSL
114 tSCC    zId_KeyText[] =
115         "Write IFF or GQ identity keys";
116 tSCC    zId_Key_NAME[]             = "ID_KEY";
117 tSCC    zId_Key_Name[]             = "id-key";
118 #define ID_KEY_FLAGS       (OPTST_DISABLED)
119 
120 #else   /* disable Id_Key */
121 #define ID_KEY_FLAGS       (OPTST_OMITTED | OPTST_NO_INIT)
122 #define zId_Key_NAME      NULL
123 #define zId_KeyText       NULL
124 #define zId_Key_Name      NULL
125 #endif  /* OPENSSL */
126 
127 /*
128  *  Gq_Params option description:
129  */
130 #ifdef OPENSSL
131 tSCC    zGq_ParamsText[] =
132         "Generate GQ parameters and keys";
133 tSCC    zGq_Params_NAME[]          = "GQ_PARAMS";
134 tSCC    zGq_Params_Name[]          = "gq-params";
135 #define GQ_PARAMS_FLAGS       (OPTST_DISABLED)
136 
137 #else   /* disable Gq_Params */
138 #define GQ_PARAMS_FLAGS       (OPTST_OMITTED | OPTST_NO_INIT)
139 #define zGq_Params_NAME      NULL
140 #define zGq_ParamsText       NULL
141 #define zGq_Params_Name      NULL
142 #endif  /* OPENSSL */
143 
144 /*
145  *  Host_Key option description:
146  */
147 #ifdef OPENSSL
148 tSCC    zHost_KeyText[] =
149         "generate RSA host key";
150 tSCC    zHost_Key_NAME[]           = "HOST_KEY";
151 tSCC    zHost_Key_Name[]           = "host-key";
152 #define HOST_KEY_FLAGS       (OPTST_DISABLED)
153 
154 #else   /* disable Host_Key */
155 #define HOST_KEY_FLAGS       (OPTST_OMITTED | OPTST_NO_INIT)
156 #define zHost_Key_NAME      NULL
157 #define zHost_KeyText       NULL
158 #define zHost_Key_Name      NULL
159 #endif  /* OPENSSL */
160 
161 /*
162  *  Iffkey option description:
163  */
164 #ifdef OPENSSL
165 tSCC    zIffkeyText[] =
166         "generate IFF parameters";
167 tSCC    zIffkey_NAME[]             = "IFFKEY";
168 tSCC    zIffkey_Name[]             = "iffkey";
169 #define IFFKEY_FLAGS       (OPTST_DISABLED)
170 
171 #else   /* disable Iffkey */
172 #define IFFKEY_FLAGS       (OPTST_OMITTED | OPTST_NO_INIT)
173 #define zIffkey_NAME      NULL
174 #define zIffkeyText       NULL
175 #define zIffkey_Name      NULL
176 #endif  /* OPENSSL */
177 
178 /*
179  *  Issuer_Name option description:
180  */
181 #ifdef OPENSSL
182 tSCC    zIssuer_NameText[] =
183         "set issuer name";
184 tSCC    zIssuer_Name_NAME[]        = "ISSUER_NAME";
185 tSCC    zIssuer_Name_Name[]        = "issuer-name";
186 #define ISSUER_NAME_FLAGS       (OPTST_DISABLED \
187         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
188 
189 #else   /* disable Issuer_Name */
190 #define ISSUER_NAME_FLAGS       (OPTST_OMITTED | OPTST_NO_INIT)
191 #define zIssuer_Name_NAME      NULL
192 #define zIssuer_NameText       NULL
193 #define zIssuer_Name_Name      NULL
194 #endif  /* OPENSSL */
195 
196 /*
197  *  Md5key option description:
198  */
199 tSCC    zMd5keyText[] =
200         "generate MD5 keys";
201 tSCC    zMd5key_NAME[]             = "MD5KEY";
202 tSCC    zMd5key_Name[]             = "md5key";
203 #define MD5KEY_FLAGS       (OPTST_DISABLED)
204 
205 /*
206  *  Modulus option description:
207  */
208 #ifdef OPENSSL
209 tSCC    zModulusText[] =
210         "modulus";
211 tSCC    zModulus_NAME[]            = "MODULUS";
212 tSCC    zModulus_Name[]            = "modulus";
213 #define MODULUS_FLAGS       (OPTST_DISABLED \
214         | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
215 
216 #else   /* disable Modulus */
217 #define MODULUS_FLAGS       (OPTST_OMITTED | OPTST_NO_INIT)
218 #define zModulus_NAME      NULL
219 #define zModulusText       NULL
220 #define zModulus_Name      NULL
221 #endif  /* OPENSSL */
222 
223 /*
224  *  Pvt_Cert option description:
225  */
226 #ifdef OPENSSL
227 tSCC    zPvt_CertText[] =
228         "generate PC private certificate";
229 tSCC    zPvt_Cert_NAME[]           = "PVT_CERT";
230 tSCC    zPvt_Cert_Name[]           = "pvt-cert";
231 #define PVT_CERT_FLAGS       (OPTST_DISABLED)
232 
233 #else   /* disable Pvt_Cert */
234 #define PVT_CERT_FLAGS       (OPTST_OMITTED | OPTST_NO_INIT)
235 #define zPvt_Cert_NAME      NULL
236 #define zPvt_CertText       NULL
237 #define zPvt_Cert_Name      NULL
238 #endif  /* OPENSSL */
239 
240 /*
241  *  Pvt_Passwd option description:
242  */
243 #ifdef OPENSSL
244 tSCC    zPvt_PasswdText[] =
245         "output private password";
246 tSCC    zPvt_Passwd_NAME[]         = "PVT_PASSWD";
247 tSCC    zPvt_Passwd_Name[]         = "pvt-passwd";
248 #define PVT_PASSWD_FLAGS       (OPTST_DISABLED \
249         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
250 
251 #else   /* disable Pvt_Passwd */
252 #define PVT_PASSWD_FLAGS       (OPTST_OMITTED | OPTST_NO_INIT)
253 #define zPvt_Passwd_NAME      NULL
254 #define zPvt_PasswdText       NULL
255 #define zPvt_Passwd_Name      NULL
256 #endif  /* OPENSSL */
257 
258 /*
259  *  Get_Pvt_Passwd option description:
260  */
261 #ifdef OPENSSL
262 tSCC    zGet_Pvt_PasswdText[] =
263         "input private password";
264 tSCC    zGet_Pvt_Passwd_NAME[]     = "GET_PVT_PASSWD";
265 tSCC    zGet_Pvt_Passwd_Name[]     = "get-pvt-passwd";
266 #define GET_PVT_PASSWD_FLAGS       (OPTST_DISABLED \
267         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
268 
269 #else   /* disable Get_Pvt_Passwd */
270 #define GET_PVT_PASSWD_FLAGS       (OPTST_OMITTED | OPTST_NO_INIT)
271 #define zGet_Pvt_Passwd_NAME      NULL
272 #define zGet_Pvt_PasswdText       NULL
273 #define zGet_Pvt_Passwd_Name      NULL
274 #endif  /* OPENSSL */
275 
276 /*
277  *  Sign_Key option description:
278  */
279 #ifdef OPENSSL
280 tSCC    zSign_KeyText[] =
281         "generate sign key (RSA or DSA)";
282 tSCC    zSign_Key_NAME[]           = "SIGN_KEY";
283 tSCC    zSign_Key_Name[]           = "sign-key";
284 #define SIGN_KEY_FLAGS       (OPTST_DISABLED \
285         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
286 
287 #else   /* disable Sign_Key */
288 #define SIGN_KEY_FLAGS       (OPTST_OMITTED | OPTST_NO_INIT)
289 #define zSign_Key_NAME      NULL
290 #define zSign_KeyText       NULL
291 #define zSign_Key_Name      NULL
292 #endif  /* OPENSSL */
293 
294 /*
295  *  Subject_Name option description:
296  */
297 #ifdef OPENSSL
298 tSCC    zSubject_NameText[] =
299         "set subject name";
300 tSCC    zSubject_Name_NAME[]       = "SUBJECT_NAME";
301 tSCC    zSubject_Name_Name[]       = "subject-name";
302 #define SUBJECT_NAME_FLAGS       (OPTST_DISABLED \
303         | OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
304 
305 #else   /* disable Subject_Name */
306 #define SUBJECT_NAME_FLAGS       (OPTST_OMITTED | OPTST_NO_INIT)
307 #define zSubject_Name_NAME      NULL
308 #define zSubject_NameText       NULL
309 #define zSubject_Name_Name      NULL
310 #endif  /* OPENSSL */
311 
312 /*
313  *  Trusted_Cert option description:
314  */
315 #ifdef OPENSSL
316 tSCC    zTrusted_CertText[] =
317         "trusted certificate (TC scheme)";
318 tSCC    zTrusted_Cert_NAME[]       = "TRUSTED_CERT";
319 tSCC    zTrusted_Cert_Name[]       = "trusted-cert";
320 #define TRUSTED_CERT_FLAGS       (OPTST_DISABLED)
321 
322 #else   /* disable Trusted_Cert */
323 #define TRUSTED_CERT_FLAGS       (OPTST_OMITTED | OPTST_NO_INIT)
324 #define zTrusted_Cert_NAME      NULL
325 #define zTrusted_CertText       NULL
326 #define zTrusted_Cert_Name      NULL
327 #endif  /* OPENSSL */
328 
329 /*
330  *  Mv_Params option description:
331  */
332 #ifdef OPENSSL
333 tSCC    zMv_ParamsText[] =
334         "generate <num> MV parameters";
335 tSCC    zMv_Params_NAME[]          = "MV_PARAMS";
336 tSCC    zMv_Params_Name[]          = "mv-params";
337 #define MV_PARAMS_FLAGS       (OPTST_DISABLED \
338         | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
339 
340 #else   /* disable Mv_Params */
341 #define MV_PARAMS_FLAGS       (OPTST_OMITTED | OPTST_NO_INIT)
342 #define zMv_Params_NAME      NULL
343 #define zMv_ParamsText       NULL
344 #define zMv_Params_Name      NULL
345 #endif  /* OPENSSL */
346 
347 /*
348  *  Mv_Keys option description:
349  */
350 #ifdef OPENSSL
351 tSCC    zMv_KeysText[] =
352         "update <num> MV keys";
353 tSCC    zMv_Keys_NAME[]            = "MV_KEYS";
354 tSCC    zMv_Keys_Name[]            = "mv-keys";
355 #define MV_KEYS_FLAGS       (OPTST_DISABLED \
356         | OPTST_SET_ARGTYPE(OPARG_TYPE_NUMERIC))
357 
358 #else   /* disable Mv_Keys */
359 #define MV_KEYS_FLAGS       (OPTST_OMITTED | OPTST_NO_INIT)
360 #define zMv_Keys_NAME      NULL
361 #define zMv_KeysText       NULL
362 #define zMv_Keys_Name      NULL
363 #endif  /* OPENSSL */
364 
365 /*
366  *  Help/More_Help/Version option descriptions:
367  */
368 tSCC zHelpText[]          = "Display extended usage information and exit";
369 tSCC zHelp_Name[]         = "help";
370 #ifdef HAVE_WORKING_FORK
371 #define OPTST_MORE_HELP_FLAGS   (OPTST_IMM | OPTST_NO_INIT)
372 tSCC zMore_Help_Name[]    = "more-help";
373 tSCC zMore_HelpText[]     = "Extended usage information passed thru pager";
374 #else
375 #define OPTST_MORE_HELP_FLAGS   (OPTST_OMITTED | OPTST_NO_INIT)
376 #define zMore_Help_Name   NULL
377 #define zMore_HelpText    NULL
378 #endif
379 #ifdef NO_OPTIONAL_OPT_ARGS
380 #  define OPTST_VERSION_FLAGS   OPTST_IMM | OPTST_NO_INIT
381 #else
382 #  define OPTST_VERSION_FLAGS   OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \
383                                 OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT
384 #endif
385 
386 tSCC zVersionText[]       = "Output version information and exit";
387 tSCC zVersion_Name[]      = "version";
388 tSCC zSave_OptsText[]     = "Save the option state to a config file";
389 tSCC zSave_Opts_Name[]    = "save-opts";
390 tSCC zLoad_OptsText[]     = "Load options from a config file";
391 tSCC zLoad_Opts_NAME[]    = "LOAD_OPTS";
392 tSCC zNotLoad_Opts_Name[] = "no-load-opts";
393 tSCC zNotLoad_Opts_Pfx[]  = "no";
394 #define zLoad_Opts_Name   (zNotLoad_Opts_Name + 3)
395 /*
396  *  Declare option callback procedures
397  */
398 #ifdef OPENSSL
399   static tOptProc doOptModulus;
400 #else /* not OPENSSL */
401 # define doOptModulus NULL
402 #endif /* def/not OPENSSL */
403 #ifdef OPENSSL
404   extern tOptProc optionNumericVal;
405 #else /* not OPENSSL */
406 # define optionNumericVal NULL
407 #endif /* def/not OPENSSL */
408 #ifdef OPENSSL
409   extern tOptProc optionNumericVal;
410 #else /* not OPENSSL */
411 # define optionNumericVal NULL
412 #endif /* def/not OPENSSL */
413 #if defined(TEST_NTP_KEYGEN_OPTS)
414 /*
415  *  Under test, omit argument processing, or call optionStackArg,
416  *  if multiple copies are allowed.
417  */
418 extern tOptProc
419     optionNumericVal, optionPagedUsage, optionVersionStderr;
420 static tOptProc
421     doOptModulus, doUsageOpt;
422 
423 /*
424  *  #define map the "normal" callout procs to the test ones...
425  */
426 #define SET_DEBUG_LEVEL_OPT_PROC optionStackArg
427 
428 
429 #else /* NOT defined TEST_NTP_KEYGEN_OPTS */
430 /*
431  *  When not under test, there are different procs to use
432  */
433 extern tOptProc
434     optionPagedUsage, optionPrintVersion;
435 static tOptProc
436     doOptSet_Debug_Level, doUsageOpt;
437 
438 /*
439  *  #define map the "normal" callout procs
440  */
441 #define SET_DEBUG_LEVEL_OPT_PROC doOptSet_Debug_Level
442 
443 #define SET_DEBUG_LEVEL_OPT_PROC doOptSet_Debug_Level
444 #endif /* defined(TEST_NTP_KEYGEN_OPTS) */
445 #ifdef TEST_NTP_KEYGEN_OPTS
446 # define DOVERPROC optionVersionStderr
447 #else
448 # define DOVERPROC optionPrintVersion
449 #endif /* TEST_NTP_KEYGEN_OPTS */
450 
451 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
452  *
453  *  Define the Ntp_Keygen Option Descriptions.
454  */
455 static tOptDesc optDesc[ OPTION_CT ] = {
456   {  /* entry idx, value */ 0, VALUE_OPT_CERTIFICATE,
457      /* equiv idx, value */ 0, VALUE_OPT_CERTIFICATE,
458      /* equivalenced to  */ NO_EQUIVALENT,
459      /* min, max, act ct */ 0, 1, 0,
460      /* opt state flags  */ CERTIFICATE_FLAGS, 0,
461      /* last opt argumnt */ { NULL },
462      /* arg list/cookie  */ NULL,
463      /* must/cannot opts */ NULL, NULL,
464      /* option proc      */ NULL,
465      /* desc, NAME, name */ zCertificateText, zCertificate_NAME, zCertificate_Name,
466      /* disablement strs */ NULL, NULL },
467 
468   {  /* entry idx, value */ 1, VALUE_OPT_DEBUG_LEVEL,
469      /* equiv idx, value */ 1, VALUE_OPT_DEBUG_LEVEL,
470      /* equivalenced to  */ NO_EQUIVALENT,
471      /* min, max, act ct */ 0, NOLIMIT, 0,
472      /* opt state flags  */ DEBUG_LEVEL_FLAGS, 0,
473      /* last opt argumnt */ { NULL },
474      /* arg list/cookie  */ NULL,
475      /* must/cannot opts */ NULL, NULL,
476      /* option proc      */ NULL,
477      /* desc, NAME, name */ zDebug_LevelText, zDebug_Level_NAME, zDebug_Level_Name,
478      /* disablement strs */ NULL, NULL },
479 
480   {  /* entry idx, value */ 2, VALUE_OPT_SET_DEBUG_LEVEL,
481      /* equiv idx, value */ 2, VALUE_OPT_SET_DEBUG_LEVEL,
482      /* equivalenced to  */ NO_EQUIVALENT,
483      /* min, max, act ct */ 0, NOLIMIT, 0,
484      /* opt state flags  */ SET_DEBUG_LEVEL_FLAGS, 0,
485      /* last opt argumnt */ { NULL },
486      /* arg list/cookie  */ NULL,
487      /* must/cannot opts */ NULL, NULL,
488      /* option proc      */ SET_DEBUG_LEVEL_OPT_PROC,
489      /* desc, NAME, name */ zSet_Debug_LevelText, zSet_Debug_Level_NAME, zSet_Debug_Level_Name,
490      /* disablement strs */ NULL, NULL },
491 
492   {  /* entry idx, value */ 3, VALUE_OPT_ID_KEY,
493      /* equiv idx, value */ 3, VALUE_OPT_ID_KEY,
494      /* equivalenced to  */ NO_EQUIVALENT,
495      /* min, max, act ct */ 0, 1, 0,
496      /* opt state flags  */ ID_KEY_FLAGS, 0,
497      /* last opt argumnt */ { NULL },
498      /* arg list/cookie  */ NULL,
499      /* must/cannot opts */ NULL, NULL,
500      /* option proc      */ NULL,
501      /* desc, NAME, name */ zId_KeyText, zId_Key_NAME, zId_Key_Name,
502      /* disablement strs */ NULL, NULL },
503 
504   {  /* entry idx, value */ 4, VALUE_OPT_GQ_PARAMS,
505      /* equiv idx, value */ 4, VALUE_OPT_GQ_PARAMS,
506      /* equivalenced to  */ NO_EQUIVALENT,
507      /* min, max, act ct */ 0, 1, 0,
508      /* opt state flags  */ GQ_PARAMS_FLAGS, 0,
509      /* last opt argumnt */ { NULL },
510      /* arg list/cookie  */ NULL,
511      /* must/cannot opts */ NULL, NULL,
512      /* option proc      */ NULL,
513      /* desc, NAME, name */ zGq_ParamsText, zGq_Params_NAME, zGq_Params_Name,
514      /* disablement strs */ NULL, NULL },
515 
516   {  /* entry idx, value */ 5, VALUE_OPT_HOST_KEY,
517      /* equiv idx, value */ 5, VALUE_OPT_HOST_KEY,
518      /* equivalenced to  */ NO_EQUIVALENT,
519      /* min, max, act ct */ 0, 1, 0,
520      /* opt state flags  */ HOST_KEY_FLAGS, 0,
521      /* last opt argumnt */ { NULL },
522      /* arg list/cookie  */ NULL,
523      /* must/cannot opts */ NULL, NULL,
524      /* option proc      */ NULL,
525      /* desc, NAME, name */ zHost_KeyText, zHost_Key_NAME, zHost_Key_Name,
526      /* disablement strs */ NULL, NULL },
527 
528   {  /* entry idx, value */ 6, VALUE_OPT_IFFKEY,
529      /* equiv idx, value */ 6, VALUE_OPT_IFFKEY,
530      /* equivalenced to  */ NO_EQUIVALENT,
531      /* min, max, act ct */ 0, 1, 0,
532      /* opt state flags  */ IFFKEY_FLAGS, 0,
533      /* last opt argumnt */ { NULL },
534      /* arg list/cookie  */ NULL,
535      /* must/cannot opts */ NULL, NULL,
536      /* option proc      */ NULL,
537      /* desc, NAME, name */ zIffkeyText, zIffkey_NAME, zIffkey_Name,
538      /* disablement strs */ NULL, NULL },
539 
540   {  /* entry idx, value */ 7, VALUE_OPT_ISSUER_NAME,
541      /* equiv idx, value */ 7, VALUE_OPT_ISSUER_NAME,
542      /* equivalenced to  */ NO_EQUIVALENT,
543      /* min, max, act ct */ 0, 1, 0,
544      /* opt state flags  */ ISSUER_NAME_FLAGS, 0,
545      /* last opt argumnt */ { NULL },
546      /* arg list/cookie  */ NULL,
547      /* must/cannot opts */ NULL, NULL,
548      /* option proc      */ NULL,
549      /* desc, NAME, name */ zIssuer_NameText, zIssuer_Name_NAME, zIssuer_Name_Name,
550      /* disablement strs */ NULL, NULL },
551 
552   {  /* entry idx, value */ 8, VALUE_OPT_MD5KEY,
553      /* equiv idx, value */ 8, VALUE_OPT_MD5KEY,
554      /* equivalenced to  */ NO_EQUIVALENT,
555      /* min, max, act ct */ 0, 1, 0,
556      /* opt state flags  */ MD5KEY_FLAGS, 0,
557      /* last opt argumnt */ { NULL },
558      /* arg list/cookie  */ NULL,
559      /* must/cannot opts */ NULL, NULL,
560      /* option proc      */ NULL,
561      /* desc, NAME, name */ zMd5keyText, zMd5key_NAME, zMd5key_Name,
562      /* disablement strs */ NULL, NULL },
563 
564   {  /* entry idx, value */ 9, VALUE_OPT_MODULUS,
565      /* equiv idx, value */ 9, VALUE_OPT_MODULUS,
566      /* equivalenced to  */ NO_EQUIVALENT,
567      /* min, max, act ct */ 0, 1, 0,
568      /* opt state flags  */ MODULUS_FLAGS, 0,
569      /* last opt argumnt */ { NULL },
570      /* arg list/cookie  */ NULL,
571      /* must/cannot opts */ NULL, NULL,
572      /* option proc      */ doOptModulus,
573      /* desc, NAME, name */ zModulusText, zModulus_NAME, zModulus_Name,
574      /* disablement strs */ NULL, NULL },
575 
576   {  /* entry idx, value */ 10, VALUE_OPT_PVT_CERT,
577      /* equiv idx, value */ 10, VALUE_OPT_PVT_CERT,
578      /* equivalenced to  */ NO_EQUIVALENT,
579      /* min, max, act ct */ 0, 1, 0,
580      /* opt state flags  */ PVT_CERT_FLAGS, 0,
581      /* last opt argumnt */ { NULL },
582      /* arg list/cookie  */ NULL,
583      /* must/cannot opts */ NULL, NULL,
584      /* option proc      */ NULL,
585      /* desc, NAME, name */ zPvt_CertText, zPvt_Cert_NAME, zPvt_Cert_Name,
586      /* disablement strs */ NULL, NULL },
587 
588   {  /* entry idx, value */ 11, VALUE_OPT_PVT_PASSWD,
589      /* equiv idx, value */ 11, VALUE_OPT_PVT_PASSWD,
590      /* equivalenced to  */ NO_EQUIVALENT,
591      /* min, max, act ct */ 0, 1, 0,
592      /* opt state flags  */ PVT_PASSWD_FLAGS, 0,
593      /* last opt argumnt */ { NULL },
594      /* arg list/cookie  */ NULL,
595      /* must/cannot opts */ NULL, NULL,
596      /* option proc      */ NULL,
597      /* desc, NAME, name */ zPvt_PasswdText, zPvt_Passwd_NAME, zPvt_Passwd_Name,
598      /* disablement strs */ NULL, NULL },
599 
600   {  /* entry idx, value */ 12, VALUE_OPT_GET_PVT_PASSWD,
601      /* equiv idx, value */ 12, VALUE_OPT_GET_PVT_PASSWD,
602      /* equivalenced to  */ NO_EQUIVALENT,
603      /* min, max, act ct */ 0, 1, 0,
604      /* opt state flags  */ GET_PVT_PASSWD_FLAGS, 0,
605      /* last opt argumnt */ { NULL },
606      /* arg list/cookie  */ NULL,
607      /* must/cannot opts */ NULL, NULL,
608      /* option proc      */ NULL,
609      /* desc, NAME, name */ zGet_Pvt_PasswdText, zGet_Pvt_Passwd_NAME, zGet_Pvt_Passwd_Name,
610      /* disablement strs */ NULL, NULL },
611 
612   {  /* entry idx, value */ 13, VALUE_OPT_SIGN_KEY,
613      /* equiv idx, value */ 13, VALUE_OPT_SIGN_KEY,
614      /* equivalenced to  */ NO_EQUIVALENT,
615      /* min, max, act ct */ 0, 1, 0,
616      /* opt state flags  */ SIGN_KEY_FLAGS, 0,
617      /* last opt argumnt */ { NULL },
618      /* arg list/cookie  */ NULL,
619      /* must/cannot opts */ NULL, NULL,
620      /* option proc      */ NULL,
621      /* desc, NAME, name */ zSign_KeyText, zSign_Key_NAME, zSign_Key_Name,
622      /* disablement strs */ NULL, NULL },
623 
624   {  /* entry idx, value */ 14, VALUE_OPT_SUBJECT_NAME,
625      /* equiv idx, value */ 14, VALUE_OPT_SUBJECT_NAME,
626      /* equivalenced to  */ NO_EQUIVALENT,
627      /* min, max, act ct */ 0, 1, 0,
628      /* opt state flags  */ SUBJECT_NAME_FLAGS, 0,
629      /* last opt argumnt */ { NULL },
630      /* arg list/cookie  */ NULL,
631      /* must/cannot opts */ NULL, NULL,
632      /* option proc      */ NULL,
633      /* desc, NAME, name */ zSubject_NameText, zSubject_Name_NAME, zSubject_Name_Name,
634      /* disablement strs */ NULL, NULL },
635 
636   {  /* entry idx, value */ 15, VALUE_OPT_TRUSTED_CERT,
637      /* equiv idx, value */ 15, VALUE_OPT_TRUSTED_CERT,
638      /* equivalenced to  */ NO_EQUIVALENT,
639      /* min, max, act ct */ 0, 1, 0,
640      /* opt state flags  */ TRUSTED_CERT_FLAGS, 0,
641      /* last opt argumnt */ { NULL },
642      /* arg list/cookie  */ NULL,
643      /* must/cannot opts */ NULL, NULL,
644      /* option proc      */ NULL,
645      /* desc, NAME, name */ zTrusted_CertText, zTrusted_Cert_NAME, zTrusted_Cert_Name,
646      /* disablement strs */ NULL, NULL },
647 
648   {  /* entry idx, value */ 16, VALUE_OPT_MV_PARAMS,
649      /* equiv idx, value */ 16, VALUE_OPT_MV_PARAMS,
650      /* equivalenced to  */ NO_EQUIVALENT,
651      /* min, max, act ct */ 0, 1, 0,
652      /* opt state flags  */ MV_PARAMS_FLAGS, 0,
653      /* last opt argumnt */ { NULL },
654      /* arg list/cookie  */ NULL,
655      /* must/cannot opts */ NULL, NULL,
656      /* option proc      */ optionNumericVal,
657      /* desc, NAME, name */ zMv_ParamsText, zMv_Params_NAME, zMv_Params_Name,
658      /* disablement strs */ NULL, NULL },
659 
660   {  /* entry idx, value */ 17, VALUE_OPT_MV_KEYS,
661      /* equiv idx, value */ 17, VALUE_OPT_MV_KEYS,
662      /* equivalenced to  */ NO_EQUIVALENT,
663      /* min, max, act ct */ 0, 1, 0,
664      /* opt state flags  */ MV_KEYS_FLAGS, 0,
665      /* last opt argumnt */ { NULL },
666      /* arg list/cookie  */ NULL,
667      /* must/cannot opts */ NULL, NULL,
668      /* option proc      */ optionNumericVal,
669      /* desc, NAME, name */ zMv_KeysText, zMv_Keys_NAME, zMv_Keys_Name,
670      /* disablement strs */ NULL, NULL },
671 
672   {  /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION,
673      /* equiv idx value  */ NO_EQUIVALENT, 0,
674      /* equivalenced to  */ NO_EQUIVALENT,
675      /* min, max, act ct */ 0, 1, 0,
676      /* opt state flags  */ OPTST_VERSION_FLAGS, 0,
677      /* last opt argumnt */ { NULL },
678      /* arg list/cookie  */ NULL,
679      /* must/cannot opts */ NULL, NULL,
680      /* option proc      */ DOVERPROC,
681      /* desc, NAME, name */ zVersionText, NULL, zVersion_Name,
682      /* disablement strs */ NULL, NULL },
683 
684 
685 
686   {  /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP,
687      /* equiv idx value  */ NO_EQUIVALENT, 0,
688      /* equivalenced to  */ NO_EQUIVALENT,
689      /* min, max, act ct */ 0, 1, 0,
690      /* opt state flags  */ OPTST_IMM | OPTST_NO_INIT, 0,
691      /* last opt argumnt */ { NULL },
692      /* arg list/cookie  */ NULL,
693      /* must/cannot opts */ NULL, NULL,
694      /* option proc      */ doUsageOpt,
695      /* desc, NAME, name */ zHelpText, NULL, zHelp_Name,
696      /* disablement strs */ NULL, NULL },
697 
698   {  /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP,
699      /* equiv idx value  */ NO_EQUIVALENT, 0,
700      /* equivalenced to  */ NO_EQUIVALENT,
701      /* min, max, act ct */ 0, 1, 0,
702      /* opt state flags  */ OPTST_MORE_HELP_FLAGS, 0,
703      /* last opt argumnt */ { NULL },
704      /* arg list/cookie  */ NULL,
705      /* must/cannot opts */ NULL,  NULL,
706      /* option proc      */ optionPagedUsage,
707      /* desc, NAME, name */ zMore_HelpText, NULL, zMore_Help_Name,
708      /* disablement strs */ NULL, NULL },
709 
710   {  /* entry idx, value */ INDEX_OPT_SAVE_OPTS, VALUE_OPT_SAVE_OPTS,
711      /* equiv idx value  */ NO_EQUIVALENT, 0,
712      /* equivalenced to  */ NO_EQUIVALENT,
713      /* min, max, act ct */ 0, 1, 0,
714      /* opt state flags  */ OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)
715                           | OPTST_ARG_OPTIONAL | OPTST_NO_INIT, 0,
716      /* last opt argumnt */ { NULL },
717      /* arg list/cookie  */ NULL,
718      /* must/cannot opts */ NULL,  NULL,
719      /* option proc      */ NULL,
720      /* desc, NAME, name */ zSave_OptsText, NULL, zSave_Opts_Name,
721      /* disablement strs */ NULL, NULL },
722 
723   {  /* entry idx, value */ INDEX_OPT_LOAD_OPTS, VALUE_OPT_LOAD_OPTS,
724      /* equiv idx value  */ NO_EQUIVALENT, 0,
725      /* equivalenced to  */ NO_EQUIVALENT,
726      /* min, max, act ct */ 0, NOLIMIT, 0,
727      /* opt state flags  */ OPTST_SET_ARGTYPE(OPARG_TYPE_STRING)
728 			  | OPTST_DISABLE_IMM, 0,
729      /* last opt argumnt */ { NULL },
730      /* arg list/cookie  */ NULL,
731      /* must/cannot opts */ NULL, NULL,
732      /* option proc      */ optionLoadOpt,
733      /* desc, NAME, name */ zLoad_OptsText, zLoad_Opts_NAME, zLoad_Opts_Name,
734      /* disablement strs */ zNotLoad_Opts_Name, zNotLoad_Opts_Pfx }
735 };
736 
737 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
738  *
739  *  Define the Ntp_Keygen Option Environment
740  */
741 tSCC   zPROGNAME[]   = "NTP_KEYGEN";
742 tSCC   zUsageTitle[] =
743 "ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.6\n\
744 USAGE:  %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n";
745 tSCC   zRcName[]     = ".ntprc";
746 tSCC*  apzHomeList[] = {
747        "$HOME",
748        ".",
749        NULL };
750 
751 tSCC   zBugsAddr[]    = "http://bugs.ntp.org, bugs@ntp.org";
752 #define zExplain NULL
753 tSCC    zDetail[]     = "\n\
754 If there is no new host key, look for an existing one.\n\
755 If one is not found, create it.\n";
756 tSCC    zFullVersion[] = NTP_KEYGEN_FULL_VERSION;
757 /* extracted from /usr/local/gnu/share/autogen/optcode.tpl near line 495 */
758 
759 #if defined(ENABLE_NLS)
760 # define OPTPROC_BASE OPTPROC_TRANSLATE
761   static tOptionXlateProc translate_option_strings;
762 #else
763 # define OPTPROC_BASE OPTPROC_NONE
764 # define translate_option_strings NULL
765 #endif /* ENABLE_NLS */
766 
767 
768 #define ntp_keygen_full_usage NULL
769 #define ntp_keygen_short_usage NULL
770 tOptions ntp_keygenOptions = {
771     OPTIONS_STRUCT_VERSION,
772     0, NULL,                    /* original argc + argv    */
773     ( OPTPROC_BASE
774     + OPTPROC_ERRSTOP
775     + OPTPROC_SHORTOPT
776     + OPTPROC_LONGOPT
777     + OPTPROC_NO_REQ_OPT
778     + OPTPROC_ENVIRON
779     + OPTPROC_NO_ARGS ),
780     0, NULL,                    /* current option index, current option */
781     NULL,         NULL,         zPROGNAME,
782     zRcName,      zCopyright,   zCopyrightNotice,
783     zFullVersion, apzHomeList,  zUsageTitle,
784     zExplain,     zDetail,      optDesc,
785     zBugsAddr,                  /* address to send bugs to */
786     NULL, NULL,                 /* extensions/saved state  */
787     optionUsage,       /* usage procedure */
788     translate_option_strings,   /* translation procedure */
789     /*
790      *  Indexes to special options
791      */
792     { INDEX_OPT_MORE_HELP, /* more-help option index */
793       INDEX_OPT_SAVE_OPTS, /* save option index */
794       NO_EQUIVALENT, /* '-#' option index */
795       NO_EQUIVALENT /* index of default opt */
796     },
797     23 /* full option count */, 18 /* user option count */,
798     ntp_keygen_full_usage, ntp_keygen_short_usage,
799     NULL, NULL
800 };
801 
802 /*
803  *  Create the static procedure(s) declared above.
804  */
805 static void
806 doUsageOpt(
807     tOptions*   pOptions,
808     tOptDesc*   pOptDesc )
809 {
810     (void)pOptions;
811     USAGE( EXIT_SUCCESS );
812 }
813 
814 #if ! defined(TEST_NTP_KEYGEN_OPTS)
815 
816 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
817  *
818  *   For the set-debug-level option.
819  */
820 static void
821 doOptSet_Debug_Level(tOptions* pOptions, tOptDesc* pOptDesc)
822 {
823     /* extracted from ../include/debug-opt.def, line 27 */
824 DESC(DEBUG_LEVEL).optOccCt = atoi( pOptDesc->pzLastArg );
825 }
826 #endif /* defined(TEST_NTP_KEYGEN_OPTS) */
827 
828 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
829  *
830  *   For the modulus option, when OPENSSL is #define-d.
831  */
832 #ifdef OPENSSL
833 static void
834 doOptModulus(tOptions* pOptions, tOptDesc* pOptDesc)
835 {
836     static const struct {long const rmin, rmax;} rng[1] = {
837         { 256, 2048 } };
838     long val;
839     int  ix;
840     char * pzEnd;
841 
842     if (pOptions <= OPTPROC_EMIT_LIMIT)
843         goto emit_ranges;
844 
845     errno = 0;
846     val = strtol(pOptDesc->optArg.argString, &pzEnd, 0);
847     if ((pOptDesc->optArg.argString == pzEnd) || (errno != 0))
848         goto bad_value;
849 
850     if (*pzEnd != '\0')
851         goto bad_value;
852     for (ix = 0; ix < 1; ix++) {
853         if (val < rng[ix].rmin)
854             continue;  /* ranges need not be ordered. */
855         if (val == rng[ix].rmin)
856             goto valid_return;
857         if (rng[ix].rmax == LONG_MIN)
858             continue;
859         if (val <= rng[ix].rmax)
860             goto valid_return;
861     }
862 
863   bad_value:
864 
865     option_usage_fp = stderr;
866 
867   emit_ranges:
868     optionShowRange(pOptions, pOptDesc, (void *)(intptr_t)rng, 1);
869     return;
870 
871   valid_return:
872     if ((pOptDesc->fOptState & OPTST_ALLOC_ARG) != 0) {
873         free((void *)(intptr_t)pOptDesc->optArg.argString);
874         pOptDesc->fOptState &= ~OPTST_ALLOC_ARG;
875     }
876     pOptDesc->optArg.argInt = val;
877 }
878 #endif /* defined OPENSSL */
879 /* extracted from /usr/local/gnu/share/autogen/optmain.tpl near line 109 */
880 
881 #if defined(TEST_NTP_KEYGEN_OPTS) /* TEST MAIN PROCEDURE: */
882 
883 extern void optionPutShell( tOptions* );
884 
885 int
886 main(int argc, char** argv)
887 {
888     int res = EXIT_SUCCESS;
889     (void)optionProcess( &ntp_keygenOptions, argc, argv );
890     optionPutShell( &ntp_keygenOptions );
891     return res;
892 }
893 #endif  /* defined TEST_NTP_KEYGEN_OPTS */
894 /* extracted from /usr/local/gnu/share/autogen/optcode.tpl near line 627 */
895 
896 #if ENABLE_NLS
897 #include <stdio.h>
898 #include <stdlib.h>
899 #include <string.h>
900 #include <unistd.h>
901 #include <autoopts/usage-txt.h>
902 
903 static char* AO_gettext( char const* pz );
904 static void  coerce_it(void** s);
905 
906 static char*
907 AO_gettext( char const* pz )
908 {
909     char* pzRes;
910     if (pz == NULL)
911         return NULL;
912     pzRes = _(pz);
913     if (pzRes == pz)
914         return pzRes;
915     pzRes = strdup( pzRes );
916     if (pzRes == NULL) {
917         fputs( _("No memory for duping translated strings\n"), stderr );
918         exit( EXIT_FAILURE );
919     }
920     return pzRes;
921 }
922 
923 static void coerce_it(void** s) { *s = AO_gettext(*s); }
924 #define COERSION(_f) \
925   coerce_it((void*)&(ntp_keygenOptions._f))
926 
927 /*
928  *  This invokes the translation code (e.g. gettext(3)).
929  */
930 static void
931 translate_option_strings( void )
932 {
933     /*
934      *  Guard against re-translation.  It won't work.  The strings will have
935      *  been changed by the first pass through this code.  One shot only.
936      */
937     if (option_usage_text.field_ct != 0) {
938 
939         /*
940          *  Do the translations.  The first pointer follows the field count
941          *  field.  The field count field is the size of a pointer.
942          */
943         tOptDesc* pOD = ntp_keygenOptions.pOptDesc;
944         char**    ppz = (char**)(void*)&(option_usage_text);
945         int       ix  = option_usage_text.field_ct;
946 
947         do {
948             ppz++;
949             *ppz = AO_gettext(*ppz);
950         } while (--ix > 0);
951 
952         COERSION(pzCopyright);
953         COERSION(pzCopyNotice);
954         COERSION(pzFullVersion);
955         COERSION(pzUsageTitle);
956         COERSION(pzExplain);
957         COERSION(pzDetail);
958         option_usage_text.field_ct = 0;
959 
960         for (ix = ntp_keygenOptions.optCt; ix > 0; ix--, pOD++)
961             coerce_it((void*)&(pOD->pzText));
962     }
963 
964     if ((ntp_keygenOptions.fOptSet & OPTPROC_NXLAT_OPT_CFG) == 0) {
965         tOptDesc* pOD = ntp_keygenOptions.pOptDesc;
966         int       ix;
967 
968         for (ix = ntp_keygenOptions.optCt; ix > 0; ix--, pOD++) {
969             coerce_it((void*)&(pOD->pz_Name));
970             coerce_it((void*)&(pOD->pz_DisableName));
971             coerce_it((void*)&(pOD->pz_DisablePfx));
972         }
973         /* prevent re-translation */
974         ntp_keygenOptions.fOptSet |= OPTPROC_NXLAT_OPT_CFG | OPTPROC_NXLAT_OPT;
975     }
976 }
977 
978 #endif /* ENABLE_NLS */
979 
980 #ifdef  __cplusplus
981 }
982 #endif
983 /* ntp-keygen-opts.c ends here */
984