"Fossies" - the Fresh Open Source Software Archive

Member "nss-pam-ldapd-0.9.12/tests/test_expr.c" (15 Nov 2021, 7496 Bytes) of package /linux/privat/nss-pam-ldapd-0.9.12.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file.

    1 /*
    2    test_expr.c - simple tests for the expr module
    3    This file is part of the nss-pam-ldapd library.
    4 
    5    Copyright (C) 2009-2021 Arthur de Jong
    6    Copyright (c) 2016 Giovanni Mascellani
    7 
    8    This library is free software; you can redistribute it and/or
    9    modify it under the terms of the GNU Lesser General Public
   10    License as published by the Free Software Foundation; either
   11    version 2.1 of the License, or (at your option) any later version.
   12 
   13    This library is distributed in the hope that it will be useful,
   14    but WITHOUT ANY WARRANTY; without even the implied warranty of
   15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   16    Lesser General Public License for more details.
   17 
   18    You should have received a copy of the GNU Lesser General Public
   19    License along with this library; if not, write to the Free Software
   20    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
   21    02110-1301 USA
   22 */
   23 
   24 #include "config.h"
   25 
   26 #include <stdio.h>
   27 #include <string.h>
   28 #include <assert.h>
   29 
   30 #include "common.h"
   31 
   32 /* we include expr.c because we want to test the static methods */
   33 #include "common/expr.c"
   34 
   35 static void test_parse_name(void)
   36 {
   37   char buffer[20];
   38   int i;
   39   i = 0;
   40   assert(parse_name("fooBar", &i, buffer, sizeof(buffer), 0) != NULL);
   41   assert(i == 6);
   42   i = 0;
   43   assert(parse_name("nameThatWillNotFitInBuffer", &i, buffer, sizeof(buffer), 0) == NULL);
   44   i = 0;
   45   assert(parse_name("foo Bar", &i, buffer, sizeof(buffer), 0) != NULL);
   46   assert(i == 3);
   47   assertstreq(buffer, "foo");
   48   i = 0;
   49   assert(parse_name("foo-Bar", &i, buffer, sizeof(buffer), 0) != NULL);
   50   assert(i == 3);
   51   assertstreq(buffer, "foo");
   52   i = 0;
   53   assert(parse_name("foo-Bar", &i, buffer, sizeof(buffer), 1) != NULL);
   54   assert(i == 7);
   55   assertstreq(buffer, "foo-Bar");
   56 }
   57 
   58 static const char *expanderfn(const char *name, void UNUSED(*expander_attr))
   59 {
   60   if (strcmp(name, "empty") == 0)
   61     return "";
   62   if (strcmp(name, "null") == 0)
   63     return NULL;
   64   if (strcmp(name, "userPassword") == 0)
   65     return "{crypt}HASH";
   66   else
   67     return "foobar";
   68 }
   69 
   70 static void test_expr_parse(void)
   71 {
   72   char buffer[1024];
   73   assert(expr_parse("$test1", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
   74   assertstreq(buffer, "foobar");
   75   assert(expr_parse("\\$test1", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
   76   assertstreq(buffer, "$test1");
   77   assert(expr_parse("$empty", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
   78   assertstreq(buffer, "");
   79   assert(expr_parse("$foo1$empty-$foo2", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
   80   assertstreq(buffer, "foobar-foobar");
   81   assert(expr_parse("$test-var", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
   82   assertstreq(buffer, "foobar-var");
   83   assert(expr_parse("${test-var}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
   84   assertstreq(buffer, "foobar");
   85   assert(expr_parse("$foo1+$null+$foo2", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
   86   assertstreq(buffer, "foobar++foobar");
   87   assert(expr_parse("${test1}\\$", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
   88   assertstreq(buffer, "foobar$");
   89   assert(expr_parse("${test1:-default}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
   90   assertstreq(buffer, "foobar");
   91   assert(expr_parse("${empty:-default}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
   92   assertstreq(buffer, "default");
   93   assert(expr_parse("${test1:+setset}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
   94   assertstreq(buffer, "setset");
   95   assert(expr_parse("${empty:+setset}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
   96   assertstreq(buffer, "");
   97   assert(expr_parse("${empty:-$test1}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
   98   assertstreq(buffer, "foobar");
   99   assert(expr_parse("a/$test1/b", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
  100   assertstreq(buffer, "a/foobar/b");
  101   assert(expr_parse("a/$empty/b", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
  102   assertstreq(buffer, "a//b");
  103   assert(expr_parse("a${test1}b", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
  104   assertstreq(buffer, "afoobarb");
  105   assert(expr_parse("a${test1}b${test2:+${test3:-d$test4}e}c", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
  106   assertstreq(buffer, "afoobarbfoobarec");
  107   assert(expr_parse("a${test1}b${test2:+${empty:-d$test4}e}c", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
  108   assertstreq(buffer, "afoobarbdfoobarec");
  109   /* test ${var#trim} functions */
  110   assert(expr_parse("${test1#foo}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
  111   assertstreq(buffer, "bar");
  112   assert(expr_parse("${test1#zoo}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
  113   assertstreq(buffer, "foobar");
  114   assert(expr_parse("${test1#?oo}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
  115   assertstreq(buffer, "bar");
  116   assert(expr_parse("${test1#f\\?o}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
  117   assertstreq(buffer, "foobar");
  118   assert(expr_parse("${userPassword#{crypt\\}}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
  119   assertstreq(buffer, "HASH");
  120   /* test ${var:offset:length} */
  121   assert(expr_parse("${test1:0:6}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
  122   assertstreq(buffer, "foobar");
  123   assert(expr_parse("${test1:0:10}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
  124   assertstreq(buffer, "foobar");
  125   assert(expr_parse("${test1:0:3}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
  126   assertstreq(buffer, "foo");
  127   assert(expr_parse("${test1:3:0}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
  128   assertstreq(buffer, "");
  129   assert(expr_parse("${test1:3:6}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
  130   assertstreq(buffer, "bar");
  131   assert(expr_parse("${test1:7:0}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
  132   assertstreq(buffer, "");
  133   assert(expr_parse("${test1:7:3}", buffer, sizeof(buffer), expanderfn, NULL) != NULL);
  134   assertstreq(buffer, "");
  135   /* these are errors */
  136   assert(expr_parse("$&", buffer, sizeof(buffer), expanderfn, NULL) == NULL);
  137   assert(expr_parse("${a", buffer, sizeof(buffer), expanderfn, NULL) == NULL);
  138 }
  139 
  140 static void test_buffer_overflow(void)
  141 {
  142   char buffer[10];
  143   assert(expr_parse("$test1$empty$test1", buffer, sizeof(buffer), expanderfn, NULL) == NULL);
  144   assert(expr_parse("long test value", buffer, sizeof(buffer), expanderfn, NULL) == NULL);
  145   assert(expr_parse("${test1:-long test value}", buffer, sizeof(buffer), expanderfn, NULL) == NULL);
  146 }
  147 
  148 static void test_expr_vars(void)
  149 {
  150   SET *set;
  151   /* simple test */
  152   set = set_new();
  153   assert(expr_vars("$a", set) != NULL);
  154   assert(set_contains(set, "a"));
  155   assert(!set_contains(set, "$a"));
  156   set_free(set);
  157   /* more elaborate test */
  158   set = set_new();
  159   assert(expr_vars("\"${gecos:-$cn}\"", set) != NULL);
  160   assert(set_contains(set, "gecos"));
  161   assert(set_contains(set, "cn"));
  162   set_free(set);
  163   /* more elaborate test */
  164   set = set_new();
  165   assert(expr_vars("\"${homeDirectory:-/home/$uidNumber/$uid}\"", set) != NULL);
  166   assert(set_contains(set, "homeDirectory"));
  167   assert(set_contains(set, "uidNumber"));
  168   assert(set_contains(set, "uid"));
  169   set_free(set);
  170   /* a test with attribute options */
  171   set = set_new();
  172   assert(expr_vars("\"${homeDirectory;foo:-/home/something}\"", set) != NULL);
  173   assert(set_contains(set, "homeDirectory;foo"));
  174   set_free(set);
  175 }
  176 
  177 /* the main program... */
  178 int main(int UNUSED(argc), char UNUSED(*argv[]))
  179 {
  180   test_parse_name();
  181   test_expr_parse();
  182   test_buffer_overflow();
  183   test_expr_vars();
  184   return EXIT_SUCCESS;
  185 }