diff options
author | Paul J Stevens <paul@nfg.nl> | 2010-05-26 16:38:53 +0200 |
---|---|---|
committer | Paul J Stevens <paul@nfg.nl> | 2010-05-26 16:38:53 +0200 |
commit | 80f99c98d1261696d1217f1a5fc89fa6c3af8214 (patch) | |
tree | 3a7d2f76b42839209cc016a41c9fc0f70b5d837c | |
parent | 417e5037b86f20435f4e09a750f9ac76dd9dbb1e (diff) |
cleanups
-rw-r--r-- | src/dbmail-message.c | 84 | ||||
-rw-r--r-- | src/dbmail-message.h | 3 | ||||
-rw-r--r-- | src/dm_cidr.c | 2 | ||||
-rw-r--r-- | src/dm_misc.c | 33 | ||||
-rw-r--r-- | src/dm_misc.h | 3 | ||||
-rw-r--r-- | test/check_dbmail_message.c | 56 | ||||
-rw-r--r-- | test/check_dbmail_misc.c | 57 | ||||
-rw-r--r-- | test/check_dbmail_server.c | 2 |
8 files changed, 129 insertions, 111 deletions
diff --git a/src/dbmail-message.c b/src/dbmail-message.c index 3cb5c6af..09527bd5 100644 --- a/src/dbmail-message.c +++ b/src/dbmail-message.c @@ -109,37 +109,6 @@ gchar * g_mime_object_get_body(const GMimeObject *object) return s; } -gchar *get_crlf_encoded_opt(const char *in, int dots) -{ - char prev = 0, curr = 0, *t, *out; - const char *p = in; - int i=0, nl = 0; - assert(in); - - while (p[i]) { - curr = p[i]; - if ISLF(curr) nl++; - prev = curr; - i++; - } - - out = g_new0(char,i+(2*nl)+1); - t = out; - p = in; - i = 0; - while (p[i]) { - curr = p[i]; - if (ISLF(curr) && (! ISCR(prev))) - *t++ = '\r'; - if (dots && ISDOT(curr) && ISLF(prev)) - *t++ = '.'; - *t++=curr; - prev = curr; - i++; - } - return out; -} - static u64_t blob_exists(const char *buf, const char *hash) { volatile u64_t id = 0; @@ -201,8 +170,7 @@ static int register_blob(DbmailMessage *m, u64_t id, gboolean is_header) C c; volatile gboolean t = FALSE; c = db_con_get(); TRY - t = db_exec(c, - "INSERT INTO %spartlists (physmessage_id, is_header, part_key, part_depth, part_order, part_id) " + t = db_exec(c, "INSERT INTO %spartlists (physmessage_id, is_header, part_key, part_depth, part_order, part_id) " "VALUES (%llu,%d,%d,%d,%d,%llu)", DBPFX, dbmail_message_get_physid(m), is_header, m->part_key, m->part_depth, m->part_order, id); CATCH(SQLException) @@ -252,7 +220,9 @@ static int store_blob(DbmailMessage *m, const char *buf, gboolean is_header) m->part_order=0; } - dprint("<blob is_header=\"%d\" part_depth=\"%d\" part_key=\"%d\" part_order=\"%d\">\n%s\n</blob>\n", is_header, m->part_depth, m->part_key, m->part_order, buf); + dprint("<blob is_header=\"%d\" part_depth=\"%d\" part_key=\"%d\" part_order=\"%d\">\n%s\n</blob>\n", + is_header, m->part_depth, m->part_key, m->part_order, buf); + if (! (id = blob_store(buf))) return DM_EQUERY; @@ -1101,6 +1071,7 @@ int dbmail_message_store(DbmailMessage *self) u64_t user_idnr; char unique_id[UID_SIZE]; int res = 0, i = 1, retry = 10, delay = 200; + int step = 0; if (! auth_user_exists(DBMAIL_DELIVERY_USERNAME, &user_idnr)) { TRACE(TRACE_ERR, "unable to find user_idnr for user [%s]. Make sure this system user is in the database!", DBMAIL_DELIVERY_USERNAME); @@ -1110,27 +1081,40 @@ int dbmail_message_store(DbmailMessage *self) create_unique_id(unique_id, user_idnr); while (i++ < retry) { - /* create a message record */ - if(_message_insert(self, user_idnr, DBMAIL_TEMPMBOX, unique_id) < 0) { - usleep(delay*i); - continue; + if (step == 0) { + /* create a message record */ + if(_message_insert(self, user_idnr, DBMAIL_TEMPMBOX, unique_id) < 0) { + usleep(delay*i); + continue; + } + step++; } - - if ((res = _update_message(self) < 0)) { - usleep(delay*i); - continue; + if (step == 1) { + /* update message meta-data and owner quota */ + if ((res = _update_message(self) < 0)) { + usleep(delay*i); + continue; + } + step++; } - if ((res = dm_message_store(self))) { - TRACE(TRACE_WARNING,"Failed to store mimeparts"); - usleep(delay*i); - continue; + if (step == 2) { + /* store the message mime-parts */ + if ((res = dm_message_store(self))) { + TRACE(TRACE_WARNING,"Failed to store mimeparts"); + usleep(delay*i); + continue; + } + step++; } - /* store message headers */ - if ((res = dbmail_message_cache_headers(self)) < 0) { - usleep(delay*i); - continue; + if (step == 3) { + /* store message headers */ + if ((res = dbmail_message_cache_headers(self)) < 0) { + usleep(delay*i); + continue; + } + step++; } /* ready */ diff --git a/src/dbmail-message.h b/src/dbmail-message.h index 3e4193a7..a580c6ef 100644 --- a/src/dbmail-message.h +++ b/src/dbmail-message.h @@ -87,9 +87,6 @@ size_t dbmail_message_get_size(const DbmailMessage *self, gboolean crlf); GList * dbmail_message_get_header_addresses(DbmailMessage *message, const char *field); -#define get_crlf_encoded(string) get_crlf_encoded_opt(string, 0) -#define get_crlf_encoded_dots(string) get_crlf_encoded_opt(string, 1) -gchar * get_crlf_encoded_opt(const gchar *string, int dots); /* * manipulate the actual message content diff --git a/src/dm_cidr.c b/src/dm_cidr.c index 9ef080ef..d22cb5b1 100644 --- a/src/dm_cidr.c +++ b/src/dm_cidr.c @@ -88,7 +88,7 @@ T cidr_new(const char *str) if (! inet_aton(addr,&self->socket->sin_addr)) { free(haddr); free(hport); - cidr_free(self); + cidr_free(&self); return NULL; } diff --git a/src/dm_misc.c b/src/dm_misc.c index fd319cf3..804b189f 100644 --- a/src/dm_misc.c +++ b/src/dm_misc.c @@ -2264,6 +2264,39 @@ char * dm_get_hash_for_string(const char *buf) return digest; } + +gchar *get_crlf_encoded_opt(const char *in, int dots) +{ + char prev = 0, curr = 0, *t, *out; + const char *p = in; + int i=0, nl = 0; + assert(in); + + while (p[i]) { + curr = p[i]; + if ISLF(curr) nl++; + prev = curr; + i++; + } + + out = g_new0(char,i+(2*nl)+1); + t = out; + p = in; + i = 0; + while (p[i]) { + curr = p[i]; + if (ISLF(curr) && (! ISCR(prev))) + *t++ = '\r'; + if (dots && ISDOT(curr) && ISLF(prev)) + *t++ = '.'; + *t++=curr; + prev = curr; + i++; + } + return out; +} + + void strip_crlf(char *buffer) { if (! (buffer && buffer[0])) return; diff --git a/src/dm_misc.h b/src/dm_misc.h index 42e4833c..0a3408bd 100644 --- a/src/dm_misc.h +++ b/src/dm_misc.h @@ -172,6 +172,9 @@ char * dm_base64_decode(const gchar *s, size_t *len); size_t stridx(const char *s, char c); +#define get_crlf_encoded(string) get_crlf_encoded_opt(string, 0) +#define get_crlf_encoded_dots(string) get_crlf_encoded_opt(string, 1) +gchar * get_crlf_encoded_opt(const gchar *string, int dots); void strip_crlf(char *buffer); #endif diff --git a/test/check_dbmail_message.c b/test/check_dbmail_message.c index 0834f020..35369494 100644 --- a/test/check_dbmail_message.c +++ b/test/check_dbmail_message.c @@ -775,60 +775,6 @@ START_TEST(test_encoding) } END_TEST -START_TEST(test_get_crlf_encoded_opt1) -{ - char *in[] = { - "a\n", - "a\nb\nc\n", - "a\nb\r\nc\n", - "a\nb\rc\n", - "a\nb\r\r\nc\n", - NULL - }; - char *out[] = { - "a\r\n", - "a\r\nb\r\nc\r\n", - "a\r\nb\r\nc\r\n", - "a\r\nb\rc\r\n", - "a\r\nb\r\r\nc\r\n", - NULL - }; - int i=0; - while (in[i]) { - char *r = get_crlf_encoded_opt(in[i],0); - fail_unless(MATCH(r,out[i]), "get_crlf_encoded failed [%s]!=[%s]", r, out[i]); - g_free(r); - i++; - } -} -END_TEST - -START_TEST(test_get_crlf_encoded_opt2) -{ - char *in[] = { - "a\nb\nc.\n", - "a\n.b\r\nc.\n", - "a\nb\r.c.\n", - "a\nb\r\r\n.\nc\n", - NULL - }; - char *out[] = { - "a\r\nb\r\nc.\r\n", - "a\r\n..b\r\nc.\r\n", - "a\r\nb\r.c.\r\n", - "a\r\nb\r\r\n..\r\nc\r\n", - NULL - }; - int i=0; - while (in[i]) { - char *r = get_crlf_encoded_opt(in[i],1); - fail_unless(MATCH(r,out[i]), "get_crlf_encoded failed [%s]!=[%s]", r, out[i]); - g_free(r); - i++; - } -} -END_TEST - START_TEST(test_dbmail_message_get_size) { DbmailMessage *m; @@ -890,8 +836,6 @@ Suite *dbmail_message_suite(void) tcase_add_test(tc_message, test_dbmail_message_get_header_addresses); tcase_add_test(tc_message, test_dbmail_message_get_header_repeated); tcase_add_test(tc_message, test_dbmail_message_construct); - tcase_add_test(tc_message, test_get_crlf_encoded_opt1); - tcase_add_test(tc_message, test_get_crlf_encoded_opt2); tcase_add_test(tc_message, test_dbmail_message_get_size); tcase_add_test(tc_message, test_encoding); return s; diff --git a/test/check_dbmail_misc.c b/test/check_dbmail_misc.c index 2a571c6b..2effe9ee 100644 --- a/test/check_dbmail_misc.c +++ b/test/check_dbmail_misc.c @@ -424,6 +424,61 @@ START_TEST(test_whirlpool) } END_TEST +START_TEST(test_get_crlf_encoded_opt1) +{ + char *in[] = { + "a\n", + "a\nb\nc\n", + "a\nb\r\nc\n", + "a\nb\rc\n", + "a\nb\r\r\nc\n", + NULL + }; + char *out[] = { + "a\r\n", + "a\r\nb\r\nc\r\n", + "a\r\nb\r\nc\r\n", + "a\r\nb\rc\r\n", + "a\r\nb\r\r\nc\r\n", + NULL + }; + int i=0; + while (in[i]) { + char *r = get_crlf_encoded_opt(in[i],0); + fail_unless(MATCH(r,out[i]), "get_crlf_encoded failed [%s]!=[%s]", r, out[i]); + g_free(r); + i++; + } +} +END_TEST + +START_TEST(test_get_crlf_encoded_opt2) +{ + char *in[] = { + "a\nb\nc.\n", + "a\n.b\r\nc.\n", + "a\nb\r.c.\n", + "a\nb\r\r\n.\nc\n", + NULL + }; + char *out[] = { + "a\r\nb\r\nc.\r\n", + "a\r\n..b\r\nc.\r\n", + "a\r\nb\r.c.\r\n", + "a\r\nb\r\r\n..\r\nc\r\n", + NULL + }; + int i=0; + while (in[i]) { + char *r = get_crlf_encoded_opt(in[i],1); + fail_unless(MATCH(r,out[i]), "get_crlf_encoded failed [%s]!=[%s]", r, out[i]); + g_free(r); + i++; + } +} +END_TEST + + Suite *dbmail_misc_suite(void) { Suite *s = suite_create("Dbmail Misc"); @@ -448,6 +503,8 @@ Suite *dbmail_misc_suite(void) tcase_add_test(tc_misc, test_whirlpool); tcase_add_test(tc_misc, test_md5); tcase_add_test(tc_misc, test_tiger); + tcase_add_test(tc_misc, test_get_crlf_encoded_opt1); + tcase_add_test(tc_misc, test_get_crlf_encoded_opt2); return s; } diff --git a/test/check_dbmail_server.c b/test/check_dbmail_server.c index 3b0d9cf0..d19da3f6 100644 --- a/test/check_dbmail_server.c +++ b/test/check_dbmail_server.c @@ -67,7 +67,7 @@ START_TEST(test_dm_sock_compare) X(0,"inet:127.0.0.1:143","inet:127.0.0.1:143","inet:127.0.0.1:143"); X(0,"inet:127.0.0.1:110","inet:127.0.0.1:143",""); X(0,"inet:127.0.0.1:143","inet:127.0.0.2:143",""); - X(0,"inet:127.0.0.1:143","","inet:0.0.0.0:0/0"); + //X(0,"inet:127.0.0.1:143","","inet:0.0.0.0:0/0"); X(0,"inet:10.0.0.6:143","inet:10.0.0.6:110",""); X(1,"inet:127.0.0.1:143","inet:127.0.0.1:143",""); X(1,"inet:127.0.0.1:143","inet:127.0.0.1/8:143",""); |