X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/72c385bddd9732b63b9c8fedb18e4469ddbead75..a85c067ba6c6940512cf57ec213277a370d87e70:/src/src/lookups/nisplus.c diff --git a/src/src/lookups/nisplus.c b/src/src/lookups/nisplus.c index 6a3351ecc..78c79563f 100644 --- a/src/src/lookups/nisplus.c +++ b/src/src/lookups/nisplus.c @@ -2,8 +2,10 @@ * Exim - an Internet mail transport agent * *************************************************/ +/* Copyright (c) The Exim Maintainers 2020 - 2022 */ /* Copyright (c) University of Cambridge 1995 - 2018 */ /* See the file NOTICE for conditions of use and distribution. */ +/* SPDX-License-Identifier: GPL-2.0-only */ #include "../exim.h" #include "lf_functions.h" @@ -18,7 +20,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 +44,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; @@ -195,7 +198,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. */ @@ -224,25 +227,24 @@ characters. No options are recognized. Arguments: s the string to be quoted opt additional option text or NULL if none + idx lookup type index Returns: the processed string or NULL for a bad option */ static uschar * -nisplus_quote(uschar *s, uschar *opt) +nisplus_quote(uschar * s, uschar * opt, unsigned idx) { int count = 0; -uschar *quoted; -uschar *t = s; +uschar * quoted, * t = s; -if (opt != NULL) return NULL; /* No options recognized */ +if (opt) return NULL; /* No options recognized */ -while (*t != 0) if (*t++ == '\"') count++; -if (count == 0) return s; +while (*t) if (*t++ == '\"') count++; -t = quoted = store_get(Ustrlen(s) + count + 1); +t = quoted = store_get_quoted(Ustrlen(s) + count + 1, s, idx); -while (*s != 0) +while (*s) { *t++ = *s; if (*s++ == '\"') *t++ = '\"'; @@ -261,25 +263,26 @@ return quoted; #include "../version.h" -void -nisplus_version_report(FILE *f) +gstring * +nisplus_version_report(gstring * g) { #ifdef DYNLOOKUP -fprintf(f, "Library version: NIS+: Exim version %s\n", EXIM_VERSION_STR); +g = string_fmt_append(g, "Library version: NIS+: Exim version %s\n", EXIM_VERSION_STR); #endif +return g; } 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