X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fsrc%2Flookups%2Fnisplus.c;h=6a6aef570280afe94c9eeaab53bc1e48f102de97;hb=8f0d0a3138e138ffa6bcc94c8378f5eb22573f0e;hp=61cc7018462b1a89e07ad5c2d9101f58f829c27d;hpb=d7978c0f8af20ff4c3f770589b1bb81568aecff3;p=user%2Fhenk%2Fcode%2Fexim.git diff --git a/src/src/lookups/nisplus.c b/src/src/lookups/nisplus.c index 61cc70184..6a6aef570 100644 --- a/src/src/lookups/nisplus.c +++ b/src/src/lookups/nisplus.c @@ -3,6 +3,7 @@ *************************************************/ /* Copyright (c) University of Cambridge 1995 - 2018 */ +/* Copyright (c) The Exim Maintainers 2020 */ /* See the file NOTICE for conditions of use and distribution. */ #include "../exim.h" @@ -18,7 +19,7 @@ /* See local README for interface description. */ static void * -nisplus_open(uschar *filename, uschar **errmsg) +nisplus_open(const uschar * filename, uschar ** errmsg) { return (void *)(1); /* Just return something non-null */ } @@ -42,8 +43,9 @@ yield is the concatenation of all the fields, preceded by their names and an equals sign. */ static int -nisplus_find(void *handle, uschar *filename, const uschar *query, int length, - uschar **result, uschar **errmsg, uint *do_cache) +nisplus_find(void * handle, const uschar * filename, const uschar * query, + int length, uschar ** result, uschar ** errmsg, uint * do_cache, + const uschar * opts) { int error_error = FAIL; const uschar * field_name = NULL; @@ -148,7 +150,8 @@ for (int i = 0; i < eo->en_cols.en_cols_len; i++) empty string for consistency. Remove trailing whitespace and zero bytes. */ - if (value == NULL) value = US""; else + if (!value) value = US""; + else while (len > 0 && (value[len-1] == 0 || isspace(value[len-1]))) len--; @@ -156,7 +159,7 @@ for (int i = 0; i < eo->en_cols.en_cols_len; i++) if (!field_name) { - yield = string_cat (yield, tc->tc_name); + yield = string_cat (yield, US tc->tc_name); yield = string_catn(yield, US"=", 1); /* Quote the value if it contains spaces or is empty */ @@ -194,7 +197,7 @@ if (field_name) *errmsg = string_sprintf("NIS+ field %s not found for %s", field_name, query); else - store_reset(yield->s + yield->ptr + 1); + gstring_release_unused(yield); /* Free result store before finishing. */ @@ -239,7 +242,7 @@ if (opt != NULL) return NULL; /* No options recognized */ while (*t != 0) if (*t++ == '\"') count++; if (count == 0) return s; -t = quoted = store_get(Ustrlen(s) + count + 1); +t = quoted = store_get(Ustrlen(s) + count + 1, is_tainted(s)); while (*s != 0) { @@ -270,15 +273,15 @@ fprintf(f, "Library version: NIS+: Exim version %s\n", EXIM_VERSION_STR); static lookup_info _lookup_info = { - US"nisplus", /* lookup name */ - lookup_querystyle, /* query-style lookup */ - nisplus_open, /* open function */ - NULL, /* check function */ - nisplus_find, /* find function */ - NULL, /* no close function */ - NULL, /* no tidy function */ - nisplus_quote, /* quoting function */ - nisplus_version_report /* version reporting */ + .name = US"nisplus", /* lookup name */ + .type = lookup_querystyle, /* query-style lookup */ + .open = nisplus_open, /* open function */ + .check = NULL, /* check function */ + .find = nisplus_find, /* find function */ + .close = NULL, /* no close function */ + .tidy = NULL, /* no tidy function */ + .quote = nisplus_quote, /* quoting function */ + .version_report = nisplus_version_report /* version reporting */ }; #ifdef DYNLOOKUP