diff --git a/CREDITS b/CREDITS index dcb8a16f8f2c..8315415027cb 100644 --- a/CREDITS +++ b/CREDITS @@ -1,50 +1,50 @@ _Ἀπόδοτε οὖν τὰ Καίσαρος Καίσαρι καὶ τὰ τοῦ Θεοῦ τῷ Θεῷ_ The OpenPAM library was developed for the FreeBSD Project by ThinkSec AS and Network Associates Laboratories, the Security Research Division of Network Associates, Inc. under DARPA/SPAWAR contract N66001-01-C-8035 ("CBOSS"), as part of the DARPA CHATS research program. Principal design and development by: Dag-Erling Smørgrav The following persons (in alphabetical order) have contributed, directly or indirectly, with patches, criticism, suggestions, or ideas: Andrew Morgan Brian Fundakowski Feldman Christos Zoulas Daniel Richard G. Darren J. Moffat Dmitry V. Levin Don Lewis Emmanuel Dreyfus Eric Melville Espen Grøndahl Gary Winiger Gleb Smirnoff Hubert Feyrer Jason Evans Joe Marcus Clarke - Juli Mallett - Ankita Pal Jörg Sonnenberger + Juli Mallett + Larry Baird Maëlle Lesage Mark Murray Matthias Drochner Mike Petullo Mikhail Teterin Mikko Työläjärvi Nick Hibma Robert Watson Ruslan Ermilov Sebastian Krahmer Solar Designer Takanori Saneto Wojciech A. Koszek Yar Tikhiy $Id: CREDITS 648 2013-03-05 17:54:27Z des $ diff --git a/lib/libpam/openpam_ctype.h b/lib/libpam/openpam_ctype.h index 4f5888d09024..38016227a687 100644 --- a/lib/libpam/openpam_ctype.h +++ b/lib/libpam/openpam_ctype.h @@ -1,89 +1,97 @@ /*- * Copyright (c) 2012 Dag-Erling Smørgrav * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote * products derived from this software without specific prior written * permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * $Id: openpam_ctype.h 666 2013-03-17 14:22:17Z des $ */ #ifndef OPENPAM_CTYPE_H_INCLUDED #define OPENPAM_CTYPE_H_INCLUDED /* * Evaluates to non-zero if the argument is a digit. */ #define is_digit(ch) \ (ch >= '0' && ch <= '9') +/* + * Evaluates to non-zero if the argument is a hex digit. + */ +#define is_xdigit(ch) \ + ((ch >= '0' && ch <= '9') || \ + (ch >= 'a' && ch <= 'f') || \ + (ch >= 'A' && ch <= 'F')) + /* * Evaluates to non-zero if the argument is an uppercase letter. */ #define is_upper(ch) \ - (ch >= 'A' && ch <= 'A') + (ch >= 'A' && ch <= 'Z') /* * Evaluates to non-zero if the argument is a lowercase letter. */ #define is_lower(ch) \ (ch >= 'a' && ch <= 'z') /* * Evaluates to non-zero if the argument is a letter. */ #define is_letter(ch) \ (is_upper(ch) || is_lower(ch)) /* * Evaluates to non-zero if the argument is a linear whitespace character. * For the purposes of this macro, the definition of linear whitespace is * extended to include the form feed and carraige return characters. */ #define is_lws(ch) \ (ch == ' ' || ch == '\t' || ch == '\f' || ch == '\r') /* * Evaluates to non-zero if the argument is a whitespace character. */ #define is_ws(ch) \ (is_lws(ch) || ch == '\n') /* * Evaluates to non-zero if the argument is a printable ASCII character. * Assumes that the execution character set is a superset of ASCII. */ #define is_p(ch) \ (ch >= '!' && ch <= '~') /* * Returns non-zero if the argument belongs to the POSIX Portable Filename * Character Set. Assumes that the execution character set is a superset * of ASCII. */ #define is_pfcs(ch) \ (is_digit(ch) || is_letter(ch) || \ ch == '.' || ch == '_' || ch == '-') #endif diff --git a/t/Makefile.am b/t/Makefile.am index 8f9bf1fdde85..fd9a3e21eb3e 100644 --- a/t/Makefile.am +++ b/t/Makefile.am @@ -1,18 +1,19 @@ # $Id: Makefile.am 714 2013-08-19 15:30:21Z des $ AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/lib/libpam noinst_HEADERS = t.h # tests TESTS = +TESTS += t_openpam_ctype TESTS += t_openpam_readword TESTS += t_openpam_readlinev check_PROGRAMS = $(TESTS) # libt - common support code check_LIBRARIES = libt.a libt_a_SOURCES = t_main.c t_file.c # link with libpam and libt LDADD = libt.a $(top_builddir)/lib/libpam/libpam.la diff --git a/t/t_openpam_ctype.c b/t/t_openpam_ctype.c new file mode 100644 index 000000000000..7e56f95a4153 --- /dev/null +++ b/t/t_openpam_ctype.c @@ -0,0 +1,122 @@ +/*- + * Copyright (c) 2014 Dag-Erling Smørgrav + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote + * products derived from this software without specific prior written + * permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $Id$ + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include + +#include "openpam_ctype.h" + +#include "t.h" + +#define OC_DIGIT "0123456789" +#define OC_XDIGIT OC_DIGIT "ABCDEFabcdef" +#define OC_UPPER "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +#define OC_LOWER "abcdefghijklmnopqrstuvwxyz" +#define OC_LETTER OC_UPPER OC_LOWER +#define OC_LWS " \t\f\r" +#define OC_WS OC_LWS "\n" +#define OC_P "!\"#$%&'()*+,-./" OC_DIGIT ":;<=>?@" OC_UPPER "[\\]^_`" OC_LOWER "{|}~" +#define OC_PFCS OC_DIGIT OC_LETTER "._-" + +static const char oc_digit[] = OC_DIGIT; +static const char oc_xdigit[] = OC_XDIGIT; +static const char oc_upper[] = OC_UPPER; +static const char oc_lower[] = OC_LOWER; +static const char oc_letter[] = OC_LETTER; +static const char oc_lws[] = OC_LWS; +static const char oc_ws[] = OC_WS; +static const char oc_p[] = OC_P; +static const char oc_pfcs[] = OC_PFCS; + +#define T_OC(set) \ + T_FUNC(t_oc_##set, "is_" #set) \ + { \ + char crib[256]; \ + unsigned int i, ret; \ + \ + memset(crib, 0, sizeof crib); \ + for (i = 0; oc_##set[i]; ++i) \ + crib[(int)oc_##set[i]] = 1; \ + for (i = ret = 0; i < sizeof crib; ++i) { \ + if (is_##set(i) != crib[i]) { \ + t_verbose("is_%s() incorrect " \ + "for %#02x\n", #set, i); \ + ++ret; \ + } \ + } \ + return (ret == 0); \ + } + +T_OC(digit) +T_OC(xdigit) +T_OC(upper) +T_OC(lower) +T_OC(letter) +T_OC(lws) +T_OC(ws) +T_OC(p) +T_OC(pfcs) + + +/*************************************************************************** + * Boilerplate + */ + +const struct t_test *t_plan[] = { + T(t_oc_digit), + T(t_oc_xdigit), + T(t_oc_upper), + T(t_oc_lower), + T(t_oc_letter), + T(t_oc_lws), + T(t_oc_ws), + T(t_oc_p), + T(t_oc_pfcs), + NULL +}; + +const struct t_test ** +t_prepare(int argc, char *argv[]) +{ + + (void)argc; + (void)argv; + return (t_plan); +} + +void +t_cleanup(void) +{ +}