Subversion Repositories

?revision_form?Rev ?revision_input??revision_submit??revision_endform?

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
 		}