mirror of
https://gitlab.com/openconnect/ocserv.git
synced 2026-02-10 00:37:00 +08:00
Updated autogen generated files, and added more options to ocpasswd.
ocpasswd now accepts the --lock and --unlock options and accepts the username as the last argument.
This commit is contained in:
@@ -1,12 +1,12 @@
|
||||
/* -*- buffer-read-only: t -*- vi: set ro:
|
||||
*
|
||||
*
|
||||
* DO NOT EDIT THIS FILE (ocpasswd-args.c)
|
||||
*
|
||||
* It has been AutoGen-ed March 14, 2013 at 01:27:04 PM by AutoGen 5.16
|
||||
*
|
||||
* It has been AutoGen-ed April 28, 2013 at 03:30:06 PM by AutoGen 5.17.3
|
||||
* From the definitions ocpasswd-args.def
|
||||
* and the template file options
|
||||
*
|
||||
* Generated from AutoOpts 36:4:11 templates.
|
||||
* Generated from AutoOpts 38:0:13 templates.
|
||||
*
|
||||
* AutoOpts is a copyrighted work. This source file is not encumbered
|
||||
* by AutoOpts licensing, but is provided under the licensing terms chosen
|
||||
@@ -21,18 +21,18 @@
|
||||
*
|
||||
* 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>
|
||||
* redistribution under the terms of the GNU General Public License,
|
||||
* version 2 <http://gnu.org/licenses/gpl.html>
|
||||
*
|
||||
* ocpasswd 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.
|
||||
*
|
||||
*
|
||||
* ocpasswd 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/>.
|
||||
@@ -51,9 +51,6 @@
|
||||
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 (ocpasswd_opt_strs+0)
|
||||
#define zLicenseDescrip (ocpasswd_opt_strs+256)
|
||||
|
||||
@@ -62,15 +59,15 @@ extern FILE * option_usage_fp;
|
||||
# define NULL 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
* ocpasswd option static const strings
|
||||
/**
|
||||
* static const strings for ocpasswd options
|
||||
*/
|
||||
static char const ocpasswd_opt_strs[1443] =
|
||||
/* 0 */ "ocpasswd 0.0.3\n"
|
||||
static char const ocpasswd_opt_strs[1456] =
|
||||
/* 0 */ "ocpasswd 0.1.1\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"
|
||||
"redistribution under the terms of the GNU General Public License,\n"
|
||||
"version 2 <http://gnu.org/licenses/gpl.html>\n\0"
|
||||
/* 256 */ "ocpasswd is free software: you can redistribute it and/or modify it under\n"
|
||||
"the terms of version 2 of the GNU General Public License, as published by\n"
|
||||
"the Free Software Foundation.\n\n"
|
||||
@@ -83,65 +80,90 @@ static char const ocpasswd_opt_strs[1443] =
|
||||
/* 815 */ "Password file\0"
|
||||
/* 829 */ "PASSWD\0"
|
||||
/* 836 */ "passwd\0"
|
||||
/* 843 */ "User name\0"
|
||||
/* 853 */ "USERNAME\0"
|
||||
/* 862 */ "username\0"
|
||||
/* 871 */ "User's group name\0"
|
||||
/* 889 */ "GROUPNAME\0"
|
||||
/* 899 */ "groupname\0"
|
||||
/* 909 */ "Display extended usage information and exit\0"
|
||||
/* 953 */ "help\0"
|
||||
/* 958 */ "Extended usage information passed thru pager\0"
|
||||
/* 1003 */ "more-help\0"
|
||||
/* 1013 */ "Output version information and exit\0"
|
||||
/* 1049 */ "version\0"
|
||||
/* 1057 */ "OCPASSWD\0"
|
||||
/* 1066 */ "ocpasswd - OpenConnect server - Ver. 0.0.3\n"
|
||||
"USAGE: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n\0"
|
||||
/* 1167 */ "openconnect-devel@lists.infradead.org\0"
|
||||
/* 1205 */ "\n\n\0"
|
||||
/* 1208 */ "\n"
|
||||
"This program is openconnect password (ocpasswd) utility. It allows the\n"
|
||||
/* 843 */ "User's group name\0"
|
||||
/* 861 */ "GROUPNAME\0"
|
||||
/* 871 */ "groupname\0"
|
||||
/* 881 */ "Lock user\0"
|
||||
/* 891 */ "LOCK\0"
|
||||
/* 896 */ "lock\0"
|
||||
/* 901 */ "Unlock user\0"
|
||||
/* 913 */ "UNLOCK\0"
|
||||
/* 920 */ "unlock\0"
|
||||
/* 927 */ "display extended usage information and exit\0"
|
||||
/* 971 */ "help\0"
|
||||
/* 976 */ "extended usage information passed thru pager\0"
|
||||
/* 1021 */ "more-help\0"
|
||||
/* 1031 */ "output version information and exit\0"
|
||||
/* 1067 */ "version\0"
|
||||
/* 1075 */ "OCPASSWD\0"
|
||||
/* 1084 */ "ocpasswd - ocpasswd\n"
|
||||
"Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [username]\n\0"
|
||||
/* 1173 */ "openconnect-devel@lists.infradead.org\0"
|
||||
/* 1211 */ "\n\0"
|
||||
/* 1213 */ "This program is openconnect password (ocpasswd) utility. It allows the\n"
|
||||
"generation and handling of a 'plain' password file used by ocserv.\n\0"
|
||||
/* 1349 */ "ocpasswd 0.0.3\0"
|
||||
/* 1364 */ "Usage: ocpasswd [options] -c [passwd]\n"
|
||||
/* 1353 */ "ocpasswd 0.1.1\0"
|
||||
/* 1368 */ "Usage: ocpasswd -c [passwd] [options] username\n"
|
||||
"ocpasswd --help for usage instructions.\n";
|
||||
|
||||
/*
|
||||
/**
|
||||
* passwd option description:
|
||||
*/
|
||||
/** Descriptive text for the passwd option */
|
||||
#define PASSWD_DESC (ocpasswd_opt_strs+815)
|
||||
/** Upper-cased name for the passwd option */
|
||||
#define PASSWD_NAME (ocpasswd_opt_strs+829)
|
||||
/** Name string for the passwd option */
|
||||
#define PASSWD_name (ocpasswd_opt_strs+836)
|
||||
/** Compiled in flag settings for the passwd option */
|
||||
#define PASSWD_FLAGS (OPTST_DISABLED \
|
||||
| OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
|
||||
|
||||
/*
|
||||
* username option description:
|
||||
*/
|
||||
#define USERNAME_DESC (ocpasswd_opt_strs+843)
|
||||
#define USERNAME_NAME (ocpasswd_opt_strs+853)
|
||||
#define USERNAME_name (ocpasswd_opt_strs+862)
|
||||
#define USERNAME_FLAGS (OPTST_DISABLED \
|
||||
| OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
|
||||
|
||||
/*
|
||||
/**
|
||||
* groupname option description:
|
||||
*/
|
||||
#define GROUPNAME_DESC (ocpasswd_opt_strs+871)
|
||||
#define GROUPNAME_NAME (ocpasswd_opt_strs+889)
|
||||
#define GROUPNAME_name (ocpasswd_opt_strs+899)
|
||||
/** Descriptive text for the groupname option */
|
||||
#define GROUPNAME_DESC (ocpasswd_opt_strs+843)
|
||||
/** Upper-cased name for the groupname option */
|
||||
#define GROUPNAME_NAME (ocpasswd_opt_strs+861)
|
||||
/** Name string for the groupname option */
|
||||
#define GROUPNAME_name (ocpasswd_opt_strs+871)
|
||||
/** Compiled in flag settings for the groupname option */
|
||||
#define GROUPNAME_FLAGS (OPTST_DISABLED \
|
||||
| OPTST_SET_ARGTYPE(OPARG_TYPE_STRING))
|
||||
|
||||
/**
|
||||
* lock option description:
|
||||
*/
|
||||
/** Descriptive text for the lock option */
|
||||
#define LOCK_DESC (ocpasswd_opt_strs+881)
|
||||
/** Upper-cased name for the lock option */
|
||||
#define LOCK_NAME (ocpasswd_opt_strs+891)
|
||||
/** Name string for the lock option */
|
||||
#define LOCK_name (ocpasswd_opt_strs+896)
|
||||
/** Compiled in flag settings for the lock option */
|
||||
#define LOCK_FLAGS (OPTST_DISABLED)
|
||||
|
||||
/**
|
||||
* unlock option description:
|
||||
*/
|
||||
/** Descriptive text for the unlock option */
|
||||
#define UNLOCK_DESC (ocpasswd_opt_strs+901)
|
||||
/** Upper-cased name for the unlock option */
|
||||
#define UNLOCK_NAME (ocpasswd_opt_strs+913)
|
||||
/** Name string for the unlock option */
|
||||
#define UNLOCK_name (ocpasswd_opt_strs+920)
|
||||
/** Compiled in flag settings for the unlock option */
|
||||
#define UNLOCK_FLAGS (OPTST_DISABLED)
|
||||
|
||||
/*
|
||||
* Help/More_Help/Version option descriptions:
|
||||
*/
|
||||
#define HELP_DESC (ocpasswd_opt_strs+909)
|
||||
#define HELP_name (ocpasswd_opt_strs+953)
|
||||
#define HELP_DESC (ocpasswd_opt_strs+927)
|
||||
#define HELP_name (ocpasswd_opt_strs+971)
|
||||
#ifdef HAVE_WORKING_FORK
|
||||
#define MORE_HELP_DESC (ocpasswd_opt_strs+958)
|
||||
#define MORE_HELP_name (ocpasswd_opt_strs+1003)
|
||||
#define MORE_HELP_DESC (ocpasswd_opt_strs+976)
|
||||
#define MORE_HELP_name (ocpasswd_opt_strs+1021)
|
||||
#define MORE_HELP_FLAGS (OPTST_IMM | OPTST_NO_INIT)
|
||||
#else
|
||||
#define MORE_HELP_DESC NULL
|
||||
@@ -154,9 +176,9 @@ static char const ocpasswd_opt_strs[1443] =
|
||||
# define VER_FLAGS (OPTST_SET_ARGTYPE(OPARG_TYPE_STRING) | \
|
||||
OPTST_ARG_OPTIONAL | OPTST_IMM | OPTST_NO_INIT)
|
||||
#endif
|
||||
#define VER_DESC (ocpasswd_opt_strs+1013)
|
||||
#define VER_name (ocpasswd_opt_strs+1049)
|
||||
/*
|
||||
#define VER_DESC (ocpasswd_opt_strs+1031)
|
||||
#define VER_name (ocpasswd_opt_strs+1067)
|
||||
/**
|
||||
* Declare option callback procedures
|
||||
*/
|
||||
extern tOptProc
|
||||
@@ -187,20 +209,8 @@ static tOptDesc optDesc[OPTION_CT] = {
|
||||
/* desc, NAME, name */ PASSWD_DESC, PASSWD_NAME, PASSWD_name,
|
||||
/* disablement strs */ NULL, NULL },
|
||||
|
||||
{ /* entry idx, value */ 1, VALUE_OPT_USERNAME,
|
||||
/* equiv idx, value */ 1, VALUE_OPT_USERNAME,
|
||||
/* equivalenced to */ NO_EQUIVALENT,
|
||||
/* min, max, act ct */ 0, 1, 0,
|
||||
/* opt state flags */ USERNAME_FLAGS, 0,
|
||||
/* last opt argumnt */ { NULL }, /* --username */
|
||||
/* arg list/cookie */ NULL,
|
||||
/* must/cannot opts */ NULL, NULL,
|
||||
/* option proc */ NULL,
|
||||
/* desc, NAME, name */ USERNAME_DESC, USERNAME_NAME, USERNAME_name,
|
||||
/* disablement strs */ NULL, NULL },
|
||||
|
||||
{ /* entry idx, value */ 2, VALUE_OPT_GROUPNAME,
|
||||
/* equiv idx, value */ 2, VALUE_OPT_GROUPNAME,
|
||||
{ /* entry idx, value */ 1, VALUE_OPT_GROUPNAME,
|
||||
/* equiv idx, value */ 1, VALUE_OPT_GROUPNAME,
|
||||
/* equivalenced to */ NO_EQUIVALENT,
|
||||
/* min, max, act ct */ 0, 1, 0,
|
||||
/* opt state flags */ GROUPNAME_FLAGS, 0,
|
||||
@@ -211,11 +221,35 @@ static tOptDesc optDesc[OPTION_CT] = {
|
||||
/* desc, NAME, name */ GROUPNAME_DESC, GROUPNAME_NAME, GROUPNAME_name,
|
||||
/* disablement strs */ NULL, NULL },
|
||||
|
||||
{ /* entry idx, value */ 2, VALUE_OPT_LOCK,
|
||||
/* equiv idx, value */ 2, VALUE_OPT_LOCK,
|
||||
/* equivalenced to */ NO_EQUIVALENT,
|
||||
/* min, max, act ct */ 0, 1, 0,
|
||||
/* opt state flags */ LOCK_FLAGS, 0,
|
||||
/* last opt argumnt */ { NULL }, /* --lock */
|
||||
/* arg list/cookie */ NULL,
|
||||
/* must/cannot opts */ NULL, NULL,
|
||||
/* option proc */ NULL,
|
||||
/* desc, NAME, name */ LOCK_DESC, LOCK_NAME, LOCK_name,
|
||||
/* disablement strs */ NULL, NULL },
|
||||
|
||||
{ /* entry idx, value */ 3, VALUE_OPT_UNLOCK,
|
||||
/* equiv idx, value */ 3, VALUE_OPT_UNLOCK,
|
||||
/* equivalenced to */ NO_EQUIVALENT,
|
||||
/* min, max, act ct */ 0, 1, 0,
|
||||
/* opt state flags */ UNLOCK_FLAGS, 0,
|
||||
/* last opt argumnt */ { NULL }, /* --unlock */
|
||||
/* arg list/cookie */ NULL,
|
||||
/* must/cannot opts */ NULL, NULL,
|
||||
/* option proc */ NULL,
|
||||
/* desc, NAME, name */ UNLOCK_DESC, UNLOCK_NAME, UNLOCK_name,
|
||||
/* disablement strs */ NULL, NULL },
|
||||
|
||||
{ /* entry idx, value */ INDEX_OPT_VERSION, VALUE_OPT_VERSION,
|
||||
/* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_VERSION,
|
||||
/* equivalenced to */ NO_EQUIVALENT,
|
||||
/* min, max, act ct */ 0, 1, 0,
|
||||
/* opt state flags */ VER_FLAGS, 0,
|
||||
/* opt state flags */ VER_FLAGS, AOUSE_VERSION,
|
||||
/* last opt argumnt */ { NULL },
|
||||
/* arg list/cookie */ NULL,
|
||||
/* must/cannot opts */ NULL, NULL,
|
||||
@@ -229,7 +263,7 @@ static tOptDesc optDesc[OPTION_CT] = {
|
||||
/* 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,
|
||||
/* opt state flags */ OPTST_IMM | OPTST_NO_INIT, AOUSE_HELP,
|
||||
/* last opt argumnt */ { NULL },
|
||||
/* arg list/cookie */ NULL,
|
||||
/* must/cannot opts */ NULL, NULL,
|
||||
@@ -241,7 +275,7 @@ static tOptDesc optDesc[OPTION_CT] = {
|
||||
/* 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,
|
||||
/* opt state flags */ MORE_HELP_FLAGS, AOUSE_MORE_HELP,
|
||||
/* last opt argumnt */ { NULL },
|
||||
/* arg list/cookie */ NULL,
|
||||
/* must/cannot opts */ NULL, NULL,
|
||||
@@ -251,19 +285,24 @@ static tOptDesc optDesc[OPTION_CT] = {
|
||||
};
|
||||
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* Define the ocpasswd Option Environment
|
||||
*/
|
||||
#define zPROGNAME (ocpasswd_opt_strs+1057)
|
||||
#define zUsageTitle (ocpasswd_opt_strs+1066)
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
/** Reference to the upper cased version of ocpasswd. */
|
||||
#define zPROGNAME (ocpasswd_opt_strs+1075)
|
||||
/** Reference to the title line for ocpasswd usage. */
|
||||
#define zUsageTitle (ocpasswd_opt_strs+1084)
|
||||
/** There is no ocpasswd configuration file. */
|
||||
#define zRcName NULL
|
||||
/** There are no directories to search for ocpasswd config files. */
|
||||
#define apzHomeList NULL
|
||||
#define zBugsAddr (ocpasswd_opt_strs+1167)
|
||||
#define zExplain (ocpasswd_opt_strs+1205)
|
||||
#define zDetail (ocpasswd_opt_strs+1208)
|
||||
#define zFullVersion (ocpasswd_opt_strs+1349)
|
||||
/* extracted from optcode.tlib near line 350 */
|
||||
/** The ocpasswd program bug email address. */
|
||||
#define zBugsAddr (ocpasswd_opt_strs+1173)
|
||||
/** Clarification/explanation of what ocpasswd does. */
|
||||
#define zExplain (ocpasswd_opt_strs+1211)
|
||||
/** Extra detail explaining what ocpasswd does. */
|
||||
#define zDetail (ocpasswd_opt_strs+1213)
|
||||
/** The full version string for ocpasswd. */
|
||||
#define zFullVersion (ocpasswd_opt_strs+1353)
|
||||
/* extracted from optcode.tlib near line 371 */
|
||||
|
||||
#if defined(ENABLE_NLS)
|
||||
# define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT
|
||||
@@ -273,10 +312,8 @@ static tOptDesc optDesc[OPTION_CT] = {
|
||||
# define translate_option_strings NULL
|
||||
#endif /* ENABLE_NLS */
|
||||
|
||||
|
||||
#define ocpasswd_full_usage (NULL)
|
||||
|
||||
#define ocpasswd_short_usage (ocpasswd_opt_strs+1364)
|
||||
#define ocpasswd_short_usage (ocpasswd_opt_strs+1368)
|
||||
|
||||
#endif /* not defined __doxygen__ */
|
||||
|
||||
@@ -286,8 +323,8 @@ static tOptDesc optDesc[OPTION_CT] = {
|
||||
/**
|
||||
* The callout function that invokes the optionUsage function.
|
||||
*
|
||||
* @param pOptions the AutoOpts option description structure
|
||||
* @param pOptDesc the descriptor for the "help" (usage) option.
|
||||
* @param[in] pOptions the AutoOpts option description structure
|
||||
* @param[in] pOptDesc the descriptor for the "help" (usage) option.
|
||||
* @noreturn
|
||||
*/
|
||||
static void
|
||||
@@ -303,23 +340,26 @@ doUsageOpt(tOptions * pOptions, tOptDesc * pOptDesc)
|
||||
/**
|
||||
* Code to handle the passwd option.
|
||||
*
|
||||
* @param pOptions the ocpasswd options data structure
|
||||
* @param pOptDesc the option descriptor for this option.
|
||||
* @param[in] pOptions the ocpasswd options data structure
|
||||
* @param[in,out] pOptDesc the option descriptor for this option.
|
||||
*/
|
||||
static void
|
||||
doOptPasswd(tOptions* pOptions, tOptDesc* pOptDesc)
|
||||
{
|
||||
static teOptFileType const type =
|
||||
FTYPE_MODE_MUST_EXIST + FTYPE_MODE_NO_OPEN;
|
||||
FTYPE_MODE_MAY_EXIST + FTYPE_MODE_NO_OPEN;
|
||||
static tuFileMode mode;
|
||||
#ifndef O_CLOEXEC
|
||||
# define O_CLOEXEC 0
|
||||
#endif
|
||||
mode.file_flags = O_CLOEXEC;
|
||||
|
||||
/*
|
||||
* This function handles special invalid values for "pOptions"
|
||||
*/
|
||||
optionFileCheck(pOptions, pOptDesc, type, mode);
|
||||
}
|
||||
/* extracted from optmain.tlib near line 1113 */
|
||||
/* extracted from optmain.tlib near line 1254 */
|
||||
|
||||
/**
|
||||
* The directory containing the data associated with ocpasswd.
|
||||
@@ -335,6 +375,7 @@ doOptPasswd(tOptions* pOptions, tOptDesc* pOptDesc)
|
||||
#ifndef WITH_PACKAGER
|
||||
# define ocpasswd_packager_info NULL
|
||||
#else
|
||||
/** Packager information for ocpasswd. */
|
||||
static char const ocpasswd_packager_info[] =
|
||||
"Packaged by " WITH_PACKAGER
|
||||
|
||||
@@ -362,7 +403,7 @@ tOptions ocpasswdOptions = {
|
||||
+ OPTPROC_SHORTOPT
|
||||
+ OPTPROC_LONGOPT
|
||||
+ OPTPROC_NO_REQ_OPT
|
||||
+ OPTPROC_NO_ARGS
|
||||
+ OPTPROC_REORDER
|
||||
+ OPTPROC_GNUUSAGE
|
||||
+ OPTPROC_MISUSE ),
|
||||
0, NULL, /* current option index, current option */
|
||||
@@ -382,49 +423,76 @@ tOptions ocpasswdOptions = {
|
||||
NO_EQUIVALENT, /* '-#' option index */
|
||||
NO_EQUIVALENT /* index of default opt */
|
||||
},
|
||||
6 /* full option count */, 3 /* user option count */,
|
||||
7 /* full option count */, 4 /* user option count */,
|
||||
ocpasswd_full_usage, ocpasswd_short_usage,
|
||||
NULL, NULL,
|
||||
PKGDATADIR, ocpasswd_packager_info
|
||||
};
|
||||
|
||||
#if ENABLE_NLS
|
||||
/**
|
||||
* This code is designed to translate translatable option text for the
|
||||
* ocpasswd program. These translations happen upon entry
|
||||
* to optionProcess().
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#ifdef HAVE_DCGETTEXT
|
||||
# include <gettext.h>
|
||||
#endif
|
||||
#include <autoopts/usage-txt.h>
|
||||
|
||||
static char* AO_gettext(char const* pz);
|
||||
static void coerce_it(void** s);
|
||||
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.
|
||||
* 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. It tries the "libopts" domain first, then whatever has been
|
||||
* set via the \a textdomain(3) call.
|
||||
*
|
||||
* @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)
|
||||
AO_gettext(char const * pz)
|
||||
{
|
||||
char* pzRes;
|
||||
char * res;
|
||||
if (pz == NULL)
|
||||
return NULL;
|
||||
pzRes = _(pz);
|
||||
if (pzRes == pz)
|
||||
return pzRes;
|
||||
pzRes = strdup(pzRes);
|
||||
if (pzRes == NULL) {
|
||||
#ifdef HAVE_DCGETTEXT
|
||||
/*
|
||||
* While processing the option_xlateable_txt data, try to use the
|
||||
* "libopts" domain. Once we switch to the option descriptor data,
|
||||
* do *not* use that domain.
|
||||
*/
|
||||
if (option_xlateable_txt.field_ct != 0) {
|
||||
res = dgettext("libopts", pz);
|
||||
if (res == pz)
|
||||
res = (char *)(void *)_(pz);
|
||||
} else
|
||||
res = (char *)(void *)_(pz);
|
||||
#else
|
||||
res = (char *)(void *)_(pz);
|
||||
#endif
|
||||
if (res == pz)
|
||||
return res;
|
||||
res = strdup(res);
|
||||
if (res == NULL) {
|
||||
fputs(_("No memory for duping translated strings\n"), stderr);
|
||||
exit(OCPASSWD_EXIT_FAILURE);
|
||||
}
|
||||
return pzRes;
|
||||
return res;
|
||||
}
|
||||
|
||||
static void coerce_it(void** s) { *s = AO_gettext(*s);
|
||||
/**
|
||||
* All the pointers we use are marked "* const", but they are stored in
|
||||
* writable memory. Coerce the mutability and set the pointer.
|
||||
*/
|
||||
static void coerce_it(void ** s) { *s = AO_gettext(*s);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -434,56 +502,413 @@ static void coerce_it(void** s) { *s = AO_gettext(*s);
|
||||
static void
|
||||
translate_option_strings(void)
|
||||
{
|
||||
tOptions * const pOpt = &ocpasswdOptions;
|
||||
tOptions * const opts = &ocpasswdOptions;
|
||||
|
||||
/*
|
||||
* 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) {
|
||||
if (option_xlateable_txt.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;
|
||||
char ** ppz = (char**)(void*)&(option_xlateable_txt);
|
||||
int ix = option_xlateable_txt.field_ct;
|
||||
|
||||
do {
|
||||
ppz++;
|
||||
ppz++; /* skip over field_ct */
|
||||
*ppz = AO_gettext(*ppz);
|
||||
} while (--ix > 0);
|
||||
/* prevent re-translation and disable "libopts" domain lookup */
|
||||
option_xlateable_txt.field_ct = 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));
|
||||
coerce_it((void*)&(opts->pzCopyright));
|
||||
coerce_it((void*)&(opts->pzCopyNotice));
|
||||
coerce_it((void*)&(opts->pzFullVersion));
|
||||
coerce_it((void*)&(opts->pzUsageTitle));
|
||||
coerce_it((void*)&(opts->pzExplain));
|
||||
coerce_it((void*)&(opts->pzDetail));
|
||||
{
|
||||
tOptDesc * od = opts->pOptDesc;
|
||||
for (ix = opts->optCt; ix > 0; ix--, od++)
|
||||
coerce_it((void*)&(od->pzText));
|
||||
}
|
||||
/* prevent re-translation */
|
||||
ocpasswdOptions.fOptSet |= OPTPROC_NXLAT_OPT_CFG | OPTPROC_NXLAT_OPT;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* ENABLE_NLS */
|
||||
|
||||
#ifdef DO_NOT_COMPILE_THIS_CODE_IT_IS_FOR_GETTEXT
|
||||
/** I18N function strictly for xgettext. Do not compile. */
|
||||
static void bogus_function(void) {
|
||||
/* TRANSLATORS:
|
||||
|
||||
The following dummy function was crated solely so that xgettext can extract
|
||||
the correct strings. These strings are actually referenced by a field name
|
||||
in the ocpasswdOptions structure noted in the comments below. The
|
||||
literal text is defined in ocpasswd_opt_strs.
|
||||
|
||||
NOTE: the strings below are segmented with respect to the source string
|
||||
ocpasswd_opt_strs. The strings above are handed off for translation
|
||||
at run time a paragraph at a time. Consequently, they are presented here
|
||||
for translation a paragraph at a time.
|
||||
|
||||
ALSO: often the description for an option will reference another option
|
||||
by name. These are set off with apostrophe quotes (I hope). Do not
|
||||
translate option names.
|
||||
*/
|
||||
/* referenced via ocpasswdOptions.pzCopyright */
|
||||
puts(_("ocpasswd 0.1.1\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 GNU General Public License,\n\
|
||||
version 2 <http://gnu.org/licenses/gpl.html>\n"));
|
||||
|
||||
/* referenced via ocpasswdOptions.pzCopyNotice */
|
||||
puts(_("ocpasswd is free software: you can redistribute it and/or modify it under\n\
|
||||
the terms of version 2 of the GNU General Public License, as published by\n\
|
||||
the Free Software Foundation.\n\n"));
|
||||
puts(_("ocpasswd 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"));
|
||||
puts(_("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"));
|
||||
|
||||
/* referenced via ocpasswdOptions.pOptDesc->pzText */
|
||||
puts(_("Password file"));
|
||||
|
||||
/* referenced via ocpasswdOptions.pOptDesc->pzText */
|
||||
puts(_("User's group name"));
|
||||
|
||||
/* referenced via ocpasswdOptions.pOptDesc->pzText */
|
||||
puts(_("Lock user"));
|
||||
|
||||
/* referenced via ocpasswdOptions.pOptDesc->pzText */
|
||||
puts(_("Unlock user"));
|
||||
|
||||
/* referenced via ocpasswdOptions.pOptDesc->pzText */
|
||||
puts(_("display extended usage information and exit"));
|
||||
|
||||
/* referenced via ocpasswdOptions.pOptDesc->pzText */
|
||||
puts(_("extended usage information passed thru pager"));
|
||||
|
||||
/* referenced via ocpasswdOptions.pOptDesc->pzText */
|
||||
puts(_("output version information and exit"));
|
||||
|
||||
/* referenced via ocpasswdOptions.pzUsageTitle */
|
||||
puts(_("ocpasswd - ocpasswd\n\
|
||||
Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [username]\n"));
|
||||
|
||||
/* referenced via ocpasswdOptions.pzExplain */
|
||||
puts(_("\n"));
|
||||
|
||||
/* referenced via ocpasswdOptions.pzDetail */
|
||||
puts(_("This program is openconnect password (ocpasswd) utility. It allows the\n\
|
||||
generation and handling of a 'plain' password file used by ocserv.\n"));
|
||||
|
||||
/* referenced via ocpasswdOptions.pzFullVersion */
|
||||
puts(_("ocpasswd 0.1.1"));
|
||||
|
||||
/* referenced via ocpasswdOptions.pzFullUsage */
|
||||
puts(_("<<<NOT-FOUND>>>"));
|
||||
|
||||
/* referenced via ocpasswdOptions.pzShortUsage */
|
||||
puts(_("Usage: ocpasswd -c [passwd] [options] username\n\
|
||||
ocpasswd --help for usage instructions.\n"));
|
||||
/* LIBOPTS-MESSAGES: */
|
||||
#line 60 "../autoopts.c"
|
||||
puts(_("allocation of %d bytes failed\n"));
|
||||
#line 86 "../autoopts.c"
|
||||
puts(_("allocation of %d bytes failed\n"));
|
||||
#line 53 "../init.c"
|
||||
puts(_("AutoOpts function called without option descriptor\n"));
|
||||
#line 89 "../init.c"
|
||||
puts(_("\tThis exceeds the compiled library version: "));
|
||||
#line 87 "../init.c"
|
||||
puts(_("Automated Options Processing Error!\n"
|
||||
"\t%s called AutoOpts function with structure version %d:%d:%d.\n"));
|
||||
#line 73 "../autoopts.c"
|
||||
puts(_("realloc of %d bytes at 0x%p failed\n"));
|
||||
#line 91 "../init.c"
|
||||
puts(_("\tThis is less than the minimum library version: "));
|
||||
#line 121 "../version.c"
|
||||
puts(_("Automated Options version %s\n"
|
||||
"\tCopyright (C) 1999-2013 by Bruce Korb - all rights reserved\n"));
|
||||
#line 310 "../usage.c"
|
||||
puts(_("(AutoOpts bug): %s.\n"));
|
||||
#line 90 "../reset.c"
|
||||
puts(_("optionResetOpt() called, but reset-option not configured"));
|
||||
#line 329 "../usage.c"
|
||||
puts(_("could not locate the 'help' option"));
|
||||
#line 351 "../autoopts.c"
|
||||
puts(_("optionProcess() was called with invalid data"));
|
||||
#line 783 "../usage.c"
|
||||
puts(_("invalid argument type specified"));
|
||||
#line 589 "../find.c"
|
||||
puts(_("defaulted to option with optional arg"));
|
||||
#line 76 "../alias.c"
|
||||
puts(_("aliasing option is out of range."));
|
||||
#line 229 "../enum.c"
|
||||
puts(_("%s error: the keyword '%s' is ambiguous for %s\n"));
|
||||
#line 108 "../find.c"
|
||||
puts(_(" The following options match:\n"));
|
||||
#line 290 "../find.c"
|
||||
puts(_("%s: ambiguous option name: %s (matches %d options)\n"));
|
||||
#line 161 "../check.c"
|
||||
puts(_("%s: Command line arguments required\n"));
|
||||
#line 43 "../alias.c"
|
||||
puts(_("%d %s%s options allowed\n"));
|
||||
#line 81 "../makeshell.c"
|
||||
puts(_("%s error %d (%s) calling %s for '%s'\n"));
|
||||
#line 293 "../makeshell.c"
|
||||
puts(_("interprocess pipe"));
|
||||
#line 168 "../version.c"
|
||||
puts(_("error: version option argument '%c' invalid. Use:\n"
|
||||
"\t'v' - version only\n"
|
||||
"\t'c' - version and copyright\n"
|
||||
"\t'n' - version and full copyright notice\n"));
|
||||
#line 58 "../check.c"
|
||||
puts(_("%s error: the '%s' and '%s' options conflict\n"));
|
||||
#line 214 "../find.c"
|
||||
puts(_("%s: The '%s' option has been disabled."));
|
||||
#line 421 "../find.c"
|
||||
puts(_("%s: The '%s' option has been disabled."));
|
||||
#line 38 "../alias.c"
|
||||
puts(_("-equivalence"));
|
||||
#line 460 "../find.c"
|
||||
puts(_("%s: illegal option -- %c\n"));
|
||||
#line 110 "../reset.c"
|
||||
puts(_("%s: illegal option -- %c\n"));
|
||||
#line 268 "../find.c"
|
||||
puts(_("%s: illegal option -- %s\n"));
|
||||
#line 746 "../find.c"
|
||||
puts(_("%s: illegal option -- %s\n"));
|
||||
#line 118 "../reset.c"
|
||||
puts(_("%s: illegal option -- %s\n"));
|
||||
#line 332 "../find.c"
|
||||
puts(_("%s: unknown vendor extension option -- %s\n"));
|
||||
#line 154 "../enum.c"
|
||||
puts(_(" or an integer from %d through %d\n"));
|
||||
#line 164 "../enum.c"
|
||||
puts(_(" or an integer from %d through %d\n"));
|
||||
#line 782 "../usage.c"
|
||||
puts(_("%s error: invalid option descriptor for %s\n"));
|
||||
#line 1110 "../usage.c"
|
||||
puts(_("%s error: invalid option descriptor for %s\n"));
|
||||
#line 379 "../find.c"
|
||||
puts(_("%s: invalid option name: %s\n"));
|
||||
#line 518 "../find.c"
|
||||
puts(_("%s: The '%s' option requires an argument.\n"));
|
||||
#line 171 "../autoopts.c"
|
||||
puts(_("(AutoOpts bug): Equivalenced option '%s' was equivalenced to both\n"
|
||||
"\t'%s' and '%s'."));
|
||||
#line 94 "../check.c"
|
||||
puts(_("%s error: The %s option is required\n"));
|
||||
#line 623 "../find.c"
|
||||
puts(_("%s: The '%s' option cannot have an argument.\n"));
|
||||
#line 151 "../check.c"
|
||||
puts(_("%s: Command line arguments are not allowed.\n"));
|
||||
#line 531 "../save.c"
|
||||
puts(_("error %d (%s) creating %s\n"));
|
||||
#line 229 "../enum.c"
|
||||
puts(_("%s error: '%s' does not match any %s keywords.\n"));
|
||||
#line 93 "../reset.c"
|
||||
puts(_("%s error: The '%s' option requires an argument.\n"));
|
||||
#line 184 "../save.c"
|
||||
puts(_("error %d (%s) stat-ing %s\n"));
|
||||
#line 238 "../save.c"
|
||||
puts(_("error %d (%s) stat-ing %s\n"));
|
||||
#line 143 "../restore.c"
|
||||
puts(_("%s error: no saved option state\n"));
|
||||
#line 246 "../autoopts.c"
|
||||
puts(_("'%s' is not a command line option.\n"));
|
||||
#line 114 "../time.c"
|
||||
puts(_("%s error: '%s' is not a recognizable date/time.\n"));
|
||||
#line 132 "../save.c"
|
||||
puts(_("'%s' not defined\n"));
|
||||
#line 53 "../time.c"
|
||||
puts(_("%s error: '%s' is not a recognizable time duration.\n"));
|
||||
#line 92 "../check.c"
|
||||
puts(_("%s error: The %s option must appear %d times.\n"));
|
||||
#line 157 "../numeric.c"
|
||||
puts(_("%s error: '%s' is not a recognizable number.\n"));
|
||||
#line 195 "../enum.c"
|
||||
puts(_("%s error: %s exceeds %s keyword count\n"));
|
||||
#line 366 "../usage.c"
|
||||
puts(_("Try '%s %s' for more information.\n"));
|
||||
#line 45 "../alias.c"
|
||||
puts(_("one %s%s option allowed\n"));
|
||||
#line 195 "../makeshell.c"
|
||||
puts(_("standard output"));
|
||||
#line 930 "../makeshell.c"
|
||||
puts(_("standard output"));
|
||||
#line 304 "../usage.c"
|
||||
puts(_("standard output"));
|
||||
#line 451 "../usage.c"
|
||||
puts(_("standard output"));
|
||||
#line 660 "../usage.c"
|
||||
puts(_("standard output"));
|
||||
#line 175 "../version.c"
|
||||
puts(_("standard output"));
|
||||
#line 304 "../usage.c"
|
||||
puts(_("standard error"));
|
||||
#line 451 "../usage.c"
|
||||
puts(_("standard error"));
|
||||
#line 660 "../usage.c"
|
||||
puts(_("standard error"));
|
||||
#line 175 "../version.c"
|
||||
puts(_("standard error"));
|
||||
#line 195 "../makeshell.c"
|
||||
puts(_("write"));
|
||||
#line 930 "../makeshell.c"
|
||||
puts(_("write"));
|
||||
#line 303 "../usage.c"
|
||||
puts(_("write"));
|
||||
#line 450 "../usage.c"
|
||||
puts(_("write"));
|
||||
#line 659 "../usage.c"
|
||||
puts(_("write"));
|
||||
#line 174 "../version.c"
|
||||
puts(_("write"));
|
||||
#line 60 "../numeric.c"
|
||||
puts(_("%s error: %s option value %ld is out of range.\n"));
|
||||
#line 44 "../check.c"
|
||||
puts(_("%s error: %s option requires the %s option\n"));
|
||||
#line 131 "../save.c"
|
||||
puts(_("%s warning: cannot save options - %s not regular file\n"));
|
||||
#line 183 "../save.c"
|
||||
puts(_("%s warning: cannot save options - %s not regular file\n"));
|
||||
#line 237 "../save.c"
|
||||
puts(_("%s warning: cannot save options - %s not regular file\n"));
|
||||
#line 256 "../save.c"
|
||||
puts(_("%s warning: cannot save options - %s not regular file\n"));
|
||||
#line 530 "../save.c"
|
||||
puts(_("%s warning: cannot save options - %s not regular file\n"));
|
||||
/* END-LIBOPTS-MESSAGES */
|
||||
|
||||
/* USAGE-TEXT: */
|
||||
#line 908 "../usage.c"
|
||||
puts(_("\t\t\t\t- an alternate for '%s'\n"));
|
||||
#line 1177 "../usage.c"
|
||||
puts(_("Version, usage and configuration options:"));
|
||||
#line 959 "../usage.c"
|
||||
puts(_("\t\t\t\t- default option for unnamed options\n"));
|
||||
#line 872 "../usage.c"
|
||||
puts(_("\t\t\t\t- disabled as '--%s'\n"));
|
||||
#line 1146 "../usage.c"
|
||||
puts(_(" --- %-14s %s\n"));
|
||||
#line 1144 "../usage.c"
|
||||
puts(_("This option has been disabled"));
|
||||
#line 899 "../usage.c"
|
||||
puts(_("\t\t\t\t- enabled by default\n"));
|
||||
#line 40 "../alias.c"
|
||||
puts(_("%s error: only "));
|
||||
#line 1221 "../usage.c"
|
||||
puts(_(" - examining environment variables named %s_*\n"));
|
||||
#line 168 "../file.c"
|
||||
puts(_("\t\t\t\t- file must not pre-exist\n"));
|
||||
#line 172 "../file.c"
|
||||
puts(_("\t\t\t\t- file must pre-exist\n"));
|
||||
#line 416 "../usage.c"
|
||||
puts(_("Options are specified by doubled hyphens and their name or by a single\n"
|
||||
"hyphen and the flag character.\n"));
|
||||
#line 908 "../makeshell.c"
|
||||
puts(_("\n"
|
||||
"= = = = = = = =\n\n"
|
||||
"This incarnation of genshell will produce\n"
|
||||
"a shell script to parse the options for %s:\n\n"));
|
||||
#line 161 "../enum.c"
|
||||
puts(_(" or an integer mask with any of the lower %d bits set\n"));
|
||||
#line 932 "../usage.c"
|
||||
puts(_("\t\t\t\t- is a set membership option\n"));
|
||||
#line 953 "../usage.c"
|
||||
puts(_("\t\t\t\t- must appear between %d and %d times\n"));
|
||||
#line 418 "../usage.c"
|
||||
puts(_("Options are specified by single or double hyphens and their name.\n"));
|
||||
#line 939 "../usage.c"
|
||||
puts(_("\t\t\t\t- may appear multiple times\n"));
|
||||
#line 926 "../usage.c"
|
||||
puts(_("\t\t\t\t- may not be preset\n"));
|
||||
#line 1336 "../usage.c"
|
||||
puts(_(" Arg Option-Name Description\n"));
|
||||
#line 1272 "../usage.c"
|
||||
puts(_(" Flg Arg Option-Name Description\n"));
|
||||
#line 1330 "../usage.c"
|
||||
puts(_(" Flg Arg Option-Name Description\n"));
|
||||
#line 1331 "../usage.c"
|
||||
puts(_(" %3s %s"));
|
||||
#line 1337 "../usage.c"
|
||||
puts(_(" %3s %s"));
|
||||
#line 423 "../usage.c"
|
||||
puts(_("The '-#<number>' option may omit the hash char\n"));
|
||||
#line 419 "../usage.c"
|
||||
puts(_("All arguments are named options.\n"));
|
||||
#line 1006 "../usage.c"
|
||||
puts(_(" - reading file %s"));
|
||||
#line 445 "../usage.c"
|
||||
puts(_("\n"
|
||||
"Please send bug reports to: <%s>\n"));
|
||||
#line 100 "../version.c"
|
||||
puts(_("\n"
|
||||
"Please send bug reports to: <%s>\n"));
|
||||
#line 129 "../version.c"
|
||||
puts(_("\n"
|
||||
"Please send bug reports to: <%s>\n"));
|
||||
#line 938 "../usage.c"
|
||||
puts(_("\t\t\t\t- may NOT appear - preset only\n"));
|
||||
#line 978 "../usage.c"
|
||||
puts(_("\n"
|
||||
"The following option preset mechanisms are supported:\n"));
|
||||
#line 1219 "../usage.c"
|
||||
puts(_("\n"
|
||||
"The following option preset mechanisms are supported:\n"));
|
||||
#line 717 "../usage.c"
|
||||
puts(_("prohibits these options:\n"));
|
||||
#line 712 "../usage.c"
|
||||
puts(_("prohibits the option '%s'\n"));
|
||||
#line 81 "../numeric.c"
|
||||
puts(_("%s%ld to %ld"));
|
||||
#line 79 "../numeric.c"
|
||||
puts(_("%sgreater than or equal to %ld"));
|
||||
#line 75 "../numeric.c"
|
||||
puts(_("%s%ld exactly"));
|
||||
#line 68 "../numeric.c"
|
||||
puts(_("%sit must lie in one of the ranges:\n"));
|
||||
#line 68 "../numeric.c"
|
||||
puts(_("%sit must be in the range:\n"));
|
||||
#line 88 "../numeric.c"
|
||||
puts(_(", or\n"));
|
||||
#line 66 "../numeric.c"
|
||||
puts(_("%sis scalable with a suffix: k/K/m/M/g/G/t/T\n"));
|
||||
#line 77 "../numeric.c"
|
||||
puts(_("%sless than or equal to %ld"));
|
||||
#line 426 "../usage.c"
|
||||
puts(_("Operands and options may be intermixed. They will be reordered.\n"));
|
||||
#line 687 "../usage.c"
|
||||
puts(_("requires the option '%s'\n"));
|
||||
#line 690 "../usage.c"
|
||||
puts(_("requires these options:\n"));
|
||||
#line 1348 "../usage.c"
|
||||
puts(_(" Arg Option-Name Req? Description\n"));
|
||||
#line 1342 "../usage.c"
|
||||
puts(_(" Flg Arg Option-Name Req? Description\n"));
|
||||
#line 162 "../enum.c"
|
||||
puts(_("or you may use a numeric representation. Preceding these with a '!'\n"
|
||||
"will clear the bits, specifying 'none' will clear all bits, and 'all'\n"
|
||||
"will set them all. Multiple entries may be passed as an option\n"
|
||||
"argument list.\n"));
|
||||
#line 945 "../usage.c"
|
||||
puts(_("\t\t\t\t- may appear up to %d times\n"));
|
||||
#line 72 "../enum.c"
|
||||
puts(_("The valid \"%s\" option keywords are:\n"));
|
||||
#line 1181 "../usage.c"
|
||||
puts(_("The next option supports vendor supported extra options:"));
|
||||
#line 808 "../usage.c"
|
||||
puts(_("These additional options are:"));
|
||||
/* END-USAGE-TEXT */
|
||||
}
|
||||
#endif /* uncompilable code */
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -1,15 +1,17 @@
|
||||
AutoGen Definitions options;
|
||||
prog-name = ocpasswd;
|
||||
prog-title = "OpenConnect server";
|
||||
prog-desc = "OpenConnect VPN server.";
|
||||
prog-title = "ocpasswd";
|
||||
prog-desc = "OpenConnect VPN server plain password file handling program.";
|
||||
disable-save;
|
||||
no-xlate = opt;
|
||||
gnu-usage;
|
||||
config-header = config.h;
|
||||
long-opts;
|
||||
no-misuse-usage;
|
||||
short-usage = "Usage: ocpasswd [options] -c [passwd]\nocpasswd --help for usage instructions.\n";
|
||||
short-usage = "Usage: ocpasswd -c [passwd] [options] username\nocpasswd --help for usage instructions.\n";
|
||||
explain = "";
|
||||
reorder-args;
|
||||
argument = "[username]";
|
||||
#include version.def
|
||||
|
||||
detail = "This program is openconnect password (ocpasswd) utility. It allows the generation
|
||||
@@ -27,19 +29,10 @@ flag = {
|
||||
name = passwd;
|
||||
value = c;
|
||||
arg-type = file;
|
||||
file-exists = yes;
|
||||
descrip = "Password file";
|
||||
doc = "";
|
||||
};
|
||||
|
||||
flag = {
|
||||
name = username;
|
||||
value = u;
|
||||
arg-type = string;
|
||||
descrip = "User name";
|
||||
doc = "";
|
||||
};
|
||||
|
||||
flag = {
|
||||
name = groupname;
|
||||
value = g;
|
||||
@@ -48,6 +41,20 @@ flag = {
|
||||
doc = "";
|
||||
};
|
||||
|
||||
flag = {
|
||||
name = lock;
|
||||
value = l;
|
||||
descrip = "Lock user";
|
||||
doc = "Prevents the specified user from logging in";
|
||||
};
|
||||
|
||||
flag = {
|
||||
name = unlock;
|
||||
value = u;
|
||||
descrip = "Unlock user";
|
||||
doc = "Re-enables login for the specified user";
|
||||
};
|
||||
|
||||
help-value = h;
|
||||
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
/* -*- buffer-read-only: t -*- vi: set ro:
|
||||
*
|
||||
*
|
||||
* DO NOT EDIT THIS FILE (ocpasswd-args.h)
|
||||
*
|
||||
* It has been AutoGen-ed March 14, 2013 at 01:27:04 PM by AutoGen 5.16
|
||||
*
|
||||
* It has been AutoGen-ed April 28, 2013 at 03:30:06 PM by AutoGen 5.17.3
|
||||
* From the definitions ocpasswd-args.def
|
||||
* and the template file options
|
||||
*
|
||||
* Generated from AutoOpts 36:4:11 templates.
|
||||
* Generated from AutoOpts 38:0:13 templates.
|
||||
*
|
||||
* AutoOpts is a copyrighted work. This header file is not encumbered
|
||||
* by AutoOpts licensing, but is provided under the licensing terms chosen
|
||||
@@ -21,23 +21,23 @@
|
||||
*
|
||||
* 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>
|
||||
* redistribution under the terms of the GNU General Public License,
|
||||
* version 2 <http://gnu.org/licenses/gpl.html>
|
||||
*
|
||||
* ocpasswd 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.
|
||||
*
|
||||
*
|
||||
* ocpasswd 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/>.
|
||||
*/
|
||||
/*
|
||||
/**
|
||||
* This file contains the programmatic interface to the Automated
|
||||
* Options generated for the ocpasswd program.
|
||||
* These macros are documented in the AutoGen info file in the
|
||||
@@ -48,75 +48,99 @@
|
||||
#include "config.h"
|
||||
#include <autoopts/options.h>
|
||||
|
||||
/*
|
||||
/**
|
||||
* 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 147460
|
||||
#define AO_TEMPLATE_VERSION 155648
|
||||
#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:
|
||||
/**
|
||||
* Enumeration of each option type for ocpasswd
|
||||
*/
|
||||
typedef enum {
|
||||
INDEX_OPT_PASSWD = 0,
|
||||
INDEX_OPT_USERNAME = 1,
|
||||
INDEX_OPT_GROUPNAME = 2,
|
||||
INDEX_OPT_VERSION = 3,
|
||||
INDEX_OPT_HELP = 4,
|
||||
INDEX_OPT_MORE_HELP = 5
|
||||
INDEX_OPT_GROUPNAME = 1,
|
||||
INDEX_OPT_LOCK = 2,
|
||||
INDEX_OPT_UNLOCK = 3,
|
||||
INDEX_OPT_VERSION = 4,
|
||||
INDEX_OPT_HELP = 5,
|
||||
INDEX_OPT_MORE_HELP = 6
|
||||
} teOptIndex;
|
||||
/** count of all options for ocpasswd */
|
||||
#define OPTION_CT 7
|
||||
/** ocpasswd version */
|
||||
#define OCPASSWD_VERSION "0.1.1"
|
||||
/** Full ocpasswd version text */
|
||||
#define OCPASSWD_FULL_VERSION "ocpasswd 0.1.1"
|
||||
|
||||
#define OPTION_CT 6
|
||||
#define OCPASSWD_VERSION "0.0.3"
|
||||
#define OCPASSWD_FULL_VERSION "ocpasswd 0.0.3"
|
||||
|
||||
/*
|
||||
/**
|
||||
* Interface defines for all options. Replace "n" with the UPPER_CASED
|
||||
* option name (as in the teOptIndex enumeration above).
|
||||
* e.g. HAVE_OPT(PASSWD)
|
||||
*/
|
||||
#define DESC(n) (ocpasswdOptions.pOptDesc[INDEX_OPT_## n])
|
||||
/** 'true' if an option has been specified in any way */
|
||||
#define HAVE_OPT(n) (! UNUSED_OPT(& DESC(n)))
|
||||
/** The string argument to an option. The argument type must be "string". */
|
||||
#define OPT_ARG(n) (DESC(n).optArg.argString)
|
||||
/** Mask the option state revealing how an option was specified.
|
||||
* It will be one and only one of \a OPTST_SET, \a OPTST_PRESET,
|
||||
* \a OPTST_DEFINED, \a OPTST_RESET or zero.
|
||||
*/
|
||||
#define STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK)
|
||||
/** Count of option's occurrances *on the command line*. */
|
||||
#define COUNT_OPT(n) (DESC(n).optOccCt)
|
||||
/** mask of \a OPTST_SET and \a OPTST_DEFINED. */
|
||||
#define ISSEL_OPT(n) (SELECTED_OPT(&DESC(n)))
|
||||
/** 'true' if \a HAVE_OPT would yield 'false'. */
|
||||
#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n)))
|
||||
/** 'true' if OPTST_DISABLED bit not set. */
|
||||
#define ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n)))
|
||||
/** number of stacked option arguments.
|
||||
* Valid only for stacked option arguments. */
|
||||
#define STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt)
|
||||
/** stacked argument vector.
|
||||
* Valid only for stacked option arguments. */
|
||||
#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs)
|
||||
/** Reset an option. */
|
||||
#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 )
|
||||
|
||||
/* * * * * *
|
||||
*
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
/**
|
||||
* Enumeration of ocpasswd exit codes
|
||||
*/
|
||||
typedef enum {
|
||||
OCPASSWD_EXIT_SUCCESS = 0,
|
||||
OCPASSWD_EXIT_FAILURE = 1,
|
||||
OCPASSWD_EXIT_LIBOPTS_FAILURE = 70
|
||||
OCPASSWD_EXIT_SUCCESS = 0,
|
||||
OCPASSWD_EXIT_FAILURE = 1,
|
||||
OCPASSWD_EXIT_USAGE_ERROR = 64,
|
||||
OCPASSWD_EXIT_LIBOPTS_FAILURE = 70
|
||||
} ocpasswd_exit_code_t;
|
||||
/* * * * * *
|
||||
*
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
/**
|
||||
* Interface defines for specific options.
|
||||
* @{
|
||||
*/
|
||||
#define VALUE_OPT_PASSWD 'c'
|
||||
#define VALUE_OPT_USERNAME 'u'
|
||||
#define VALUE_OPT_GROUPNAME 'g'
|
||||
#define VALUE_OPT_LOCK 'l'
|
||||
#define VALUE_OPT_UNLOCK 'u'
|
||||
/** option flag (value) for " (get "val-name") " option */
|
||||
#define VALUE_OPT_HELP 'h'
|
||||
/** option flag (value) for " (get "val-name") " option */
|
||||
#define VALUE_OPT_MORE_HELP '!'
|
||||
/** option flag (value) for " (get "val-name") " option */
|
||||
#define VALUE_OPT_VERSION 'v'
|
||||
/*
|
||||
* Interface defines not associated with particular options
|
||||
@@ -128,7 +152,7 @@ typedef enum {
|
||||
ocpasswdOptions.pzCurOpt = NULL)
|
||||
#define START_OPT RESTART_OPT(1)
|
||||
#define USAGE(c) (*ocpasswdOptions.pUsageProc)(&ocpasswdOptions, c)
|
||||
/* extracted from opthead.tlib near line 484 */
|
||||
/* extracted from opthead.tlib near line 538 */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -144,6 +168,12 @@ extern tOptions ocpasswdOptions;
|
||||
#if defined(ENABLE_NLS)
|
||||
# ifndef _
|
||||
# include <stdio.h>
|
||||
# ifndef HAVE_GETTEXT
|
||||
extern char * gettext(char const *);
|
||||
# else
|
||||
# include <libintl.h>
|
||||
# endif
|
||||
|
||||
static inline char* aoGetsText(char const* pz) {
|
||||
if (pz == NULL) return NULL;
|
||||
return (char*)gettext(pz);
|
||||
|
||||
169
src/ocpasswd.c
169
src/ocpasswd.c
@@ -55,7 +55,7 @@ crypt_int(const char *fpasswd, const char *username, const char *groupname,
|
||||
FILE *fd, *fd2;
|
||||
char *line = NULL;
|
||||
size_t line_size;
|
||||
ssize_t len;
|
||||
ssize_t len, l;
|
||||
int ret;
|
||||
|
||||
ret = gnutls_rnd(GNUTLS_RND_NONCE, _salt, sizeof(_salt));
|
||||
@@ -100,6 +100,60 @@ crypt_int(const char *fpasswd, const char *username, const char *groupname,
|
||||
exit(1);
|
||||
}
|
||||
|
||||
fd2 = fopen(tmp_passwd, "w");
|
||||
if (fd2 == NULL) {
|
||||
fprintf(stderr, "Cannot open '%s' for write\n", tmp_passwd);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
fd = fopen(fpasswd, "r");
|
||||
if (fd == NULL) {
|
||||
fprintf(fd2, "%s:%s:%s\n", username, groupname, cr_passwd);
|
||||
} else {
|
||||
while ((len = getline(&line, &line_size, fd)) > 0) {
|
||||
p = strchr(line, ':');
|
||||
if (p == NULL)
|
||||
continue;
|
||||
|
||||
l = p-line;
|
||||
if (l == username_len && strncmp(line, username, l) == 0) {
|
||||
fprintf(fd2, "%s:%s:%s\n", username, groupname, cr_passwd);
|
||||
} else {
|
||||
fwrite(line, 1, len, fd2);
|
||||
}
|
||||
}
|
||||
free(line);
|
||||
fclose(fd);
|
||||
}
|
||||
|
||||
fclose(fd2);
|
||||
|
||||
rename(tmp_passwd, fpasswd);
|
||||
free(tmp_passwd);
|
||||
}
|
||||
|
||||
static void
|
||||
lock_user(const char *fpasswd, const char *username)
|
||||
{
|
||||
FILE * fd, *fd2;
|
||||
char *tmp_passwd;
|
||||
char *line, *p;
|
||||
unsigned fpasswd_len = strlen(fpasswd);
|
||||
unsigned tmp_passwd_len;
|
||||
unsigned username_len = strlen(username);
|
||||
ssize_t len, l;
|
||||
size_t line_size;
|
||||
struct stat st;
|
||||
|
||||
tmp_passwd_len = fpasswd_len + 5;
|
||||
tmp_passwd = malloc(tmp_passwd_len);
|
||||
|
||||
snprintf(tmp_passwd, tmp_passwd_len, "%s.tmp", fpasswd);
|
||||
if (stat(tmp_passwd, &st) != -1) {
|
||||
fprintf(stderr, "file '%s' is locked\n", fpasswd);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
fd = fopen(fpasswd, "r");
|
||||
if (fd == NULL) {
|
||||
fprintf(stderr, "Cannot open '%s' for read\n", fpasswd);
|
||||
@@ -112,13 +166,23 @@ crypt_int(const char *fpasswd, const char *username, const char *groupname,
|
||||
exit(1);
|
||||
}
|
||||
|
||||
line = NULL;
|
||||
while ((len = getline(&line, &line_size, fd)) > 0) {
|
||||
p = strchr(line, ':');
|
||||
if (p == NULL)
|
||||
continue;
|
||||
|
||||
if (strncmp(line, username, MAX(username_len, (unsigned)(p-line))) == 0) {
|
||||
fprintf(fd2, "%s:%s:%s\n", username, groupname, cr_passwd);
|
||||
l = p-line;
|
||||
if (l == username_len && strncmp(line, username, l) == 0) {
|
||||
p = strchr(p+1, ':');
|
||||
if (p == NULL)
|
||||
continue;
|
||||
p++;
|
||||
|
||||
l = p-line;
|
||||
fwrite(line, 1, l, fd2);
|
||||
fputc('!', fd2);
|
||||
fwrite(p, 1, len-l, fd2);
|
||||
} else {
|
||||
fwrite(line, 1, len, fd2);
|
||||
}
|
||||
@@ -129,6 +193,73 @@ crypt_int(const char *fpasswd, const char *username, const char *groupname,
|
||||
fclose(fd2);
|
||||
|
||||
rename(tmp_passwd, fpasswd);
|
||||
free(tmp_passwd);
|
||||
}
|
||||
|
||||
static void
|
||||
unlock_user(const char *fpasswd, const char *username)
|
||||
{
|
||||
FILE * fd, *fd2;
|
||||
char *tmp_passwd;
|
||||
char *line, *p;
|
||||
unsigned fpasswd_len = strlen(fpasswd);
|
||||
unsigned tmp_passwd_len;
|
||||
unsigned username_len = strlen(username);
|
||||
ssize_t len, l;
|
||||
size_t line_size;
|
||||
struct stat st;
|
||||
|
||||
tmp_passwd_len = fpasswd_len + 5;
|
||||
tmp_passwd = malloc(tmp_passwd_len);
|
||||
|
||||
snprintf(tmp_passwd, tmp_passwd_len, "%s.tmp", fpasswd);
|
||||
if (stat(tmp_passwd, &st) != -1) {
|
||||
fprintf(stderr, "file '%s' is locked\n", fpasswd);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
fd = fopen(fpasswd, "r");
|
||||
if (fd == NULL) {
|
||||
fprintf(stderr, "Cannot open '%s' for read\n", fpasswd);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
fd2 = fopen(tmp_passwd, "w");
|
||||
if (fd2 == NULL) {
|
||||
fprintf(stderr, "Cannot open '%s' for write\n", tmp_passwd);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
line = NULL;
|
||||
while ((len = getline(&line, &line_size, fd)) > 0) {
|
||||
p = strchr(line, ':');
|
||||
if (p == NULL)
|
||||
continue;
|
||||
|
||||
l = p-line;
|
||||
if (l == username_len && strncmp(line, username, l) == 0) {
|
||||
p = strchr(p+1, ':');
|
||||
if (p == NULL)
|
||||
continue;
|
||||
p++;
|
||||
|
||||
l = p-line;
|
||||
fwrite(line, 1, l, fd2);
|
||||
|
||||
if (*p=='!') p++;
|
||||
l = p-line;
|
||||
fwrite(p, 1, len-l, fd2);
|
||||
} else {
|
||||
fwrite(line, 1, len, fd2);
|
||||
}
|
||||
}
|
||||
|
||||
free(line);
|
||||
fclose(fd);
|
||||
fclose(fd2);
|
||||
|
||||
rename(tmp_passwd, fpasswd);
|
||||
free(tmp_passwd);
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
@@ -147,6 +278,13 @@ int main(int argc, char **argv)
|
||||
optct = optionProcess(&ocpasswdOptions, argc, argv);
|
||||
argc -= optct;
|
||||
argv += optct;
|
||||
|
||||
if (argc > 0)
|
||||
username = argv[0];
|
||||
else {
|
||||
fprintf(stderr, "Please specify a user\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (HAVE_OPT(PASSWD))
|
||||
fpasswd = OPT_ARG(PASSWD);
|
||||
@@ -155,26 +293,25 @@ int main(int argc, char **argv)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
if (HAVE_OPT(USERNAME))
|
||||
username = OPT_ARG(USERNAME);
|
||||
else {
|
||||
fprintf(stderr, "Please specify a user\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (HAVE_OPT(GROUPNAME))
|
||||
groupname = OPT_ARG(GROUPNAME);
|
||||
else {
|
||||
groupname = "*";
|
||||
}
|
||||
|
||||
if (HAVE_OPT(LOCK))
|
||||
lock_user(fpasswd, username);
|
||||
else if (HAVE_OPT(UNLOCK))
|
||||
unlock_user(fpasswd, username);
|
||||
else { /* set password */
|
||||
passwd = getpass("Enter password: ");
|
||||
if (passwd == NULL) {
|
||||
fprintf(stderr, "Please specify a password\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
passwd = getpass("Enter password: ");
|
||||
if (passwd == NULL) {
|
||||
fprintf(stderr, "Please specify a password\n");
|
||||
return -1;
|
||||
crypt_int(fpasswd, username, groupname, passwd);
|
||||
}
|
||||
|
||||
crypt_int(fpasswd, username, groupname, passwd);
|
||||
|
||||
gnutls_global_deinit();
|
||||
return 0;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
/* -*- buffer-read-only: t -*- vi: set ro:
|
||||
*
|
||||
*
|
||||
* DO NOT EDIT THIS FILE (ocserv-args.c)
|
||||
*
|
||||
* It has been AutoGen-ed April 3, 2013 at 07:02:18 PM by AutoGen 5.16
|
||||
*
|
||||
* It has been AutoGen-ed April 28, 2013 at 03:30:39 PM by AutoGen 5.17.3
|
||||
* From the definitions ocserv-args.def
|
||||
* and the template file options
|
||||
*
|
||||
* Generated from AutoOpts 36:4:11 templates.
|
||||
* Generated from AutoOpts 38:0:13 templates.
|
||||
*
|
||||
* AutoOpts is a copyrighted work. This source file is not encumbered
|
||||
* by AutoOpts licensing, but is provided under the licensing terms chosen
|
||||
@@ -21,18 +21,18 @@
|
||||
*
|
||||
* 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>
|
||||
* 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/>.
|
||||
@@ -51,9 +51,6 @@
|
||||
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+254)
|
||||
|
||||
@@ -62,15 +59,15 @@ extern FILE * option_usage_fp;
|
||||
# define NULL 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
* ocserv option static const strings
|
||||
/**
|
||||
* static const strings for ocserv options
|
||||
*/
|
||||
static char const ocserv_opt_strs[1810] =
|
||||
static char const ocserv_opt_strs[1795] =
|
||||
/* 0 */ "ocserv 0.1.1\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"
|
||||
"redistribution under the terms of the GNU General Public License,\n"
|
||||
"version 2 <http://gnu.org/licenses/gpl.html>\n\0"
|
||||
/* 254 */ "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"
|
||||
@@ -92,59 +89,74 @@ static char const ocserv_opt_strs[1810] =
|
||||
/* 977 */ "Configuration file for the server\0"
|
||||
/* 1011 */ "CONFIG\0"
|
||||
/* 1018 */ "config\0"
|
||||
/* 1025 */ "Display extended usage information and exit\0"
|
||||
/* 1025 */ "display extended usage information and exit\0"
|
||||
/* 1069 */ "help\0"
|
||||
/* 1074 */ "Extended usage information passed thru pager\0"
|
||||
/* 1074 */ "extended usage information passed thru pager\0"
|
||||
/* 1119 */ "more-help\0"
|
||||
/* 1129 */ "Output version information and exit\0"
|
||||
/* 1129 */ "output version information and exit\0"
|
||||
/* 1165 */ "version\0"
|
||||
/* 1173 */ "OCSERV\0"
|
||||
/* 1180 */ "ocserv - OpenConnect server - Ver. 0.1.1\n"
|
||||
"USAGE: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n\0"
|
||||
/* 1279 */ "openconnect-devel@lists.infradead.org\0"
|
||||
/* 1317 */ "\n\n\0"
|
||||
/* 1320 */ "\n"
|
||||
"This program is openconnect VPN server (ocserv), a server compatible with\n"
|
||||
/* 1180 */ "ocserv - OpenConnect server\n"
|
||||
"Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n\0"
|
||||
/* 1266 */ "openconnect-devel@lists.infradead.org\0"
|
||||
/* 1304 */ "\n\0"
|
||||
/* 1306 */ "This program is openconnect VPN server (ocserv), a server compatible with\n"
|
||||
"the openconnect VPN client. It follows the protocol used by CISCO's\n"
|
||||
"AnyConnect VPN.\n\n"
|
||||
"Multiple authentication methods are available including PAM and certificate\n"
|
||||
"authentication. Authenticated users are assigned an unprivileged worker\n"
|
||||
"process and obtain a networking (tun) device and IP from a configurable\n"
|
||||
"pool of addresses.\n\0"
|
||||
/* 1722 */ "ocserv 0.1.1\0"
|
||||
/* 1735 */ "Usage: ocserv [options] -c [config]\n"
|
||||
/* 1707 */ "ocserv 0.1.1\0"
|
||||
/* 1720 */ "Usage: ocserv [options] -c [config]\n"
|
||||
"ocserv --help for usage instructions.\n";
|
||||
|
||||
/*
|
||||
/**
|
||||
* foreground option description:
|
||||
*/
|
||||
/** Descriptive text for the foreground option */
|
||||
#define FOREGROUND_DESC (ocserv_opt_strs+809)
|
||||
/** Upper-cased name for the foreground option */
|
||||
#define FOREGROUND_NAME (ocserv_opt_strs+837)
|
||||
/** Name string for the foreground option */
|
||||
#define FOREGROUND_name (ocserv_opt_strs+848)
|
||||
/** Compiled in flag settings for the foreground option */
|
||||
#define FOREGROUND_FLAGS (OPTST_DISABLED)
|
||||
|
||||
/*
|
||||
/**
|
||||
* tls-debug option description:
|
||||
*/
|
||||
/** Descriptive text for the tls-debug option */
|
||||
#define TLS_DEBUG_DESC (ocserv_opt_strs+859)
|
||||
/** Upper-cased name for the tls-debug option */
|
||||
#define TLS_DEBUG_NAME (ocserv_opt_strs+900)
|
||||
/** Name string for the tls-debug option */
|
||||
#define TLS_DEBUG_name (ocserv_opt_strs+910)
|
||||
/** Compiled in flag settings for the tls-debug option */
|
||||
#define TLS_DEBUG_FLAGS (OPTST_DISABLED)
|
||||
|
||||
/*
|
||||
/**
|
||||
* debug option description:
|
||||
*/
|
||||
/** Descriptive text for the debug option */
|
||||
#define DEBUG_DESC (ocserv_opt_strs+920)
|
||||
/** Upper-cased name for the debug option */
|
||||
#define DEBUG_NAME (ocserv_opt_strs+965)
|
||||
/** Name string for the debug option */
|
||||
#define DEBUG_name (ocserv_opt_strs+971)
|
||||
/** Compiled in flag settings for the debug option */
|
||||
#define DEBUG_FLAGS (OPTST_DISABLED)
|
||||
|
||||
/*
|
||||
/**
|
||||
* config option description:
|
||||
*/
|
||||
/** Descriptive text for the config option */
|
||||
#define CONFIG_DESC (ocserv_opt_strs+977)
|
||||
/** Upper-cased name for the config option */
|
||||
#define CONFIG_NAME (ocserv_opt_strs+1011)
|
||||
/** Name string for the config option */
|
||||
#define CONFIG_name (ocserv_opt_strs+1018)
|
||||
/** Compiled in flag settings for the config option */
|
||||
#define CONFIG_FLAGS (OPTST_DISABLED \
|
||||
| OPTST_SET_ARGTYPE(OPARG_TYPE_FILE))
|
||||
|
||||
@@ -170,7 +182,7 @@ static char const ocserv_opt_strs[1810] =
|
||||
#endif
|
||||
#define VER_DESC (ocserv_opt_strs+1129)
|
||||
#define VER_name (ocserv_opt_strs+1165)
|
||||
/*
|
||||
/**
|
||||
* Declare option callback procedures
|
||||
*/
|
||||
extern tOptProc
|
||||
@@ -241,7 +253,7 @@ static tOptDesc optDesc[OPTION_CT] = {
|
||||
/* equiv idx value */ NO_EQUIVALENT, VALUE_OPT_VERSION,
|
||||
/* equivalenced to */ NO_EQUIVALENT,
|
||||
/* min, max, act ct */ 0, 1, 0,
|
||||
/* opt state flags */ VER_FLAGS, 0,
|
||||
/* opt state flags */ VER_FLAGS, AOUSE_VERSION,
|
||||
/* last opt argumnt */ { NULL },
|
||||
/* arg list/cookie */ NULL,
|
||||
/* must/cannot opts */ NULL, NULL,
|
||||
@@ -255,7 +267,7 @@ static tOptDesc optDesc[OPTION_CT] = {
|
||||
/* 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,
|
||||
/* opt state flags */ OPTST_IMM | OPTST_NO_INIT, AOUSE_HELP,
|
||||
/* last opt argumnt */ { NULL },
|
||||
/* arg list/cookie */ NULL,
|
||||
/* must/cannot opts */ NULL, NULL,
|
||||
@@ -267,7 +279,7 @@ static tOptDesc optDesc[OPTION_CT] = {
|
||||
/* 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,
|
||||
/* opt state flags */ MORE_HELP_FLAGS, AOUSE_MORE_HELP,
|
||||
/* last opt argumnt */ { NULL },
|
||||
/* arg list/cookie */ NULL,
|
||||
/* must/cannot opts */ NULL, NULL,
|
||||
@@ -277,19 +289,24 @@ static tOptDesc optDesc[OPTION_CT] = {
|
||||
};
|
||||
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* Define the ocserv Option Environment
|
||||
*/
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
/** Reference to the upper cased version of ocserv. */
|
||||
#define zPROGNAME (ocserv_opt_strs+1173)
|
||||
/** Reference to the title line for ocserv usage. */
|
||||
#define zUsageTitle (ocserv_opt_strs+1180)
|
||||
/** There is no ocserv configuration file. */
|
||||
#define zRcName NULL
|
||||
/** There are no directories to search for ocserv config files. */
|
||||
#define apzHomeList NULL
|
||||
#define zBugsAddr (ocserv_opt_strs+1279)
|
||||
#define zExplain (ocserv_opt_strs+1317)
|
||||
#define zDetail (ocserv_opt_strs+1320)
|
||||
#define zFullVersion (ocserv_opt_strs+1722)
|
||||
/* extracted from optcode.tlib near line 350 */
|
||||
/** The ocserv program bug email address. */
|
||||
#define zBugsAddr (ocserv_opt_strs+1266)
|
||||
/** Clarification/explanation of what ocserv does. */
|
||||
#define zExplain (ocserv_opt_strs+1304)
|
||||
/** Extra detail explaining what ocserv does. */
|
||||
#define zDetail (ocserv_opt_strs+1306)
|
||||
/** The full version string for ocserv. */
|
||||
#define zFullVersion (ocserv_opt_strs+1707)
|
||||
/* extracted from optcode.tlib near line 371 */
|
||||
|
||||
#if defined(ENABLE_NLS)
|
||||
# define OPTPROC_BASE OPTPROC_TRANSLATE | OPTPROC_NXLAT_OPT
|
||||
@@ -299,10 +316,8 @@ static tOptDesc optDesc[OPTION_CT] = {
|
||||
# define translate_option_strings NULL
|
||||
#endif /* ENABLE_NLS */
|
||||
|
||||
|
||||
#define ocserv_full_usage (NULL)
|
||||
|
||||
#define ocserv_short_usage (ocserv_opt_strs+1735)
|
||||
#define ocserv_short_usage (ocserv_opt_strs+1720)
|
||||
|
||||
#endif /* not defined __doxygen__ */
|
||||
|
||||
@@ -312,8 +327,8 @@ static tOptDesc optDesc[OPTION_CT] = {
|
||||
/**
|
||||
* The callout function that invokes the optionUsage function.
|
||||
*
|
||||
* @param pOptions the AutoOpts option description structure
|
||||
* @param pOptDesc the descriptor for the "help" (usage) option.
|
||||
* @param[in] pOptions the AutoOpts option description structure
|
||||
* @param[in] pOptDesc the descriptor for the "help" (usage) option.
|
||||
* @noreturn
|
||||
*/
|
||||
static void
|
||||
@@ -329,8 +344,8 @@ doUsageOpt(tOptions * pOptions, tOptDesc * pOptDesc)
|
||||
/**
|
||||
* Code to handle the config option.
|
||||
*
|
||||
* @param pOptions the ocserv options data structure
|
||||
* @param pOptDesc the option descriptor for this option.
|
||||
* @param[in] pOptions the ocserv options data structure
|
||||
* @param[in,out] pOptDesc the option descriptor for this option.
|
||||
*/
|
||||
static void
|
||||
doOptConfig(tOptions* pOptions, tOptDesc* pOptDesc)
|
||||
@@ -343,9 +358,12 @@ doOptConfig(tOptions* pOptions, tOptDesc* pOptDesc)
|
||||
#endif
|
||||
mode.file_flags = O_CLOEXEC;
|
||||
|
||||
/*
|
||||
* This function handles special invalid values for "pOptions"
|
||||
*/
|
||||
optionFileCheck(pOptions, pOptDesc, type, mode);
|
||||
}
|
||||
/* extracted from optmain.tlib near line 1113 */
|
||||
/* extracted from optmain.tlib near line 1254 */
|
||||
|
||||
/**
|
||||
* The directory containing the data associated with ocserv.
|
||||
@@ -361,6 +379,7 @@ doOptConfig(tOptions* pOptions, tOptDesc* pOptDesc)
|
||||
#ifndef WITH_PACKAGER
|
||||
# define ocserv_packager_info NULL
|
||||
#else
|
||||
/** Packager information for ocserv. */
|
||||
static char const ocserv_packager_info[] =
|
||||
"Packaged by " WITH_PACKAGER
|
||||
|
||||
@@ -415,42 +434,69 @@ tOptions ocservOptions = {
|
||||
};
|
||||
|
||||
#if ENABLE_NLS
|
||||
/**
|
||||
* This code is designed to translate translatable option text for the
|
||||
* ocserv program. These translations happen upon entry
|
||||
* to optionProcess().
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#ifdef HAVE_DCGETTEXT
|
||||
# include <gettext.h>
|
||||
#endif
|
||||
#include <autoopts/usage-txt.h>
|
||||
|
||||
static char* AO_gettext(char const* pz);
|
||||
static void coerce_it(void** s);
|
||||
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.
|
||||
* 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. It tries the "libopts" domain first, then whatever has been
|
||||
* set via the \a textdomain(3) call.
|
||||
*
|
||||
* @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)
|
||||
AO_gettext(char const * pz)
|
||||
{
|
||||
char* pzRes;
|
||||
char * res;
|
||||
if (pz == NULL)
|
||||
return NULL;
|
||||
pzRes = _(pz);
|
||||
if (pzRes == pz)
|
||||
return pzRes;
|
||||
pzRes = strdup(pzRes);
|
||||
if (pzRes == NULL) {
|
||||
#ifdef HAVE_DCGETTEXT
|
||||
/*
|
||||
* While processing the option_xlateable_txt data, try to use the
|
||||
* "libopts" domain. Once we switch to the option descriptor data,
|
||||
* do *not* use that domain.
|
||||
*/
|
||||
if (option_xlateable_txt.field_ct != 0) {
|
||||
res = dgettext("libopts", pz);
|
||||
if (res == pz)
|
||||
res = (char *)(void *)_(pz);
|
||||
} else
|
||||
res = (char *)(void *)_(pz);
|
||||
#else
|
||||
res = (char *)(void *)_(pz);
|
||||
#endif
|
||||
if (res == pz)
|
||||
return res;
|
||||
res = strdup(res);
|
||||
if (res == NULL) {
|
||||
fputs(_("No memory for duping translated strings\n"), stderr);
|
||||
exit(OCSERV_EXIT_FAILURE);
|
||||
}
|
||||
return pzRes;
|
||||
return res;
|
||||
}
|
||||
|
||||
static void coerce_it(void** s) { *s = AO_gettext(*s);
|
||||
/**
|
||||
* All the pointers we use are marked "* const", but they are stored in
|
||||
* writable memory. Coerce the mutability and set the pointer.
|
||||
*/
|
||||
static void coerce_it(void ** s) { *s = AO_gettext(*s);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -460,56 +506,418 @@ static void coerce_it(void** s) { *s = AO_gettext(*s);
|
||||
static void
|
||||
translate_option_strings(void)
|
||||
{
|
||||
tOptions * const pOpt = &ocservOptions;
|
||||
tOptions * const opts = &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) {
|
||||
if (option_xlateable_txt.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;
|
||||
char ** ppz = (char**)(void*)&(option_xlateable_txt);
|
||||
int ix = option_xlateable_txt.field_ct;
|
||||
|
||||
do {
|
||||
ppz++;
|
||||
ppz++; /* skip over field_ct */
|
||||
*ppz = AO_gettext(*ppz);
|
||||
} while (--ix > 0);
|
||||
/* prevent re-translation and disable "libopts" domain lookup */
|
||||
option_xlateable_txt.field_ct = 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));
|
||||
coerce_it((void*)&(opts->pzCopyright));
|
||||
coerce_it((void*)&(opts->pzCopyNotice));
|
||||
coerce_it((void*)&(opts->pzFullVersion));
|
||||
coerce_it((void*)&(opts->pzUsageTitle));
|
||||
coerce_it((void*)&(opts->pzExplain));
|
||||
coerce_it((void*)&(opts->pzDetail));
|
||||
{
|
||||
tOptDesc * od = opts->pOptDesc;
|
||||
for (ix = opts->optCt; ix > 0; ix--, od++)
|
||||
coerce_it((void*)&(od->pzText));
|
||||
}
|
||||
/* prevent re-translation */
|
||||
ocservOptions.fOptSet |= OPTPROC_NXLAT_OPT_CFG | OPTPROC_NXLAT_OPT;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* ENABLE_NLS */
|
||||
|
||||
#ifdef DO_NOT_COMPILE_THIS_CODE_IT_IS_FOR_GETTEXT
|
||||
/** I18N function strictly for xgettext. Do not compile. */
|
||||
static void bogus_function(void) {
|
||||
/* TRANSLATORS:
|
||||
|
||||
The following dummy function was crated solely so that xgettext can extract
|
||||
the correct strings. These strings are actually referenced by a field name
|
||||
in the ocservOptions structure noted in the comments below. The
|
||||
literal text is defined in ocserv_opt_strs.
|
||||
|
||||
NOTE: the strings below are segmented with respect to the source string
|
||||
ocserv_opt_strs. The strings above are handed off for translation
|
||||
at run time a paragraph at a time. Consequently, they are presented here
|
||||
for translation a paragraph at a time.
|
||||
|
||||
ALSO: often the description for an option will reference another option
|
||||
by name. These are set off with apostrophe quotes (I hope). Do not
|
||||
translate option names.
|
||||
*/
|
||||
/* referenced via ocservOptions.pzCopyright */
|
||||
puts(_("ocserv 0.1.1\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 GNU General Public License,\n\
|
||||
version 2 <http://gnu.org/licenses/gpl.html>\n"));
|
||||
|
||||
/* referenced via ocservOptions.pzCopyNotice */
|
||||
puts(_("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"));
|
||||
puts(_("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"));
|
||||
puts(_("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"));
|
||||
|
||||
/* referenced via ocservOptions.pOptDesc->pzText */
|
||||
puts(_("Do not fork into background"));
|
||||
|
||||
/* referenced via ocservOptions.pOptDesc->pzText */
|
||||
puts(_("Enable verbose TLS debugging information"));
|
||||
|
||||
/* referenced via ocservOptions.pOptDesc->pzText */
|
||||
puts(_("Enable verbose network debugging information"));
|
||||
|
||||
/* referenced via ocservOptions.pOptDesc->pzText */
|
||||
puts(_("Configuration file for the server"));
|
||||
|
||||
/* referenced via ocservOptions.pOptDesc->pzText */
|
||||
puts(_("display extended usage information and exit"));
|
||||
|
||||
/* referenced via ocservOptions.pOptDesc->pzText */
|
||||
puts(_("extended usage information passed thru pager"));
|
||||
|
||||
/* referenced via ocservOptions.pOptDesc->pzText */
|
||||
puts(_("output version information and exit"));
|
||||
|
||||
/* referenced via ocservOptions.pzUsageTitle */
|
||||
puts(_("ocserv - OpenConnect server\n\
|
||||
Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n"));
|
||||
|
||||
/* referenced via ocservOptions.pzExplain */
|
||||
puts(_("\n"));
|
||||
|
||||
/* referenced via ocservOptions.pzDetail */
|
||||
puts(_("This program is openconnect VPN server (ocserv), a server compatible with\n\
|
||||
the openconnect VPN client. It follows the protocol used by CISCO's\n\
|
||||
AnyConnect VPN.\n\n"));
|
||||
puts(_("Multiple authentication methods are available including PAM and certificate\n\
|
||||
authentication. Authenticated users are assigned an unprivileged worker\n\
|
||||
process and obtain a networking (tun) device and IP from a configurable\n\
|
||||
pool of addresses.\n"));
|
||||
|
||||
/* referenced via ocservOptions.pzFullVersion */
|
||||
puts(_("ocserv 0.1.1"));
|
||||
|
||||
/* referenced via ocservOptions.pzFullUsage */
|
||||
puts(_("<<<NOT-FOUND>>>"));
|
||||
|
||||
/* referenced via ocservOptions.pzShortUsage */
|
||||
puts(_("Usage: ocserv [options] -c [config]\n\
|
||||
ocserv --help for usage instructions.\n"));
|
||||
/* LIBOPTS-MESSAGES: */
|
||||
#line 60 "../autoopts.c"
|
||||
puts(_("allocation of %d bytes failed\n"));
|
||||
#line 86 "../autoopts.c"
|
||||
puts(_("allocation of %d bytes failed\n"));
|
||||
#line 53 "../init.c"
|
||||
puts(_("AutoOpts function called without option descriptor\n"));
|
||||
#line 89 "../init.c"
|
||||
puts(_("\tThis exceeds the compiled library version: "));
|
||||
#line 87 "../init.c"
|
||||
puts(_("Automated Options Processing Error!\n"
|
||||
"\t%s called AutoOpts function with structure version %d:%d:%d.\n"));
|
||||
#line 73 "../autoopts.c"
|
||||
puts(_("realloc of %d bytes at 0x%p failed\n"));
|
||||
#line 91 "../init.c"
|
||||
puts(_("\tThis is less than the minimum library version: "));
|
||||
#line 121 "../version.c"
|
||||
puts(_("Automated Options version %s\n"
|
||||
"\tCopyright (C) 1999-2013 by Bruce Korb - all rights reserved\n"));
|
||||
#line 310 "../usage.c"
|
||||
puts(_("(AutoOpts bug): %s.\n"));
|
||||
#line 90 "../reset.c"
|
||||
puts(_("optionResetOpt() called, but reset-option not configured"));
|
||||
#line 329 "../usage.c"
|
||||
puts(_("could not locate the 'help' option"));
|
||||
#line 351 "../autoopts.c"
|
||||
puts(_("optionProcess() was called with invalid data"));
|
||||
#line 783 "../usage.c"
|
||||
puts(_("invalid argument type specified"));
|
||||
#line 589 "../find.c"
|
||||
puts(_("defaulted to option with optional arg"));
|
||||
#line 76 "../alias.c"
|
||||
puts(_("aliasing option is out of range."));
|
||||
#line 229 "../enum.c"
|
||||
puts(_("%s error: the keyword '%s' is ambiguous for %s\n"));
|
||||
#line 108 "../find.c"
|
||||
puts(_(" The following options match:\n"));
|
||||
#line 290 "../find.c"
|
||||
puts(_("%s: ambiguous option name: %s (matches %d options)\n"));
|
||||
#line 161 "../check.c"
|
||||
puts(_("%s: Command line arguments required\n"));
|
||||
#line 43 "../alias.c"
|
||||
puts(_("%d %s%s options allowed\n"));
|
||||
#line 81 "../makeshell.c"
|
||||
puts(_("%s error %d (%s) calling %s for '%s'\n"));
|
||||
#line 293 "../makeshell.c"
|
||||
puts(_("interprocess pipe"));
|
||||
#line 168 "../version.c"
|
||||
puts(_("error: version option argument '%c' invalid. Use:\n"
|
||||
"\t'v' - version only\n"
|
||||
"\t'c' - version and copyright\n"
|
||||
"\t'n' - version and full copyright notice\n"));
|
||||
#line 58 "../check.c"
|
||||
puts(_("%s error: the '%s' and '%s' options conflict\n"));
|
||||
#line 214 "../find.c"
|
||||
puts(_("%s: The '%s' option has been disabled."));
|
||||
#line 421 "../find.c"
|
||||
puts(_("%s: The '%s' option has been disabled."));
|
||||
#line 38 "../alias.c"
|
||||
puts(_("-equivalence"));
|
||||
#line 460 "../find.c"
|
||||
puts(_("%s: illegal option -- %c\n"));
|
||||
#line 110 "../reset.c"
|
||||
puts(_("%s: illegal option -- %c\n"));
|
||||
#line 268 "../find.c"
|
||||
puts(_("%s: illegal option -- %s\n"));
|
||||
#line 746 "../find.c"
|
||||
puts(_("%s: illegal option -- %s\n"));
|
||||
#line 118 "../reset.c"
|
||||
puts(_("%s: illegal option -- %s\n"));
|
||||
#line 332 "../find.c"
|
||||
puts(_("%s: unknown vendor extension option -- %s\n"));
|
||||
#line 154 "../enum.c"
|
||||
puts(_(" or an integer from %d through %d\n"));
|
||||
#line 164 "../enum.c"
|
||||
puts(_(" or an integer from %d through %d\n"));
|
||||
#line 782 "../usage.c"
|
||||
puts(_("%s error: invalid option descriptor for %s\n"));
|
||||
#line 1110 "../usage.c"
|
||||
puts(_("%s error: invalid option descriptor for %s\n"));
|
||||
#line 379 "../find.c"
|
||||
puts(_("%s: invalid option name: %s\n"));
|
||||
#line 518 "../find.c"
|
||||
puts(_("%s: The '%s' option requires an argument.\n"));
|
||||
#line 171 "../autoopts.c"
|
||||
puts(_("(AutoOpts bug): Equivalenced option '%s' was equivalenced to both\n"
|
||||
"\t'%s' and '%s'."));
|
||||
#line 94 "../check.c"
|
||||
puts(_("%s error: The %s option is required\n"));
|
||||
#line 623 "../find.c"
|
||||
puts(_("%s: The '%s' option cannot have an argument.\n"));
|
||||
#line 151 "../check.c"
|
||||
puts(_("%s: Command line arguments are not allowed.\n"));
|
||||
#line 531 "../save.c"
|
||||
puts(_("error %d (%s) creating %s\n"));
|
||||
#line 229 "../enum.c"
|
||||
puts(_("%s error: '%s' does not match any %s keywords.\n"));
|
||||
#line 93 "../reset.c"
|
||||
puts(_("%s error: The '%s' option requires an argument.\n"));
|
||||
#line 184 "../save.c"
|
||||
puts(_("error %d (%s) stat-ing %s\n"));
|
||||
#line 238 "../save.c"
|
||||
puts(_("error %d (%s) stat-ing %s\n"));
|
||||
#line 143 "../restore.c"
|
||||
puts(_("%s error: no saved option state\n"));
|
||||
#line 246 "../autoopts.c"
|
||||
puts(_("'%s' is not a command line option.\n"));
|
||||
#line 114 "../time.c"
|
||||
puts(_("%s error: '%s' is not a recognizable date/time.\n"));
|
||||
#line 132 "../save.c"
|
||||
puts(_("'%s' not defined\n"));
|
||||
#line 53 "../time.c"
|
||||
puts(_("%s error: '%s' is not a recognizable time duration.\n"));
|
||||
#line 92 "../check.c"
|
||||
puts(_("%s error: The %s option must appear %d times.\n"));
|
||||
#line 157 "../numeric.c"
|
||||
puts(_("%s error: '%s' is not a recognizable number.\n"));
|
||||
#line 195 "../enum.c"
|
||||
puts(_("%s error: %s exceeds %s keyword count\n"));
|
||||
#line 366 "../usage.c"
|
||||
puts(_("Try '%s %s' for more information.\n"));
|
||||
#line 45 "../alias.c"
|
||||
puts(_("one %s%s option allowed\n"));
|
||||
#line 195 "../makeshell.c"
|
||||
puts(_("standard output"));
|
||||
#line 930 "../makeshell.c"
|
||||
puts(_("standard output"));
|
||||
#line 304 "../usage.c"
|
||||
puts(_("standard output"));
|
||||
#line 451 "../usage.c"
|
||||
puts(_("standard output"));
|
||||
#line 660 "../usage.c"
|
||||
puts(_("standard output"));
|
||||
#line 175 "../version.c"
|
||||
puts(_("standard output"));
|
||||
#line 304 "../usage.c"
|
||||
puts(_("standard error"));
|
||||
#line 451 "../usage.c"
|
||||
puts(_("standard error"));
|
||||
#line 660 "../usage.c"
|
||||
puts(_("standard error"));
|
||||
#line 175 "../version.c"
|
||||
puts(_("standard error"));
|
||||
#line 195 "../makeshell.c"
|
||||
puts(_("write"));
|
||||
#line 930 "../makeshell.c"
|
||||
puts(_("write"));
|
||||
#line 303 "../usage.c"
|
||||
puts(_("write"));
|
||||
#line 450 "../usage.c"
|
||||
puts(_("write"));
|
||||
#line 659 "../usage.c"
|
||||
puts(_("write"));
|
||||
#line 174 "../version.c"
|
||||
puts(_("write"));
|
||||
#line 60 "../numeric.c"
|
||||
puts(_("%s error: %s option value %ld is out of range.\n"));
|
||||
#line 44 "../check.c"
|
||||
puts(_("%s error: %s option requires the %s option\n"));
|
||||
#line 131 "../save.c"
|
||||
puts(_("%s warning: cannot save options - %s not regular file\n"));
|
||||
#line 183 "../save.c"
|
||||
puts(_("%s warning: cannot save options - %s not regular file\n"));
|
||||
#line 237 "../save.c"
|
||||
puts(_("%s warning: cannot save options - %s not regular file\n"));
|
||||
#line 256 "../save.c"
|
||||
puts(_("%s warning: cannot save options - %s not regular file\n"));
|
||||
#line 530 "../save.c"
|
||||
puts(_("%s warning: cannot save options - %s not regular file\n"));
|
||||
/* END-LIBOPTS-MESSAGES */
|
||||
|
||||
/* USAGE-TEXT: */
|
||||
#line 908 "../usage.c"
|
||||
puts(_("\t\t\t\t- an alternate for '%s'\n"));
|
||||
#line 1177 "../usage.c"
|
||||
puts(_("Version, usage and configuration options:"));
|
||||
#line 959 "../usage.c"
|
||||
puts(_("\t\t\t\t- default option for unnamed options\n"));
|
||||
#line 872 "../usage.c"
|
||||
puts(_("\t\t\t\t- disabled as '--%s'\n"));
|
||||
#line 1146 "../usage.c"
|
||||
puts(_(" --- %-14s %s\n"));
|
||||
#line 1144 "../usage.c"
|
||||
puts(_("This option has been disabled"));
|
||||
#line 899 "../usage.c"
|
||||
puts(_("\t\t\t\t- enabled by default\n"));
|
||||
#line 40 "../alias.c"
|
||||
puts(_("%s error: only "));
|
||||
#line 1221 "../usage.c"
|
||||
puts(_(" - examining environment variables named %s_*\n"));
|
||||
#line 168 "../file.c"
|
||||
puts(_("\t\t\t\t- file must not pre-exist\n"));
|
||||
#line 172 "../file.c"
|
||||
puts(_("\t\t\t\t- file must pre-exist\n"));
|
||||
#line 416 "../usage.c"
|
||||
puts(_("Options are specified by doubled hyphens and their name or by a single\n"
|
||||
"hyphen and the flag character.\n"));
|
||||
#line 908 "../makeshell.c"
|
||||
puts(_("\n"
|
||||
"= = = = = = = =\n\n"
|
||||
"This incarnation of genshell will produce\n"
|
||||
"a shell script to parse the options for %s:\n\n"));
|
||||
#line 161 "../enum.c"
|
||||
puts(_(" or an integer mask with any of the lower %d bits set\n"));
|
||||
#line 932 "../usage.c"
|
||||
puts(_("\t\t\t\t- is a set membership option\n"));
|
||||
#line 953 "../usage.c"
|
||||
puts(_("\t\t\t\t- must appear between %d and %d times\n"));
|
||||
#line 418 "../usage.c"
|
||||
puts(_("Options are specified by single or double hyphens and their name.\n"));
|
||||
#line 939 "../usage.c"
|
||||
puts(_("\t\t\t\t- may appear multiple times\n"));
|
||||
#line 926 "../usage.c"
|
||||
puts(_("\t\t\t\t- may not be preset\n"));
|
||||
#line 1336 "../usage.c"
|
||||
puts(_(" Arg Option-Name Description\n"));
|
||||
#line 1272 "../usage.c"
|
||||
puts(_(" Flg Arg Option-Name Description\n"));
|
||||
#line 1330 "../usage.c"
|
||||
puts(_(" Flg Arg Option-Name Description\n"));
|
||||
#line 1331 "../usage.c"
|
||||
puts(_(" %3s %s"));
|
||||
#line 1337 "../usage.c"
|
||||
puts(_(" %3s %s"));
|
||||
#line 423 "../usage.c"
|
||||
puts(_("The '-#<number>' option may omit the hash char\n"));
|
||||
#line 419 "../usage.c"
|
||||
puts(_("All arguments are named options.\n"));
|
||||
#line 1006 "../usage.c"
|
||||
puts(_(" - reading file %s"));
|
||||
#line 445 "../usage.c"
|
||||
puts(_("\n"
|
||||
"Please send bug reports to: <%s>\n"));
|
||||
#line 100 "../version.c"
|
||||
puts(_("\n"
|
||||
"Please send bug reports to: <%s>\n"));
|
||||
#line 129 "../version.c"
|
||||
puts(_("\n"
|
||||
"Please send bug reports to: <%s>\n"));
|
||||
#line 938 "../usage.c"
|
||||
puts(_("\t\t\t\t- may NOT appear - preset only\n"));
|
||||
#line 978 "../usage.c"
|
||||
puts(_("\n"
|
||||
"The following option preset mechanisms are supported:\n"));
|
||||
#line 1219 "../usage.c"
|
||||
puts(_("\n"
|
||||
"The following option preset mechanisms are supported:\n"));
|
||||
#line 717 "../usage.c"
|
||||
puts(_("prohibits these options:\n"));
|
||||
#line 712 "../usage.c"
|
||||
puts(_("prohibits the option '%s'\n"));
|
||||
#line 81 "../numeric.c"
|
||||
puts(_("%s%ld to %ld"));
|
||||
#line 79 "../numeric.c"
|
||||
puts(_("%sgreater than or equal to %ld"));
|
||||
#line 75 "../numeric.c"
|
||||
puts(_("%s%ld exactly"));
|
||||
#line 68 "../numeric.c"
|
||||
puts(_("%sit must lie in one of the ranges:\n"));
|
||||
#line 68 "../numeric.c"
|
||||
puts(_("%sit must be in the range:\n"));
|
||||
#line 88 "../numeric.c"
|
||||
puts(_(", or\n"));
|
||||
#line 66 "../numeric.c"
|
||||
puts(_("%sis scalable with a suffix: k/K/m/M/g/G/t/T\n"));
|
||||
#line 77 "../numeric.c"
|
||||
puts(_("%sless than or equal to %ld"));
|
||||
#line 426 "../usage.c"
|
||||
puts(_("Operands and options may be intermixed. They will be reordered.\n"));
|
||||
#line 687 "../usage.c"
|
||||
puts(_("requires the option '%s'\n"));
|
||||
#line 690 "../usage.c"
|
||||
puts(_("requires these options:\n"));
|
||||
#line 1348 "../usage.c"
|
||||
puts(_(" Arg Option-Name Req? Description\n"));
|
||||
#line 1342 "../usage.c"
|
||||
puts(_(" Flg Arg Option-Name Req? Description\n"));
|
||||
#line 162 "../enum.c"
|
||||
puts(_("or you may use a numeric representation. Preceding these with a '!'\n"
|
||||
"will clear the bits, specifying 'none' will clear all bits, and 'all'\n"
|
||||
"will set them all. Multiple entries may be passed as an option\n"
|
||||
"argument list.\n"));
|
||||
#line 945 "../usage.c"
|
||||
puts(_("\t\t\t\t- may appear up to %d times\n"));
|
||||
#line 72 "../enum.c"
|
||||
puts(_("The valid \"%s\" option keywords are:\n"));
|
||||
#line 1181 "../usage.c"
|
||||
puts(_("The next option supports vendor supported extra options:"));
|
||||
#line 808 "../usage.c"
|
||||
puts(_("These additional options are:"));
|
||||
/* END-USAGE-TEXT */
|
||||
}
|
||||
#endif /* uncompilable code */
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -323,7 +323,6 @@ $ cat << _EOF_ >user.tmpl
|
||||
cn = "user"
|
||||
ou = "admins"
|
||||
serial = 1824
|
||||
email = "user@example.com"
|
||||
expiration_days = 9999
|
||||
signing_key
|
||||
tls_www_client
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
/* -*- buffer-read-only: t -*- vi: set ro:
|
||||
*
|
||||
*
|
||||
* DO NOT EDIT THIS FILE (ocserv-args.h)
|
||||
*
|
||||
* It has been AutoGen-ed April 3, 2013 at 07:02:18 PM by AutoGen 5.16
|
||||
*
|
||||
* It has been AutoGen-ed April 28, 2013 at 03:30:39 PM by AutoGen 5.17.3
|
||||
* From the definitions ocserv-args.def
|
||||
* and the template file options
|
||||
*
|
||||
* Generated from AutoOpts 36:4:11 templates.
|
||||
* Generated from AutoOpts 38:0:13 templates.
|
||||
*
|
||||
* AutoOpts is a copyrighted work. This header file is not encumbered
|
||||
* by AutoOpts licensing, but is provided under the licensing terms chosen
|
||||
@@ -21,23 +21,23 @@
|
||||
*
|
||||
* 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>
|
||||
* 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/>.
|
||||
*/
|
||||
/*
|
||||
/**
|
||||
* This file contains the programmatic interface to the Automated
|
||||
* Options generated for the ocserv program.
|
||||
* These macros are documented in the AutoGen info file in the
|
||||
@@ -48,22 +48,22 @@
|
||||
#include "config.h"
|
||||
#include <autoopts/options.h>
|
||||
|
||||
/*
|
||||
/**
|
||||
* 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 147460
|
||||
#define AO_TEMPLATE_VERSION 155648
|
||||
#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:
|
||||
/**
|
||||
* Enumeration of each option type for ocserv
|
||||
*/
|
||||
typedef enum {
|
||||
INDEX_OPT_FOREGROUND = 0,
|
||||
@@ -74,51 +74,73 @@ typedef enum {
|
||||
INDEX_OPT_HELP = 5,
|
||||
INDEX_OPT_MORE_HELP = 6
|
||||
} teOptIndex;
|
||||
|
||||
/** count of all options for ocserv */
|
||||
#define OPTION_CT 7
|
||||
/** ocserv version */
|
||||
#define OCSERV_VERSION "0.1.1"
|
||||
/** Full ocserv version text */
|
||||
#define OCSERV_FULL_VERSION "ocserv 0.1.1"
|
||||
|
||||
/*
|
||||
/**
|
||||
* Interface defines for all options. Replace "n" with the UPPER_CASED
|
||||
* option name (as in the teOptIndex enumeration above).
|
||||
* e.g. HAVE_OPT(FOREGROUND)
|
||||
*/
|
||||
#define DESC(n) (ocservOptions.pOptDesc[INDEX_OPT_## n])
|
||||
/** 'true' if an option has been specified in any way */
|
||||
#define HAVE_OPT(n) (! UNUSED_OPT(& DESC(n)))
|
||||
/** The string argument to an option. The argument type must be "string". */
|
||||
#define OPT_ARG(n) (DESC(n).optArg.argString)
|
||||
/** Mask the option state revealing how an option was specified.
|
||||
* It will be one and only one of \a OPTST_SET, \a OPTST_PRESET,
|
||||
* \a OPTST_DEFINED, \a OPTST_RESET or zero.
|
||||
*/
|
||||
#define STATE_OPT(n) (DESC(n).fOptState & OPTST_SET_MASK)
|
||||
/** Count of option's occurrances *on the command line*. */
|
||||
#define COUNT_OPT(n) (DESC(n).optOccCt)
|
||||
/** mask of \a OPTST_SET and \a OPTST_DEFINED. */
|
||||
#define ISSEL_OPT(n) (SELECTED_OPT(&DESC(n)))
|
||||
/** 'true' if \a HAVE_OPT would yield 'false'. */
|
||||
#define ISUNUSED_OPT(n) (UNUSED_OPT(& DESC(n)))
|
||||
/** 'true' if OPTST_DISABLED bit not set. */
|
||||
#define ENABLED_OPT(n) (! DISABLED_OPT(& DESC(n)))
|
||||
/** number of stacked option arguments.
|
||||
* Valid only for stacked option arguments. */
|
||||
#define STACKCT_OPT(n) (((tArgList*)(DESC(n).optCookie))->useCt)
|
||||
/** stacked argument vector.
|
||||
* Valid only for stacked option arguments. */
|
||||
#define STACKLST_OPT(n) (((tArgList*)(DESC(n).optCookie))->apzArgs)
|
||||
/** Reset an option. */
|
||||
#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 )
|
||||
|
||||
/* * * * * *
|
||||
*
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
/**
|
||||
* Enumeration of ocserv exit codes
|
||||
*/
|
||||
typedef enum {
|
||||
OCSERV_EXIT_SUCCESS = 0,
|
||||
OCSERV_EXIT_FAILURE = 1,
|
||||
OCSERV_EXIT_LIBOPTS_FAILURE = 70
|
||||
OCSERV_EXIT_SUCCESS = 0,
|
||||
OCSERV_EXIT_FAILURE = 1,
|
||||
OCSERV_EXIT_USAGE_ERROR = 64,
|
||||
OCSERV_EXIT_LIBOPTS_FAILURE = 70
|
||||
} ocserv_exit_code_t;
|
||||
/* * * * * *
|
||||
*
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
/**
|
||||
* Interface defines for specific options.
|
||||
* @{
|
||||
*/
|
||||
#define VALUE_OPT_FOREGROUND 'f'
|
||||
#define VALUE_OPT_TLS_DEBUG 1
|
||||
#define VALUE_OPT_DEBUG 'd'
|
||||
#define VALUE_OPT_CONFIG 'c'
|
||||
/** option flag (value) for " (get "val-name") " option */
|
||||
#define VALUE_OPT_HELP 'h'
|
||||
/** option flag (value) for " (get "val-name") " option */
|
||||
#define VALUE_OPT_MORE_HELP '!'
|
||||
/** option flag (value) for " (get "val-name") " option */
|
||||
#define VALUE_OPT_VERSION 'v'
|
||||
/*
|
||||
* Interface defines not associated with particular options
|
||||
@@ -130,7 +152,7 @@ typedef enum {
|
||||
ocservOptions.pzCurOpt = NULL)
|
||||
#define START_OPT RESTART_OPT(1)
|
||||
#define USAGE(c) (*ocservOptions.pUsageProc)(&ocservOptions, c)
|
||||
/* extracted from opthead.tlib near line 484 */
|
||||
/* extracted from opthead.tlib near line 538 */
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@@ -146,6 +168,12 @@ extern tOptions ocservOptions;
|
||||
#if defined(ENABLE_NLS)
|
||||
# ifndef _
|
||||
# include <stdio.h>
|
||||
# ifndef HAVE_GETTEXT
|
||||
extern char * gettext(char const *);
|
||||
# else
|
||||
# include <libintl.h>
|
||||
# endif
|
||||
|
||||
static inline char* aoGetsText(char const* pz) {
|
||||
if (pz == NULL) return NULL;
|
||||
return (char*)gettext(pz);
|
||||
|
||||
Reference in New Issue
Block a user