Skip to content

Commit 0de811f

Browse files
authored
Merge pull request #334 from thegushi/issue-27-sig-signalg-early-assign
libopendkim: fix sig_signalg left as rsa-sha1 when unsupported algorithm skipped
2 parents 3851af3 + 44af825 commit 0de811f

4 files changed

Lines changed: 21 additions & 5 deletions

File tree

libopendkim/dkim-tables.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ static struct dkim_nametable prv_sigerrors[] = /* signature parsing errors */
194194
{ "conditional signature not satisfied", DKIM_SIGERROR_CONDITIONAL },
195195
{ "too many signature indirections", DKIM_SIGERROR_CONDLOOP },
196196
#endif /* _FFR_CONDITIONAL */
197+
{ "algorithm not supported in this build", DKIM_SIGERROR_UNSUPPORTED_A },
197198
{ NULL, -1 },
198199
};
199200
DKIM_NAMETABLE *dkim_table_sigerrors = prv_sigerrors;

libopendkim/dkim.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2121,8 +2121,9 @@ dkim_siglist_setup(DKIM *dkim)
21212121
}
21222122
else
21232123
{
2124-
signalg = dkim_name_to_code(dkim_table_algorithms,
2125-
(char *) param);
2124+
dkim->dkim_siglist[c]->sig_signalg = signalg =
2125+
dkim_name_to_code(dkim_table_algorithms,
2126+
(char *) param);
21262127

21272128
if (signalg == -1)
21282129
{
@@ -2143,7 +2144,7 @@ dkim_siglist_setup(DKIM *dkim)
21432144
}
21442145
else
21452146
{
2146-
dkim->dkim_siglist[c]->sig_error = DKIM_SIGERROR_INVALID_A;
2147+
dkim->dkim_siglist[c]->sig_error = DKIM_SIGERROR_UNSUPPORTED_A;
21472148
continue;
21482149
}
21492150
break;
@@ -2155,7 +2156,7 @@ dkim_siglist_setup(DKIM *dkim)
21552156
}
21562157
else
21572158
{
2158-
dkim->dkim_siglist[c]->sig_error = DKIM_SIGERROR_INVALID_A;
2159+
dkim->dkim_siglist[c]->sig_error = DKIM_SIGERROR_UNSUPPORTED_A;
21592160
continue;
21602161
}
21612162
break;
@@ -2165,7 +2166,6 @@ dkim_siglist_setup(DKIM *dkim)
21652166
/* NOTREACHED */
21662167
}
21672168

2168-
dkim->dkim_siglist[c]->sig_signalg = signalg;
21692169
dkim->dkim_siglist[c]->sig_hashtype = hashtype;
21702170
}
21712171

libopendkim/dkim.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ typedef int DKIM_SIGERROR;
168168
#define DKIM_SIGERROR_KEYTOOSMALL 46 /* too few key bits */
169169
#define DKIM_SIGERROR_CONDITIONAL 47 /* conditional sig error */
170170
#define DKIM_SIGERROR_CONDLOOP 48 /* conditional sig loop */
171+
#define DKIM_SIGERROR_UNSUPPORTED_A 49 /* a= algorithm not supported in this build */
171172

172173
extern DKIM_NAMETABLE *dkim_table_sigerrors;
173174

opendkim/opendkim.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5473,6 +5473,7 @@ dkimf_arfdkim(msgctx dfc)
54735473
case DKIM_SIGERROR_INVALID_BC:
54745474
case DKIM_SIGERROR_MISSING_A:
54755475
case DKIM_SIGERROR_INVALID_A:
5476+
case DKIM_SIGERROR_UNSUPPORTED_A:
54765477
case DKIM_SIGERROR_MISSING_H:
54775478
case DKIM_SIGERROR_INVALID_L:
54785479
case DKIM_SIGERROR_INVALID_Q:
@@ -10702,6 +10703,19 @@ dkimf_ar_all_sigs(char *hdr, size_t hdrlen, struct dkimf_dstring *tmpstr,
1070210703

1070310704
sigerror = dkim_sig_geterror(sigs[c]);
1070410705

10706+
if (sigerror == DKIM_SIGERROR_UNSUPPORTED_A)
10707+
{
10708+
dkim_alg_t unsup_alg;
10709+
if (dkim_sig_getsignalg(sigs[c],
10710+
&unsup_alg) == DKIM_STAT_OK)
10711+
{
10712+
dkimf_log(conf, LOG_WARNING,
10713+
"signature ignored: algorithm '%s' not supported in this build",
10714+
dkim_code_to_name(dkim_table_algorithms,
10715+
unsup_alg));
10716+
}
10717+
}
10718+
1070510719
if (dkim_sig_getkeysize(sigs[c],
1070610720
&keybits) != DKIM_STAT_OK)
1070710721
keybits = 0;

0 commit comments

Comments
 (0)