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