[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[postfix-jp: 305] postfix 2.1 での direct query について



こんばんは。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]