summaryrefslogtreecommitdiff
blob: b3b4999aaf5f77410de18f94ef371805d245d922 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#! /bin/sh /usr/share/dpatch/dpatch-run
## 01_strtok_r.dpatch by Russell Coker <russell@coker.com.au>
##
## DP: Use strtok_r() instead of strtok().

@DPATCH@

diff -ru libdkim-1.0.19/src/dkimverify.cpp libdkim-1.0.19-new/src/dkimverify.cpp
--- libdkim-1.0.19/src/dkimverify.cpp	2008-05-12 20:08:06.000000000 +1000
+++ libdkim-1.0.19-new/src/dkimverify.cpp	2009-06-11 18:28:10.000000000 +1000
@@ -855,6 +855,9 @@
 ////////////////////////////////////////////////////////////////////////////////
 int CDKIMVerify::ParseDKIMSignature( const string& sHeader, SignatureInfo &sig )
 {
+	// for strtok_r()
+	char *saveptr;
+
 	// save header for later
 	sig.Header = sHeader;
 
@@ -1032,7 +1035,7 @@
 	{
 		// make sure "dns" is in the list
 		bool HasDNS = false;
-		char *s = strtok(values[9], ":");
+		char *s = strtok_r(values[9], ":", &saveptr);
 		while (s != NULL)
 		{
 			if (strncmp(s, "dns", 3) == 0 && (s[3] == '\0' || s[3] == '/'))
@@ -1040,7 +1043,7 @@
 				HasDNS = true;
 				break;
 			}
-			s = strtok(NULL, ": \t");
+			s = strtok_r(NULL, ": \t", &saveptr);
 		}
 		if (!HasDNS)
 			return DKIM_BAD_SYNTAX;		// todo: maybe create a new error code for unknown query method
@@ -1080,7 +1083,7 @@
 	// parse the signed headers list
 	bool HasFrom = false, HasSubject = false;
 	RemoveSWSP(values[4]);			// header names shouldn't have spaces in them so this should be ok...
-	char *s = strtok(values[4], ":");
+	char *s = strtok_r(values[4], ":", &saveptr);
 	while (s != NULL)
 	{
 		if (_stricmp(s, "From") == 0)
@@ -1090,7 +1093,7 @@
 
 		sig.SignedHeaders.push_back(s);
 
-		s = strtok(NULL, ":");
+		s = strtok_r(NULL, ":", &saveptr);
 	}
 
 	if (!HasFrom)
@@ -1194,6 +1197,9 @@
 ////////////////////////////////////////////////////////////////////////////////
 int SelectorInfo::Parse( char* Buffer )
 {
+	// for strtok_r()
+	char *saveptr;
+
 	static const char *tags[] = {"v","g","h","k","p","s","t","n",NULL};
 	char *values[sizeof(tags)/sizeof(tags[0])] = {NULL};
 
@@ -1235,14 +1241,14 @@
 	else
 	{
 		// MUST include "sha1" or "sha256"
-		char *s = strtok(values[2], ":");
+		char *s = strtok_r(values[2], ":", &saveptr);
 		while (s != NULL)
 		{
 			if (strcmp(s, "sha1") == 0)
 				AllowSHA1 = true;
 			else if (strcmp(s, "sha256") == 0)
 				AllowSHA256 = true;
-			s = strtok(NULL, ":");
+			s = strtok_r(NULL, ":", &saveptr);
 		}
 		if ( !(AllowSHA1 || AllowSHA256) )
 			return DKIM_SELECTOR_INVALID;	// todo: maybe create a new error code for unsupported hash algorithm
@@ -1261,7 +1267,7 @@
 	{
 		// make sure "*" or "email" is in the list
 		bool ServiceTypeMatch = false;
-		char *s = strtok(values[5], ":");
+		char *s = strtok_r(values[5], ":", &saveptr);
 		while (s != NULL)
 		{
 			if (strcmp(s, "*") == 0 || strcmp(s, "email") == 0)
@@ -1269,7 +1275,7 @@
 				ServiceTypeMatch = true;
 				break;
 			}
-			s = strtok(NULL, ":");
+			s = strtok_r(NULL, ":", &saveptr);
 		}
 		if (!ServiceTypeMatch)
 			return DKIM_SELECTOR_INVALID;
@@ -1278,7 +1284,7 @@
 	// flags
 	if (values[6] != NULL)
 	{
-		char *s = strtok(values[6], ":");
+		char *s = strtok_r(values[6], ":", &saveptr);
 		while (s != NULL)
 		{
 			if (strcmp(s, "y") == 0)
@@ -1289,7 +1295,7 @@
 			{
 				SameDomain = true;
 			}
-			s = strtok(NULL, ":");
+			s = strtok_r(NULL, ":", &saveptr);
 		}
 	}