summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul J Stevens <paul@nfg.nl>2010-05-26 16:38:53 +0200
committerPaul J Stevens <paul@nfg.nl>2010-05-26 16:38:53 +0200
commit80f99c98d1261696d1217f1a5fc89fa6c3af8214 (patch)
tree3a7d2f76b42839209cc016a41c9fc0f70b5d837c
parent417e5037b86f20435f4e09a750f9ac76dd9dbb1e (diff)
cleanups
-rw-r--r--src/dbmail-message.c84
-rw-r--r--src/dbmail-message.h3
-rw-r--r--src/dm_cidr.c2
-rw-r--r--src/dm_misc.c33
-rw-r--r--src/dm_misc.h3
-rw-r--r--test/check_dbmail_message.c56
-rw-r--r--test/check_dbmail_misc.c57
-rw-r--r--test/check_dbmail_server.c2
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","");