[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[postfix-jp: 305] postfix 2.1 での direct query について
- Subject: [postfix-jp: 305] postfix 2.1 での direct query について
- From: Tatsuya Ueda <tatsuya@xxxxxxxxxxxxxxx>
- Date: Wed, 19 May 2004 19:00:35 +0900
こんばんは。TATSUYA.info の TATSUYA です。
先日、リリースされた postfix 2.1 なのですが、とみたさんが作成された
http://www.tmtm.org/postfix/postfix-2.0.12-mysql-direct_query.patch の
パッチを当てることができず、困っています。
とりあえず、 global/dict_mysql.c が対象のファイルということはわかったため、
部分的にはパッチを作成してみました。
ですが、とみたさんが作成されたパッチでいう、「@@ -420,26 +445,43 @@」
の部分がどこに対応するのかわからず、ここから先が進めなくなってしまっています。
どなたか、分かり方がいらっしゃいましたら教えていただけないでしょうか?
よろしくお願いいたします。
-----------------------------------------------------------
--- ./src/global/dict_mysql.c.origi Wed May 19 18:46:19 2004
+++ ./src/global/dict_mysql.c Wed May 19 18:52:50 2004
@@ -122,6 +122,7 @@
#include "dict.h"
#include "msg.h"
#include "mymalloc.h"
+#include "mac_parse.h"
#include "argv.h"
#include "vstring.h"
#include "split_at.h"
@@ -164,6 +165,7 @@
char *select_field;
char *where_field;
char *additional_conditions;
+ char *direct_query;
char **hostnames;
int len_hosts;
} MYSQL_NAME;
@@ -198,7 +200,23 @@
static MYSQL_NAME *mysqlname_parse(const char *);
static HOST *host_init(const char *);
-
+typedef struct {
+ const char *key;
+ VSTRING *query;
+} DICT_MYSQL_PARSE_ARG;
+
+static int parse_callback(int type, VSTRING *buf, char *context)
+{
+ DICT_MYSQL_PARSE_ARG *arg = (DICT_MYSQL_PARSE_ARG *)context;
+
+ if (type == MAC_PARSE_LITERAL)
+ vstring_strcat(arg->query, vstring_str(buf));
+ else if (type == MAC_PARSE_VARNAME) {
+ if (strcmp(vstring_str(buf), "key") == 0)
+ vstring_strcat(arg->query, arg->key);
+ }
+ return 0;
+}
/**********************************************************************
* public interface dict_mysql_lookup
@@ -228,9 +246,16 @@
}
/* prepare the query */
mysql_escape_string(name_escaped, name, (unsigned int) strlen(name));
- vstring_sprintf(query, "select %s from %s where %s = '%s' %s", dict_mysql->name->select_field,
- dict_mysql->name->table, dict_mysql->name->where_field, name_escaped,
+ if (dict_mysql->name->direct_query[0]) {
+ DICT_MYSQL_PARSE_ARG arg;
+ arg.key = name_escaped;
+ arg.query = query;
+ mac_parse(dict_mysql->name->direct_query, parse_callback, &arg);
+ } else {
+ vstring_sprintf(query, "select %s from %s where %s = '%s' %s", dict_mysql->name->select_field,
+ dict_mysql->name->table, dict_mysql->name->where_field, name_escaped,
dict_mysql->name->additional_conditions);
+ }
if (msg_verbose)
msg_info("dict_mysql_lookup using sql query: %s", vstring_str(query));
/* free mem associated with preparing the query */
@@ -637,6 +662,7 @@
myfree(dict_mysql->name->select_field);
myfree(dict_mysql->name->where_field);
myfree(dict_mysql->name->additional_conditions);
+ myfree(dict_mysql->name->direct_query);
for (i = 0; i < dict_mysql->name->len_hosts; i++) {
myfree(dict_mysql->name->hostnames[i]);
}
-----------------------------------------------------------
--
上田 達也(Tatsuya Ueda) @ TATSUYA.info (http://TATSUYA.info/)
E-Mail : tatsuya@xxxxxxxxxxxxxxx
_______________________________________________
Postfix-jp-list mailing list
Postfix-jp-list@xxxxxxxxxxxxxxxxxxxx
http://lists.sourceforge.jp/mailman/listinfo/postfix-jp-list
- Follow-Ups
-
- [postfix-jp: 307] Re: postfix 2.1 での direct query について, とみたまさひろ
[検索ページ]
[Postfix-JP ML Home]