X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/36a7aaa43b2cf0ca4e5953abf59efce59c588547..d447dbd160a0fb503ed1e763f3f23d28744b6ddd:/src/src/lookups/nisplus.c diff --git a/src/src/lookups/nisplus.c b/src/src/lookups/nisplus.c index 1f226d529..370f6a655 100644 --- a/src/src/lookups/nisplus.c +++ b/src/src/lookups/nisplus.c @@ -2,7 +2,7 @@ * Exim - an Internet mail transport agent * *************************************************/ -/* Copyright (c) University of Cambridge 1995 - 2017 */ +/* Copyright (c) University of Cambridge 1995 - 2018 */ /* See the file NOTICE for conditions of use and distribution. */ #include "../exim.h" @@ -18,7 +18,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,10 +42,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) { -int i; int error_error = FAIL; const uschar * field_name = NULL; nis_result *nrt = NULL; @@ -138,7 +137,7 @@ was given, look for that field; otherwise concatenate all the fields with their names. */ eo = &(eno->zo_data.objdata_u.en_data); -for (i = 0; i < eo->en_cols.en_cols_len; i++) +for (int i = 0; i < eo->en_cols.en_cols_len; i++) { table_col *tc = ta->ta_cols.ta_cols_val + i; entry_col *ec = eo->en_cols.en_cols_val + i; @@ -149,7 +148,8 @@ for (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--; @@ -157,16 +157,15 @@ for (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 */ if (value[0] == 0 || Ustrchr(value, ' ') != NULL) { - int j; yield = string_catn(yield, US"\"", 1); - for (j = 0; j < len; j++) + for (int j = 0; j < len; j++) { if (value[j] == '\"' || value[j] == '\\') yield = string_catn(yield, US"\\", 1); @@ -196,7 +195,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. */ @@ -241,7 +240,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) {