git://git.exim.org
/
exim.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
tidying
[exim.git]
/
src
/
src
/
lookups
/
lf_sqlperform.c
diff --git
a/src/src/lookups/lf_sqlperform.c
b/src/src/lookups/lf_sqlperform.c
index 38b7c2ad345c4bde4f6cbcadb74ae42994eb2f8a..0f3984ba765cb2d3cb4363521ed88b5826a6af6d 100644
(file)
--- a/
src/src/lookups/lf_sqlperform.c
+++ b/
src/src/lookups/lf_sqlperform.c
@@
-2,9
+2,10
@@
* Exim - an Internet mail transport agent *
*************************************************/
* Exim - an Internet mail transport agent *
*************************************************/
+/* Copyright (c) The Exim Maintainers 2020 - 2024 */
/* Copyright (c) University of Cambridge 1995 - 2018 */
/* Copyright (c) University of Cambridge 1995 - 2018 */
-/* Copyright (c) The Exim Maintainers 2020 */
/* See the file NOTICE for conditions of use and distribution. */
/* See the file NOTICE for conditions of use and distribution. */
+/* SPDX-License-Identifier: GPL-2.0-or-later */
#include "../exim.h"
#include "../exim.h"
@@
-12,6
+13,15
@@
+static int
+server_len_for_logging(const uschar * server)
+{
+const uschar * s = Ustrchr(server, '/');
+if (!s) return 64;
+if (!(s = Ustrchr(s+1, '/'))) return 64;
+return (int) (s - server);
+}
+
/*************************************************
* Call SQL server(s) to run an actual query *
*************************************************/
/*************************************************
* Call SQL server(s) to run an actual query *
*************************************************/
@@
-29,6
+39,7
@@
Arguments:
result where to pass back the result
errmsg where to pass back an error message
do_cache to be set zero if data is changed
result where to pass back the result
errmsg where to pass back an error message
do_cache to be set zero if data is changed
+ opts options (which suffixed the lookup name, minus cache-control ones) or NULL
func the lookup function to call
Returns: the return from the lookup function, or DEFER
func the lookup function to call
Returns: the return from the lookup function, or DEFER
@@
-41,19
+52,19
@@
lf_sqlperform(const uschar *name, const uschar *optionname,
int(*fn)(const uschar *, uschar *, uschar **, uschar **, BOOL *, uint *, const uschar *))
{
int rc;
int(*fn)(const uschar *, uschar *, uschar **, uschar **, BOOL *, uint *, const uschar *))
{
int rc;
-uschar *server;
+uschar *
server;
BOOL defer_break = FALSE;
DEBUG(D_lookup) debug_printf_indent("%s query: \"%s\" opts '%s'\n", name, query, opts);
BOOL defer_break = FALSE;
DEBUG(D_lookup) debug_printf_indent("%s query: \"%s\" opts '%s'\n", name, query, opts);
-/* Handle queries that do have server information at the start. */
+/* Handle queries that do have server information at the start
(old style)
. */
if (Ustrncmp(query, "servers", 7) == 0)
{
int qsep = 0;
if (Ustrncmp(query, "servers", 7) == 0)
{
int qsep = 0;
- const uschar *
s, *ss
;
- const uschar *qserverlist;
-
uschar *qserver
;
+ const uschar *
s, * ss, * qserverlist
;
+
+
log_write(0, LOG_MAIN|LOG_CONFIG_IN, "WARNING: obsolete syntax used for lookup")
;
s = query + 7;
skip_whitespace(&s);
s = query + 7;
skip_whitespace(&s);
@@
-80,37
+91,37
@@
if (Ustrncmp(query, "servers", 7) == 0)
}
qserverlist = string_sprintf("%.*s", (int)(ss - s), s);
}
qserverlist = string_sprintf("%.*s", (int)(ss - s), s);
+ query = ss + 1;
-
while ((qserver = string_nextinlist(&qserverlist, &qsep, NULL, 0))
)
+
for (uschar * qsrv; qsrv = string_nextinlist(&qserverlist, &qsep, NULL, 0);
)
{
{
- if (Ustrchr(qs
erver
, '/'))
- server = qs
erver;
+ if (Ustrchr(qs
rv
, '/'))
+ server = qs
rv; /* full server spec */
else
else
- {
- int len = Ustrlen(qs
erver
);
+ {
/* only name; search in option list */
+ int len = Ustrlen(qs
rv
);
const uschar * serverlist = optserverlist;
for (int sep = 0; server = string_nextinlist(&serverlist, &sep, NULL, 0);)
const uschar * serverlist = optserverlist;
for (int sep = 0; server = string_nextinlist(&serverlist, &sep, NULL, 0);)
- if (Ustrncmp(server, qs
erver
, len) == 0 && server[len] == '/')
+ if (Ustrncmp(server, qs
rv
, len) == 0 && server[len] == '/')
break;
if (!server)
{
break;
if (!server)
{
- *errmsg = string_sprintf("%s server \"%
s\" not found in %s", name
,
-
qserver
, optionname);
+ *errmsg = string_sprintf("%s server \"%
.*s\" not found in %s"
,
+
name, server_len_for_logging(qsrv), qsrv
, optionname);
return DEFER;
}
}
return DEFER;
}
}
- { uschar *m;
- if ((m = is_tainted2(server, 0, "Tainted %s server '%s'", name, server)))
- {
-
*errmsg = m
;
+ if (is_tainted(server))
+ {
+ *errmsg = string_sprintf("%s server \"%.*s\" is tainted",
+
name, server_len_for_logging(server), server)
;
return DEFER;
}
return DEFER;
}
- }
- rc = (*fn)(
ss+1
, server, result, errmsg, &defer_break, do_cache, opts);
+ rc = (*fn)(
query
, server, result, errmsg, &defer_break, do_cache, opts);
if (rc != DEFER || defer_break) return rc;
}
}
if (rc != DEFER || defer_break) return rc;
}
}
@@
-138,7
+149,7
@@
else
*errmsg = string_sprintf("no %s servers defined (%s option)", name,
optionname);
else
*errmsg = string_sprintf("no %s servers defined (%s option)", name,
optionname);
else
- for (int d = 0;
(server = string_nextinlist(&serverlist, &d, NULL, 0)
); )
+ for (int d = 0;
server = string_nextinlist(&serverlist, &d, NULL, 0
); )
{
/* If not a full spec assume from options; scan main list for matching
hostname */
{
/* If not a full spec assume from options; scan main list for matching
hostname */
@@
-160,13
+171,12
@@
else
server = ele;
}
server = ele;
}
- { uschar *m;
- if ((m = is_tainted2(server, 0, "Tainted %s server '%s'", name, server)))
+ if (is_tainted(server))
{
{
- *errmsg = m;
+ *errmsg = string_sprintf("%s server \"%.*s\" is tainted",
+ name, server_len_for_logging(server), server);
return DEFER;
}
return DEFER;
}
- }
rc = (*fn)(query, server, result, errmsg, &defer_break, do_cache, opts);
if (rc != DEFER || defer_break) return rc;
rc = (*fn)(query, server, result, errmsg, &defer_break, do_cache, opts);
if (rc != DEFER || defer_break) return rc;
@@
-177,3
+187,5
@@
return DEFER;
}
/* End of lf_sqlperform.c */
}
/* End of lf_sqlperform.c */
+/* vi: aw ai sw=2
+*/