Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
40 | magnus | 1 | #! /bin/sh /usr/share/dpatch/dpatch-run |
2 | ## 01_strtok_r.dpatch by Russell Coker <russell@coker.com.au> |
||
3 | ## |
||
4 | ## DP: Use strtok_r() instead of strtok(). |
||
5 | |||
6 | @DPATCH@ |
||
7 | |||
8 | diff -ru libdkim-1.0.19/src/dkimverify.cpp libdkim-1.0.19-new/src/dkimverify.cpp |
||
9 | --- libdkim-1.0.19/src/dkimverify.cpp 2008-05-12 20:08:06.000000000 +1000 |
||
10 | +++ libdkim-1.0.19-new/src/dkimverify.cpp 2009-06-11 18:28:10.000000000 +1000 |
||
11 | @@ -855,6 +855,9 @@ |
||
12 | //////////////////////////////////////////////////////////////////////////////// |
||
13 | int CDKIMVerify::ParseDKIMSignature( const string& sHeader, SignatureInfo &sig ) |
||
14 | { |
||
15 | + // for strtok_r() |
||
16 | + char *saveptr; |
||
17 | + |
||
18 | // save header for later |
||
19 | sig.Header = sHeader; |
||
20 | |||
21 | @@ -1032,7 +1035,7 @@ |
||
22 | { |
||
23 | // make sure "dns" is in the list |
||
24 | bool HasDNS = false; |
||
25 | - char *s = strtok(values[9], ":"); |
||
26 | + char *s = strtok_r(values[9], ":", &saveptr); |
||
27 | while (s != NULL) |
||
28 | { |
||
29 | if (strncmp(s, "dns", 3) == 0 && (s[3] == '\0' || s[3] == '/')) |
||
30 | @@ -1040,7 +1043,7 @@ |
||
31 | HasDNS = true; |
||
32 | break; |
||
33 | } |
||
34 | - s = strtok(NULL, ": \t"); |
||
35 | + s = strtok_r(NULL, ": \t", &saveptr); |
||
36 | } |
||
37 | if (!HasDNS) |
||
38 | return DKIM_BAD_SYNTAX; // todo: maybe create a new error code for unknown query method |
||
39 | @@ -1080,7 +1083,7 @@ |
||
40 | // parse the signed headers list |
||
41 | bool HasFrom = false, HasSubject = false; |
||
42 | RemoveSWSP(values[4]); // header names shouldn't have spaces in them so this should be ok... |
||
43 | - char *s = strtok(values[4], ":"); |
||
44 | + char *s = strtok_r(values[4], ":", &saveptr); |
||
45 | while (s != NULL) |
||
46 | { |
||
47 | if (_stricmp(s, "From") == 0) |
||
48 | @@ -1090,7 +1093,7 @@ |
||
49 | |||
50 | sig.SignedHeaders.push_back(s); |
||
51 | |||
52 | - s = strtok(NULL, ":"); |
||
53 | + s = strtok_r(NULL, ":", &saveptr); |
||
54 | } |
||
55 | |||
56 | if (!HasFrom) |
||
57 | @@ -1194,6 +1197,9 @@ |
||
58 | //////////////////////////////////////////////////////////////////////////////// |
||
59 | int SelectorInfo::Parse( char* Buffer ) |
||
60 | { |
||
61 | + // for strtok_r() |
||
62 | + char *saveptr; |
||
63 | + |
||
64 | static const char *tags[] = {"v","g","h","k","p","s","t","n",NULL}; |
||
65 | char *values[sizeof(tags)/sizeof(tags[0])] = {NULL}; |
||
66 | |||
67 | @@ -1235,14 +1241,14 @@ |
||
68 | else |
||
69 | { |
||
70 | // MUST include "sha1" or "sha256" |
||
71 | - char *s = strtok(values[2], ":"); |
||
72 | + char *s = strtok_r(values[2], ":", &saveptr); |
||
73 | while (s != NULL) |
||
74 | { |
||
75 | if (strcmp(s, "sha1") == 0) |
||
76 | AllowSHA1 = true; |
||
77 | else if (strcmp(s, "sha256") == 0) |
||
78 | AllowSHA256 = true; |
||
79 | - s = strtok(NULL, ":"); |
||
80 | + s = strtok_r(NULL, ":", &saveptr); |
||
81 | } |
||
82 | if ( !(AllowSHA1 || AllowSHA256) ) |
||
83 | return DKIM_SELECTOR_INVALID; // todo: maybe create a new error code for unsupported hash algorithm |
||
84 | @@ -1261,7 +1267,7 @@ |
||
85 | { |
||
86 | // make sure "*" or "email" is in the list |
||
87 | bool ServiceTypeMatch = false; |
||
88 | - char *s = strtok(values[5], ":"); |
||
89 | + char *s = strtok_r(values[5], ":", &saveptr); |
||
90 | while (s != NULL) |
||
91 | { |
||
92 | if (strcmp(s, "*") == 0 || strcmp(s, "email") == 0) |
||
93 | @@ -1269,7 +1275,7 @@ |
||
94 | ServiceTypeMatch = true; |
||
95 | break; |
||
96 | } |
||
97 | - s = strtok(NULL, ":"); |
||
98 | + s = strtok_r(NULL, ":", &saveptr); |
||
99 | } |
||
100 | if (!ServiceTypeMatch) |
||
101 | return DKIM_SELECTOR_INVALID; |
||
102 | @@ -1278,7 +1284,7 @@ |
||
103 | // flags |
||
104 | if (values[6] != NULL) |
||
105 | { |
||
106 | - char *s = strtok(values[6], ":"); |
||
107 | + char *s = strtok_r(values[6], ":", &saveptr); |
||
108 | while (s != NULL) |
||
109 | { |
||
110 | if (strcmp(s, "y") == 0) |
||
111 | @@ -1289,7 +1295,7 @@ |
||
112 | { |
||
113 | SameDomain = true; |
||
114 | } |
||
115 | - s = strtok(NULL, ":"); |
||
116 | + s = strtok_r(NULL, ":", &saveptr); |
||
117 | } |
||
118 | } |
||
119 | |||
120 | @@ -1388,6 +1394,9 @@ |
||
121 | //////////////////////////////////////////////////////////////////////////////// |
||
122 | int CDKIMVerify::GetSSP( const string &sDomain, int &iSSP, bool &bTesting ) |
||
123 | { |
||
124 | + // for strtok_r() |
||
125 | + char *saveptr; |
||
126 | + |
||
127 | string sFQDN = "_ssp._domainkey."; |
||
128 | sFQDN += sDomain; |
||
129 | |||
130 | @@ -1456,7 +1465,7 @@ |
||
131 | // flags |
||
132 | if (values[1] != NULL) |
||
133 | { |
||
134 | - char *s = strtok(values[1], "|"); |
||
135 | + char *s = strtok_r(values[1], "|", &saveptr); |
||
136 | while (s != NULL) |
||
137 | { |
||
138 | if (strcmp(s, "y") == 0) |
||
139 | @@ -1474,7 +1483,7 @@ |
||
140 | return DKIM_SUCCESS; |
||
141 | } |
||
142 | } |
||
143 | - s = strtok(NULL, "|"); |
||
144 | + s = strtok_r(NULL, "|", &saveptr); |
||
145 | } |
||
146 | } |
||
147 | } |