mirror of
https://gitlab.com/openconnect/ocserv.git
synced 2026-10-12 01:26:48 +08:00
487 lines
16 KiB
C
487 lines
16 KiB
C
/* -*- buffer-read-only: t -*- vi: set ro:
|
|
*
|
|
* DO NOT EDIT THIS FILE (ocserv-args.c)
|
|
*
|
|
* It has been AutoGen-ed February 15, 2013 at 11:01:15 PM by AutoGen 5.16
|
|
* From the definitions ocserv-args.def
|
|
* and the template file options
|
|
*
|
|
* Generated from AutoOpts 36:4:11 templates.
|
|
*
|
|
* AutoOpts is a copyrighted work. This source file is not encumbered
|
|
* by AutoOpts licensing, but is provided under the licensing terms chosen
|
|
* by the ocserv 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.
|
|
*
|
|
* The ocserv program is copyrighted and licensed
|
|
* under the following terms:
|
|
*
|
|
* Copyright (C) 2013 Nikos Mavrogiannopoulos, all rights reserved.
|
|
* This is free software. It is licensed for use, modification and
|
|
* redistribution under the terms of the
|
|
* GNU General Public License, version 2 <http://gnu.org/licenses/gpl.html>
|
|
*
|
|
* ocserv is free software: you can redistribute it and/or modify it
|
|
* under the terms of version 2 of the GNU General Public License,
|
|
* as published by the Free Software Foundation.
|
|
*
|
|
* ocserv is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
* See the GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License,
|
|
* version 2, along with this program.
|
|
* If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#ifndef __doxygen__
|
|
#define OPTION_CODE_COMPILE 1
|
|
#include "ocserv-args.h"
|
|
#include <sys/types.h>
|
|
|
|
#include <limits.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
extern FILE * option_usage_fp;
|
|
|
|
/* TRANSLATORS: choose the translation for option names wisely because you
|
|
cannot ever change your mind. */
|
|
#define zCopyright (ocserv_opt_strs+0)
|
|
#define zLicenseDescrip (ocserv_opt_strs+248)
|
|
|
|
|
|
#ifndef NULL
|
|
# define NULL 0
|
|
#endif
|
|
|
|
/*
|
|
* ocserv option static const strings
|
|
*/
|
|
static char const ocserv_opt_strs[1523] =
|
|
/* 0 */ "ocserv\n"
|
|
"Copyright (C) 2013 Nikos Mavrogiannopoulos, all rights reserved.\n"
|
|
"This is free software. It is licensed for use, modification and\n"
|
|
"redistribution under the terms of the\n"
|
|
"GNU General Public License, version 2 <http://gnu.org/licenses/gpl.html>\n\0"
|
|
/* 248 */ "ocserv is free software: you can redistribute it and/or modify it under the\n"
|
|
"terms of version 2 of the GNU General Public License, as published by the\n"
|
|
"Free Software Foundation.\n\n"
|
|
"ocserv is distributed in the hope that it will be useful, but WITHOUT ANY\n"
|
|
"WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS\n"
|
|
"FOR A PARTICULAR PURPOSE. See the GNU General Public License for more\n"
|
|
"details.\n\n"
|
|
"You should have received a copy of the GNU General Public License, version\n"
|
|
"2, along with this program. If not, see <http://www.gnu.org/licenses/>.\n\0"
|
|
/* 803 */ "Do not fork into background\0"
|
|
/* 831 */ "FOREGROUND\0"
|
|
/* 842 */ "foreground\0"
|
|
/* 853 */ "Enable verbose TLS debugging information\0"
|
|
/* 894 */ "TLS_DEBUG\0"
|
|
/* 904 */ "tls-debug\0"
|
|
/* 914 */ "Enable verbose network debugging information\0"
|
|
/* 959 */ "DEBUG\0"
|
|
/* 965 */ "debug\0"
|
|
/* 971 */ "Configuration file for the server\0"
|
|
/* 1005 */ "CONFIG\0"
|
|
/* 1012 */ "config\0"
|
|
/* 1019 */ "Display extended usage information and exit\0"
|
|
/* 1063 */ "help\0"
|
|
/* 1068 */ "Extended usage information passed thru pager\0"
|
|
/* 1113 */ "more-help\0"
|
|
/* 1123 */ "OCSERV\0"
|
|
/* 1130 */ "ocserv - OpenConnect server\n"
|
|
"USAGE: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n\0"
|
|
/* 1216 */ "openconnect-devel@lists.infradead.org\0"
|
|
/* 1254 */ "\n\n\0"
|
|
/* 1257 */ "\n"
|
|
"This program is openconnect VPN server (ocserv), a server compatible with\n"
|
|
"the openconnect VPN client. It is believed to be compatible with the\n"
|
|
"protocol used by CISCO's AnyConnect SSL VPN.\n\0"
|
|
/* 1448 */ "Usage: ocserv [options] -c [config]\n"
|
|
"ocserv --help for usage instructions.\n";
|
|
|
|
/*
|
|
* foreground option description:
|
|
*/
|
|
#define FOREGROUND_DESC (ocserv_opt_strs+803)
|
|
#define FOREGROUND_NAME (ocserv_opt_strs+831)
|
|
#define FOREGROUND_name (ocserv_opt_strs+842)
|
|
#define FOREGROUND_FLAGS (OPTST_DISABLED)
|
|
|
|
/*
|
|
* tls-debug option description:
|
|
*/
|
|
#define TLS_DEBUG_DESC (ocserv_opt_strs+853)
|
|
#define TLS_DEBUG_NAME (ocserv_opt_strs+894)
|
|
#define TLS_DEBUG_name (ocserv_opt_strs+904)
|
|
#define TLS_DEBUG_FLAGS (OPTST_DISABLED)
|
|
|
|
/*
|
|
* debug option description:
|
|
*/
|
|
#define DEBUG_DESC (ocserv_opt_strs+914)
|
|
#define DEBUG_NAME (ocserv_opt_strs+959)
|
|
#define DEBUG_name (ocserv_opt_strs+965)
|
|
#define DEBUG_FLAGS (OPTST_DISABLED)
|
|
|
|
/*
|
|
* config option description:
|
|
*/
|
|
#define CONFIG_DESC (ocserv_opt_strs+971)
|
|
#define CONFIG_NAME (ocserv_opt_strs+1005)
|
|
#define CONFIG_name (ocserv_opt_strs+1012)
|
|
#define CONFIG_FLAGS (OPTST_DISABLED \
|
|
| OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
|
|
|
|
/*
|
|
* Help/More_Help option descriptions:
|
|
*/
|
|
#define HELP_DESC (ocserv_opt_strs+1019)
|
|
#define HELP_name (ocserv_opt_strs+1063)
|
|
#ifdef HAVE_WORKING_FORK
|
|
#define MORE_HELP_DESC (ocserv_opt_strs+1068)
|
|
#define MORE_HELP_name (ocserv_opt_strs+1113)
|
|
#define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT)
|
|
#else
|
|
#define MORE_HELP_DESC NULL
|
|
#define MORE_HELP_name NULL
|
|
#define MORE_HELP_FLAGS (OPTST_OMITTED | OPTST_NO_INIT)
|
|
#endif
|
|
/*
|
|
* Declare option callback procedures
|
|
*/
|
|
extern tOptProc
|
|
optionBooleanVal, optionNestedVal, optionNumericVal,
|
|
optionPagedUsage, optionPrintVersion, optionResetOpt,
|
|
optionStackArg, optionTimeDate, optionTimeVal,
|
|
optionUnstackArg, optionVendorOption;
|
|
static tOptProc
|
|
doOptConfig, doUsageOpt;
|
|
|
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
/**
|
|
* Define the ocserv Option Descriptions.
|
|
* This is an array of OPTION_CT entries, one for each
|
|
* option that the ocserv program responds to.
|
|
*/
|
|
static tOptDesc optDesc[OPTION_CT] = {
|
|
{ /* entry idx, value */ 0, VALUE_OPT_FOREGROUND,
|
|
/* equiv idx, value */ 0, VALUE_OPT_FOREGROUND,
|
|
/* equivalenced to */ NO_EQUIVALENT,
|
|
/* min, max, act ct */ 0, 1, 0,
|
|
/* opt state flags */ FOREGROUND_FLAGS, 0,
|
|
/* last opt argumnt */ { NULL }, /* --foreground */
|
|
/* arg list/cookie */ NULL,
|
|
/* must/cannot opts */ NULL, NULL,
|
|
/* option proc */ NULL,
|
|
/* desc, NAME, name */ FOREGROUND_DESC, FOREGROUND_NAME, FOREGROUND_name,
|
|
/* disablement strs */ NULL, NULL },
|
|
|
|
{ /* entry idx, value */ 1, VALUE_OPT_TLS_DEBUG,
|
|
/* equiv idx, value */ 1, VALUE_OPT_TLS_DEBUG,
|
|
/* equivalenced to */ NO_EQUIVALENT,
|
|
/* min, max, act ct */ 0, 1, 0,
|
|
/* opt state flags */ TLS_DEBUG_FLAGS, 0,
|
|
/* last opt argumnt */ { NULL }, /* --tls-debug */
|
|
/* arg list/cookie */ NULL,
|
|
/* must/cannot opts */ NULL, NULL,
|
|
/* option proc */ NULL,
|
|
/* desc, NAME, name */ TLS_DEBUG_DESC, TLS_DEBUG_NAME, TLS_DEBUG_name,
|
|
/* disablement strs */ NULL, NULL },
|
|
|
|
{ /* entry idx, value */ 2, VALUE_OPT_DEBUG,
|
|
/* equiv idx, value */ 2, VALUE_OPT_DEBUG,
|
|
/* equivalenced to */ NO_EQUIVALENT,
|
|
/* min, max, act ct */ 0, 1, 0,
|
|
/* opt state flags */ DEBUG_FLAGS, 0,
|
|
/* last opt argumnt */ { NULL }, /* --debug */
|
|
/* arg list/cookie */ NULL,
|
|
/* must/cannot opts */ NULL, NULL,
|
|
/* option proc */ NULL,
|
|
/* desc, NAME, name */ DEBUG_DESC, DEBUG_NAME, DEBUG_name,
|
|
/* disablement strs */ NULL, NULL },
|
|
|
|
{ /* entry idx, value */ 3, VALUE_OPT_CONFIG,
|
|
/* equiv idx, value */ 3, VALUE_OPT_CONFIG,
|
|
/* equivalenced to */ NO_EQUIVALENT,
|
|
/* min, max, act ct */ 0, 1, 0,
|
|
/* opt state flags */ CONFIG_FLAGS, 0,
|
|
/* last opt argumnt */ { NULL }, /* --config */
|
|
/* arg list/cookie */ NULL,
|
|
/* must/cannot opts */ NULL, NULL,
|
|
/* option proc */ doOptConfig,
|
|
/* desc, NAME, name */ CONFIG_DESC, CONFIG_NAME, CONFIG_name,
|
|
/* disablement strs */ NULL, NULL },
|
|
|
|
{ /* entry idx, value */ INDEX_OPT_HELP, VALUE_OPT_HELP,
|
|
/* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_HELP,
|
|
/* 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 */ HELP_DESC, NULL, HELP_name,
|
|
/* disablement strs */ NULL, NULL },
|
|
|
|
{ /* entry idx, value */ INDEX_OPT_MORE_HELP, VALUE_OPT_MORE_HELP,
|
|
/* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_MORE_HELP,
|
|
/* equivalenced to */ NO_EQUIVALENT,
|
|
/* min, max, act ct */ 0, 1, 0,
|
|
/* opt state flags */ MORE_HELP_FLAGS, 0,
|
|
/* last opt argumnt */ { NULL },
|
|
/* arg list/cookie */ NULL,
|
|
/* must/cannot opts */ NULL, NULL,
|
|
/* option proc */ optionPagedUsage,
|
|
/* desc, NAME, name */ MORE_HELP_DESC, NULL, MORE_HELP_name,
|
|
/* disablement strs */ NULL, NULL }
|
|
};
|
|
|
|
|
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
*
|
|
* Define the ocserv Option Environment
|
|
*/
|
|
#define zPROGNAME (ocserv_opt_strs+1123)
|
|
#define zUsageTitle (ocserv_opt_strs+1130)
|
|
#define zRcName NULL
|
|
#define apzHomeList NULL
|
|
#define zBugsAddr (ocserv_opt_strs+1216)
|
|
#define zExplain (ocserv_opt_strs+1254)
|
|
#define zDetail (ocserv_opt_strs+1257)
|
|
#define zFullVersion (NULL)
|
|
/* extracted from optcode.tlib near line 350 */
|
|
|
|
#if defined(ENABLE_NLS)
|
|
# define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT
|
|
static tOptionXlateProc translate_option_strings;
|
|
#else
|
|
# define OPTPROC_BASE OPTPROC_NONE
|
|
# define translate_option_strings NULL
|
|
#endif /* ENABLE_NLS */
|
|
|
|
|
|
#define ocserv_full_usage (NULL)
|
|
|
|
#define ocserv_short_usage (ocserv_opt_strs+1448)
|
|
|
|
#endif /* not defined __doxygen__ */
|
|
|
|
/*
|
|
* Create the static procedure(s) declared above.
|
|
*/
|
|
/**
|
|
* The callout function that invokes the optionUsage function.
|
|
*
|
|
* @param pOptions the AutoOpts option description structure
|
|
* @param pOptDesc the descriptor for the "help" (usage) option.
|
|
* @noreturn
|
|
*/
|
|
static void
|
|
doUsageOpt(tOptions * pOptions, tOptDesc * pOptDesc)
|
|
{
|
|
optionUsage(&ocservOptions, OCSERV_EXIT_SUCCESS);
|
|
/* NOTREACHED */
|
|
(void)pOptDesc;
|
|
(void)pOptions;
|
|
}
|
|
|
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
/**
|
|
* Code to handle the config option.
|
|
*
|
|
* @param pOptions the ocserv options data structure
|
|
* @param pOptDesc the option descriptor for this option.
|
|
*/
|
|
static void
|
|
doOptConfig(tOptions* pOptions, tOptDesc* pOptDesc)
|
|
{
|
|
static teOptFileType const type =
|
|
FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
|
|
static tuFileMode mode;
|
|
#ifndef O_CLOEXEC
|
|
# define O_CLOEXEC 0
|
|
#endif
|
|
mode.file_flags = O_CLOEXEC;
|
|
|
|
optionFileCheck(pOptions, pOptDesc, type, mode);
|
|
}
|
|
/* extracted from optmain.tlib near line 1113 */
|
|
|
|
/**
|
|
* The directory containing the data associated with ocserv.
|
|
*/
|
|
#ifndef PKGDATADIR
|
|
# define PKGDATADIR ""
|
|
#endif
|
|
|
|
/**
|
|
* Information about the person or institution that packaged ocserv
|
|
* for the current distribution.
|
|
*/
|
|
#ifndef WITH_PACKAGER
|
|
# define ocserv_packager_info NULL
|
|
#else
|
|
static char const ocserv_packager_info[] =
|
|
"Packaged by " WITH_PACKAGER
|
|
|
|
# ifdef WITH_PACKAGER_VERSION
|
|
" ("WITH_PACKAGER_VERSION")"
|
|
# endif
|
|
|
|
# ifdef WITH_PACKAGER_BUG_REPORTS
|
|
"\nReport ocserv bugs to " WITH_PACKAGER_BUG_REPORTS
|
|
# endif
|
|
"\n";
|
|
#endif
|
|
#ifndef __doxygen__
|
|
|
|
#endif /* __doxygen__ */
|
|
/**
|
|
* The option definitions for ocserv. The one structure that
|
|
* binds them all.
|
|
*/
|
|
tOptions ocservOptions = {
|
|
OPTIONS_STRUCT_VERSION,
|
|
0, NULL, /* original argc + argv */
|
|
( OPTPROC_BASE
|
|
+ OPTPROC_ERRSTOP
|
|
+ OPTPROC_SHORTOPT
|
|
+ OPTPROC_LONGOPT
|
|
+ OPTPROC_NO_REQ_OPT
|
|
+ OPTPROC_NO_ARGS
|
|
+ OPTPROC_GNUUSAGE
|
|
+ OPTPROC_MISUSE ),
|
|
0, NULL, /* current option index, current option */
|
|
NULL, NULL, zPROGNAME,
|
|
zRcName, zCopyright, zLicenseDescrip,
|
|
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, /* more-help option index */
|
|
NO_EQUIVALENT, /* save option index */
|
|
NO_EQUIVALENT, /* '-#' option index */
|
|
NO_EQUIVALENT /* index of default opt */
|
|
},
|
|
6 /* full option count */, 4 /* user option count */,
|
|
ocserv_full_usage, ocserv_short_usage,
|
|
NULL, NULL,
|
|
PKGDATADIR, ocserv_packager_info
|
|
};
|
|
|
|
#if ENABLE_NLS
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <unistd.h>
|
|
#include <autoopts/usage-txt.h>
|
|
|
|
static char* AO_gettext(char const* pz);
|
|
static void coerce_it(void** s);
|
|
|
|
/**
|
|
* AutoGen specific wrapper function for gettext.
|
|
* It relies on the macro _() to convert from English to the target
|
|
* language, then strdup-duplicates the result string.
|
|
*
|
|
* @param[in] pz the input text used as a lookup key.
|
|
* @returns the translated text (if there is one),
|
|
* or the original text (if not).
|
|
*/
|
|
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(OCSERV_EXIT_FAILURE);
|
|
}
|
|
return pzRes;
|
|
}
|
|
|
|
static void coerce_it(void** s) { *s = AO_gettext(*s);
|
|
}
|
|
|
|
/**
|
|
* Translate all the translatable strings in the ocservOptions
|
|
* structure defined above. This is done only once.
|
|
*/
|
|
static void
|
|
translate_option_strings(void)
|
|
{
|
|
tOptions * const pOpt = &ocservOptions;
|
|
|
|
/*
|
|
* 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) {
|
|
/*
|
|
* Do the translations. The first pointer follows the field count
|
|
* field. The field count field is the size of a pointer.
|
|
*/
|
|
tOptDesc * pOD = pOpt->pOptDesc;
|
|
char ** ppz = (char**)(void*)&(option_usage_text);
|
|
int ix = option_usage_text.field_ct;
|
|
|
|
do {
|
|
ppz++;
|
|
*ppz = AO_gettext(*ppz);
|
|
} while (--ix > 0);
|
|
|
|
coerce_it((void*)&(pOpt->pzCopyright));
|
|
coerce_it((void*)&(pOpt->pzCopyNotice));
|
|
coerce_it((void*)&(pOpt->pzFullVersion));
|
|
coerce_it((void*)&(pOpt->pzUsageTitle));
|
|
coerce_it((void*)&(pOpt->pzExplain));
|
|
coerce_it((void*)&(pOpt->pzDetail));
|
|
coerce_it((void*)&(pOpt->pzPackager));
|
|
coerce_it((void*)&(pOpt->pzShortUsage));
|
|
option_usage_text.field_ct = 0;
|
|
|
|
for (ix = pOpt->optCt; ix > 0; ix--, pOD++)
|
|
coerce_it((void*)&(pOD->pzText));
|
|
}
|
|
|
|
if ((pOpt->fOptSet & OPTPROC_NXLAT_OPT_CFG) == 0) {
|
|
tOptDesc * pOD = pOpt->pOptDesc;
|
|
int ix;
|
|
|
|
for (ix = pOpt->optCt; ix > 0; ix--, pOD++) {
|
|
coerce_it((void*)&(pOD->pz_Name));
|
|
coerce_it((void*)&(pOD->pz_DisableName));
|
|
coerce_it((void*)&(pOD->pz_DisablePfx));
|
|
}
|
|
/* prevent re-translation */
|
|
ocservOptions.fOptSet |= OPTPROC_NXLAT_OPT_CFG | OPTPROC_NXLAT_OPT;
|
|
}
|
|
}
|
|
|
|
#endif /* ENABLE_NLS */
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
/* ocserv-args.c ends here */
|