diff --git a/mbuni/ChangeLog b/mbuni/ChangeLog index aa1a616..0f8953d 100644 --- a/mbuni/ChangeLog +++ b/mbuni/ChangeLog @@ -1,3 +1,5 @@ +2008-07-07 P. A. Bagyenda + * Message-ID fix -- added '@' 2008-07-04 P. A. Bagyenda * Minor fixes for PANICs in mms_msg.c 2008-07-01 P. A. Bagyenda diff --git a/mbuni/mmlib/mms_queue.c b/mbuni/mmlib/mms_queue.c index dc40aad..c005c39 100644 --- a/mbuni/mmlib/mms_queue.c +++ b/mbuni/mmlib/mms_queue.c @@ -854,7 +854,7 @@ MmsEnvelope *mms_queue_create_envelope(Octstr *from, List *to, /* Get MsgID, Fixup if not there and needed. */ if ((msgid = mms_get_header_value(m, octstr_imm("Message-ID"))) == NULL && xqfname) { - msgid = mms_maketransid(xqfname, mmscname); + msgid = mms_make_msgid(xqfname, mmscname); if (mtype == MMS_MSGTYPE_SEND_REQ) mms_replace_header_value(m, "Message-ID", octstr_get_cstr(msgid)); } diff --git a/mbuni/mmlib/mms_util.c b/mbuni/mmlib/mms_util.c index 714ef0b..a530501 100644 --- a/mbuni/mmlib/mms_util.c +++ b/mbuni/mmlib/mms_util.c @@ -158,6 +158,26 @@ Octstr *mms_maketransid(char *qf, Octstr *mmscname) return res; } +Octstr *mms_make_msgid(char *qf, Octstr *mmscname) +{/* Message ID is a little differently done. */ + Octstr *res; + Octstr *x, *y = NULL; + static int ct; + + if (!qf) + x = octstr_format("msg.%ld.x%d.%d.%d", + (long)time(NULL) % 10000, (++ct % 1000), getpid()%100, random()%100); + else + x = octstr_create(qf); + + res = octstr_format("%S@%S", x,mmscname); + + octstr_destroy(x); + octstr_destroy(y); + + return res; +} + extern Octstr *mms_getqf_fromtransid(Octstr *transid) { int i; @@ -171,6 +191,18 @@ extern Octstr *mms_getqf_fromtransid(Octstr *transid) return (i >= 0) ? octstr_copy(transid, i+1, octstr_len(transid)) : octstr_duplicate(transid); } +extern Octstr *mms_getqf_from_msgid(Octstr *msgid) +{ + int i; + + if (msgid == NULL) + return NULL; + if ((i = octstr_search_char(msgid, '@', 0)) > 0) + return octstr_copy(msgid, 0, i); + else + return mms_getqf_fromtransid(msgid); /* For older ones where transid = msgid. */ +} + Octstr *mms_isodate(time_t t) { Octstr *current_time; diff --git a/mbuni/mmlib/mms_util.h b/mbuni/mmlib/mms_util.h index 3c63250..f733942 100644 --- a/mbuni/mmlib/mms_util.h +++ b/mbuni/mmlib/mms_util.h @@ -69,7 +69,10 @@ extern int mms_load_core_settings(mCfgGrp *cgrp); extern Octstr *mms_maketransid(char *qf, Octstr *mmscname); +extern Octstr *mms_make_msgid(char *qf, Octstr *mmscname); + extern Octstr *mms_getqf_fromtransid(Octstr *transid); +extern Octstr *mms_getqf_from_msgid(Octstr *msgid); extern Octstr *mms_isodate(time_t t); void mms_lib_init(void); diff --git a/mbuni/mmsbox/bearerbox.c b/mbuni/mmsbox/bearerbox.c index d52a7b7..7fe6e15 100644 --- a/mbuni/mmsbox/bearerbox.c +++ b/mbuni/mmsbox/bearerbox.c @@ -229,7 +229,7 @@ static void mm7soap_receive(MmsHTTPClientInfo *h) octstr_get_cstr(qdir), "MM7/SOAP-IN", octstr_imm(MM_NAME)); - msgid = mms_maketransid(octstr_get_cstr(qf), octstr_imm(MM_NAME)); + msgid = mms_make_msgid(octstr_get_cstr(qf), octstr_imm(MM_NAME)); mms_log("Received", from, to, -1, msgid, NULL, h->m->id, "MMSBox", h->ua, NULL); octstr_destroy(linkedid); diff --git a/mbuni/mmsbox/mmsbox.c b/mbuni/mmsbox/mmsbox.c index 22a7ef9..2b00b29 100644 --- a/mbuni/mmsbox/mmsbox.c +++ b/mbuni/mmsbox/mmsbox.c @@ -1205,8 +1205,10 @@ static void sendmms_func(void *unused) username = http_cgi_variable(cgivars, "username"); password = http_cgi_variable(cgivars, "password"); - octstr_strip_blanks(username); - octstr_strip_blanks(password); + if (username) + octstr_strip_blanks(username); + if (password) + octstr_strip_blanks(password); if ((u = auth_user(username, password)) != NULL && is_allowed_ip(sendmms_port.allow_ip, sendmms_port.deny_ip, ip)) { Octstr *data, *ctype = NULL, *mmc, *to, *from, *dlr_url; diff --git a/mbuni/mmsc/mmsc_cfg.c b/mbuni/mmsc/mmsc_cfg.c index a259b7b..d7597ca 100644 --- a/mbuni/mmsc/mmsc_cfg.c +++ b/mbuni/mmsc/mmsc_cfg.c @@ -54,8 +54,14 @@ MmscSettings *mms_load_mmsc_settings(mCfg *cfg, List **proxyrelays) mms_load_core_settings(cgrp); - m->hostname = _mms_cfg_getx(grp, octstr_imm("hostname")); + m->hostname = mms_cfg_get(grp, octstr_imm("hostname")); + if (octstr_len(m->hostname) == 0) + m->hostname = octstr_create("localhost"); + + if ((m->host_alias = mms_cfg_get(grp, octstr_imm("host-alias"))) == NULL) + m->host_alias = octstr_duplicate(m->hostname); + if (proxyrelays) *proxyrelays = mms_proxy_relays(cfg, m->hostname); @@ -71,11 +77,8 @@ MmscSettings *mms_load_mmsc_settings(mCfg *cfg, List **proxyrelays) } else m->strip_prefixes = NULL; - if (m->hostname == NULL || octstr_len(m->hostname) == 0) - m->hostname = octstr_create("localhost"); m->name = _mms_cfg_getx(grp, octstr_imm("name")); - m->host_alias = _mms_cfg_getx(grp, octstr_imm("host-alias")); m->sendmail = _mms_cfg_getx(grp, octstr_imm("send-mail-prog")); diff --git a/mbuni/mmsc/mmsfromemail.c b/mbuni/mmsc/mmsfromemail.c index f64b944..a376044 100644 --- a/mbuni/mmsc/mmsfromemail.c +++ b/mbuni/mmsc/mmsfromemail.c @@ -288,8 +288,8 @@ int main(int argc, char *argv[]) mm4_type ? "MM4" : "MM3", settings->host_alias); if (qf) { - newmsgid = mms_maketransid(octstr_get_cstr(qf), - settings->host_alias); + newmsgid = mms_make_msgid(octstr_get_cstr(qf), + settings->host_alias); info(0, "%s Queued message to %s from %s (via %s) => %s", mm4_type ? "MM4 Incoming" : "Email2MMS", octstr_get_cstr(xto), octstr_get_cstr(xfrom), diff --git a/mbuni/mmsc/mmsproxy.c b/mbuni/mmsc/mmsproxy.c index 0c88341..ef0126a 100644 --- a/mbuni/mmsc/mmsproxy.c +++ b/mbuni/mmsc/mmsproxy.c @@ -627,7 +627,7 @@ static void sendmms_proxy(MmsHTTPClientInfo *h) mresp = mms_sendconf("Error-transient-failure", "None", octstr_get_cstr(otransid),0, menc); else { - msgid = mms_maketransid(octstr_get_cstr(qf), + msgid = mms_make_msgid(octstr_get_cstr(qf), settings->host_alias); mresp = mms_sendconf("Ok", octstr_get_cstr(msgid), octstr_get_cstr(otransid),0, menc); @@ -849,7 +849,7 @@ static void sendmms_proxy(MmsHTTPClientInfo *h) mresp = mms_sendconf("Error-transient-failure", "None", octstr_get_cstr(otransid),1,menc); else { - msgid = mms_maketransid(octstr_get_cstr(qf2), settings->host_alias); + msgid = mms_make_msgid(octstr_get_cstr(qf2), settings->host_alias); mresp = mms_sendconf("Ok", octstr_get_cstr(msgid), octstr_get_cstr(otransid),1,menc); @@ -1620,7 +1620,7 @@ static void mm7soap_dispatch(MmsHTTPClientInfo *h) octstr_get_cstr(settings->global_queuedir), "MM7", settings->host_alias); - msgid = mms_maketransid(octstr_get_cstr(qf), settings->host_alias); + msgid = mms_make_msgid(octstr_get_cstr(qf), settings->host_alias); mms_log("Received", from ? from : sender, to, -1, msgid, h->vasp->id, NULL, "MM7", h->ua, NULL); octstr_destroy(value); @@ -1634,7 +1634,7 @@ static void mm7soap_dispatch(MmsHTTPClientInfo *h) case MM7_TAG_ReplaceReq: msgid = mm7_soap_header_value(mreq, octstr_imm("MessageID")); - if (msgid && (qf = mms_getqf_fromtransid(msgid)) != NULL && + if (msgid && (qf = mms_getqf_from_msgid(msgid)) != NULL && (e = settings->qfs->mms_queue_readenvelope(octstr_get_cstr(qf), octstr_get_cstr(settings->global_queuedir), 1)) != NULL) { @@ -1693,7 +1693,7 @@ static void mm7soap_dispatch(MmsHTTPClientInfo *h) case MM7_TAG_CancelReq: msgid = mm7_soap_header_value(mreq, octstr_imm("MessageID")); - if (msgid && (qf = mms_getqf_fromtransid(msgid)) != NULL && + if (msgid && (qf = mms_getqf_from_msgid(msgid)) != NULL && (e = settings->qfs->mms_queue_readenvelope(octstr_get_cstr(qf), octstr_get_cstr(settings->global_queuedir), 1)) != NULL) { @@ -1858,7 +1858,7 @@ static void mm7eaif_dispatch(MmsHTTPClientInfo *h) settings->host_alias); if (qf) { - msgid = mms_maketransid(octstr_get_cstr(qf), + msgid = mms_make_msgid(octstr_get_cstr(qf), settings->host_alias); /* Log to access log */