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

Reply via email to