From: Phil Mayers
Date: Fri, 21 Sep 2012 16:47:25 +0000 (+0100)
Subject: add REQUEST* and void* to escape functions
X-Git-Tag: release_3_0_0_beta1~1662^2~1^2~8
X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=24160ee3c9ade21266edaa4619a26e6572adbf01;p=thirdparty%2Ffreeradius-server.git
add REQUEST* and void* to escape functions
---
diff --git a/src/include/radiusd.h b/src/include/radiusd.h
index feeff487130..5ca235cc096 100644
--- a/src/include/radiusd.h
+++ b/src/include/radiusd.h
@@ -712,7 +712,7 @@ VALUE_PAIR *radius_pairmake(REQUEST *request, VALUE_PAIR **vps,
int operator);
/* xlat.c */
-typedef size_t (*RADIUS_ESCAPE_STRING)(char *out, size_t outlen, const char *in);
+typedef size_t (*RADIUS_ESCAPE_STRING)(REQUEST *, char *out, size_t outlen, const char *in, void *arg);
int radius_xlat(char * out, int outlen, const char *fmt,
REQUEST * request, RADIUS_ESCAPE_STRING func, void *funcarg);
diff --git a/src/main/mainconfig.c b/src/main/mainconfig.c
index 5e51e3656a0..b5fc646182e 100644
--- a/src/main/mainconfig.c
+++ b/src/main/mainconfig.c
@@ -296,7 +296,7 @@ static const CONF_PARSER bootstrap_config[] = {
#define MAX_ARGV (256)
-static size_t config_escape_func(char *out, size_t outlen, const char *in)
+static size_t config_escape_func(UNUSED REQUEST *request, char *out, size_t outlen, const char *in, UNUSED void *arg)
{
size_t len = 0;
static const char *disallowed = "%{}\\'\"`";
diff --git a/src/main/xlat.c b/src/main/xlat.c
index 4d8974deb7e..702ceb10957 100644
--- a/src/main/xlat.c
+++ b/src/main/xlat.c
@@ -1111,7 +1111,7 @@ do_xlat:
char tmpbuf[8192];
retlen = c->do_xlat(c->instance, request, xlat_str, tmpbuf, sizeof(tmpbuf));
if (retlen > 0) {
- retlen = func(q, freespace, tmpbuf);
+ retlen = func(request, q, freespace, tmpbuf, funcarg);
if (retlen > 0) {
RDEBUG2("string escaped from \'%s\' to \'%s\'", tmpbuf, q);
} else if (retlen < 0) {
@@ -1146,7 +1146,7 @@ done:
* we use this one. It simplifies the coding, as the check for
* func == NULL only happens once.
*/
-static size_t xlat_copy(char *out, size_t outlen, const char *in)
+static size_t xlat_copy(UNUSED REQUEST *request, char *out, size_t outlen, const char *in, UNUSED void *arg)
{
int freespace = outlen;
diff --git a/src/modules/rlm_ldap/rlm_ldap.c b/src/modules/rlm_ldap/rlm_ldap.c
index be9517253ff..fcd555ab263 100644
--- a/src/modules/rlm_ldap/rlm_ldap.c
+++ b/src/modules/rlm_ldap/rlm_ldap.c
@@ -957,7 +957,7 @@ retry:
/*
* Translate the LDAP queries.
*/
-static size_t ldap_escape_func(char *out, size_t outlen, const char *in)
+static size_t ldap_escape_func(UNUSED REQUEST *request, char *out, size_t outlen, const char *in, void *arg)
{
size_t len = 0;
diff --git a/src/modules/rlm_linelog/rlm_linelog.c b/src/modules/rlm_linelog/rlm_linelog.c
index a9fce39d7d4..111f770fa12 100644
--- a/src/modules/rlm_linelog/rlm_linelog.c
+++ b/src/modules/rlm_linelog/rlm_linelog.c
@@ -165,7 +165,9 @@ static int linelog_instantiate(CONF_SECTION *conf, void **instance)
/*
* Escape unprintable characters.
*/
-static size_t linelog_escape_func(char *out, size_t outlen, const char *in)
+static size_t linelog_escape_func(UNUSED REQUEST *request,
+ char *out, size_t outlen, const char *in,
+ UNUSED void *arg)
{
int len = 0;
diff --git a/src/modules/rlm_redis/rlm_redis.c b/src/modules/rlm_redis/rlm_redis.c
index 5eebae88689..1ed0809c94e 100644
--- a/src/modules/rlm_redis/rlm_redis.c
+++ b/src/modules/rlm_redis/rlm_redis.c
@@ -137,7 +137,8 @@ static void *redis_create_conn(void *ctx)
return dissocket;
}
-static size_t redis_escape_func(char *out, size_t outlen, const char *in)
+static size_t redis_escape_func(UNUSED REQUEST *request,
+ char *out, size_t outlen, const char *in, UNUSED void *arg)
{
size_t len = 0;
diff --git a/src/modules/rlm_sql/rlm_sql.c b/src/modules/rlm_sql/rlm_sql.c
index ef877c659cf..0ff428b13b7 100644
--- a/src/modules/rlm_sql/rlm_sql.c
+++ b/src/modules/rlm_sql/rlm_sql.c
@@ -125,7 +125,7 @@ static int fallthrough(VALUE_PAIR *vp)
* Yucky prototype.
*/
static int generate_sql_clients(SQL_INST *inst);
-static size_t sql_escape_func(char *out, size_t outlen, const char *in);
+static size_t sql_escape_func(REQUEST *, char *out, size_t outlen, const char *in, void *arg);
/*
* SQL xlat function
@@ -403,7 +403,7 @@ static int generate_sql_clients(SQL_INST *inst)
/*
* Translate the SQL queries.
*/
-static size_t sql_escape_func(char *out, size_t outlen, const char *in)
+static size_t sql_escape_func(UNUSED REQUEST *request, char *out, size_t outlen, const char *in, UNUSED void *arg)
{
size_t len = 0;
diff --git a/src/modules/rlm_sql/rlm_sql.h b/src/modules/rlm_sql/rlm_sql.h
index ee140ff30b5..4255718e390 100644
--- a/src/modules/rlm_sql/rlm_sql.h
+++ b/src/modules/rlm_sql/rlm_sql.h
@@ -106,7 +106,7 @@ struct sql_inst {
int (*sql_set_user)(SQL_INST *inst, REQUEST *request, char *sqlusername, const char *username);
SQLSOCK *(*sql_get_socket)(SQL_INST * inst);
int (*sql_release_socket)(SQL_INST * inst, SQLSOCK * sqlsocket);
- size_t (*sql_escape_func)(char *out, size_t outlen, const char *in);
+ size_t (*sql_escape_func)(REQUEST *, char *out, size_t outlen, const char *in, void *arg);
int (*sql_query)(SQLSOCK **sqlsocket, SQL_INST *inst, char *query);
int (*sql_select_query)(SQLSOCK **sqlsocket, SQL_INST *inst, char *query);
int (*sql_fetch_row)(SQLSOCK **sqlsocket, SQL_INST *inst);
diff --git a/src/modules/rlm_sql_log/rlm_sql_log.c b/src/modules/rlm_sql_log/rlm_sql_log.c
index cea2bb9b1e5..d35a8a6f46d 100644
--- a/src/modules/rlm_sql_log/rlm_sql_log.c
+++ b/src/modules/rlm_sql_log/rlm_sql_log.c
@@ -151,7 +151,7 @@ static int sql_log_detach(void *instance)
/*
* Translate the SQL queries.
*/
-static size_t sql_escape_func(char *out, size_t outlen, const char *in)
+static size_t sql_escape_func(UNUSED REQUEST *request, char *out, size_t outlen, const char *in, UNUSED void *arg)
{
int len = 0;
@@ -197,7 +197,7 @@ static size_t sql_escape_func(char *out, size_t outlen, const char *in)
return len;
}
-static size_t sql_utf8_escape_func(char *out, size_t outlen, const char *in)
+static size_t sql_utf8_escape_func(UNUSED REQUEST *request, char *out, size_t outlen, const char *in, UNUSED void *arg)
{
size_t len = 0;
size_t utf8 = 0;
diff --git a/src/modules/rlm_sqlcounter/rlm_sqlcounter.c b/src/modules/rlm_sqlcounter/rlm_sqlcounter.c
index 0664e60286d..52fe2be00ac 100644
--- a/src/modules/rlm_sqlcounter/rlm_sqlcounter.c
+++ b/src/modules/rlm_sqlcounter/rlm_sqlcounter.c
@@ -103,7 +103,7 @@ static char *allowed_chars = NULL;
/*
* Translate the SQL queries.
*/
-static size_t sql_escape_func(char *out, size_t outlen, const char *in)
+static size_t sql_escape_func(UNUSED REQUEST *request, char *out, size_t outlen, const char *in, UNUSED void *arg)
{
int len = 0;
@@ -467,7 +467,7 @@ static int sqlcounter_instantiate(CONF_SECTION *conf, void **instance)
sqlcounter_detach(data);
return -1;
}
- sql_escape_func(buffer, sizeof(buffer), data->key_name);
+ sql_escape_func(NULL, buffer, sizeof(buffer), data->key_name, NULL);
if (strcmp(buffer, data->key_name) != 0) {
radlog(L_ERR, "rlm_sqlcounter: The value for option 'key' is too long or contains unsafe characters.");
sqlcounter_detach(data);
@@ -501,7 +501,7 @@ static int sqlcounter_instantiate(CONF_SECTION *conf, void **instance)
sqlcounter_detach(data);
return -1;
}
- sql_escape_func(buffer, sizeof(buffer), data->sqlmod_inst);
+ sql_escape_func(NULL, buffer, sizeof(buffer), data->sqlmod_inst, NULL);
if (strcmp(buffer, data->sqlmod_inst) != 0) {
radlog(L_ERR, "rlm_sqlcounter: The value for option 'sqlmod-inst' is too long or contains unsafe characters.");
sqlcounter_detach(data);