Commit | Line | Data |
---|---|---|
0756eb3c PH |
1 | /************************************************* |
2 | * Exim - an Internet mail transport agent * | |
3 | *************************************************/ | |
4 | ||
0a49a7a4 | 5 | /* Copyright (c) University of Cambridge 1995 - 2009 */ |
0756eb3c PH |
6 | /* See the file NOTICE for conditions of use and distribution. */ |
7 | ||
8 | ||
9 | #include "../exim.h" | |
10 | #include "lf_functions.h" | |
11 | ||
12 | ||
13 | /************************************************* | |
14 | * Add string to result, quoting if necessary * | |
15 | *************************************************/ | |
16 | ||
17 | /* This function is called by some lookups that create name=value result | |
18 | strings, to handle the quoting of the data. It adds "name=" to the result, | |
19 | followed by appropriately quoted data, followed by a single space. | |
20 | ||
21 | Arguments: | |
22 | name the field name | |
23 | value the data value | |
24 | vlength the data length | |
25 | result the result pointer | |
26 | asize points to the size variable | |
27 | aoffset points to the offset variable | |
28 | ||
29 | Returns: the result pointer (possibly updated) | |
30 | */ | |
31 | ||
32 | uschar * | |
33 | lf_quote(uschar *name, uschar *value, int vlength, uschar *result, int *asize, | |
34 | int *aoffset) | |
35 | { | |
36 | result = string_append(result, asize, aoffset, 2, name, US"="); | |
37 | ||
38 | /* NULL is handled as an empty string */ | |
39 | ||
a5bdc7ee JH |
40 | if (!value) |
41 | { | |
42 | value = US""; | |
43 | vlength = 0; | |
44 | } | |
0756eb3c PH |
45 | |
46 | /* Quote the value if it is empty, contains white space, or starts with a quote | |
47 | character. */ | |
48 | ||
49 | if (value[0] == 0 || Ustrpbrk(value, " \t\n\r") != NULL || value[0] == '\"') | |
50 | { | |
51 | int j; | |
c2f669a4 | 52 | result = string_catn(result, asize, aoffset, US"\"", 1); |
0756eb3c PH |
53 | for (j = 0; j < vlength; j++) |
54 | { | |
55 | if (value[j] == '\"' || value[j] == '\\') | |
c2f669a4 JH |
56 | result = string_catn(result, asize, aoffset, US"\\", 1); |
57 | result = string_catn(result, asize, aoffset, US value+j, 1); | |
0756eb3c | 58 | } |
c2f669a4 | 59 | result = string_catn(result, asize, aoffset, US"\"", 1); |
0756eb3c PH |
60 | } |
61 | else | |
c2f669a4 | 62 | result = string_catn(result, asize, aoffset, US value, vlength); |
0756eb3c | 63 | |
c2f669a4 | 64 | return string_catn(result, asize, aoffset, US" ", 1); |
0756eb3c PH |
65 | } |
66 | ||
67 | /* End of lf_quote.c */ |