X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/0756eb3cb50d73a77b486e47528f7cb1bffdb299..1d28cc061677bd07d9bed48dd84bd5c590247043:/src/src/lookups/nis.c diff --git a/src/src/lookups/nis.c b/src/src/lookups/nis.c index bbb85b5bd..6a08ebc37 100644 --- a/src/src/lookups/nis.c +++ b/src/src/lookups/nis.c @@ -1,27 +1,14 @@ -/* $Cambridge: exim/src/src/lookups/nis.c,v 1.1 2004/10/07 13:10:01 ph10 Exp $ */ - /************************************************* * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2004 */ +/* Copyright (c) The Exim Maintainers 2020 - 2022 */ +/* Copyright (c) University of Cambridge 1995 - 2015 */ /* See the file NOTICE for conditions of use and distribution. */ +/* SPDX-License-Identifier: GPL-2.0-or-later */ #include "../exim.h" #include "lf_functions.h" -#include "nis.h" - -/* We can't just compile this code and allow the library mechanism to omit the -functions if they are not wanted, because we need to have the NIS header -available for compiling. Therefore, compile these functions only if LOOKUP_NIS -is defined. However, some compilers don't like compiling empty modules, so keep -them happy with a dummy when skipping the rest. Make it reference itself to -stop picky compilers complaining that it is unused, and put in a dummy argument -to stop even pickier compilers complaining about infinite loops. */ - -#ifndef LOOKUP_NIS -static void dummy(int x) { dummy(x-1); } -#else #include @@ -33,13 +20,13 @@ static void dummy(int x) { dummy(x-1); } /* See local README for interface description. This serves for both the "nis" and "nis0" lookup types. */ -void * -nis_open(uschar *filename, uschar **errmsg) +static void * +nis_open(const uschar * filename, uschar ** errmsg) { char *nis_domain; if (yp_get_default_domain(&nis_domain) != 0) { - *errmsg = string_sprintf("failed to get default NIS domain"); + *errmsg = US"failed to get default NIS domain"; return NULL; } return nis_domain; @@ -55,15 +42,16 @@ return nis_domain; for nis0 because they are so short it isn't worth trying to use any common code. */ -int -nis_find(void *handle, uschar *filename, uschar *keystring, int length, - uschar **result, uschar **errmsg, BOOL *do_cache) +static int +nis_find(void * handle, const uschar * filename, const uschar * keystring, + int length, uschar ** result, uschar ** errmsg, uint * do_cache, + const uschar * opts) { int rc; uschar *nis_data; int nis_data_length; do_cache = do_cache; /* Placate picky compilers */ -if ((rc = yp_match(CS handle, CS filename, CS keystring, length, +if ((rc = yp_match(CCS handle, CCS filename, CCS keystring, length, CSS &nis_data, &nis_data_length)) == 0) { *result = string_copy(nis_data); @@ -81,15 +69,16 @@ return (rc == YPERR_KEY || rc == YPERR_MAP)? FAIL : DEFER; /* See local README for interface description. */ -int -nis0_find(void *handle, uschar *filename, uschar *keystring, int length, - uschar **result, uschar **errmsg, BOOL *do_cache) +static int +nis0_find(void * handle, const uschar * filename, const uschar * keystring, + int length, uschar ** result, uschar ** errmsg, uint * do_cache, + const uschar * opts) { int rc; uschar *nis_data; int nis_data_length; do_cache = do_cache; /* Placate picky compilers */ -if ((rc = yp_match(CS handle, CS filename, CS keystring, length + 1, +if ((rc = yp_match(CCS handle, CCS filename, CCS keystring, length + 1, CSS &nis_data, &nis_data_length)) == 0) { *result = string_copy(nis_data); @@ -99,6 +88,55 @@ if ((rc = yp_match(CS handle, CS filename, CS keystring, length + 1, return (rc == YPERR_KEY || rc == YPERR_MAP)? FAIL : DEFER; } -#endif /* LOOKUP_NIS */ + + +/************************************************* +* Version reporting entry point * +*************************************************/ + +/* See local README for interface description. */ + +#include "../version.h" + +gstring * +nis_version_report(gstring * g) +{ +#ifdef DYNLOOKUP +g = string_fmt_append(g, "Library version: NIS: Exim version %s\n", EXIM_VERSION_STR); +#endif +return g; +} + + +static lookup_info nis_lookup_info = { + .name = US"nis", /* lookup name */ + .type = 0, /* not abs file, not query style*/ + .open = nis_open, /* open function */ + .check = NULL, /* check function */ + .find = nis_find, /* find function */ + .close = NULL, /* no close function */ + .tidy = NULL, /* no tidy function */ + .quote = NULL, /* no quoting function */ + .version_report = nis_version_report /* version reporting */ +}; + +static lookup_info nis0_lookup_info = { + .name = US"nis0", /* lookup name */ + .type = 0, /* not absfile, not query style */ + .open = nis_open, /* sic */ /* open function */ + .check = NULL, /* check function */ + .find = nis0_find, /* find function */ + .close = NULL, /* no close function */ + .tidy = NULL, /* no tidy function */ + .quote = NULL, /* no quoting function */ + .version_report = NULL /* no version reporting (redundant) */ +}; + +#ifdef DYNLOOKUP +#define nis_lookup_module_info _lookup_module_info +#endif + +static lookup_info *_lookup_list[] = { &nis_lookup_info, &nis0_lookup_info }; +lookup_module_info nis_lookup_module_info = { LOOKUP_MODULE_INFO_MAGIC, _lookup_list, 2 }; /* End of lookups/nis.c */