On Mon, 14 Jan 2008, Murray S. Kucherawy wrote:
Something like the attached patch is what I have in mind at the moment
(not tested).
A revised version that also checks a userid if such is present in the "i="
tag.Index: dkim.c
===================================================================
RCS file: /cvs/libdkim/dkim.c,v
retrieving revision 1.450
diff -u -r1.450 dkim.c
--- dkim.c 15 Jan 2008 00:08:48 -0000 1.450
+++ dkim.c 15 Jan 2008 01:14:52 -0000
@@ -4073,13 +4073,45 @@
if (pstate == NULL || pstate->ps_state < 1)
{
+ char *i;
+ char *at;
+ char user[MAXADDRESS + 1];
+
for (c = 0; c < dkim->dkim_sigcount; c++)
{
sig = dkim->dkim_siglist[c];
+ /* determine user/domain to compare */
+ i = dkim_param_get(sig->sig_taglist, "i");
+ if (i == NULL)
+ {
+ i = sig->sig_domain;
+ user[0] = '\0';
+ }
+ else
+ {
+ at = strchr(i, '@');
+
+ if (at != NULL)
+ {
+ strlcpy(user, i, sizeof user);
+ user[i - at] = '\0';
+ i = at + 1;
+ }
+ else
+ {
+ user[0] = '\0';
+ }
+ }
+
+ /* see if this signature matches user/domain */
+ if ((user[0] != '\0' &&
+ strcmp(dkim->dkim_user, user) != 0) ||
+ strcasecmp(i, dkim->dkim_domain) != 0)
+ continue;
+
if ((sig->sig_flags & DKIM_SIGFLAG_PASSED) != 0 &&
- sig->sig_bh == DKIM_SIGBH_MATCH &&
- strcasecmp(dkim->dkim_domain, sig->sig_domain) == 0)
+ sig->sig_bh == DKIM_SIGBH_MATCH)
{
dkim->dkim_presult = DKIM_PRESULT_VALIDOSIG;
*susp = FALSE;
-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace
_______________________________________________
dkim-milter-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/dkim-milter-discuss