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:
Nikos Mavrogiannopoulos
2013-04-28 15:16:29 +03:00
parent 66d9e9404d
commit 38464bd822
7 changed files with 1358 additions and 324 deletions

View File

@@ -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

View File

@@ -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;

View File

@@ -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);

View File

@@ -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;

View File

@@ -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

View File

@@ -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

View File

@@ -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);