gsasl-1.10.0/ 0000755 0000000 0000000 00000000000 13773650702 007663 5 0000000 0000000 gsasl-1.10.0/cfg.mk 0000644 0000000 0000000 00000014733 13773635253 010707 0000000 0000000 # Copyright (C) 2006-2021 Simon Josefsson
#
# This file is part of GNU SASL.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program 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
# along with this program. If not, see .
WFLAGS ?= --enable-gcc-warnings
ADDFLAGS ?=
CFGFLAGS ?= --enable-gtk-doc --enable-gtk-doc-pdf $(ADDFLAGS) $(WFLAGS)
_build-aux = lib/build-aux
INDENT_SOURCES = `find . -name '*.[chly]' | grep -v -e /gl -e build-aux -e /win32/ -e /examples/`
ifeq ($(.DEFAULT_GOAL),abort-due-to-no-makefile)
.DEFAULT_GOAL := bootstrap
endif
local-checks-to-skip = sc_prohibit_strcmp sc_error_message_uppercase \
sc_prohibit_have_config_h sc_require_config_h \
sc_require_config_h_first sc_immutable_NEWS sc_po_check \
sc_prohibit_gnu_make_extensions
VC_LIST_ALWAYS_EXCLUDE_REGEX = \
^((lib/)?GNUmakefile|gtk-doc.make|m4/pkg.m4|doc/gendocs_template|doc/fdl-1.3.texi|doc/specification|doc/doxygen/Doxyfile|(lib/)?po/.*.po.in|(lib/)?maint.mk|((lib/)?(gl|gltests|build-aux))/.*)
# Explicit syntax-check exceptions.
exclude_file_name_regexp--sc_prohibit_empty_lines_at_EOF = ^(lib/)?ABOUT-NLS|doc/.*\.(dia|png)|tests/gssapi.tkt$$
exclude_file_name_regexp--sc_GPL_version = ^doc/lgpl-2.1.texi|lib/.*$$
exclude_file_name_regexp--sc_copyright_check = ^doc/gsasl.texi$$
exclude_file_name_regexp--sc_m4_quote_check = ^m4/.*|lib/m4/.*$$
exclude_file_name_regexp-- = ^m4/.*|lib/m4/.*$$
exclude_file_name_regexp--sc_unmarked_diagnostics = ^examples/.*|src/gsasl.c$$
exclude_file_name_regexp--sc_makefile_TAB_only_indentation = ^(lib/)?po/Makefile.in.in$$
exclude_file_name_regexp--sc_makefile_path_separator_check = ^(lib/)?po/Makefile.in.in$$
exclude_file_name_regexp--sc_bindtextdomain = ^doc/print-errors.c|examples/.*|lib/digest-md5/test-parser.c|lib/tests/test-error.c|tests/.*$$
exclude_file_name_regexp--sc_program_name = $(exclude_file_name_regexp--sc_bindtextdomain)
exclude_file_name_regexp--sc_prohibit_magic_number_exit = ^(lib/)?m4/.*|doc/gsasl.texi|examples/(openid20|saml20)/.*.php|tests.*$$
exclude_file_name_regexp--sc_trailing_blank = ^(lib/)?ABOUT-NLS|doc/.*\.(eps|png)|(lib/)?po/.*$$
exclude_file_name_regexp--sc_space_tab = ^(lib/)?m4/lib-prefix.m4$$
exclude_file_name_regexp--sc_useless_cpp_parens = ^(lib/)?m4/.*$$
exclude_file_name_regexp--sc_prohibit_test_minus_ao = ^lib/m4/libgcrypt.m4$$
update-copyright-env = UPDATE_COPYRIGHT_HOLDER="Simon Josefsson" UPDATE_COPYRIGHT_USE_INTERVALS=2 UPDATE_COPYRIGHT_FORCE=1
autoreconf:
for f in po/*.po.in lib/po/*.po.in; do \
cp $$f `echo $$f | sed 's/.in//'`; \
done
touch ChangeLog lib/ChangeLog
if ! test -f ./configure; then \
libtoolize --copy --install; \
cd lib && libtoolize --copy --install && cd ..; \
patch -d m4 < gl/override/0001-Fix-export-symbols-and-export-symbols-regex-support-.patch; \
patch -d lib/m4 < gl/override/0001-Fix-export-symbols-and-export-symbols-regex-support-.patch; \
AUTOPOINT=true LIBTOOLIZE=true autoreconf --install --verbose; \
fi
update-po:
$(MAKE) -C lib refresh-po PACKAGE=libgsasl
$(MAKE) refresh-po PACKAGE=gsasl
for f in `ls lib/po/*.po po/*.po | grep -v quot.po`; do \
cp $$f $$f.in; \
done
git add po/*.po.in lib/po/*.po.in
git commit -m "Sync with TP." \
po/LINGUAS po/*.po.in lib/po/LINGUAS lib/po/*.po.in
bootstrap: autoreconf
./configure $(CFGFLAGS)
glimport:
gtkdocize --copy
autopoint --force
cd lib && autopoint --force
gnulib-tool --add-import
cd lib && gnulib-tool --add-import
review-diff:
git diff `git describe --abbrev=0`.. \
| grep -v -e ^index -e '^diff --git' \
| filterdiff -p 1 -x 'gl/*' -x 'm4/*' -x 'gltests/*' -x 'lib/build-aux/*' -x 'lib/gl*' -x 'lib/m4/*' -x 'lib/gltests/*' -x 'po/*' -x 'lib/po/*' -x 'maint.mk' -x 'lib/maint.mk' -x '.gitignore' -x '.x-sc*' -x ChangeLog -x GNUmakefile -x ABOUT-NLS -x lib/ABOUT-NLS \
| less
# Release
htmldir = ../www-$(PACKAGE)
i18n:
-$(MAKE) update-po
gendoc-copy:
cd doc && env MAKEINFO="makeinfo -I ../examples" \
TEXI2DVI="texi2dvi -I ../examples" \
$(SHELL) ../$(_build-aux)/gendocs.sh \
--html "--css-include=texinfo.css" \
-o ../$(htmldir)/manual/ $(PACKAGE) "$(PACKAGE_NAME)"
gendoc-upload:
cd $(htmldir) && \
cvs add manual || true && \
cvs add manual/html_node || true && \
cvs add -kb manual/*.gz manual/*.pdf || true && \
cvs add manual/*.txt manual/*.html \
manual/html_node/*.html || true && \
cvs commit -m "Update." manual/
gtkdoc-copy:
mkdir -p $(htmldir)/reference/
cp -v doc/reference/$(PACKAGE).pdf \
doc/reference/html/*.html \
doc/reference/html/*.png \
doc/reference/html/*.devhelp2 \
doc/reference/html/*.css \
$(htmldir)/reference/
gtkdoc-upload:
cd $(htmldir) && \
cvs add reference || true && \
cvs add -kb reference/*.png reference/*.pdf || true && \
cvs add reference/*.html reference/*.css \
reference/*.devhelp2 || true && \
cvs commit -m "Update." reference/
doxygen-copy:
cd doc/doxygen && \
doxygen && \
cd ../.. && \
cp -v doc/doxygen/html/* $(htmldir)/doxygen/ && \
cd doc/doxygen/latex && \
make refman.pdf && \
cd ../../../ && \
cp doc/doxygen/latex/refman.pdf $(htmldir)/doxygen/$(PACKAGE).pdf
doxygen-upload:
cd $(htmldir) && \
cvs commit -m "Update." doxygen/
ChangeLog:
git2cl > ChangeLog
cat .clcopying >> ChangeLog
tag = $(PACKAGE)-`echo $(VERSION) | sed 's/\./-/g'`
tarball:
$(MAKE) -C lib tarball
! git tag -l $(tag) | grep $(PACKAGE) > /dev/null
rm -f ChangeLog
$(MAKE) ChangeLog distcheck
binaries:
-mkdir windows/dist
cp $(distdir).tar.gz windows/dist
cd windows && $(MAKE) -f gsasl4win.mk gsasl4win VERSION=$(VERSION)
source:
git tag -s -m $(VERSION) $(tag)
release-check: syntax-check i18n tarball gendoc-copy gtkdoc-copy doxygen-copy
release-upload-www: gendoc-upload gtkdoc-upload doxygen-upload
site = ftp.gnu.org
release-upload-ftp:
$(_build-aux)/gnupload --to $(site):$(PACKAGE) $(distdir).tar.gz
cd lib && ../$(_build-aux)/gnupload --to $(site):$(PACKAGE) lib$(distdir).tar.gz
cp -v $(distdir).tar.gz* lib/lib$(distdir).tar.gz* ../releases/$(PACKAGE)/
git push
git push --tags
release: release-check release-upload-www source release-upload-ftp
gsasl-1.10.0/THANKS 0000644 0000000 0000000 00000002532 13773635253 010524 0000000 0000000 GNU SASL THANKS -- Acknowledgements.
Copyright (C) 2002-2021 Simon Josefsson
See the end for copying conditions.
GNU SASL uses libntlm by Grant Edwards maintained by Simon Josefsson;
libgssapi by MIT/Heimdal; libgcrypt by Werner Koch; GSS, Libidn, and
Shishi by Simon Josefsson.
Bug reports, patches and/or suggestions were also received from:
Andorz Nilsson
Sergey Poznyakoff
Lars Engebretsen
Marc Mutz
Peter Prohaska
Wojciech Polak
Jakub Bogusz
Tomas Ogren
Alexey Melnikov
Darian Lanx
Dirk Dierckx
Paul Romero
Mike Castle
Martin Lambers
Clytie Siddall
Ryan Slack
Yvan Bassuel
Francis Brosnan Blazquez
James Mansion
Maxim Britov
Brad Hards
James Canete
Daniel Armyr
Enrico Scholz
Martin Rozee
Pawel Widera
Gazsó Attila
Adam Goode
Andery Melnikov
Vincent Untz
Marco Maggi
"carlo.bramix"
Marc Santamaria
Wim Lewis
Phil Pennock
Goktan Kantarcioglu
Jeremy Harris
----------------------------------------------------------------------
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
gsasl-1.10.0/src/ 0000755 0000000 0000000 00000000000 13773650674 010462 5 0000000 0000000 gsasl-1.10.0/src/internal.h 0000644 0000000 0000000 00000003727 13773646063 012375 0000000 0000000 /* internal.h --- internal header file for gsasl
* Copyright (C) 2002-2021 Simon Josefsson
*
* This file is part of GNU SASL.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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
* along with this program. If not, see .
*
*/
#ifndef _INTERNAL_H
#define _INTERNAL_H
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include
#include
#include
#include
#include
#include
#include
#include
#include /* for AF_INET */
#include /* poll() */
#include
#include
#include
#ifdef HAVE_PWD_H
#include /* getpwuid */
#endif
#include
/* Gnulib. */
#include "progname.h"
#include "error.h"
#include "getpass.h"
#include "readline.h"
#include "quote.h"
#include "version-etc.h"
#include "xalloc.h"
/* Get i18n. */
#include
#include
#define _(String) gettext (String)
#define gettext_noop(String) String
#define N_(String) gettext_noop (String)
extern int writeln (const char *str);
extern int readln (char **out);
#include "gsasl_cmd.h"
extern struct gengetopt_args_info args_info;
extern char *b64cbtlsunique;
/* This feature is available in gcc versions 2.5 and later. */
#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
#define GSASL_ATTR_NO_RETRUN
#else
#define GSASL_ATTR_NO_RETRUN __attribute__ ((__noreturn__))
#endif
#endif /* _INTERNAL_H */
gsasl-1.10.0/src/gsasl.ggo 0000644 0000000 0000000 00000013524 13773635253 012212 0000000 0000000 # Copyright (C) 2002-2021 Simon Josefsson
#
# This file is part of GNU SASL.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program 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
# along with this program. If not, see .
purpose "Authenticate user to a server using Simple Authentication and
Security Layer. Currently IMAP and SMTP servers are supported. This
is a command line interface for the GNU SASL library."
section "Commands"
option "client" c "Act as client." flag on
option "server" s "Act as server." flag off
option "client-mechanisms" - "Write name of supported client mechanisms separated by space to stdout." flag off
option "server-mechanisms" - "Write name of supported server mechanisms separated by space to stdout." flag off
option "mkpasswd" k "Derive password. Provide --mechanism as SCRAM-SHA-1 or SCRAM-SHA-256. The required inputs are password (through --password or read from terminal) and optional inputs are iteration count (through --iteration-count, or defaulting to 65536) and salt (through --salt, or generated randomly). The output is a string of the form \"{mech}count,salt,stored-key,server-key[,salted-password]\" where \"mech\" is the mechanism, \"count\" is the number of times password was hashed, \"salt\" is the provided/generated base64-encoded salt, \"stored-key\" and \"server-key\" are the two derived and base64-encoded server-side keys. When --verbose is provided, \"salted-password\" will be included as the hex-encoded PBKDF2-derived password." flag off
section "Network options"
option "connect" - "Connect to TCP server and negotiate on stream instead of stdin/stdout. PORT is the protocol service, or an integer denoting the port, and defaults to 143 (imap) if not specified. Also sets the --hostname default." string typestr="HOST[:PORT]" no
#option "listen" - "Listen on network socket and provide authentication services following the supported protocols. This implies --server and defaults to IMAP mode." string typestr="HOST:[PORT]" no argoptional default="localhost:143"
section "Generic options"
option "application-data" d "After authentication, read data from stdin and run it through the mechanism's security layer and print it base64 encoded to stdout. The default is to terminate after authentication." flag on
option "imap" - "Use a IMAP-like logon procedure (client only). Also sets the --service default to 'imap'." flag off
option "smtp" - "Use a SMTP-like logon procedure (client only). Also sets the --service default to 'smtp'." flag off
option "mechanism" m "Mechanism to use." string no
option "no-client-first" - "Disallow client to send data first (client only)." flag off
section "SASL mechanism options (they are prompted for when required)"
option "anonymous-token" n "Token for anonymous authentication, usually mail address (ANONYMOUS only)." string no
option "authentication-id" a "Identity of credential owner." string no
option "authorization-id" z "Identity to request service for." string no
option "password" p "Password for authentication (insecure for non-testing purposes)." string no
option "realm" r "Realm. Defaults to hostname." string no
option "passcode" - "Passcode for authentication (SECURID only)." string typestr="NUMBER" no
option "service" - "Set the requested service name (should be a registered GSSAPI host based service name)." string no
option "hostname" - "Set the name of the server with the requested service." string no
option "service-name" - "Set the generic server name in case of a replicated server (DIGEST-MD5 only)." string no
option "enable-cram-md5-validate" - "Validate CRAM-MD5 challenge and response interactively." flag off
option "disable-cleartext-validate" - "Disable cleartext validate hook, forcing server to prompt for password." flag off
option "quality-of-protection" - "How application payload will be protected. 'qop-auth' means no protection, 'qop-int' means integrity protection, 'qop-conf' means integrity and confidentialiy protection. Currently only used by DIGEST-MD5, where the default is 'qop-int'." string typestr="TYPE" no
option "iteration-count" - "Indicate PBKDF2 hash iteration count (SCRAM only)." int typestr="NUMBER" no default="65536"
option "salt" - "Indicate PBKDF2 salt as base64-encoded string (SCRAM only)." string typestr="B64DATA" no
section "STARTTLS options"
option "starttls" - "Force use of STARTTLS. The default is to use STARTTLS when available." flag off
option "no-starttls" - "Unconditionally disable STARTTLS." flag off
option "no-cb" - "Don't use channel bindings from TLS." flag off
option "x509-ca-file" - "File containing one or more X.509 Certificate Authorities certificates in PEM format, used to verify the certificate received from the server. If not specified, verification uses system trust settings. If FILE is the empty string, don't fail on X.509 server certificates verification errors." string typestr="FILE" no
option "x509-cert-file" - "File containing client X.509 certificate in PEM format. Used together with --x509-key-file to specify the certificate/key pair." string typestr="FILE" no
option "x509-key-file" - "Private key for the client X.509 certificate in PEM format. Used together with --x509-key-file to specify the certificate/key pair." string typestr="FILE" no
option "priority" - "Cipher priority string." string no
section "Other options"
option "verbose" - "Produce verbose output." flag off
option "quiet" - "Don't produce any diagnostic output." flag off
gsasl-1.10.0/src/gsasl.c 0000644 0000000 0000000 00000066740 13773646063 011671 0000000 0000000 /* gsasl.c --- Command line interface to libgsasl.
* Copyright (C) 2002-2021 Simon Josefsson
*
* This file is part of GNU SASL.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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
* along with this program. If not, see .
*
*/
#include "internal.h"
#include "callbacks.h"
#include "imap.h"
#include "smtp.h"
#include "sockets.h"
#ifdef HAVE_LIBGNUTLS
#include
#include
gnutls_session_t session;
bool using_tls = false;
#endif
char *b64cbtlsunique = NULL;
struct gengetopt_args_info args_info;
int sockfd = 0;
#ifdef HAVE_LIBGNUTLS
static bool
_handle_tlserror (int error)
{
int rc;
switch (error)
{
case GNUTLS_E_REHANDSHAKE:
for (;;)
{
rc = gnutls_handshake (session);
switch (rc)
{
case GNUTLS_E_INTERRUPTED:
case GNUTLS_E_AGAIN:
continue;
case GNUTLS_E_GOT_APPLICATION_DATA:
/* TODO: signal this somehow? */
continue;
case GNUTLS_E_WARNING_ALERT_RECEIVED:
fprintf (stderr, "ALERT: %s\n",
gnutls_alert_get_name (gnutls_alert_get (session)));
continue;
default:
fprintf (stderr, "TLS rehandshake failed: %s\n",
gnutls_strerror (rc));
/* make every error fatal */
return false;
}
return true;
}
case GNUTLS_E_INTERRUPTED:
case GNUTLS_E_AGAIN:
/* not fatal */
return true;
default:
fprintf (stderr, "TLS error: %s\n", gnutls_strerror (error));
return false;
}
}
#endif
static ssize_t
_recv (void *dst, size_t cnt)
{
#ifdef HAVE_LIBGNUTLS
if (using_tls)
{
ssize_t l = 0;
do
{
l = gnutls_record_recv (session, dst, cnt);
if (l < 0 && !_handle_tlserror (l))
break;
}
while (l < 0);
return l;
}
#endif
return recv (sockfd, dst, cnt, 0);
}
static ssize_t
_send (void const *src, size_t cnt)
{
#ifdef HAVE_LIBGNUTLS
if (using_tls)
{
ssize_t l;
do
{
if (cnt > 0)
l = gnutls_record_send (session, src, cnt);
else
l = 0;
if (l < 0 && !_handle_tlserror (l))
break;
}
while (l < 0);
return l;
}
#endif
return write (sockfd, src, cnt);
}
int
writeln (const char *str)
{
printf ("%s\n", str);
if (sockfd)
{
ssize_t len = strlen (str);
len = _send (str, len);
if (len != (ssize_t) strlen (str))
return 0;
#define CRLF "\r\n"
len = _send (CRLF, strlen (CRLF));
if (len != strlen (CRLF))
return 0;
}
return 1;
}
int
readln (char **out)
{
if (sockfd)
{
size_t allocated = 0, used = 0;
char *input = NULL;
/* FIXME: Read larger chunks. Problem: buffering too large reads? */
do
{
ssize_t nread;
if (used == allocated)
input = x2realloc (input, &allocated);
nread = _recv (&input[used], 1);
if (nread <= 0)
return 0;
used += nread;
}
while (input[used - 1] != '\n');
if (used == allocated)
input = x2realloc (input, &allocated);
input[used] = '\0';
*out = input;
printf ("%s", *out);
}
else
{
*out = readline ("");
if (*out == NULL)
return 0;
}
return 1;
}
static int
greeting (void)
{
if (args_info.imap_flag)
return imap_greeting ();
if (args_info.smtp_flag)
return smtp_greeting ();
return 1;
}
#ifdef HAVE_LIBGNUTLS
static int
has_starttls (void)
{
if (args_info.imap_flag)
return imap_has_starttls ();
if (args_info.smtp_flag)
return smtp_has_starttls ();
return 0;
}
static int
starttls (void)
{
if (args_info.imap_flag)
return imap_starttls ();
if (args_info.smtp_flag)
return smtp_starttls ();
return 1;
}
#endif
static int
select_mechanism (char **mechlist)
{
char *in;
if (args_info.imap_flag)
return imap_select_mechanism (mechlist);
if (args_info.smtp_flag)
return smtp_select_mechanism (mechlist);
if (args_info.mechanism_arg)
*mechlist = args_info.mechanism_arg;
else if (args_info.server_flag)
{
if (!args_info.quiet_given)
fprintf (stderr, _("Input list of SASL mechanisms:\n"));
if (!readln (&in))
return 0;
*mechlist = in;
}
else /* if (args_info.client_flag) */
{
if (!args_info.quiet_given)
fprintf (stderr,
_("Input list of SASL mechanisms supported by server:\n"));
if (!readln (&in))
return 0;
*mechlist = in;
}
return 1;
}
static int
authenticate (const char *mech)
{
if (args_info.imap_flag)
return imap_authenticate (mech);
if (args_info.smtp_flag)
return smtp_authenticate (mech);
if (!args_info.quiet_given)
fprintf (stderr, _("Using mechanism:\n"));
puts (mech);
return 1;
}
static int
step_send (const char *data)
{
if (args_info.imap_flag)
return imap_step_send (data);
if (args_info.smtp_flag)
return smtp_step_send (data);
if (!args_info.quiet_given)
{
if (args_info.server_flag)
fprintf (stderr, _("Output from server:\n"));
else
fprintf (stderr, _("Output from client:\n"));
}
fprintf (stdout, "%s\n", data);
return 1;
}
/* Return 1 on token, 2 on protocol success, 3 on protocol fail, 0 on
errors. */
static int
step_recv (char **data)
{
if (args_info.imap_flag)
return imap_step_recv (data);
if (args_info.smtp_flag)
return smtp_step_recv (data);
if (!readln (data))
return 0;
return 1;
}
static int
logout (void)
{
if (args_info.imap_flag)
return imap_logout ();
if (args_info.smtp_flag)
return smtp_logout ();
return 1;
}
const char version_etc_copyright[] =
/* Do *not* mark this string for translation. %s is a copyright
symbol suitable for this locale, and %d is the copyright
year. */
"Copyright %s %d Simon Josefsson.";
static void
usage (int status)
GSASL_ATTR_NO_RETRUN;
static void usage (int status)
{
if (status != EXIT_SUCCESS)
fprintf (stderr, _("Try `%s --help' for more information.\n"),
program_name);
else
{
cmdline_parser_print_help ();
emit_bug_reporting_address ();
}
exit (status);
}
#define DEFAULT_SALT_SIZE 12
static void
mkpasswd (void)
{
char salt_buf[DEFAULT_SALT_SIZE];
char *salt;
size_t saltlen;
char *b64salt;
char saltedpassword[GSASL_HASH_MAX_SIZE];
char *hexsaltedpassword;
size_t hexsaltedpasswordlen;
int hash = 0;
size_t hashlen = 0;
char clientkey[GSASL_HASH_MAX_SIZE];
char serverkey[GSASL_HASH_MAX_SIZE];
char storedkey[GSASL_HASH_MAX_SIZE];
char *b64serverkey, *b64storedkey;
size_t b64serverkeylen, b64storedkeylen;
int res;
if (args_info.mechanism_arg == NULL)
error (EXIT_FAILURE, 0, _("required --mechanism missing"));
if (strcmp (args_info.mechanism_arg, "SCRAM-SHA-1") == 0)
{
hash = GSASL_HASH_SHA1;
hashlen = GSASL_HASH_SHA1_SIZE;
}
else if (strcmp (args_info.mechanism_arg, "SCRAM-SHA-256") == 0)
{
hash = GSASL_HASH_SHA256;
hashlen = GSASL_HASH_SHA256_SIZE;
}
else
error (EXIT_FAILURE, 0, _("unsupported --mechanism for --mkpasswd: %s"),
args_info.mechanism_arg);
if (args_info.iteration_count_arg <= 0)
error (EXIT_FAILURE, 0, _("iteration count must be positive: %d"),
args_info.iteration_count_arg);
if (args_info.salt_given)
{
b64salt = args_info.salt_arg;
res = gsasl_base64_from (b64salt, strlen (b64salt), &salt, &saltlen);
if (res != GSASL_OK)
error (EXIT_FAILURE, 0, "%s: %s", gsasl_strerror (res), b64salt);
}
else
{
salt = salt_buf;
saltlen = sizeof (salt_buf);
res = gsasl_nonce (salt, saltlen);
if (res != GSASL_OK)
error (EXIT_FAILURE, 0, "%s", gsasl_strerror (res));
res = gsasl_base64_to (salt, saltlen, &b64salt, NULL);
if (res != GSASL_OK)
error (EXIT_FAILURE, 0, "%s", gsasl_strerror (res));
}
if (args_info.password_arg == NULL)
args_info.password_arg = readutf8pass (_("Enter password: "));
res = gsasl_scram_secrets_from_password (hash, args_info.password_arg,
args_info.iteration_count_arg,
salt, saltlen,
saltedpassword,
clientkey, serverkey, storedkey);
if (res != GSASL_OK)
error (EXIT_FAILURE, 0, "%s", gsasl_strerror (res));
res = gsasl_hex_to (saltedpassword, hashlen,
&hexsaltedpassword, &hexsaltedpasswordlen);
if (res != GSASL_OK)
error (EXIT_FAILURE, 0, "%s", gsasl_strerror (res));
res = gsasl_base64_to (storedkey, hashlen, &b64storedkey, &b64storedkeylen);
if (res != GSASL_OK)
error (EXIT_FAILURE, 0, "%s", gsasl_strerror (res));
res = gsasl_base64_to (serverkey, hashlen, &b64serverkey, &b64serverkeylen);
if (res != GSASL_OK)
error (EXIT_FAILURE, 0, "%s", gsasl_strerror (res));
printf ("{%s}%d,%s,%s,%s", args_info.mechanism_arg,
args_info.iteration_count_arg, b64salt, b64storedkey, b64serverkey);
if (args_info.verbose_given)
printf (",%s", hexsaltedpassword);
printf ("\n");
if (salt != salt_buf)
free (salt);
if (b64salt != args_info.salt_arg)
free (b64salt);
free (b64serverkey);
free (b64storedkey);
free (hexsaltedpassword);
}
int
main (int argc, char *argv[])
{
Gsasl *ctx = NULL;
int res;
char *in;
char *connect_hostname = NULL;
char *connect_service = NULL;
#ifdef HAVE_LIBGNUTLS
gnutls_anon_client_credentials_t anoncred;
gnutls_certificate_credentials_t x509cred;
#endif
set_program_name (argv[0]);
setlocale (LC_ALL, "");
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
/* This is necessary for modern MinGW compilers that provide working
getaddrinfo function, which results in gnulib not detecting that
it is broken. The proper fix is for gnulib to wrap the
getaddrinfo call and initialize Windows sockets in the
wrapper. */
(void) gl_sockets_startup (SOCKETS_1_1);
if (cmdline_parser (argc, argv, &args_info) != 0)
return EXIT_FAILURE;
if (args_info.version_given)
{
const char *p = PACKAGE_NAME;
if (strcmp (gsasl_check_version (NULL), PACKAGE_VERSION) != 0)
p = PACKAGE_STRING;
version_etc (stdout, "gsasl", p, gsasl_check_version (NULL),
"Simon Josefsson", (char *) NULL);
return EXIT_SUCCESS;
}
if (args_info.help_given)
usage (EXIT_SUCCESS);
if (!(args_info.client_flag || args_info.client_given) &&
!args_info.server_given &&
!args_info.client_mechanisms_flag && !args_info.server_mechanisms_flag
&& !args_info.mkpasswd_given)
{
error (0, 0, _("missing argument"));
usage (EXIT_FAILURE);
}
if ((args_info.x509_cert_file_arg && !args_info.x509_key_file_arg) ||
(!args_info.x509_cert_file_arg && args_info.x509_key_file_arg))
error (EXIT_FAILURE, 0,
_("need both --x509-cert-file and --x509-key-file"));
if (args_info.starttls_flag && args_info.no_starttls_flag)
error (EXIT_FAILURE, 0,
_("cannot use both --starttls and --no-starttls"));
if (args_info.smtp_flag && args_info.imap_flag)
error (EXIT_FAILURE, 0, _("cannot use both --smtp and --imap"));
if (!args_info.connect_given && args_info.inputs_num == 0 &&
!args_info.client_given && !args_info.server_given &&
!args_info.client_mechanisms_flag && !args_info.server_mechanisms_flag
&& !args_info.mkpasswd_given)
{
cmdline_parser_print_help ();
emit_bug_reporting_address ();
return EXIT_SUCCESS;
}
if (args_info.connect_given)
{
if (strrchr (args_info.connect_arg, ':'))
{
connect_hostname = xstrdup (args_info.connect_arg);
*strrchr (connect_hostname, ':') = '\0';
connect_service =
xstrdup (strrchr (args_info.connect_arg, ':') + 1);
}
else
{
connect_hostname = xstrdup (args_info.connect_arg);
if (args_info.smtp_flag)
connect_service = xstrdup ("smtp");
else
connect_service = xstrdup ("imap");
}
}
else if (args_info.inputs_num > 0)
{
connect_hostname = args_info.inputs[0];
if (args_info.inputs_num > 1)
connect_service = args_info.inputs[1];
else if (args_info.smtp_flag)
connect_service = xstrdup ("smtp");
else
connect_service = xstrdup ("imap");
}
if (connect_service && !args_info.smtp_flag && !args_info.imap_flag)
{
if (strcmp (connect_service, "25") == 0 ||
strcmp (connect_service, "smtp") == 0 ||
strcmp (connect_service, "587") == 0 ||
strcmp (connect_service, "submission") == 0)
args_info.smtp_flag = 1;
else if (strcmp (connect_service, "143") == 0 ||
strcmp (connect_service, "imap") == 0)
args_info.imap_flag = 1;
else
error (EXIT_FAILURE, 0,
_("cannot guess SASL profile (try --smtp or --imap)"));
}
if (args_info.imap_flag && !args_info.service_given)
args_info.service_arg = xstrdup ("imap");
if (args_info.smtp_flag && !args_info.service_given)
args_info.service_arg = xstrdup ("smtp");
if (args_info.imap_flag || args_info.smtp_flag)
args_info.no_client_first_flag = 1;
if (connect_hostname && !args_info.hostname_arg)
args_info.hostname_arg = xstrdup (connect_hostname);
if (!isatty (STDOUT_FILENO))
setvbuf (stdout, NULL, _IOLBF, BUFSIZ);
res = gsasl_init (&ctx);
if (res != GSASL_OK)
error (EXIT_FAILURE, 0, _("initialization failure: %s"),
gsasl_strerror (res));
gsasl_callback_set (ctx, callback);
if (args_info.client_mechanisms_flag || args_info.server_mechanisms_flag)
{
char *mechs;
if (args_info.client_mechanisms_flag)
res = gsasl_client_mechlist (ctx, &mechs);
else
res = gsasl_server_mechlist (ctx, &mechs);
if (res != GSASL_OK)
error (EXIT_FAILURE, 0, _("error listing mechanisms: %s"),
gsasl_strerror (res));
if (!args_info.quiet_given)
{
if (args_info.client_mechanisms_flag)
fprintf (stderr,
_("This client supports the following mechanisms:\n"));
else
fprintf (stderr,
_("This server supports the following mechanisms:\n"));
}
fprintf (stdout, "%s\n", mechs);
free (mechs);
goto done;
}
if (args_info.mkpasswd_given)
{
mkpasswd ();
goto done;
}
if (args_info.connect_given || args_info.inputs_num > 0)
{
struct addrinfo hints;
struct addrinfo *ai0, *ai;
memset (&hints, 0, sizeof (hints));
hints.ai_flags = AI_CANONNAME;
hints.ai_socktype = SOCK_STREAM;
res = getaddrinfo (connect_hostname, connect_service, &hints, &ai0);
if (res != 0)
error (EXIT_FAILURE, 0, "%s: %s", connect_hostname,
gai_strerror (res));
for (ai = ai0; ai; ai = ai->ai_next)
{
fprintf (stderr, "Trying %s...\n", quote (ai->ai_canonname ?
ai->ai_canonname :
connect_hostname));
sockfd = socket (ai->ai_family, ai->ai_socktype, ai->ai_protocol);
if (sockfd < 0)
{
error (0, errno, "socket");
continue;
}
if (connect (sockfd, ai->ai_addr, ai->ai_addrlen) < 0)
{
int save_errno = errno;
close (sockfd);
sockfd = -1;
error (0, save_errno, "connect");
continue;
}
break;
}
if (sockfd < 0)
error (EXIT_FAILURE, errno, "socket");
freeaddrinfo (ai);
}
if (!greeting ())
return 1;
#ifdef HAVE_LIBGNUTLS
if (sockfd && !args_info.no_starttls_flag &&
(args_info.starttls_flag || has_starttls ()))
{
res = gnutls_global_init ();
if (res < 0)
error (EXIT_FAILURE, 0, _("GnuTLS global initialization failed: %s"),
gnutls_strerror (res));
res = gnutls_init (&session, GNUTLS_CLIENT);
if (res < 0)
error (EXIT_FAILURE, 0, _("GnuTLS initialization failed: %s"),
gnutls_strerror (res));
res = gnutls_set_default_priority (session);
if (res < 0)
error (EXIT_FAILURE, 0, _("setting GnuTLS defaults failed: %s"),
gnutls_strerror (res));
res =
gnutls_server_name_set (session, GNUTLS_NAME_DNS, connect_hostname,
strlen (connect_hostname));
if (res < 0)
error (EXIT_FAILURE, 0, _("setting GnuTLS server name failed: %s"),
gnutls_strerror (res));
res = gnutls_anon_allocate_client_credentials (&anoncred);
if (res < 0)
error (EXIT_FAILURE, 0,
_("allocating anonymous GnuTLS credential: %s"),
gnutls_strerror (res));
res = gnutls_credentials_set (session, GNUTLS_CRD_ANON, anoncred);
if (res < 0)
error (EXIT_FAILURE, 0, _("setting anonymous GnuTLS credential: %s"),
gnutls_strerror (res));
res = gnutls_certificate_allocate_credentials (&x509cred);
if (res < 0)
error (EXIT_FAILURE, 0, _("allocating X.509 GnuTLS credential: %s"),
gnutls_strerror (res));
if (args_info.x509_cert_file_arg && args_info.x509_key_file_arg)
res = gnutls_certificate_set_x509_key_file
(x509cred, args_info.x509_cert_file_arg,
args_info.x509_key_file_arg, GNUTLS_X509_FMT_PEM);
if (res != GNUTLS_E_SUCCESS)
error (EXIT_FAILURE, 0, _("loading X.509 GnuTLS credential: %s"),
gnutls_strerror (res));
if (args_info.x509_ca_file_arg && *args_info.x509_ca_file_arg)
{
res = gnutls_certificate_set_x509_trust_file
(x509cred, args_info.x509_ca_file_arg, GNUTLS_X509_FMT_PEM);
if (res < 0)
error (EXIT_FAILURE, 0, _("no X.509 CAs found: %s"),
gnutls_strerror (res));
if (res == 0)
error (EXIT_FAILURE, 0, _("no X.509 CAs found"));
}
else if (!args_info.x509_ca_file_arg)
{
res = gnutls_certificate_set_x509_system_trust (x509cred);
if (res < 0)
error (EXIT_FAILURE, 0, _("setting GnuTLS system trust: %s"),
gnutls_strerror (res));
}
res = gnutls_credentials_set (session, GNUTLS_CRD_CERTIFICATE,
x509cred);
if (res < 0)
error (EXIT_FAILURE, 0, _("setting X.509 GnuTLS credential: %s"),
gnutls_strerror (res));
if (args_info.x509_ca_file_arg == NULL || *args_info.x509_ca_file_arg)
gnutls_session_set_verify_cert (session, connect_hostname, 0);
if (args_info.priority_arg)
{
const char *err_pos;
res = gnutls_priority_set_direct (session, args_info.priority_arg,
&err_pos);
if (res < 0)
error (EXIT_FAILURE, 0,
_("setting GnuTLS cipher priority (%s): %s\n"),
gnutls_strerror (res), err_pos);
}
gnutls_transport_set_ptr (session, (gnutls_transport_ptr_t)
(unsigned long) sockfd);
if (!starttls ())
return 1;
do
{
res = gnutls_handshake (session);
}
while (res < 0 && gnutls_error_is_fatal (res) == 0);
if (!args_info.quiet_given)
{
int type;
unsigned status;
gnutls_datum_t out;
type = gnutls_certificate_type_get (session);
status = gnutls_session_get_verify_cert_status (session);
gnutls_certificate_verification_status_print (status, type, &out,
0);
fprintf (stderr, _("TLS X.509 Verification: %s\n"), out.data);
gnutls_free (out.data);
}
if (res < 0)
error (EXIT_FAILURE, 0, _("GnuTLS handshake failed: %s"),
gnutls_strerror (res));
if (args_info.verbose_given)
{
char *desc = gnutls_session_get_desc (session);
const gnutls_datum_t *cert_list;
unsigned int cert_list_size = 0, i;
gnutls_x509_crt_t cert;
gnutls_datum_t out;
fprintf (stderr, _("TLS session info: %s\n"), desc);
gnutls_free (desc);
fflush (stderr);
cert_list = gnutls_certificate_get_peers (session, &cert_list_size);
for (i = 0; i < cert_list_size; i++)
{
res = gnutls_x509_crt_init (&cert);
if (res < 0)
continue;
res = gnutls_x509_crt_import (cert, &cert_list[i],
GNUTLS_X509_FMT_DER);
if (res < 0)
continue;
res = gnutls_x509_crt_print (cert, GNUTLS_CRT_PRINT_ONELINE,
&out);
if (res == 0)
{
fprintf (stderr, _("TLS X.509 Certificate %u: %s\n"), i,
out.data);
gnutls_free (out.data);
}
gnutls_x509_crt_deinit (cert);
}
}
if (args_info.x509_ca_file_arg && *args_info.x509_ca_file_arg)
{
unsigned int status;
res = gnutls_certificate_verify_peers2 (session, &status);
if (res < 0)
error (EXIT_FAILURE, 0, _("verifying peer certificate: %s"),
gnutls_strerror (res));
if (status & GNUTLS_CERT_INVALID)
error (EXIT_FAILURE, 0, _("server certificate is not trusted"));
if (status & GNUTLS_CERT_SIGNER_NOT_FOUND)
error (EXIT_FAILURE, 0,
_("server certificate hasn't got a known issuer"));
if (status & GNUTLS_CERT_REVOKED)
error (EXIT_FAILURE, 0, _("server certificate has been revoked"));
if (status != 0)
error (EXIT_FAILURE, 0,
_("could not verify server certificate (rc=%u)"), status);
}
#if HAVE_GNUTLS_SESSION_CHANNEL_BINDING
if (!args_info.no_cb_flag)
{
gnutls_datum_t cb;
res = gnutls_session_channel_binding (session,
GNUTLS_CB_TLS_UNIQUE, &cb);
if (res != GNUTLS_E_SUCCESS)
error (EXIT_FAILURE, 0, _("getting channel binding failed: %s"),
gnutls_strerror (res));
res = gsasl_base64_to ((char *) cb.data, cb.size,
&b64cbtlsunique, NULL);
if (res != GSASL_OK)
error (EXIT_FAILURE, 0, "%s", gsasl_strerror (res));
}
#endif
using_tls = true;
}
#endif
if (args_info.client_flag || args_info.client_given
|| args_info.server_given)
{
char *out;
char *b64output;
size_t output_len;
size_t b64output_len;
const char *mech;
Gsasl_session *xctx = NULL;
if (!select_mechanism (&in))
return 1;
mech = gsasl_client_suggest_mechanism (ctx, in);
if (mech == NULL)
{
fprintf (stderr, _("Cannot find mechanism...\n"));
goto done;
}
if (args_info.mechanism_arg)
mech = args_info.mechanism_arg;
if (!authenticate (mech))
return 1;
/* Authenticate using mechanism */
if (args_info.server_flag)
res = gsasl_server_start (ctx, mech, &xctx);
else
res = gsasl_client_start (ctx, mech, &xctx);
if (res != GSASL_OK)
error (EXIT_FAILURE, 0, _("mechanism unavailable: %s"),
gsasl_strerror (res));
in = NULL;
out = NULL;
if (!args_info.server_flag && args_info.no_client_first_flag)
{
res = GSASL_NEEDS_MORE;
goto no_client_first;
}
do
{
int res2;
res = gsasl_step64 (xctx, in, &out);
if (res != GSASL_NEEDS_MORE && res != GSASL_OK)
break;
if (!step_send (out))
return 1;
no_client_first:
if (!args_info.quiet_given &&
!args_info.imap_flag && !args_info.smtp_flag)
{
if (args_info.server_flag)
fprintf (stderr, _("Enter base64 authentication data "
"from client (press RET if none):\n"));
else
fprintf (stderr, _("Enter base64 authentication data "
"from server (press RET if none):\n"));
}
/* Return 1 on token, 2 on protocol success, 3 on protocol fail, 0 on
errors. */
res2 = step_recv (&in);
if (!res2)
return 1;
if (res2 == 3)
error (EXIT_FAILURE, 0, _("server error"));
if (res2 == 2)
break;
}
while (args_info.imap_flag || args_info.smtp_flag
|| res == GSASL_NEEDS_MORE);
if (res != GSASL_OK)
error (EXIT_FAILURE, 0, _("mechanism error: %s"),
gsasl_strerror (res));
if (!args_info.quiet_given)
{
if (args_info.server_flag)
fprintf (stderr, _("Server authentication "
"finished (client trusted)...\n"));
else
fprintf (stderr, _("Client authentication "
"finished (server trusted)...\n"));
fflush (stderr);
}
/* Transfer application payload */
if (args_info.application_data_flag)
{
struct pollfd pfd[2];
char *sockbuf = NULL;
/* we read chunks of 1000 bytes at a time */
size_t sockpos = 0, sockalloc = 0, sockalloc1 = 1000;
/* Setup pollfd structs... */
pfd[0].fd = STDIN_FILENO;
pfd[0].events = POLLIN;
if (sockfd)
{
pfd[1].fd = sockfd;
pfd[1].events = POLLIN;
}
if (!args_info.quiet_given)
{
fprintf (stderr,
_("Enter application data (EOF to finish):\n"));
fflush (stderr);
}
while (1)
{
int rc;
pfd[0].revents = 0;
pfd[1].revents = 0;
rc = poll (pfd, sockfd ? 2 : 1, -1);
if (rc < 0 && errno == EINTR)
continue;
/* Always check for errors */
if (rc < 0)
error (EXIT_FAILURE, errno, "poll");
/* We got data to read from stdin.. */
if ((pfd[0].revents & (POLLIN | POLLERR)) == POLLIN)
{
char *line = NULL;
size_t n;
ssize_t len;
len = getline (&line, &n, stdin);
if (len <= 0)
break;
if (args_info.imap_flag || args_info.smtp_flag)
{
if (len < 2 || strcmp (&line[len - 2], "\r\n") != 0)
{
line = xrealloc (line, len + 2);
line[len - 1] = '\r';
line[len] = '\n';
line[len + 1] = '\0';
len++;
}
}
else
{
len--;
line[len] = '\0';
}
res = gsasl_encode (xctx, line, len, &out, &output_len);
if (res != GSASL_OK)
break;
if (sockfd)
{
len = _send (out, output_len);
if (len != (ssize_t) output_len)
error (EXIT_FAILURE, errno, "write");
}
else if (!(strlen (line) == output_len &&
memcmp (line, out, output_len) == 0))
{
res = gsasl_base64_to (out, output_len,
&b64output, &b64output_len);
if (res != GSASL_OK)
break;
if (!args_info.quiet_given)
fprintf (stderr, _("Base64 encoded application "
"data to send:\n"));
fprintf (stdout, "%s\n", b64output);
free (b64output);
}
free (line);
free (out);
}
/* If there was an error, quit. */
else if (pfd[0].revents & (POLLERR | POLLHUP))
{
error (0, 0, "poll stdin");
break;
}
/* We got data to read from the socket.. */
if (sockfd && (pfd[1].revents & (POLLIN | POLLERR)) == POLLIN)
{
ssize_t len;
if (sockalloc == sockpos)
sockbuf = x2realloc (sockbuf, &sockalloc1);
sockalloc = sockalloc1;
len = _recv (&sockbuf[sockpos], sockalloc - sockpos);
if (len <= 0)
break;
sockpos += len;
res = gsasl_decode (xctx, sockbuf, sockpos,
&out, &output_len);
if (res == GSASL_NEEDS_MORE)
{
#define MAX_INPUT_SIZE 0x100000
if (sockpos > MAX_INPUT_SIZE)
error (EXIT_FAILURE, 0,
_("SASL record too large: %zu\n"), sockpos);
continue;
}
if (res != GSASL_OK)
break;
free (sockbuf);
sockbuf = NULL;
sockpos = 0;
sockalloc = 0;
sockalloc1 = 1000;
printf ("%.*s", (int) output_len, out);
free (out);
}
/* If there was an error, quit. */
else if (pfd[1].revents & (POLLERR | POLLHUP))
{
error (0, 0, "poll socket");
break;
}
}
if (res != GSASL_OK)
error (EXIT_FAILURE, 0, _("encoding error: %s"),
gsasl_strerror (res));
}
if (!args_info.quiet_given)
fprintf (stderr, _("Session finished...\n"));
if (!logout ())
return 1;
gsasl_finish (xctx);
}
if (sockfd)
{
#ifdef HAVE_LIBGNUTLS
if (using_tls)
{
res = gnutls_bye (session, GNUTLS_SHUT_RDWR);
if (res < 0)
error (EXIT_FAILURE, 0,
_("terminating GnuTLS session failed: %s"),
gnutls_strerror (res));
}
#endif
shutdown (sockfd, SHUT_RDWR);
close (sockfd);
}
done:
gsasl_done (ctx);
#ifdef HAVE_LIBGNUTLS
if (using_tls)
{
gnutls_deinit (session);
gnutls_anon_free_client_credentials (anoncred);
gnutls_certificate_free_credentials (x509cred);
gnutls_global_deinit ();
}
#endif
return EXIT_SUCCESS;
}
gsasl-1.10.0/src/Makefile.in 0000644 0000000 0000000 00000220733 13773647266 012461 0000000 0000000 # Makefile.in generated by automake 1.16.3 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2020 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
# Copyright (C) 2002-2021 Simon Josefsson
#
# This file is part of GNU SASL.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program 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
# along with this program. If not, see .
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
false; \
elif test -n '$(MAKE_HOST)'; then \
true; \
elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
true; \
else \
false; \
fi; \
}
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
bin_PROGRAMS = gsasl$(EXEEXT)
subdir = src
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
$(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/alloca.m4 \
$(top_srcdir)/m4/arpa_inet_h.m4 $(top_srcdir)/m4/autobuild.m4 \
$(top_srcdir)/m4/btowc.m4 $(top_srcdir)/m4/close.m4 \
$(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/ctype.m4 \
$(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup2.m4 \
$(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \
$(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \
$(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/extensions.m4 \
$(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
$(top_srcdir)/m4/fcntl.m4 $(top_srcdir)/m4/fcntl_h.m4 \
$(top_srcdir)/m4/fdopen.m4 $(top_srcdir)/m4/flexmember.m4 \
$(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/fopen.m4 \
$(top_srcdir)/m4/fpieee.m4 $(top_srcdir)/m4/fseek.m4 \
$(top_srcdir)/m4/fseeko.m4 $(top_srcdir)/m4/fstat.m4 \
$(top_srcdir)/m4/getaddrinfo.m4 $(top_srcdir)/m4/getcwd.m4 \
$(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \
$(top_srcdir)/m4/getline.m4 $(top_srcdir)/m4/getopt.m4 \
$(top_srcdir)/m4/getpagesize.m4 $(top_srcdir)/m4/getpass.m4 \
$(top_srcdir)/m4/getprogname.m4 $(top_srcdir)/m4/gettext.m4 \
$(top_srcdir)/m4/gnulib-common.m4 \
$(top_srcdir)/m4/gnulib-comp.m4 $(top_srcdir)/m4/gtk-doc.m4 \
$(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/hostent.m4 \
$(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/iconv_h.m4 \
$(top_srcdir)/m4/iconv_open.m4 \
$(top_srcdir)/m4/include_next.m4 $(top_srcdir)/m4/inet_ntop.m4 \
$(top_srcdir)/m4/inet_pton.m4 $(top_srcdir)/m4/inline.m4 \
$(top_srcdir)/m4/intl-thread-locale.m4 \
$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \
$(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \
$(top_srcdir)/m4/isblank.m4 $(top_srcdir)/m4/langinfo_h.m4 \
$(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/lcmessage.m4 \
$(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \
$(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \
$(top_srcdir)/m4/libunistring-base.m4 \
$(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \
$(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \
$(top_srcdir)/m4/locale-tr.m4 $(top_srcdir)/m4/locale-zh.m4 \
$(top_srcdir)/m4/locale_h.m4 $(top_srcdir)/m4/localename.m4 \
$(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/lseek.m4 \
$(top_srcdir)/m4/lstat.m4 $(top_srcdir)/m4/ltoptions.m4 \
$(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \
$(top_srcdir)/m4/lt~obsolete.m4 $(top_srcdir)/m4/malloc.m4 \
$(top_srcdir)/m4/malloca.m4 $(top_srcdir)/m4/manywarnings.m4 \
$(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \
$(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbtowc.m4 \
$(top_srcdir)/m4/memchr.m4 $(top_srcdir)/m4/minmax.m4 \
$(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \
$(top_srcdir)/m4/msvc-inval.m4 \
$(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \
$(top_srcdir)/m4/musl.m4 $(top_srcdir)/m4/nanosleep.m4 \
$(top_srcdir)/m4/netdb_h.m4 $(top_srcdir)/m4/netinet_in_h.m4 \
$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/nocrash.m4 \
$(top_srcdir)/m4/off_t.m4 $(top_srcdir)/m4/open-cloexec.m4 \
$(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \
$(top_srcdir)/m4/pathmax.m4 $(top_srcdir)/m4/pkg.m4 \
$(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/poll.m4 \
$(top_srcdir)/m4/poll_h.m4 $(top_srcdir)/m4/printf.m4 \
$(top_srcdir)/m4/progtest.m4 \
$(top_srcdir)/m4/pthread-thread.m4 \
$(top_srcdir)/m4/pthread_h.m4 \
$(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \
$(top_srcdir)/m4/pthread_sigmask.m4 $(top_srcdir)/m4/putenv.m4 \
$(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \
$(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/readline.m4 \
$(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/select.m4 \
$(top_srcdir)/m4/semaphore.m4 $(top_srcdir)/m4/servent.m4 \
$(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/setlocale.m4 \
$(top_srcdir)/m4/setlocale_null.m4 \
$(top_srcdir)/m4/sigaction.m4 $(top_srcdir)/m4/signal_h.m4 \
$(top_srcdir)/m4/signalblocking.m4 \
$(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/sleep.m4 \
$(top_srcdir)/m4/snprintf.m4 $(top_srcdir)/m4/socketlib.m4 \
$(top_srcdir)/m4/sockets.m4 $(top_srcdir)/m4/socklen.m4 \
$(top_srcdir)/m4/sockpfaf.m4 $(top_srcdir)/m4/ssize_t.m4 \
$(top_srcdir)/m4/stat-time.m4 $(top_srcdir)/m4/stat.m4 \
$(top_srcdir)/m4/stdalign.m4 $(top_srcdir)/m4/stdarg.m4 \
$(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
$(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/stdint_h.m4 \
$(top_srcdir)/m4/stdio_h.m4 $(top_srcdir)/m4/stdlib_h.m4 \
$(top_srcdir)/m4/strdup.m4 $(top_srcdir)/m4/strerror.m4 \
$(top_srcdir)/m4/string_h.m4 $(top_srcdir)/m4/strtok_r.m4 \
$(top_srcdir)/m4/symlink.m4 $(top_srcdir)/m4/sys_select_h.m4 \
$(top_srcdir)/m4/sys_socket_h.m4 \
$(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \
$(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_uio_h.m4 \
$(top_srcdir)/m4/thread.m4 $(top_srcdir)/m4/threadlib.m4 \
$(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/ungetc.m4 \
$(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/usleep.m4 \
$(top_srcdir)/m4/valgrind-tests.m4 \
$(top_srcdir)/m4/vasnprintf.m4 $(top_srcdir)/m4/vasprintf.m4 \
$(top_srcdir)/m4/version-etc.m4 $(top_srcdir)/m4/visibility.m4 \
$(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/warnings.m4 \
$(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \
$(top_srcdir)/m4/wcrtomb.m4 $(top_srcdir)/m4/wctob.m4 \
$(top_srcdir)/m4/wctomb.m4 $(top_srcdir)/m4/wctype_h.m4 \
$(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/m4/xalloc.m4 \
$(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/yield.m4 \
$(top_srcdir)/m4/zzgnulib.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__installdirs = "$(DESTDIR)$(bindir)"
PROGRAMS = $(bin_PROGRAMS)
LTLIBRARIES = $(noinst_LTLIBRARIES)
libgsasl_cmd_la_DEPENDENCIES = ../gl/libgl.la
am__objects_1 = libgsasl_cmd_la-gsasl_cmd.lo
am_libgsasl_cmd_la_OBJECTS = $(am__objects_1)
libgsasl_cmd_la_OBJECTS = $(am_libgsasl_cmd_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
libgsasl_cmd_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(libgsasl_cmd_la_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
-o $@
am_gsasl_OBJECTS = gsasl.$(OBJEXT) imap.$(OBJEXT) smtp.$(OBJEXT) \
callbacks.$(OBJEXT)
gsasl_OBJECTS = $(am_gsasl_OBJECTS)
am__DEPENDENCIES_1 =
gsasl_DEPENDENCIES = ../lib/src/libgsasl.la ../gl/libgl.la \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) libgsasl_cmd.la
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
depcomp = $(SHELL) $(top_srcdir)/lib/build-aux/depcomp
am__maybe_remake_depfiles = depfiles
am__depfiles_remade = ./$(DEPDIR)/callbacks.Po ./$(DEPDIR)/gsasl.Po \
./$(DEPDIR)/imap.Po ./$(DEPDIR)/libgsasl_cmd_la-gsasl_cmd.Plo \
./$(DEPDIR)/smtp.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
am__v_CC_1 =
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(libgsasl_cmd_la_SOURCES) $(gsasl_SOURCES)
DIST_SOURCES = $(libgsasl_cmd_la_SOURCES) $(gsasl_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
am__DIST_COMMON = $(srcdir)/Makefile.in \
$(top_srcdir)/lib/build-aux/depcomp
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
ALLOCA = @ALLOCA@
ALLOCA_H = @ALLOCA_H@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
AR = @AR@
ARFLAGS = @ARFLAGS@
AS = @AS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
CONFIG_INCLUDE = @CONFIG_INCLUDE@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DIA = @DIA@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
ENOLINK_VALUE = @ENOLINK_VALUE@
EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
EPSTOPDF = @EPSTOPDF@
ERRNO_H = @ERRNO_H@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
FLOAT_H = @FLOAT_H@
GETADDRINFO_LIB = @GETADDRINFO_LIB@
GETOPT_CDEFS_H = @GETOPT_CDEFS_H@
GETOPT_H = @GETOPT_H@
GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
GMSGFMT = @GMSGFMT@
GMSGFMT_015 = @GMSGFMT_015@
GNULIB_ACCEPT = @GNULIB_ACCEPT@
GNULIB_ACCEPT4 = @GNULIB_ACCEPT4@
GNULIB_ACCESS = @GNULIB_ACCESS@
GNULIB_ALIGNED_ALLOC = @GNULIB_ALIGNED_ALLOC@
GNULIB_ATOLL = @GNULIB_ATOLL@
GNULIB_BIND = @GNULIB_BIND@
GNULIB_BTOWC = @GNULIB_BTOWC@
GNULIB_CALLOC_POSIX = @GNULIB_CALLOC_POSIX@
GNULIB_CANONICALIZE_FILE_NAME = @GNULIB_CANONICALIZE_FILE_NAME@
GNULIB_CHDIR = @GNULIB_CHDIR@
GNULIB_CHOWN = @GNULIB_CHOWN@
GNULIB_CLOSE = @GNULIB_CLOSE@
GNULIB_CONNECT = @GNULIB_CONNECT@
GNULIB_COPY_FILE_RANGE = @GNULIB_COPY_FILE_RANGE@
GNULIB_CREAT = @GNULIB_CREAT@
GNULIB_CTIME = @GNULIB_CTIME@
GNULIB_DPRINTF = @GNULIB_DPRINTF@
GNULIB_DUP = @GNULIB_DUP@
GNULIB_DUP2 = @GNULIB_DUP2@
GNULIB_DUP3 = @GNULIB_DUP3@
GNULIB_DUPLOCALE = @GNULIB_DUPLOCALE@
GNULIB_ENVIRON = @GNULIB_ENVIRON@
GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@
GNULIB_EXECL = @GNULIB_EXECL@
GNULIB_EXECLE = @GNULIB_EXECLE@
GNULIB_EXECLP = @GNULIB_EXECLP@
GNULIB_EXECV = @GNULIB_EXECV@
GNULIB_EXECVE = @GNULIB_EXECVE@
GNULIB_EXECVP = @GNULIB_EXECVP@
GNULIB_EXECVPE = @GNULIB_EXECVPE@
GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@
GNULIB_FACCESSAT = @GNULIB_FACCESSAT@
GNULIB_FCHDIR = @GNULIB_FCHDIR@
GNULIB_FCHMODAT = @GNULIB_FCHMODAT@
GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@
GNULIB_FCLOSE = @GNULIB_FCLOSE@
GNULIB_FCNTL = @GNULIB_FCNTL@
GNULIB_FDATASYNC = @GNULIB_FDATASYNC@
GNULIB_FDOPEN = @GNULIB_FDOPEN@
GNULIB_FFLUSH = @GNULIB_FFLUSH@
GNULIB_FFSL = @GNULIB_FFSL@
GNULIB_FFSLL = @GNULIB_FFSLL@
GNULIB_FGETC = @GNULIB_FGETC@
GNULIB_FGETS = @GNULIB_FGETS@
GNULIB_FOPEN = @GNULIB_FOPEN@
GNULIB_FPRINTF = @GNULIB_FPRINTF@
GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
GNULIB_FPURGE = @GNULIB_FPURGE@
GNULIB_FPUTC = @GNULIB_FPUTC@
GNULIB_FPUTS = @GNULIB_FPUTS@
GNULIB_FREAD = @GNULIB_FREAD@
GNULIB_FREE_POSIX = @GNULIB_FREE_POSIX@
GNULIB_FREOPEN = @GNULIB_FREOPEN@
GNULIB_FSCANF = @GNULIB_FSCANF@
GNULIB_FSEEK = @GNULIB_FSEEK@
GNULIB_FSEEKO = @GNULIB_FSEEKO@
GNULIB_FSTAT = @GNULIB_FSTAT@
GNULIB_FSTATAT = @GNULIB_FSTATAT@
GNULIB_FSYNC = @GNULIB_FSYNC@
GNULIB_FTELL = @GNULIB_FTELL@
GNULIB_FTELLO = @GNULIB_FTELLO@
GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@
GNULIB_FUTIMENS = @GNULIB_FUTIMENS@
GNULIB_FWRITE = @GNULIB_FWRITE@
GNULIB_GETADDRINFO = @GNULIB_GETADDRINFO@
GNULIB_GETC = @GNULIB_GETC@
GNULIB_GETCHAR = @GNULIB_GETCHAR@
GNULIB_GETCWD = @GNULIB_GETCWD@
GNULIB_GETDELIM = @GNULIB_GETDELIM@
GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@
GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@
GNULIB_GETENTROPY = @GNULIB_GETENTROPY@
GNULIB_GETGROUPS = @GNULIB_GETGROUPS@
GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@
GNULIB_GETLINE = @GNULIB_GETLINE@
GNULIB_GETLOADAVG = @GNULIB_GETLOADAVG@
GNULIB_GETLOGIN = @GNULIB_GETLOGIN@
GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@
GNULIB_GETOPT_POSIX = @GNULIB_GETOPT_POSIX@
GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@
GNULIB_GETPASS = @GNULIB_GETPASS@
GNULIB_GETPEERNAME = @GNULIB_GETPEERNAME@
GNULIB_GETSOCKNAME = @GNULIB_GETSOCKNAME@
GNULIB_GETSOCKOPT = @GNULIB_GETSOCKOPT@
GNULIB_GETSUBOPT = @GNULIB_GETSUBOPT@
GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@
GNULIB_GETUMASK = @GNULIB_GETUMASK@
GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@
GNULIB_GL_UNISTD_H_GETOPT = @GNULIB_GL_UNISTD_H_GETOPT@
GNULIB_GRANTPT = @GNULIB_GRANTPT@
GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@
GNULIB_ICONV = @GNULIB_ICONV@
GNULIB_IMAXABS = @GNULIB_IMAXABS@
GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
GNULIB_INET_NTOP = @GNULIB_INET_NTOP@
GNULIB_INET_PTON = @GNULIB_INET_PTON@
GNULIB_ISATTY = @GNULIB_ISATTY@
GNULIB_ISBLANK = @GNULIB_ISBLANK@
GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
GNULIB_ISWDIGIT = @GNULIB_ISWDIGIT@
GNULIB_ISWXDIGIT = @GNULIB_ISWXDIGIT@
GNULIB_LCHMOD = @GNULIB_LCHMOD@
GNULIB_LCHOWN = @GNULIB_LCHOWN@
GNULIB_LINK = @GNULIB_LINK@
GNULIB_LINKAT = @GNULIB_LINKAT@
GNULIB_LISTEN = @GNULIB_LISTEN@
GNULIB_LOCALECONV = @GNULIB_LOCALECONV@
GNULIB_LOCALENAME = @GNULIB_LOCALENAME@
GNULIB_LOCALTIME = @GNULIB_LOCALTIME@
GNULIB_LSEEK = @GNULIB_LSEEK@
GNULIB_LSTAT = @GNULIB_LSTAT@
GNULIB_MALLOC_POSIX = @GNULIB_MALLOC_POSIX@
GNULIB_MBRLEN = @GNULIB_MBRLEN@
GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
GNULIB_MBSCHR = @GNULIB_MBSCHR@
GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
GNULIB_MBSINIT = @GNULIB_MBSINIT@
GNULIB_MBSLEN = @GNULIB_MBSLEN@
GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
GNULIB_MBSSEP = @GNULIB_MBSSEP@
GNULIB_MBSSPN = @GNULIB_MBSSPN@
GNULIB_MBSSTR = @GNULIB_MBSSTR@
GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
GNULIB_MBTOWC = @GNULIB_MBTOWC@
GNULIB_MDA_ACCESS = @GNULIB_MDA_ACCESS@
GNULIB_MDA_CHDIR = @GNULIB_MDA_CHDIR@
GNULIB_MDA_CHMOD = @GNULIB_MDA_CHMOD@
GNULIB_MDA_CLOSE = @GNULIB_MDA_CLOSE@
GNULIB_MDA_CREAT = @GNULIB_MDA_CREAT@
GNULIB_MDA_DUP = @GNULIB_MDA_DUP@
GNULIB_MDA_DUP2 = @GNULIB_MDA_DUP2@
GNULIB_MDA_ECVT = @GNULIB_MDA_ECVT@
GNULIB_MDA_EXECL = @GNULIB_MDA_EXECL@
GNULIB_MDA_EXECLE = @GNULIB_MDA_EXECLE@
GNULIB_MDA_EXECLP = @GNULIB_MDA_EXECLP@
GNULIB_MDA_EXECV = @GNULIB_MDA_EXECV@
GNULIB_MDA_EXECVE = @GNULIB_MDA_EXECVE@
GNULIB_MDA_EXECVP = @GNULIB_MDA_EXECVP@
GNULIB_MDA_EXECVPE = @GNULIB_MDA_EXECVPE@
GNULIB_MDA_FCLOSEALL = @GNULIB_MDA_FCLOSEALL@
GNULIB_MDA_FCVT = @GNULIB_MDA_FCVT@
GNULIB_MDA_FDOPEN = @GNULIB_MDA_FDOPEN@
GNULIB_MDA_FILENO = @GNULIB_MDA_FILENO@
GNULIB_MDA_GCVT = @GNULIB_MDA_GCVT@
GNULIB_MDA_GETCWD = @GNULIB_MDA_GETCWD@
GNULIB_MDA_GETPID = @GNULIB_MDA_GETPID@
GNULIB_MDA_GETW = @GNULIB_MDA_GETW@
GNULIB_MDA_ISATTY = @GNULIB_MDA_ISATTY@
GNULIB_MDA_LSEEK = @GNULIB_MDA_LSEEK@
GNULIB_MDA_MEMCCPY = @GNULIB_MDA_MEMCCPY@
GNULIB_MDA_MKDIR = @GNULIB_MDA_MKDIR@
GNULIB_MDA_MKTEMP = @GNULIB_MDA_MKTEMP@
GNULIB_MDA_OPEN = @GNULIB_MDA_OPEN@
GNULIB_MDA_PUTENV = @GNULIB_MDA_PUTENV@
GNULIB_MDA_PUTW = @GNULIB_MDA_PUTW@
GNULIB_MDA_READ = @GNULIB_MDA_READ@
GNULIB_MDA_RMDIR = @GNULIB_MDA_RMDIR@
GNULIB_MDA_STRDUP = @GNULIB_MDA_STRDUP@
GNULIB_MDA_SWAB = @GNULIB_MDA_SWAB@
GNULIB_MDA_TEMPNAM = @GNULIB_MDA_TEMPNAM@
GNULIB_MDA_TZSET = @GNULIB_MDA_TZSET@
GNULIB_MDA_UMASK = @GNULIB_MDA_UMASK@
GNULIB_MDA_UNLINK = @GNULIB_MDA_UNLINK@
GNULIB_MDA_WCSDUP = @GNULIB_MDA_WCSDUP@
GNULIB_MDA_WRITE = @GNULIB_MDA_WRITE@
GNULIB_MEMCHR = @GNULIB_MEMCHR@
GNULIB_MEMMEM = @GNULIB_MEMMEM@
GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
GNULIB_MKDIR = @GNULIB_MKDIR@
GNULIB_MKDIRAT = @GNULIB_MKDIRAT@
GNULIB_MKDTEMP = @GNULIB_MKDTEMP@
GNULIB_MKFIFO = @GNULIB_MKFIFO@
GNULIB_MKFIFOAT = @GNULIB_MKFIFOAT@
GNULIB_MKNOD = @GNULIB_MKNOD@
GNULIB_MKNODAT = @GNULIB_MKNODAT@
GNULIB_MKOSTEMP = @GNULIB_MKOSTEMP@
GNULIB_MKOSTEMPS = @GNULIB_MKOSTEMPS@
GNULIB_MKSTEMP = @GNULIB_MKSTEMP@
GNULIB_MKSTEMPS = @GNULIB_MKSTEMPS@
GNULIB_MKTIME = @GNULIB_MKTIME@
GNULIB_NANOSLEEP = @GNULIB_NANOSLEEP@
GNULIB_NL_LANGINFO = @GNULIB_NL_LANGINFO@
GNULIB_NONBLOCKING = @GNULIB_NONBLOCKING@
GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
GNULIB_OPEN = @GNULIB_OPEN@
GNULIB_OPENAT = @GNULIB_OPENAT@
GNULIB_OVERRIDES_STRUCT_STAT = @GNULIB_OVERRIDES_STRUCT_STAT@
GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@
GNULIB_PCLOSE = @GNULIB_PCLOSE@
GNULIB_PERROR = @GNULIB_PERROR@
GNULIB_PIPE = @GNULIB_PIPE@
GNULIB_PIPE2 = @GNULIB_PIPE2@
GNULIB_POLL = @GNULIB_POLL@
GNULIB_POPEN = @GNULIB_POPEN@
GNULIB_POSIX_MEMALIGN = @GNULIB_POSIX_MEMALIGN@
GNULIB_POSIX_OPENPT = @GNULIB_POSIX_OPENPT@
GNULIB_PREAD = @GNULIB_PREAD@
GNULIB_PRINTF = @GNULIB_PRINTF@
GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
GNULIB_PSELECT = @GNULIB_PSELECT@
GNULIB_PTHREAD_COND = @GNULIB_PTHREAD_COND@
GNULIB_PTHREAD_MUTEX = @GNULIB_PTHREAD_MUTEX@
GNULIB_PTHREAD_MUTEX_TIMEDLOCK = @GNULIB_PTHREAD_MUTEX_TIMEDLOCK@
GNULIB_PTHREAD_ONCE = @GNULIB_PTHREAD_ONCE@
GNULIB_PTHREAD_RWLOCK = @GNULIB_PTHREAD_RWLOCK@
GNULIB_PTHREAD_SIGMASK = @GNULIB_PTHREAD_SIGMASK@
GNULIB_PTHREAD_SPIN = @GNULIB_PTHREAD_SPIN@
GNULIB_PTHREAD_THREAD = @GNULIB_PTHREAD_THREAD@
GNULIB_PTHREAD_TSS = @GNULIB_PTHREAD_TSS@
GNULIB_PTSNAME = @GNULIB_PTSNAME@
GNULIB_PTSNAME_R = @GNULIB_PTSNAME_R@
GNULIB_PUTC = @GNULIB_PUTC@
GNULIB_PUTCHAR = @GNULIB_PUTCHAR@
GNULIB_PUTENV = @GNULIB_PUTENV@
GNULIB_PUTS = @GNULIB_PUTS@
GNULIB_PWRITE = @GNULIB_PWRITE@
GNULIB_QSORT_R = @GNULIB_QSORT_R@
GNULIB_RAISE = @GNULIB_RAISE@
GNULIB_RANDOM = @GNULIB_RANDOM@
GNULIB_RANDOM_R = @GNULIB_RANDOM_R@
GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
GNULIB_READ = @GNULIB_READ@
GNULIB_READLINK = @GNULIB_READLINK@
GNULIB_READLINKAT = @GNULIB_READLINKAT@
GNULIB_REALLOCARRAY = @GNULIB_REALLOCARRAY@
GNULIB_REALLOC_POSIX = @GNULIB_REALLOC_POSIX@
GNULIB_REALPATH = @GNULIB_REALPATH@
GNULIB_RECV = @GNULIB_RECV@
GNULIB_RECVFROM = @GNULIB_RECVFROM@
GNULIB_REMOVE = @GNULIB_REMOVE@
GNULIB_RENAME = @GNULIB_RENAME@
GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
GNULIB_RMDIR = @GNULIB_RMDIR@
GNULIB_RPMATCH = @GNULIB_RPMATCH@
GNULIB_SCANF = @GNULIB_SCANF@
GNULIB_SCHED_YIELD = @GNULIB_SCHED_YIELD@
GNULIB_SECURE_GETENV = @GNULIB_SECURE_GETENV@
GNULIB_SELECT = @GNULIB_SELECT@
GNULIB_SEND = @GNULIB_SEND@
GNULIB_SENDTO = @GNULIB_SENDTO@
GNULIB_SETENV = @GNULIB_SETENV@
GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@
GNULIB_SETLOCALE = @GNULIB_SETLOCALE@
GNULIB_SETLOCALE_NULL = @GNULIB_SETLOCALE_NULL@
GNULIB_SETSOCKOPT = @GNULIB_SETSOCKOPT@
GNULIB_SHUTDOWN = @GNULIB_SHUTDOWN@
GNULIB_SIGABBREV_NP = @GNULIB_SIGABBREV_NP@
GNULIB_SIGACTION = @GNULIB_SIGACTION@
GNULIB_SIGDESCR_NP = @GNULIB_SIGDESCR_NP@
GNULIB_SIGNAL_H_SIGPIPE = @GNULIB_SIGNAL_H_SIGPIPE@
GNULIB_SIGPROCMASK = @GNULIB_SIGPROCMASK@
GNULIB_SLEEP = @GNULIB_SLEEP@
GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
GNULIB_SOCKET = @GNULIB_SOCKET@
GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
GNULIB_STAT = @GNULIB_STAT@
GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@
GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
GNULIB_STPCPY = @GNULIB_STPCPY@
GNULIB_STPNCPY = @GNULIB_STPNCPY@
GNULIB_STRCASESTR = @GNULIB_STRCASESTR@
GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@
GNULIB_STRDUP = @GNULIB_STRDUP@
GNULIB_STRERROR = @GNULIB_STRERROR@
GNULIB_STRERRORNAME_NP = @GNULIB_STRERRORNAME_NP@
GNULIB_STRERROR_R = @GNULIB_STRERROR_R@
GNULIB_STRFTIME = @GNULIB_STRFTIME@
GNULIB_STRNCAT = @GNULIB_STRNCAT@
GNULIB_STRNDUP = @GNULIB_STRNDUP@
GNULIB_STRNLEN = @GNULIB_STRNLEN@
GNULIB_STRPBRK = @GNULIB_STRPBRK@
GNULIB_STRPTIME = @GNULIB_STRPTIME@
GNULIB_STRSEP = @GNULIB_STRSEP@
GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
GNULIB_STRSTR = @GNULIB_STRSTR@
GNULIB_STRTOD = @GNULIB_STRTOD@
GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
GNULIB_STRTOLD = @GNULIB_STRTOLD@
GNULIB_STRTOLL = @GNULIB_STRTOLL@
GNULIB_STRTOULL = @GNULIB_STRTOULL@
GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
GNULIB_SYMLINK = @GNULIB_SYMLINK@
GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@
GNULIB_SYSTEM_POSIX = @GNULIB_SYSTEM_POSIX@
GNULIB_TIMEGM = @GNULIB_TIMEGM@
GNULIB_TIME_R = @GNULIB_TIME_R@
GNULIB_TIME_RZ = @GNULIB_TIME_RZ@
GNULIB_TMPFILE = @GNULIB_TMPFILE@
GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
GNULIB_TRUNCATE = @GNULIB_TRUNCATE@
GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@
GNULIB_TZSET = @GNULIB_TZSET@
GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@
GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@
GNULIB_UNLINK = @GNULIB_UNLINK@
GNULIB_UNLINKAT = @GNULIB_UNLINKAT@
GNULIB_UNLOCKPT = @GNULIB_UNLOCKPT@
GNULIB_UNSETENV = @GNULIB_UNSETENV@
GNULIB_USLEEP = @GNULIB_USLEEP@
GNULIB_UTIMENSAT = @GNULIB_UTIMENSAT@
GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@
GNULIB_VFSCANF = @GNULIB_VFSCANF@
GNULIB_VPRINTF = @GNULIB_VPRINTF@
GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@
GNULIB_VSCANF = @GNULIB_VSCANF@
GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@
GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@
GNULIB_WCPCPY = @GNULIB_WCPCPY@
GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
GNULIB_WCSCAT = @GNULIB_WCSCAT@
GNULIB_WCSCHR = @GNULIB_WCSCHR@
GNULIB_WCSCMP = @GNULIB_WCSCMP@
GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
GNULIB_WCSCPY = @GNULIB_WCSCPY@
GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
GNULIB_WCSDUP = @GNULIB_WCSDUP@
GNULIB_WCSFTIME = @GNULIB_WCSFTIME@
GNULIB_WCSLEN = @GNULIB_WCSLEN@
GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
GNULIB_WCSSPN = @GNULIB_WCSSPN@
GNULIB_WCSSTR = @GNULIB_WCSSTR@
GNULIB_WCSTOK = @GNULIB_WCSTOK@
GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
GNULIB_WCTOB = @GNULIB_WCTOB@
GNULIB_WCTOMB = @GNULIB_WCTOMB@
GNULIB_WCTRANS = @GNULIB_WCTRANS@
GNULIB_WCTYPE = @GNULIB_WCTYPE@
GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
GNULIB_WMEMPCPY = @GNULIB_WMEMPCPY@
GNULIB_WMEMSET = @GNULIB_WMEMSET@
GNULIB_WRITE = @GNULIB_WRITE@
GNULIB__EXIT = @GNULIB__EXIT@
GREP = @GREP@
GTKDOC_CHECK = @GTKDOC_CHECK@
GTKDOC_CHECK_PATH = @GTKDOC_CHECK_PATH@
GTKDOC_DEPS_CFLAGS = @GTKDOC_DEPS_CFLAGS@
GTKDOC_DEPS_LIBS = @GTKDOC_DEPS_LIBS@
GTKDOC_MKPDF = @GTKDOC_MKPDF@
GTKDOC_REBASE = @GTKDOC_REBASE@
HAVE_ACCEPT4 = @HAVE_ACCEPT4@
HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@
HAVE_ALLOCA_H = @HAVE_ALLOCA_H@
HAVE_ARPA_INET_H = @HAVE_ARPA_INET_H@
HAVE_ATOLL = @HAVE_ATOLL@
HAVE_BTOWC = @HAVE_BTOWC@
HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@
HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@
HAVE_CHOWN = @HAVE_CHOWN@
HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@
HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@
HAVE_DECL_ECVT = @HAVE_DECL_ECVT@
HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@
HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@
HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@
HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@
HAVE_DECL_FCVT = @HAVE_DECL_FCVT@
HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@
HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
HAVE_DECL_FREEADDRINFO = @HAVE_DECL_FREEADDRINFO@
HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
HAVE_DECL_GAI_STRERROR = @HAVE_DECL_GAI_STRERROR@
HAVE_DECL_GCVT = @HAVE_DECL_GCVT@
HAVE_DECL_GETADDRINFO = @HAVE_DECL_GETADDRINFO@
HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@
HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@
HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@
HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@
HAVE_DECL_GETNAMEINFO = @HAVE_DECL_GETNAMEINFO@
HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@
HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@
HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
HAVE_DECL_INET_NTOP = @HAVE_DECL_INET_NTOP@
HAVE_DECL_INET_PTON = @HAVE_DECL_INET_PTON@
HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@
HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@
HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
HAVE_DECL_SETENV = @HAVE_DECL_SETENV@
HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@
HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@
HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@
HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@
HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@
HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@
HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
HAVE_DPRINTF = @HAVE_DPRINTF@
HAVE_DUP3 = @HAVE_DUP3@
HAVE_DUPLOCALE = @HAVE_DUPLOCALE@
HAVE_EUIDACCESS = @HAVE_EUIDACCESS@
HAVE_EXECVPE = @HAVE_EXECVPE@
HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@
HAVE_FACCESSAT = @HAVE_FACCESSAT@
HAVE_FCHDIR = @HAVE_FCHDIR@
HAVE_FCHMODAT = @HAVE_FCHMODAT@
HAVE_FCHOWNAT = @HAVE_FCHOWNAT@
HAVE_FCNTL = @HAVE_FCNTL@
HAVE_FDATASYNC = @HAVE_FDATASYNC@
HAVE_FEATURES_H = @HAVE_FEATURES_H@
HAVE_FFSL = @HAVE_FFSL@
HAVE_FFSLL = @HAVE_FFSLL@
HAVE_FREELOCALE = @HAVE_FREELOCALE@
HAVE_FSEEKO = @HAVE_FSEEKO@
HAVE_FSTATAT = @HAVE_FSTATAT@
HAVE_FSYNC = @HAVE_FSYNC@
HAVE_FTELLO = @HAVE_FTELLO@
HAVE_FTRUNCATE = @HAVE_FTRUNCATE@
HAVE_FUTIMENS = @HAVE_FUTIMENS@
HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@
HAVE_GETENTROPY = @HAVE_GETENTROPY@
HAVE_GETGROUPS = @HAVE_GETGROUPS@
HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@
HAVE_GETLOGIN = @HAVE_GETLOGIN@
HAVE_GETOPT_H = @HAVE_GETOPT_H@
HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@
HAVE_GETPASS = @HAVE_GETPASS@
HAVE_GETSUBOPT = @HAVE_GETSUBOPT@
HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@
HAVE_GETUMASK = @HAVE_GETUMASK@
HAVE_GRANTPT = @HAVE_GRANTPT@
HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@
HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@
HAVE_INITSTATE = @HAVE_INITSTATE@
HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
HAVE_ISBLANK = @HAVE_ISBLANK@
HAVE_ISWBLANK = @HAVE_ISWBLANK@
HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@
HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@
HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@
HAVE_LANGINFO_H = @HAVE_LANGINFO_H@
HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@
HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@
HAVE_LCHMOD = @HAVE_LCHMOD@
HAVE_LCHOWN = @HAVE_LCHOWN@
HAVE_LIBGNUTLS = @HAVE_LIBGNUTLS@
HAVE_LINK = @HAVE_LINK@
HAVE_LINKAT = @HAVE_LINKAT@
HAVE_LSTAT = @HAVE_LSTAT@
HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
HAVE_MBRLEN = @HAVE_MBRLEN@
HAVE_MBRTOWC = @HAVE_MBRTOWC@
HAVE_MBSINIT = @HAVE_MBSINIT@
HAVE_MBSLEN = @HAVE_MBSLEN@
HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
HAVE_MBTOWC = @HAVE_MBTOWC@
HAVE_MEMPCPY = @HAVE_MEMPCPY@
HAVE_MKDIRAT = @HAVE_MKDIRAT@
HAVE_MKDTEMP = @HAVE_MKDTEMP@
HAVE_MKFIFO = @HAVE_MKFIFO@
HAVE_MKFIFOAT = @HAVE_MKFIFOAT@
HAVE_MKNOD = @HAVE_MKNOD@
HAVE_MKNODAT = @HAVE_MKNODAT@
HAVE_MKOSTEMP = @HAVE_MKOSTEMP@
HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@
HAVE_MKSTEMP = @HAVE_MKSTEMP@
HAVE_MKSTEMPS = @HAVE_MKSTEMPS@
HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@
HAVE_NANOSLEEP = @HAVE_NANOSLEEP@
HAVE_NETDB_H = @HAVE_NETDB_H@
HAVE_NETINET_IN_H = @HAVE_NETINET_IN_H@
HAVE_NEWLOCALE = @HAVE_NEWLOCALE@
HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@
HAVE_OPENAT = @HAVE_OPENAT@
HAVE_OS_H = @HAVE_OS_H@
HAVE_PCLOSE = @HAVE_PCLOSE@
HAVE_PIPE = @HAVE_PIPE@
HAVE_PIPE2 = @HAVE_PIPE2@
HAVE_POLL = @HAVE_POLL@
HAVE_POLL_H = @HAVE_POLL_H@
HAVE_POPEN = @HAVE_POPEN@
HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@
HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@
HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@
HAVE_PREAD = @HAVE_PREAD@
HAVE_PSELECT = @HAVE_PSELECT@
HAVE_PTHREAD_ATTR_DESTROY = @HAVE_PTHREAD_ATTR_DESTROY@
HAVE_PTHREAD_ATTR_GETDETACHSTATE = @HAVE_PTHREAD_ATTR_GETDETACHSTATE@
HAVE_PTHREAD_ATTR_INIT = @HAVE_PTHREAD_ATTR_INIT@
HAVE_PTHREAD_ATTR_SETDETACHSTATE = @HAVE_PTHREAD_ATTR_SETDETACHSTATE@
HAVE_PTHREAD_CONDATTR_DESTROY = @HAVE_PTHREAD_CONDATTR_DESTROY@
HAVE_PTHREAD_CONDATTR_INIT = @HAVE_PTHREAD_CONDATTR_INIT@
HAVE_PTHREAD_COND_BROADCAST = @HAVE_PTHREAD_COND_BROADCAST@
HAVE_PTHREAD_COND_DESTROY = @HAVE_PTHREAD_COND_DESTROY@
HAVE_PTHREAD_COND_INIT = @HAVE_PTHREAD_COND_INIT@
HAVE_PTHREAD_COND_SIGNAL = @HAVE_PTHREAD_COND_SIGNAL@
HAVE_PTHREAD_COND_TIMEDWAIT = @HAVE_PTHREAD_COND_TIMEDWAIT@
HAVE_PTHREAD_COND_WAIT = @HAVE_PTHREAD_COND_WAIT@
HAVE_PTHREAD_CREATE = @HAVE_PTHREAD_CREATE@
HAVE_PTHREAD_CREATE_DETACHED = @HAVE_PTHREAD_CREATE_DETACHED@
HAVE_PTHREAD_DETACH = @HAVE_PTHREAD_DETACH@
HAVE_PTHREAD_EQUAL = @HAVE_PTHREAD_EQUAL@
HAVE_PTHREAD_EXIT = @HAVE_PTHREAD_EXIT@
HAVE_PTHREAD_GETSPECIFIC = @HAVE_PTHREAD_GETSPECIFIC@
HAVE_PTHREAD_H = @HAVE_PTHREAD_H@
HAVE_PTHREAD_JOIN = @HAVE_PTHREAD_JOIN@
HAVE_PTHREAD_KEY_CREATE = @HAVE_PTHREAD_KEY_CREATE@
HAVE_PTHREAD_KEY_DELETE = @HAVE_PTHREAD_KEY_DELETE@
HAVE_PTHREAD_MUTEXATTR_DESTROY = @HAVE_PTHREAD_MUTEXATTR_DESTROY@
HAVE_PTHREAD_MUTEXATTR_GETROBUST = @HAVE_PTHREAD_MUTEXATTR_GETROBUST@
HAVE_PTHREAD_MUTEXATTR_GETTYPE = @HAVE_PTHREAD_MUTEXATTR_GETTYPE@
HAVE_PTHREAD_MUTEXATTR_INIT = @HAVE_PTHREAD_MUTEXATTR_INIT@
HAVE_PTHREAD_MUTEXATTR_SETROBUST = @HAVE_PTHREAD_MUTEXATTR_SETROBUST@
HAVE_PTHREAD_MUTEXATTR_SETTYPE = @HAVE_PTHREAD_MUTEXATTR_SETTYPE@
HAVE_PTHREAD_MUTEX_DESTROY = @HAVE_PTHREAD_MUTEX_DESTROY@
HAVE_PTHREAD_MUTEX_INIT = @HAVE_PTHREAD_MUTEX_INIT@
HAVE_PTHREAD_MUTEX_LOCK = @HAVE_PTHREAD_MUTEX_LOCK@
HAVE_PTHREAD_MUTEX_RECURSIVE = @HAVE_PTHREAD_MUTEX_RECURSIVE@
HAVE_PTHREAD_MUTEX_ROBUST = @HAVE_PTHREAD_MUTEX_ROBUST@
HAVE_PTHREAD_MUTEX_TIMEDLOCK = @HAVE_PTHREAD_MUTEX_TIMEDLOCK@
HAVE_PTHREAD_MUTEX_TRYLOCK = @HAVE_PTHREAD_MUTEX_TRYLOCK@
HAVE_PTHREAD_MUTEX_UNLOCK = @HAVE_PTHREAD_MUTEX_UNLOCK@
HAVE_PTHREAD_ONCE = @HAVE_PTHREAD_ONCE@
HAVE_PTHREAD_PROCESS_SHARED = @HAVE_PTHREAD_PROCESS_SHARED@
HAVE_PTHREAD_RWLOCKATTR_DESTROY = @HAVE_PTHREAD_RWLOCKATTR_DESTROY@
HAVE_PTHREAD_RWLOCKATTR_INIT = @HAVE_PTHREAD_RWLOCKATTR_INIT@
HAVE_PTHREAD_RWLOCK_DESTROY = @HAVE_PTHREAD_RWLOCK_DESTROY@
HAVE_PTHREAD_RWLOCK_INIT = @HAVE_PTHREAD_RWLOCK_INIT@
HAVE_PTHREAD_RWLOCK_RDLOCK = @HAVE_PTHREAD_RWLOCK_RDLOCK@
HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDRDLOCK@
HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK = @HAVE_PTHREAD_RWLOCK_TIMEDWRLOCK@
HAVE_PTHREAD_RWLOCK_TRYRDLOCK = @HAVE_PTHREAD_RWLOCK_TRYRDLOCK@
HAVE_PTHREAD_RWLOCK_TRYWRLOCK = @HAVE_PTHREAD_RWLOCK_TRYWRLOCK@
HAVE_PTHREAD_RWLOCK_UNLOCK = @HAVE_PTHREAD_RWLOCK_UNLOCK@
HAVE_PTHREAD_RWLOCK_WRLOCK = @HAVE_PTHREAD_RWLOCK_WRLOCK@
HAVE_PTHREAD_SELF = @HAVE_PTHREAD_SELF@
HAVE_PTHREAD_SETSPECIFIC = @HAVE_PTHREAD_SETSPECIFIC@
HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@
HAVE_PTHREAD_SPINLOCK_T = @HAVE_PTHREAD_SPINLOCK_T@
HAVE_PTHREAD_SPIN_DESTROY = @HAVE_PTHREAD_SPIN_DESTROY@
HAVE_PTHREAD_SPIN_INIT = @HAVE_PTHREAD_SPIN_INIT@
HAVE_PTHREAD_SPIN_LOCK = @HAVE_PTHREAD_SPIN_LOCK@
HAVE_PTHREAD_SPIN_TRYLOCK = @HAVE_PTHREAD_SPIN_TRYLOCK@
HAVE_PTHREAD_SPIN_UNLOCK = @HAVE_PTHREAD_SPIN_UNLOCK@
HAVE_PTHREAD_T = @HAVE_PTHREAD_T@
HAVE_PTSNAME = @HAVE_PTSNAME@
HAVE_PTSNAME_R = @HAVE_PTSNAME_R@
HAVE_PWRITE = @HAVE_PWRITE@
HAVE_QSORT_R = @HAVE_QSORT_R@
HAVE_RAISE = @HAVE_RAISE@
HAVE_RANDOM = @HAVE_RANDOM@
HAVE_RANDOM_H = @HAVE_RANDOM_H@
HAVE_RANDOM_R = @HAVE_RANDOM_R@
HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
HAVE_READLINK = @HAVE_READLINK@
HAVE_READLINKAT = @HAVE_READLINKAT@
HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@
HAVE_REALPATH = @HAVE_REALPATH@
HAVE_RENAMEAT = @HAVE_RENAMEAT@
HAVE_RPMATCH = @HAVE_RPMATCH@
HAVE_SA_FAMILY_T = @HAVE_SA_FAMILY_T@
HAVE_SCHED_H = @HAVE_SCHED_H@
HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@
HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@
HAVE_SETENV = @HAVE_SETENV@
HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@
HAVE_SETSTATE = @HAVE_SETSTATE@
HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@
HAVE_SIGACTION = @HAVE_SIGACTION@
HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@
HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@
HAVE_SIGINFO_T = @HAVE_SIGINFO_T@
HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
HAVE_SIGSET_T = @HAVE_SIGSET_T@
HAVE_SLEEP = @HAVE_SLEEP@
HAVE_STDINT_H = @HAVE_STDINT_H@
HAVE_STPCPY = @HAVE_STPCPY@
HAVE_STPNCPY = @HAVE_STPNCPY@
HAVE_STRCASESTR = @HAVE_STRCASESTR@
HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@
HAVE_STRPBRK = @HAVE_STRPBRK@
HAVE_STRPTIME = @HAVE_STRPTIME@
HAVE_STRSEP = @HAVE_STRSEP@
HAVE_STRTOD = @HAVE_STRTOD@
HAVE_STRTOLD = @HAVE_STRTOLD@
HAVE_STRTOLL = @HAVE_STRTOLL@
HAVE_STRTOULL = @HAVE_STRTOULL@
HAVE_STRUCT_ADDRINFO = @HAVE_STRUCT_ADDRINFO@
HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@
HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@
HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@
HAVE_STRUCT_SOCKADDR_STORAGE = @HAVE_STRUCT_SOCKADDR_STORAGE@
HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = @HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY@
HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@
HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
HAVE_SYMLINK = @HAVE_SYMLINK@
HAVE_SYMLINKAT = @HAVE_SYMLINKAT@
HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@
HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@
HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@
HAVE_SYS_SELECT_H = @HAVE_SYS_SELECT_H@
HAVE_SYS_SOCKET_H = @HAVE_SYS_SOCKET_H@
HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@
HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
HAVE_SYS_UIO_H = @HAVE_SYS_UIO_H@
HAVE_TIMEGM = @HAVE_TIMEGM@
HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@
HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@
HAVE_UNISTD_H = @HAVE_UNISTD_H@
HAVE_UNLINKAT = @HAVE_UNLINKAT@
HAVE_UNLOCKPT = @HAVE_UNLOCKPT@
HAVE_USLEEP = @HAVE_USLEEP@
HAVE_UTIMENSAT = @HAVE_UTIMENSAT@
HAVE_VASPRINTF = @HAVE_VASPRINTF@
HAVE_VDPRINTF = @HAVE_VDPRINTF@
HAVE_VISIBILITY = @HAVE_VISIBILITY@
HAVE_WCHAR_H = @HAVE_WCHAR_H@
HAVE_WCHAR_T = @HAVE_WCHAR_T@
HAVE_WCPCPY = @HAVE_WCPCPY@
HAVE_WCPNCPY = @HAVE_WCPNCPY@
HAVE_WCRTOMB = @HAVE_WCRTOMB@
HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
HAVE_WCSCAT = @HAVE_WCSCAT@
HAVE_WCSCHR = @HAVE_WCSCHR@
HAVE_WCSCMP = @HAVE_WCSCMP@
HAVE_WCSCOLL = @HAVE_WCSCOLL@
HAVE_WCSCPY = @HAVE_WCSCPY@
HAVE_WCSCSPN = @HAVE_WCSCSPN@
HAVE_WCSDUP = @HAVE_WCSDUP@
HAVE_WCSFTIME = @HAVE_WCSFTIME@
HAVE_WCSLEN = @HAVE_WCSLEN@
HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
HAVE_WCSNCAT = @HAVE_WCSNCAT@
HAVE_WCSNCMP = @HAVE_WCSNCMP@
HAVE_WCSNCPY = @HAVE_WCSNCPY@
HAVE_WCSNLEN = @HAVE_WCSNLEN@
HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
HAVE_WCSPBRK = @HAVE_WCSPBRK@
HAVE_WCSRCHR = @HAVE_WCSRCHR@
HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
HAVE_WCSSPN = @HAVE_WCSSPN@
HAVE_WCSSTR = @HAVE_WCSSTR@
HAVE_WCSTOK = @HAVE_WCSTOK@
HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
HAVE_WCSXFRM = @HAVE_WCSXFRM@
HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@
HAVE_WINT_T = @HAVE_WINT_T@
HAVE_WMEMCHR = @HAVE_WMEMCHR@
HAVE_WMEMCMP = @HAVE_WMEMCMP@
HAVE_WMEMCPY = @HAVE_WMEMCPY@
HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
HAVE_WMEMPCPY = @HAVE_WMEMPCPY@
HAVE_WMEMSET = @HAVE_WMEMSET@
HAVE_WS2TCPIP_H = @HAVE_WS2TCPIP_H@
HAVE_XLOCALE_H = @HAVE_XLOCALE_H@
HAVE__BOOL = @HAVE__BOOL@
HAVE__EXIT = @HAVE__EXIT@
HELP2MAN = @HELP2MAN@
HOSTENT_LIB = @HOSTENT_LIB@
HTML_DIR = @HTML_DIR@
ICONV_CONST = @ICONV_CONST@
ICONV_H = @ICONV_H@
INCLUDE_NEXT = @INCLUDE_NEXT@
INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
INET_NTOP_LIB = @INET_NTOP_LIB@
INET_PTON_LIB = @INET_PTON_LIB@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
INTLLIBS = @INTLLIBS@
INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
LASSO_CFLAGS = @LASSO_CFLAGS@
LASSO_LIBS = @LASSO_LIBS@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBGNUTLS = @LIBGNUTLS@
LIBGNUTLS_PREFIX = @LIBGNUTLS_PREFIX@
LIBICONV = @LIBICONV@
LIBINTL = @LIBINTL@
LIBMULTITHREAD = @LIBMULTITHREAD@
LIBOBJS = @LIBOBJS@
LIBPMULTITHREAD = @LIBPMULTITHREAD@
LIBPTHREAD = @LIBPTHREAD@
LIBREADLINE = @LIBREADLINE@
LIBS = @LIBS@
LIBSOCKET = @LIBSOCKET@
LIBSTDTHREAD = @LIBSTDTHREAD@
LIBTESTS_LIBDEPS = @LIBTESTS_LIBDEPS@
LIBTHREAD = @LIBTHREAD@
LIBTOOL = @LIBTOOL@
LIBUNISTRING_UNISTR_H = @LIBUNISTRING_UNISTR_H@
LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@
LIB_HARD_LOCALE = @LIB_HARD_LOCALE@
LIB_MBRTOWC = @LIB_MBRTOWC@
LIB_NANOSLEEP = @LIB_NANOSLEEP@
LIB_POLL = @LIB_POLL@
LIB_PTHREAD = @LIB_PTHREAD@
LIB_PTHREAD_SIGMASK = @LIB_PTHREAD_SIGMASK@
LIB_SCHED_YIELD = @LIB_SCHED_YIELD@
LIB_SELECT = @LIB_SELECT@
LIB_SEMAPHORE = @LIB_SEMAPHORE@
LIB_SETLOCALE = @LIB_SETLOCALE@
LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@
LIMITS_H = @LIMITS_H@
LIPO = @LIPO@
LN_S = @LN_S@
LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
LOCALE_FR = @LOCALE_FR@
LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@
LOCALE_JA = @LOCALE_JA@
LOCALE_TR_UTF8 = @LOCALE_TR_UTF8@
LOCALE_ZH_CN = @LOCALE_ZH_CN@
LTALLOCA = @LTALLOCA@
LTLIBGNUTLS = @LTLIBGNUTLS@
LTLIBICONV = @LTLIBICONV@
LTLIBINTL = @LTLIBINTL@
LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
LTLIBOBJS = @LTLIBOBJS@
LTLIBREADLINE = @LTLIBREADLINE@
LTLIBTHREAD = @LTLIBTHREAD@
LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MSGFMT = @MSGFMT@
MSGFMT_015 = @MSGFMT_015@
MSGMERGE = @MSGMERGE@
NETINET_IN_H = @NETINET_IN_H@
NEXT_ARPA_INET_H = @NEXT_ARPA_INET_H@
NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H = @NEXT_AS_FIRST_DIRECTIVE_ARPA_INET_H@
NEXT_AS_FIRST_DIRECTIVE_CTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_CTYPE_H@
NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@
NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@
NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@
NEXT_AS_FIRST_DIRECTIVE_ICONV_H = @NEXT_AS_FIRST_DIRECTIVE_ICONV_H@
NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@
NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@
NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@
NEXT_AS_FIRST_DIRECTIVE_NETDB_H = @NEXT_AS_FIRST_DIRECTIVE_NETDB_H@
NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H = @NEXT_AS_FIRST_DIRECTIVE_NETINET_IN_H@
NEXT_AS_FIRST_DIRECTIVE_POLL_H = @NEXT_AS_FIRST_DIRECTIVE_POLL_H@
NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H = @NEXT_AS_FIRST_DIRECTIVE_PTHREAD_H@
NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@
NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@
NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@
NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@
NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SELECT_H@
NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_SOCKET_H@
NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@
NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@
NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_UIO_H@
NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@
NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@
NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
NEXT_CTYPE_H = @NEXT_CTYPE_H@
NEXT_ERRNO_H = @NEXT_ERRNO_H@
NEXT_FCNTL_H = @NEXT_FCNTL_H@
NEXT_FLOAT_H = @NEXT_FLOAT_H@
NEXT_GETOPT_H = @NEXT_GETOPT_H@
NEXT_ICONV_H = @NEXT_ICONV_H@
NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
NEXT_LANGINFO_H = @NEXT_LANGINFO_H@
NEXT_LIMITS_H = @NEXT_LIMITS_H@
NEXT_LOCALE_H = @NEXT_LOCALE_H@
NEXT_NETDB_H = @NEXT_NETDB_H@
NEXT_NETINET_IN_H = @NEXT_NETINET_IN_H@
NEXT_POLL_H = @NEXT_POLL_H@
NEXT_PTHREAD_H = @NEXT_PTHREAD_H@
NEXT_SCHED_H = @NEXT_SCHED_H@
NEXT_SIGNAL_H = @NEXT_SIGNAL_H@
NEXT_STDARG_H = @NEXT_STDARG_H@
NEXT_STDDEF_H = @NEXT_STDDEF_H@
NEXT_STDINT_H = @NEXT_STDINT_H@
NEXT_STDIO_H = @NEXT_STDIO_H@
NEXT_STDLIB_H = @NEXT_STDLIB_H@
NEXT_STRING_H = @NEXT_STRING_H@
NEXT_SYS_SELECT_H = @NEXT_SYS_SELECT_H@
NEXT_SYS_SOCKET_H = @NEXT_SYS_SOCKET_H@
NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@
NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@
NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
NEXT_SYS_UIO_H = @NEXT_SYS_UIO_H@
NEXT_TIME_H = @NEXT_TIME_H@
NEXT_UNISTD_H = @NEXT_UNISTD_H@
NEXT_WCHAR_H = @NEXT_WCHAR_H@
NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PERL = @PERL@
PKG_CONFIG = @PKG_CONFIG@
PMCCABE = @PMCCABE@
POSUB = @POSUB@
PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
PRIPTR_PREFIX = @PRIPTR_PREFIX@
PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@
PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
RANLIB = @RANLIB@
REPLACE_ACCESS = @REPLACE_ACCESS@
REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@
REPLACE_BTOWC = @REPLACE_BTOWC@
REPLACE_CALLOC = @REPLACE_CALLOC@
REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@
REPLACE_CHOWN = @REPLACE_CHOWN@
REPLACE_CLOSE = @REPLACE_CLOSE@
REPLACE_CREAT = @REPLACE_CREAT@
REPLACE_CTIME = @REPLACE_CTIME@
REPLACE_DPRINTF = @REPLACE_DPRINTF@
REPLACE_DUP = @REPLACE_DUP@
REPLACE_DUP2 = @REPLACE_DUP2@
REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@
REPLACE_EXECL = @REPLACE_EXECL@
REPLACE_EXECLE = @REPLACE_EXECLE@
REPLACE_EXECLP = @REPLACE_EXECLP@
REPLACE_EXECV = @REPLACE_EXECV@
REPLACE_EXECVE = @REPLACE_EXECVE@
REPLACE_EXECVP = @REPLACE_EXECVP@
REPLACE_EXECVPE = @REPLACE_EXECVPE@
REPLACE_FACCESSAT = @REPLACE_FACCESSAT@
REPLACE_FCHMODAT = @REPLACE_FCHMODAT@
REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@
REPLACE_FCLOSE = @REPLACE_FCLOSE@
REPLACE_FCNTL = @REPLACE_FCNTL@
REPLACE_FDOPEN = @REPLACE_FDOPEN@
REPLACE_FFLUSH = @REPLACE_FFLUSH@
REPLACE_FOPEN = @REPLACE_FOPEN@
REPLACE_FPRINTF = @REPLACE_FPRINTF@
REPLACE_FPURGE = @REPLACE_FPURGE@
REPLACE_FREE = @REPLACE_FREE@
REPLACE_FREELOCALE = @REPLACE_FREELOCALE@
REPLACE_FREOPEN = @REPLACE_FREOPEN@
REPLACE_FSEEK = @REPLACE_FSEEK@
REPLACE_FSEEKO = @REPLACE_FSEEKO@
REPLACE_FSTAT = @REPLACE_FSTAT@
REPLACE_FSTATAT = @REPLACE_FSTATAT@
REPLACE_FTELL = @REPLACE_FTELL@
REPLACE_FTELLO = @REPLACE_FTELLO@
REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@
REPLACE_FUTIMENS = @REPLACE_FUTIMENS@
REPLACE_GAI_STRERROR = @REPLACE_GAI_STRERROR@
REPLACE_GETADDRINFO = @REPLACE_GETADDRINFO@
REPLACE_GETCWD = @REPLACE_GETCWD@
REPLACE_GETDELIM = @REPLACE_GETDELIM@
REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@
REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@
REPLACE_GETGROUPS = @REPLACE_GETGROUPS@
REPLACE_GETLINE = @REPLACE_GETLINE@
REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@
REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@
REPLACE_GETPASS = @REPLACE_GETPASS@
REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@
REPLACE_GMTIME = @REPLACE_GMTIME@
REPLACE_ICONV = @REPLACE_ICONV@
REPLACE_ICONV_OPEN = @REPLACE_ICONV_OPEN@
REPLACE_ICONV_UTF = @REPLACE_ICONV_UTF@
REPLACE_INET_NTOP = @REPLACE_INET_NTOP@
REPLACE_INET_PTON = @REPLACE_INET_PTON@
REPLACE_INITSTATE = @REPLACE_INITSTATE@
REPLACE_ISATTY = @REPLACE_ISATTY@
REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@
REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@
REPLACE_ITOLD = @REPLACE_ITOLD@
REPLACE_LCHOWN = @REPLACE_LCHOWN@
REPLACE_LINK = @REPLACE_LINK@
REPLACE_LINKAT = @REPLACE_LINKAT@
REPLACE_LOCALECONV = @REPLACE_LOCALECONV@
REPLACE_LOCALTIME = @REPLACE_LOCALTIME@
REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@
REPLACE_LSEEK = @REPLACE_LSEEK@
REPLACE_LSTAT = @REPLACE_LSTAT@
REPLACE_MALLOC = @REPLACE_MALLOC@
REPLACE_MBRLEN = @REPLACE_MBRLEN@
REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
REPLACE_MBSINIT = @REPLACE_MBSINIT@
REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
REPLACE_MBTOWC = @REPLACE_MBTOWC@
REPLACE_MEMCHR = @REPLACE_MEMCHR@
REPLACE_MEMMEM = @REPLACE_MEMMEM@
REPLACE_MKDIR = @REPLACE_MKDIR@
REPLACE_MKFIFO = @REPLACE_MKFIFO@
REPLACE_MKNOD = @REPLACE_MKNOD@
REPLACE_MKSTEMP = @REPLACE_MKSTEMP@
REPLACE_MKTIME = @REPLACE_MKTIME@
REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@
REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@
REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@
REPLACE_NULL = @REPLACE_NULL@
REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
REPLACE_OPEN = @REPLACE_OPEN@
REPLACE_OPENAT = @REPLACE_OPENAT@
REPLACE_PERROR = @REPLACE_PERROR@
REPLACE_POLL = @REPLACE_POLL@
REPLACE_POPEN = @REPLACE_POPEN@
REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@
REPLACE_PREAD = @REPLACE_PREAD@
REPLACE_PRINTF = @REPLACE_PRINTF@
REPLACE_PSELECT = @REPLACE_PSELECT@
REPLACE_PTHREAD_ATTR_DESTROY = @REPLACE_PTHREAD_ATTR_DESTROY@
REPLACE_PTHREAD_ATTR_GETDETACHSTATE = @REPLACE_PTHREAD_ATTR_GETDETACHSTATE@
REPLACE_PTHREAD_ATTR_INIT = @REPLACE_PTHREAD_ATTR_INIT@
REPLACE_PTHREAD_ATTR_SETDETACHSTATE = @REPLACE_PTHREAD_ATTR_SETDETACHSTATE@
REPLACE_PTHREAD_CONDATTR_DESTROY = @REPLACE_PTHREAD_CONDATTR_DESTROY@
REPLACE_PTHREAD_CONDATTR_INIT = @REPLACE_PTHREAD_CONDATTR_INIT@
REPLACE_PTHREAD_COND_BROADCAST = @REPLACE_PTHREAD_COND_BROADCAST@
REPLACE_PTHREAD_COND_DESTROY = @REPLACE_PTHREAD_COND_DESTROY@
REPLACE_PTHREAD_COND_INIT = @REPLACE_PTHREAD_COND_INIT@
REPLACE_PTHREAD_COND_SIGNAL = @REPLACE_PTHREAD_COND_SIGNAL@
REPLACE_PTHREAD_COND_TIMEDWAIT = @REPLACE_PTHREAD_COND_TIMEDWAIT@
REPLACE_PTHREAD_COND_WAIT = @REPLACE_PTHREAD_COND_WAIT@
REPLACE_PTHREAD_CREATE = @REPLACE_PTHREAD_CREATE@
REPLACE_PTHREAD_DETACH = @REPLACE_PTHREAD_DETACH@
REPLACE_PTHREAD_EQUAL = @REPLACE_PTHREAD_EQUAL@
REPLACE_PTHREAD_EXIT = @REPLACE_PTHREAD_EXIT@
REPLACE_PTHREAD_GETSPECIFIC = @REPLACE_PTHREAD_GETSPECIFIC@
REPLACE_PTHREAD_JOIN = @REPLACE_PTHREAD_JOIN@
REPLACE_PTHREAD_KEY_CREATE = @REPLACE_PTHREAD_KEY_CREATE@
REPLACE_PTHREAD_KEY_DELETE = @REPLACE_PTHREAD_KEY_DELETE@
REPLACE_PTHREAD_MUTEXATTR_DESTROY = @REPLACE_PTHREAD_MUTEXATTR_DESTROY@
REPLACE_PTHREAD_MUTEXATTR_GETROBUST = @REPLACE_PTHREAD_MUTEXATTR_GETROBUST@
REPLACE_PTHREAD_MUTEXATTR_GETTYPE = @REPLACE_PTHREAD_MUTEXATTR_GETTYPE@
REPLACE_PTHREAD_MUTEXATTR_INIT = @REPLACE_PTHREAD_MUTEXATTR_INIT@
REPLACE_PTHREAD_MUTEXATTR_SETROBUST = @REPLACE_PTHREAD_MUTEXATTR_SETROBUST@
REPLACE_PTHREAD_MUTEXATTR_SETTYPE = @REPLACE_PTHREAD_MUTEXATTR_SETTYPE@
REPLACE_PTHREAD_MUTEX_DESTROY = @REPLACE_PTHREAD_MUTEX_DESTROY@
REPLACE_PTHREAD_MUTEX_INIT = @REPLACE_PTHREAD_MUTEX_INIT@
REPLACE_PTHREAD_MUTEX_LOCK = @REPLACE_PTHREAD_MUTEX_LOCK@
REPLACE_PTHREAD_MUTEX_TIMEDLOCK = @REPLACE_PTHREAD_MUTEX_TIMEDLOCK@
REPLACE_PTHREAD_MUTEX_TRYLOCK = @REPLACE_PTHREAD_MUTEX_TRYLOCK@
REPLACE_PTHREAD_MUTEX_UNLOCK = @REPLACE_PTHREAD_MUTEX_UNLOCK@
REPLACE_PTHREAD_ONCE = @REPLACE_PTHREAD_ONCE@
REPLACE_PTHREAD_RWLOCKATTR_DESTROY = @REPLACE_PTHREAD_RWLOCKATTR_DESTROY@
REPLACE_PTHREAD_RWLOCKATTR_INIT = @REPLACE_PTHREAD_RWLOCKATTR_INIT@
REPLACE_PTHREAD_RWLOCK_DESTROY = @REPLACE_PTHREAD_RWLOCK_DESTROY@
REPLACE_PTHREAD_RWLOCK_INIT = @REPLACE_PTHREAD_RWLOCK_INIT@
REPLACE_PTHREAD_RWLOCK_RDLOCK = @REPLACE_PTHREAD_RWLOCK_RDLOCK@
REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDRDLOCK@
REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK = @REPLACE_PTHREAD_RWLOCK_TIMEDWRLOCK@
REPLACE_PTHREAD_RWLOCK_TRYRDLOCK = @REPLACE_PTHREAD_RWLOCK_TRYRDLOCK@
REPLACE_PTHREAD_RWLOCK_TRYWRLOCK = @REPLACE_PTHREAD_RWLOCK_TRYWRLOCK@
REPLACE_PTHREAD_RWLOCK_UNLOCK = @REPLACE_PTHREAD_RWLOCK_UNLOCK@
REPLACE_PTHREAD_RWLOCK_WRLOCK = @REPLACE_PTHREAD_RWLOCK_WRLOCK@
REPLACE_PTHREAD_SELF = @REPLACE_PTHREAD_SELF@
REPLACE_PTHREAD_SETSPECIFIC = @REPLACE_PTHREAD_SETSPECIFIC@
REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@
REPLACE_PTHREAD_SPIN_DESTROY = @REPLACE_PTHREAD_SPIN_DESTROY@
REPLACE_PTHREAD_SPIN_INIT = @REPLACE_PTHREAD_SPIN_INIT@
REPLACE_PTHREAD_SPIN_LOCK = @REPLACE_PTHREAD_SPIN_LOCK@
REPLACE_PTHREAD_SPIN_TRYLOCK = @REPLACE_PTHREAD_SPIN_TRYLOCK@
REPLACE_PTHREAD_SPIN_UNLOCK = @REPLACE_PTHREAD_SPIN_UNLOCK@
REPLACE_PTSNAME = @REPLACE_PTSNAME@
REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@
REPLACE_PUTENV = @REPLACE_PUTENV@
REPLACE_PWRITE = @REPLACE_PWRITE@
REPLACE_QSORT_R = @REPLACE_QSORT_R@
REPLACE_RAISE = @REPLACE_RAISE@
REPLACE_RANDOM = @REPLACE_RANDOM@
REPLACE_RANDOM_R = @REPLACE_RANDOM_R@
REPLACE_READ = @REPLACE_READ@
REPLACE_READLINK = @REPLACE_READLINK@
REPLACE_READLINKAT = @REPLACE_READLINKAT@
REPLACE_REALLOC = @REPLACE_REALLOC@
REPLACE_REALPATH = @REPLACE_REALPATH@
REPLACE_REMOVE = @REPLACE_REMOVE@
REPLACE_RENAME = @REPLACE_RENAME@
REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
REPLACE_RMDIR = @REPLACE_RMDIR@
REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@
REPLACE_SELECT = @REPLACE_SELECT@
REPLACE_SETENV = @REPLACE_SETENV@
REPLACE_SETLOCALE = @REPLACE_SETLOCALE@
REPLACE_SETSTATE = @REPLACE_SETSTATE@
REPLACE_SLEEP = @REPLACE_SLEEP@
REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
REPLACE_SPRINTF = @REPLACE_SPRINTF@
REPLACE_STAT = @REPLACE_STAT@
REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
REPLACE_STPNCPY = @REPLACE_STPNCPY@
REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
REPLACE_STRDUP = @REPLACE_STRDUP@
REPLACE_STRERROR = @REPLACE_STRERROR@
REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@
REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
REPLACE_STRFTIME = @REPLACE_STRFTIME@
REPLACE_STRNCAT = @REPLACE_STRNCAT@
REPLACE_STRNDUP = @REPLACE_STRNDUP@
REPLACE_STRNLEN = @REPLACE_STRNLEN@
REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
REPLACE_STRSTR = @REPLACE_STRSTR@
REPLACE_STRTOD = @REPLACE_STRTOD@
REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
REPLACE_STRTOLD = @REPLACE_STRTOLD@
REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@
REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@
REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@
REPLACE_SYMLINK = @REPLACE_SYMLINK@
REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@
REPLACE_TIMEGM = @REPLACE_TIMEGM@
REPLACE_TMPFILE = @REPLACE_TMPFILE@
REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
REPLACE_TRUNCATE = @REPLACE_TRUNCATE@
REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@
REPLACE_TZSET = @REPLACE_TZSET@
REPLACE_UNLINK = @REPLACE_UNLINK@
REPLACE_UNLINKAT = @REPLACE_UNLINKAT@
REPLACE_UNSETENV = @REPLACE_UNSETENV@
REPLACE_USLEEP = @REPLACE_USLEEP@
REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@
REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
REPLACE_VPRINTF = @REPLACE_VPRINTF@
REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
REPLACE_WCSFTIME = @REPLACE_WCSFTIME@
REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
REPLACE_WCSTOK = @REPLACE_WCSTOK@
REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
REPLACE_WCTOB = @REPLACE_WCTOB@
REPLACE_WCTOMB = @REPLACE_WCTOMB@
REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
REPLACE_WRITE = @REPLACE_WRITE@
SED = @SED@
SERVENT_LIB = @SERVENT_LIB@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
STDALIGN_H = @STDALIGN_H@
STDARG_H = @STDARG_H@
STDBOOL_H = @STDBOOL_H@
STDDEF_H = @STDDEF_H@
STDINT_H = @STDINT_H@
STRIP = @STRIP@
SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@
TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@
UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@
UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@
UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@
UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@
USE_NLS = @USE_NLS@
VALGRIND = @VALGRIND@
VERSION = @VERSION@
WARN_CFLAGS = @WARN_CFLAGS@
WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
WEASY_CFLAGS = @WEASY_CFLAGS@
WERROR_CFLAGS = @WERROR_CFLAGS@
WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@
WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@
WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@
WINT_T_SUFFIX = @WINT_T_SUFFIX@
XGETTEXT = @XGETTEXT@
XGETTEXT_015 = @XGETTEXT_015@
XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
YIELD_LIB = @YIELD_LIB@
abs_aux_dir = @abs_aux_dir@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
gl_LIBOBJS = @gl_LIBOBJS@
gl_LTLIBOBJS = @gl_LTLIBOBJS@
gltests_LIBOBJS = @gltests_LIBOBJS@
gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
gltests_WITNESS = @gltests_WITNESS@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
runstatedir = @runstatedir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
subdirs = @subdirs@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AM_CFLAGS = $(WERROR_CFLAGS) $(WARN_CFLAGS)
AM_CPPFLAGS = -I$(top_srcdir)/gl -I$(top_builddir)/gl \
-I$(top_srcdir)/lib/src -I$(top_builddir)/lib/src \
-DLOCALEDIR=\"$(datadir)/locale\"
gsasl_SOURCES = gsasl.c \
imap.c imap.h smtp.c smtp.h \
callbacks.h callbacks.c internal.h
gsasl_LDADD = ../lib/src/libgsasl.la ../gl/libgl.la \
$(LTLIBREADLINE) $(LTLIBGNUTLS) $(LIBSOCKET) $(LTLIBINTL) \
libgsasl_cmd.la
noinst_LTLIBRARIES = libgsasl_cmd.la
BUILT_SOURCES = gsasl_cmd.c gsasl_cmd.h
libgsasl_cmd_la_SOURCES = $(BUILT_SOURCES) gsasl.ggo
libgsasl_cmd_la_LIBADD = ../gl/libgl.la
libgsasl_cmd_la_CFLAGS =
all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu src/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
$(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
fi; \
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p \
|| test -f $$p1 \
; then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' \
-e 's|.*|.|' \
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
sed 'N;N;N;s,\n, ,g' | \
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
if ($$2 == $$4) files[d] = files[d] " " $$1; \
else { print "f", $$3 "/" $$4, $$1; } } \
END { for (d in files) print "f", d, files[d] }' | \
while read type dir files; do \
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
test -z "$$files" || { \
echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
$(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
} \
; done
uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL)
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-e 's/$$/$(EXEEXT)/' \
`; \
test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(bindir)" && rm -f $$files
clean-binPROGRAMS:
@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
echo " rm -f" $$list; \
rm -f $$list || exit $$?; \
test -n "$(EXEEXT)" || exit 0; \
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
clean-noinstLTLIBRARIES:
-test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
@list='$(noinst_LTLIBRARIES)'; \
locs=`for p in $$list; do echo $$p; done | \
sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
sort -u`; \
test -z "$$locs" || { \
echo rm -f $${locs}; \
rm -f $${locs}; \
}
libgsasl_cmd.la: $(libgsasl_cmd_la_OBJECTS) $(libgsasl_cmd_la_DEPENDENCIES) $(EXTRA_libgsasl_cmd_la_DEPENDENCIES)
$(AM_V_CCLD)$(libgsasl_cmd_la_LINK) $(libgsasl_cmd_la_OBJECTS) $(libgsasl_cmd_la_LIBADD) $(LIBS)
gsasl$(EXEEXT): $(gsasl_OBJECTS) $(gsasl_DEPENDENCIES) $(EXTRA_gsasl_DEPENDENCIES)
@rm -f gsasl$(EXEEXT)
$(AM_V_CCLD)$(LINK) $(gsasl_OBJECTS) $(gsasl_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/callbacks.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gsasl.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/imap.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgsasl_cmd_la-gsasl_cmd.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smtp.Po@am__quote@ # am--include-marker
$(am__depfiles_remade):
@$(MKDIR_P) $(@D)
@echo '# dummy' >$@-t && $(am__mv) $@-t $@
am--depfiles: $(am__depfiles_remade)
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libgsasl_cmd_la-gsasl_cmd.lo: gsasl_cmd.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsasl_cmd_la_CFLAGS) $(CFLAGS) -MT libgsasl_cmd_la-gsasl_cmd.lo -MD -MP -MF $(DEPDIR)/libgsasl_cmd_la-gsasl_cmd.Tpo -c -o libgsasl_cmd_la-gsasl_cmd.lo `test -f 'gsasl_cmd.c' || echo '$(srcdir)/'`gsasl_cmd.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libgsasl_cmd_la-gsasl_cmd.Tpo $(DEPDIR)/libgsasl_cmd_la-gsasl_cmd.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gsasl_cmd.c' object='libgsasl_cmd_la-gsasl_cmd.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgsasl_cmd_la_CFLAGS) $(CFLAGS) -c -o libgsasl_cmd_la-gsasl_cmd.lo `test -f 'gsasl_cmd.c' || echo '$(srcdir)/'`gsasl_cmd.c
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-am
TAGS: tags
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: ctags-am
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-am
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) distdir-am
distdir-am: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) check-am
all-am: Makefile $(PROGRAMS) $(LTLIBRARIES)
installdirs:
for dir in "$(DESTDIR)$(bindir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) install-am
install-exec: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
clean: clean-am
clean-am: clean-binPROGRAMS clean-generic clean-libtool \
clean-noinstLTLIBRARIES mostlyclean-am
distclean: distclean-am
-rm -f ./$(DEPDIR)/callbacks.Po
-rm -f ./$(DEPDIR)/gsasl.Po
-rm -f ./$(DEPDIR)/imap.Po
-rm -f ./$(DEPDIR)/libgsasl_cmd_la-gsasl_cmd.Plo
-rm -f ./$(DEPDIR)/smtp.Po
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am: install-binPROGRAMS
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f ./$(DEPDIR)/callbacks.Po
-rm -f ./$(DEPDIR)/gsasl.Po
-rm -f ./$(DEPDIR)/imap.Po
-rm -f ./$(DEPDIR)/libgsasl_cmd_la-gsasl_cmd.Plo
-rm -f ./$(DEPDIR)/smtp.Po
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-binPROGRAMS
.MAKE: all check install install-am install-exec install-strip
.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \
clean-binPROGRAMS clean-generic clean-libtool \
clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \
distclean-compile distclean-generic distclean-libtool \
distclean-tags distdir dvi dvi-am html html-am info info-am \
install install-am install-binPROGRAMS install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-man install-pdf install-pdf-am \
install-ps install-ps-am install-strip installcheck \
installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags tags-am uninstall uninstall-am uninstall-binPROGRAMS
.PRECIOUS: Makefile
$(BUILT_SOURCES): gsasl.ggo Makefile.am
gengetopt --unamed-opts="HOST [PORT]" \
--no-handle-version --no-handle-help \
--input $< --file-name gsasl_cmd
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:
gsasl-1.10.0/src/Makefile.am 0000644 0000000 0000000 00000003046 13773635253 012435 0000000 0000000 ## Process this file with automake to produce Makefile.in
# Copyright (C) 2002-2021 Simon Josefsson
#
# This file is part of GNU SASL.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program 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
# along with this program. If not, see .
AM_CFLAGS = $(WERROR_CFLAGS) $(WARN_CFLAGS)
AM_CPPFLAGS = -I$(top_srcdir)/gl -I$(top_builddir)/gl \
-I$(top_srcdir)/lib/src -I$(top_builddir)/lib/src
AM_CPPFLAGS += -DLOCALEDIR=\"$(datadir)/locale\"
bin_PROGRAMS = gsasl
gsasl_SOURCES = gsasl.c \
imap.c imap.h smtp.c smtp.h \
callbacks.h callbacks.c internal.h
gsasl_LDADD = ../lib/src/libgsasl.la ../gl/libgl.la \
$(LTLIBREADLINE) $(LTLIBGNUTLS) $(LIBSOCKET) $(LTLIBINTL) \
libgsasl_cmd.la
noinst_LTLIBRARIES = libgsasl_cmd.la
BUILT_SOURCES = gsasl_cmd.c gsasl_cmd.h
libgsasl_cmd_la_SOURCES = $(BUILT_SOURCES) gsasl.ggo
libgsasl_cmd_la_LIBADD = ../gl/libgl.la
libgsasl_cmd_la_CFLAGS =
$(BUILT_SOURCES): gsasl.ggo Makefile.am
gengetopt --unamed-opts="HOST [PORT]" \
--no-handle-version --no-handle-help \
--input $< --file-name gsasl_cmd
gsasl-1.10.0/src/gsasl_cmd.h 0000644 0000000 0000000 00000054411 13773647532 012513 0000000 0000000 /** @file gsasl_cmd.h
* @brief The header file for the command line option parser
* generated by GNU Gengetopt version 2.22.6
* http://www.gnu.org/software/gengetopt.
* DO NOT modify this file, since it can be overwritten
* @author GNU Gengetopt by Lorenzo Bettini */
#ifndef GSASL_CMD_H
#define GSASL_CMD_H
/* If we use autoconf. */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include /* for FILE */
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#ifndef CMDLINE_PARSER_PACKAGE
/** @brief the program name (used for printing errors) */
#define CMDLINE_PARSER_PACKAGE PACKAGE
#endif
#ifndef CMDLINE_PARSER_PACKAGE_NAME
/** @brief the complete program name (used for help and version) */
#ifdef PACKAGE_NAME
#define CMDLINE_PARSER_PACKAGE_NAME PACKAGE_NAME
#else
#define CMDLINE_PARSER_PACKAGE_NAME PACKAGE
#endif
#endif
#ifndef CMDLINE_PARSER_VERSION
/** @brief the program version */
#define CMDLINE_PARSER_VERSION VERSION
#endif
/** @brief Where the command line options are stored */
struct gengetopt_args_info
{
const char *help_help; /**< @brief Print help and exit help description. */
const char *version_help; /**< @brief Print version and exit help description. */
int client_flag; /**< @brief Act as client. (default=on). */
const char *client_help; /**< @brief Act as client. help description. */
int server_flag; /**< @brief Act as server. (default=off). */
const char *server_help; /**< @brief Act as server. help description. */
int client_mechanisms_flag; /**< @brief Write name of supported client mechanisms separated by space to stdout. (default=off). */
const char *client_mechanisms_help; /**< @brief Write name of supported client mechanisms separated by space to stdout. help description. */
int server_mechanisms_flag; /**< @brief Write name of supported server mechanisms separated by space to stdout. (default=off). */
const char *server_mechanisms_help; /**< @brief Write name of supported server mechanisms separated by space to stdout. help description. */
int mkpasswd_flag; /**< @brief Derive password. Provide --mechanism as SCRAM-SHA-1 or SCRAM-SHA-256. The required inputs are password (through --password or read from terminal) and optional inputs are iteration count (through --iteration-count, or defaulting to 65536) and salt (through --salt, or generated randomly). The output is a string of the form \"{mech}count,salt,stored-key,server-key[,salted-password]\" where \"mech\" is the mechanism, \"count\" is the number of times password was hashed, \"salt\" is the provided/generated base64-encoded salt, \"stored-key\" and \"server-key\" are the two derived and base64-encoded server-side keys. When --verbose is provided, \"salted-password\" will be included as the hex-encoded PBKDF2-derived password. (default=off). */
const char *mkpasswd_help; /**< @brief Derive password. Provide --mechanism as SCRAM-SHA-1 or SCRAM-SHA-256. The required inputs are password (through --password or read from terminal) and optional inputs are iteration count (through --iteration-count, or defaulting to 65536) and salt (through --salt, or generated randomly). The output is a string of the form \"{mech}count,salt,stored-key,server-key[,salted-password]\" where \"mech\" is the mechanism, \"count\" is the number of times password was hashed, \"salt\" is the provided/generated base64-encoded salt, \"stored-key\" and \"server-key\" are the two derived and base64-encoded server-side keys. When --verbose is provided, \"salted-password\" will be included as the hex-encoded PBKDF2-derived password. help description. */
char * connect_arg; /**< @brief Connect to TCP server and negotiate on stream instead of stdin/stdout. PORT is the protocol service, or an integer denoting the port, and defaults to 143 (imap) if not specified. Also sets the --hostname default.. */
char * connect_orig; /**< @brief Connect to TCP server and negotiate on stream instead of stdin/stdout. PORT is the protocol service, or an integer denoting the port, and defaults to 143 (imap) if not specified. Also sets the --hostname default. original value given at command line. */
const char *connect_help; /**< @brief Connect to TCP server and negotiate on stream instead of stdin/stdout. PORT is the protocol service, or an integer denoting the port, and defaults to 143 (imap) if not specified. Also sets the --hostname default. help description. */
int application_data_flag; /**< @brief After authentication, read data from stdin and run it through the mechanism's security layer and print it base64 encoded to stdout. The default is to terminate after authentication. (default=on). */
const char *application_data_help; /**< @brief After authentication, read data from stdin and run it through the mechanism's security layer and print it base64 encoded to stdout. The default is to terminate after authentication. help description. */
int imap_flag; /**< @brief Use a IMAP-like logon procedure (client only). Also sets the --service default to 'imap'. (default=off). */
const char *imap_help; /**< @brief Use a IMAP-like logon procedure (client only). Also sets the --service default to 'imap'. help description. */
int smtp_flag; /**< @brief Use a SMTP-like logon procedure (client only). Also sets the --service default to 'smtp'. (default=off). */
const char *smtp_help; /**< @brief Use a SMTP-like logon procedure (client only). Also sets the --service default to 'smtp'. help description. */
char * mechanism_arg; /**< @brief Mechanism to use.. */
char * mechanism_orig; /**< @brief Mechanism to use. original value given at command line. */
const char *mechanism_help; /**< @brief Mechanism to use. help description. */
int no_client_first_flag; /**< @brief Disallow client to send data first (client only). (default=off). */
const char *no_client_first_help; /**< @brief Disallow client to send data first (client only). help description. */
char * anonymous_token_arg; /**< @brief Token for anonymous authentication, usually mail address (ANONYMOUS only).. */
char * anonymous_token_orig; /**< @brief Token for anonymous authentication, usually mail address (ANONYMOUS only). original value given at command line. */
const char *anonymous_token_help; /**< @brief Token for anonymous authentication, usually mail address (ANONYMOUS only). help description. */
char * authentication_id_arg; /**< @brief Identity of credential owner.. */
char * authentication_id_orig; /**< @brief Identity of credential owner. original value given at command line. */
const char *authentication_id_help; /**< @brief Identity of credential owner. help description. */
char * authorization_id_arg; /**< @brief Identity to request service for.. */
char * authorization_id_orig; /**< @brief Identity to request service for. original value given at command line. */
const char *authorization_id_help; /**< @brief Identity to request service for. help description. */
char * password_arg; /**< @brief Password for authentication (insecure for non-testing purposes).. */
char * password_orig; /**< @brief Password for authentication (insecure for non-testing purposes). original value given at command line. */
const char *password_help; /**< @brief Password for authentication (insecure for non-testing purposes). help description. */
char * realm_arg; /**< @brief Realm. Defaults to hostname.. */
char * realm_orig; /**< @brief Realm. Defaults to hostname. original value given at command line. */
const char *realm_help; /**< @brief Realm. Defaults to hostname. help description. */
char * passcode_arg; /**< @brief Passcode for authentication (SECURID only).. */
char * passcode_orig; /**< @brief Passcode for authentication (SECURID only). original value given at command line. */
const char *passcode_help; /**< @brief Passcode for authentication (SECURID only). help description. */
char * service_arg; /**< @brief Set the requested service name (should be a registered GSSAPI host based service name).. */
char * service_orig; /**< @brief Set the requested service name (should be a registered GSSAPI host based service name). original value given at command line. */
const char *service_help; /**< @brief Set the requested service name (should be a registered GSSAPI host based service name). help description. */
char * hostname_arg; /**< @brief Set the name of the server with the requested service.. */
char * hostname_orig; /**< @brief Set the name of the server with the requested service. original value given at command line. */
const char *hostname_help; /**< @brief Set the name of the server with the requested service. help description. */
char * service_name_arg; /**< @brief Set the generic server name in case of a replicated server (DIGEST-MD5 only).. */
char * service_name_orig; /**< @brief Set the generic server name in case of a replicated server (DIGEST-MD5 only). original value given at command line. */
const char *service_name_help; /**< @brief Set the generic server name in case of a replicated server (DIGEST-MD5 only). help description. */
int enable_cram_md5_validate_flag; /**< @brief Validate CRAM-MD5 challenge and response interactively. (default=off). */
const char *enable_cram_md5_validate_help; /**< @brief Validate CRAM-MD5 challenge and response interactively. help description. */
int disable_cleartext_validate_flag; /**< @brief Disable cleartext validate hook, forcing server to prompt for password. (default=off). */
const char *disable_cleartext_validate_help; /**< @brief Disable cleartext validate hook, forcing server to prompt for password. help description. */
char * quality_of_protection_arg; /**< @brief How application payload will be protected. 'qop-auth' means no protection, 'qop-int' means integrity protection, 'qop-conf' means integrity and confidentialiy protection. Currently only used by DIGEST-MD5, where the default is 'qop-int'.. */
char * quality_of_protection_orig; /**< @brief How application payload will be protected. 'qop-auth' means no protection, 'qop-int' means integrity protection, 'qop-conf' means integrity and confidentialiy protection. Currently only used by DIGEST-MD5, where the default is 'qop-int'. original value given at command line. */
const char *quality_of_protection_help; /**< @brief How application payload will be protected. 'qop-auth' means no protection, 'qop-int' means integrity protection, 'qop-conf' means integrity and confidentialiy protection. Currently only used by DIGEST-MD5, where the default is 'qop-int'. help description. */
int iteration_count_arg; /**< @brief Indicate PBKDF2 hash iteration count (SCRAM only). (default='65536'). */
char * iteration_count_orig; /**< @brief Indicate PBKDF2 hash iteration count (SCRAM only). original value given at command line. */
const char *iteration_count_help; /**< @brief Indicate PBKDF2 hash iteration count (SCRAM only). help description. */
char * salt_arg; /**< @brief Indicate PBKDF2 salt as base64-encoded string (SCRAM only).. */
char * salt_orig; /**< @brief Indicate PBKDF2 salt as base64-encoded string (SCRAM only). original value given at command line. */
const char *salt_help; /**< @brief Indicate PBKDF2 salt as base64-encoded string (SCRAM only). help description. */
int starttls_flag; /**< @brief Force use of STARTTLS. The default is to use STARTTLS when available. (default=off). */
const char *starttls_help; /**< @brief Force use of STARTTLS. The default is to use STARTTLS when available. help description. */
int no_starttls_flag; /**< @brief Unconditionally disable STARTTLS. (default=off). */
const char *no_starttls_help; /**< @brief Unconditionally disable STARTTLS. help description. */
int no_cb_flag; /**< @brief Don't use channel bindings from TLS. (default=off). */
const char *no_cb_help; /**< @brief Don't use channel bindings from TLS. help description. */
char * x509_ca_file_arg; /**< @brief File containing one or more X.509 Certificate Authorities certificates in PEM format, used to verify the certificate received from the server. If not specified, verification uses system trust settings. If FILE is the empty string, don't fail on X.509 server certificates verification errors.. */
char * x509_ca_file_orig; /**< @brief File containing one or more X.509 Certificate Authorities certificates in PEM format, used to verify the certificate received from the server. If not specified, verification uses system trust settings. If FILE is the empty string, don't fail on X.509 server certificates verification errors. original value given at command line. */
const char *x509_ca_file_help; /**< @brief File containing one or more X.509 Certificate Authorities certificates in PEM format, used to verify the certificate received from the server. If not specified, verification uses system trust settings. If FILE is the empty string, don't fail on X.509 server certificates verification errors. help description. */
char * x509_cert_file_arg; /**< @brief File containing client X.509 certificate in PEM format. Used together with --x509-key-file to specify the certificate/key pair.. */
char * x509_cert_file_orig; /**< @brief File containing client X.509 certificate in PEM format. Used together with --x509-key-file to specify the certificate/key pair. original value given at command line. */
const char *x509_cert_file_help; /**< @brief File containing client X.509 certificate in PEM format. Used together with --x509-key-file to specify the certificate/key pair. help description. */
char * x509_key_file_arg; /**< @brief Private key for the client X.509 certificate in PEM format. Used together with --x509-key-file to specify the certificate/key pair.. */
char * x509_key_file_orig; /**< @brief Private key for the client X.509 certificate in PEM format. Used together with --x509-key-file to specify the certificate/key pair. original value given at command line. */
const char *x509_key_file_help; /**< @brief Private key for the client X.509 certificate in PEM format. Used together with --x509-key-file to specify the certificate/key pair. help description. */
char * priority_arg; /**< @brief Cipher priority string.. */
char * priority_orig; /**< @brief Cipher priority string. original value given at command line. */
const char *priority_help; /**< @brief Cipher priority string. help description. */
int verbose_flag; /**< @brief Produce verbose output. (default=off). */
const char *verbose_help; /**< @brief Produce verbose output. help description. */
int quiet_flag; /**< @brief Don't produce any diagnostic output. (default=off). */
const char *quiet_help; /**< @brief Don't produce any diagnostic output. help description. */
unsigned int help_given ; /**< @brief Whether help was given. */
unsigned int version_given ; /**< @brief Whether version was given. */
unsigned int client_given ; /**< @brief Whether client was given. */
unsigned int server_given ; /**< @brief Whether server was given. */
unsigned int client_mechanisms_given ; /**< @brief Whether client-mechanisms was given. */
unsigned int server_mechanisms_given ; /**< @brief Whether server-mechanisms was given. */
unsigned int mkpasswd_given ; /**< @brief Whether mkpasswd was given. */
unsigned int connect_given ; /**< @brief Whether connect was given. */
unsigned int application_data_given ; /**< @brief Whether application-data was given. */
unsigned int imap_given ; /**< @brief Whether imap was given. */
unsigned int smtp_given ; /**< @brief Whether smtp was given. */
unsigned int mechanism_given ; /**< @brief Whether mechanism was given. */
unsigned int no_client_first_given ; /**< @brief Whether no-client-first was given. */
unsigned int anonymous_token_given ; /**< @brief Whether anonymous-token was given. */
unsigned int authentication_id_given ; /**< @brief Whether authentication-id was given. */
unsigned int authorization_id_given ; /**< @brief Whether authorization-id was given. */
unsigned int password_given ; /**< @brief Whether password was given. */
unsigned int realm_given ; /**< @brief Whether realm was given. */
unsigned int passcode_given ; /**< @brief Whether passcode was given. */
unsigned int service_given ; /**< @brief Whether service was given. */
unsigned int hostname_given ; /**< @brief Whether hostname was given. */
unsigned int service_name_given ; /**< @brief Whether service-name was given. */
unsigned int enable_cram_md5_validate_given ; /**< @brief Whether enable-cram-md5-validate was given. */
unsigned int disable_cleartext_validate_given ; /**< @brief Whether disable-cleartext-validate was given. */
unsigned int quality_of_protection_given ; /**< @brief Whether quality-of-protection was given. */
unsigned int iteration_count_given ; /**< @brief Whether iteration-count was given. */
unsigned int salt_given ; /**< @brief Whether salt was given. */
unsigned int starttls_given ; /**< @brief Whether starttls was given. */
unsigned int no_starttls_given ; /**< @brief Whether no-starttls was given. */
unsigned int no_cb_given ; /**< @brief Whether no-cb was given. */
unsigned int x509_ca_file_given ; /**< @brief Whether x509-ca-file was given. */
unsigned int x509_cert_file_given ; /**< @brief Whether x509-cert-file was given. */
unsigned int x509_key_file_given ; /**< @brief Whether x509-key-file was given. */
unsigned int priority_given ; /**< @brief Whether priority was given. */
unsigned int verbose_given ; /**< @brief Whether verbose was given. */
unsigned int quiet_given ; /**< @brief Whether quiet was given. */
char **inputs ; /**< @brief unamed options (options without names) */
unsigned inputs_num ; /**< @brief unamed options number */
} ;
/** @brief The additional parameters to pass to parser functions */
struct cmdline_parser_params
{
int override; /**< @brief whether to override possibly already present options (default 0) */
int initialize; /**< @brief whether to initialize the option structure gengetopt_args_info (default 1) */
int check_required; /**< @brief whether to check that all required options were provided (default 1) */
int check_ambiguity; /**< @brief whether to check for options already specified in the option structure gengetopt_args_info (default 0) */
int print_errors; /**< @brief whether getopt_long should print an error message for a bad option (default 1) */
} ;
/** @brief the purpose string of the program */
extern const char *gengetopt_args_info_purpose;
/** @brief the usage string of the program */
extern const char *gengetopt_args_info_usage;
/** @brief the description string of the program */
extern const char *gengetopt_args_info_description;
/** @brief all the lines making the help output */
extern const char *gengetopt_args_info_help[];
/**
* The command line parser
* @param argc the number of command line options
* @param argv the command line options
* @param args_info the structure where option information will be stored
* @return 0 if everything went fine, NON 0 if an error took place
*/
int cmdline_parser (int argc, char **argv,
struct gengetopt_args_info *args_info);
/**
* The command line parser (version with additional parameters - deprecated)
* @param argc the number of command line options
* @param argv the command line options
* @param args_info the structure where option information will be stored
* @param override whether to override possibly already present options
* @param initialize whether to initialize the option structure my_args_info
* @param check_required whether to check that all required options were provided
* @return 0 if everything went fine, NON 0 if an error took place
* @deprecated use cmdline_parser_ext() instead
*/
int cmdline_parser2 (int argc, char **argv,
struct gengetopt_args_info *args_info,
int override, int initialize, int check_required);
/**
* The command line parser (version with additional parameters)
* @param argc the number of command line options
* @param argv the command line options
* @param args_info the structure where option information will be stored
* @param params additional parameters for the parser
* @return 0 if everything went fine, NON 0 if an error took place
*/
int cmdline_parser_ext (int argc, char **argv,
struct gengetopt_args_info *args_info,
struct cmdline_parser_params *params);
/**
* Save the contents of the option struct into an already open FILE stream.
* @param outfile the stream where to dump options
* @param args_info the option struct to dump
* @return 0 if everything went fine, NON 0 if an error took place
*/
int cmdline_parser_dump(FILE *outfile,
struct gengetopt_args_info *args_info);
/**
* Save the contents of the option struct into a (text) file.
* This file can be read by the config file parser (if generated by gengetopt)
* @param filename the file where to save
* @param args_info the option struct to save
* @return 0 if everything went fine, NON 0 if an error took place
*/
int cmdline_parser_file_save(const char *filename,
struct gengetopt_args_info *args_info);
/**
* Print the help
*/
void cmdline_parser_print_help(void);
/**
* Print the version
*/
void cmdline_parser_print_version(void);
/**
* Initializes all the fields a cmdline_parser_params structure
* to their default values
* @param params the structure to initialize
*/
void cmdline_parser_params_init(struct cmdline_parser_params *params);
/**
* Allocates dynamically a cmdline_parser_params structure and initializes
* all its fields to their default values
* @return the created and initialized cmdline_parser_params structure
*/
struct cmdline_parser_params *cmdline_parser_params_create(void);
/**
* Initializes the passed gengetopt_args_info structure's fields
* (also set default values for options that have a default)
* @param args_info the structure to initialize
*/
void cmdline_parser_init (struct gengetopt_args_info *args_info);
/**
* Deallocates the string fields of the gengetopt_args_info structure
* (but does not deallocate the structure itself)
* @param args_info the structure to deallocate
*/
void cmdline_parser_free (struct gengetopt_args_info *args_info);
/**
* Checks that all the required options were specified
* @param args_info the structure to check
* @param prog_name the name of the program that will be used to print
* possible errors
* @return
*/
int cmdline_parser_required (struct gengetopt_args_info *args_info,
const char *prog_name);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* GSASL_CMD_H */
gsasl-1.10.0/src/callbacks.c 0000644 0000000 0000000 00000014437 13773646063 012473 0000000 0000000 /* callbacks.c --- Implementation of gsasl callbacks.
* Copyright (C) 2002-2021 Simon Josefsson
*
* This file is part of GNU SASL.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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
* along with this program. If not, see .
*
*/
#include "internal.h"
#include "callbacks.h"
#include "striconv.h"
#include "readline.h"
#if HAVE_LANGINFO_CODESET
#include /* For nl_langinfo. */
#endif
static char *
locale_to_utf8 (char *str)
{
#if HAVE_LANGINFO_CODESET
if (str)
{
char *from = nl_langinfo (CODESET);
char *q = str_iconv (str, from, "UTF-8");
if (!q)
fprintf (stderr, "warning: Could not convert string to UTF-8...\n");
else
{
free (str);
str = q;
}
}
#endif
return str;
}
static char *
readutf8line (const char *prompt)
{
char *p = readline (prompt);
return locale_to_utf8 (p);
}
char *
readutf8pass (const char *prompt)
{
char *p = getpass (prompt);
return locale_to_utf8 (p);
}
int
callback (Gsasl * ctx _GL_UNUSED, Gsasl_session * sctx, Gsasl_property prop)
{
int rc = GSASL_NO_CALLBACK;
switch (prop)
{
case GSASL_ANONYMOUS_TOKEN:
if (args_info.anonymous_token_arg == NULL)
args_info.anonymous_token_arg =
readutf8line ("Enter anonymous token (e.g., email address): ");
gsasl_property_set (sctx, GSASL_ANONYMOUS_TOKEN,
args_info.anonymous_token_arg);
rc = GSASL_OK;
break;
case GSASL_CB_TLS_UNIQUE:
if (!args_info.no_cb_flag && b64cbtlsunique == NULL
&& args_info.hostname_arg == NULL)
b64cbtlsunique =
readutf8line ("Enter base64 encoded tls-unique channel binding: ");
if (!args_info.no_cb_flag && b64cbtlsunique && *b64cbtlsunique)
gsasl_property_set (sctx, prop, b64cbtlsunique);
rc = GSASL_OK;
break;
case GSASL_PASSWORD:
if (args_info.password_arg == NULL)
args_info.password_arg = readutf8pass ("Enter password: ");
gsasl_property_set (sctx, GSASL_PASSWORD, args_info.password_arg);
rc = GSASL_OK;
break;
case GSASL_PASSCODE:
if (args_info.passcode_arg == NULL)
args_info.passcode_arg = readutf8pass ("Enter passcode: ");
gsasl_property_set (sctx, GSASL_PASSCODE, args_info.passcode_arg);
rc = GSASL_OK;
break;
case GSASL_AUTHID:
if (args_info.authentication_id_arg == NULL)
{
#if HAVE_GETPWUID
uid_t uid;
struct passwd *pw;
uid = getuid ();
pw = getpwuid (uid);
if (pw && pw->pw_name)
{
printf ("Using system username `%s' as "
"authentication identity.\n", pw->pw_name);
args_info.authentication_id_arg = xstrdup (pw->pw_name);
}
else
#endif
args_info.authentication_id_arg =
readutf8line ("Enter authentication ID: ");
}
gsasl_property_set (sctx, GSASL_AUTHID,
args_info.authentication_id_arg);
rc = GSASL_OK;
break;
case GSASL_AUTHZID:
gsasl_property_set (sctx, GSASL_AUTHZID,
args_info.authorization_id_arg);
rc = GSASL_OK;
break;
case GSASL_SERVICE:
if (args_info.service_arg == NULL)
args_info.service_arg =
readutf8line ("Enter GSSAPI service name (e.g. \"imap\"): ");
gsasl_property_set (sctx, GSASL_SERVICE, args_info.service_arg);
rc = GSASL_OK;
break;
case GSASL_HOSTNAME:
if (args_info.hostname_arg == NULL)
args_info.hostname_arg = readutf8line ("Enter hostname of server: ");
gsasl_property_set (sctx, GSASL_HOSTNAME, args_info.hostname_arg);
rc = GSASL_OK;
break;
case GSASL_REALM:
if (args_info.realm_arg == NULL)
args_info.realm_arg =
readutf8line ("Enter realm of server (optional): ");
if (args_info.realm_arg && *args_info.realm_arg)
gsasl_property_set (sctx, GSASL_REALM, args_info.realm_arg);
rc = GSASL_OK;
break;
case GSASL_QOP:
if (args_info.quality_of_protection_arg == NULL)
args_info.quality_of_protection_arg = readutf8line
("Enter quality of protection (optional, e.g. 'qop-int'): ");
if (args_info.quality_of_protection_arg
&& *args_info.quality_of_protection_arg)
gsasl_property_set (sctx, GSASL_QOP,
args_info.quality_of_protection_arg);
rc = GSASL_OK;
break;
case GSASL_VALIDATE_GSSAPI:
{
char *str;
printf ("Authzid: %s\nDisplay Name: %s\n",
gsasl_property_fast (sctx, GSASL_AUTHZID),
gsasl_property_fast (sctx, GSASL_GSSAPI_DISPLAY_NAME));
str = readutf8line ("Validate GSS-API user? (y/n) ");
if (strcmp (str, "y") == 0 || strcmp (str, "Y") == 0)
rc = GSASL_OK;
else
rc = GSASL_AUTHENTICATION_ERROR;
free (str);
}
break;
case GSASL_SCRAM_SALTED_PASSWORD:
break;
case GSASL_SCRAM_ITER:
gsasl_property_set (sctx, GSASL_SCRAM_ITER,
args_info.iteration_count_orig);
rc = GSASL_OK;
break;
case GSASL_SCRAM_SALT:
gsasl_property_set (sctx, GSASL_SCRAM_SALT, args_info.salt_arg);
rc = GSASL_OK;
break;
case GSASL_SAML20_IDP_IDENTIFIER:
{
char *str = readutf8line ("Enter SAML authentication identifier "
"(e.g. \"http://example.org/\"): ");
gsasl_property_set (sctx, GSASL_SAML20_IDP_IDENTIFIER, str);
rc = GSASL_OK;
}
break;
case GSASL_SAML20_AUTHENTICATE_IN_BROWSER:
{
const char *url =
gsasl_property_get (sctx, GSASL_SAML20_REDIRECT_URL);
printf ("Proceed to this URL to authenticate using SAML 2.0:\n%s\n",
url);
rc = GSASL_OK;
}
break;
case GSASL_OPENID20_AUTHENTICATE_IN_BROWSER:
{
const char *url = gsasl_property_get (sctx,
GSASL_OPENID20_REDIRECT_URL);
printf ("Proceed to this URL to authenticate using OpenID 2.0:\n%s\n",
url);
rc = GSASL_OK;
}
break;
default:
fprintf (stderr,
"warning: mechanism requested unsupported property `%u'\n",
prop);
break;
}
return rc;
}
gsasl-1.10.0/src/imap.h 0000644 0000000 0000000 00000002230 13773646063 011473 0000000 0000000 /* imap.h --- Header file for IMAP profile of SASL login.
* Copyright (C) 2002-2021 Simon Josefsson
*
* This file is part of GNU SASL.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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
* along with this program. If not, see .
*
*/
#include "internal.h"
extern int imap_greeting (void);
extern int imap_has_starttls (void);
extern int imap_starttls (void);
extern int imap_select_mechanism (char **mechlist);
extern int imap_authenticate (const char *mech);
extern int imap_step_send (const char *data);
extern int imap_step_recv (char **data);
extern int imap_auth_finish (void);
extern int imap_logout (void);
gsasl-1.10.0/src/gsasl_cmd.c 0000644 0000000 0000000 00000146303 13773647532 012510 0000000 0000000 /*
File autogenerated by gengetopt version 2.22.6
generated with the following command:
gengetopt --unamed-opts=HOST [PORT] --no-handle-version --no-handle-help --input gsasl.ggo --file-name gsasl_cmd
The developers of gengetopt consider the fixed text that goes in all
gengetopt output files to be in the public domain:
we make no copyright claims on it.
*/
/* If we use autoconf. */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include
#include
#include
#ifndef FIX_UNUSED
#define FIX_UNUSED(X) (void) (X) /* avoid warnings for unused params */
#endif
#include
#include "gsasl_cmd.h"
const char *gengetopt_args_info_purpose = "Authenticate user to a server using Simple Authentication and\nSecurity Layer. Currently IMAP and SMTP servers are supported. This\nis a command line interface for the GNU SASL library.";
const char *gengetopt_args_info_usage = "Usage: " CMDLINE_PARSER_PACKAGE " [OPTIONS]... [HOST [PORT]]...";
const char *gengetopt_args_info_versiontext = "";
const char *gengetopt_args_info_description = "";
const char *gengetopt_args_info_help[] = {
" -h, --help Print help and exit",
" -V, --version Print version and exit",
"\nCommands:",
" -c, --client Act as client. (default=on)",
" -s, --server Act as server. (default=off)",
" --client-mechanisms Write name of supported client mechanisms\n separated by space to stdout. (default=off)",
" --server-mechanisms Write name of supported server mechanisms\n separated by space to stdout. (default=off)",
" -k, --mkpasswd Derive password. Provide --mechanism as\n SCRAM-SHA-1 or SCRAM-SHA-256. The required\n inputs are password (through --password or\n read from terminal) and optional inputs are\n iteration count (through --iteration-count,\n or defaulting to 65536) and salt (through\n --salt, or generated randomly). The output\n is a string of the form\n \"{mech}count,salt,stored-key,server-key[,salted-password]\"\n where \"mech\" is the mechanism, \"count\" is\n the number of times password was hashed,\n \"salt\" is the provided/generated\n base64-encoded salt, \"stored-key\" and\n \"server-key\" are the two derived and\n base64-encoded server-side keys. When\n --verbose is provided, \"salted-password\"\n will be included as the hex-encoded\n PBKDF2-derived password. (default=off)",
"\nNetwork options:",
" --connect=HOST[:PORT] Connect to TCP server and negotiate on stream\n instead of stdin/stdout. PORT is the protocol\n service, or an integer denoting the port, and\n defaults to 143 (imap) if not specified. Also\n sets the --hostname default.",
"\nGeneric options:",
" -d, --application-data After authentication, read data from stdin and\n run it through the mechanism's security layer\n and print it base64 encoded to stdout. The\n default is to terminate after authentication.\n (default=on)",
" --imap Use a IMAP-like logon procedure (client only).\n Also sets the --service default to 'imap'.\n (default=off)",
" --smtp Use a SMTP-like logon procedure (client only).\n Also sets the --service default to 'smtp'.\n (default=off)",
" -m, --mechanism=STRING Mechanism to use.",
" --no-client-first Disallow client to send data first (client\n only). (default=off)",
"\nSASL mechanism options (they are prompted for when required):",
" -n, --anonymous-token=STRING Token for anonymous authentication, usually\n mail address (ANONYMOUS only).",
" -a, --authentication-id=STRING\n Identity of credential owner.",
" -z, --authorization-id=STRING Identity to request service for.",
" -p, --password=STRING Password for authentication (insecure for\n non-testing purposes).",
" -r, --realm=STRING Realm. Defaults to hostname.",
" --passcode=NUMBER Passcode for authentication (SECURID only).",
" --service=STRING Set the requested service name (should be a\n registered GSSAPI host based service name).",
" --hostname=STRING Set the name of the server with the requested\n service.",
" --service-name=STRING Set the generic server name in case of a\n replicated server (DIGEST-MD5 only).",
" --enable-cram-md5-validate\n Validate CRAM-MD5 challenge and response\n interactively. (default=off)",
" --disable-cleartext-validate\n Disable cleartext validate hook, forcing server\n to prompt for password. (default=off)",
" --quality-of-protection=TYPE\n How application payload will be protected.\n 'qop-auth' means no protection, 'qop-int'\n means integrity protection, 'qop-conf' means\n integrity and confidentialiy protection.\n Currently only used by DIGEST-MD5, where the\n default is 'qop-int'.",
" --iteration-count=NUMBER Indicate PBKDF2 hash iteration count (SCRAM\n only). (default=`65536')",
" --salt=B64DATA Indicate PBKDF2 salt as base64-encoded string\n (SCRAM only).",
"\nSTARTTLS options:",
" --starttls Force use of STARTTLS. The default is to use\n STARTTLS when available. (default=off)",
" --no-starttls Unconditionally disable STARTTLS.\n (default=off)",
" --no-cb Don't use channel bindings from TLS.\n (default=off)",
" --x509-ca-file=FILE File containing one or more X.509 Certificate\n Authorities certificates in PEM format, used\n to verify the certificate received from the\n server. If not specified, verification uses\n system trust settings. If FILE is the empty\n string, don't fail on X.509 server\n certificates verification errors.",
" --x509-cert-file=FILE File containing client X.509 certificate in PEM\n format. Used together with --x509-key-file\n to specify the certificate/key pair.",
" --x509-key-file=FILE Private key for the client X.509 certificate in\n PEM format. Used together with\n --x509-key-file to specify the\n certificate/key pair.",
" --priority=STRING Cipher priority string.",
"\nOther options:",
" --verbose Produce verbose output. (default=off)",
" --quiet Don't produce any diagnostic output.\n (default=off)",
0
};
typedef enum {ARG_NO
, ARG_FLAG
, ARG_STRING
, ARG_INT
} cmdline_parser_arg_type;
static
void clear_given (struct gengetopt_args_info *args_info);
static
void clear_args (struct gengetopt_args_info *args_info);
static int
cmdline_parser_internal (int argc, char **argv, struct gengetopt_args_info *args_info,
struct cmdline_parser_params *params, const char *additional_error);
static char *
gengetopt_strdup (const char *s);
static
void clear_given (struct gengetopt_args_info *args_info)
{
args_info->help_given = 0 ;
args_info->version_given = 0 ;
args_info->client_given = 0 ;
args_info->server_given = 0 ;
args_info->client_mechanisms_given = 0 ;
args_info->server_mechanisms_given = 0 ;
args_info->mkpasswd_given = 0 ;
args_info->connect_given = 0 ;
args_info->application_data_given = 0 ;
args_info->imap_given = 0 ;
args_info->smtp_given = 0 ;
args_info->mechanism_given = 0 ;
args_info->no_client_first_given = 0 ;
args_info->anonymous_token_given = 0 ;
args_info->authentication_id_given = 0 ;
args_info->authorization_id_given = 0 ;
args_info->password_given = 0 ;
args_info->realm_given = 0 ;
args_info->passcode_given = 0 ;
args_info->service_given = 0 ;
args_info->hostname_given = 0 ;
args_info->service_name_given = 0 ;
args_info->enable_cram_md5_validate_given = 0 ;
args_info->disable_cleartext_validate_given = 0 ;
args_info->quality_of_protection_given = 0 ;
args_info->iteration_count_given = 0 ;
args_info->salt_given = 0 ;
args_info->starttls_given = 0 ;
args_info->no_starttls_given = 0 ;
args_info->no_cb_given = 0 ;
args_info->x509_ca_file_given = 0 ;
args_info->x509_cert_file_given = 0 ;
args_info->x509_key_file_given = 0 ;
args_info->priority_given = 0 ;
args_info->verbose_given = 0 ;
args_info->quiet_given = 0 ;
}
static
void clear_args (struct gengetopt_args_info *args_info)
{
FIX_UNUSED (args_info);
args_info->client_flag = 1;
args_info->server_flag = 0;
args_info->client_mechanisms_flag = 0;
args_info->server_mechanisms_flag = 0;
args_info->mkpasswd_flag = 0;
args_info->connect_arg = NULL;
args_info->connect_orig = NULL;
args_info->application_data_flag = 1;
args_info->imap_flag = 0;
args_info->smtp_flag = 0;
args_info->mechanism_arg = NULL;
args_info->mechanism_orig = NULL;
args_info->no_client_first_flag = 0;
args_info->anonymous_token_arg = NULL;
args_info->anonymous_token_orig = NULL;
args_info->authentication_id_arg = NULL;
args_info->authentication_id_orig = NULL;
args_info->authorization_id_arg = NULL;
args_info->authorization_id_orig = NULL;
args_info->password_arg = NULL;
args_info->password_orig = NULL;
args_info->realm_arg = NULL;
args_info->realm_orig = NULL;
args_info->passcode_arg = NULL;
args_info->passcode_orig = NULL;
args_info->service_arg = NULL;
args_info->service_orig = NULL;
args_info->hostname_arg = NULL;
args_info->hostname_orig = NULL;
args_info->service_name_arg = NULL;
args_info->service_name_orig = NULL;
args_info->enable_cram_md5_validate_flag = 0;
args_info->disable_cleartext_validate_flag = 0;
args_info->quality_of_protection_arg = NULL;
args_info->quality_of_protection_orig = NULL;
args_info->iteration_count_arg = 65536;
args_info->iteration_count_orig = NULL;
args_info->salt_arg = NULL;
args_info->salt_orig = NULL;
args_info->starttls_flag = 0;
args_info->no_starttls_flag = 0;
args_info->no_cb_flag = 0;
args_info->x509_ca_file_arg = NULL;
args_info->x509_ca_file_orig = NULL;
args_info->x509_cert_file_arg = NULL;
args_info->x509_cert_file_orig = NULL;
args_info->x509_key_file_arg = NULL;
args_info->x509_key_file_orig = NULL;
args_info->priority_arg = NULL;
args_info->priority_orig = NULL;
args_info->verbose_flag = 0;
args_info->quiet_flag = 0;
}
static
void init_args_info(struct gengetopt_args_info *args_info)
{
args_info->help_help = gengetopt_args_info_help[0] ;
args_info->version_help = gengetopt_args_info_help[1] ;
args_info->client_help = gengetopt_args_info_help[3] ;
args_info->server_help = gengetopt_args_info_help[4] ;
args_info->client_mechanisms_help = gengetopt_args_info_help[5] ;
args_info->server_mechanisms_help = gengetopt_args_info_help[6] ;
args_info->mkpasswd_help = gengetopt_args_info_help[7] ;
args_info->connect_help = gengetopt_args_info_help[9] ;
args_info->application_data_help = gengetopt_args_info_help[11] ;
args_info->imap_help = gengetopt_args_info_help[12] ;
args_info->smtp_help = gengetopt_args_info_help[13] ;
args_info->mechanism_help = gengetopt_args_info_help[14] ;
args_info->no_client_first_help = gengetopt_args_info_help[15] ;
args_info->anonymous_token_help = gengetopt_args_info_help[17] ;
args_info->authentication_id_help = gengetopt_args_info_help[18] ;
args_info->authorization_id_help = gengetopt_args_info_help[19] ;
args_info->password_help = gengetopt_args_info_help[20] ;
args_info->realm_help = gengetopt_args_info_help[21] ;
args_info->passcode_help = gengetopt_args_info_help[22] ;
args_info->service_help = gengetopt_args_info_help[23] ;
args_info->hostname_help = gengetopt_args_info_help[24] ;
args_info->service_name_help = gengetopt_args_info_help[25] ;
args_info->enable_cram_md5_validate_help = gengetopt_args_info_help[26] ;
args_info->disable_cleartext_validate_help = gengetopt_args_info_help[27] ;
args_info->quality_of_protection_help = gengetopt_args_info_help[28] ;
args_info->iteration_count_help = gengetopt_args_info_help[29] ;
args_info->salt_help = gengetopt_args_info_help[30] ;
args_info->starttls_help = gengetopt_args_info_help[32] ;
args_info->no_starttls_help = gengetopt_args_info_help[33] ;
args_info->no_cb_help = gengetopt_args_info_help[34] ;
args_info->x509_ca_file_help = gengetopt_args_info_help[35] ;
args_info->x509_cert_file_help = gengetopt_args_info_help[36] ;
args_info->x509_key_file_help = gengetopt_args_info_help[37] ;
args_info->priority_help = gengetopt_args_info_help[38] ;
args_info->verbose_help = gengetopt_args_info_help[40] ;
args_info->quiet_help = gengetopt_args_info_help[41] ;
}
void
cmdline_parser_print_version (void)
{
printf ("%s %s\n",
(strlen(CMDLINE_PARSER_PACKAGE_NAME) ? CMDLINE_PARSER_PACKAGE_NAME : CMDLINE_PARSER_PACKAGE),
CMDLINE_PARSER_VERSION);
if (strlen(gengetopt_args_info_versiontext) > 0)
printf("\n%s\n", gengetopt_args_info_versiontext);
}
static void print_help_common(void) {
cmdline_parser_print_version ();
if (strlen(gengetopt_args_info_purpose) > 0)
printf("\n%s\n", gengetopt_args_info_purpose);
if (strlen(gengetopt_args_info_usage) > 0)
printf("\n%s\n", gengetopt_args_info_usage);
printf("\n");
if (strlen(gengetopt_args_info_description) > 0)
printf("%s\n\n", gengetopt_args_info_description);
}
void
cmdline_parser_print_help (void)
{
int i = 0;
print_help_common();
while (gengetopt_args_info_help[i])
printf("%s\n", gengetopt_args_info_help[i++]);
}
void
cmdline_parser_init (struct gengetopt_args_info *args_info)
{
clear_given (args_info);
clear_args (args_info);
init_args_info (args_info);
args_info->inputs = 0;
args_info->inputs_num = 0;
}
void
cmdline_parser_params_init(struct cmdline_parser_params *params)
{
if (params)
{
params->override = 0;
params->initialize = 1;
params->check_required = 1;
params->check_ambiguity = 0;
params->print_errors = 1;
}
}
struct cmdline_parser_params *
cmdline_parser_params_create(void)
{
struct cmdline_parser_params *params =
(struct cmdline_parser_params *)malloc(sizeof(struct cmdline_parser_params));
cmdline_parser_params_init(params);
return params;
}
static void
free_string_field (char **s)
{
if (*s)
{
free (*s);
*s = 0;
}
}
static void
cmdline_parser_release (struct gengetopt_args_info *args_info)
{
unsigned int i;
free_string_field (&(args_info->connect_arg));
free_string_field (&(args_info->connect_orig));
free_string_field (&(args_info->mechanism_arg));
free_string_field (&(args_info->mechanism_orig));
free_string_field (&(args_info->anonymous_token_arg));
free_string_field (&(args_info->anonymous_token_orig));
free_string_field (&(args_info->authentication_id_arg));
free_string_field (&(args_info->authentication_id_orig));
free_string_field (&(args_info->authorization_id_arg));
free_string_field (&(args_info->authorization_id_orig));
free_string_field (&(args_info->password_arg));
free_string_field (&(args_info->password_orig));
free_string_field (&(args_info->realm_arg));
free_string_field (&(args_info->realm_orig));
free_string_field (&(args_info->passcode_arg));
free_string_field (&(args_info->passcode_orig));
free_string_field (&(args_info->service_arg));
free_string_field (&(args_info->service_orig));
free_string_field (&(args_info->hostname_arg));
free_string_field (&(args_info->hostname_orig));
free_string_field (&(args_info->service_name_arg));
free_string_field (&(args_info->service_name_orig));
free_string_field (&(args_info->quality_of_protection_arg));
free_string_field (&(args_info->quality_of_protection_orig));
free_string_field (&(args_info->iteration_count_orig));
free_string_field (&(args_info->salt_arg));
free_string_field (&(args_info->salt_orig));
free_string_field (&(args_info->x509_ca_file_arg));
free_string_field (&(args_info->x509_ca_file_orig));
free_string_field (&(args_info->x509_cert_file_arg));
free_string_field (&(args_info->x509_cert_file_orig));
free_string_field (&(args_info->x509_key_file_arg));
free_string_field (&(args_info->x509_key_file_orig));
free_string_field (&(args_info->priority_arg));
free_string_field (&(args_info->priority_orig));
for (i = 0; i < args_info->inputs_num; ++i)
free (args_info->inputs [i]);
if (args_info->inputs_num)
free (args_info->inputs);
clear_given (args_info);
}
static void
write_into_file(FILE *outfile, const char *opt, const char *arg, const char *values[])
{
FIX_UNUSED (values);
if (arg) {
fprintf(outfile, "%s=\"%s\"\n", opt, arg);
} else {
fprintf(outfile, "%s\n", opt);
}
}
int
cmdline_parser_dump(FILE *outfile, struct gengetopt_args_info *args_info)
{
int i = 0;
if (!outfile)
{
fprintf (stderr, "%s: cannot dump options to stream\n", CMDLINE_PARSER_PACKAGE);
return EXIT_FAILURE;
}
if (args_info->help_given)
write_into_file(outfile, "help", 0, 0 );
if (args_info->version_given)
write_into_file(outfile, "version", 0, 0 );
if (args_info->client_given)
write_into_file(outfile, "client", 0, 0 );
if (args_info->server_given)
write_into_file(outfile, "server", 0, 0 );
if (args_info->client_mechanisms_given)
write_into_file(outfile, "client-mechanisms", 0, 0 );
if (args_info->server_mechanisms_given)
write_into_file(outfile, "server-mechanisms", 0, 0 );
if (args_info->mkpasswd_given)
write_into_file(outfile, "mkpasswd", 0, 0 );
if (args_info->connect_given)
write_into_file(outfile, "connect", args_info->connect_orig, 0);
if (args_info->application_data_given)
write_into_file(outfile, "application-data", 0, 0 );
if (args_info->imap_given)
write_into_file(outfile, "imap", 0, 0 );
if (args_info->smtp_given)
write_into_file(outfile, "smtp", 0, 0 );
if (args_info->mechanism_given)
write_into_file(outfile, "mechanism", args_info->mechanism_orig, 0);
if (args_info->no_client_first_given)
write_into_file(outfile, "no-client-first", 0, 0 );
if (args_info->anonymous_token_given)
write_into_file(outfile, "anonymous-token", args_info->anonymous_token_orig, 0);
if (args_info->authentication_id_given)
write_into_file(outfile, "authentication-id", args_info->authentication_id_orig, 0);
if (args_info->authorization_id_given)
write_into_file(outfile, "authorization-id", args_info->authorization_id_orig, 0);
if (args_info->password_given)
write_into_file(outfile, "password", args_info->password_orig, 0);
if (args_info->realm_given)
write_into_file(outfile, "realm", args_info->realm_orig, 0);
if (args_info->passcode_given)
write_into_file(outfile, "passcode", args_info->passcode_orig, 0);
if (args_info->service_given)
write_into_file(outfile, "service", args_info->service_orig, 0);
if (args_info->hostname_given)
write_into_file(outfile, "hostname", args_info->hostname_orig, 0);
if (args_info->service_name_given)
write_into_file(outfile, "service-name", args_info->service_name_orig, 0);
if (args_info->enable_cram_md5_validate_given)
write_into_file(outfile, "enable-cram-md5-validate", 0, 0 );
if (args_info->disable_cleartext_validate_given)
write_into_file(outfile, "disable-cleartext-validate", 0, 0 );
if (args_info->quality_of_protection_given)
write_into_file(outfile, "quality-of-protection", args_info->quality_of_protection_orig, 0);
if (args_info->iteration_count_given)
write_into_file(outfile, "iteration-count", args_info->iteration_count_orig, 0);
if (args_info->salt_given)
write_into_file(outfile, "salt", args_info->salt_orig, 0);
if (args_info->starttls_given)
write_into_file(outfile, "starttls", 0, 0 );
if (args_info->no_starttls_given)
write_into_file(outfile, "no-starttls", 0, 0 );
if (args_info->no_cb_given)
write_into_file(outfile, "no-cb", 0, 0 );
if (args_info->x509_ca_file_given)
write_into_file(outfile, "x509-ca-file", args_info->x509_ca_file_orig, 0);
if (args_info->x509_cert_file_given)
write_into_file(outfile, "x509-cert-file", args_info->x509_cert_file_orig, 0);
if (args_info->x509_key_file_given)
write_into_file(outfile, "x509-key-file", args_info->x509_key_file_orig, 0);
if (args_info->priority_given)
write_into_file(outfile, "priority", args_info->priority_orig, 0);
if (args_info->verbose_given)
write_into_file(outfile, "verbose", 0, 0 );
if (args_info->quiet_given)
write_into_file(outfile, "quiet", 0, 0 );
i = EXIT_SUCCESS;
return i;
}
int
cmdline_parser_file_save(const char *filename, struct gengetopt_args_info *args_info)
{
FILE *outfile;
int i = 0;
outfile = fopen(filename, "w");
if (!outfile)
{
fprintf (stderr, "%s: cannot open file for writing: %s\n", CMDLINE_PARSER_PACKAGE, filename);
return EXIT_FAILURE;
}
i = cmdline_parser_dump(outfile, args_info);
fclose (outfile);
return i;
}
void
cmdline_parser_free (struct gengetopt_args_info *args_info)
{
cmdline_parser_release (args_info);
}
/** @brief replacement of strdup, which is not standard */
char *
gengetopt_strdup (const char *s)
{
char *result = 0;
if (!s)
return result;
result = (char*)malloc(strlen(s) + 1);
if (result == (char*)0)
return (char*)0;
strcpy(result, s);
return result;
}
int
cmdline_parser (int argc, char **argv, struct gengetopt_args_info *args_info)
{
return cmdline_parser2 (argc, argv, args_info, 0, 1, 1);
}
int
cmdline_parser_ext (int argc, char **argv, struct gengetopt_args_info *args_info,
struct cmdline_parser_params *params)
{
int result;
result = cmdline_parser_internal (argc, argv, args_info, params, 0);
if (result == EXIT_FAILURE)
{
cmdline_parser_free (args_info);
exit (EXIT_FAILURE);
}
return result;
}
int
cmdline_parser2 (int argc, char **argv, struct gengetopt_args_info *args_info, int override, int initialize, int check_required)
{
int result;
struct cmdline_parser_params params;
params.override = override;
params.initialize = initialize;
params.check_required = check_required;
params.check_ambiguity = 0;
params.print_errors = 1;
result = cmdline_parser_internal (argc, argv, args_info, ¶ms, 0);
if (result == EXIT_FAILURE)
{
cmdline_parser_free (args_info);
exit (EXIT_FAILURE);
}
return result;
}
int
cmdline_parser_required (struct gengetopt_args_info *args_info, const char *prog_name)
{
FIX_UNUSED (args_info);
FIX_UNUSED (prog_name);
return EXIT_SUCCESS;
}
static char *package_name = 0;
/**
* @brief updates an option
* @param field the generic pointer to the field to update
* @param orig_field the pointer to the orig field
* @param field_given the pointer to the number of occurrence of this option
* @param prev_given the pointer to the number of occurrence already seen
* @param value the argument for this option (if null no arg was specified)
* @param possible_values the possible values for this option (if specified)
* @param default_value the default value (in case the option only accepts fixed values)
* @param arg_type the type of this option
* @param check_ambiguity @see cmdline_parser_params.check_ambiguity
* @param override @see cmdline_parser_params.override
* @param no_free whether to free a possible previous value
* @param multiple_option whether this is a multiple option
* @param long_opt the corresponding long option
* @param short_opt the corresponding short option (or '-' if none)
* @param additional_error possible further error specification
*/
static
int update_arg(void *field, char **orig_field,
unsigned int *field_given, unsigned int *prev_given,
char *value, const char *possible_values[],
const char *default_value,
cmdline_parser_arg_type arg_type,
int check_ambiguity, int override,
int no_free, int multiple_option,
const char *long_opt, char short_opt,
const char *additional_error)
{
char *stop_char = 0;
const char *val = value;
int found;
char **string_field;
FIX_UNUSED (field);
stop_char = 0;
found = 0;
if (!multiple_option && prev_given && (*prev_given || (check_ambiguity && *field_given)))
{
if (short_opt != '-')
fprintf (stderr, "%s: `--%s' (`-%c') option given more than once%s\n",
package_name, long_opt, short_opt,
(additional_error ? additional_error : ""));
else
fprintf (stderr, "%s: `--%s' option given more than once%s\n",
package_name, long_opt,
(additional_error ? additional_error : ""));
return 1; /* failure */
}
FIX_UNUSED (default_value);
if (field_given && *field_given && ! override)
return 0;
if (prev_given)
(*prev_given)++;
if (field_given)
(*field_given)++;
if (possible_values)
val = possible_values[found];
switch(arg_type) {
case ARG_FLAG:
*((int *)field) = !*((int *)field);
break;
case ARG_INT:
if (val) *((int *)field) = strtol (val, &stop_char, 0);
break;
case ARG_STRING:
if (val) {
string_field = (char **)field;
if (!no_free && *string_field)
free (*string_field); /* free previous string */
*string_field = gengetopt_strdup (val);
}
break;
default:
break;
};
/* check numeric conversion */
switch(arg_type) {
case ARG_INT:
if (val && !(stop_char && *stop_char == '\0')) {
fprintf(stderr, "%s: invalid numeric value: %s\n", package_name, val);
return 1; /* failure */
}
break;
default:
;
};
/* store the original value */
switch(arg_type) {
case ARG_NO:
case ARG_FLAG:
break;
default:
if (value && orig_field) {
if (no_free) {
*orig_field = value;
} else {
if (*orig_field)
free (*orig_field); /* free previous string */
*orig_field = gengetopt_strdup (value);
}
}
};
return 0; /* OK */
}
int
cmdline_parser_internal (
int argc, char **argv, struct gengetopt_args_info *args_info,
struct cmdline_parser_params *params, const char *additional_error)
{
int c; /* Character of the parsed option. */
int error_occurred = 0;
struct gengetopt_args_info local_args_info;
int override;
int initialize;
int check_required;
int check_ambiguity;
package_name = argv[0];
override = params->override;
initialize = params->initialize;
check_required = params->check_required;
check_ambiguity = params->check_ambiguity;
if (initialize)
cmdline_parser_init (args_info);
cmdline_parser_init (&local_args_info);
optarg = 0;
optind = 0;
opterr = params->print_errors;
optopt = '?';
while (1)
{
int option_index = 0;
static struct option long_options[] = {
{ "help", 0, NULL, 'h' },
{ "version", 0, NULL, 'V' },
{ "client", 0, NULL, 'c' },
{ "server", 0, NULL, 's' },
{ "client-mechanisms", 0, NULL, 0 },
{ "server-mechanisms", 0, NULL, 0 },
{ "mkpasswd", 0, NULL, 'k' },
{ "connect", 1, NULL, 0 },
{ "application-data", 0, NULL, 'd' },
{ "imap", 0, NULL, 0 },
{ "smtp", 0, NULL, 0 },
{ "mechanism", 1, NULL, 'm' },
{ "no-client-first", 0, NULL, 0 },
{ "anonymous-token", 1, NULL, 'n' },
{ "authentication-id", 1, NULL, 'a' },
{ "authorization-id", 1, NULL, 'z' },
{ "password", 1, NULL, 'p' },
{ "realm", 1, NULL, 'r' },
{ "passcode", 1, NULL, 0 },
{ "service", 1, NULL, 0 },
{ "hostname", 1, NULL, 0 },
{ "service-name", 1, NULL, 0 },
{ "enable-cram-md5-validate", 0, NULL, 0 },
{ "disable-cleartext-validate", 0, NULL, 0 },
{ "quality-of-protection", 1, NULL, 0 },
{ "iteration-count", 1, NULL, 0 },
{ "salt", 1, NULL, 0 },
{ "starttls", 0, NULL, 0 },
{ "no-starttls", 0, NULL, 0 },
{ "no-cb", 0, NULL, 0 },
{ "x509-ca-file", 1, NULL, 0 },
{ "x509-cert-file", 1, NULL, 0 },
{ "x509-key-file", 1, NULL, 0 },
{ "priority", 1, NULL, 0 },
{ "verbose", 0, NULL, 0 },
{ "quiet", 0, NULL, 0 },
{ 0, 0, 0, 0 }
};
c = getopt_long (argc, argv, "hVcskdm:n:a:z:p:r:", long_options, &option_index);
if (c == -1) break; /* Exit from `while (1)' loop. */
switch (c)
{
case 'h': /* Print help and exit. */
if (update_arg( 0 ,
0 , &(args_info->help_given),
&(local_args_info.help_given), optarg, 0, 0, ARG_NO,
check_ambiguity, override, 0, 0,
"help", 'h',
additional_error))
goto failure;
cmdline_parser_free (&local_args_info);
return 0;
break;
case 'V': /* Print version and exit. */
if (update_arg( 0 ,
0 , &(args_info->version_given),
&(local_args_info.version_given), optarg, 0, 0, ARG_NO,
check_ambiguity, override, 0, 0,
"version", 'V',
additional_error))
goto failure;
cmdline_parser_free (&local_args_info);
return 0;
break;
case 'c': /* Act as client.. */
if (update_arg((void *)&(args_info->client_flag), 0, &(args_info->client_given),
&(local_args_info.client_given), optarg, 0, 0, ARG_FLAG,
check_ambiguity, override, 1, 0, "client", 'c',
additional_error))
goto failure;
break;
case 's': /* Act as server.. */
if (update_arg((void *)&(args_info->server_flag), 0, &(args_info->server_given),
&(local_args_info.server_given), optarg, 0, 0, ARG_FLAG,
check_ambiguity, override, 1, 0, "server", 's',
additional_error))
goto failure;
break;
case 'k': /* Derive password. Provide --mechanism as SCRAM-SHA-1 or SCRAM-SHA-256. The required inputs are password (through --password or read from terminal) and optional inputs are iteration count (through --iteration-count, or defaulting to 65536) and salt (through --salt, or generated randomly). The output is a string of the form \"{mech}count,salt,stored-key,server-key[,salted-password]\" where \"mech\" is the mechanism, \"count\" is the number of times password was hashed, \"salt\" is the provided/generated base64-encoded salt, \"stored-key\" and \"server-key\" are the two derived and base64-encoded server-side keys. When --verbose is provided, \"salted-password\" will be included as the hex-encoded PBKDF2-derived password.. */
if (update_arg((void *)&(args_info->mkpasswd_flag), 0, &(args_info->mkpasswd_given),
&(local_args_info.mkpasswd_given), optarg, 0, 0, ARG_FLAG,
check_ambiguity, override, 1, 0, "mkpasswd", 'k',
additional_error))
goto failure;
break;
case 'd': /* After authentication, read data from stdin and run it through the mechanism's security layer and print it base64 encoded to stdout. The default is to terminate after authentication.. */
if (update_arg((void *)&(args_info->application_data_flag), 0, &(args_info->application_data_given),
&(local_args_info.application_data_given), optarg, 0, 0, ARG_FLAG,
check_ambiguity, override, 1, 0, "application-data", 'd',
additional_error))
goto failure;
break;
case 'm': /* Mechanism to use.. */
if (update_arg( (void *)&(args_info->mechanism_arg),
&(args_info->mechanism_orig), &(args_info->mechanism_given),
&(local_args_info.mechanism_given), optarg, 0, 0, ARG_STRING,
check_ambiguity, override, 0, 0,
"mechanism", 'm',
additional_error))
goto failure;
break;
case 'n': /* Token for anonymous authentication, usually mail address (ANONYMOUS only).. */
if (update_arg( (void *)&(args_info->anonymous_token_arg),
&(args_info->anonymous_token_orig), &(args_info->anonymous_token_given),
&(local_args_info.anonymous_token_given), optarg, 0, 0, ARG_STRING,
check_ambiguity, override, 0, 0,
"anonymous-token", 'n',
additional_error))
goto failure;
break;
case 'a': /* Identity of credential owner.. */
if (update_arg( (void *)&(args_info->authentication_id_arg),
&(args_info->authentication_id_orig), &(args_info->authentication_id_given),
&(local_args_info.authentication_id_given), optarg, 0, 0, ARG_STRING,
check_ambiguity, override, 0, 0,
"authentication-id", 'a',
additional_error))
goto failure;
break;
case 'z': /* Identity to request service for.. */
if (update_arg( (void *)&(args_info->authorization_id_arg),
&(args_info->authorization_id_orig), &(args_info->authorization_id_given),
&(local_args_info.authorization_id_given), optarg, 0, 0, ARG_STRING,
check_ambiguity, override, 0, 0,
"authorization-id", 'z',
additional_error))
goto failure;
break;
case 'p': /* Password for authentication (insecure for non-testing purposes).. */
if (update_arg( (void *)&(args_info->password_arg),
&(args_info->password_orig), &(args_info->password_given),
&(local_args_info.password_given), optarg, 0, 0, ARG_STRING,
check_ambiguity, override, 0, 0,
"password", 'p',
additional_error))
goto failure;
break;
case 'r': /* Realm. Defaults to hostname.. */
if (update_arg( (void *)&(args_info->realm_arg),
&(args_info->realm_orig), &(args_info->realm_given),
&(local_args_info.realm_given), optarg, 0, 0, ARG_STRING,
check_ambiguity, override, 0, 0,
"realm", 'r',
additional_error))
goto failure;
break;
case 0: /* Long option with no short option */
/* Write name of supported client mechanisms separated by space to stdout.. */
if (strcmp (long_options[option_index].name, "client-mechanisms") == 0)
{
if (update_arg((void *)&(args_info->client_mechanisms_flag), 0, &(args_info->client_mechanisms_given),
&(local_args_info.client_mechanisms_given), optarg, 0, 0, ARG_FLAG,
check_ambiguity, override, 1, 0, "client-mechanisms", '-',
additional_error))
goto failure;
}
/* Write name of supported server mechanisms separated by space to stdout.. */
else if (strcmp (long_options[option_index].name, "server-mechanisms") == 0)
{
if (update_arg((void *)&(args_info->server_mechanisms_flag), 0, &(args_info->server_mechanisms_given),
&(local_args_info.server_mechanisms_given), optarg, 0, 0, ARG_FLAG,
check_ambiguity, override, 1, 0, "server-mechanisms", '-',
additional_error))
goto failure;
}
/* Connect to TCP server and negotiate on stream instead of stdin/stdout. PORT is the protocol service, or an integer denoting the port, and defaults to 143 (imap) if not specified. Also sets the --hostname default.. */
else if (strcmp (long_options[option_index].name, "connect") == 0)
{
if (update_arg( (void *)&(args_info->connect_arg),
&(args_info->connect_orig), &(args_info->connect_given),
&(local_args_info.connect_given), optarg, 0, 0, ARG_STRING,
check_ambiguity, override, 0, 0,
"connect", '-',
additional_error))
goto failure;
}
/* Use a IMAP-like logon procedure (client only). Also sets the --service default to 'imap'.. */
else if (strcmp (long_options[option_index].name, "imap") == 0)
{
if (update_arg((void *)&(args_info->imap_flag), 0, &(args_info->imap_given),
&(local_args_info.imap_given), optarg, 0, 0, ARG_FLAG,
check_ambiguity, override, 1, 0, "imap", '-',
additional_error))
goto failure;
}
/* Use a SMTP-like logon procedure (client only). Also sets the --service default to 'smtp'.. */
else if (strcmp (long_options[option_index].name, "smtp") == 0)
{
if (update_arg((void *)&(args_info->smtp_flag), 0, &(args_info->smtp_given),
&(local_args_info.smtp_given), optarg, 0, 0, ARG_FLAG,
check_ambiguity, override, 1, 0, "smtp", '-',
additional_error))
goto failure;
}
/* Disallow client to send data first (client only).. */
else if (strcmp (long_options[option_index].name, "no-client-first") == 0)
{
if (update_arg((void *)&(args_info->no_client_first_flag), 0, &(args_info->no_client_first_given),
&(local_args_info.no_client_first_given), optarg, 0, 0, ARG_FLAG,
check_ambiguity, override, 1, 0, "no-client-first", '-',
additional_error))
goto failure;
}
/* Passcode for authentication (SECURID only).. */
else if (strcmp (long_options[option_index].name, "passcode") == 0)
{
if (update_arg( (void *)&(args_info->passcode_arg),
&(args_info->passcode_orig), &(args_info->passcode_given),
&(local_args_info.passcode_given), optarg, 0, 0, ARG_STRING,
check_ambiguity, override, 0, 0,
"passcode", '-',
additional_error))
goto failure;
}
/* Set the requested service name (should be a registered GSSAPI host based service name).. */
else if (strcmp (long_options[option_index].name, "service") == 0)
{
if (update_arg( (void *)&(args_info->service_arg),
&(args_info->service_orig), &(args_info->service_given),
&(local_args_info.service_given), optarg, 0, 0, ARG_STRING,
check_ambiguity, override, 0, 0,
"service", '-',
additional_error))
goto failure;
}
/* Set the name of the server with the requested service.. */
else if (strcmp (long_options[option_index].name, "hostname") == 0)
{
if (update_arg( (void *)&(args_info->hostname_arg),
&(args_info->hostname_orig), &(args_info->hostname_given),
&(local_args_info.hostname_given), optarg, 0, 0, ARG_STRING,
check_ambiguity, override, 0, 0,
"hostname", '-',
additional_error))
goto failure;
}
/* Set the generic server name in case of a replicated server (DIGEST-MD5 only).. */
else if (strcmp (long_options[option_index].name, "service-name") == 0)
{
if (update_arg( (void *)&(args_info->service_name_arg),
&(args_info->service_name_orig), &(args_info->service_name_given),
&(local_args_info.service_name_given), optarg, 0, 0, ARG_STRING,
check_ambiguity, override, 0, 0,
"service-name", '-',
additional_error))
goto failure;
}
/* Validate CRAM-MD5 challenge and response interactively.. */
else if (strcmp (long_options[option_index].name, "enable-cram-md5-validate") == 0)
{
if (update_arg((void *)&(args_info->enable_cram_md5_validate_flag), 0, &(args_info->enable_cram_md5_validate_given),
&(local_args_info.enable_cram_md5_validate_given), optarg, 0, 0, ARG_FLAG,
check_ambiguity, override, 1, 0, "enable-cram-md5-validate", '-',
additional_error))
goto failure;
}
/* Disable cleartext validate hook, forcing server to prompt for password.. */
else if (strcmp (long_options[option_index].name, "disable-cleartext-validate") == 0)
{
if (update_arg((void *)&(args_info->disable_cleartext_validate_flag), 0, &(args_info->disable_cleartext_validate_given),
&(local_args_info.disable_cleartext_validate_given), optarg, 0, 0, ARG_FLAG,
check_ambiguity, override, 1, 0, "disable-cleartext-validate", '-',
additional_error))
goto failure;
}
/* How application payload will be protected. 'qop-auth' means no protection, 'qop-int' means integrity protection, 'qop-conf' means integrity and confidentialiy protection. Currently only used by DIGEST-MD5, where the default is 'qop-int'.. */
else if (strcmp (long_options[option_index].name, "quality-of-protection") == 0)
{
if (update_arg( (void *)&(args_info->quality_of_protection_arg),
&(args_info->quality_of_protection_orig), &(args_info->quality_of_protection_given),
&(local_args_info.quality_of_protection_given), optarg, 0, 0, ARG_STRING,
check_ambiguity, override, 0, 0,
"quality-of-protection", '-',
additional_error))
goto failure;
}
/* Indicate PBKDF2 hash iteration count (SCRAM only).. */
else if (strcmp (long_options[option_index].name, "iteration-count") == 0)
{
if (update_arg( (void *)&(args_info->iteration_count_arg),
&(args_info->iteration_count_orig), &(args_info->iteration_count_given),
&(local_args_info.iteration_count_given), optarg, 0, "65536", ARG_INT,
check_ambiguity, override, 0, 0,
"iteration-count", '-',
additional_error))
goto failure;
}
/* Indicate PBKDF2 salt as base64-encoded string (SCRAM only).. */
else if (strcmp (long_options[option_index].name, "salt") == 0)
{
if (update_arg( (void *)&(args_info->salt_arg),
&(args_info->salt_orig), &(args_info->salt_given),
&(local_args_info.salt_given), optarg, 0, 0, ARG_STRING,
check_ambiguity, override, 0, 0,
"salt", '-',
additional_error))
goto failure;
}
/* Force use of STARTTLS. The default is to use STARTTLS when available.. */
else if (strcmp (long_options[option_index].name, "starttls") == 0)
{
if (update_arg((void *)&(args_info->starttls_flag), 0, &(args_info->starttls_given),
&(local_args_info.starttls_given), optarg, 0, 0, ARG_FLAG,
check_ambiguity, override, 1, 0, "starttls", '-',
additional_error))
goto failure;
}
/* Unconditionally disable STARTTLS.. */
else if (strcmp (long_options[option_index].name, "no-starttls") == 0)
{
if (update_arg((void *)&(args_info->no_starttls_flag), 0, &(args_info->no_starttls_given),
&(local_args_info.no_starttls_given), optarg, 0, 0, ARG_FLAG,
check_ambiguity, override, 1, 0, "no-starttls", '-',
additional_error))
goto failure;
}
/* Don't use channel bindings from TLS.. */
else if (strcmp (long_options[option_index].name, "no-cb") == 0)
{
if (update_arg((void *)&(args_info->no_cb_flag), 0, &(args_info->no_cb_given),
&(local_args_info.no_cb_given), optarg, 0, 0, ARG_FLAG,
check_ambiguity, override, 1, 0, "no-cb", '-',
additional_error))
goto failure;
}
/* File containing one or more X.509 Certificate Authorities certificates in PEM format, used to verify the certificate received from the server. If not specified, verification uses system trust settings. If FILE is the empty string, don't fail on X.509 server certificates verification errors.. */
else if (strcmp (long_options[option_index].name, "x509-ca-file") == 0)
{
if (update_arg( (void *)&(args_info->x509_ca_file_arg),
&(args_info->x509_ca_file_orig), &(args_info->x509_ca_file_given),
&(local_args_info.x509_ca_file_given), optarg, 0, 0, ARG_STRING,
check_ambiguity, override, 0, 0,
"x509-ca-file", '-',
additional_error))
goto failure;
}
/* File containing client X.509 certificate in PEM format. Used together with --x509-key-file to specify the certificate/key pair.. */
else if (strcmp (long_options[option_index].name, "x509-cert-file") == 0)
{
if (update_arg( (void *)&(args_info->x509_cert_file_arg),
&(args_info->x509_cert_file_orig), &(args_info->x509_cert_file_given),
&(local_args_info.x509_cert_file_given), optarg, 0, 0, ARG_STRING,
check_ambiguity, override, 0, 0,
"x509-cert-file", '-',
additional_error))
goto failure;
}
/* Private key for the client X.509 certificate in PEM format. Used together with --x509-key-file to specify the certificate/key pair.. */
else if (strcmp (long_options[option_index].name, "x509-key-file") == 0)
{
if (update_arg( (void *)&(args_info->x509_key_file_arg),
&(args_info->x509_key_file_orig), &(args_info->x509_key_file_given),
&(local_args_info.x509_key_file_given), optarg, 0, 0, ARG_STRING,
check_ambiguity, override, 0, 0,
"x509-key-file", '-',
additional_error))
goto failure;
}
/* Cipher priority string.. */
else if (strcmp (long_options[option_index].name, "priority") == 0)
{
if (update_arg( (void *)&(args_info->priority_arg),
&(args_info->priority_orig), &(args_info->priority_given),
&(local_args_info.priority_given), optarg, 0, 0, ARG_STRING,
check_ambiguity, override, 0, 0,
"priority", '-',
additional_error))
goto failure;
}
/* Produce verbose output.. */
else if (strcmp (long_options[option_index].name, "verbose") == 0)
{
if (update_arg((void *)&(args_info->verbose_flag), 0, &(args_info->verbose_given),
&(local_args_info.verbose_given), optarg, 0, 0, ARG_FLAG,
check_ambiguity, override, 1, 0, "verbose", '-',
additional_error))
goto failure;
}
/* Don't produce any diagnostic output.. */
else if (strcmp (long_options[option_index].name, "quiet") == 0)
{
if (update_arg((void *)&(args_info->quiet_flag), 0, &(args_info->quiet_given),
&(local_args_info.quiet_given), optarg, 0, 0, ARG_FLAG,
check_ambiguity, override, 1, 0, "quiet", '-',
additional_error))
goto failure;
}
break;
case '?': /* Invalid option. */
/* `getopt_long' already printed an error message. */
goto failure;
default: /* bug: option not considered. */
fprintf (stderr, "%s: option unknown: %c%s\n", CMDLINE_PARSER_PACKAGE, c, (additional_error ? additional_error : ""));
abort ();
} /* switch */
} /* while */
cmdline_parser_release (&local_args_info);
if ( error_occurred )
return (EXIT_FAILURE);
if (optind < argc)
{
int i = 0 ;
int found_prog_name = 0;
/* whether program name, i.e., argv[0], is in the remaining args
(this may happen with some implementations of getopt,
but surely not with the one included by gengetopt) */
i = optind;
while (i < argc)
if (argv[i++] == argv[0]) {
found_prog_name = 1;
break;
}
i = 0;
args_info->inputs_num = argc - optind - found_prog_name;
args_info->inputs =
(char **)(malloc ((args_info->inputs_num)*sizeof(char *))) ;
while (optind < argc)
if (argv[optind++] != argv[0])
args_info->inputs[ i++ ] = gengetopt_strdup (argv[optind-1]) ;
}
return 0;
failure:
cmdline_parser_release (&local_args_info);
return (EXIT_FAILURE);
}
gsasl-1.10.0/src/imap.c 0000644 0000000 0000000 00000007442 13773646063 011500 0000000 0000000 /* imap.c --- Implement IMAP profile of SASL login.
* Copyright (C) 2002-2021 Simon Josefsson
*
* This file is part of GNU SASL.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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
* along with this program. If not, see .
*
*/
#include "imap.h"
int
imap_greeting (void)
{
char *in;
if (!readln (&in))
return 0;
return 1;
}
int
imap_has_starttls (void)
{
char *in;
int has_tls = 0;
if (!writeln (". CAPABILITY"))
return 0;
if (!readln (&in))
return 0;
has_tls = strstr (in, "STARTTLS") != NULL;
if (!readln (&in))
return 0;
return has_tls;
}
int
imap_starttls (void)
{
char *in;
if (!writeln (". STARTTLS"))
return 0;
if (!readln (&in))
return 0;
return 1;
}
int
imap_select_mechanism (char **mechlist)
{
char *in;
if (args_info.server_flag)
{
if (!args_info.quiet_given)
fprintf (stderr, _("Input list of SASL mechanisms:\n"));
if (!readln (&in))
return 0;
*mechlist = in;
}
else
{
if (!writeln (". CAPABILITY"))
return 0;
if (!readln (&in))
return 0;
/* XXX parse IMAP capability line */
*mechlist = in;
if (!readln (&in))
return 0;
}
return 1;
}
int
imap_authenticate (const char *mech)
{
if (args_info.server_flag)
{
if (!args_info.quiet_given)
fprintf (stderr, _("Using mechanism:\n"));
puts (mech);
}
else
{
char *buf;
int rc;
int len;
len = asprintf (&buf, ". AUTHENTICATE %s", mech);
if (len < 0)
return 0;
rc = writeln (buf);
free (buf);
if (!rc)
return 0;
}
return 1;
}
int
imap_step_send (const char *data)
{
char *buf;
int rc;
int len;
if (args_info.server_flag)
len = asprintf (&buf, "+ %s", data);
else
len = asprintf (&buf, "%s", data);
if (len < 0)
return 0;
rc = writeln (buf);
free (buf);
if (!rc)
return 0;
return 1;
}
/* Return 1 on token, 2 on protocol success, 3 on protocol fail, 0 on
errors. */
int
imap_step_recv (char **data)
{
char *p;
if (!readln (data))
return 0;
p = *data;
if (!args_info.server_flag)
{
/* skip untagged responses which can be returned by the server after
authentication (e.g. dovecot returns new '* CAPABILITY' information
before the final '. OK'). */
while (*p == '*')
{
if (!readln (data))
return 0;
p = *data;
}
if (strlen (p) >= 4 && strncmp (p, ". OK", 4) == 0)
return 2;
if (strlen (p) >= 2 && strncmp (p, ". ", 2) == 0)
return 3;
if (strlen (p) >= 2 && strncmp (p, "+ ", 2) == 0)
memmove (&p[0], &p[2], strlen (p) - 1);
/* This is a workaround for servers (e.g., Microsoft Exchange)
that return '+' instead of the correct '+ '. */
else if (strcmp (p, "+\n") == 0)
p[0] = '\0';
else
{
fprintf (stderr, _("warning: server did not return a token\n"));
return 3;
}
}
if (p[strlen (p) - 1] == '\n')
p[strlen (p) - 1] = '\0';
if (p[strlen (p) - 1] == '\r')
p[strlen (p) - 1] = '\0';
return 1;
}
int
imap_logout (void)
{
char *in;
if (!writeln (". LOGOUT"))
return 0;
/* read "* BYE ..." */
if (!readln (&in))
return 0;
free (in);
/* read ". OK ..." */
if (!readln (&in))
return 0;
free (in);
return 1;
}
gsasl-1.10.0/src/callbacks.h 0000644 0000000 0000000 00000002001 13773646063 012460 0000000 0000000 /* callbacks.h --- Prototypes for SASL callbacks.
* Copyright (C) 2002-2021 Simon Josefsson
*
* This file is part of GNU SASL.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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
* along with this program. If not, see .
*
*/
#ifndef CALLBACKS_H
#define CALLBACKS_H
#include /* Gsasl_session_ctx */
extern int callback (Gsasl * ctx, Gsasl_session * sctx, Gsasl_property prop);
extern char *readutf8pass (const char *prompt);
#endif /* CALLBACKS_H */
gsasl-1.10.0/src/smtp.h 0000644 0000000 0000000 00000002230 13773646063 011530 0000000 0000000 /* smtp.h --- Header file for SMTP profile of SASL login.
* Copyright (C) 2002-2021 Simon Josefsson
*
* This file is part of GNU SASL.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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
* along with this program. If not, see .
*
*/
#include "internal.h"
extern int smtp_greeting (void);
extern int smtp_has_starttls (void);
extern int smtp_starttls (void);
extern int smtp_select_mechanism (char **mechlist);
extern int smtp_authenticate (const char *mech);
extern int smtp_step_send (const char *data);
extern int smtp_step_recv (char **data);
extern int smtp_auth_finish (void);
extern int smtp_logout (void);
gsasl-1.10.0/src/smtp.c 0000644 0000000 0000000 00000007220 13773646063 011527 0000000 0000000 /* smtp.c --- Implement SMTP profile of SASL login.
* Copyright (C) 2002-2021 Simon Josefsson
*
* This file is part of GNU SASL.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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
* along with this program. If not, see .
*
*/
#include "smtp.h"
int
smtp_greeting (void)
{
char *in;
if (!readln (&in))
return 0;
return 1;
}
int
smtp_has_starttls (void)
{
char *in;
int has_tls = 0;
if (!writeln ("EHLO [127.0.0.1]"))
return 0;
do
{
if (!readln (&in))
return 0;
#define TLSGREETING "250-STARTTLS"
if (strncmp (in, TLSGREETING, strlen (TLSGREETING)) == 0)
has_tls = 1;
}
while (strncmp (in, "250 ", 4) != 0);
return has_tls;
}
int
smtp_starttls (void)
{
char *in;
if (!writeln ("STARTTLS"))
return 0;
if (!readln (&in))
return 0;
return 1;
}
int
smtp_select_mechanism (char **mechlist)
{
char *in;
if (args_info.server_flag)
{
if (!args_info.quiet_given)
fprintf (stderr, _("Input list of SASL mechanisms:\n"));
if (!readln (&in))
return 0;
*mechlist = in;
}
else
{
if (!writeln ("EHLO [127.0.0.1]"))
return 0;
do
{
if (!readln (&in))
return 0;
#define GREETING1 "250-AUTH "
#define GREETING2 "250 AUTH "
if (strncmp (in, GREETING1, strlen (GREETING1)) == 0)
*mechlist = in + strlen (GREETING1);
else if (strncmp (in, GREETING2, strlen (GREETING2)) == 0)
*mechlist = in + strlen (GREETING2);
}
while (strncmp (in, "250 ", 4) != 0);
}
return 1;
}
int
smtp_authenticate (const char *mech)
{
if (args_info.server_flag)
{
if (!args_info.quiet_given)
fprintf (stderr, _("Using mechanism:\n"));
puts (mech);
}
else
{
char *buf;
int rc;
int len;
len = asprintf (&buf, "AUTH %s", mech);
if (len < 0)
return 0;
rc = writeln (buf);
free (buf);
if (!rc)
return 0;
}
return 1;
}
int
smtp_step_send (const char *data)
{
char *buf;
int rc;
int len;
if (args_info.server_flag)
len = asprintf (&buf, "334 %s", data);
else
len = asprintf (&buf, "%s", data);
if (len < 0)
return 0;
rc = writeln (buf);
free (buf);
if (!rc)
return 0;
return 1;
}
/* Return 1 on token, 2 on protocol success, 3 on protocol fail, 0 on
errors. */
int
smtp_step_recv (char **data)
{
char *p;
if (!readln (data))
return 0;
p = *data;
if (strlen (p) <= 3)
return 0;
if (strncmp (p, "334 ", 4) == 0)
{
memmove (&p[0], &p[4], strlen (p) - 3);
if (p[strlen (p) - 1] == '\n')
p[strlen (p) - 1] = '\0';
if (p[strlen (p) - 1] == '\r')
p[strlen (p) - 1] = '\0';
return 1;
}
if (strncmp (p, "235 ", 4) == 0)
{
/* Never a token here, we don't support additional server
information on success. */
return 2;
}
if (strncmp (p, "535 ", 4) == 0)
return 3;
fprintf (stderr, _("error: could not parse server data:\n%s\n"), p);
return 0;
}
int
smtp_logout (void)
{
char *in;
if (!writeln ("QUIT"))
return 0;
/* read "221 2.0.0 foo closing ..." */
if (!readln (&in))
return 0;
free (in);
return 1;
}
gsasl-1.10.0/NEWS 0000644 0000000 0000000 00000101623 13773650402 010302 0000000 0000000 GNU SASL NEWS -- History of user-visible changes.
Copyright (C) 2002-2021 Simon Josefsson
See the end for copying conditions.
Note that changes to the GNU SASL Library is documented in lib/NEWS.
This file track changes to the remaining, non-library, parts of GNU
SASL. That include the manual, the command line tool, and self tests.
* Version 1.10.0 (released 2021-01-01) [stable]
** This is a new major stable release. Brief changes compared to 1.8.x:
*** SCRAM-SHA-256 and SCRAM-SHA-256-PLUS support per RFC 7677.
*** SCRAM supports password-less usage (StoredKey/ServerKey).
*** New 'gsasl --mkpasswd' command to prepare SCRAM salted/hashed passwords.
*** Final warning that obsolete APIs will be removed.
*** Various cleanups, portability and other bug fixes.
See the entries in NEWS and lib/NEWS covering the 1.9.x branch for details.
* Version 1.9.3 (released 2021-01-01) [beta]
** Fix build/portability problems. GnuTLS >= 3.4 is required.
Thanks to Bruno Haible for reports.
* Version 1.9.2 (released 2020-12-24) [beta]
** gsasl: Don't abort command on some exepected TLS events (for TLS 1.3).
Patch from Enrico Scholz in:
https://lists.gnu.org/archive/html/help-gsasl/2020-08/msg00000.html
** gsasl: Use GnuTLS system trust settings by default for X.509 server
** certificate validation.
Before it was documented behaviour that unless --x509-ca-file was
used, no verification of the server-side certificate was performed.
Now instead it will use the system trust settings, which on properly
configured systems results in verification of the server certificate.
As a result, you may now start to get server certificate verification
errors in situations where you didn't expect them. Use --x509-ca-file
with the empty string ("") as a file name to use the old behaviour to
not abort on server certificate verification failures.
** SCRAM, GS2 and GSSAPI retrieve properties later in
** the authentication process.
Before the property GSASL_CB_TLS_UNIQUE was retrieved during SCRAM
gsasl_client_start() and gsasl_server_start(), and the properties
GSSAPI_SERVICE and GSSAPI_HOSTNAME was retrived during GS2/GSSAPI
gsasl_server_start(). Now they are retrieved during the first call to
gsasl_step().
The only user-visible impact of this should be that 'gsasl
--client-mechanisms' and 'gsasl --server-mechanisms' will now not
query for parameters before giving a list of supported mechanisms,
which arguable gives a better user experience. The downside of this
is that SCRAM-*-PLUS, GS2 and GSSAPI may be advertised even though
completing the server mechanism may not complete.
The problem with calling callbacks in the start() function is that the
callback will have no per-session context at that point, only a global
context, so the only way to give per-session unique callback responses
is to use a separate global handle per session. This was discovered
in the Exim implementation of gsasl with SCRAM that used to request
the GSASL_CB_TLS_UNIQUE property in the start() function. After
noticing this design issue, and writing this self test, it was
discovered that it also happened for the GSSAPI/GS2 server (not
client) mechanism for the GSASL_SERVICE and GSASL_HOSTNAME properties.
Thanks to Jeremy Harris for noticing the problem and discussion, see
https://lists.gnu.org/archive/html/help-gsasl/2020-01/msg00035.html
** gsasl: The --mkpasswd output format follows Dovecot 'doveadm pw'.
** Filenames of images in the manual are now prefixed with 'gsasl-'.
This makes /usr/share/info more understandable, and it is suggested by
at least Debian to do this in upstream.
** Build changes.
Some more compiler warnings used and code fixed. Improved ./configure
diagnostics.
* Version 1.9.1 (released 2020-01-14) [beta]
** gsasl: New --mkpasswd argument to prepare salted/hashed passwords.
Currently mechanisms SCRAM-SHA-1 and SCRAM-SHA-256 are supported. New
parameter --iteration-count to indicate number of PBKDF2 rounds,
default being 65536. New parameter --salt to specify PBKDF2 salt.
* Version 1.9.0 (released 2020-01-03) [beta]
** Client and server support for SCRAM-SHA-256 and SCRAM-SHA-256-PLUS.
** gsasl: If PORT argument is "587" or "submission", SMTP mode is used.
Further, unrecognized PORT arguments will now on raise an error to
specify --smtp or --imap.
* Version 1.8.1 (released 2019-08-02) [stable]
** gsasl: IMAP client code now permits empty SASL tokens prefixed with '+'.
Normally servers should send '+ '. Buggy servers include Microsoft
Exchange. Reported by Adam Sjøgren.
** GSSAPI client: Now retrieves GSASL_AUTHZID for authorization identity.
** GSSAPI client: Can now transmit an empty/missing authorization identity.
See lib/NEWS for more information.
** Build fixes.
Update of gnulib, including how it is bootstrapped.
** i18n: Updated translations.
* Version 1.8.0 (released 2012-05-28) [stable]
** This is a new major stable release. Brief changes compared to 1.6.x:
*** SAML20 support following RFC 6595.
*** OPENID20 support following RFC 6616.
*** Added SMTP server examples (for e.g., SCRAM, SAML20, OPENID20).
*** Various cleanups, portability and other bug fixes.
See the NEWS entries during the 1.7.x branch for details.
* Version 1.7.6 (released 2012-05-23) [beta]
** i18n: Updated translations.
** Build fixes.
* Version 1.7.5 (released 2012-05-22) [beta]
** i18n: Updated translations.
** Build fixes.
* Version 1.7.4 (released 2012-05-16) [alpha]
** Doc fixes and updates for the callback/property change in the library.
See lib/NEWS for details. This affects SAML and OpenID.
** Slight fixes to Windows build script.
* Version 1.7.3 (released 2012-04-03) [alpha]
** The SAML20 mechanism has been updated and is now enabled by default.
** Doc fixes and updates for the callback/property change in the library.
See lib/NEWS for details.
** examples: Added example SMTP server with SAML 2.0 support.
See examples/saml20/README. It uses Lasso as the SAML implementation.
You may disable Lasso by using --without-lasso. Note that Lasso is
only needed for this example server, it is not needed by the GNU SASL
library or command line tools itself.
* Version 1.7.2 (released 2012-03-28) [alpha]
** gsasl: The client lets the server decide when authentication is complete.
Before the client quit from the authentication loop when the local
mechanism was finished, but some mechanisms (OPENID20) have optional
additional round-trips.
** gsasl: Added OPENID20 support.
** gsasl: The --no-cb parameter now avoids even attempting to get the
** channel binding data from GnuTLS.
Apparently this can avoid issues when GnuTLS fails to provide the CB.
** examples: Added stand-alone example SMTP server.
See examples/smtp-server.c. This illustrate how to write a server
using GNU SASL, but it can also be used for interop testing of
clients.
** examples: Added example SMTP server with OpenID 2.0 support.
See examples/openid20/README.
* Version 1.7.1 (released 2012-02-09) [alpha]
** gsasl: Don't crash after getpass() on Mac OS X.
Reported by Wim Lewis .
** gsasl: Ignore untagged responses during IMAP authentication.
Patch from Enrico Scholz .
** tests: Disable the test-poll self-test, it doesn't seem to work on Solaris.
Reported by Dagobert Michelsen .
** libgsasl: Implement OPENID20 mechanism for OpenID authentication.
Following draft-ietf-kitten-sasl-openid-03.
** Demand gettext >= 0.18.1 in order to get newer M4 files.
The old M4 files associated with 0.17 caused problems on Solaris,
which will hopefully be fixed with this. Reported by Dagobert
Michelsen .
** build: Added MinGW build script for Windows binaries, windows/gsasl4win.mk.
** doc: Typo fix in autoconf snippet.
** i18n: Updated translations.
** examples: Added client-xmpp-saml20 and server-xmpp-saml20.
The examples illustrates a sample SAML20 client and server.
* Version 1.7.0 (released 2010-10-22) [alpha]
** Support for SAML20 mechanism as per -01 IETF draft. See lib/NEWS.
Implements draft-ietf-kitten-sasl-saml-01.
** doc: Mention new SAML properties.
** tests: New tests/saml20.c file.
* Version 1.6.1 (released 2011-05-01) [stable]
** build: Demand gettext >= 0.18.1 in order to get newer M4 files.
The old M4 files associated with 0.17 caused problems on Solaris,
which will hopefully be fixed with this. Reported by Dagobert
Michelsen .
** doc: Typo fix in autoconf snippet.
** i18n: Updated translations.
* Version 1.6.0 (released 2010-12-14) [beta]
** No changes since release candidate 1.5.5.
* Version 1.5.5 (released 2010-12-09) [beta]
** gsasl: Add --no-cb to disable use of TLS channel bindings.
** build: Use silent build rules via automake.
Use 'make V=99' to see the command lines used.
* Version 1.5.4 (released 2010-11-14) [beta]
** Update gnulib files.
* Version 1.5.3 (released 2010-11-14) [beta]
** gsasl: Support for TLS channel bindings.
Requires GnuTLS 2.11.4 or later for the gnutls_session_channel_binding
function. Used by the SCRAM-SHA-1-PLUS mechanism.
** doc: Mention new property GSASL_CB_TLS_UNIQUE and SCRAM-SHA-1-PLUS.
** tests: Added self-tests for SCRAM-SHA-1-PLUS.
* Version 1.5.2 (released 2010-09-27) [beta]
** gsasl: Avoid fixed size buffers.
This caused problems on Windows where the BUFSIZ was too small for
some line lengths with GS2-KRB5.
** tests: Fix error strings to be more unique.
** doc: Added section on how to build with MIT Kerberos for Windows.
** doc: Added PDF version of API reference manual.
See doc/reference/gsasl.pdf.
** i18n: Updated translations.
Thanks to Benno Schulenberg.
** Update gnulib files.
* Version 1.5.1 (released 2010-04-21) [beta]
** Update gnulib files.
* Version 1.5.0 (released 2010-03-31) [beta]
** doc: Explain GS2-related changes.
** doc: GTK-DOC manual improved.
Now almost all symbols and types are explained.
** gsasl: Fix crash when getaddrinfo does not get a canonical name.
** gsasl: Improve error message when server rejects authentication.
** tests: Self checks are improved.
* Version 1.4.4 (released 2010-03-25) [stable]
** See lib/NEWS.
* Version 1.4.3 (released 2010-03-25) [stable]
** See lib/NEWS.
* Version 1.4.2 (released 2010-03-15) [stable]
** i18n: Updated translations.
* Version 1.4.1 (released 2010-02-16) [stable]
** gsasl: Improve application data throughput.
Patch from Enrico Scholz in
.
** Improve MinGW builds.
** i18n: Updated German translation.
* Version 1.4.0 (released 2009-11-17) [stable]
** No changes since 1.3.91 release candidate.
The release numbering scheme has changed compared to the last stable
release. In the future we will use version numbers X.Y.Z with even Y
to indicate stable releases and odd Y to indicate experimental
releases. Z is incremented by one for every release on a particular
branch. For example, the next stable release will either be 1.4.1 or
1.6.0 and the next experimental release will be 1.5.0. The intention
is that the stable branches can be used for security bug fixes if/when
there is a need. Other changes or new features will (typically) not
be back-ported to a stable branch but instead will have to wait for
the next stable branch to be released.
* Version 1.3.91 (released 2009-11-06) [experimental]
** doc: Fix doc/cyclo/ output.
* Version 1.3.90 (released 2009-11-06) [experimental]
** tests/crypto: Also test newly added SHA-1 interfaces.
** tests/scram: Also test GSASL_SCRAM_SALTED_PASSWORD case.
This code path triggered a crash in v1.3.
** i18n: Added Finnish translation.
Thanks to Jorma Karvonen .
* Version 1.3 (released 2009-10-08)
** Experimental support for SCRAM-SHA-1 added.
Please test it but don't put it into production use, the RFC have not
been finalized yet. For this reason, the mechanism priority list is
such that SCRAM-SHA-1 will never be selected over any other mechanism
(including PLAIN, CRAM-MD5, and DIGEST-MD5). When it has been tested
further, we'll make SCRAM-SHA-1 the preferred mechanism after GSSAPI.
** gsasl: Fix libintl-related build errors on MinGW.
Tiny patch from "carlo.bramix" .
** doc: Typo fixes to manual.
Based on report by Marco Maggi in
.
** tests: Rewrite basic self test using modern API.
** tests: New self-test 'crypto' to increase code coverage.
* Version 1.2 (released 2009-06-13)
** gsasl: Fix out of bounds write when in IMAP/SMTP mode.
Reported by Enrico Scholz in
.
** doc: Rewritten introduction material.
** doc: Improved sections for the info manual.
We now follow the advice given by the texinfo manual on which
directory categories to use. In particular, libgsasl moved from the
'GNU Libraries' section to the 'Software libraries' as GNU SASL, and
'Invoking gsasl' moved from 'GNU utilities' to 'Security'.
** examples: Removed unneeded 'ctx' parameter from client_authenticate.
** Building with many warning flags now requires --enable-gcc-warnings.
This avoids crying wolf for normal compiles.
** New configure parameters to set packaging specific information.
The parameters are --with-packager, --with-packager-version, and
--with-packager-bug-reports. See
for more
details.
* Version 1.1 (released 2009-03-25)
** gsasl: Reading integrity protected data from server now works.
Before it didn't decode data.
** gsasl: The --quality-of-protection parameter now works.
It was just a dummy before. Only relevant for DIGEST-MD5. Note that
the parameter value have been modified to match the library keywords.
** Only detect sufficiently recent GnuTLS versions.
Version 2.2.x or later is required.
* Version 1.0 (released 2009-01-23)
** gsasl: New parameter --priority to specify GnuTLS priority strings.
Can be used to change TLS settings, which may be needed to talk to
some servers.
** gsasl: Print web page links in --help, per new GNU coding standard.
** tests: New self-test for the gsasl_client_suggest_mechanism function.
** doc: Modernize doxygen configuration.
** doc: Use permissive license for man pages.
** doc: Change license on the manual to GFDLv1.3+.
* Version 0.2.29 (released 2008-10-21)
** gsasl: Don't use poll with POLLOUT to avoid busy-waiting.
Reported by Enrico Scholz .
** doc: Error codes are now extracted using official library APIs.
** doc: Included cyclomatic code complexity charts of the library code.
See doc/cyclo/.
** tests: Add self test of obsolete base64 functions.
** Update gnulib files.
Improves Windows compatibility.
* Version 0.2.28 (released 2008-08-20)
** gsasl: Rewrite to use poll instead of select.
Will allow easier porting to Mingw32 in the future.
** doc: Improve Windows installation instructions in the manual.
** tests: New self test of gsasl_mechanism_name function.
* Version 0.2.27 (released 2008-07-01)
** Fix SASL operations through TLS.
Report and tiny patch from Enrico Scholz
in
.
** Update gnulib files, and include gnulib self-tests.
** Update translations.
* Version 0.2.26 (released 2008-05-05)
** Translations files not stored directly in git to avoid merge conflicts.
This allows us to avoid use of --no-location which makes the
translation teams happier.
** Build fixes for the documentation.
** Update gnulib files.
* Version 0.2.25 (released 2008-03-10)
** gsasl: Fix buffering issue to avoid mixing stdout/stderr outputs.
This would manifest itself when redirecting output to a pipe, such as
when used with Gnus. Reported by Enrico Scholz
, see
.
** Fix non-portable use of brace expansion in makefiles.
* Version 0.2.24 (released 2008-01-15)
** Link self-tests with gnulib, to fix link failures under MinGW.
* Version 0.2.23 (released 2008-01-15)
** Improve CRAM-MD5 self-test to detect if challenges are the same.
** Improve gsasl --help and --version to conform with GNU standards.
** Use gettext 0.17.
** Update gnulib files.
* Version 0.2.22 (released 2007-10-08)
** Development git tree moved to savannah.
See .
** Fix warnings when building the tool 'gsasl'.
** Update gnulib files.
* Version 0.2.21 (released 2007-08-22)
** Fix typos in manual.
Tiny patch from Brad Hards .
** Update gnulib files.
* Version 0.2.20 (released 2007-08-11)
** Update gnulib files.
* Version 0.2.19 (released 2007-08-09)
** Command-line tools, examples, etc are now licensed under the
** GPL version 3 (or later).
The library remains licensed under LGPL version 2.1 (or later).
** Updated documentation as per license change.
** Update gnulib files.
** Update translations.
* Version 0.2.18 (released 2007-06-07)
** Update gnulib files.
Fixes cross-compilation to uClinux.
* Version 0.2.17 (released 2007-06-01)
** GNU SASL is now developed using Git instead of CVS.
A public git mirror is available from .
** Update gnulib files.
** Polish, Swedish and Vietnamese translations updated.
Thanks to Jakub Bogusz, Daniel Nylander, and Clytie Siddall.
* Version 0.2.16 (released 2007-04-20)
** Fix IMAP protocol usage in the 'gsasl' command-line tool server.
** Support GSSAPI server in 'gsasl' command-line tool.
** Add self-test of the gsasl_check_version API.
** Translation updates.
** Update of gnulib files.
** Now uses autoconf 2.61, automake 1.10, gettext 0.16.1.
* Version 0.2.15 (released 2006-08-22)
** Changed libgsasl shared library version.
The shared library version was not incremented correctly in the last
release, even though new APIs were added.
* Version 0.2.14 (released 2006-08-19)
** New section "Requirements" in the manual, lists the external components.
Suggested by James Mansion.
** Update of gnulib files.
* Version 0.2.13 (released 2006-06-14)
** Update of gnulib files.
Further improves portability to MinGW.
** Various improvements in the manuals.
** The tests are run under valgrind, if it is installed.
Use --disable-valgrind-tests to unconditionally disable this. It is
disabled by default for cross compiles.
** Various minor fixes.
* Version 0.2.12 (released 2006-03-08)
** Update of gnulib files.
Improves portability to Mingw32.
* Version 0.2.11 (released 2006-02-07)
** Ported to Windows by cross-compiling using Mingw32.
Using Debian's mingw32 compiler, you can build it for Windows by invoking
`./configure --host=i586-mingw32msvc --disable-gssapi'.
** Update of gnulib files.
* Version 0.2.10 (released 2005-10-23)
** Work around bug in GnuTLS that made the command line tool exit after
** failing to write a zero length message to the peer.
** Don't use GnuTLS if gnutls_certificate_verify_peers2 isn't present.
** Update of gnulib files.
* Version 0.2.9 (released 2005-10-07)
** Update of gnulib files.
* Version 0.2.8 (released 2005-09-08)
** The gsasl tool now support STARTTLS for IMAP and SMTP using GnuTLS.
** The --client and --server parameters for the gsasl tool now work properly.
** The --client and --server stdin/stdout modes now use the readline library.
** Fixed build problems in getpass on uClibc and Mingw32 platforms.
** Kinyarwanda translation added.
* Version 0.2.7 (released 2005-08-25)
** Fix build problems when cross-compiling to uClibc and Mingw32 platforms.
** Detecting and using the readline library has been improved.
* Version 0.2.6 (released 2005-08-08)
** The gsasl tool now try to connect to all addresses for a server name.
** The help-gsasl@gnu.org mailing list is now mentioned in documentation.
** The license template in files were updated with the new FSF address.
** Update of gnulib files.
* Version 0.2.5 (released 2005-02-08)
** Added self test of EXTERNAL mechanism.
** Vietnamese translation added, thanks to Clytie Siddall.
* Version 0.2.4 (released 2005-01-01)
** The CRAM-MD5 mechanism is now preferred over DIGEST-MD5.
This decision was based on recent public research that suggest MD5 is
broken, while HMAC-MD5 not immediately compromised, and the lack of
public analysis on what consequences the MD5 break have for
DIGEST-MD5. Support for CRAM-SHA1 is under investigation, to enable
users to avoid MD5 completely
** Fixed a bug that prevented SMTP client from working.
** New configure option --disable-obsolete to remove backwards compatibility.
This is mostly intended to be used when compiling for platforms with
constrained memory/space resources.
** DIGEST-MD5 rewritten and enabled by default (see lib/NEWS for details).
** Command line tool now query for realm, hostname and service name properly.
** Documentation updates and improvements.
** Self test improvements.
** Update of gnulib files.
* Version 0.2.3 (released 2004-12-15)
** Fix example code to handle base64 encoded data properly.
** DIGEST-MD5 is disabled by default, pending a rewrite for the new API.
** Command line tool uses new callback interface to the library.
** Command line tool uses "iconvme" from gnulib for UTF-8 string conversion.
** Server mode in the command line tool does not work currently.
It is unclear if this feature was ever that useful. If there are no
objections, it will be removed completely in future versions.
** Documentation fixes.
** Fix self test bugs.
* Version 0.2.2 (released 2004-11-29)
** Update of gnulib files.
* Version 0.2.1 (released 2004-11-19)
** Documentation fixes; the old callback API functions are marked as obsolete.
* Version 0.2.0 (released 2004-11-07)
** Added new directory examples/ with complete examples for new API.
** Documentation improvements.
For example, you can now browse the GNU SASL API manual using DevHelp.
** Update of gnulib files.
** More self tests.
** Translation fixes.
* Version 0.1.4 (released 2004-08-08)
** Revamp of gnulib compatibility files.
** More translations.
German (by Roland Illig), Basque (by Mikel Olasagasti), French (by
Michel Robitaille), Irish (by Kevin Patrick Scannell), Dutch (by Elros
Cyriatan), Polish (by Jakub Bogusz), Romanian (by Laurentiu Buzdugan),
and Serbian (by Aleksandar Jelenak).
* Version 0.1.3 (released 2004-08-04)
** Command line tool support IPv6 (and other protocol families).
Requires that your system has `getaddrinfo'.
** Command line behaviour for gsasl tool improved.
The --client and --imap parameters are now the default. The --connect
host and port can now be specified directly. If --authentication-id
is not specified, the username of the user invoking gsasl is used
(i.e., getpwuid(getuid)->pw_name). Alltogether, this allows simple
usage, as in `gsasl mail.example.com' to connect, via IMAP, to
mail.example.com.
* Version 0.1.2 (released 2004-07-16)
** The SMTP mode in `gsasl' should now work.
** Cross compile builds should work.
It should work for any sane cross compile target, but the only tested
platform is uClibc/uClinux on Motorola Coldfire.
** The GNU Readline library is used to read data, if available.
** Passwords read from stdin are not echoed to the terminal.
* Version 0.1.1 (released 2004-06-26)
** In the command line client, the default quality of protection is now none.
* Version 0.1.0 (released 2004-04-16)
** The library re-licensed to LGPL and distributed as a separate package.
This means a fork of this NEWS file, all the entries below relate to
the combined work of earlier versions. New entries above does not
document user visible changes for the library ("libgsasl"), for that
see NEWS in the lib/ sub-directory, which is also distributed as a
stand-alone package.
* Version 0.0.14 (released 2004-01-22)
** Moved all mechanism specific code into sub-directories of lib/.
Each backend is built into its own library (e.g., libgsasl-plain.so),
to facilitate future possible use of dlopen to dynamically load
backends.
** Moved compatibility files (getopt*) to gl/, and added more (strdup*).
* Version 0.0.13 (released 2004-01-17)
** Nettle (the crypto functionality, crypto/) has been updated.
This fixes two portability issues, the new code should work on
platforms that doesn't have inttypes.h and alloca.
* Version 0.0.12 (released 2004-01-15)
** Protocol line parser in 'gsasl' tool more reliable.
Earlier it assumed two lines were sent in one packet in one place, and
sent as two packets in another place.
** Various bugfixes.
* Version 0.0.11 (released 2004-01-06)
** The client part of CRAM-MD5 now uses SASLprep instead of NFKC.
This aligns with draft-ietf-sasl-crammd5-01.
** The CRAM-MD5 challenge string now conform to the proper syntax.
** The string preparation (SASLprep and trace) functions now work correctly.
** DocBook manuals no longer included.
The reason is that recent DocBook tools from the distribution I use
(Debian) fails with an error. DocBook manuals may be included in the
future, if I can get the tools to work.
** API and ABI modifications.
GSASL_SASLPREP_ERROR: ADD.
* Version 0.0.10 (released 2003-11-22)
** The CRAM-MD5 server now reject invalid passwords.
The logic flaw was introduced in 0.0.9, after blindly making code
changes to shut up valgrind just before the release.
** Various build improvements.
Pkg-config is no longer needed. GTK-DOC is only used if present.
* Version 0.0.9 (released 2003-11-21)
** Command line client can talk to SMTP servers with --smtp.
** DocBook manuals in XML, PDF, PostScript, ASCII and HTML formats included.
** Token parser in DIGEST-MD5 fixed, improve interoperability of DIGEST-MD5.
** Libgcrypt >= 1.1.42 is used if available (for CRAM-MD5 and DIGEST-MD5).
The previous libgcrypt API is no longer supported.
** CRAM-MD5 and DIGEST-MD5 no longer require libgcrypt (but can still use it).
If libgcrypt 1.1.42 or later is not found, it uses a minimalistic
cryptographic library based on Nettle, from crypto/. Currently only
MD5 and HMAC-MD5 is needed, making a dependence on libgcrypt overkill.
** Listing supported server mechanisms with gsasl_server_mechlist work.
** Autoconf 2.59, Automake 1.8 beta, Libtool CVS used.
** Source code for each SASL mechanism moved to its own sub-directory in lib/.
** The command line interface now uses getopt instead of argp.
The reason is portability, this also means we no longer use gnulib.
** API and ABI modifications.
gsasl_randomize: ADD.
gsasl_md5: ADD.
gsasl_hmac_md5: ADD.
gsasl_hexdump: REMOVED. Never intended to be exported.
gsasl_step: ADD.
gsasl_step64: ADD.
gsasl_client_step: DEPRECATED: use gsasl_step instead.
gsasl_server_step: DEPRECATED: use gsasl_step instead.
gsasl_client_step_base64: DEPRECATED: use gsasl_step64 instead.
gsasl_server_step_base64: DEPRECATED: use gsasl_step64 instead.
gsasl_finish: ADD.
gsasl_client_finish: DEPRECATED: use gsasl_finish instead.
gsasl_server_finish: DEPRECATED: use gsasl_finish instead.
gsasl_ctx_get: ADD.
gsasl_client_ctx_get: DEPRECATED: use gsasl_ctx_get instead.
gsasl_server_ctx_get: DEPRECATED: use gsasl_ctx_get instead.
gsasl_appinfo_get: ADD.
gsasl_appinfo_set: ADD.
gsasl_client_application_data_get: DEPRECATED: use gsasl_appinfo_get instead.
gsasl_client_application_data_set: DEPRECATED: use gsasl_appinfo_set instead.
gsasl_server_application_data_get: DEPRECATED: use gsasl_appinfo_get instead.
gsasl_server_application_data_set: DEPRECATED: use gsasl_appinfo_set instead.
Gsasl: ADD.
Gsasl_ctx: DEPRECATED: use Gsasl instead.
Gsasl_session: ADD.
Gsasl_session_ctx: DEPRECATED: use Gsasl_session instead.
GSASL_CRYPTO_ERROR: ADD, replaces deprecated GSASL_LIBGCRYPT_ERROR.
GSASL_LIBGCRYPT_ERROR: DEPRECATED: use GSASL_CRYPTO_ERROR instead.
GSASL_KERBEROS_V5_INTERNAL_ERROR: ADD, replaces deprecated GSASL_SHISHI_ERROR.
GSASL_SHISHI_ERROR: DEPRECATED: use GSASL_KERBEROS_V5_INTERNAL_ERROR instead.
GSASL_INVALID_HANDLE: ADD.
* Version 0.0.8 (released 2003-10-11)
** Improved GSSAPI implementation detection.
Auto detection should work, unless you have both MIT and Heimdal, or
wish to override the default that prefer GSS over Heimdal over MIT.
In that case, use --enable-gssapi=mit or --enable-gssapi=heimdal.
** GNU SASL contain APIs for internationalized string processing via SASLprep.
You no longer have to use Libidn directly.
** Man pages for all public functions are included.
** GNULib is used for compatibility functions.
The directory gl/ is dedicated for GNULib functions, and replace the
earlier ad-hoc usage of argp, memset, etc.
** GNU SASL will be C89 compatible.
The library itself (lib/*) only use C89. The remaining parts (src/
and tests/) can use C89 and any functionality from GNULib. This
decision may be revised in the future, if it turns out there are
problems with this.
** Improvements for embedded or otherwise limited systems.
The math library (-lm) is no longer required. All client code can be
disabled by --disable-client, and all server code can be disabled by
--disable-server. The internationalized string processing library can
be disabled by --without-stringprep.
** Gettext 0.12.1 and Libtool 1.5 is used.
** Libgcrypt from CVS (1.1.42) is not supported.
Recent libgcrypt is API incompatible with earlier released versions.
If a too recent version is installed, it will not be used.
** Fix command line tool '--connect --imap' on Solaris.
** Bug fixes.
** API and ABI modifications.
Gsasl_client_callback_maxbuf: CHANGED: 'int' was replaced with 'size_t'.
Gsasl_server_callback_maxbuf: CHANGED: 'int' was replaced with 'size_t'.
gsasl_client_mechlist: NEW.
gsasl_server_mechlist: NEW.
gsasl_client_listmech: DEPRECATED: use gsasl_client_mechlist instead.
gsasl_server_listmech: DEPRECATED: use gsasl_server_mechlist instead.
gsasl_stringprep_nfkc: NEW.
gsasl_stringprep_saslprep: NEW.
gsasl_stringprep_trace: NEW.
* Version 0.0.7 (released 2003-06-02)
** Two new GSS libraries supported for the GSS-API mechanism.
See http://josefsson.org/gss/ for GSS, which uses Shishi for Kerberos 5.
See http://www.pdc.kth.se/heimdal/ for Heimdal (Kerberos 5).
** Bug fixes.
* Version 0.0.6 (released 2003-03-17)
** Gettext not included.
Due to some conflicts between libtool and gettext, if you want i18n on
platforms that does not already have a useful gettext implementation,
you must install GNU gettext before building this package. If you
don't care about i18n, this package should work fine (except for i18n,
of course).
** Rudimentary support for KERBEROS_V5.
Only enable if you want to write code. This adds two new API errors;
GSASL_KERBEROS_V5_INIT_ERROR, GSASL_SHISHI_ERROR.
** Added API function: gsasl_client_callback_realm_set.
Specifies which realm the client belongs to.
** Bugfixes.
User visible aspects includes not building the API Reference Manual
with GTK-DOC by default, if you want it use configure parameter
--enable-gtk-doc.
* Version 0.0.5 (released 2003-01-27)
** Command line application "gsasl" now supports --imap and --connect.
The --imap parameter makes it use a IMAP-like negotiation on
stdin/stdout. The --connect parameter makes it connect to a host over
TCP, and talk to it instead of stdin/stdout. This allows it to be
used as a simple test tool to connect to IMAP servers. Currently
integrity and confidentiality is not working properly, so if you use
DIGEST-MD5 you currently have to specify --quality-of-protection=auth.
** Texinfo documentation added for command line tool.
** Libgcrypt initialization no longer causes a warning to be printed.
** Added API reference manual in HTML format, generated using GTK-DOC.
See doc/reference/, in particular doc/reference/html/index.html.
** GNU Libidn replaces Libstringprep.
Although it is still stored in the libstringprep/ directory for CVS
reasons.
** Bug fixes for DIGEST-MD5 and GSSAPI.
* Version 0.0.4 (released 2002-12-13)
** License changed to GPL.
** Official GNU project.
* Version 0.0.3 (released 2002-12-05)
** New gsasl arguments --application-data and --no-client-first.
** Bug fixes (client sends first, memory leaks, compiler warnings, more).
* Version 0.0.2 (released 2002-11-07)
** Includes a copy of libstringprep 0.0.2 for Unicode NFKC
normalization and locale charset to UTF-8 string conversion, and
preparation for the future if a SASL Stringprep profile is created.
If libstringprep is already installed, it is used by default. You can
force the use of the internal version with
--without-system-libstringprep.
** Uses pkg-config instead of libgsasl.m4 + libgsasl-config.in, and
for finding libntlm (requires libntlm 0.3.1 or later).
** Self tests for several mechanisms.
** The API now allows mechanisms to return data even when returning
GSASL_OK (earlier only on GSASL_NEEDS_MORE).
** Bug fixes.
* Version 0.0.1 (released 2002-10-12)
** APIs for integrity and confidentiality protection of application
payload data.
** DIGEST-MD5 support for integrity protection.
* Version 0.0.0 (released 2002-10-07)
** Initial release.
----------------------------------------------------------------------
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright
notice and this notice are preserved.
;;; Local Variables: ***
;;; mode:outline ***
;;; mode:flyspell ***
;;; End: ***
gsasl-1.10.0/gtk-doc.make 0000644 0000000 0000000 00000025040 13773647247 012005 0000000 0000000 # -*- mode: makefile -*-
#
# gtk-doc.make - make rules for gtk-doc
# Copyright (C) 2003 James Henstridge
# 2004-2007 Damon Chaplin
# 2007-2017 Stefan Sauer
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program 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
# along with this program. If not, see .
####################################
# Everything below here is generic #
####################################
if GTK_DOC_USE_LIBTOOL
GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
GTKDOC_RUN = $(LIBTOOL) --mode=execute
else
GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS)
GTKDOC_RUN =
endif
# We set GPATH here; this gives us semantics for GNU make
# which are more like other make's VPATH, when it comes to
# whether a source that is a target of one rule is then
# searched for in VPATH/GPATH.
#
GPATH = $(srcdir)
TARGET_DIR=$(HTML_DIR)/$(DOC_MODULE)
SETUP_FILES = \
$(content_files) \
$(expand_content_files) \
$(DOC_MAIN_SGML_FILE) \
$(DOC_MODULE)-sections.txt \
$(DOC_MODULE)-overrides.txt
EXTRA_DIST = \
$(HTML_IMAGES) \
$(SETUP_FILES)
DOC_STAMPS=setup-build.stamp scan-build.stamp sgml-build.stamp \
html-build.stamp pdf-build.stamp \
sgml.stamp html.stamp pdf.stamp
SCANOBJ_FILES = \
$(DOC_MODULE).args \
$(DOC_MODULE).hierarchy \
$(DOC_MODULE).interfaces \
$(DOC_MODULE).prerequisites \
$(DOC_MODULE).signals
REPORT_FILES = \
$(DOC_MODULE)-undocumented.txt \
$(DOC_MODULE)-undeclared.txt \
$(DOC_MODULE)-unused.txt
gtkdoc-check.test: Makefile
$(AM_V_GEN)echo "#!/bin/sh -e" > $@; \
echo "$(GTKDOC_CHECK_PATH) || exit 1" >> $@; \
chmod +x $@
CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) gtkdoc-check.test
if GTK_DOC_BUILD_HTML
HTML_BUILD_STAMP=html-build.stamp
else
HTML_BUILD_STAMP=
endif
if GTK_DOC_BUILD_PDF
PDF_BUILD_STAMP=pdf-build.stamp
else
PDF_BUILD_STAMP=
endif
all-gtk-doc: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
.PHONY: all-gtk-doc
if ENABLE_GTK_DOC
all-local: all-gtk-doc
endif
docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP)
$(REPORT_FILES): sgml-build.stamp
#### setup ####
GTK_DOC_V_SETUP=$(GTK_DOC_V_SETUP_@AM_V@)
GTK_DOC_V_SETUP_=$(GTK_DOC_V_SETUP_@AM_DEFAULT_V@)
GTK_DOC_V_SETUP_0=@echo " DOC Preparing build";
setup-build.stamp:
-$(GTK_DOC_V_SETUP)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
files=`echo $(SETUP_FILES) $(DOC_MODULE).types`; \
if test "x$$files" != "x" ; then \
for file in $$files ; do \
destdir=`dirname $(abs_builddir)/$$file`; \
test -d "$$destdir" || mkdir -p "$$destdir"; \
test -f $(abs_srcdir)/$$file && \
cp -pf $(abs_srcdir)/$$file $(abs_builddir)/$$file || true; \
done; \
fi; \
fi
$(AM_V_at)touch setup-build.stamp
#### scan ####
GTK_DOC_V_SCAN=$(GTK_DOC_V_SCAN_@AM_V@)
GTK_DOC_V_SCAN_=$(GTK_DOC_V_SCAN_@AM_DEFAULT_V@)
GTK_DOC_V_SCAN_0=@echo " DOC Scanning header files";
GTK_DOC_V_INTROSPECT=$(GTK_DOC_V_INTROSPECT_@AM_V@)
GTK_DOC_V_INTROSPECT_=$(GTK_DOC_V_INTROSPECT_@AM_DEFAULT_V@)
GTK_DOC_V_INTROSPECT_0=@echo " DOC Introspecting gobjects";
scan-build.stamp: setup-build.stamp $(HFILE_GLOB) $(CFILE_GLOB)
$(GTK_DOC_V_SCAN)_source_dir='' ; \
for i in $(DOC_SOURCE_DIR) ; do \
_source_dir="$${_source_dir} --source-dir=$$i" ; \
done ; \
gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES)
$(GTK_DOC_V_INTROSPECT)if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \
scanobj_options=""; \
gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \
if test "$$?" = "0"; then \
if test "x$(V)" = "x1"; then \
scanobj_options="--verbose"; \
fi; \
fi; \
CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \
gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \
else \
for i in $(SCANOBJ_FILES) ; do \
test -f $$i || touch $$i ; \
done \
fi
$(AM_V_at)touch scan-build.stamp
$(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp
@true
#### xml ####
GTK_DOC_V_XML=$(GTK_DOC_V_XML_@AM_V@)
GTK_DOC_V_XML_=$(GTK_DOC_V_XML_@AM_DEFAULT_V@)
GTK_DOC_V_XML_0=@echo " DOC Building XML";
sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(HFILE_GLOB) $(CFILE_GLOB) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files) xml/gtkdocentities.ent
$(GTK_DOC_V_XML)_source_dir='' ; \
for i in $(DOC_SOURCE_DIR) ; do \
_source_dir="$${_source_dir} --source-dir=$$i" ; \
done ; \
gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS)
$(AM_V_at)touch sgml-build.stamp
sgml.stamp: sgml-build.stamp
@true
$(DOC_MAIN_SGML_FILE): sgml-build.stamp
@true
xml/gtkdocentities.ent: Makefile
$(GTK_DOC_V_XML)$(MKDIR_P) $(@D) && ( \
echo ""; \
echo ""; \
echo ""; \
echo ""; \
echo ""; \
echo ""; \
echo ""; \
) > $@
#### html ####
GTK_DOC_V_HTML=$(GTK_DOC_V_HTML_@AM_V@)
GTK_DOC_V_HTML_=$(GTK_DOC_V_HTML_@AM_DEFAULT_V@)
GTK_DOC_V_HTML_0=@echo " DOC Building HTML";
GTK_DOC_V_XREF=$(GTK_DOC_V_XREF_@AM_V@)
GTK_DOC_V_XREF_=$(GTK_DOC_V_XREF_@AM_DEFAULT_V@)
GTK_DOC_V_XREF_0=@echo " DOC Fixing cross-references";
html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_content_files)
$(GTK_DOC_V_HTML)rm -rf html && mkdir html && \
mkhtml_options=""; \
gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \
if test "$$?" = "0"; then \
if test "x$(V)" = "x1"; then \
mkhtml_options="$$mkhtml_options --verbose"; \
fi; \
fi; \
gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \
if test "$$?" = "0"; then \
mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \
fi; \
cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
-@test "x$(HTML_IMAGES)" = "x" || \
for file in $(HTML_IMAGES) ; do \
test -f $(abs_srcdir)/$$file && cp $(abs_srcdir)/$$file $(abs_builddir)/html; \
test -f $(abs_builddir)/$$file && cp $(abs_builddir)/$$file $(abs_builddir)/html; \
test -f $$file && cp $$file $(abs_builddir)/html; \
done;
$(GTK_DOC_V_XREF)gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS)
$(AM_V_at)touch html-build.stamp
#### pdf ####
GTK_DOC_V_PDF=$(GTK_DOC_V_PDF_@AM_V@)
GTK_DOC_V_PDF_=$(GTK_DOC_V_PDF_@AM_DEFAULT_V@)
GTK_DOC_V_PDF_0=@echo " DOC Building PDF";
pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_content_files)
$(GTK_DOC_V_PDF)rm -f $(DOC_MODULE).pdf && \
mkpdf_options=""; \
gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \
if test "$$?" = "0"; then \
if test "x$(V)" = "x1"; then \
mkpdf_options="$$mkpdf_options --verbose"; \
fi; \
fi; \
if test "x$(HTML_IMAGES)" != "x"; then \
for img in $(HTML_IMAGES); do \
part=`dirname $$img`; \
echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \
if test $$? != 0; then \
mkpdf_options="$$mkpdf_options --imgdir=$$part"; \
fi; \
done; \
fi; \
gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS)
$(AM_V_at)touch pdf-build.stamp
##############
clean-local:
@rm -f *~ *.bak
@rm -rf .libs
@if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-types" ; then \
rm -f $(DOC_MODULE).types; \
fi
@if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-sections" ; then \
rm -f $(DOC_MODULE)-sections.txt; \
fi
distclean-local:
@rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \
$(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
rm -f $(SETUP_FILES) $(DOC_MODULE).types; \
fi
maintainer-clean-local:
@rm -rf xml html
install-data-local:
@installfiles=`echo $(builddir)/html/*`; \
if test "$$installfiles" = '$(builddir)/html/*'; \
then echo 1>&2 'Nothing to install' ; \
else \
if test -n "$(DOC_MODULE_VERSION)"; then \
installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
else \
installdir="$(DESTDIR)$(TARGET_DIR)"; \
fi; \
$(mkinstalldirs) $${installdir} ; \
for i in $$installfiles; do \
echo ' $(INSTALL_DATA) '$$i ; \
$(INSTALL_DATA) $$i $${installdir}; \
done; \
if test -n "$(DOC_MODULE_VERSION)"; then \
mv -f $${installdir}/$(DOC_MODULE).devhelp2 \
$${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \
fi; \
$(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \
fi
uninstall-local:
@if test -n "$(DOC_MODULE_VERSION)"; then \
installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \
else \
installdir="$(DESTDIR)$(TARGET_DIR)"; \
fi; \
rm -rf $${installdir}
#
# Require gtk-doc when making dist
#
if HAVE_GTK_DOC
dist-check-gtkdoc: docs
else
dist-check-gtkdoc:
@echo "*** gtk-doc is needed to run 'make dist'. ***"
@echo "*** gtk-doc was not found when 'configure' ran. ***"
@echo "*** please install gtk-doc and rerun 'configure'. ***"
@false
endif
dist-hook: dist-check-gtkdoc all-gtk-doc dist-hook-local
@mkdir $(distdir)/html
@cp ./html/* $(distdir)/html
@-cp ./$(DOC_MODULE).pdf $(distdir)/
@-cp ./$(DOC_MODULE).types $(distdir)/
@-cp ./$(DOC_MODULE)-sections.txt $(distdir)/
@cd $(distdir) && rm -f $(DISTCLEANFILES)
@$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html
.PHONY : dist-hook-local docs
gsasl-1.10.0/m4/ 0000755 0000000 0000000 00000000000 13773650667 010215 5 0000000 0000000 gsasl-1.10.0/m4/00gnulib.m4 0000644 0000000 0000000 00000007011 13773635253 012010 0000000 0000000 # 00gnulib.m4 serial 8
dnl Copyright (C) 2009-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl This file must be named something that sorts before all other
dnl gnulib-provided .m4 files. It is needed until the clang fix has
dnl been included in Autoconf.
# The following definitions arrange to use a compiler option
# -Werror=implicit-function-declaration in AC_CHECK_DECL, when the
# compiler is clang. Without it, clang implicitly declares "known"
# library functions in C mode, but not in C++ mode, which would cause
# Gnulib to omit a declaration and thus later produce an error in C++
# mode. As of clang 9.0, these "known" functions are identified through
# LIBBUILTIN invocations in the LLVM source file
# llvm/tools/clang/include/clang/Basic/Builtins.def.
# It's not possible to AC_REQUIRE the extra tests from AC_CHECK_DECL,
# because AC_CHECK_DECL, like other Autoconf built-ins, is not supposed
# to AC_REQUIRE anything: some configure.ac files have their first
# AC_CHECK_DECL executed conditionally. Therefore append the extra tests
# to AC_PROG_CC.
AC_DEFUN([gl_COMPILER_CLANG],
[
dnl AC_REQUIRE([AC_PROG_CC])
AC_CACHE_CHECK([whether the compiler is clang],
[gl_cv_compiler_clang],
[dnl Use _AC_COMPILE_IFELSE instead of AC_EGREP_CPP, to avoid error
dnl "circular dependency of AC_LANG_COMPILER(C)" if AC_PROG_CC has
dnl not yet been invoked.
_AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[
#ifdef __clang__
barfbarf
#endif
]],[[]])
],
[gl_cv_compiler_clang=no],
[gl_cv_compiler_clang=yes])
])
])
AC_DEFUN([gl_COMPILER_PREPARE_CHECK_DECL],
[
dnl AC_REQUIRE([AC_PROG_CC])
dnl AC_REQUIRE([gl_COMPILER_CLANG])
AC_CACHE_CHECK([for compiler option needed when checking for declarations],
[gl_cv_compiler_check_decl_option],
[if test $gl_cv_compiler_clang = yes; then
dnl Test whether the compiler supports the option
dnl '-Werror=implicit-function-declaration'.
save_ac_compile="$ac_compile"
ac_compile="$ac_compile -Werror=implicit-function-declaration"
dnl Use _AC_COMPILE_IFELSE instead of AC_COMPILE_IFELSE, to avoid a
dnl warning "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS".
_AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[]])],
[gl_cv_compiler_check_decl_option='-Werror=implicit-function-declaration'],
[gl_cv_compiler_check_decl_option=none])
ac_compile="$save_ac_compile"
else
gl_cv_compiler_check_decl_option=none
fi
])
if test "x$gl_cv_compiler_check_decl_option" != xnone; then
ac_compile_for_check_decl="$ac_compile $gl_cv_compiler_check_decl_option"
else
ac_compile_for_check_decl="$ac_compile"
fi
])
dnl Redefine _AC_CHECK_DECL_BODY so that it references ac_compile_for_check_decl
dnl instead of ac_compile. If, for whatever reason, the override of AC_PROG_CC
dnl in zzgnulib.m4 is inactive, use the original ac_compile.
m4_define([_AC_CHECK_DECL_BODY],
[ ac_save_ac_compile="$ac_compile"
if test -n "$ac_compile_for_check_decl"; then
ac_compile="$ac_compile_for_check_decl"
fi]
m4_defn([_AC_CHECK_DECL_BODY])[ ac_compile="$ac_save_ac_compile"
])
# gl_00GNULIB
# -----------
# Witness macro that this file has been included. Needed to force
# Automake to include this file prior to all other gnulib .m4 files.
AC_DEFUN([gl_00GNULIB])
gsasl-1.10.0/m4/float_h.m4 0000644 0000000 0000000 00000005457 13773635253 012020 0000000 0000000 # float_h.m4 serial 12
dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FLOAT_H],
[
AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([AC_CANONICAL_HOST])
FLOAT_H=
REPLACE_FLOAT_LDBL=0
case "$host_os" in
aix* | beos* | openbsd* | mirbsd* | irix*)
FLOAT_H=float.h
;;
freebsd* | dragonfly*)
case "$host_cpu" in
changequote(,)dnl
i[34567]86 )
changequote([,])dnl
FLOAT_H=float.h
;;
x86_64 )
# On x86_64 systems, the C compiler may still be generating
# 32-bit code.
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE(
[[#if defined __LP64__ || defined __x86_64__ || defined __amd64__
int ok;
#else
error fail
#endif
]])],
[],
[FLOAT_H=float.h])
;;
esac
;;
linux*)
case "$host_cpu" in
powerpc*)
FLOAT_H=float.h
;;
esac
;;
esac
case "$host_os" in
aix* | freebsd* | dragonfly* | linux*)
if test -n "$FLOAT_H"; then
REPLACE_FLOAT_LDBL=1
fi
;;
esac
dnl Test against glibc-2.7 Linux/SPARC64 bug.
REPLACE_ITOLD=0
AC_CACHE_CHECK([whether conversion from 'int' to 'long double' works],
[gl_cv_func_itold_works],
[
AC_RUN_IFELSE(
[AC_LANG_SOURCE([[
int i = -1;
volatile long double ld;
int main ()
{
ld += i * 1.0L;
if (ld > 0)
return 1;
return 0;
}]])],
[gl_cv_func_itold_works=yes],
[gl_cv_func_itold_works=no],
[case "$host" in
sparc*-*-linux*)
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE(
[[#if defined __LP64__ || defined __arch64__
int ok;
#else
error fail
#endif
]])],
[gl_cv_func_itold_works="guessing no"],
[gl_cv_func_itold_works="guessing yes"])
;;
# Guess yes on native Windows.
mingw*) gl_cv_func_itold_works="guessing yes" ;;
*) gl_cv_func_itold_works="guessing yes" ;;
esac
])
])
case "$gl_cv_func_itold_works" in
*no)
REPLACE_ITOLD=1
dnl We add the workaround to but also to ,
dnl to increase the chances that the fix function gets pulled in.
FLOAT_H=float.h
;;
esac
if test -n "$FLOAT_H"; then
gl_NEXT_HEADERS([float.h])
fi
AC_SUBST([FLOAT_H])
AM_CONDITIONAL([GL_GENERATE_FLOAT_H], [test -n "$FLOAT_H"])
AC_SUBST([REPLACE_ITOLD])
])
gsasl-1.10.0/m4/sigaction.m4 0000644 0000000 0000000 00000002325 13773635253 012353 0000000 0000000 # sigaction.m4 serial 7
dnl Copyright (C) 2008-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
# Determine if sigaction interface is present.
AC_DEFUN([gl_SIGACTION],
[
AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
AC_CHECK_FUNCS_ONCE([sigaction])
if test $ac_cv_func_sigaction = yes; then
AC_CHECK_MEMBERS([struct sigaction.sa_sigaction], , ,
[[#include ]])
if test $ac_cv_member_struct_sigaction_sa_sigaction = no; then
HAVE_STRUCT_SIGACTION_SA_SIGACTION=0
fi
else
HAVE_SIGACTION=0
fi
])
# Prerequisites of the part of lib/signal.in.h and of lib/sigaction.c.
AC_DEFUN([gl_PREREQ_SIGACTION],
[
AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
AC_REQUIRE([AC_C_RESTRICT])
AC_REQUIRE([AC_TYPE_UID_T])
AC_REQUIRE([gl_PREREQ_SIG_HANDLER_H])
AC_CHECK_FUNCS_ONCE([sigaltstack siginterrupt])
AC_CHECK_TYPES([siginfo_t], [], [], [[
#include
]])
if test $ac_cv_type_siginfo_t = no; then
HAVE_SIGINFO_T=0
fi
])
# Prerequisites of lib/sig-handler.h.
AC_DEFUN([gl_PREREQ_SIG_HANDLER_H], [:])
gsasl-1.10.0/m4/socklen.m4 0000644 0000000 0000000 00000006157 13773635253 012040 0000000 0000000 # socklen.m4 serial 11
dnl Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Albert Chin, Windows fixes from Simon Josefsson.
dnl Check for socklen_t: historically on BSD it is an int, and in
dnl POSIX 1g it is a type of its own, but some platforms use different
dnl types for the argument to getsockopt, getpeername, etc.:
dnl HP-UX 10.20, IRIX 6.5, OSF/1 4.0, Interix 3.5, BeOS.
dnl So we have to test to find something that will work.
AC_DEFUN([gl_TYPE_SOCKLEN_T],
[AC_REQUIRE([gl_CHECK_SOCKET_HEADERS])dnl
AC_CHECK_TYPE([socklen_t], ,
[AC_CACHE_CHECK([for socklen_t equivalent],
[gl_cv_socklen_t_equiv],
[# Systems have either "struct sockaddr *" or
# "void *" as the second argument to getpeername
gl_cv_socklen_t_equiv=
for arg2 in "struct sockaddr" void; do
for t in int size_t "unsigned int" "long int" "unsigned long int"; do
AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
[[#include
#include
int getpeername (int, $arg2 *, $t *);]],
[[$t len;
getpeername (0, 0, &len);]])],
[gl_cv_socklen_t_equiv="$t"])
test "$gl_cv_socklen_t_equiv" != "" && break
done
test "$gl_cv_socklen_t_equiv" != "" && break
done
if test "$gl_cv_socklen_t_equiv" = ""; then
AC_MSG_ERROR([Cannot find a type to use in place of socklen_t])
fi
])
AC_DEFINE_UNQUOTED([socklen_t], [$gl_cv_socklen_t_equiv],
[type to use in place of socklen_t if not defined])],
[gl_SOCKET_HEADERS])])
dnl On mingw32, socklen_t is in ws2tcpip.h ('int'), so we try to find
dnl it there too. But on Cygwin, wc2tcpip.h must not be included. Users
dnl of this module should use the same include pattern as gl_SOCKET_HEADERS.
dnl When you change this macro, keep also in sync:
dnl - gl_CHECK_SOCKET_HEADERS,
dnl - the Include section of modules/socklen.
AC_DEFUN([gl_SOCKET_HEADERS],
[
/* is not needed according to POSIX, but the
in i386-unknown-freebsd4.10 and
powerpc-apple-darwin5.5 required it. */
#include
#if HAVE_SYS_SOCKET_H
# include
#elif HAVE_WS2TCPIP_H
# include
#endif
])
dnl Tests for the existence of the header for socket facilities.
dnl Defines the C macros HAVE_SYS_SOCKET_H, HAVE_WS2TCPIP_H.
dnl This macro must match gl_SOCKET_HEADERS.
AC_DEFUN([gl_CHECK_SOCKET_HEADERS],
[AC_CHECK_HEADERS_ONCE([sys/socket.h])
if test $ac_cv_header_sys_socket_h = no; then
dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make
dnl the check for those headers unconditional; yet cygwin reports
dnl that the headers are present but cannot be compiled (since on
dnl cygwin, all socket information should come from sys/socket.h).
AC_CHECK_HEADERS([ws2tcpip.h])
fi
])
gsasl-1.10.0/m4/pkg.m4 0000644 0000000 0000000 00000012145 13603651230 011136 0000000 0000000 # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
#
# Copyright © 2004 Scott James Remnant .
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program 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
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# PKG_PROG_PKG_CONFIG([MIN-VERSION])
# ----------------------------------
AC_DEFUN([PKG_PROG_PKG_CONFIG],
[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
fi
if test -n "$PKG_CONFIG"; then
_pkg_min_version=m4_default([$1], [0.9.0])
AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
PKG_CONFIG=""
fi
fi[]dnl
])# PKG_PROG_PKG_CONFIG
# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
#
# Check to see whether a particular set of modules exists. Similar
# to PKG_CHECK_MODULES(), but does not set variables or print errors.
#
#
# Similar to PKG_CHECK_MODULES, make sure that the first instance of
# this or PKG_CHECK_MODULES is called, or make sure to call
# PKG_CHECK_EXISTS manually
# --------------------------------------------------------------
AC_DEFUN([PKG_CHECK_EXISTS],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
if test -n "$PKG_CONFIG" && \
AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
m4_ifval([$2], [$2], [:])
m4_ifvaln([$3], [else
$3])dnl
fi])
# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
# ---------------------------------------------
m4_define([_PKG_CONFIG],
[if test -n "$PKG_CONFIG"; then
if test -n "$$1"; then
pkg_cv_[]$1="$$1"
else
PKG_CHECK_EXISTS([$3],
[pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
[pkg_failed=yes])
fi
else
pkg_failed=untried
fi[]dnl
])# _PKG_CONFIG
# _PKG_SHORT_ERRORS_SUPPORTED
# -----------------------------
AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
_pkg_short_errors_supported=yes
else
_pkg_short_errors_supported=no
fi[]dnl
])# _PKG_SHORT_ERRORS_SUPPORTED
# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
# [ACTION-IF-NOT-FOUND])
#
#
# Note that if there is a possibility the first call to
# PKG_CHECK_MODULES might not happen, you should be sure to include an
# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
#
#
# --------------------------------------------------------------
AC_DEFUN([PKG_CHECK_MODULES],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
pkg_failed=no
AC_MSG_CHECKING([for $1])
_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
_PKG_CONFIG([$1][_LIBS], [libs], [$2])
m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
and $1[]_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.])
if test $pkg_failed = yes; then
_PKG_SHORT_ERRORS_SUPPORTED
if test $_pkg_short_errors_supported = yes; then
$1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"`
else
$1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
fi
# Put the nasty error message in config.log where it belongs
echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
ifelse([$4], , [AC_MSG_ERROR(dnl
[Package requirements ($2) were not met:
$$1_PKG_ERRORS
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
_PKG_TEXT
])],
[AC_MSG_RESULT([no])
$4])
elif test $pkg_failed = untried; then
ifelse([$4], , [AC_MSG_FAILURE(dnl
[The pkg-config script could not be found or is too old. Make sure it
is in your PATH or set the PKG_CONFIG environment variable to the full
path to pkg-config.
_PKG_TEXT
To get pkg-config, see .])],
[$4])
else
$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
AC_MSG_RESULT([yes])
ifelse([$3], , :, [$3])
fi[]dnl
])# PKG_CHECK_MODULES
gsasl-1.10.0/m4/inttypes.m4 0000644 0000000 0000000 00000012512 13773635253 012251 0000000 0000000 # inttypes.m4 serial 32
dnl Copyright (C) 2006-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Derek Price, Bruno Haible.
dnl Test whether is supported or must be substituted.
AC_DEFUN([gl_INTTYPES_H],
[
AC_REQUIRE([gl_INTTYPES_INCOMPLETE])
gl_INTTYPES_PRI_SCN
])
AC_DEFUN_ONCE([gl_INTTYPES_INCOMPLETE],
[
AC_REQUIRE([gl_STDINT_H])
AC_CHECK_HEADERS_ONCE([inttypes.h])
dnl Override always, so that the portability warnings work.
AC_REQUIRE([gl_INTTYPES_H_DEFAULTS])
gl_CHECK_NEXT_HEADERS([inttypes.h])
AC_REQUIRE([gl_MULTIARCH])
dnl Check for declarations of anything we want to poison if the
dnl corresponding gnulib module is not in use.
gl_WARN_ON_USE_PREPARE([[#include
]], [imaxabs imaxdiv strtoimax strtoumax])
AC_REQUIRE([AC_C_RESTRICT])
])
# Ensure that the PRI* and SCN* macros are defined appropriately.
AC_DEFUN([gl_INTTYPES_PRI_SCN],
[
PRIPTR_PREFIX=
if test -n "$STDINT_H"; then
dnl Using the gnulib . It defines intptr_t to 'long' or
dnl 'long long', depending on _WIN64.
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[
#ifdef _WIN64
LLP64
#endif
]])
],
[PRIPTR_PREFIX='"l"'],
[PRIPTR_PREFIX='"ll"'])
else
dnl Using the system's .
for glpfx in '' l ll I64; do
case $glpfx in
'') gltype1='int';;
l) gltype1='long int';;
ll) gltype1='long long int';;
I64) gltype1='__int64';;
esac
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[#include
extern intptr_t foo;
extern $gltype1 foo;]])],
[PRIPTR_PREFIX='"'$glpfx'"'])
test -n "$PRIPTR_PREFIX" && break
done
fi
AC_SUBST([PRIPTR_PREFIX])
gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
[INT32_MAX_LT_INTMAX_MAX],
[defined INT32_MAX && defined INTMAX_MAX],
[INT32_MAX < INTMAX_MAX],
[sizeof (int) < sizeof (long long int)])
if test $APPLE_UNIVERSAL_BUILD = 0; then
gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
[INT64_MAX_EQ_LONG_MAX],
[defined INT64_MAX],
[INT64_MAX == LONG_MAX],
[sizeof (long long int) == sizeof (long int)])
else
INT64_MAX_EQ_LONG_MAX=-1
fi
gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
[UINT32_MAX_LT_UINTMAX_MAX],
[defined UINT32_MAX && defined UINTMAX_MAX],
[UINT32_MAX < UINTMAX_MAX],
[sizeof (unsigned int) < sizeof (unsigned long long int)])
if test $APPLE_UNIVERSAL_BUILD = 0; then
gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
[UINT64_MAX_EQ_ULONG_MAX],
[defined UINT64_MAX],
[UINT64_MAX == ULONG_MAX],
[sizeof (unsigned long long int) == sizeof (unsigned long int)])
else
UINT64_MAX_EQ_ULONG_MAX=-1
fi
])
# Define the symbol $1 to be 1 if the condition is true, 0 otherwise.
# If $2 is true, the condition is $3; otherwise if long long int is supported
# approximate the condition with $4; otherwise, assume the condition is false.
# The condition should work on all C99 platforms; the approximations should be
# good enough to work on all practical pre-C99 platforms.
# $2 is evaluated by the C preprocessor, $3 and $4 as compile-time constants.
AC_DEFUN([gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION],
[
AC_CACHE_CHECK([whether $3],
[gl_cv_test_$1],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[/* Work also in C++ mode. */
#define __STDC_LIMIT_MACROS 1
/* Work if build is not clean. */
#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
#include
#if HAVE_STDINT_H
#include
#endif
#if $2
#define CONDITION ($3)
#else
#define CONDITION ($4)
#endif
int test[CONDITION ? 1 : -1];]])],
[gl_cv_test_$1=yes],
[gl_cv_test_$1=no])])
if test $gl_cv_test_$1 = yes; then
$1=1;
else
$1=0;
fi
AC_SUBST([$1])
])
AC_DEFUN([gl_INTTYPES_MODULE_INDICATOR],
[
dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
AC_REQUIRE([gl_INTTYPES_H_DEFAULTS])
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
])
AC_DEFUN([gl_INTTYPES_H_DEFAULTS],
[
GNULIB_IMAXABS=0; AC_SUBST([GNULIB_IMAXABS])
GNULIB_IMAXDIV=0; AC_SUBST([GNULIB_IMAXDIV])
GNULIB_STRTOIMAX=0; AC_SUBST([GNULIB_STRTOIMAX])
GNULIB_STRTOUMAX=0; AC_SUBST([GNULIB_STRTOUMAX])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_DECL_IMAXABS=1; AC_SUBST([HAVE_DECL_IMAXABS])
HAVE_DECL_IMAXDIV=1; AC_SUBST([HAVE_DECL_IMAXDIV])
HAVE_DECL_STRTOIMAX=1; AC_SUBST([HAVE_DECL_STRTOIMAX])
HAVE_DECL_STRTOUMAX=1; AC_SUBST([HAVE_DECL_STRTOUMAX])
HAVE_IMAXDIV_T=1; AC_SUBST([HAVE_IMAXDIV_T])
REPLACE_STRTOIMAX=0; AC_SUBST([REPLACE_STRTOIMAX])
REPLACE_STRTOUMAX=0; AC_SUBST([REPLACE_STRTOUMAX])
INT32_MAX_LT_INTMAX_MAX=1; AC_SUBST([INT32_MAX_LT_INTMAX_MAX])
INT64_MAX_EQ_LONG_MAX='defined _LP64'; AC_SUBST([INT64_MAX_EQ_LONG_MAX])
PRIPTR_PREFIX=__PRIPTR_PREFIX; AC_SUBST([PRIPTR_PREFIX])
UINT32_MAX_LT_UINTMAX_MAX=1; AC_SUBST([UINT32_MAX_LT_UINTMAX_MAX])
UINT64_MAX_EQ_ULONG_MAX='defined _LP64'; AC_SUBST([UINT64_MAX_EQ_ULONG_MAX])
])
gsasl-1.10.0/m4/strtok_r.m4 0000644 0000000 0000000 00000005123 13773635253 012241 0000000 0000000 # strtok_r.m4 serial 15
dnl Copyright (C) 2002-2004, 2006-2007, 2009-2021 Free Software Foundation,
dnl Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_STRTOK_R],
[
dnl The strtok_r() declaration in lib/string.in.h uses 'restrict'.
AC_REQUIRE([AC_C_RESTRICT])
AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
AC_CHECK_FUNCS([strtok_r])
if test $ac_cv_func_strtok_r = yes; then
HAVE_STRTOK_R=1
dnl glibc 2.7 has a bug in strtok_r that causes a segmentation fault
dnl when the second argument to strtok_r is a constant string that has
dnl exactly one byte and compiling with optimization. This bug is, for
dnl example, present in the glibc 2.7-18 package in Debian "lenny".
dnl See .
AC_CACHE_CHECK([whether strtok_r works], [gl_cv_func_strtok_r_works],
[AC_RUN_IFELSE(
[AC_LANG_PROGRAM([[
#ifndef __OPTIMIZE__
# define __OPTIMIZE__ 1
#endif
#undef __OPTIMIZE_SIZE__
#undef __NO_INLINE__
#include
#include
]],
[[static const char dummy[] = "\177\01a";
char delimiters[] = "xxxxxxxx";
char *save_ptr = (char *) dummy;
strtok_r (delimiters, "x", &save_ptr);
strtok_r (NULL, "x", &save_ptr);
return 0;
]])
],
[gl_cv_func_strtok_r_works=yes],
[gl_cv_func_strtok_r_works=no],
[case "$host_os" in
# Guess no on glibc systems.
*-gnu* | gnu*) gl_cv_func_strtok_r_works="guessing no" ;;
# Guess yes on native Windows.
mingw*) gl_cv_func_strtok_r_works="guessing yes" ;;
*) gl_cv_func_strtok_r_works="guessing yes" ;;
esac
])
])
case "$gl_cv_func_strtok_r_works" in
*no)
dnl We could set REPLACE_STRTOK_R=1 here, but it's only the macro
dnl version in which is wrong. The code compiled
dnl into libc is fine.
UNDEFINE_STRTOK_R=1
;;
esac
else
HAVE_STRTOK_R=0
fi
AC_CHECK_DECLS_ONCE([strtok_r])
if test $ac_cv_have_decl_strtok_r = no; then
HAVE_DECL_STRTOK_R=0
fi
])
# Prerequisites of lib/strtok_r.c.
AC_DEFUN([gl_PREREQ_STRTOK_R], [
:
])
gsasl-1.10.0/m4/semaphore.m4 0000644 0000000 0000000 00000003055 13773635253 012357 0000000 0000000 # semaphore.m4 serial 1
dnl Copyright (C) 2019-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
# Sets LIB_SEMAPHORE to the library needed, in addition to $(LIBMULTITHREAD),
# for getting the functions.
AC_DEFUN([gl_SEMAPHORE],
[
AC_REQUIRE([gl_THREADLIB])
dnl sem_post is
dnl - in libc on macOS, FreeBSD, AIX, IRIX, Solaris 11, Haiku, Cygwin,
dnl - in libpthread on glibc systems, OpenBSD,
dnl - in libpthread or librt on NetBSD,
dnl - in librt on HP-UX 11, OSF/1, Solaris 10.
dnl On the platforms where -lpthread is needed, it is contained in
dnl $LIBMULTITHREAD. Therefore, the only library we need to test for is -lrt.
AC_CACHE_CHECK([for library needed for semaphore functions],
[gl_cv_semaphore_lib],
[save_LIBS="$LIBS"
LIBS="$LIBS $LIBMULTITHREAD"
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include ]],
[[sem_post ((sem_t *)0);]])],
[gl_cv_semaphore_lib=none],
[LIBS="$LIBS -lrt"
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[#include ]],
[[sem_post ((sem_t *)0);]])],
[gl_cv_semaphore_lib='-lrt'],
[gl_cv_semaphore_lib=none])
])
LIBS="$save_LIBS"
])
if test "x$gl_cv_semaphore_lib" = xnone; then
LIB_SEMAPHORE=
else
LIB_SEMAPHORE="$gl_cv_semaphore_lib"
fi
AC_SUBST([LIB_SEMAPHORE])
])
gsasl-1.10.0/m4/fseeko.m4 0000644 0000000 0000000 00000004546 13773635253 011656 0000000 0000000 # fseeko.m4 serial 20
dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_FSEEKO],
[
AC_REQUIRE([gl_STDIO_H_DEFAULTS])
AC_REQUIRE([gl_STDIN_LARGE_OFFSET])
AC_REQUIRE([gl_SYS_TYPES_H])
AC_REQUIRE([AC_PROG_CC])
dnl Persuade glibc to declare fseeko().
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
AC_CACHE_CHECK([for fseeko], [gl_cv_func_fseeko],
[
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include
]], [[fseeko (stdin, 0, 0);]])],
[gl_cv_func_fseeko=yes], [gl_cv_func_fseeko=no])
])
AC_CHECK_DECLS_ONCE([fseeko])
if test $ac_cv_have_decl_fseeko = no; then
HAVE_DECL_FSEEKO=0
fi
if test $gl_cv_func_fseeko = no; then
HAVE_FSEEKO=0
else
if test $WINDOWS_64_BIT_OFF_T = 1; then
REPLACE_FSEEKO=1
fi
if test $gl_cv_var_stdin_large_offset = no; then
REPLACE_FSEEKO=1
fi
m4_ifdef([gl_FUNC_FFLUSH_STDIN], [
gl_FUNC_FFLUSH_STDIN
case "$gl_cv_func_fflush_stdin" in
*yes) ;;
*) REPLACE_FSEEKO=1 ;;
esac
])
fi
])
dnl Code shared by fseeko and ftello. Determine if large files are supported,
dnl but stdin does not start as a large file by default.
AC_DEFUN([gl_STDIN_LARGE_OFFSET],
[
AC_CACHE_CHECK([whether stdin defaults to large file offsets],
[gl_cv_var_stdin_large_offset],
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]],
[[#if defined __SL64 && defined __SCLE /* cygwin */
/* Cygwin 1.5.24 and earlier fail to put stdin in 64-bit mode, making
fseeko/ftello needlessly fail. This bug was fixed in 1.5.25, and
it is easier to do a version check than building a runtime test. */
# include
# if CYGWIN_VERSION_DLL_COMBINED < CYGWIN_VERSION_DLL_MAKE_COMBINED (1005, 25)
choke me
# endif
#endif]])],
[gl_cv_var_stdin_large_offset=yes],
[gl_cv_var_stdin_large_offset=no])])
])
# Prerequisites of lib/fseeko.c.
AC_DEFUN([gl_PREREQ_FSEEKO],
[
dnl Native Windows has the function _fseeki64. mingw hides it in some
dnl circumstances, but mingw64 makes it usable again.
AC_CHECK_FUNCS([_fseeki64])
if test $ac_cv_func__fseeki64 = yes; then
AC_CHECK_DECLS([_fseeki64])
fi
])
gsasl-1.10.0/m4/sched_h.m4 0000644 0000000 0000000 00000005174 13773635253 011775 0000000 0000000 # sched_h.m4 serial 12
dnl Copyright (C) 2008-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl Written by Bruno Haible.
AC_DEFUN([gl_SCHED_H],
[
dnl Use AC_REQUIRE here, so that the default behavior below is expanded
dnl once only, before all statements that occur in other macros.
AC_REQUIRE([gl_SCHED_H_DEFAULTS])
AC_REQUIRE([AC_CANONICAL_HOST])
AC_CHECK_HEADERS_ONCE([sys/cdefs.h])
AC_CHECK_HEADERS([sched.h], [], [],
[[#if HAVE_SYS_CDEFS_H
#include
#endif
]])
gl_NEXT_HEADERS([sched.h])
if test "$ac_cv_header_sched_h" = yes; then
HAVE_SCHED_H=1
else
HAVE_SCHED_H=0
fi
AC_SUBST([HAVE_SCHED_H])
if test "$HAVE_SCHED_H" = 1; then
AC_CHECK_TYPE([struct sched_param],
[HAVE_STRUCT_SCHED_PARAM=1], [HAVE_STRUCT_SCHED_PARAM=0],
[[#if HAVE_SYS_CDEFS_H
#include
#endif
#include
]])
else
HAVE_STRUCT_SCHED_PARAM=0
case "$host_os" in
os2*)
dnl On OS/2 kLIBC, struct sched_param is in spawn.h.
AC_CHECK_TYPE([struct sched_param],
[HAVE_STRUCT_SCHED_PARAM=1], [],
[#include ])
;;
vms)
dnl On OpenVMS 7.2 or newer, struct sched_param is in pthread.h.
AC_CHECK_TYPE([struct sched_param],
[HAVE_STRUCT_SCHED_PARAM=1], [],
[#include ])
;;
esac
fi
AC_SUBST([HAVE_STRUCT_SCHED_PARAM])
if test "$ac_cv_header_sys_cdefs_h" = yes; then
HAVE_SYS_CDEFS_H=1
else
HAVE_SYS_CDEFS_H=0
fi
AC_SUBST([HAVE_SYS_CDEFS_H])
dnl Ensure the type pid_t gets defined.
AC_REQUIRE([AC_TYPE_PID_T])
dnl Check for declarations of anything we want to poison if the
dnl corresponding gnulib module is not in use, if it is not common
dnl enough to be declared everywhere.
gl_WARN_ON_USE_PREPARE([[#include
]], [sched_yield])
])
AC_DEFUN([gl_SCHED_MODULE_INDICATOR],
[
dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
AC_REQUIRE([gl_SCHED_H_DEFAULTS])
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
AC_DEFUN([gl_SCHED_H_DEFAULTS],
[
GNULIB_SCHED_YIELD=0; AC_SUBST([GNULIB_SCHED_YIELD])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_SCHED_YIELD=1; AC_SUBST([HAVE_SCHED_YIELD])
REPLACE_SCHED_YIELD=0; AC_SUBST([REPLACE_SCHED_YIELD])
])
gsasl-1.10.0/m4/sys_socket_h.m4 0000644 0000000 0000000 00000014706 13773635253 013076 0000000 0000000 # sys_socket_h.m4 serial 25
dnl Copyright (C) 2005-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Simon Josefsson.
AC_DEFUN([gl_HEADER_SYS_SOCKET],
[
AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS])
AC_REQUIRE([AC_CANONICAL_HOST])
dnl On OSF/1, the functions recv(), send(), recvfrom(), sendto() have
dnl old-style declarations (with return type 'int' instead of 'ssize_t')
dnl unless _POSIX_PII_SOCKET is defined.
case "$host_os" in
osf*)
AC_DEFINE([_POSIX_PII_SOCKET], [1],
[Define to 1 in order to get the POSIX compatible declarations
of socket functions.])
;;
esac
AC_CACHE_CHECK([whether is self-contained],
[gl_cv_header_sys_socket_h_selfcontained],
[
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[]])],
[gl_cv_header_sys_socket_h_selfcontained=yes],
[gl_cv_header_sys_socket_h_selfcontained=no])
])
if test $gl_cv_header_sys_socket_h_selfcontained = yes; then
dnl If the shutdown function exists, should define
dnl SHUT_RD, SHUT_WR, SHUT_RDWR.
AC_CHECK_FUNCS([shutdown])
if test $ac_cv_func_shutdown = yes; then
AC_CACHE_CHECK([whether defines the SHUT_* macros],
[gl_cv_header_sys_socket_h_shut],
[
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[#include ]],
[[int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR };]])],
[gl_cv_header_sys_socket_h_shut=yes],
[gl_cv_header_sys_socket_h_shut=no])
])
if test $gl_cv_header_sys_socket_h_shut = no; then
SYS_SOCKET_H='sys/socket.h'
fi
fi
fi
# We need to check for ws2tcpip.h now.
gl_PREREQ_SYS_H_SOCKET
AC_CHECK_TYPES([struct sockaddr_storage, sa_family_t],,,[
/* sys/types.h is not needed according to POSIX, but the
sys/socket.h in i386-unknown-freebsd4.10 and
powerpc-apple-darwin5.5 required it. */
#include
#ifdef HAVE_SYS_SOCKET_H
#include
#endif
#ifdef HAVE_WS2TCPIP_H
#include
#endif
])
if test $ac_cv_type_struct_sockaddr_storage = no; then
HAVE_STRUCT_SOCKADDR_STORAGE=0
fi
if test $ac_cv_type_sa_family_t = no; then
HAVE_SA_FAMILY_T=0
fi
if test $ac_cv_type_struct_sockaddr_storage != no; then
AC_CHECK_MEMBERS([struct sockaddr_storage.ss_family],
[],
[HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0],
[#include
#ifdef HAVE_SYS_SOCKET_H
#include
#endif
#ifdef HAVE_WS2TCPIP_H
#include
#endif
])
fi
if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \
|| test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then
SYS_SOCKET_H='sys/socket.h'
fi
gl_PREREQ_SYS_H_WINSOCK2
dnl Check for declarations of anything we want to poison if the
dnl corresponding gnulib module is not in use.
gl_WARN_ON_USE_PREPARE([[
/* Some systems require prerequisite headers. */
#include
#include
]], [socket connect accept bind getpeername getsockname getsockopt
listen recv send recvfrom sendto setsockopt shutdown accept4])
AC_REQUIRE([AC_C_RESTRICT])
])
AC_DEFUN([gl_PREREQ_SYS_H_SOCKET],
[
dnl Check prerequisites of the replacement.
AC_REQUIRE([gl_CHECK_SOCKET_HEADERS])
gl_CHECK_NEXT_HEADERS([sys/socket.h])
if test $ac_cv_header_sys_socket_h = yes; then
HAVE_SYS_SOCKET_H=1
else
HAVE_SYS_SOCKET_H=0
fi
AC_SUBST([HAVE_SYS_SOCKET_H])
gl_PREREQ_SYS_H_WS2TCPIP
])
# Common prerequisites of the replacement and of the
# replacement.
# Sets and substitutes HAVE_WINSOCK2_H.
AC_DEFUN([gl_PREREQ_SYS_H_WINSOCK2],
[
m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])])
m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])])
AC_CHECK_HEADERS_ONCE([sys/socket.h])
if test $ac_cv_header_sys_socket_h != yes; then
dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make
dnl the check for those headers unconditional; yet cygwin reports
dnl that the headers are present but cannot be compiled (since on
dnl cygwin, all socket information should come from sys/socket.h).
AC_CHECK_HEADERS([winsock2.h])
fi
if test "$ac_cv_header_winsock2_h" = yes; then
HAVE_WINSOCK2_H=1
UNISTD_H_HAVE_WINSOCK2_H=1
SYS_IOCTL_H_HAVE_WINSOCK2_H=1
else
HAVE_WINSOCK2_H=0
fi
AC_SUBST([HAVE_WINSOCK2_H])
])
# Common prerequisites of the replacement and of the
# replacement.
# Sets and substitutes HAVE_WS2TCPIP_H.
AC_DEFUN([gl_PREREQ_SYS_H_WS2TCPIP],
[
AC_REQUIRE([gl_CHECK_SOCKET_HEADERS])
if test $ac_cv_header_sys_socket_h = yes; then
HAVE_WS2TCPIP_H=0
else
if test $ac_cv_header_ws2tcpip_h = yes; then
HAVE_WS2TCPIP_H=1
else
HAVE_WS2TCPIP_H=0
fi
fi
AC_SUBST([HAVE_WS2TCPIP_H])
])
AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR],
[
dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS])
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
AC_DEFUN([gl_SYS_SOCKET_H_DEFAULTS],
[
GNULIB_SOCKET=0; AC_SUBST([GNULIB_SOCKET])
GNULIB_CONNECT=0; AC_SUBST([GNULIB_CONNECT])
GNULIB_ACCEPT=0; AC_SUBST([GNULIB_ACCEPT])
GNULIB_BIND=0; AC_SUBST([GNULIB_BIND])
GNULIB_GETPEERNAME=0; AC_SUBST([GNULIB_GETPEERNAME])
GNULIB_GETSOCKNAME=0; AC_SUBST([GNULIB_GETSOCKNAME])
GNULIB_GETSOCKOPT=0; AC_SUBST([GNULIB_GETSOCKOPT])
GNULIB_LISTEN=0; AC_SUBST([GNULIB_LISTEN])
GNULIB_RECV=0; AC_SUBST([GNULIB_RECV])
GNULIB_SEND=0; AC_SUBST([GNULIB_SEND])
GNULIB_RECVFROM=0; AC_SUBST([GNULIB_RECVFROM])
GNULIB_SENDTO=0; AC_SUBST([GNULIB_SENDTO])
GNULIB_SETSOCKOPT=0; AC_SUBST([GNULIB_SETSOCKOPT])
GNULIB_SHUTDOWN=0; AC_SUBST([GNULIB_SHUTDOWN])
GNULIB_ACCEPT4=0; AC_SUBST([GNULIB_ACCEPT4])
HAVE_STRUCT_SOCKADDR_STORAGE=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE])
HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1;
AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY])
HAVE_SA_FAMILY_T=1; AC_SUBST([HAVE_SA_FAMILY_T])
HAVE_ACCEPT4=1; AC_SUBST([HAVE_ACCEPT4])
])
gsasl-1.10.0/m4/inttypes_h.m4 0000644 0000000 0000000 00000001774 13773635253 012570 0000000 0000000 # inttypes_h.m4 serial 10
dnl Copyright (C) 1997-2004, 2006, 2008-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Paul Eggert.
# Define HAVE_INTTYPES_H_WITH_UINTMAX if exists,
# doesn't clash with , and declares uintmax_t.
AC_DEFUN([gl_AC_HEADER_INTTYPES_H],
[
AC_CACHE_CHECK([for inttypes.h], [gl_cv_header_inttypes_h],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[
#include
#include
]],
[[uintmax_t i = (uintmax_t) -1; return !i;]])],
[gl_cv_header_inttypes_h=yes],
[gl_cv_header_inttypes_h=no])])
if test $gl_cv_header_inttypes_h = yes; then
AC_DEFINE_UNQUOTED([HAVE_INTTYPES_H_WITH_UINTMAX], [1],
[Define if exists, doesn't clash with ,
and declares uintmax_t. ])
fi
])
gsasl-1.10.0/m4/environ.m4 0000644 0000000 0000000 00000002545 13773635253 012057 0000000 0000000 # environ.m4 serial 7
dnl Copyright (C) 2001-2004, 2006-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN_ONCE([gl_ENVIRON],
[
AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
dnl Persuade glibc to declare environ.
AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
AC_CHECK_HEADERS_ONCE([unistd.h])
gt_CHECK_VAR_DECL(
[#if HAVE_UNISTD_H
#include
#endif
/* mingw, BeOS, Haiku declare environ in , not in . */
#include
],
[environ])
if test $gt_cv_var_environ_declaration != yes; then
HAVE_DECL_ENVIRON=0
fi
])
# Check if a variable is properly declared.
# gt_CHECK_VAR_DECL(includes,variable)
AC_DEFUN([gt_CHECK_VAR_DECL],
[
define([gt_cv_var], [gt_cv_var_]$2[_declaration])
AC_CACHE_CHECK([if $2 is properly declared], [gt_cv_var],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[$1
extern struct { int foo; } $2;]],
[[$2.foo = 1;]])],
[gt_cv_var=no],
[gt_cv_var=yes])])
if test $gt_cv_var = yes; then
AC_DEFINE([HAVE_]m4_translit($2, [a-z], [A-Z])[_DECL], 1,
[Define if you have the declaration of $2.])
fi
undefine([gt_cv_var])
])
gsasl-1.10.0/m4/netinet_in_h.m4 0000644 0000000 0000000 00000002075 13773635253 013040 0000000 0000000 # netinet_in_h.m4 serial 5
dnl Copyright (C) 2006-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_HEADER_NETINET_IN],
[
AC_CACHE_CHECK([whether is self-contained],
[gl_cv_header_netinet_in_h_selfcontained],
[
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[]])],
[gl_cv_header_netinet_in_h_selfcontained=yes],
[gl_cv_header_netinet_in_h_selfcontained=no])
])
if test $gl_cv_header_netinet_in_h_selfcontained = yes; then
NETINET_IN_H=''
else
NETINET_IN_H='netinet/in.h'
AC_CHECK_HEADERS([netinet/in.h])
gl_CHECK_NEXT_HEADERS([netinet/in.h])
if test $ac_cv_header_netinet_in_h = yes; then
HAVE_NETINET_IN_H=1
else
HAVE_NETINET_IN_H=0
fi
AC_SUBST([HAVE_NETINET_IN_H])
fi
AC_SUBST([NETINET_IN_H])
AM_CONDITIONAL([GL_GENERATE_NETINET_IN_H], [test -n "$NETINET_IN_H"])
])
gsasl-1.10.0/m4/progtest.m4 0000644 0000000 0000000 00000006040 13773635253 012240 0000000 0000000 # progtest.m4 serial 7 (gettext-0.18.2)
dnl Copyright (C) 1996-2003, 2005, 2008-2014 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl
dnl This file can can be used in projects which are not available under
dnl the GNU General Public License or the GNU Library General Public
dnl License but which still want to provide support for the GNU gettext
dnl functionality.
dnl Please note that the actual code of the GNU gettext library is covered
dnl by the GNU Library General Public License, and the rest of the GNU
dnl gettext package package is covered by the GNU General Public License.
dnl They are *not* in the public domain.
dnl Authors:
dnl Ulrich Drepper , 1996.
AC_PREREQ([2.50])
# Search path for a program which passes the given test.
dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
AC_DEFUN([AM_PATH_PROG_WITH_TEST],
[
# Prepare PATH_SEPARATOR.
# The user is always right.
if test "${PATH_SEPARATOR+set}" != set; then
# Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which
# contains only /bin. Note that ksh looks also at the FPATH variable,
# so we have to set that as well for the test.
PATH_SEPARATOR=:
(PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
&& { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \
|| PATH_SEPARATOR=';'
}
fi
# Find out how to test for executable files. Don't use a zero-byte file,
# as systems may use methods other than mode bits to determine executability.
cat >conf$$.file <<_ASEOF
#! /bin/sh
exit 0
_ASEOF
chmod +x conf$$.file
if test -x conf$$.file >/dev/null 2>&1; then
ac_executable_p="test -x"
else
ac_executable_p="test -f"
fi
rm -f conf$$.file
# Extract the first word of "$2", so it can be a program name with args.
set dummy $2; ac_word=[$]2
AC_MSG_CHECKING([for $ac_word])
AC_CACHE_VAL([ac_cv_path_$1],
[case "[$]$1" in
[[\\/]]* | ?:[[\\/]]*)
ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
;;
*)
ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
for ac_dir in ifelse([$5], , $PATH, [$5]); do
IFS="$ac_save_IFS"
test -z "$ac_dir" && ac_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD
if [$3]; then
ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
break 2
fi
fi
done
done
IFS="$ac_save_IFS"
dnl If no 4th arg is given, leave the cache variable unset,
dnl so AC_PATH_PROGS will keep looking.
ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
])dnl
;;
esac])dnl
$1="$ac_cv_path_$1"
if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
AC_MSG_RESULT([$][$1])
else
AC_MSG_RESULT([no])
fi
AC_SUBST([$1])dnl
])
gsasl-1.10.0/m4/lock.m4 0000644 0000000 0000000 00000003037 13773635253 011324 0000000 0000000 # lock.m4 serial 14
dnl Copyright (C) 2005-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Bruno Haible.
AC_DEFUN([gl_LOCK],
[
AC_REQUIRE([gl_THREADLIB])
if test "$gl_threads_api" = posix; then
# OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the
# pthread_rwlock_* functions.
has_rwlock=false
AC_CHECK_TYPE([pthread_rwlock_t],
[has_rwlock=true
AC_DEFINE([HAVE_PTHREAD_RWLOCK], [1],
[Define if the POSIX multithreading library has read/write locks.])],
[],
[#include ])
if $has_rwlock; then
gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER
fi
# glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro.
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM(
[[#include ]],
[[
#if __FreeBSD__ == 4
error "No, in FreeBSD 4.0 recursive mutexes actually don't work."
#elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \
&& __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070)
error "No, in Mac OS X < 10.7 recursive mutexes actually don't work."
#else
int x = (int)PTHREAD_MUTEX_RECURSIVE;
return !x;
#endif
]])],
[AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], [1],
[Define if the defines PTHREAD_MUTEX_RECURSIVE.])])
fi
gl_PREREQ_LOCK
])
# Prerequisites of lib/glthread/lock.c.
AC_DEFUN([gl_PREREQ_LOCK], [:])
gsasl-1.10.0/m4/locale-fr.m4 0000644 0000000 0000000 00000024474 13773635253 012250 0000000 0000000 # locale-fr.m4 serial 20
dnl Copyright (C) 2003, 2005-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Bruno Haible.
dnl Determine the name of a french locale with traditional encoding.
AC_DEFUN([gt_LOCALE_FR],
[
AC_REQUIRE([AC_CANONICAL_HOST])
AC_REQUIRE([AM_LANGINFO_CODESET])
AC_CACHE_CHECK([for a traditional french locale], [gt_cv_locale_fr], [
AC_LANG_CONFTEST([AC_LANG_SOURCE([[
#include
#include
#if HAVE_LANGINFO_CODESET
# include
#endif
#include
#include
struct tm t;
char buf[16];
int main () {
/* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
imitates locale dependent behaviour by looking at the environment
variables, and all locales use the UTF-8 encoding. */
#if defined __BEOS__ || defined __HAIKU__
return 1;
#else
/* Check whether the given locale name is recognized by the system. */
# if defined _WIN32 && !defined __CYGWIN__
/* On native Windows, setlocale(category, "") looks at the system settings,
not at the environment variables. Also, when an encoding suffix such
as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
category of the locale to "C". */
if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
|| strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
return 1;
# else
if (setlocale (LC_ALL, "") == NULL) return 1;
# endif
/* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
succeeds but then nl_langinfo(CODESET) is "646". In this situation,
some unit tests fail.
On MirBSD 10, when an unsupported locale is specified, setlocale()
succeeds but then nl_langinfo(CODESET) is "UTF-8". */
# if HAVE_LANGINFO_CODESET
{
const char *cs = nl_langinfo (CODESET);
if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0
|| strcmp (cs, "UTF-8") == 0)
return 1;
}
# endif
# ifdef __CYGWIN__
/* On Cygwin, avoid locale names without encoding suffix, because the
locale_charset() function relies on the encoding suffix. Note that
LC_ALL is set on the command line. */
if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
# endif
/* Check whether in the abbreviation of the second month, the second
character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only
one byte long. This excludes the UTF-8 encoding. */
t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1;
# if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */
/* Check whether the decimal separator is a comma.
On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
are nl_langinfo(RADIXCHAR) are both ".". */
if (localeconv () ->decimal_point[0] != ',') return 1;
# endif
return 0;
#endif
}
]])])
if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
case "$host_os" in
# Handle native Windows specially, because there setlocale() interprets
# "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
# "fr" or "fra" as "French" or "French_France.1252",
# "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
# "ja" as "Japanese" or "Japanese_Japan.932",
# and similar.
mingw*)
# Test for the native Windows locale name.
if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
gt_cv_locale_fr=French_France.1252
else
# None found.
gt_cv_locale_fr=none
fi
;;
*)
# Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
# otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
# configure script would override the LC_ALL setting. Likewise for
# LC_CTYPE, which is also set at the beginning of the configure script.
# Test for the usual locale name.
if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
gt_cv_locale_fr=fr_FR
else
# Test for the locale name with explicit encoding suffix.
if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
gt_cv_locale_fr=fr_FR.ISO-8859-1
else
# Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name.
if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
gt_cv_locale_fr=fr_FR.ISO8859-1
else
# Test for the HP-UX locale name.
if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
gt_cv_locale_fr=fr_FR.iso88591
else
# Test for the Solaris 7 locale name.
if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
gt_cv_locale_fr=fr
else
# None found.
gt_cv_locale_fr=none
fi
fi
fi
fi
fi
;;
esac
fi
rm -fr conftest*
])
LOCALE_FR=$gt_cv_locale_fr
AC_SUBST([LOCALE_FR])
])
dnl Determine the name of a french locale with UTF-8 encoding.
AC_DEFUN([gt_LOCALE_FR_UTF8],
[
AC_REQUIRE([AM_LANGINFO_CODESET])
AC_CACHE_CHECK([for a french Unicode locale], [gt_cv_locale_fr_utf8], [
AC_LANG_CONFTEST([AC_LANG_SOURCE([[
#include
#include
#if HAVE_LANGINFO_CODESET
# include
#endif
#include
#include
struct tm t;
char buf[16];
int main () {
/* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl
imitates locale dependent behaviour by looking at the environment
variables, and all locales use the UTF-8 encoding. */
#if !(defined __BEOS__ || defined __HAIKU__)
/* Check whether the given locale name is recognized by the system. */
# if defined _WIN32 && !defined __CYGWIN__
/* On native Windows, setlocale(category, "") looks at the system settings,
not at the environment variables. Also, when an encoding suffix such
as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE
category of the locale to "C". */
if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL
|| strcmp (setlocale (LC_CTYPE, NULL), "C") == 0)
return 1;
# else
if (setlocale (LC_ALL, "") == NULL) return 1;
# endif
/* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646".
On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET)
is empty, and the behaviour of Tcl 8.4 in this locale is not useful.
On OpenBSD 4.0, when an unsupported locale is specified, setlocale()
succeeds but then nl_langinfo(CODESET) is "646". In this situation,
some unit tests fail. */
# if HAVE_LANGINFO_CODESET
{
const char *cs = nl_langinfo (CODESET);
if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0)
return 1;
}
# endif
# ifdef __CYGWIN__
/* On Cygwin, avoid locale names without encoding suffix, because the
locale_charset() function relies on the encoding suffix. Note that
LC_ALL is set on the command line. */
if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1;
# endif
/* Check whether in the abbreviation of the second month, the second
character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is
two bytes long, with UTF-8 encoding. */
t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4;
if (strftime (buf, sizeof (buf), "%b", &t) < 4
|| buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v')
return 1;
#endif
#if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */
/* Check whether the decimal separator is a comma.
On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point
are nl_langinfo(RADIXCHAR) are both ".". */
if (localeconv () ->decimal_point[0] != ',') return 1;
#endif
return 0;
}
]])])
if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
case "$host_os" in
# Handle native Windows specially, because there setlocale() interprets
# "ar" as "Arabic" or "Arabic_Saudi Arabia.1256",
# "fr" or "fra" as "French" or "French_France.1252",
# "ge"(!) or "deu"(!) as "German" or "German_Germany.1252",
# "ja" as "Japanese" or "Japanese_Japan.932",
# and similar.
mingw*)
# Test for the hypothetical native Windows locale name.
if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
gt_cv_locale_fr_utf8=French_France.65001
else
# None found.
gt_cv_locale_fr_utf8=none
fi
;;
*)
# Setting LC_ALL is not enough. Need to set LC_TIME to empty, because
# otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the
# configure script would override the LC_ALL setting. Likewise for
# LC_CTYPE, which is also set at the beginning of the configure script.
# Test for the usual locale name.
if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
gt_cv_locale_fr_utf8=fr_FR
else
# Test for the locale name with explicit encoding suffix.
if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
gt_cv_locale_fr_utf8=fr_FR.UTF-8
else
# Test for the Solaris 7 locale name.
if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then
gt_cv_locale_fr_utf8=fr.UTF-8
else
# None found.
gt_cv_locale_fr_utf8=none
fi
fi
fi
;;
esac
fi
rm -fr conftest*
])
LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8
AC_SUBST([LOCALE_FR_UTF8])
])
gsasl-1.10.0/m4/malloca.m4 0000644 0000000 0000000 00000001033 13773635253 011776 0000000 0000000 # malloca.m4 serial 2
dnl Copyright (C) 2003-2004, 2006-2007, 2009-2021 Free Software Foundation,
dnl Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_MALLOCA],
[
dnl Use the autoconf tests for alloca(), but not the AC_SUBSTed variables
dnl @ALLOCA@ and @LTALLOCA@.
dnl gl_FUNC_ALLOCA dnl Already brought in by the module dependencies.
AC_REQUIRE([gl_EEMALLOC])
])
gsasl-1.10.0/m4/sleep.m4 0000644 0000000 0000000 00000004472 13773635253 011510 0000000 0000000 # sleep.m4 serial 11
dnl Copyright (C) 2007-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_SLEEP],
[
AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
dnl We expect to see the declaration of sleep() in a header file.
dnl Older versions of mingw have a sleep() function that is an alias to
dnl _sleep() in MSVCRT. It has a different signature than POSIX sleep():
dnl it takes the number of milliseconds as argument and returns void.
dnl mingw does not declare this function.
AC_CHECK_DECLS([sleep], , , [[#include ]])
AC_CHECK_FUNCS_ONCE([sleep])
if test $ac_cv_have_decl_sleep != yes; then
HAVE_SLEEP=0
else
dnl Cygwin 1.5.x has a bug where sleep can't exceed 49.7 days.
AC_CACHE_CHECK([for working sleep], [gl_cv_func_sleep_works],
[AC_RUN_IFELSE([AC_LANG_PROGRAM([[
#include
#include
#include
static void
handle_alarm (int sig)
{
if (sig != SIGALRM)
_exit (2);
}
]], [[
/* Failure to compile this test due to missing alarm is okay,
since all such platforms (mingw) also lack sleep. */
unsigned int pentecost = 50 * 24 * 60 * 60; /* 50 days. */
unsigned int remaining;
signal (SIGALRM, handle_alarm);
alarm (1);
remaining = sleep (pentecost);
if (remaining > pentecost)
return 3;
if (remaining <= pentecost - 10)
return 4;
return 0;
]])],
[gl_cv_func_sleep_works=yes], [gl_cv_func_sleep_works=no],
[case "$host_os" in
# Guess yes on glibc systems.
*-gnu* | gnu*) gl_cv_func_sleep_works="guessing yes" ;;
# Guess yes on musl systems.
*-musl*) gl_cv_func_sleep_works="guessing yes" ;;
# Guess no on native Windows.
mingw*) gl_cv_func_sleep_works="guessing no" ;;
# If we don't know, obey --enable-cross-guesses.
*) gl_cv_func_sleep_works="$gl_cross_guess_normal" ;;
esac
])])
case "$gl_cv_func_sleep_works" in
*yes) ;;
*)
REPLACE_SLEEP=1
;;
esac
fi
])
gsasl-1.10.0/m4/version-etc.m4 0000644 0000000 0000000 00000002226 13773635253 012631 0000000 0000000 # version-etc.m4 serial 1
# Copyright (C) 2009-2021 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
dnl $1 - configure flag and define name
dnl $2 - human readable description
m4_define([gl_VERSION_ETC_FLAG],
[dnl
AC_ARG_WITH([$1], [AS_HELP_STRING([--with-$1], [$2])],
[dnl
case $withval in
yes|no) ;;
*) AC_DEFINE_UNQUOTED(AS_TR_CPP([PACKAGE_$1]), ["$withval"], [$2]) ;;
esac
])
])
AC_DEFUN([gl_VERSION_ETC],
[dnl
gl_VERSION_ETC_FLAG([packager],
[String identifying the packager of this software])
gl_VERSION_ETC_FLAG([packager-version],
[Packager-specific version information])
gl_VERSION_ETC_FLAG([packager-bug-reports],
[Packager info for bug reports (URL/e-mail/...)])
if test "X$with_packager" = "X" && \
test "X$with_packager_version$with_packager_bug_reports" != "X"
then
AC_MSG_ERROR([The --with-packager-{bug-reports,version} options require --with-packager])
fi
])
gsasl-1.10.0/m4/absolute-header.m4 0000644 0000000 0000000 00000010151 13773635253 013433 0000000 0000000 # absolute-header.m4 serial 17
dnl Copyright (C) 2006-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Derek Price.
# gl_ABSOLUTE_HEADER(HEADER1 HEADER2 ...)
# ---------------------------------------
# Find the absolute name of a header file, testing first if the header exists.
# If the header were sys/inttypes.h, this macro would define
# ABSOLUTE_SYS_INTTYPES_H to the '""' quoted absolute name of sys/inttypes.h
# in config.h
# (e.g. '#define ABSOLUTE_SYS_INTTYPES_H "///usr/include/sys/inttypes.h"').
# The three "///" are to pacify Sun C 5.8, which otherwise would say
# "warning: #include of /usr/include/... may be non-portable".
# Use '""', not '<>', so that the /// cannot be confused with a C99 comment.
# Note: This macro assumes that the header file is not empty after
# preprocessing, i.e. it does not only define preprocessor macros but also
# provides some type/enum definitions or function/variable declarations.
AC_DEFUN([gl_ABSOLUTE_HEADER],
[AC_REQUIRE([AC_CANONICAL_HOST])
AC_LANG_PREPROC_REQUIRE()dnl
m4_foreach_w([gl_HEADER_NAME], [$1],
[AS_VAR_PUSHDEF([gl_absolute_header],
[gl_cv_absolute_]m4_defn([gl_HEADER_NAME]))dnl
AC_CACHE_CHECK([absolute name of <]m4_defn([gl_HEADER_NAME])[>],
[gl_absolute_header],
[AS_VAR_PUSHDEF([ac_header_exists],
[ac_cv_header_]m4_defn([gl_HEADER_NAME]))dnl
AC_CHECK_HEADERS_ONCE(m4_defn([gl_HEADER_NAME]))dnl
if test AS_VAR_GET([ac_header_exists]) = yes; then
gl_ABSOLUTE_HEADER_ONE(m4_defn([gl_HEADER_NAME]))
fi
AS_VAR_POPDEF([ac_header_exists])dnl
])dnl
AC_DEFINE_UNQUOTED(AS_TR_CPP([ABSOLUTE_]m4_defn([gl_HEADER_NAME])),
["AS_VAR_GET([gl_absolute_header])"],
[Define this to an absolute name of <]m4_defn([gl_HEADER_NAME])[>.])
AS_VAR_POPDEF([gl_absolute_header])dnl
])dnl
])# gl_ABSOLUTE_HEADER
# gl_ABSOLUTE_HEADER_ONE(HEADER)
# ------------------------------
# Like gl_ABSOLUTE_HEADER, except that:
# - it assumes that the header exists,
# - it uses the current CPPFLAGS,
# - it does not cache the result,
# - it is silent.
AC_DEFUN([gl_ABSOLUTE_HEADER_ONE],
[
AC_REQUIRE([AC_CANONICAL_HOST])
AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <]]m4_dquote([$1])[[>]])])
dnl AIX "xlc -E" and "cc -E" omit #line directives for header files
dnl that contain only a #include of other header files and no
dnl non-comment tokens of their own. This leads to a failure to
dnl detect the absolute name of , ,
dnl and others. The workaround is to force preservation of comments
dnl through option -C. This ensures all necessary #line directives
dnl are present. GCC supports option -C as well.
case "$host_os" in
aix*) gl_absname_cpp="$ac_cpp -C" ;;
*) gl_absname_cpp="$ac_cpp" ;;
esac
changequote(,)
case "$host_os" in
mingw*)
dnl For the sake of native Windows compilers (excluding gcc),
dnl treat backslash as a directory separator, like /.
dnl Actually, these compilers use a double-backslash as
dnl directory separator, inside the
dnl # line "filename"
dnl directives.
gl_dirsep_regex='[/\\]'
;;
*)
gl_dirsep_regex='\/'
;;
esac
dnl A sed expression that turns a string into a basic regular
dnl expression, for use within "/.../".
gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
gl_header_literal_regex=`echo '$1' \
| sed -e "$gl_make_literal_regex_sed"`
gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
s|^/[^/]|//&|
p
q
}'
changequote([,])
dnl eval is necessary to expand gl_absname_cpp.
dnl Ultrix and Pyramid sh refuse to redirect output of eval,
dnl so use subshell.
AS_VAR_SET([gl_cv_absolute_]AS_TR_SH([[$1]]),
[`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
sed -n "$gl_absolute_header_sed"`])
])
gsasl-1.10.0/m4/extensions.m4 0000644 0000000 0000000 00000017405 13773635253 012577 0000000 0000000 # serial 21 -*- Autoconf -*-
# Enable extensions on systems that normally disable them.
# Copyright (C) 2003, 2006-2021 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
dnl Define to empty for the benefit of Autoconf 2.69 and earlier, so that
dnl AC_USE_SYSTEM_EXTENSIONS (below) can be used unchanged from Autoconf 2.70+.
m4_ifndef([AC_CHECK_INCLUDES_DEFAULT],
[AC_DEFUN([AC_CHECK_INCLUDES_DEFAULT], [])])
# This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from git
# Autoconf. Perhaps we can remove this once we can assume Autoconf
# is recent-enough everywhere, but since Autoconf mutates rapidly
# enough in this area it's likely we'll need to redefine
# AC_USE_SYSTEM_EXTENSIONS for quite some time.
# If autoconf reports a warning
# warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
# or warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
# the fix is
# 1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked
# but always AC_REQUIREd,
# 2) to ensure that for each occurrence of
# AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
# or
# AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
# the corresponding gnulib module description has 'extensions' among
# its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS
# invocation occurs in gl_EARLY, not in gl_INIT.
m4_version_prereq([2.70.1], [], [
# AC_USE_SYSTEM_EXTENSIONS
# ------------------------
# Enable extensions on systems that normally disable them,
# typically due to standards-conformance issues.
# We unconditionally define as many of the known feature-enabling
# as possible, reserving conditional behavior for macros that are
# known to cause problems on some platforms (such as __EXTENSIONS__).
AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS],
[AC_BEFORE([$0], [AC_PREPROC_IFELSE])dnl
AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl
AC_BEFORE([$0], [AC_LINK_IFELSE])dnl
AC_BEFORE([$0], [AC_RUN_IFELSE])dnl
AC_BEFORE([$0], [AC_CHECK_INCLUDES_DEFAULT])dnl
dnl #undef in AH_VERBATIM gets replaced with #define by AC_DEFINE.
dnl Use a different key than __EXTENSIONS__, as that name broke existing
dnl configure.ac when using autoheader 2.62.
dnl The macros below are in alphabetical order ignoring leading _ or __
dnl prefixes.
AH_VERBATIM([USE_SYSTEM_EXTENSIONS],
[/* Enable extensions on AIX 3, Interix. */
#ifndef _ALL_SOURCE
# undef _ALL_SOURCE
#endif
/* Enable general extensions on macOS. */
#ifndef _DARWIN_C_SOURCE
# undef _DARWIN_C_SOURCE
#endif
/* Enable general extensions on Solaris. */
#ifndef __EXTENSIONS__
# undef __EXTENSIONS__
#endif
/* Enable GNU extensions on systems that have them. */
#ifndef _GNU_SOURCE
# undef _GNU_SOURCE
#endif
/* Enable X/Open compliant socket functions that do not require linking
with -lxnet on HP-UX 11.11. */
#ifndef _HPUX_ALT_XOPEN_SOCKET_API
# undef _HPUX_ALT_XOPEN_SOCKET_API
#endif
/* Identify the host operating system as Minix.
This macro does not affect the system headers' behavior.
A future release of Autoconf may stop defining this macro. */
#ifndef _MINIX
# undef _MINIX
#endif
/* Enable general extensions on NetBSD.
Enable NetBSD compatibility extensions on Minix. */
#ifndef _NETBSD_SOURCE
# undef _NETBSD_SOURCE
#endif
/* Enable OpenBSD compatibility extensions on NetBSD.
Oddly enough, this does nothing on OpenBSD. */
#ifndef _OPENBSD_SOURCE
# undef _OPENBSD_SOURCE
#endif
/* Define to 1 if needed for POSIX-compatible behavior. */
#ifndef _POSIX_SOURCE
# undef _POSIX_SOURCE
#endif
/* Define to 2 if needed for POSIX-compatible behavior. */
#ifndef _POSIX_1_SOURCE
# undef _POSIX_1_SOURCE
#endif
/* Enable POSIX-compatible threading on Solaris. */
#ifndef _POSIX_PTHREAD_SEMANTICS
# undef _POSIX_PTHREAD_SEMANTICS
#endif
/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */
#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
#endif
/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */
#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
# undef __STDC_WANT_IEC_60559_BFP_EXT__
#endif
/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */
#ifndef __STDC_WANT_IEC_60559_DFP_EXT__
# undef __STDC_WANT_IEC_60559_DFP_EXT__
#endif
/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */
#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__
# undef __STDC_WANT_IEC_60559_FUNCS_EXT__
#endif
/* Enable extensions specified by ISO/IEC TS 18661-3:2015. */
#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__
# undef __STDC_WANT_IEC_60559_TYPES_EXT__
#endif
/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */
#ifndef __STDC_WANT_LIB_EXT2__
# undef __STDC_WANT_LIB_EXT2__
#endif
/* Enable extensions specified by ISO/IEC 24747:2009. */
#ifndef __STDC_WANT_MATH_SPEC_FUNCS__
# undef __STDC_WANT_MATH_SPEC_FUNCS__
#endif
/* Enable extensions on HP NonStop. */
#ifndef _TANDEM_SOURCE
# undef _TANDEM_SOURCE
#endif
/* Enable X/Open extensions. Define to 500 only if necessary
to make mbstate_t available. */
#ifndef _XOPEN_SOURCE
# undef _XOPEN_SOURCE
#endif
])dnl
AC_REQUIRE([AC_CHECK_INCLUDES_DEFAULT])dnl
_AC_CHECK_HEADER_ONCE([wchar.h])
_AC_CHECK_HEADER_ONCE([minix/config.h])
dnl Defining __EXTENSIONS__ may break the system headers on some systems.
dnl (FIXME: Which ones?)
AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__],
[ac_cv_safe_to_define___extensions__],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[
# define __EXTENSIONS__ 1
]AC_INCLUDES_DEFAULT])],
[ac_cv_safe_to_define___extensions__=yes],
[ac_cv_safe_to_define___extensions__=no])])
dnl HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to
dnl 500, regardless of whether compiling with -Ae or -D_HPUX_SOURCE=1.
dnl But defining _XOPEN_SOURCE may turn *off* extensions on platforms
dnl not covered by turn-on-extensions macros (notably Dragonfly, Free,
dnl and OpenBSD, which don't have any equivalent of _NETBSD_SOURCE) so
dnl it should only be defined when necessary.
AC_CACHE_CHECK([whether _XOPEN_SOURCE should be defined],
[ac_cv_should_define__xopen_source],
[ac_cv_should_define__xopen_source=no
AS_IF([test $ac_cv_header_wchar_h = yes],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[
#include
mbstate_t x;]])],
[],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[
#define _XOPEN_SOURCE 500
#include
mbstate_t x;]])],
[ac_cv_should_define__xopen_source=yes])])])])
AC_DEFINE([_ALL_SOURCE])
AC_DEFINE([_DARWIN_C_SOURCE])
AC_DEFINE([_GNU_SOURCE])
AC_DEFINE([_HPUX_ALT_XOPEN_SOCKET_API])
AC_DEFINE([_NETBSD_SOURCE])
AC_DEFINE([_OPENBSD_SOURCE])
AC_DEFINE([_POSIX_PTHREAD_SEMANTICS])
AC_DEFINE([__STDC_WANT_IEC_60559_ATTRIBS_EXT__])
AC_DEFINE([__STDC_WANT_IEC_60559_BFP_EXT__])
AC_DEFINE([__STDC_WANT_IEC_60559_DFP_EXT__])
AC_DEFINE([__STDC_WANT_IEC_60559_FUNCS_EXT__])
AC_DEFINE([__STDC_WANT_IEC_60559_TYPES_EXT__])
AC_DEFINE([__STDC_WANT_LIB_EXT2__])
AC_DEFINE([__STDC_WANT_MATH_SPEC_FUNCS__])
AC_DEFINE([_TANDEM_SOURCE])
AS_IF([test $ac_cv_header_minix_config_h = yes],
[MINIX=yes
AC_DEFINE([_MINIX])
AC_DEFINE([_POSIX_SOURCE])
AC_DEFINE([_POSIX_1_SOURCE], [2])],
[MINIX=])
AS_IF([test $ac_cv_safe_to_define___extensions__ = yes],
[AC_DEFINE([__EXTENSIONS__])])
AS_IF([test $ac_cv_should_define__xopen_source = yes],
[AC_DEFINE([_XOPEN_SOURCE], [500])])
])# AC_USE_SYSTEM_EXTENSIONS
])
# gl_USE_SYSTEM_EXTENSIONS
# ------------------------
# Enable extensions on systems that normally disable them,
# typically due to standards-conformance issues.
AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS],
[
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
])
gsasl-1.10.0/m4/signalblocking.m4 0000644 0000000 0000000 00000001562 13773635253 013363 0000000 0000000 # signalblocking.m4 serial 17
dnl Copyright (C) 2001-2002, 2006-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
# Determine available signal blocking primitives. Three different APIs exist:
# 1) POSIX: sigemptyset, sigaddset, sigprocmask
# 2) SYSV: sighold, sigrelse
# 3) BSD: sigblock, sigsetmask
# For simplicity, here we check only for the POSIX signal blocking.
AC_DEFUN([gl_SIGNALBLOCKING],
[
AC_REQUIRE([gl_SIGNAL_H_DEFAULTS])
AC_REQUIRE([gl_CHECK_TYPE_SIGSET_T])
HAVE_POSIX_SIGNALBLOCKING=0
if test "$gl_cv_type_sigset_t" = yes; then
AC_CHECK_FUNC([sigprocmask], [HAVE_POSIX_SIGNALBLOCKING=1])
fi
])
# Prerequisites of lib/sigprocmask.c.
AC_DEFUN([gl_PREREQ_SIGPROCMASK], [:])
gsasl-1.10.0/m4/getdelim.m4 0000644 0000000 0000000 00000005434 13773635253 012171 0000000 0000000 # getdelim.m4 serial 15
dnl Copyright (C) 2005-2007, 2009-2021 Free Software Foundation, Inc.
dnl
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_PREREQ([2.59])
AC_DEFUN([gl_FUNC_GETDELIM],
[
AC_REQUIRE([gl_STDIO_H_DEFAULTS])
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
dnl Persuade glibc to declare getdelim().
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
AC_CHECK_DECLS_ONCE([getdelim])
AC_CHECK_FUNCS_ONCE([getdelim])
if test $ac_cv_func_getdelim = yes; then
HAVE_GETDELIM=1
dnl Found it in some library. Verify that it works.
AC_CACHE_CHECK([for working getdelim function],
[gl_cv_func_working_getdelim],
[echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data
AC_RUN_IFELSE([AC_LANG_SOURCE([[
# include
# include
# include
int main ()
{
FILE *in = fopen ("./conftest.data", "r");
if (!in)
return 1;
{
/* Test result for a NULL buffer and a zero size.
Based on a test program from Karl Heuer. */
char *line = NULL;
size_t siz = 0;
int len = getdelim (&line, &siz, '\n', in);
if (!(len == 4 && line && strcmp (line, "foo\n") == 0))
{ free (line); fclose (in); return 2; }
free (line);
}
{
/* Test result for a NULL buffer and a non-zero size.
This crashes on FreeBSD 8.0. */
char *line = NULL;
size_t siz = (size_t)(~0) / 4;
if (getdelim (&line, &siz, '\n', in) == -1)
{ fclose (in); return 3; }
free (line);
}
fclose (in);
return 0;
}
]])],
[gl_cv_func_working_getdelim=yes],
[gl_cv_func_working_getdelim=no],
[dnl We're cross compiling.
dnl Guess it works on glibc2 systems and musl systems.
AC_EGREP_CPP([Lucky GNU user],
[
#include
#ifdef __GNU_LIBRARY__
#if (__GLIBC__ >= 2) && !defined __UCLIBC__
Lucky GNU user
#endif
#endif
],
[gl_cv_func_working_getdelim="guessing yes"],
[case "$host_os" in
*-musl*) gl_cv_func_working_getdelim="guessing yes" ;;
*) gl_cv_func_working_getdelim="$gl_cross_guess_normal" ;;
esac
])
])
])
case "$gl_cv_func_working_getdelim" in
*yes) ;;
*) REPLACE_GETDELIM=1 ;;
esac
else
HAVE_GETDELIM=0
fi
if test $ac_cv_have_decl_getdelim = no; then
HAVE_DECL_GETDELIM=0
fi
])
# Prerequisites of lib/getdelim.c.
AC_DEFUN([gl_PREREQ_GETDELIM],
[
AC_CHECK_FUNCS([flockfile funlockfile])
AC_CHECK_DECLS([getc_unlocked])
])
gsasl-1.10.0/m4/wint_t.m4 0000644 0000000 0000000 00000003403 13773635253 011675 0000000 0000000 # wint_t.m4 serial 10
dnl Copyright (C) 2003, 2007-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Bruno Haible.
dnl Test whether has the 'wint_t' type and whether gnulib's
dnl or would, if present, override 'wint_t'.
dnl Prerequisite: AC_PROG_CC
AC_DEFUN([gt_TYPE_WINT_T],
[
AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[#include
wint_t foo = (wchar_t)'\0';]],
[[]])],
[gt_cv_c_wint_t=yes],
[gt_cv_c_wint_t=no])])
if test $gt_cv_c_wint_t = yes; then
AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.])
dnl Determine whether gnulib's or would, if present,
dnl override 'wint_t'.
AC_CACHE_CHECK([whether wint_t is large enough],
[gl_cv_type_wint_t_large_enough],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[#include
int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1];
]])],
[gl_cv_type_wint_t_large_enough=yes],
[gl_cv_type_wint_t_large_enough=no])])
if test $gl_cv_type_wint_t_large_enough = no; then
GNULIB_OVERRIDES_WINT_T=1
else
GNULIB_OVERRIDES_WINT_T=0
fi
else
GNULIB_OVERRIDES_WINT_T=0
fi
AC_SUBST([GNULIB_OVERRIDES_WINT_T])
])
dnl Prerequisites of the 'wint_t' override.
AC_DEFUN([gl_TYPE_WINT_T_PREREQ],
[
AC_CHECK_HEADERS_ONCE([crtdefs.h])
if test $ac_cv_header_crtdefs_h = yes; then
HAVE_CRTDEFS_H=1
else
HAVE_CRTDEFS_H=0
fi
AC_SUBST([HAVE_CRTDEFS_H])
])
gsasl-1.10.0/m4/poll_h.m4 0000644 0000000 0000000 00000003014 13773635253 011644 0000000 0000000 # poll_h.m4 serial 3
dnl Copyright (C) 2010-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl Written by Bruno Haible.
AC_DEFUN([gl_POLL_H],
[
dnl Use AC_REQUIRE here, so that the default behavior below is expanded
dnl once only, before all statements that occur in other macros.
AC_REQUIRE([gl_POLL_H_DEFAULTS])
AC_CHECK_HEADERS_ONCE([poll.h])
if test $ac_cv_header_poll_h = yes; then
HAVE_POLL_H=1
else
HAVE_POLL_H=0
fi
AC_SUBST([HAVE_POLL_H])
dnl is always overridden, because of GNULIB_POSIXCHECK.
gl_CHECK_NEXT_HEADERS([poll.h])
gl_PREREQ_SYS_H_WINSOCK2 dnl for HAVE_WINSOCK2_H
dnl Check for declarations of anything we want to poison if the
dnl corresponding gnulib module is not in use.
gl_WARN_ON_USE_PREPARE([[#include ]],
[poll])
])
AC_DEFUN([gl_POLL_MODULE_INDICATOR],
[
dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
AC_REQUIRE([gl_POLL_H_DEFAULTS])
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
AC_DEFUN([gl_POLL_H_DEFAULTS],
[
GNULIB_POLL=0; AC_SUBST([GNULIB_POLL])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_POLL=1; AC_SUBST([HAVE_POLL])
REPLACE_POLL=0; AC_SUBST([REPLACE_POLL])
])
gsasl-1.10.0/m4/inet_ntop.m4 0000644 0000000 0000000 00000004465 13773635253 012401 0000000 0000000 # inet_ntop.m4 serial 21
dnl Copyright (C) 2005-2006, 2008-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_INET_NTOP],
[
AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS])
dnl Persuade Solaris to declare inet_ntop.
AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
AC_REQUIRE([AC_C_RESTRICT])
dnl Most platforms that provide inet_ntop define it in libc.
dnl Solaris 8..10 provide inet_ntop in libnsl instead.
dnl Solaris 2.6..7 provide inet_ntop in libresolv instead.
dnl Haiku provides it in -lnetwork.
dnl Native Windows provides it in -lws2_32 instead, with a declaration in
dnl , and it uses stdcall calling convention, not cdecl
dnl (hence we cannot use AC_CHECK_FUNCS, AC_SEARCH_LIBS to find it).
HAVE_INET_NTOP=1
INET_NTOP_LIB=
gl_PREREQ_SYS_H_WINSOCK2
if test $HAVE_WINSOCK2_H = 1; then
dnl It needs to be overridden, because the stdcall calling convention
dnl is not compliant with POSIX. Set REPLACE_INET_NTOP in order to avoid
dnl a name conflict at the linker level, even though the header file
dnl declares inet_ntop only if _WIN32_WINNT >= 0x0600.
REPLACE_INET_NTOP=1
AC_CHECK_DECLS([inet_ntop],,, [[#include ]])
if test $ac_cv_have_decl_inet_ntop = yes; then
INET_NTOP_LIB="-lws2_32"
else
HAVE_DECL_INET_NTOP=0
fi
else
gl_save_LIBS=$LIBS
AC_SEARCH_LIBS([inet_ntop], [nsl resolv network], [],
[AC_CHECK_FUNCS([inet_ntop])
if test $ac_cv_func_inet_ntop = no; then
HAVE_INET_NTOP=0
fi
])
LIBS=$gl_save_LIBS
if test "$ac_cv_search_inet_ntop" != "no" \
&& test "$ac_cv_search_inet_ntop" != "none required"; then
INET_NTOP_LIB="$ac_cv_search_inet_ntop"
fi
AC_CHECK_HEADERS_ONCE([netdb.h])
AC_CHECK_DECLS([inet_ntop],,,
[[#include
#if HAVE_NETDB_H
# include
#endif
]])
if test $ac_cv_have_decl_inet_ntop = no; then
HAVE_DECL_INET_NTOP=0
fi
fi
AC_SUBST([INET_NTOP_LIB])
])
# Prerequisites of lib/inet_ntop.c.
AC_DEFUN([gl_PREREQ_INET_NTOP], [
AC_REQUIRE([gl_SOCKET_FAMILIES])
])
gsasl-1.10.0/m4/getopt.m4 0000644 0000000 0000000 00000031417 13773635253 011701 0000000 0000000 # getopt.m4 serial 47
dnl Copyright (C) 2002-2006, 2008-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
# Request a POSIX compliant getopt function.
AC_DEFUN([gl_FUNC_GETOPT_POSIX],
[
m4_divert_text([DEFAULTS], [gl_getopt_required=POSIX])
AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
AC_REQUIRE([gl_GETOPT_CHECK_HEADERS])
dnl Other modules can request the gnulib implementation of the getopt
dnl functions unconditionally, by defining gl_REPLACE_GETOPT_ALWAYS.
dnl argp.m4 does this.
m4_ifdef([gl_REPLACE_GETOPT_ALWAYS], [
REPLACE_GETOPT=1
], [
REPLACE_GETOPT=0
if test -n "$gl_replace_getopt"; then
REPLACE_GETOPT=1
fi
])
if test $REPLACE_GETOPT = 1; then
dnl Arrange for getopt.h to be created.
gl_GETOPT_SUBSTITUTE_HEADER
fi
])
# Request a POSIX compliant getopt function with GNU extensions (such as
# options with optional arguments) and the functions getopt_long,
# getopt_long_only.
AC_DEFUN([gl_FUNC_GETOPT_GNU],
[
dnl Set the variable gl_getopt_required, so that all invocations of
dnl gl_GETOPT_CHECK_HEADERS in the scope of the current configure file
dnl will check for getopt with GNU extensions.
dnl This means that if one gnulib-tool invocation requests getopt-posix
dnl and another gnulib-tool invocation requests getopt-gnu, it is as if
dnl both had requested getopt-gnu.
m4_divert_text([INIT_PREPARE], [gl_getopt_required=GNU])
dnl No need to invoke gl_FUNC_GETOPT_POSIX here; this is automatically
dnl done through the module dependency getopt-gnu -> getopt-posix.
])
# Determine whether to replace the entire getopt facility.
AC_DEFUN([gl_GETOPT_CHECK_HEADERS],
[
AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
AC_REQUIRE([AC_PROG_AWK]) dnl for awk that supports ENVIRON
dnl Persuade Solaris to declare optarg, optind, opterr, optopt.
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
gl_CHECK_NEXT_HEADERS([getopt.h])
if test $ac_cv_header_getopt_h = yes; then
HAVE_GETOPT_H=1
else
HAVE_GETOPT_H=0
fi
AC_SUBST([HAVE_GETOPT_H])
gl_replace_getopt=
dnl Test whether is available.
if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
AC_CHECK_HEADERS([getopt.h], [], [gl_replace_getopt=yes])
fi
dnl Test whether the function getopt_long is available.
if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
AC_CHECK_FUNCS([getopt_long_only], [], [gl_replace_getopt=yes])
fi
dnl POSIX 2008 does not specify leading '+' behavior, but see
dnl http://austingroupbugs.net/view.php?id=191 for a recommendation on
dnl the next version of POSIX. For now, we only guarantee leading '+'
dnl behavior with getopt-gnu.
if test -z "$gl_replace_getopt"; then
AC_CACHE_CHECK([whether getopt is POSIX compatible],
[gl_cv_func_getopt_posix],
[
dnl Merging these three different test programs into a single one
dnl would require a reset mechanism. On BSD systems, it can be done
dnl through 'optreset'; on some others (glibc), it can be done by
dnl setting 'optind' to 0; on others again (HP-UX, IRIX, OSF/1,
dnl Solaris 9, musl libc), there is no such mechanism.
if test $cross_compiling = no; then
dnl Sanity check. Succeeds everywhere (except on MSVC,
dnl which lacks and getopt() entirely).
AC_RUN_IFELSE(
[AC_LANG_SOURCE([[
#include
#include
#include
int
main ()
{
static char program[] = "program";
static char a[] = "-a";
static char foo[] = "foo";
static char bar[] = "bar";
char *argv[] = { program, a, foo, bar, NULL };
int c;
c = getopt (4, argv, "ab");
if (!(c == 'a'))
return 1;
c = getopt (4, argv, "ab");
if (!(c == -1))
return 2;
if (!(optind == 2))
return 3;
return 0;
}
]])],
[gl_cv_func_getopt_posix=maybe],
[gl_cv_func_getopt_posix=no])
if test $gl_cv_func_getopt_posix = maybe; then
dnl Sanity check with '+'. Succeeds everywhere (except on MSVC,
dnl which lacks and getopt() entirely).
AC_RUN_IFELSE(
[AC_LANG_SOURCE([[
#include
#include
#include
int
main ()
{
static char program[] = "program";
static char donald[] = "donald";
static char p[] = "-p";
static char billy[] = "billy";
static char duck[] = "duck";
static char a[] = "-a";
static char bar[] = "bar";
char *argv[] = { program, donald, p, billy, duck, a, bar, NULL };
int c;
c = getopt (7, argv, "+abp:q:");
if (!(c == -1))
return 4;
if (!(strcmp (argv[0], "program") == 0))
return 5;
if (!(strcmp (argv[1], "donald") == 0))
return 6;
if (!(strcmp (argv[2], "-p") == 0))
return 7;
if (!(strcmp (argv[3], "billy") == 0))
return 8;
if (!(strcmp (argv[4], "duck") == 0))
return 9;
if (!(strcmp (argv[5], "-a") == 0))
return 10;
if (!(strcmp (argv[6], "bar") == 0))
return 11;
if (!(optind == 1))
return 12;
return 0;
}
]])],
[gl_cv_func_getopt_posix=maybe],
[gl_cv_func_getopt_posix=no])
fi
if test $gl_cv_func_getopt_posix = maybe; then
dnl Detect Mac OS X 10.5, AIX 7.1, mingw bug.
AC_RUN_IFELSE(
[AC_LANG_SOURCE([[
#include
#include
#include
int
main ()
{
static char program[] = "program";
static char ab[] = "-ab";
char *argv[3] = { program, ab, NULL };
if (getopt (2, argv, "ab:") != 'a')
return 13;
if (getopt (2, argv, "ab:") != '?')
return 14;
if (optopt != 'b')
return 15;
if (optind != 2)
return 16;
return 0;
}
]])],
[gl_cv_func_getopt_posix=yes],
[gl_cv_func_getopt_posix=no])
fi
else
case "$host_os" in
darwin* | aix* | mingw*) gl_cv_func_getopt_posix="guessing no";;
*) gl_cv_func_getopt_posix="guessing yes";;
esac
fi
])
case "$gl_cv_func_getopt_posix" in
*no) gl_replace_getopt=yes ;;
esac
fi
if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then
AC_CACHE_CHECK([for working GNU getopt function], [gl_cv_func_getopt_gnu],
[# Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the
# optstring is necessary for programs like m4 that have POSIX-mandated
# semantics for supporting options interspersed with files.
# Also, since getopt_long is a GNU extension, we require optind=0.
# Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT;
# so take care to revert to the correct (non-)export state.
dnl GNU Coding Standards currently allow awk but not env; besides, env
dnl is ambiguous with environment values that contain newlines.
gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }'
case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe"
#include
#include
]GL_NOCRASH[
]], [[
int result = 0;
nocrash_init();
/* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw,
and fails on Mac OS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5,
OSF/1 5.1, Solaris 10. */
{
static char conftest[] = "conftest";
static char plus[] = "-+";
char *argv[3] = { conftest, plus, NULL };
opterr = 0;
if (getopt (2, argv, "+a") != '?')
result |= 1;
}
/* This code succeeds on glibc 2.8, mingw,
and fails on Mac OS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11,
IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */
{
static char program[] = "program";
static char p[] = "-p";
static char foo[] = "foo";
static char bar[] = "bar";
char *argv[] = { program, p, foo, bar, NULL };
optind = 1;
if (getopt (4, argv, "p::") != 'p')
result |= 2;
else if (optarg != NULL)
result |= 4;
else if (getopt (4, argv, "p::") != -1)
result |= 6;
else if (optind != 2)
result |= 8;
}
/* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */
{
static char program[] = "program";
static char foo[] = "foo";
static char p[] = "-p";
char *argv[] = { program, foo, p, NULL };
optind = 0;
if (getopt (3, argv, "-p") != 1)
result |= 16;
else if (getopt (3, argv, "-p") != 'p')
result |= 16;
}
/* This code fails on glibc 2.11. */
{
static char program[] = "program";
static char b[] = "-b";
static char a[] = "-a";
char *argv[] = { program, b, a, NULL };
optind = opterr = 0;
if (getopt (3, argv, "+:a:b") != 'b')
result |= 32;
else if (getopt (3, argv, "+:a:b") != ':')
result |= 32;
}
/* This code dumps core on glibc 2.14. */
{
static char program[] = "program";
static char w[] = "-W";
static char dummy[] = "dummy";
char *argv[] = { program, w, dummy, NULL };
optind = opterr = 1;
if (getopt (3, argv, "W;") != 'W')
result |= 64;
}
return result;
]])],
[gl_cv_func_getopt_gnu=yes],
[gl_cv_func_getopt_gnu=no],
[dnl Cross compiling.
dnl Assume the worst, even on glibc platforms.
dnl But obey --enable-cross-guesses.
gl_cv_func_getopt_gnu="$gl_cross_guess_normal"
])
case $gl_had_POSIXLY_CORRECT in
exported) ;;
yes) AS_UNSET([POSIXLY_CORRECT]); POSIXLY_CORRECT=1 ;;
*) AS_UNSET([POSIXLY_CORRECT]) ;;
esac
])
if test "$gl_cv_func_getopt_gnu" != yes; then
gl_replace_getopt=yes
else
AC_CACHE_CHECK([for working GNU getopt_long function],
[gl_cv_func_getopt_long_gnu],
[AC_RUN_IFELSE(
[AC_LANG_PROGRAM(
[[#include
#include
#include
]],
[[static const struct option long_options[] =
{
{ "xtremely-",no_argument, NULL, 1003 },
{ "xtra", no_argument, NULL, 1001 },
{ "xtreme", no_argument, NULL, 1002 },
{ "xtremely", no_argument, NULL, 1003 },
{ NULL, 0, NULL, 0 }
};
/* This code fails on OpenBSD 5.0. */
{
static char program[] = "program";
static char xtremel[] = "--xtremel";
char *argv[] = { program, xtremel, NULL };
int option_index;
optind = 1; opterr = 0;
if (getopt_long (2, argv, "", long_options, &option_index) != 1003)
return 1;
}
return 0;
]])],
[gl_cv_func_getopt_long_gnu=yes],
[gl_cv_func_getopt_long_gnu=no],
[dnl Cross compiling. Guess no on OpenBSD, yes otherwise.
case "$host_os" in
openbsd*) gl_cv_func_getopt_long_gnu="guessing no";;
*) gl_cv_func_getopt_long_gnu="guessing yes";;
esac
])
])
case "$gl_cv_func_getopt_long_gnu" in
*yes) ;;
*) gl_replace_getopt=yes ;;
esac
fi
fi
])
AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER],
[
AC_CHECK_HEADERS_ONCE([sys/cdefs.h])
if test $ac_cv_header_sys_cdefs_h = yes; then
HAVE_SYS_CDEFS_H=1
else
HAVE_SYS_CDEFS_H=0
fi
AC_SUBST([HAVE_SYS_CDEFS_H])
AC_DEFINE([__GETOPT_PREFIX], [[rpl_]],
[Define to rpl_ if the getopt replacement functions and variables
should be used.])
GETOPT_H=getopt.h
GETOPT_CDEFS_H=getopt-cdefs.h
AC_SUBST([GETOPT_H])
AC_SUBST([GETOPT_CDEFS_H])
])
gsasl-1.10.0/m4/sys_stat_h.m4 0000644 0000000 0000000 00000010310 13773635253 012544 0000000 0000000 # sys_stat_h.m4 serial 36 -*- Autoconf -*-
dnl Copyright (C) 2006-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Eric Blake.
dnl Provide a GNU-like .
AC_DEFUN([gl_HEADER_SYS_STAT_H],
[
AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
dnl Check for broken stat macros.
AC_REQUIRE([AC_HEADER_STAT])
gl_CHECK_NEXT_HEADERS([sys/stat.h])
dnl Ensure the type mode_t gets defined.
AC_REQUIRE([AC_TYPE_MODE_T])
dnl Whether to enable precise timestamps in 'struct stat'.
m4_ifdef([gl_WINDOWS_STAT_TIMESPEC], [
AC_REQUIRE([gl_WINDOWS_STAT_TIMESPEC])
], [
WINDOWS_STAT_TIMESPEC=0
])
AC_SUBST([WINDOWS_STAT_TIMESPEC])
dnl Whether to ensure that struct stat.st_size is 64-bit wide.
m4_ifdef([gl_LARGEFILE], [
AC_REQUIRE([gl_LARGEFILE])
], [
WINDOWS_64_BIT_ST_SIZE=0
])
AC_SUBST([WINDOWS_64_BIT_ST_SIZE])
dnl Define types that are supposed to be defined in or
dnl .
AC_CHECK_TYPE([nlink_t], [],
[AC_DEFINE([nlink_t], [int],
[Define to the type of st_nlink in struct stat, or a supertype.])],
[#include
#include ])
dnl Check for declarations of anything we want to poison if the
dnl corresponding gnulib module is not in use.
gl_WARN_ON_USE_PREPARE([[#include
]], [fchmodat fstat fstatat futimens getumask lchmod lstat
mkdirat mkfifo mkfifoat mknod mknodat stat utimensat])
AC_REQUIRE([AC_C_RESTRICT])
])
AC_DEFUN([gl_SYS_STAT_MODULE_INDICATOR],
[
dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS])
gl_MODULE_INDICATOR_SET_VARIABLE([$1])
dnl Define it also as a C macro, for the benefit of the unit tests.
gl_MODULE_INDICATOR_FOR_TESTS([$1])
])
AC_DEFUN([gl_SYS_STAT_H_DEFAULTS],
[
AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl for REPLACE_FCHDIR
GNULIB_FCHMODAT=0; AC_SUBST([GNULIB_FCHMODAT])
GNULIB_FSTAT=0; AC_SUBST([GNULIB_FSTAT])
GNULIB_FSTATAT=0; AC_SUBST([GNULIB_FSTATAT])
GNULIB_FUTIMENS=0; AC_SUBST([GNULIB_FUTIMENS])
GNULIB_GETUMASK=0; AC_SUBST([GNULIB_GETUMASK])
GNULIB_LCHMOD=0; AC_SUBST([GNULIB_LCHMOD])
GNULIB_LSTAT=0; AC_SUBST([GNULIB_LSTAT])
GNULIB_MKDIR=0; AC_SUBST([GNULIB_MKDIR])
GNULIB_MKDIRAT=0; AC_SUBST([GNULIB_MKDIRAT])
GNULIB_MKFIFO=0; AC_SUBST([GNULIB_MKFIFO])
GNULIB_MKFIFOAT=0; AC_SUBST([GNULIB_MKFIFOAT])
GNULIB_MKNOD=0; AC_SUBST([GNULIB_MKNOD])
GNULIB_MKNODAT=0; AC_SUBST([GNULIB_MKNODAT])
GNULIB_STAT=0; AC_SUBST([GNULIB_STAT])
GNULIB_UTIMENSAT=0; AC_SUBST([GNULIB_UTIMENSAT])
GNULIB_OVERRIDES_STRUCT_STAT=0; AC_SUBST([GNULIB_OVERRIDES_STRUCT_STAT])
dnl Support Microsoft deprecated alias function names by default.
GNULIB_MDA_CHMOD=1; AC_SUBST([GNULIB_MDA_CHMOD])
GNULIB_MDA_MKDIR=1; AC_SUBST([GNULIB_MDA_MKDIR])
GNULIB_MDA_UMASK=1; AC_SUBST([GNULIB_MDA_UMASK])
dnl Assume proper GNU behavior unless another module says otherwise.
HAVE_FCHMODAT=1; AC_SUBST([HAVE_FCHMODAT])
HAVE_FSTATAT=1; AC_SUBST([HAVE_FSTATAT])
HAVE_FUTIMENS=1; AC_SUBST([HAVE_FUTIMENS])
HAVE_GETUMASK=1; AC_SUBST([HAVE_GETUMASK])
HAVE_LCHMOD=1; AC_SUBST([HAVE_LCHMOD])
HAVE_LSTAT=1; AC_SUBST([HAVE_LSTAT])
HAVE_MKDIRAT=1; AC_SUBST([HAVE_MKDIRAT])
HAVE_MKFIFO=1; AC_SUBST([HAVE_MKFIFO])
HAVE_MKFIFOAT=1; AC_SUBST([HAVE_MKFIFOAT])
HAVE_MKNOD=1; AC_SUBST([HAVE_MKNOD])
HAVE_MKNODAT=1; AC_SUBST([HAVE_MKNODAT])
HAVE_UTIMENSAT=1; AC_SUBST([HAVE_UTIMENSAT])
REPLACE_FCHMODAT=0; AC_SUBST([REPLACE_FCHMODAT])
REPLACE_FSTAT=0; AC_SUBST([REPLACE_FSTAT])
REPLACE_FSTATAT=0; AC_SUBST([REPLACE_FSTATAT])
REPLACE_FUTIMENS=0; AC_SUBST([REPLACE_FUTIMENS])
REPLACE_LSTAT=0; AC_SUBST([REPLACE_LSTAT])
REPLACE_MKDIR=0; AC_SUBST([REPLACE_MKDIR])
REPLACE_MKFIFO=0; AC_SUBST([REPLACE_MKFIFO])
REPLACE_MKNOD=0; AC_SUBST([REPLACE_MKNOD])
REPLACE_STAT=0; AC_SUBST([REPLACE_STAT])
REPLACE_UTIMENSAT=0; AC_SUBST([REPLACE_UTIMENSAT])
])
gsasl-1.10.0/m4/sys_types_h.m4 0000644 0000000 0000000 00000003454 13773635253 012750 0000000 0000000 # sys_types_h.m4 serial 11
dnl Copyright (C) 2011-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN_ONCE([gl_SYS_TYPES_H],
[
dnl Use sane struct stat types in OpenVMS 8.2 and later.
AC_DEFINE([_USE_STD_STAT], 1, [For standard stat data types on VMS.])
AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS])
gl_NEXT_HEADERS([sys/types.h])
dnl Ensure the type pid_t gets defined.
AC_REQUIRE([AC_TYPE_PID_T])
dnl Ensure the type mode_t gets defined.
AC_REQUIRE([AC_TYPE_MODE_T])
dnl Whether to override the 'off_t' type.
AC_REQUIRE([gl_TYPE_OFF_T])
dnl Whether to override the 'dev_t' and 'ino_t' types.
m4_ifdef([gl_WINDOWS_STAT_INODES], [
AC_REQUIRE([gl_WINDOWS_STAT_INODES])
], [
WINDOWS_STAT_INODES=0
])
AC_SUBST([WINDOWS_STAT_INODES])
])
AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS],
[
])
# This works around a buggy version in autoconf <= 2.69.
# See
# The 2.70 version isn't quoted properly, so override it too.
m4_version_prereq([2.70.1], [], [
m4_undefine([AC_HEADER_MAJOR])
AC_DEFUN([AC_HEADER_MAJOR],
[AC_CHECK_HEADERS_ONCE([sys/types.h])
AC_CHECK_HEADER([sys/mkdev.h],
[AC_DEFINE([MAJOR_IN_MKDEV], [1],
[Define to 1 if `major', `minor', and `makedev' are
declared in .])])
if test $ac_cv_header_sys_mkdev_h = no; then
AC_CHECK_HEADER([sys/sysmacros.h],
[AC_DEFINE([MAJOR_IN_SYSMACROS], [1],
[Define to 1 if `major', `minor', and `makedev'
are declared in .])])
fi
])# AC_HEADER_MAJOR
])
gsasl-1.10.0/m4/fpieee.m4 0000644 0000000 0000000 00000004340 13773635253 011627 0000000 0000000 # fpieee.m4 serial 2 -*- coding: utf-8 -*-
dnl Copyright (C) 2007, 2009-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl IEEE 754 standardized three items:
dnl - The formats of single-float and double-float - nowadays commonly
dnl available as 'float' and 'double' in C and C++.
dnl No autoconf test needed.
dnl - The overflow and division by zero behaviour: The result are values
dnl '±Inf' and 'NaN', rather than exceptions as it was before.
dnl This file provides an autoconf macro for ensuring this behaviour of
dnl floating-point operations.
dnl - A set of conditions (overflow, underflow, inexact, etc.) which can
dnl be configured to trigger an exception.
dnl This cannot be done in a portable way: it depends on the compiler,
dnl libc, kernel, and CPU. No autoconf macro is provided for this.
dnl Ensure non-trapping behaviour of floating-point overflow and
dnl floating-point division by zero.
dnl (For integer overflow, see gcc's -ftrapv option; for integer division by
dnl zero, see the autoconf macro in intdiv0.m4.)
AC_DEFUN([gl_FP_IEEE],
[
AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([AC_CANONICAL_HOST])
# IEEE behaviour is the default on all CPUs except Alpha and SH
# (according to the test results of Bruno Haible's ieeefp/fenv_default.m4
# and the GCC 4.1.2 manual).
case "$host_cpu" in
alpha*)
# On Alpha systems, a compiler option provides the behaviour.
# See the ieee(3) manual page, also available at
#
if test -n "$GCC"; then
# GCC has the option -mieee.
# For full IEEE compliance (rarely needed), use option -mieee-with-inexact.
CPPFLAGS="$CPPFLAGS -mieee"
else
# Compaq (ex-DEC) C has the option -ieee, equivalent to -ieee_with_no_inexact.
# For full IEEE compliance (rarely needed), use option -ieee_with_inexact.
CPPFLAGS="$CPPFLAGS -ieee"
fi
;;
sh*)
if test -n "$GCC"; then
# GCC has the option -mieee.
CPPFLAGS="$CPPFLAGS -mieee"
fi
;;
esac
])
gsasl-1.10.0/m4/inet_pton.m4 0000644 0000000 0000000 00000004460 13773635253 012374 0000000 0000000 # inet_pton.m4 serial 19
dnl Copyright (C) 2006, 2008-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_INET_PTON],
[
AC_REQUIRE([gl_ARPA_INET_H_DEFAULTS])
dnl Persuade Solaris to declare inet_pton.
AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
AC_REQUIRE([AC_C_RESTRICT])
dnl Most platforms that provide inet_pton define it in libc.
dnl Solaris 8..10 provide inet_pton in libnsl instead.
dnl Solaris 2.6..7 provide inet_pton in libresolv instead.
dnl Haiku provides it in -lnetwork.
dnl Native Windows provides it in -lws2_32 instead, with a declaration in
dnl , and it uses stdcall calling convention, not cdecl
dnl (hence we cannot use AC_CHECK_FUNCS, AC_SEARCH_LIBS to find it).
HAVE_INET_PTON=1
INET_PTON_LIB=
gl_PREREQ_SYS_H_WINSOCK2
if test $HAVE_WINSOCK2_H = 1; then
dnl It needs to be overridden, because the stdcall calling convention
dnl is not compliant with POSIX. Set REPLACE_INET_PTON in order to avoid
dnl a name conflict at the linker level, even though the header file
dnl declares inet_pton only if _WIN32_WINNT >= 0x0600.
REPLACE_INET_PTON=1
AC_CHECK_DECLS([inet_pton],,, [[#include ]])
if test $ac_cv_have_decl_inet_pton = yes; then
INET_PTON_LIB="-lws2_32"
else
HAVE_DECL_INET_PTON=0
fi
else
gl_save_LIBS=$LIBS
AC_SEARCH_LIBS([inet_pton], [nsl resolv network], [],
[AC_CHECK_FUNCS([inet_pton])
if test $ac_cv_func_inet_pton = no; then
HAVE_INET_PTON=0
fi
])
LIBS=$gl_save_LIBS
if test "$ac_cv_search_inet_pton" != "no" \
&& test "$ac_cv_search_inet_pton" != "none required"; then
INET_PTON_LIB="$ac_cv_search_inet_pton"
fi
AC_CHECK_HEADERS_ONCE([netdb.h])
AC_CHECK_DECLS([inet_pton],,,
[[#include
#if HAVE_NETDB_H
# include
#endif
]])
if test $ac_cv_have_decl_inet_pton = no; then
HAVE_DECL_INET_PTON=0
fi
fi
AC_SUBST([INET_PTON_LIB])
])
# Prerequisites of lib/inet_pton.c.
AC_DEFUN([gl_PREREQ_INET_PTON], [
AC_REQUIRE([gl_SOCKET_FAMILIES])
])
gsasl-1.10.0/m4/exponentd.m4 0000644 0000000 0000000 00000007552 13773635253 012406 0000000 0000000 # exponentd.m4 serial 3
dnl Copyright (C) 2007-2008, 2010-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_DOUBLE_EXPONENT_LOCATION],
[
AC_CACHE_CHECK([where to find the exponent in a 'double'],
[gl_cv_cc_double_expbit0],
[
AC_RUN_IFELSE(
[AC_LANG_SOURCE([[
#include
#include
#include
#include
#define NWORDS \
((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
typedef union { double value; unsigned int word[NWORDS]; } memory_double;
static unsigned int ored_words[NWORDS];
static unsigned int anded_words[NWORDS];
static void add_to_ored_words (double x)
{
memory_double m;
size_t i;
/* Clear it first, in case sizeof (double) < sizeof (memory_double). */
memset (&m, 0, sizeof (memory_double));
m.value = x;
for (i = 0; i < NWORDS; i++)
{
ored_words[i] |= m.word[i];
anded_words[i] &= m.word[i];
}
}
int main ()
{
size_t j;
FILE *fp = fopen ("conftest.out", "w");
if (fp == NULL)
return 1;
for (j = 0; j < NWORDS; j++)
anded_words[j] = ~ (unsigned int) 0;
add_to_ored_words (0.25);
add_to_ored_words (0.5);
add_to_ored_words (1.0);
add_to_ored_words (2.0);
add_to_ored_words (4.0);
/* Remove bits that are common (e.g. if representation of the first mantissa
bit is explicit). */
for (j = 0; j < NWORDS; j++)
ored_words[j] &= ~anded_words[j];
/* Now find the nonzero word. */
for (j = 0; j < NWORDS; j++)
if (ored_words[j] != 0)
break;
if (j < NWORDS)
{
size_t i;
for (i = j + 1; i < NWORDS; i++)
if (ored_words[i] != 0)
{
fprintf (fp, "unknown");
return (fclose (fp) != 0);
}
for (i = 0; ; i++)
if ((ored_words[j] >> i) & 1)
{
fprintf (fp, "word %d bit %d", (int) j, (int) i);
return (fclose (fp) != 0);
}
}
fprintf (fp, "unknown");
return (fclose (fp) != 0);
}
]])],
[gl_cv_cc_double_expbit0=`cat conftest.out`],
[gl_cv_cc_double_expbit0="unknown"],
[
dnl On ARM, there are two 'double' floating-point formats, used by
dnl different sets of instructions: The older FPA instructions assume
dnl that they are stored in big-endian word order, while the words
dnl (like integer types) are stored in little-endian byte order.
dnl The newer VFP instructions assume little-endian order
dnl consistently.
AC_EGREP_CPP([mixed_endianness], [
#if defined arm || defined __arm || defined __arm__
mixed_endianness
#endif
],
[gl_cv_cc_double_expbit0="unknown"],
[
pushdef([AC_MSG_CHECKING],[:])dnl
pushdef([AC_MSG_RESULT],[:])dnl
pushdef([AC_MSG_RESULT_UNQUOTED],[:])dnl
AC_C_BIGENDIAN(
[gl_cv_cc_double_expbit0="word 0 bit 20"],
[gl_cv_cc_double_expbit0="word 1 bit 20"],
[gl_cv_cc_double_expbit0="unknown"])
popdef([AC_MSG_RESULT_UNQUOTED])dnl
popdef([AC_MSG_RESULT])dnl
popdef([AC_MSG_CHECKING])dnl
])
])
rm -f conftest.out
])
case "$gl_cv_cc_double_expbit0" in
word*bit*)
word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'`
bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'`
AC_DEFINE_UNQUOTED([DBL_EXPBIT0_WORD], [$word],
[Define as the word index where to find the exponent of 'double'.])
AC_DEFINE_UNQUOTED([DBL_EXPBIT0_BIT], [$bit],
[Define as the bit index in the word where to find bit 0 of the exponent of 'double'.])
;;
esac
])
gsasl-1.10.0/m4/stdarg.m4 0000644 0000000 0000000 00000005333 13773635253 011661 0000000 0000000 # stdarg.m4 serial 7
dnl Copyright (C) 2006, 2008-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Bruno Haible.
dnl Provide a working va_copy in combination with .
AC_DEFUN([gl_STDARG_H],
[
STDARG_H=''
NEXT_STDARG_H=''
AC_CACHE_CHECK([for va_copy],
[gl_cv_func_va_copy],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[#include ]],
[[
#ifndef va_copy
void (*func) (va_list, va_list) = va_copy;
#endif
]])],
[gl_cv_func_va_copy=yes],
[gl_cv_func_va_copy=no])
])
if test $gl_cv_func_va_copy = no; then
dnl Provide a substitute.
dnl Usually a simple definition in is enough. Not so on AIX 5
dnl with some versions of the /usr/vac/bin/cc compiler. It has an
dnl which does '#undef va_copy', leading to a missing va_copy symbol. For
dnl this platform, we use an substitute. But we cannot use this
dnl approach on other platforms, because often defines only
dnl preprocessor macros and gl_ABSOLUTE_HEADER, gl_CHECK_NEXT_HEADERS do
dnl not work in this situation.
AC_EGREP_CPP([vaccine],
[#if defined _AIX && !defined __GNUC__
AIX vaccine
#endif
], [gl_aixcc=yes], [gl_aixcc=no])
if test $gl_aixcc = yes; then
dnl Provide a substitute file.
STDARG_H=stdarg.h
gl_NEXT_HEADERS([stdarg.h])
dnl Fallback for the case when contains only macro definitions.
if test "$gl_cv_next_stdarg_h" = '""'; then
gl_cv_next_stdarg_h='"///usr/include/stdarg.h"'
NEXT_STDARG_H="$gl_cv_next_stdarg_h"
fi
else
dnl Provide a substitute in , either __va_copy or as a simple
dnl assignment.
gl_CACHE_VAL_SILENT([gl_cv_func___va_copy], [
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[#include ]],
[[
#ifndef __va_copy
error, bail out
#endif
]])],
[gl_cv_func___va_copy=yes],
[gl_cv_func___va_copy=no])])
if test $gl_cv_func___va_copy = yes; then
AC_DEFINE([va_copy], [__va_copy],
[Define as a macro for copying va_list variables.])
else
AH_VERBATIM([gl_VA_COPY], [/* A replacement for va_copy, if needed. */
#define gl_va_copy(a,b) ((a) = (b))])
AC_DEFINE([va_copy], [gl_va_copy],
[Define as a macro for copying va_list variables.])
fi
fi
fi
AC_SUBST([STDARG_H])
AM_CONDITIONAL([GL_GENERATE_STDARG_H], [test -n "$STDARG_H"])
AC_SUBST([NEXT_STDARG_H])
])
gsasl-1.10.0/m4/gtk-doc.m4 0000644 0000000 0000000 00000010660 13773647247 011732 0000000 0000000 # -*- mode: autoconf -*-
#
# gtk-doc.m4 - configure macro to check for gtk-doc
# Copyright (C) 2003 James Henstridge
# 2007-2017 Stefan Sauer
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program 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
# along with this program. If not, see .
#
# As a special exception, the above copyright owner gives unlimited
# permission to copy, distribute and modify the configure scripts that
# are the output of Autoconf when processing the Macro. You need not
# follow the terms of the GNU General Public License when using or
# distributing such scripts, even though portions of the text of the
# Macro appear in them. The GNU General Public License (GPL) does govern
# all other use of the material that constitutes the Autoconf Macro.
# serial 2
dnl Usage:
dnl GTK_DOC_CHECK([minimum-gtk-doc-version])
AC_DEFUN([GTK_DOC_CHECK],
[
AC_REQUIRE([PKG_PROG_PKG_CONFIG])
AC_BEFORE([AC_PROG_LIBTOOL],[$0])dnl setup libtool first
AC_BEFORE([AM_PROG_LIBTOOL],[$0])dnl setup libtool first
ifelse([$1],[],[gtk_doc_requires="gtk-doc"],[gtk_doc_requires="gtk-doc >= $1"])
AC_MSG_CHECKING([for gtk-doc])
PKG_CHECK_EXISTS([$gtk_doc_requires],[have_gtk_doc=yes],[have_gtk_doc=no])
AC_MSG_RESULT($have_gtk_doc)
if test "$have_gtk_doc" = "no"; then
AC_MSG_WARN([
You will not be able to create source packages with 'make dist'
because $gtk_doc_requires is not found.])
fi
dnl check for tools we added during development
dnl Use AC_CHECK_PROG to avoid the check target using an absolute path that
dnl may not be writable by the user. Currently, automake requires that the
dnl test name must end in '.test'.
dnl https://bugzilla.gnome.org/show_bug.cgi?id=701638
AC_CHECK_PROG([GTKDOC_CHECK],[gtkdoc-check],[gtkdoc-check.test])
AC_PATH_PROG([GTKDOC_CHECK_PATH],[gtkdoc-check])
AC_PATH_PROGS([GTKDOC_REBASE],[gtkdoc-rebase],[true])
AC_PATH_PROG([GTKDOC_MKPDF],[gtkdoc-mkpdf])
dnl for overriding the documentation installation directory
AC_ARG_WITH([html-dir],
AS_HELP_STRING([--with-html-dir=PATH], [path to installed docs]),,
[with_html_dir='${datadir}/gtk-doc/html'])
HTML_DIR="$with_html_dir"
AC_SUBST([HTML_DIR])
dnl enable/disable documentation building
AC_ARG_ENABLE([gtk-doc],
AS_HELP_STRING([--enable-gtk-doc],
[use gtk-doc to build documentation [[default=no]]]),,
[enable_gtk_doc=no])
AC_MSG_CHECKING([whether to build gtk-doc documentation])
AC_MSG_RESULT($enable_gtk_doc)
if test "x$enable_gtk_doc" = "xyes" && test "$have_gtk_doc" = "no"; then
AC_MSG_ERROR([
You must have $gtk_doc_requires installed to build documentation for
$PACKAGE_NAME. Please install gtk-doc or disable building the
documentation by adding '--disable-gtk-doc' to '[$]0'.])
fi
dnl don't check for glib if we build glib
if test "x$PACKAGE_NAME" != "xglib"; then
dnl don't fail if someone does not have glib
PKG_CHECK_MODULES(GTKDOC_DEPS, glib-2.0 >= 2.10.0 gobject-2.0 >= 2.10.0,,[:])
fi
dnl enable/disable output formats
AC_ARG_ENABLE([gtk-doc-html],
AS_HELP_STRING([--enable-gtk-doc-html],
[build documentation in html format [[default=yes]]]),,
[enable_gtk_doc_html=yes])
AC_ARG_ENABLE([gtk-doc-pdf],
AS_HELP_STRING([--enable-gtk-doc-pdf],
[build documentation in pdf format [[default=no]]]),,
[enable_gtk_doc_pdf=no])
if test -z "$GTKDOC_MKPDF"; then
enable_gtk_doc_pdf=no
fi
if test -z "$AM_DEFAULT_VERBOSITY"; then
AM_DEFAULT_VERBOSITY=1
fi
AC_SUBST([AM_DEFAULT_VERBOSITY])
AM_CONDITIONAL([HAVE_GTK_DOC], [test x$have_gtk_doc = xyes])
AM_CONDITIONAL([ENABLE_GTK_DOC], [test x$enable_gtk_doc = xyes])
AM_CONDITIONAL([GTK_DOC_BUILD_HTML], [test x$enable_gtk_doc_html = xyes])
AM_CONDITIONAL([GTK_DOC_BUILD_PDF], [test x$enable_gtk_doc_pdf = xyes])
AM_CONDITIONAL([GTK_DOC_USE_LIBTOOL], [test -n "$LIBTOOL"])
AM_CONDITIONAL([GTK_DOC_USE_REBASE], [test -n "$GTKDOC_REBASE"])
])
gsasl-1.10.0/m4/mbsinit.m4 0000644 0000000 0000000 00000002401 13773635253 012033 0000000 0000000 # mbsinit.m4 serial 9
dnl Copyright (C) 2008, 2010-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
AC_DEFUN([gl_FUNC_MBSINIT],
[
AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
AC_REQUIRE([AC_CANONICAL_HOST])
AC_REQUIRE([AC_TYPE_MBSTATE_T])
gl_MBSTATE_T_BROKEN
AC_CHECK_FUNCS_ONCE([mbsinit])
if test $ac_cv_func_mbsinit = no; then
HAVE_MBSINIT=0
AC_CHECK_DECLS([mbsinit],,, [[
#include
]])
if test $ac_cv_have_decl_mbsinit = yes; then
dnl On Minix 3.1.8, the system's declares mbsinit() although
dnl it does not have the function. Avoid a collision with gnulib's
dnl replacement.
REPLACE_MBSINIT=1
fi
else
if test $REPLACE_MBSTATE_T = 1; then
REPLACE_MBSINIT=1
else
dnl On mingw, mbsinit() always returns 1, which is inappropriate for
dnl states produced by mbrtowc() for an incomplete multibyte character
dnl in multibyte locales.
case "$host_os" in
mingw*) REPLACE_MBSINIT=1 ;;
esac
fi
fi
])
# Prerequisites of lib/mbsinit.c.
AC_DEFUN([gl_PREREQ_MBSINIT], [
:
])
gsasl-1.10.0/m4/host-cpu-c-abi.m4 0000644 0000000 0000000 00000053640 13773635253 013114 0000000 0000000 # host-cpu-c-abi.m4 serial 13
dnl Copyright (C) 2002-2021 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Bruno Haible and Sam Steingold.
dnl Sets the HOST_CPU variable to the canonical name of the CPU.
dnl Sets the HOST_CPU_C_ABI variable to the canonical name of the CPU with its
dnl C language ABI (application binary interface).
dnl Also defines __${HOST_CPU}__ and __${HOST_CPU_C_ABI}__ as C macros in
dnl config.h.
dnl
dnl This canonical name can be used to select a particular assembly language
dnl source file that will interoperate with C code on the given host.
dnl
dnl For example:
dnl * 'i386' and 'sparc' are different canonical names, because code for i386
dnl will not run on SPARC CPUs and vice versa. They have different
dnl instruction sets.
dnl * 'sparc' and 'sparc64' are different canonical names, because code for
dnl 'sparc' and code for 'sparc64' cannot be linked together: 'sparc' code
dnl contains 32-bit instructions, whereas 'sparc64' code contains 64-bit
dnl instructions. A process on a SPARC CPU can be in 32-bit mode or in 64-bit
dnl mode, but not both.
dnl * 'mips' and 'mipsn32' are different canonical names, because they use
dnl different argument passing and return conventions for C functions, and
dnl although the instruction set of 'mips' is a large subset of the
dnl instruction set of 'mipsn32'.
dnl * 'mipsn32' and 'mips64' are different canonical names, because they use
dnl different sizes for the C types like 'int' and 'void *', and although
dnl the instruction sets of 'mipsn32' and 'mips64' are the same.
dnl * The same canonical name is used for different endiannesses. You can
dnl determine the endianness through preprocessor symbols:
dnl - 'arm': test __ARMEL__.
dnl - 'mips', 'mipsn32', 'mips64': test _MIPSEB vs. _MIPSEL.
dnl - 'powerpc64': test _BIG_ENDIAN vs. _LITTLE_ENDIAN.
dnl * The same name 'i386' is used for CPUs of type i386, i486, i586
dnl (Pentium), AMD K7, Pentium II, Pentium IV, etc., because
dnl - Instructions that do not exist on all of these CPUs (cmpxchg,
dnl MMX, SSE, SSE2, 3DNow! etc.) are not frequently used. If your
dnl assembly language source files use such instructions, you will
dnl need to make the distinction.
dnl - Speed of execution of the common instruction set is reasonable across
dnl the entire family of CPUs. If you have assembly language source files
dnl that are optimized for particular CPU types (like GNU gmp has), you
dnl will need to make the distinction.
dnl See .
AC_DEFUN([gl_HOST_CPU_C_ABI],
[
AC_REQUIRE([AC_CANONICAL_HOST])
AC_REQUIRE([gl_C_ASM])
AC_CACHE_CHECK([host CPU and C ABI], [gl_cv_host_cpu_c_abi],
[case "$host_cpu" in
changequote(,)dnl
i[34567]86 )
changequote([,])dnl
gl_cv_host_cpu_c_abi=i386
;;
x86_64 )
# On x86_64 systems, the C compiler may be generating code in one of
# these ABIs:
# - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64.
# - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64
# with native Windows (mingw, MSVC).
# - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32.
# - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386.
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE(
[[#if (defined __x86_64__ || defined __amd64__ \
|| defined _M_X64 || defined _M_AMD64)
int ok;
#else
error fail
#endif
]])],
[AC_COMPILE_IFELSE(
[AC_LANG_SOURCE(
[[#if defined __ILP32__ || defined _ILP32
int ok;
#else
error fail
#endif
]])],
[gl_cv_host_cpu_c_abi=x86_64-x32],
[gl_cv_host_cpu_c_abi=x86_64])],
[gl_cv_host_cpu_c_abi=i386])
;;
changequote(,)dnl
alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] )
changequote([,])dnl
gl_cv_host_cpu_c_abi=alpha
;;
arm* | aarch64 )
# Assume arm with EABI.
# On arm64 systems, the C compiler may be generating code in one of
# these ABIs:
# - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64.
# - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32.
# - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf.
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE(
[[#ifdef __aarch64__
int ok;
#else
error fail
#endif
]])],
[AC_COMPILE_IFELSE(
[AC_LANG_SOURCE(
[[#if defined __ILP32__ || defined _ILP32
int ok;
#else
error fail
#endif
]])],
[gl_cv_host_cpu_c_abi=arm64-ilp32],
[gl_cv_host_cpu_c_abi=arm64])],
[# Don't distinguish little-endian and big-endian arm, since they
# don't require different machine code for simple operations and
# since the user can distinguish them through the preprocessor
# defines __ARMEL__ vs. __ARMEB__.
# But distinguish arm which passes floating-point arguments and
# return values in integer registers (r0, r1, ...) - this is
# gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which
# passes them in float registers (s0, s1, ...) and double registers
# (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer
# sets the preprocessor defines __ARM_PCS (for the first case) and
# __ARM_PCS_VFP (for the second case), but older GCC does not.
echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c
# Look for a reference to the register d0 in the .s file.
AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1
if LC_ALL=C grep 'd0,' conftest.$gl_asmext >/dev/null; then
gl_cv_host_cpu_c_abi=armhf
else
gl_cv_host_cpu_c_abi=arm
fi
rm -f conftest*
])
;;
hppa1.0 | hppa1.1 | hppa2.0* | hppa64 )
# On hppa, the C compiler may be generating 32-bit code or 64-bit
# code. In the latter case, it defines _LP64 and __LP64__.
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE(
[[#ifdef __LP64__
int ok;
#else
error fail
#endif
]])],
[gl_cv_host_cpu_c_abi=hppa64],
[gl_cv_host_cpu_c_abi=hppa])
;;
ia64* )
# On ia64 on HP-UX, the C compiler may be generating 64-bit code or
# 32-bit code. In the latter case, it defines _ILP32.
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE(
[[#ifdef _ILP32
int ok;
#else
error fail
#endif
]])],
[gl_cv_host_cpu_c_abi=ia64-ilp32],
[gl_cv_host_cpu_c_abi=ia64])
;;
mips* )
# We should also check for (_MIPS_SZPTR == 64), but gcc keeps this
# at 32.
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE(
[[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64)
int ok;
#else
error fail
#endif
]])],
[gl_cv_host_cpu_c_abi=mips64],
[# In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but
# may later get defined by ), and _MIPS_SIM == _ABIN32.
# In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but
# may later get defined by ), and _MIPS_SIM == _ABIO32.
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE(
[[#if (_MIPS_SIM == _ABIN32)
int ok;
#else
error fail
#endif
]])],
[gl_cv_host_cpu_c_abi=mipsn32],
[gl_cv_host_cpu_c_abi=mips])])
;;
powerpc* )
# Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD.
# No need to distinguish them here; the caller may distinguish
# them based on the OS.
# On powerpc64 systems, the C compiler may still be generating
# 32-bit code. And on powerpc-ibm-aix systems, the C compiler may
# be generating 64-bit code.
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE(
[[#if defined __powerpc64__ || defined _ARCH_PPC64
int ok;
#else
error fail
#endif
]])],
[# On powerpc64, there are two ABIs on Linux: The AIX compatible
# one and the ELFv2 one. The latter defines _CALL_ELF=2.
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE(
[[#if defined _CALL_ELF && _CALL_ELF == 2
int ok;
#else
error fail
#endif
]])],
[gl_cv_host_cpu_c_abi=powerpc64-elfv2],
[gl_cv_host_cpu_c_abi=powerpc64])
],
[gl_cv_host_cpu_c_abi=powerpc])
;;
rs6000 )
gl_cv_host_cpu_c_abi=powerpc
;;
riscv32 | riscv64 )
# There are 2 architectures (with variants): rv32* and rv64*.
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE(
[[#if __riscv_xlen == 64
int ok;
#else
error fail
#endif
]])],
[cpu=riscv64],
[cpu=riscv32])
# There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d.
# Size of 'long' and 'void *':
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE(
[[#if defined __LP64__
int ok;
#else
error fail
#endif
]])],
[main_abi=lp64],
[main_abi=ilp32])
# Float ABIs:
# __riscv_float_abi_double:
# 'float' and 'double' are passed in floating-point registers.
# __riscv_float_abi_single:
# 'float' are passed in floating-point registers.
# __riscv_float_abi_soft:
# No values are passed in floating-point registers.
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE(
[[#if defined __riscv_float_abi_double
int ok;
#else
error fail
#endif
]])],
[float_abi=d],
[AC_COMPILE_IFELSE(
[AC_LANG_SOURCE(
[[#if defined __riscv_float_abi_single
int ok;
#else
error fail
#endif
]])],
[float_abi=f],
[float_abi=''])
])
gl_cv_host_cpu_c_abi="${cpu}-${main_abi}${float_abi}"
;;
s390* )
# On s390x, the C compiler may be generating 64-bit (= s390x) code
# or 31-bit (= s390) code.
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE(
[[#if defined __LP64__ || defined __s390x__
int ok;
#else
error fail
#endif
]])],
[gl_cv_host_cpu_c_abi=s390x],
[gl_cv_host_cpu_c_abi=s390])
;;
sparc | sparc64 )
# UltraSPARCs running Linux have `uname -m` = "sparc64", but the
# C compiler still generates 32-bit code.
AC_COMPILE_IFELSE(
[AC_LANG_SOURCE(
[[#if defined __sparcv9 || defined __arch64__
int ok;
#else
error fail
#endif
]])],
[gl_cv_host_cpu_c_abi=sparc64],
[gl_cv_host_cpu_c_abi=sparc])
;;
*)
gl_cv_host_cpu_c_abi="$host_cpu"
;;
esac
])
dnl In most cases, $HOST_CPU and $HOST_CPU_C_ABI are the same.
HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'`
HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi"
AC_SUBST([HOST_CPU])
AC_SUBST([HOST_CPU_C_ABI])
# This was
# AC_DEFINE_UNQUOTED([__${HOST_CPU}__])
# AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__])
# earlier, but KAI C++ 3.2d doesn't like this.
sed -e 's/-/_/g' >> confdefs.h <