summaryrefslogtreecommitdiff
path: root/support/dktools/dk-pwgen.c
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-10-12 03:04:00 +0000
committerNorbert Preining <norbert@preining.info>2020-10-12 03:04:00 +0000
commit0ce40abb18ec02ec6fd6bcc5f21612c88daa7578 (patch)
tree416289fe1448873fd8ca33051f50ad85bffa8aaa /support/dktools/dk-pwgen.c
parentfdb18507cd80dc17f5a5256153d34668b4f4e61c (diff)
CTAN sync 202010120303
Diffstat (limited to 'support/dktools/dk-pwgen.c')
-rw-r--r--support/dktools/dk-pwgen.c2181
1 files changed, 0 insertions, 2181 deletions
diff --git a/support/dktools/dk-pwgen.c b/support/dktools/dk-pwgen.c
deleted file mode 100644
index 83b025d2c9..0000000000
--- a/support/dktools/dk-pwgen.c
+++ /dev/null
@@ -1,2181 +0,0 @@
-/*
-Copyright (C) 2015-2020, Dirk Krause
-SPDX-License-Identifier: BSD-3-Clause
-*/
-
-/*
- WARNING: This file was generated by the dkct program (see
- http://dktools.sourceforge.net/ for details).
- Changes you make here will be lost if dkct is run again!
- You should modify the original source and run dkct on it.
- Original source: dk-pwgen.ctr
-*/
-
-/** @file dk-pwgen.c The dk-pwgen module.
-*/
-
-
-#line 10 "dk-pwgen.ctr"
-
-
-#include "dk4conf.h"
-
-#if DK4_ON_WINDOWS
-/** Allow use of the getenv() function. */
-#define _CRT_SECURE_NO_WARNINGS 1
-#endif
-
-#if DK4_ON_WINDOWS
-#ifndef WINDOWS_H_INCLUDED
-#include <windows.h>
-#define WINDOWS_H_INCLUDED 1
-#endif
-#ifndef WINCRYPT_H_INCLUDED
-#include <wincrypt.h>
-#define WINCRYPT_H_INCLUDED 1
-#endif
-#endif
-
-#if DK4_HAVE_UNISTD_H
-#ifndef UNISTD_H_INCLUDED
-#include <unistd.h>
-#define UNISTD_H_INCLUDED 1
-#endif
-#endif
-
-#if DK4_HAVE_SYS_TYPES_H
-#ifndef SYS_TYPES_H_INCLUDED
-#include <sys/types.h>
-#define SYS_TYPES_H_INCLUDED 1
-#endif
-#endif
-
-#if DK4_HAVE_SIGNAL_H
-#ifndef SIGNAL_H_INCLUDED
-#include <signal.h>
-#define SIGNAL_H_INCLUDED 1
-#endif
-#endif
-
-#if DK4_HAVE_PROCESS_H
-#ifndef PROCESS_H_INCLUDED
-#include <process.h>
-#define PROCESS_H_INCLUDED 1
-#endif
-#endif
-
-#if DK4_HAVE_IO_H
-#ifndef IO_H_INCLUDED
-#include <io.h>
-#define IO_H_INCLUDED 1
-#endif
-#endif
-
-#if DK4_HAVE_FCNTL_H
-#ifndef FCNTL_H_INCLUDED
-#include <fcntl.h>
-#define FCNTL_H_INCLUDED 1
-#endif
-#endif
-
-#if DK4_HAVE_OPENSSL_RAND_H
-#ifndef OPENSSL_RAND_H_INCLUDED
-#include <openssl/rand.h>
-#define OPENSSL_RAND_H_INCLUDED 1
-#endif
-#endif
-
-#include "dk4types.h"
-#include "dk4const.h"
-#include "dk4mem.h"
-#include "dk4mema.h"
-#include "dk4memrs.h"
-#include "dk4strd.h"
-#include "dk4app.h"
-#include "dk4aopt.h"
-#include "dk4fput.h"
-#include "dk4vers.h"
-#include "dk4maiddsz.h"
-#include "dk4maasz.h"
-#include "dk4mpl.h"
-#include "dk4svbufa.h"
-#include "dk4unused.h"
-
-#ifndef DK4WMAIN_H_INCLUDED
-#include "dk4wmain.h"
-#endif
-
-
-
-
-#line 101 "dk-pwgen.ctr"
-
-
-
-/** Output mode.
-*/
-enum {
- /** Create normal user password.
- */
- DK_PWGEN_MODE_NORMAL = 0 ,
-
- /** Create hard password.
- */
- DK_PWGEN_MODE_HARD ,
-
- /** Create binary data.
- */
- DK_PWGEN_MODE_BINARY ,
-
- /** Create hexadecimal key, use
- lower case a to f.
- */
- DK_PWGEN_MODE_HEX_LOWER ,
-
- /** Create hexadecimal key, use
- upper case A to F.
- */
- DK_PWGEN_MODE_HEX_UPPER ,
-
- /** Create numeric PIN.
- */
- DK_PWGEN_MODE_PIN
-};
-
-
-/** Constant texts used by program, not localized.
-*/
-static const dkChar * const dk_pwgen_kwnl[] = {
-/* 0 */
-dkT("dktools"),
-
-/* 1 */
-dkT("dk-pwgen.txt"),
-
-/* 2 */
-dkT("dk-pwgen.str"),
-
-/* 3 */
-dkT("0123456789abcdef"),
-
-/* 4 */
-dkT("0123456789ABCDEF"),
-
-/* 5 */
-dkT("0123456789"),
-
-/* 6 */
-dkT("-_.:,;<>|#'+*~@^!\"$%&/()=?`{[]}"),
-
-/* 7 */
-dkT("rand.egd.name"),
-
-/* 8 */
-dkT("verbose"),
-
-NULL
-
-
-#line 171 "dk-pwgen.ctr"
-};
-
-
-
-static const dkChar * const dk_pwgen_help_text[] = {
-dkT(""),
-dkT("Generate passwords, PINs and hexadecimal keys"),
-dkT(""),
-dkT("dk-pwgen [<options>]"),
-dkT(""),
-dkT("Options:"),
-dkT("-h\t\t--hard\t\t\tCreate hard password instead of normal."),
-dkT("-b\t\t--binary\t\tCreate binary random data"),
-dkT("\t\t\t\t\t(not on Windows)."),
-dkT("-p\t\t--pin\t\t\tCreate PIN number."),
-dkT("-x\t\t--hex\t\t\tCreate hexadecimal key, use `a'...`f'."),
-dkT("-X\t\t--Hex\t\t\tCreate hexadecimal key, use `A'...`F'."),
-dkT("-l <range>\t--length=<range>\tLength, i.e. ``8-10''."),
-dkT("-u <range>\t--upper-case=<range>\tNumber of uppercase chars in passwords."),
-dkT("-d <range>\t--digits=<range>\tNumber of digits in passwords."),
-dkT("-s <range>\t--special=<range>\tNumber of special chars in passwords."),
-dkT("-n\t\t--no-newline\t\tSuppress newline after output."),
-dkT("\t\t--verbose\t\tShow error message on SIGPIPE."),
-dkT(""),
-dkT("\t\t--help\t\t\tShow this short help text."),
-dkT("\t\t--manual\t\t*** SHOW FULL MANUAL. ***"),
-dkT("\t\t--version\t\tShow version information."),
-dkT("\t\t--license\t\tShow license information."),
-dkT(""),
-dkT("http://sourceforge.net/p/dktools/wiki/dk-pwgen/"),
-dkT(""),
-NULL
-
-
-#line 204 "dk-pwgen.ctr"
-};
-
-
-
-static const dkChar * const dk_pwgen_license_text[] = {
-dkT("This software uses code from the following projects, either directly or as"),
-dkT("a library:"),
-dkT(""),
-dkT("dktools\t\tDirk Krause's tools and libraries."),
-dkT("\t\tSee http://sourceforge.net/p/dktools/wiki/Home"),
-dkT("\t\tfor more information."),
-#if DK4_HAVE_ZLIB_H
-dkT(""),
-dkT("zlib\t\tData compression library."),
-dkT("\t\tSee http://www.zlib.net/ for more information."),
-#endif
-#if DK4_HAVE_BZLIB_H
-dkT(""),
-dkT("bzip2\t\tData compression program and library."),
-dkT("\t\tSee http://www.bzip.org/ for more information."),
-#endif
-#if DK4_HAVE_OPENSSL_RAND_H
-dkT(""),
-dkT("OpenSSL\t\tCryptographic toolkit, used to build file checksums here."),
-dkT("\t\tSee http://www.openssl.org/ for more information."),
-dkT(""),
-dkT("This product includes software developed by the OpenSSL Project for use in"),
-dkT("the OpenSSL Toolkit (http://www.openssl.org/)."),
-dkT("This product includes cryptographic software written by"),
-dkT("Eric Young (eay@cryptsoft.com)."),
-dkT("This product includes software written by Tim Hudson (tjh@cryptsoft.com)."),
-#endif
-dkT(""),
-dkT("All the licenses below apply to the program."),
-dkT("Licenses for used libraries are shown as found on my Scientific Linux 6.x"),
-dkT("computer in the /usr/share/doc directory on 2015-04-01. Check the project"),
-dkT("homepages of the used libraries for additional information and/or updated"),
-dkT("license terms."),
-dkT(""),
-dkT(""),
-dkT("DK tools and libraries license"),
-dkT("=============================="),
-dkT("Copyright (c) 2015-2016, Dirk Krause"),
-dkT("All rights reserved."),
-dkT(""),
-dkT("Redistribution and use in source and binary forms, with or without"),
-dkT("modification, are permitted provided that the following conditions are met:"),
-dkT(""),
-dkT("1. Redistributions of source code must retain the above copyright notice,"),
-dkT(" this list of conditions and the following disclaimer."),
-dkT("2. Redistributions in binary form must reproduce the above copyright"),
-dkT(" notice, this list of conditions and the following disclaimer in the"),
-dkT(" documentation and/or other materials provided with the distribution."),
-dkT("3. Neither the name of the copyright holder nor the names of its"),
-dkT(" contributors may be used to endorse or promote products derived from"),
-dkT(" this software without specific prior written permission."),
-dkT(""),
-dkT("THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS"),
-dkT("``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT"),
-dkT("LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR"),
-dkT("A PARTICULAR PURPOSE ARE DISCLAIMED."),
-dkT("IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY"),
-dkT("DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES"),
-dkT("(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR"),
-dkT("SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER"),
-dkT("CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT"),
-dkT("LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY"),
-dkT("OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF"),
-dkT("SUCH DAMAGE."),
-#if DK4_HAVE_ZLIB_H
-dkT(""),
-dkT(""),
-dkT("Zlib license"),
-dkT("============"),
-dkT("(C) 1995-2004 Jean-loup Gailly and Mark Adler"),
-dkT(""),
-dkT("This software is provided 'as-is', without any express or implied"),
-dkT("warranty. In no event will the authors be held liable for any damages"),
-dkT("arising from the use of this software."),
-dkT(""),
-dkT("Permission is granted to anyone to use this software for any purpose,"),
-dkT("including commercial applications, and to alter it and redistribute it"),
-dkT("freely, subject to the following restrictions:"),
-dkT(""),
-dkT("1. The origin of this software must not be misrepresented; you must not"),
-dkT(" claim that you wrote the original software. If you use this software"),
-dkT(" in a product, an acknowledgment in the product documentation would be"),
-dkT(" appreciated but is not required."),
-dkT("2. Altered source versions must be plainly marked as such, and must not be"),
-dkT(" misrepresented as being the original software."),
-dkT("3. This notice may not be removed or altered from any source distribution."),
-dkT(""),
-dkT("Jean-loup Gailly Mark Adler"),
-dkT("jloup@gzip.org madler@alumni.caltech.edu"),
-#endif
-#if DK4_HAVE_BZLIB_H
-dkT(""),
-dkT(""),
-dkT("Bzip2 and libbzip2 library license"),
-dkT("=================================="),
-dkT("This program, \"bzip2\", the associated library \"libbzip2\", and all"),
-dkT("documentation, are copyright (C) 1996-2007 Julian R Seward. All"),
-dkT("rights reserved."),
-dkT(""),
-dkT("Redistribution and use in source and binary forms, with or without"),
-dkT("modification, are permitted provided that the following conditions"),
-dkT("are met:"),
-dkT(""),
-dkT("1. Redistributions of source code must retain the above copyright"),
-dkT(" notice, this list of conditions and the following disclaimer."),
-dkT(""),
-dkT("2. The origin of this software must not be misrepresented; you must "),
-dkT(" not claim that you wrote the original software. If you use this "),
-dkT(" software in a product, an acknowledgment in the product "),
-dkT(" documentation would be appreciated but is not required."),
-dkT(""),
-dkT("3. Altered source versions must be plainly marked as such, and must"),
-dkT(" not be misrepresented as being the original software."),
-dkT(""),
-dkT("4. The name of the author may not be used to endorse or promote "),
-dkT(" products derived from this software without specific prior written "),
-dkT(" permission."),
-dkT(""),
-dkT("THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS"),
-dkT("OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED"),
-dkT("WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE"),
-dkT("ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY"),
-dkT("DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL"),
-dkT("DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE"),
-dkT("GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS"),
-dkT("INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,"),
-dkT("WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING"),
-dkT("NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS"),
-dkT("SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."),
-dkT(""),
-dkT("Julian Seward, jseward@bzip.org"),
-dkT("bzip2/libbzip2 version 1.0.5 of 10 December 2007"),
-#endif
-#if DK4_HAVE_OPENSSL_RAND_H
-dkT(""),
-dkT(""),
-dkT("OpenSSL license"),
-dkT("==============="),
-dkT(""),
-dkT("LICENSE ISSUES"),
-dkT("--------------"),
-dkT(""),
-dkT("The OpenSSL toolkit stays under a dual license, i.e. both the conditions of"),
-dkT("the OpenSSL License and the original SSLeay license apply to the toolkit."),
-dkT("See below for the actual license texts. Actually both licenses are BSD-style"),
-dkT("Open Source licenses. In case of any license issues related to OpenSSL"),
-dkT("please contact openssl-core@openssl.org."),
-dkT(""),
-dkT("OpenSSL License"),
-dkT("---------------"),
-dkT(""),
-dkT("Copyright (c) 1998-2011 The OpenSSL Project. All rights reserved."),
-dkT(""),
-dkT("Redistribution and use in source and binary forms, with or without"),
-dkT("modification, are permitted provided that the following conditions"),
-dkT("are met:"),
-dkT(""),
-dkT("1. Redistributions of source code must retain the above copyright"),
-dkT(" notice, this list of conditions and the following disclaimer. "),
-dkT(""),
-dkT("2. Redistributions in binary form must reproduce the above copyright"),
-dkT(" notice, this list of conditions and the following disclaimer in"),
-dkT(" the documentation and/or other materials provided with the"),
-dkT(" distribution."),
-dkT(""),
-dkT("3. All advertising materials mentioning features or use of this"),
-dkT(" software must display the following acknowledgment:"),
-dkT(" \"This product includes software developed by the OpenSSL Project"),
-dkT(" for use in the OpenSSL Toolkit. (http://www.openssl.org/)\""),
-dkT(""),
-dkT("4. The names \"OpenSSL Toolkit\" and \"OpenSSL Project\" must not be used to"),
-dkT(" endorse or promote products derived from this software without"),
-dkT(" prior written permission. For written permission, please contact"),
-dkT(" openssl-core@openssl.org."),
-dkT(""),
-dkT("5. Products derived from this software may not be called \"OpenSSL\""),
-dkT(" nor may \"OpenSSL\" appear in their names without prior written"),
-dkT(" permission of the OpenSSL Project."),
-dkT(""),
-dkT("6. Redistributions of any form whatsoever must retain the following"),
-dkT(" acknowledgment:"),
-dkT(" \"This product includes software developed by the OpenSSL Project"),
-dkT(" for use in the OpenSSL Toolkit (http://www.openssl.org/)\""),
-dkT(""),
-dkT("THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY"),
-dkT("EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE"),
-dkT("IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR"),
-dkT("PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR"),
-dkT("ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,"),
-dkT("SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT"),
-dkT("NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;"),
-dkT("LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)"),
-dkT("HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,"),
-dkT("STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)"),
-dkT("ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED"),
-dkT("OF THE POSSIBILITY OF SUCH DAMAGE."),
-dkT(""),
-dkT("This product includes cryptographic software written by Eric Young"),
-dkT("(eay@cryptsoft.com). This product includes software written by Tim"),
-dkT("Hudson (tjh@cryptsoft.com)."),
-dkT(""),
-dkT(""),
-dkT("Original SSLeay License"),
-dkT("-----------------------"),
-dkT(""),
-dkT("Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)"),
-dkT("All rights reserved."),
-dkT(""),
-dkT("This package is an SSL implementation written"),
-dkT("by Eric Young (eay@cryptsoft.com)."),
-dkT("The implementation was written so as to conform with Netscapes SSL."),
-dkT(""),
-dkT("This library is free for commercial and non-commercial use as long as"),
-dkT("the following conditions are aheared to. The following conditions"),
-dkT("apply to all code found in this distribution, be it the RC4, RSA,"),
-dkT("lhash, DES, etc., code; not just the SSL code. The SSL documentation"),
-dkT("included with this distribution is covered by the same copyright terms"),
-dkT("except that the holder is Tim Hudson (tjh@cryptsoft.com)."),
-dkT(""),
-dkT("Copyright remains Eric Young's, and as such any Copyright notices in"),
-dkT("the code are not to be removed."),
-dkT("If this package is used in a product, Eric Young should be given attribution"),
-dkT("as the author of the parts of the library used."),
-dkT("This can be in the form of a textual message at program startup or"),
-dkT("in documentation (online or textual) provided with the package."),
-dkT(""),
-dkT("Redistribution and use in source and binary forms, with or without"),
-dkT("modification, are permitted provided that the following conditions"),
-dkT("are met:"),
-dkT("1. Redistributions of source code must retain the copyright"),
-dkT(" notice, this list of conditions and the following disclaimer."),
-dkT("2. Redistributions in binary form must reproduce the above copyright"),
-dkT(" notice, this list of conditions and the following disclaimer in the"),
-dkT(" documentation and/or other materials provided with the distribution."),
-dkT("3. All advertising materials mentioning features or use of this software"),
-dkT(" must display the following acknowledgement:"),
-dkT(" \"This product includes cryptographic software written by"),
-dkT(" Eric Young (eay@cryptsoft.com)\""),
-dkT(" The word 'cryptographic' can be left out if the rouines from the library"),
-dkT(" being used are not cryptographic related :-)."),
-dkT("4. If you include any Windows specific code (or a derivative thereof) from "),
-dkT(" the apps directory (application code) you must include an acknowledgement:"),
-dkT(" \"This product includes software written by Tim Hudson (tjh@cryptsoft.com)\""),
-dkT(""),
-dkT("THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND"),
-dkT("ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE"),
-dkT("IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE"),
-dkT("ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE"),
-dkT("FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL"),
-dkT("DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS"),
-dkT("OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)"),
-dkT("HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT"),
-dkT("LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY"),
-dkT("OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF"),
-dkT("SUCH DAMAGE."),
-dkT(""),
-dkT("The licence and distribution terms for any publically available version or"),
-dkT("derivative of this code cannot be changed. i.e. this code cannot simply be"),
-dkT("copied and put under another distribution licence"),
-dkT("[including the GNU Public Licence.]"),
-dkT(""),
-#endif
-dkT(""),
-NULL
-
-
-#line 474 "dk-pwgen.ctr"
-};
-
-
-
-static const dkChar * const dk_pwgen_kw_def[] = {
-/* 0 */
-dkT("OpenSSL PRNG not available!"),
-
-/* 1 */
-dkT("Failed to set up signal handlers!"),
-
-/* 2 */
-dkT("Failed to restore signal handlers!"),
-
-/* 3 */
-dkT("Numeric overflow while reading a size number!"),
-
-/* 4 */
-dkT("Not a size specification: \""),
-
-/* 5 */
-dkT("\"!"),
-
-/* 6 */
-dkT("Failed to retrieve size from text: \""),
-
-/* 7 */
-dkT("\"!"),
-
-/* 8 */
-dkT("Options -h, -x, -X, and -p are mutually exclusive!"),
-
-/* 9 */
-dkT("Option -u ignored for this output type!"),
-
-/* 10 */
-dkT("Option -d ignored for this output type!"),
-
-/* 11 */
-dkT("Option -s ignored for this output type!"),
-
-/* 12 */
-dkT("Conflicting ranges for -l and -u/-d/-s!"),
-
-/* 13 */
-dkT("Numeric overflow in password length calculation!"),
-
-/* 14 */
-dkT("Failed to obtain random data from cryptographic context!"),
-
-/* 15 */
-dkT("Failed to acquire cryptographic context!"),
-
-/* 16 */
-dkT("Failed to open /dev/random and /dev/urandom devices!"),
-
-/* 17 */
-dkT("Failed to obtain random data!"),
-
-/* 18 */
-dkT("Failed to seed OpenSSL PRNG!"),
-
-/* 19 */
-dkT("Aborted by SIGTERM signal!"),
-
-/* 20 */
-dkT("Aborted by SIGINT signal!"),
-
-/* 21 */
-dkT("Aborted by SIGPIPE signal!"),
-
-/* 22 */
-dkT("Write attempt to standard output failed!"),
-
-/* 23 */
-dkT("Seeding PRNG using OpenSSL builtin functions."),
-
-/* 24 */
-dkT("Seeding PRNG from EGD socket."),
-
-/* 25 */
-dkT("Seeding PRNG from Windows cryptographic context."),
-
-/* 26 */
-dkT("Seeding PRNG from screen contents."),
-
-/* 27 */
-dkT("Seeding PRNG from /dev/random or /dev/urandom device."),
-
-/* 28 */
-dkT("Seeding PRNG from EGD socket specified by preference."),
-
-/* 29 */
-dkT("Options -b, -h, -x, -X, and -p are mutually exclusive!"),
-
-/* 30 */
-dkT("Failed to reset used memory!"),
-
-/* 31 */
-dkT("The -b option is not supported on Windows!"),
-
-NULL
-
-
-#line 591 "dk-pwgen.ctr"
-};
-
-
-
-/** Options understood by program.
-*/
-static const dk4_option_specification_t dk_pwgen_options[] = {
- { dkT('h'), dkT("hard"), DK4_OPT_ARG_NONE },
- { dkT('b'), dkT("binary"), DK4_OPT_ARG_NONE },
- { dkT('x'), dkT("hex"), DK4_OPT_ARG_NONE },
- { dkT('X'), dkT("Hex"), DK4_OPT_ARG_NONE },
- { dkT('p'), dkT("pin"), DK4_OPT_ARG_NONE },
- { dkT('l'), dkT("length"), DK4_OPT_ARG_STRING },
- { dkT('u'), dkT("upper-case"), DK4_OPT_ARG_STRING },
- { dkT('d'), dkT("digits"), DK4_OPT_ARG_STRING },
- { dkT('s'), dkT("special"), DK4_OPT_ARG_STRING },
- { dkT('n'), dkT("no-newline"), DK4_OPT_ARG_NONE },
- { dkT('\0'), dkT("verbose"), DK4_OPT_ARG_NONE }
-};
-
-
-
-#ifndef BUFSIZ
-#define BUFSIZ 8192
-#endif
-
-
-/** Use an explicitly specified buffer for stdout operations
- so we can securely reset the memory before exiting.
-*/
-static char stdout_buffer[BUFSIZ];
-
-
-
-/** Use an explicitly specified buffer when reading seed file
- so we can securely reset the memory before exiting.
-*/
-#if (!(DK4_ON_WINDOWS))
-static char seed_file_buf[BUFSIZ];
-#endif
-
-
-
-/** Localized version if available, otherwise default texts.
-*/
-static const dkChar * const *dk_pwgen_msg = dk_pwgen_kw_def;
-
-
-
-/** Application structure.
-*/
-static dk4_app_t *app = NULL;
-
-
-
-/** Number of elements in dk_pwgen_msg array.
-*/
-static size_t dk_pwgen_sz_msg =
-sizeof(dk_pwgen_kw_def)/sizeof(DK4_PCDKCHAR) - 1;
-
-
-/** Number of elements in dk_pwgen_options array.
-*/
-static const size_t dk_pwgen_sz_options =
-sizeof(dk_pwgen_options)/sizeof(dk4_option_specification_t);
-
-
-
-/** Minimum output length.
-*/
-static size_t length_min = 8;
-
-
-
-/** Maximum output length.
-*/
-static size_t length_max = 10;
-
-
-
-/** Output length to produce.
-*/
-static size_t length = 8;
-
-
-
-/** Minimum number of upper case characters.
-*/
-static size_t upper_min = 1;
-
-
-
-/** Maximum number of upper case characters.
-*/
-static size_t upper_max = 2;
-
-
-
-/** Number of upper case characters to produce.
-*/
-static size_t upper = 1;
-
-
-
-/** Minimum number of digits.
-*/
-static size_t digit_min = 1;
-
-
-
-/** Maximum number of digits.
-*/
-static size_t digit_max = 2;
-
-
-
-/** Number of digits to produce.
-*/
-static size_t digits = 1;
-
-
-
-/** Minimum number of special characters.
-*/
-static size_t special_min = 1;
-
-
-
-/** Maximum number of special characters.
-*/
-static size_t special_max = 2;
-
-
-
-/** Number of special characters to produce.
-*/
-static size_t specials = 1;
-
-
-
-/** Flag: Errors occured while writing to stdout.
-*/
-static int output_error = 0;
-
-
-
-/** Flag: Verbose output (report SIGPIPE).
-*/
-static int verbose = 1;
-
-
-
-/** Exit status code.
-*/
-static int exval = EXIT_FAILURE;
-
-
-
-/** Output type to produce.
-*/
-static int output_type = DK_PWGEN_MODE_NORMAL;
-
-
-
-#if DK4_HAVE_OPENSSL_RAND_H
-
-
-
-#ifdef SIGPIPE
-/** Indicator: SIGPIPE signal received.
-*/
-static
-DK4_VOLATILE
-dk4_sig_atomic_t sig_had_pipe = 0;
-#endif
-
-/** Indicator: SIGINT signal received.
-*/
-static
-DK4_VOLATILE
-dk4_sig_atomic_t sig_had_int = 0;
-
-/** Indicator: SIGTERM signal received.
-*/
-static
-DK4_VOLATILE
-dk4_sig_atomic_t sig_had_term = 0;
-
-
-
-/** Pass a volatile pointer to an atomic integer.
- This function is necessary as some compilers mis-optimize
- direct access to volatile variables (at least if you believe
- one of the coding standards).
- @param ptr Address of atomic integer variable.
- @return The unmodified pointer.
-*/
-static
-DK4_VOLATILE
-dk4_sig_atomic_t *
-sig_pass_pointer(DK4_VOLATILE dk4_sig_atomic_t *ptr)
-{
- return ptr;
-}
-
-
-
-#ifdef SIGPIPE
-/** Handler for SIGPIPE signal.
- @param signo Signal number (always SIGPIPE, ignored).
-*/
-static
-void
-sig_handler_pipe(int DK4_ARG_UNUSED(signo) )
-{
- DK4_UNUSED_ARG(signo)
- *sig_pass_pointer(&sig_had_pipe) = 1;
-}
-#endif
-
-/** Handler for SIGINT signal.
- @param signo Signal number (always SIGINT, ignored).
-*/
-static
-void
-sig_handler_int(int DK4_ARG_UNUSED(signo) )
-{
- DK4_UNUSED_ARG(signo)
- *sig_pass_pointer(&sig_had_int) = 1;
-}
-
-/** Handler for SIGTERM signal.
- @param signo Signal number (always SIGTERM, ignored).
-*/
-static
-void
-sig_handler_term(int DK4_ARG_UNUSED(signo) )
-{
- DK4_UNUSED_ARG(signo)
- *sig_pass_pointer(&sig_had_term) = 1;
-}
-
-/** Read value from volatile atomic type.
- This function is necessary as some compilers mis-optimize
- direct access to volatile variables (at least if you believe
- one of the coding standards).
- @param ap Pointer to volatile atomic variable.
- @return Contents of the variable.
-*/
-static
-dk4_sig_atomic_t
-sig_read_atomic(DK4_VOLATILE dk4_sig_atomic_t *ap)
-{
- return (*ap);
-}
-
-/** Check whether we can continue or if a signal was received.
- @param check_pipe Flag: Check for occured SIGPIPE signal too.
- @return 1 if the program can continue, 0 if a signal was received.
-*/
-static
-int
-sig_can_continue(
-#ifdef SIGPIPE
-int check_pipe
-#else
-int DK4_ARG_UNUSED(check_pipe)
-#endif
-)
-{
- int back = 1;
-#ifndef SIGPIPE
- DK4_UNUSED_ARG(check_pipe)
-#else
- if (0 != check_pipe) {
- if (0 != sig_read_atomic(&sig_had_pipe)) { back = 0; }
- }
-#endif
- if (0 != sig_read_atomic(&sig_had_int )) { back = 0; }
- if (0 != sig_read_atomic(&sig_had_term)) { back = 0; }
- return back;
-}
-
-
-
-/** Check whether we can continue.
- @return 1 for yes, 0 for no.
-*/
-static
-int
-dk_pwgen_can_continue(void)
-{
- int back = 1;
- if (0 == sig_can_continue(1)) {
- back = 0;
- }
- return back;
-}
-
-
-
-/** Read range from text to size_t variables.
- @param minptr Address of minimum variable.
- @param maxptr Address of maximum variable.
- @param buf Buffer containing the text.
- @return 1 on success, 0 on error.
-*/
-static
-int
-dk_pwgen_opt_range(size_t *minptr, size_t *maxptr, dkChar option)
-{
- dkChar buf[32*sizeof(dk4_um_t)];
- dk4_er_t er;
- const dkChar *endptr;
- dkChar *p1 = NULL;
- size_t val;
- int res;
- int rdf = 0;
- int back = 0;
- int passno = 0;
-
-
-#line 912 "dk-pwgen.ctr"
- dk4error_init(&er);
- if (0 != dk4app_opt_is_set_long(app, dk_pwgen_kwnl[8], NULL)) {
- verbose = 1;
- }
- if (0 != dk4app_opt_is_set_short(app, option, NULL)) {
- res = dk4app_opt_get_string_short(
- buf, DK4_SIZEOF(buf,dkChar), app, option, NULL
- );
- if (0 != res) {
-
-#line 921 "dk-pwgen.ctr"
- p1 = dk4str_chr(buf, dkT('-'));
- if (NULL != p1) {
-
-#line 923 "dk-pwgen.ctr"
- *(p1++) = dkT('\0');
- p1 = dk4str_start(p1, NULL);
- } else {
-
-#line 926 "dk-pwgen.ctr"
- }
- val = 0;
- endptr = NULL;
- if (0 != dk4ma_input_dk_dec_size_t(&val, buf, &endptr, 1, &er)) {
- *minptr = val;
- *maxptr = val;
- back = 1;
- if (NULL != p1) {
-
-#line 934 "dk-pwgen.ctr"
- passno = 1;
- back = 0;
- val = 0;
- endptr = NULL;
- if (0 != dk4ma_input_dk_dec_size_t(&val, p1, &endptr, 1, &er)) {
- *maxptr = val;
- back = 1;
- if (*maxptr < *minptr) {
- val = *maxptr;
- *maxptr = *minptr;
- *minptr = val;
- }
- } else {
-
-#line 947 "dk-pwgen.ctr"
- /* ERROR: Failed to read size */
- rdf = 1;
- }
- }
- } else {
-
-#line 952 "dk-pwgen.ctr"
- /* ERROR: Failed to read size */
- rdf = 1;
- }
- } else {
-
-#line 956 "dk-pwgen.ctr"
- /* ERROR: Failed to obtain option argument, probably bug */
- }
- } else {
-
-#line 959 "dk-pwgen.ctr"
- back = 1;
- }
- if ((0 == back) && (0 != rdf)) {
- switch (er.ec) {
- case DK4_E_MATH_OVERFLOW : {
-
-#line 964 "dk-pwgen.ctr"
- /* ERROR: Numeric overflow while reading number */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 3);
- } break;
- case DK4_E_SYNTAX : {
-
-#line 968 "dk-pwgen.ctr"
- /* ERROR: Not a size specification */
- dk4app_log_3(
- app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 4, 5,
- ((0 == passno) ? buf : p1)
- );
- } break;
- default: {
-
-#line 975 "dk-pwgen.ctr"
- /* ERROR: Failed to read size */
- dk4app_log_3(
- app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 6, 7,
- ((0 == passno) ? buf : p1)
- );
- } break;
- }
- }
-
-#line 983 "dk-pwgen.ctr"
- return back;
-}
-
-
-
-/** Process command line options.
- @return 1 on success, 0 on error (invalid option combination).
-*/
-static
-int
-dk_pwgen_check_options(void)
-{
- dk4_er_t er;
- size_t val;
- int back = 0;
-
-
-#line 999 "dk-pwgen.ctr"
-
- if (0 != dk4app_opt_is_set_short(app, dkT('b'), NULL)) {
- output_type = DK_PWGEN_MODE_BINARY;
- if (
- (0 != dk4app_opt_is_set_short(app, dkT('h'), NULL))
- || (0 != dk4app_opt_is_set_short(app, dkT('x'), NULL))
- || (0 != dk4app_opt_is_set_short(app, dkT('X'), NULL))
- || (0 != dk4app_opt_is_set_short(app, dkT('p'), NULL))
- )
- {
- /* ERROR: Options -b, -h, -x, -X and -p are mutually exclusive! */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 29);
- goto finished;
- }
- else
- {
- back = 1;
- }
- } else {
- if (0 != dk4app_opt_is_set_short(app, dkT('h'), NULL)) {
- output_type = DK_PWGEN_MODE_HARD;
- if (
- (0 != dk4app_opt_is_set_short(app, dkT('x'), NULL))
- || (0 != dk4app_opt_is_set_short(app, dkT('X'), NULL))
- || (0 != dk4app_opt_is_set_short(app, dkT('p'), NULL))
- )
- {
- /* ERROR: Options -h, -x, -X and -p are mutually exclusive! */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 8);
- goto finished;
- }
- else
- {
- back = 1;
- }
- } else {
- if (0 != dk4app_opt_is_set_short(app, dkT('x'), NULL)) {
- output_type = DK_PWGEN_MODE_HEX_LOWER;
- if (
- (0 != dk4app_opt_is_set_short(app, dkT('X'), NULL))
- || (0 != dk4app_opt_is_set_short(app, dkT('p'), NULL))
- )
- {
- /* ERROR: Options -h, -x, -X and -p are mutually exclusive! */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 8);
- goto finished;
- }
- else
- {
- back = 1;
- }
- } else {
- if (0 != dk4app_opt_is_set_short(app, dkT('X'), NULL)) {
- output_type = DK_PWGEN_MODE_HEX_UPPER;
- if (0 != dk4app_opt_is_set_short(app, dkT('p'), NULL)) {
- /* ERROR: Options -h, -x, -X and -p are mutually exclusive! */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 8);
- goto finished;
- } else {
- back = 1;
- }
- } else {
- if (0 != dk4app_opt_is_set_short(app, dkT('p'), NULL)) {
- output_type = DK_PWGEN_MODE_PIN;
- }
- back = 1;
- }
- }
- }
- }
- if (1 == back) {
- if (0 == dk_pwgen_opt_range(&length_min, &length_max, dkT('l'))) {
- back = 0;
- }
- if (1 == back) {
- switch (output_type) {
- case DK_PWGEN_MODE_HARD :
- case DK_PWGEN_MODE_HEX_LOWER :
- case DK_PWGEN_MODE_HEX_UPPER :
- case DK_PWGEN_MODE_PIN :
- {
- if (0 != dk4app_opt_is_set_short(app, dkT('u'), NULL)) {
- /* WARNING: Option ignored */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 9);
- }
- if (0 != dk4app_opt_is_set_short(app, dkT('d'), NULL)) {
- /* WARNING: Option ignored */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 10);
- }
- if (0 != dk4app_opt_is_set_short(app, dkT('s'), NULL)) {
- /* WARNING: Option ignored */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 11);
- }
- } break;
- default : {
- if (0 != dk_pwgen_opt_range(&upper_min, &upper_max, dkT('u'))) {
- if (0 != dk_pwgen_opt_range(&digit_min, &digit_max, dkT('d'))) {
- if (0 != dk_pwgen_opt_range(&special_min, &special_max, dkT('s')))
- {
- dk4error_init(&er);
- val = dk4ma_size_t_add(upper_max, digit_max, &er);
- val = dk4ma_size_t_add(val, special_max, &er);
- if (DK4_E_NONE == er.ec) {
- if (val > length_min) {
- back = 0;
- /* ERROR: Illegal range combination */
- dk4app_log_1(
- app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 12
- );
- }
- } else {
- /* ERROR: Numeric overflow in size calculation */
- dk4app_log_1(
- app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 13
- );
- }
- } else {
- back = 0;
- }
- } else {
- back = 0;
- }
- } else {
- back = 0;
- }
- } break;
- }
- }
- }
- finished:
-
-
-#line 1130 "dk-pwgen.ctr"
- return back;
-}
-
-
-
-/** Seed PRNG.
- @return 1 on success, 0 on error (not enough seed data).
-*/
-static
-int
-dk_pwgen_seed_prng(void)
-{
-#if DK4_CHAR_SIZE == 1
-#if DK4_HAVE_RAND_EGD && DK4_HAVE_STRUCT_SOCKADDR_UN
- dkChar snb[DK4_MAX_PATH];
-#endif
-#endif
- char buffer[64];
-#if DK4_HAVE_RAND_EGD && DK4_HAVE_STRUCT_SOCKADDR_UN
- char *envptr;
-#endif
-#if DK4_ON_WINDOWS
- HCRYPTPROV hcp;
- BOOL res;
-#else
- FILE *fipo;
- size_t rdb;
-#endif
- int cc;
- int rounds = 0;
- int back = 0;
-#if (!(DK4_ON_WINDOWS))
- int svbres = 0;
-#endif
-
-
-#line 1165 "dk-pwgen.ctr"
-
- /* Let OpenSSL library functions try to initialize.
- */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_DEBUG, 23);
- if (1 == RAND_status()) {
- back = 1;
- goto finished;
- }
-
-#if DK4_HAVE_RAND_EGD && DK4_HAVE_STRUCT_SOCKADDR_UN
- /* Attempt EGD socket if specified in environment.
- */
- envptr = getenv("EGDSOCKET");
- if (NULL != envptr) {
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_DEBUG, 24);
- if (0 < RAND_egd(envptr)) {
- if (1 == RAND_status()) {
- back = 1;
- goto finished;
- }
- }
- }
-
- /* Attempt EGD socket defined by preference.
- The RAND_egd() function accepts char, not dkChar.
- */
-#if DK4_CHAR_SIZE == 1
- if (0 != dk4app_pref_get(snb,DK4_SIZEOF(snb,dkChar),app,dk_pwgen_kwnl[7],0)) {
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_DEBUG, 28);
- if (0 < RAND_egd(snb)) {
- if (1 == RAND_status()) {
- back = 1;
- goto finished;
- }
- }
- }
-#endif
-#endif
-
- /* Use platform specific mechanisms if available.
- */
-#if DK4_ON_WINDOWS
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_DEBUG, 25);
- res = CryptAcquireContext(
- &hcp, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT
- );
- if (res) {
- cc = 1;
- do {
- if (0 != dk_pwgen_can_continue()) {
- res = CryptGenRandom(hcp, (DWORD)sizeof(buffer), (BYTE *)buffer);
- if (res) {
- RAND_seed(buffer, sizeof(buffer));
- if (1 == RAND_status()) {
- cc = 0;
- back = 1;
- } else {
- rounds++;
- }
- } else {
- cc = -1;
- /* ERROR: Failed to obtain random bytes from crypto context */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 14);
- }
- } else {
- cc = -1;
- }
- } while ((1 == cc) && (128 > rounds));
- CryptReleaseContext(hcp, (DWORD)0UL);
- dk4mem_reset_secure(buffer, sizeof(buffer), NULL);
- if (0 == back) {
- if (0 != dk_pwgen_can_continue()) {
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_DEBUG, 25);
- RAND_screen();
- if (1 == RAND_status()) {
- back = 1;
- }
- }
- }
- } else {
- /* ERROR: Failed to acquire crypto context */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 15);
- }
-#else
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_DEBUG, 27);
- fipo = fopen("/dev/random", "rb");
- if (NULL == fipo) {
- fipo = fopen("/dev/urandom", "rb");
- }
- if (NULL != fipo) {
- dk4mem_reset(seed_file_buf, sizeof(seed_file_buf), NULL);
- svbres = dk4setvbuf(
- fipo, DK4_FILE_FULL_BUFFERING, seed_file_buf, sizeof(seed_file_buf), NULL
- );
- if (0 != svbres) {
- cc = 1;
- do {
- if (0 != dk_pwgen_can_continue()) {
- rdb = fread(buffer, 1, sizeof(buffer), fipo);
- if (0 < rdb) {
- RAND_seed(buffer, rdb);
- if (1 == RAND_status()) {
- cc = 0;
- back = 1;
- } else {
- rounds++;
- }
- } else {
- cc = -1;
- }
- } else {
- cc = -1;
- }
- } while ((1 == cc) && (128 > rounds));
- } else {
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 16);
- }
- fclose(fipo);
- dk4mem_reset_secure(seed_file_buf, sizeof(seed_file_buf), NULL);
- dk4mem_reset_secure(buffer, sizeof(buffer), NULL);
- } else {
- /* ERROR: Failed to open both /dev/random and /dev/urandom */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 16);
- }
-#endif
-
- finished:
-
-
-#line 1293 "dk-pwgen.ctr"
- return back;
-}
-
-
-
-/** Find a random number in a given range.
- @param dptr Address of destination variable.
- @param min Minimum value.
- @param max Maximum value.
- @return 1 on success, 0 on error.
-*/
-static
-int
-dk_pwgen_value_in_range(size_t *dptr, size_t min, size_t max)
-{
- size_t width;
- size_t rval;
- int back = 0;
-
-
-#line 1312 "dk-pwgen.ctr"
- if (max > min) {
- width = max - min;
- if (0 != (width + 1)) { width++ ; }
- if (0 < RAND_bytes((unsigned char *)(&rval), (int)sizeof(rval))) {
-
-
-#line 1317 "dk-pwgen.ctr"
- *dptr = min + (rval % width);
- back = 1;
- } else {
- /* ERROR: Failed to obtain random bytes */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 17);
- }
- } else {
- *dptr = min;
- back = 1;
- }
-
-
-#line 1328 "dk-pwgen.ctr"
- return back;
-}
-
-
-
-/** Create hexadecimal key and write to standard output.
- @param upper Flag: Use upper case `a' to `f'.
-*/
-static
-void
-dk_pwgen_output_hex(int upper)
-{
- unsigned char buf[8]; /* Buffer for 8 random bytes */
- size_t i; /* Index of current output character */
- size_t bi; /* Index in buffer 0 to 7 */
- size_t j; /* Index in hexademical digits string */
- int cc; /* Flag: Can continue 1=yes,0=no,-1=abort */
- dkChar dc; /* Current character to write */
-
-
-#line 1347 "dk-pwgen.ctr"
- cc = 1;
- i = 0;
- bi = 0;
- do {
- if (0 != dk_pwgen_can_continue()) {
- if (i < length) {
-
-
-
- if (0 == (i % 16)) {
- bi = 0;
- if (0 < RAND_bytes(buf, (int)sizeof(buf))) {
- cc = 1;
- } else {
- cc = -1;
- exval = EXIT_FAILURE;
- /* ERROR: Random */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 17);
- }
- }
- if (1 == cc) {
- j = (size_t)(buf[bi / 2]);
- j = 0x00FFU & j;
- if (0 == (i % 2)) {
- j = j >> 4;
- }
- j &= 0x000FU;
- dc = (dk_pwgen_kwnl[(0 != upper) ? 4 : 3])[j];
- if (0 == dk4fputc(dc, stdout, NULL)) { output_error = 1; cc = -1; }
- }
- i++; bi++;
- } else {
- cc = 0;
- }
- } else {
- cc = -1;
- }
- } while (1 == cc);
- if (0 == dk4mem_reset_secure(buf, sizeof(buf), NULL)) {
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 30);
- exval = EXIT_FAILURE;
- }
- dc = dkT('\0'); j = 0;
- if ((0 != j) || (dkT('\0') != dc)) {
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 30);
- exval = EXIT_FAILURE;
- }
-
-
-#line 1395 "dk-pwgen.ctr"
-}
-
-
-
-/** Create hard password and write to standard output.
-*/
-static
-void
-dk_pwgen_output_hard(void)
-{
- dk4_um_t val;
- size_t i;
- int cc;
- dkChar dc;
-
- i = 0; cc = 1;
- do {
- if (0 != dk_pwgen_can_continue()) {
- if (i < length) {
- if (0 < RAND_bytes((unsigned char *)(&val), (int)sizeof(dk4_um_t))) {
- dc = (dkChar)33 + (dkChar)(val % (dk4_um_t)90U);
- if (0 == dk4fputc(dc, stdout, NULL)) {
- output_error = 1;
- cc = -1;
- }
- } else {
- cc = -1;
- exval = EXIT_FAILURE;
- /* ERROR: Random */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 17);
- }
- i++;
- } else {
- cc = 0;
- }
- } else {
- cc = -1;
- }
- } while (1 == cc);
- val = (dk4_um_t)0UL; dc = dkT('\0');
- if ((val != (dk4_um_t)0UL) || (dc != dkT('\0'))) {
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 30);
- exval = EXIT_FAILURE;
- }
-}
-
-
-
-/** Create binary password and write to standard output.
-*/
-static
-void
-dk_pwgen_output_binary(void)
-{
-#if !DK4_ON_WINDOWS
- char buf[256];
- size_t i;
- size_t remaining;
- size_t wrb;
- int cc;
-#endif
-
-#if DK4_ON_WINDOWS
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 31);
- exval = EXIT_FAILURE;
-#else
- remaining = length;
- cc = 1;
- do {
- if (0 != dk_pwgen_can_continue()) {
- i = sizeof(buf);
- if (remaining < i) { i = remaining; }
- if (0 == i) {
- cc = 0;
- } else {
- if (0 < RAND_bytes((unsigned char *)buf, (int)i)) {
- wrb = fwrite(buf, 1, i, stdout);
- if (i == wrb) {
- if (i >= remaining) {
- cc = 0;
- } else {
- remaining = remaining - i;
- }
- } else {
- cc = -1;
- exval = EXIT_FAILURE;
- output_error = 1;
- }
- } else {
- cc = -1;
- exval = EXIT_FAILURE;
- /* ERROR: Random */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 17);
- }
- }
- } else {
- cc = -1;
- }
- } while ((1 == cc) && (0 < remaining));
- if (0 != fflush(stdout)) {
- exval = EXIT_FAILURE;
- output_error = 1;
- }
- if (0 == dk4mem_reset_secure(buf, sizeof(buf), NULL)) {
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 30);
- exval = EXIT_FAILURE;
- }
-#endif
-}
-
-
-/** Create numeric PIN and write to standard output.
-*/
-static
-void
-dk_pwgen_output_pin(void)
-{
- dk4_um_t val;
- size_t i;
- int cc;
- dkChar dc;
-
- i = 0; cc = 1;
- do {
- if (0 != dk_pwgen_can_continue()) {
- if (i < length) {
- if (0 < RAND_bytes((unsigned char *)(&val), (int)sizeof(dk4_um_t))) {
- dc = dkT('0') + (dkChar)(val % (dk4_um_t)10U);
- if (0 == dk4fputc(dc, stdout, NULL)) {
- output_error = 1;
- cc = -1;
- }
- } else {
- cc = -1;
- exval = EXIT_FAILURE;
- /* ERROR: Random */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 17);
- }
- i++;
- } else {
- cc = 0;
- }
- } else {
- cc = -1;
- }
- } while (1 == cc);
- dc = dkT('\0');
- if (dc != dkT('\0')) {
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 30);
- exval = EXIT_FAILURE;
- }
-}
-
-
-
-/** Create normal password and write to standard output.
-*/
-static
-void
-dk_pwgen_output_normal(void)
-{
- char *ti = NULL; /* Cells */
- dk4_um_t val; /* Value */
- size_t avail; /* Number of unused cells */
- size_t curel; /* Current element within group */
- size_t ind_to_set; /* Index of unused cell to set */
- size_t i; /* Traverse all cells */
- size_t max; /* Number of elements within pass */
- size_t speclen; /* Length of string containing special */
- int passno; /* Current pass */
- int cc; /* Flag: No error yet, can continue */
- int res; /* Operation result */
- dkChar dc; /* Character to write */
- char ic; /* Indicator character */
-
- ti = dk4mem_new_app(char,length,app);
- if (NULL != ti) {
-
-#line 1572 "dk-pwgen.ctr"
- DK4_MEMRES(ti, length);
- cc = 1;
- if (0 == dk_pwgen_value_in_range(&upper, upper_min, upper_max)) {
- cc = 0;
- }
- if (0 == dk_pwgen_value_in_range(&digits, digit_min, digit_max)) {
- cc = 0;
- }
- if (0 == dk_pwgen_value_in_range(&specials, special_min, special_max)) {
- cc = 0;
- }
- if (1 == cc) {
- passno = 0;
- avail = length;
- while (3 > passno) {
-
-#line 1587 "dk-pwgen.ctr"
- switch (passno) {
- case 2 : {
- max = specials;
- ic = 's';
- } break;
- case 1 : {
- max = digits;
- ic = 'd';
- } break;
- default : {
- max = upper;
- ic = 'u';
- } break;
- }
- curel = 0;
- while (curel < max) {
-
-
-#line 1604 "dk-pwgen.ctr"
- if (0 != dk_pwgen_can_continue()) {
- res = RAND_bytes(
- (unsigned char *)(&ind_to_set), (int)sizeof(size_t)
- );
- if (0 < res) {
- if (0 < avail) {
- ind_to_set = ind_to_set % avail;
-
-
-#line 1612 "dk-pwgen.ctr"
- res = 0;
- i = 0;
- while (i < length) {
-
-
-#line 1616 "dk-pwgen.ctr"
- if ('\0' == ti[i]) {
- if (0 == ind_to_set) {
-
-
-#line 1619 "dk-pwgen.ctr"
- res = 1;
- ti[i] = ic;
- i = length - 1;
- avail--;
- } else {
- ind_to_set--;
- }
- } else {
-
-#line 1627 "dk-pwgen.ctr"
- }
- i++;
- }
- curel++;
- if (0 == res) {
-
-#line 1632 "dk-pwgen.ctr"
- /* No free cell found */
- curel = max; passno = 3; cc = 0;
- dk4app_log_1(
- app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 12
- );
- }
- } else {
- /* No more cells available */
- curel = max; passno = 3; cc = 0;
- dk4app_log_1(
- app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 12
- );
- }
- } else {
- /* ERROR: Random data */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 17);
- curel = max; passno = 3; cc = 0;
- }
- } else {
- curel = max; passno = 3; cc = 0;
- }
- }
- passno++;
- if (0 == dk_pwgen_can_continue()) { passno = 3; }
- }
- if ((1 == cc) && (0 != dk_pwgen_can_continue())) {
-
-#line 1658 "dk-pwgen.ctr"
- i = 0;
- speclen = dk4str_len(dk_pwgen_kwnl[6]);
-
-
-#line 1661 "dk-pwgen.ctr"
- while (i < length) {
-
-
-#line 1663 "dk-pwgen.ctr"
- if (0 != dk_pwgen_can_continue()) {
- res = RAND_bytes(
- (unsigned char *)(&val), (int)sizeof(dk4_um_t)
- );
- if (0 < res) {
-
-
-#line 1669 "dk-pwgen.ctr"
- switch (ti[i]) {
- case 's': {
- val = val % (dk4_um_t)speclen;
-
-
-#line 1673 "dk-pwgen.ctr"
- dc = (dk_pwgen_kwnl[6])[(size_t)val];
- } break;
- case 'd': {
- val = val % (dk4_um_t)10UL;
- dc = dkT('0') + (dkChar)val;
- } break;
- case 'u': {
- val = val % (dk4_um_t)26UL;
- dc = dkT('A') + (dkChar)val;
- } break;
- default: {
- val = val % (dk4_um_t)26UL;
- dc = dkT('a') + (dkChar)val;
- } break;
- }
- if (0 == dk4fputc(dc, stdout, NULL)) {
- output_error = 1;
- }
- i++;
- } else {
- i = length;
- exval = EXIT_FAILURE;
- /* ERROR: Random */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 17);
- }
- } else {
- i = length;
- }
- }
- } else {
- exval = EXIT_FAILURE;
- }
- } else {
- exval = EXIT_FAILURE;
- /* Failed to obtain random */
- }
- if (0 == dk4mem_reset_secure(ti, length, NULL)) {
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 30);
- exval = EXIT_FAILURE;
- }
- dk4mem_free(ti);
- dc = dkT('\0');
- if (dc != dkT('\0')) {
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 30);
- exval = EXIT_FAILURE;
- }
- } else {
-
-#line 1720 "dk-pwgen.ctr"
- exval = EXIT_FAILURE;
- /* ERROR: Memory, already reported */
- }
-}
-
-
-
-/** Create password, PIN or key and write to output.
-*/
-static
-void
-dk_pwgen_produce_output(void)
-{
-
-
-#line 1734 "dk-pwgen.ctr"
- if (0 != dk_pwgen_value_in_range(&length, length_min, length_max)) {
- exval = EXIT_SUCCESS;
- switch (output_type) {
- case DK_PWGEN_MODE_BINARY : {
-
-#line 1738 "dk-pwgen.ctr"
- dk_pwgen_output_binary();
- } break;
- case DK_PWGEN_MODE_HARD : {
-
-#line 1741 "dk-pwgen.ctr"
- dk_pwgen_output_hard();
- } break;
- case DK_PWGEN_MODE_HEX_LOWER : {
-
-#line 1744 "dk-pwgen.ctr"
- dk_pwgen_output_hex(0);
- } break;
- case DK_PWGEN_MODE_HEX_UPPER : {
-
-#line 1747 "dk-pwgen.ctr"
- dk_pwgen_output_hex(1);
- } break;
- case DK_PWGEN_MODE_PIN : {
-
-#line 1750 "dk-pwgen.ctr"
- dk_pwgen_output_pin();
- } break;
- default : {
-
-#line 1753 "dk-pwgen.ctr"
- dk_pwgen_output_normal();
- } break;
- }
- if (0 == dk4app_opt_is_set_short(app, dkT('n'), NULL)) {
- if (DK_PWGEN_MODE_BINARY != output_type) {
- if (0 == dk4fputc(dkT('\n'), stdout, NULL)) {
- output_error = 1;
- }
- }
- }
- }
-
-
-#line 1765 "dk-pwgen.ctr"
-}
-
-
-
-/** Run normally with signal handlers installed.
-*/
-static
-void
-dk_pwgen_normal_run(void)
-{
-
-
-#line 1776 "dk-pwgen.ctr"
- if (0 < dk_pwgen_check_options()) {
- if (0 < dk_pwgen_seed_prng()) {
- dk_pwgen_produce_output();
- } else {
- /* ERROR: Failed to seed PRNG */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 18);
- }
- RAND_cleanup();
- }
-
-
-#line 1786 "dk-pwgen.ctr"
-}
-
-
-
-
-#if DK4_HAVE_SIGACTION
-/** Set signal handlers and run.
-*/
-static
-void
-dk_pwgen_run_with_signal_handlers(void)
-{
-#ifdef SIGPIPE
- struct sigaction opipe;
-#endif
- struct sigaction oint;
-#ifdef SIGPIPE
- struct sigaction npipe;
-#endif
- struct sigaction nint;
- struct sigaction oterm;
- struct sigaction nterm;
- int success = 0;
-
-#ifdef SIGPIPE
- /* Set up signal handling for SIGPIPE.
- */
- DK4_MEMRES(&npipe, sizeof(npipe));
- npipe.sa_handler = sig_handler_pipe;
- npipe.sa_flags = 0;
- if (0 != sigemptyset(&npipe.sa_mask)) {
- /* ERROR: Failed to set up masked signal set for SIGPIPE */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 1);
- goto finished;
- }
- if (0 != sigaddset(&npipe.sa_mask, SIGPIPE)) {
- /* ERROR: Failed to set up masked signal set for SIGPIPE */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 1);
- goto finished;
- }
- if (0 != sigaction(SIGPIPE, &npipe, &opipe)) {
- /* ERROR: Failed to set up signal handler for SIGPIPE */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 1);
- goto finished;
- }
-#endif
-
- /* Set up signal handling for SIGINT.
- */
- DK4_MEMRES(&nint, sizeof(nint));
- nint.sa_handler = sig_handler_int;
- nint.sa_flags = 0;
- if (0 != sigemptyset(&nint.sa_mask)) {
- /* ERROR: Failed to set up masked signal set for SIGINT */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 1);
- goto restore_old_pipe;
- }
- if (0 != sigaddset(&nint.sa_mask, SIGINT)) {
- /* ERROR: Failed to set up masked signal set for SIGINT */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 1);
- goto restore_old_pipe;
- }
- if (0 != sigaction(SIGINT, &nint, &oint)) {
- /* ERROR: Failed to set up signal handler for SIGINT */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 1);
- goto restore_old_pipe;
- }
-
- /* Set up signal handling for SIGTERM
- */
- DK4_MEMRES(&nterm, sizeof(nterm));
- nterm.sa_handler = sig_handler_term;
- nterm.sa_flags = 0;
- if (0 != sigemptyset(&nterm.sa_mask)) {
- /* ERROR: Failed to set up masked signal set for SIGTERM */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 1);
- goto restore_old_int;
- }
- if (0 != sigaddset(&nterm.sa_mask, SIGTERM)) {
- /* ERROR: Failed to set up masked signal set for SIGTERM */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 1);
- goto restore_old_int;
- }
- if (0 != sigaction(SIGTERM, &nterm, &oterm)) {
- /* ERROR: Failed to set up signal handler for SIGTERM */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 1);
- goto restore_old_int;
- }
-
- success = 1;
- dk_pwgen_normal_run();
-
- /* Restore signal handling for SIGTERM.
- */
- if (0 != sigaction(SIGTERM, &oterm, NULL)) {
- /* ERROR: Failed to restore old SIGTERM settings */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 2);
- success = 0;
- }
-
- /* Restore signal handling for SIGINT.
- */
- restore_old_int:
- if (0 != sigaction(SIGINT, &oint, NULL)) {
- /* ERROR: Failed to restore old SIGPIPE settings */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 2);
- success = 0;
- }
-
-#ifdef SIGPIPE
- /* Restore signal handling for SIGPIPE.
- */
- restore_old_pipe:
- if (0 != sigaction(SIGPIPE, &opipe, NULL)) {
- /* ERROR: Failed to restore old SIGPIPE settings */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 2);
- success = 0;
- }
-#endif
-
- /* Set exit status code if error occured.
- */
- finished:
- if (0 == success) { exval = EXIT_FAILURE; }
-}
-#else
-#if DK4_HAVE_SIGSET
-/** Set signal handlers and run.
-*/
-static
-void
-dk_pwgen_run_with_signal_handlers(void)
-{
-#ifdef SIGPIPE
- dk4_sig_handler_t *oldpipe = NULL;
-#endif
- dk4_sig_handler_t *oldint = NULL;
- dk4_sig_handler_t *oldterm = NULL;
-
-#ifdef SIGPIPE
- oldpipe = sigset(SIGPIPE, sig_handler_pipe);
-#endif
- oldint = sigset(SIGINT, sig_handler_int);
- oldterm = sigset(SIGTERM, sig_handler_term);
- dk_pwgen_normal_run();
- sigset(SIGTERM, oldterm);
- sigset(SIGINT, oldint);
-#ifdef SIGPIPE
- sigset(SIGPIPE, oldpipe);
-#endif
-}
-#else
-#if DK4_HAVE_SIGNAL
-/** Set signal handlers and run.
-*/
-static
-void
-dk_pwgen_run_with_signal_handlers(void)
-{
-#ifdef SIGPIPE
- dk4_sig_handler_t *oldpipe = NULL;
-#endif
- dk4_sig_handler_t *oldint = NULL;
- dk4_sig_handler_t *oldterm = NULL;
-
-#ifdef SIGPIPE
- oldpipe = signal(SIGPIPE, sig_handler_pipe);
-#endif
- oldint = signal(SIGINT, sig_handler_int);
- oldterm = signal(SIGTERM, sig_handler_term);
- dk_pwgen_normal_run();
- signal(SIGTERM, oldterm);
- signal(SIGINT, oldint);
-#ifdef SIGPIPE
- signal(SIGPIPE, oldpipe);
-#endif
-}
-#else
-/** Set signal handlers and run.
-*/
-static
-void
-dk_pwgen_run_with_signal_handlers(void)
-{
- dk_pwgen_normal_run();
-}
-#endif
-#endif
-#endif
-
-#endif
-/* if DK4_HAVE_OPENSSL_RAND_H */
-
-
-
-/** Main function.
- @param argc Number of command line arguments.
- @param argv Command line arguments array.
- @return 0 on success, all other values indicate errors.
-*/
-#if DK4_CHAR_SIZE > 1
-int wmain(int argc, wchar_t *argv[])
-#else
-int main(int argc, char *argv[])
-#endif
-{
- int shp;
- int pbso; /* Flag: Private buffer used for stdout */
-
- pbso = dk4setvbuf(
- stdout, DK4_FILE_LINE_BUFFERING, stdout_buffer, sizeof(stdout_buffer), NULL
- );
-
-
-#line 1999 "dk-pwgen.ctr"
-
-
-#line 2000 "dk-pwgen.ctr"
- dk4fput_initialize_stdout();
- dk4fput_initialize_stderr();
- app = dk4app_open_cmd(
- argc, argv, dk_pwgen_options, dk_pwgen_sz_options,
- dk_pwgen_kwnl[0], DKT_VERSION_DK,
- dk_pwgen_kwnl[1], dk_pwgen_help_text, dk_pwgen_license_text
- );
- if (NULL != app) {
- dk_pwgen_sz_msg = dk4app_string_table_size(dk_pwgen_kw_def);
- dk_pwgen_msg = dk4app_string_table(app,dk_pwgen_kwnl[2],dk_pwgen_kw_def);
- if (0 != dk4app_can_run_normally(app)) {
-#if DK4_HAVE_OPENSSL_RAND_H
- /*
- Run.
- */
- dk_pwgen_run_with_signal_handlers();
- /*
- Report signals and output errors, if any.
- */
- if (0 != sig_read_atomic(&sig_had_term)) {
- /* ERROR: SIGTERM signal received */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 19);
- exval = EXIT_FAILURE;
- }
- if (0 != sig_read_atomic(&sig_had_int )) {
- /* ERROR: SIGINT signal received */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 20);
- exval = EXIT_FAILURE;
- }
-#ifdef SIGPIPE
- if (0 != sig_read_atomic(&sig_had_pipe)) {
- /* ERROR: SIGPIPE signal received */
- if (0 != verbose) {
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 21);
- }
- exval = EXIT_FAILURE;
- shp = 1;
- } else {
- shp = 0;
- }
-#else
- shp = 0;
-#endif
- if ((0 == shp) && (0 != output_error)) {
- /* ERROR: Failed to write to stdout */
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 22);
- exval = EXIT_FAILURE;
- }
-#else
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 0);
-#endif
- if (0 == pbso) {
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 30);
- exval = EXIT_FAILURE;
- } else {
-#ifdef BUFSIZ
- fflush(stdout);
- if (0 == dk4mem_reset_secure(stdout_buffer,sizeof(stdout_buffer),NULL))
- {
- dk4app_log_1(app, dk_pwgen_msg, dk_pwgen_sz_msg, DK4_LL_ERROR, 30);
- exval = EXIT_FAILURE;
- }
-#endif
- }
- } else {
- if (0 != dk4app_help_version_license(app)) {
- exval = EXIT_SUCCESS;
- }
- }
- dk4app_close(app);
- } else {
- }
- fflush(stdout);
- fflush(stderr);
- dk4fput_cleanup_stderr();
- dk4fput_cleanup_stdout();
-
-
-#line 2077 "dk-pwgen.ctr"
-
-
-#line 2078 "dk-pwgen.ctr"
- exit(exval); return exval;
-}
-