Aaron Stone wrote:
db_insert_message_block() and db_insert_message_block_physmessage().
Ilja, Hang in there. Full patch for is_header flag attached. -- ________________________________________________________________ Paul Stevens [EMAIL PROTECTED] NET FACILITIES GROUP GPG/PGP: 1024D/11F8CD31 The Netherlands_______________________________________www.nfg.nl
#! /bin/sh -e ## 07_is_header.dpatch by <[EMAIL PROTECTED]> ## ## All lines beginning with `## DP:' are a description of the patch. ## DP: No description. if [ $# -lt 1 ]; then echo "`basename $0`: script expects -patch|-unpatch as argument" >&2 exit 1 fi [ -f debian/patches/00patch-opts ] && . debian/patches/00patch-opts patch_opts="${patch_opts:--f --no-backup-if-mismatch} ${2:+-d $2}" case "$1" in -patch) patch -p1 ${patch_opts} < $0;; -unpatch) patch -R -p1 ${patch_opts} < $0;; *) echo "`basename $0`: script expects -patch|-unpatch as argument" >&2 exit 1;; esac exit 0 @DPATCH@ diff -urNad /usr/src/dbmail2/dbmail-2.0/db.c dbmail-2.0/db.c --- /usr/src/dbmail2/dbmail-2.0/db.c 2004-06-10 14:32:51.000000000 +0200 +++ dbmail-2.0/db.c 2004-06-10 14:32:51.000000000 +0200 @@ -911,7 +911,8 @@ int db_insert_message_block_physmessage(const char *block, u64_t block_size, u64_t physmessage_id, - u64_t * messageblk_idnr) + u64_t * messageblk_idnr, + unsigned is_header) { char *escaped_query = NULL; unsigned maxesclen = (READ_BLOCK_SIZE + 1) * 2 + DEF_QUERYSIZE; @@ -947,7 +948,8 @@ startlen = snprintf(escaped_query, maxesclen, "INSERT INTO messageblks" - "(messageblk,blocksize, physmessage_id) VALUES ('"); + "(is_header,messageblk,blocksize, physmessage_id) VALUES ('%u','", + is_header); /* escape & add data */ esclen = @@ -973,7 +975,7 @@ } int db_insert_message_block(const char *block, u64_t block_size, - u64_t message_idnr, u64_t * messageblk_idnr) + u64_t message_idnr, u64_t * messageblk_idnr, unsigned is_header) { u64_t physmessage_id; @@ -993,7 +995,7 @@ } if (db_insert_message_block_physmessage - (block, block_size, physmessage_id, messageblk_idnr) < 0) { + (block, block_size, physmessage_id, messageblk_idnr, is_header) < 0) { trace(TRACE_ERROR, "%s,%s: error inserting messageblks for " "physmessage [%llu]", __FILE__, __func__, @@ -2052,9 +2054,9 @@ if (db_insert_message_block_physmessage(msgdata, datalen, physmessage_id, - &messageblk_idnr) == -1 + &messageblk_idnr,1) == -1 || db_insert_message_block(" \n", 2, message_idnr, - &messageblk_idnr) == -1) { + &messageblk_idnr,1) == -1) { trace(TRACE_ERROR, "%s,%s: could not insert msg block\n", __FILE__, __func__); @@ -2077,7 +2079,7 @@ if (db_insert_message_block_physmessage( msgdata, count, physmessage_id, - &messageblk_idnr) == -1) { + &messageblk_idnr,1) == -1) { trace(TRACE_ERROR, "%s,%s: could not insert msg block\n", __FILE__, __func__); @@ -2097,7 +2099,7 @@ &msgdata[count], READ_BLOCK_SIZE, physmessage_id, - &messageblk_idnr) == -1) { + &messageblk_idnr,0) == -1) { trace(TRACE_ERROR, "%s,%s: could not insert msg block", __FILE__, __func__); @@ -2117,7 +2119,7 @@ if (db_insert_message_block_physmessage( &msgdata[count], datalen - count, physmessage_id, - &messageblk_idnr) == -1) { + &messageblk_idnr,0) == -1) { trace(TRACE_ERROR, "%s,%s: could not insert msg block\n", __FILE__, __func__); diff -urNad /usr/src/dbmail2/dbmail-2.0/db.h dbmail-2.0/db.h --- /usr/src/dbmail2/dbmail-2.0/db.h 2004-06-10 14:30:50.000000000 +0200 +++ dbmail-2.0/db.h 2004-06-10 14:32:51.000000000 +0200 @@ -613,7 +613,8 @@ int db_insert_message_block_physmessage(const char *block, u64_t block_size, u64_t physmessage_id, - u64_t * messageblock_idnr); + u64_t * messageblock_idnr, + unsigned is_header); /** * \brief insert a message block into the message block table * \param block the message block (which is a string) @@ -627,7 +628,8 @@ */ int db_insert_message_block(const char *block, u64_t block_size, u64_t message_idnr, - /[EMAIL PROTECTED]@*/ u64_t * messageblock_idnr); + /[EMAIL PROTECTED]@*/ u64_t * messageblock_idnr, + unsigned is_header); /** * \brief log IP-address for POP/IMAP_BEFORE_SMTP. If the IP-address * is already logged, it's timestamp is renewed. diff -urNad /usr/src/dbmail2/dbmail-2.0/dbmsgbuf.c dbmail-2.0/dbmsgbuf.c --- /usr/src/dbmail2/dbmail-2.0/dbmsgbuf.c 2004-06-10 14:30:50.000000000 +0200 +++ dbmail-2.0/dbmsgbuf.c 2004-06-10 14:32:51.000000000 +0200 @@ -53,7 +53,8 @@ static unsigned nblocks = 0; /**< number of block */ static const char * tmprow; /**< temporary row number */ -int db_init_msgfetch(u64_t msg_idnr) +int db_init_fetch_messageblks(u64_t msg_idnr, char *query_template); +int db_init_fetch_messageblks(u64_t msg_idnr, char *query_template) { msgbuf_buf = (char *) my_malloc(sizeof(char) * (size_t) MSGBUF_WINDOWSIZE); if (!msgbuf_buf) { @@ -64,12 +65,7 @@ return 0; memset(msgbuf_buf, '\0', (size_t) MSGBUF_WINDOWSIZE); - snprintf(query, DEF_QUERYSIZE, - "SELECT messageblk FROM messageblks LEFT JOIN messages " - "USING (physmessage_id) " - "WHERE messages.message_idnr = '%llu' " - "ORDER BY messageblk_idnr", - msg_idnr); + snprintf(query, DEF_QUERYSIZE, query_template, msg_idnr); if (db_query(query) == -1) { trace(TRACE_ERROR, "%s,%s: could not get message", @@ -143,6 +139,23 @@ * later use */ db_store_msgbuf_result(); return 1; + +} + +int db_init_fetch_headers(u64_t msg_idnr) +{ + char *query_template = "SELECT messageblk FROM messageblks LEFT JOIN messages " + "USING (physmessage_id) WHERE messages.message_idnr = '%llu' " + "AND messageblks.is_header = 1"; + return db_init_fetch_messageblks(msg_idnr, query_template); + +} +int db_init_fetch_message(u64_t msg_idnr) +{ + char *query_template = "SELECT messageblk FROM messageblks LEFT JOIN messages " + "USING (physmessage_id) WHERE messages.message_idnr = '%llu' " + "ORDER BY messageblk_idnr"; + return db_init_fetch_messageblks(msg_idnr, query_template); } diff -urNad /usr/src/dbmail2/dbmail-2.0/dbmsgbuf.h dbmail-2.0/dbmsgbuf.h --- /usr/src/dbmail2/dbmail-2.0/dbmsgbuf.h 2004-06-10 14:30:50.000000000 +0200 +++ dbmail-2.0/dbmsgbuf.h 2004-06-10 14:32:51.000000000 +0200 @@ -50,7 +50,18 @@ * - 0 if already inited (sic) before * - 1 on success */ -int db_init_msgfetch(u64_t msg_idnr); +int db_init_fetch_message(u64_t msg_idnr); + +/** + * \brief initialises a message headers fetch + * \param msg_idnr + * \return + * - -1 on error + * - 0 if already inited (sic) before + * - 1 on success + */ +int db_init_fetch_headers(u64_t msg_idnr); + /** * \brief update msgbuf diff -urNad /usr/src/dbmail2/dbmail-2.0/pipe.c dbmail-2.0/pipe.c --- /usr/src/dbmail2/dbmail-2.0/pipe.c 2004-06-10 14:30:50.000000000 +0200 +++ dbmail-2.0/pipe.c 2004-06-10 14:32:51.000000000 +0200 @@ -70,7 +70,7 @@ * - -1 on error * - 1 on success */ -static int store_message_in_blocks(const char* message, +static int db_store_body_blocks(const char* message, u64_t message_size, u64_t msgidnr); @@ -413,7 +413,7 @@ } switch (db_insert_message_block - (header, headersize, msgidnr, &messageblk_idnr)) { + (header, headersize, msgidnr, &messageblk_idnr,1)) { case -1: trace(TRACE_ERROR, "store_message_temp(): error inserting msgblock [header]"); @@ -424,7 +424,7 @@ "for readblock", READ_BLOCK_SIZE); /* store body in several blocks (if needed */ - if (store_message_in_blocks(body, bodysize, msgidnr) < 0) { + if (db_store_body_blocks(body, bodysize, msgidnr) < 0) { trace(TRACE_STOP, "store_message_temp(): db_insert_message_block " "failed"); @@ -447,7 +447,7 @@ return 1; } -int store_message_in_blocks(const char *message, u64_t message_size, +int db_store_body_blocks(const char *message, u64_t message_size, u64_t msgidnr) { u64_t tmp_messageblk_idnr; @@ -466,7 +466,7 @@ __FILE__, __func__, &message[offset]); if (db_insert_message_block(&message[offset], block_size, msgidnr, - &tmp_messageblk_idnr) < 0) { + &tmp_messageblk_idnr,0) < 0) { trace(TRACE_ERROR, "%s,%s: " "db_insert_message_block() failed", __FILE__, __func__); diff -urNad /usr/src/dbmail2/dbmail-2.0/rfcmsg.c dbmail-2.0/rfcmsg.c --- /usr/src/dbmail2/dbmail-2.0/rfcmsg.c 2004-06-10 14:30:50.000000000 +0200 +++ dbmail-2.0/rfcmsg.c 2004-06-10 14:32:51.000000000 +0200 @@ -117,7 +117,7 @@ { int result, level = 0, maxlevel = -1; - if (db_init_msgfetch(msguid) != 1) { + if (db_init_fetch_headers(msguid) != 1) { trace(TRACE_ERROR, "db_fetch_headers(): could not init msgfetch\n"); return -2; @@ -148,7 +148,7 @@ "db_fetch_headers(): trying to fetch at maxlevel %d...\n", maxlevel); - if (db_init_msgfetch(msguid) != 1) { + if (db_init_fetch_message(msguid) != 1) { trace(TRACE_ERROR, "db_fetch_headers(): could not init msgfetch\n"); return -2; @@ -180,7 +180,7 @@ /* ok still problems... try to make a message */ - if (db_init_msgfetch(msguid) != 1) { + if (db_init_fetch_message(msguid) != 1) { trace(TRACE_ERROR, "db_fetch_headers(): could not init msgfetch\n"); return -2; diff -urNad /usr/src/dbmail2/dbmail-2.0/smtp-convert.c dbmail-2.0/smtp-convert.c --- /usr/src/dbmail2/dbmail-2.0/smtp-convert.c 2004-06-10 14:30:50.000000000 +0200 +++ dbmail-2.0/smtp-convert.c 2004-06-10 14:32:51.000000000 +0200 @@ -195,7 +195,7 @@ in_msg = 1; /* ok start of a new msg */ else { /* update & end message */ - db_insert_message_block(blk, cnt, msgid); + db_insert_message_block(blk, cnt, msgid,0); create_unique_id(newunique, msgid); db_update_message(msgid, newunique, @@ -222,7 +222,7 @@ if (strcmp(&blk[cnt], "\n") == 0) { db_insert_message_block(blk, cnt + len, - msgid); + msgid,1); header_passed = 1; size += (cnt + len); cnt = 0; @@ -240,7 +240,7 @@ blk[READ_BLOCK_SIZE] = '\0'; db_insert_message_block(blk, READ_BLOCK_SIZE, - msgid); + msgid,0); blk[READ_BLOCK_SIZE] = saved; memmove(blk, &blk[READ_BLOCK_SIZE], @@ -254,7 +254,7 @@ /* update & end message */ if (msgid > 0) { - db_insert_message_block(blk, cnt, msgid); + db_insert_message_block(blk, cnt, msgid,0); create_unique_id(newunique, msgid); db_update_message(msgid, newunique, size + cnt,