diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 09:44:07 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 09:44:07 +0000 |
commit | 39ce00b8d520cbecbd6af87257e8fb11df0ec273 (patch) | |
tree | 4c21a2674c19e5c44be3b3550b476b9e63d8ae3d /src/lookups/lf_quote.c | |
parent | Initial commit. (diff) | |
download | exim4-upstream/4.94.2.tar.xz exim4-upstream/4.94.2.zip |
Adding upstream version 4.94.2.upstream/4.94.2upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | src/lookups/lf_quote.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/lookups/lf_quote.c b/src/lookups/lf_quote.c new file mode 100644 index 0000000..6f4143d --- /dev/null +++ b/src/lookups/lf_quote.c @@ -0,0 +1,63 @@ +/************************************************* +* Exim - an Internet mail transport agent * +*************************************************/ + +/* Copyright (c) University of Cambridge 1995 - 2018 */ +/* See the file NOTICE for conditions of use and distribution. */ + + +#include "../exim.h" +#include "lf_functions.h" + + +/************************************************* +* Add string to result, quoting if necessary * +*************************************************/ + +/* This function is called by some lookups that create name=value result +strings, to handle the quoting of the data. It adds "name=" to the result, +followed by appropriately quoted data, followed by a single space. + +Arguments: + name the field name + value the data value + vlength the data length + result the result expanding-string + +Returns: the result pointer (possibly updated) +*/ + +gstring * +lf_quote(uschar *name, uschar *value, int vlength, gstring * result) +{ +result = string_append(result, 2, name, US"="); + +/* NULL is handled as an empty string */ + +if (!value) + { + value = US""; + vlength = 0; + } + +/* Quote the value if it is empty, contains white space, or starts with a quote +character. */ + +if (value[0] == 0 || Ustrpbrk(value, " \t\n\r") != NULL || value[0] == '\"') + { + result = string_catn(result, US"\"", 1); + for (int j = 0; j < vlength; j++) + { + if (value[j] == '\"' || value[j] == '\\') + result = string_catn(result, US"\\", 1); + result = string_catn(result, US value+j, 1); + } + result = string_catn(result, US"\"", 1); + } +else + result = string_catn(result, US value, vlength); + +return string_catn(result, US" ", 1); +} + +/* End of lf_quote.c */ |