diff -Nru sid-milter-1.0.0.orig/sid-filter/sid-filter.c sid-milter-1.0.0/sid-filter/sid-filter.c --- sid-milter-1.0.0.orig/sid-filter/sid-filter.c 2009-03-08 09:51:00.000000000 +0000 +++ sid-milter-1.0.0/sid-filter/sid-filter.c 2009-03-08 16:29:24.000000000 +0000 @@ -1279,30 +1279,35 @@ switch (scope) { case SM_SCOPE_PRA: -#ifdef _FFR_NH_MFROM - if ((strncasecmp(mreplies[rcount], - "spf2.0/pra", - 10) == 0) || - (strncasecmp(mreplies[rcount], - "spf2.0/mfrom,pra", - 16) == 0)) -#else /* _FFR_NH_MFROM */ - if (strncasecmp(mreplies[rcount], - "spf2.0/pra", 10) == 0) -#endif /* _FFR_NH_MFROM */ + if (( + (strncasecmp(mreplies[rcount], + "spf2.0/pra", + 10) == 0) || + (strncasecmp(mreplies[rcount], + "spf2.0/mfrom,pra", + 16) == 0)) && + (strncasecmp(policy, + "spf2.0/", + 7) != 0)) { sm_strlcpy(policy, mreplies[rcount], sizeof policy); } - else if (!nopraspf1 && - (strncasecmp(mreplies[rcount], - "v=spf1", 6) == 0) && - policy[0] == '\0') + else if (strncasecmp(mreplies[rcount], + "v=spf1", 6) == 0) { - sm_strlcpy(policy, - mreplies[rcount], - sizeof policy); + if (nopraspf1) + { + memset(mreplies[rcount], '\0', + sizeof mreplies[rcount]); + } + else if (policy[0] == '\0') + { + sm_strlcpy(policy, + mreplies[rcount], + sizeof policy); + } } break;