xref: /minix3/crypto/external/bsd/heimdal/dist/lib/gssapi/krb5/test_sequence.c (revision ebfedea0ce5bbe81e252ddf32d732e40fb633fae)
1*ebfedea0SLionel Sambuc /*	$NetBSD: test_sequence.c,v 1.1.1.1 2011/04/13 18:14:46 elric Exp $	*/
2*ebfedea0SLionel Sambuc 
3*ebfedea0SLionel Sambuc /*
4*ebfedea0SLionel Sambuc  * Copyright (c) 2003 Kungliga Tekniska Högskolan
5*ebfedea0SLionel Sambuc  * (Royal Institute of Technology, Stockholm, Sweden).
6*ebfedea0SLionel Sambuc  * All rights reserved.
7*ebfedea0SLionel Sambuc  *
8*ebfedea0SLionel Sambuc  * Redistribution and use in source and binary forms, with or without
9*ebfedea0SLionel Sambuc  * modification, are permitted provided that the following conditions
10*ebfedea0SLionel Sambuc  * are met:
11*ebfedea0SLionel Sambuc  *
12*ebfedea0SLionel Sambuc  * 1. Redistributions of source code must retain the above copyright
13*ebfedea0SLionel Sambuc  *    notice, this list of conditions and the following disclaimer.
14*ebfedea0SLionel Sambuc  *
15*ebfedea0SLionel Sambuc  * 2. Redistributions in binary form must reproduce the above copyright
16*ebfedea0SLionel Sambuc  *    notice, this list of conditions and the following disclaimer in the
17*ebfedea0SLionel Sambuc  *    documentation and/or other materials provided with the distribution.
18*ebfedea0SLionel Sambuc  *
19*ebfedea0SLionel Sambuc  * 3. Neither the name of the Institute nor the names of its contributors
20*ebfedea0SLionel Sambuc  *    may be used to endorse or promote products derived from this software
21*ebfedea0SLionel Sambuc  *    without specific prior written permission.
22*ebfedea0SLionel Sambuc  *
23*ebfedea0SLionel Sambuc  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
24*ebfedea0SLionel Sambuc  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25*ebfedea0SLionel Sambuc  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26*ebfedea0SLionel Sambuc  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
27*ebfedea0SLionel Sambuc  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28*ebfedea0SLionel Sambuc  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29*ebfedea0SLionel Sambuc  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30*ebfedea0SLionel Sambuc  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31*ebfedea0SLionel Sambuc  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32*ebfedea0SLionel Sambuc  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33*ebfedea0SLionel Sambuc  * SUCH DAMAGE.
34*ebfedea0SLionel Sambuc  */
35*ebfedea0SLionel Sambuc 
36*ebfedea0SLionel Sambuc #include "gsskrb5_locl.h"
37*ebfedea0SLionel Sambuc 
38*ebfedea0SLionel Sambuc /* correct ordering */
39*ebfedea0SLionel Sambuc OM_uint32 pattern1[] = {
40*ebfedea0SLionel Sambuc     0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13
41*ebfedea0SLionel Sambuc };
42*ebfedea0SLionel Sambuc 
43*ebfedea0SLionel Sambuc /* gap 10 */
44*ebfedea0SLionel Sambuc OM_uint32 pattern2[] = {
45*ebfedea0SLionel Sambuc     0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13
46*ebfedea0SLionel Sambuc };
47*ebfedea0SLionel Sambuc 
48*ebfedea0SLionel Sambuc /* dup 9 */
49*ebfedea0SLionel Sambuc OM_uint32 pattern3[] = {
50*ebfedea0SLionel Sambuc     0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 11, 12, 13
51*ebfedea0SLionel Sambuc };
52*ebfedea0SLionel Sambuc 
53*ebfedea0SLionel Sambuc /* gaps */
54*ebfedea0SLionel Sambuc OM_uint32 pattern4[] = {
55*ebfedea0SLionel Sambuc     0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 13, 14, 15, 16, 18, 100
56*ebfedea0SLionel Sambuc };
57*ebfedea0SLionel Sambuc 
58*ebfedea0SLionel Sambuc /* 11 before 10 */
59*ebfedea0SLionel Sambuc OM_uint32 pattern5[] = {
60*ebfedea0SLionel Sambuc     0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 10, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21
61*ebfedea0SLionel Sambuc };
62*ebfedea0SLionel Sambuc 
63*ebfedea0SLionel Sambuc /* long */
64*ebfedea0SLionel Sambuc OM_uint32 pattern6[] = {
65*ebfedea0SLionel Sambuc     0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
66*ebfedea0SLionel Sambuc     10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
67*ebfedea0SLionel Sambuc     20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
68*ebfedea0SLionel Sambuc     30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
69*ebfedea0SLionel Sambuc     40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
70*ebfedea0SLionel Sambuc     50, 51, 52, 53, 54, 55, 56, 57, 58, 59
71*ebfedea0SLionel Sambuc };
72*ebfedea0SLionel Sambuc 
73*ebfedea0SLionel Sambuc /* dont start at 0 */
74*ebfedea0SLionel Sambuc OM_uint32 pattern7[] = {
75*ebfedea0SLionel Sambuc     11, 12, 13
76*ebfedea0SLionel Sambuc };
77*ebfedea0SLionel Sambuc 
78*ebfedea0SLionel Sambuc /* wrap around */
79*ebfedea0SLionel Sambuc OM_uint32 pattern8[] = {
80*ebfedea0SLionel Sambuc     4294967293U, 4294967294U, 4294967295U, 0, 1, 2
81*ebfedea0SLionel Sambuc };
82*ebfedea0SLionel Sambuc 
83*ebfedea0SLionel Sambuc static int
test_seq(int t,OM_uint32 flags,OM_uint32 start_seq,OM_uint32 * pattern,int pattern_len,OM_uint32 expected_error)84*ebfedea0SLionel Sambuc test_seq(int t, OM_uint32 flags, OM_uint32 start_seq,
85*ebfedea0SLionel Sambuc 	 OM_uint32 *pattern, int pattern_len, OM_uint32 expected_error)
86*ebfedea0SLionel Sambuc {
87*ebfedea0SLionel Sambuc     struct gss_msg_order *o;
88*ebfedea0SLionel Sambuc     OM_uint32 maj_stat, min_stat;
89*ebfedea0SLionel Sambuc     krb5_storage *sp;
90*ebfedea0SLionel Sambuc     int i;
91*ebfedea0SLionel Sambuc 
92*ebfedea0SLionel Sambuc     maj_stat = _gssapi_msg_order_create(&min_stat, &o, flags,
93*ebfedea0SLionel Sambuc 					start_seq, 20, 0);
94*ebfedea0SLionel Sambuc     if (maj_stat)
95*ebfedea0SLionel Sambuc 	errx(1, "create: %d %d", maj_stat, min_stat);
96*ebfedea0SLionel Sambuc 
97*ebfedea0SLionel Sambuc     sp = krb5_storage_emem();
98*ebfedea0SLionel Sambuc     if (sp == NULL)
99*ebfedea0SLionel Sambuc 	errx(1, "krb5_storage_from_emem");
100*ebfedea0SLionel Sambuc 
101*ebfedea0SLionel Sambuc     _gssapi_msg_order_export(sp, o);
102*ebfedea0SLionel Sambuc 
103*ebfedea0SLionel Sambuc     for (i = 0; i < pattern_len; i++) {
104*ebfedea0SLionel Sambuc 	maj_stat = _gssapi_msg_order_check(o, pattern[i]);
105*ebfedea0SLionel Sambuc 	if (maj_stat)
106*ebfedea0SLionel Sambuc 	    break;
107*ebfedea0SLionel Sambuc     }
108*ebfedea0SLionel Sambuc     if (maj_stat != expected_error) {
109*ebfedea0SLionel Sambuc 	printf("test pattern %d failed with %d (should have been %d)\n",
110*ebfedea0SLionel Sambuc 	       t, maj_stat, expected_error);
111*ebfedea0SLionel Sambuc 	krb5_storage_free(sp);
112*ebfedea0SLionel Sambuc 	_gssapi_msg_order_destroy(&o);
113*ebfedea0SLionel Sambuc 	return 1;
114*ebfedea0SLionel Sambuc     }
115*ebfedea0SLionel Sambuc 
116*ebfedea0SLionel Sambuc 
117*ebfedea0SLionel Sambuc     _gssapi_msg_order_destroy(&o);
118*ebfedea0SLionel Sambuc 
119*ebfedea0SLionel Sambuc     /* try again, now with export/imported blob */
120*ebfedea0SLionel Sambuc     krb5_storage_seek(sp, 0, SEEK_SET);
121*ebfedea0SLionel Sambuc 
122*ebfedea0SLionel Sambuc     maj_stat = _gssapi_msg_order_import(&min_stat, sp, &o);
123*ebfedea0SLionel Sambuc     if (maj_stat)
124*ebfedea0SLionel Sambuc 	errx(1, "import: %d %d", maj_stat, min_stat);
125*ebfedea0SLionel Sambuc 
126*ebfedea0SLionel Sambuc     for (i = 0; i < pattern_len; i++) {
127*ebfedea0SLionel Sambuc 	maj_stat = _gssapi_msg_order_check(o, pattern[i]);
128*ebfedea0SLionel Sambuc 	if (maj_stat)
129*ebfedea0SLionel Sambuc 	    break;
130*ebfedea0SLionel Sambuc     }
131*ebfedea0SLionel Sambuc     if (maj_stat != expected_error) {
132*ebfedea0SLionel Sambuc 	printf("import/export test pattern %d failed "
133*ebfedea0SLionel Sambuc 	       "with %d (should have been %d)\n",
134*ebfedea0SLionel Sambuc 	       t, maj_stat, expected_error);
135*ebfedea0SLionel Sambuc 	_gssapi_msg_order_destroy(&o);
136*ebfedea0SLionel Sambuc 	krb5_storage_free(sp);
137*ebfedea0SLionel Sambuc 	return 1;
138*ebfedea0SLionel Sambuc     }
139*ebfedea0SLionel Sambuc 
140*ebfedea0SLionel Sambuc     _gssapi_msg_order_destroy(&o);
141*ebfedea0SLionel Sambuc     krb5_storage_free(sp);
142*ebfedea0SLionel Sambuc 
143*ebfedea0SLionel Sambuc     return 0;
144*ebfedea0SLionel Sambuc }
145*ebfedea0SLionel Sambuc 
146*ebfedea0SLionel Sambuc struct {
147*ebfedea0SLionel Sambuc     OM_uint32 flags;
148*ebfedea0SLionel Sambuc     OM_uint32 *pattern;
149*ebfedea0SLionel Sambuc     int pattern_len;
150*ebfedea0SLionel Sambuc     OM_uint32 error_code;
151*ebfedea0SLionel Sambuc     OM_uint32 start_seq;
152*ebfedea0SLionel Sambuc } pl[] = {
153*ebfedea0SLionel Sambuc     {
154*ebfedea0SLionel Sambuc 	GSS_C_REPLAY_FLAG|GSS_C_SEQUENCE_FLAG,
155*ebfedea0SLionel Sambuc 	pattern1,
156*ebfedea0SLionel Sambuc 	sizeof(pattern1)/sizeof(pattern1[0]),
157*ebfedea0SLionel Sambuc 	0
158*ebfedea0SLionel Sambuc     },
159*ebfedea0SLionel Sambuc     {
160*ebfedea0SLionel Sambuc 	GSS_C_REPLAY_FLAG|GSS_C_SEQUENCE_FLAG,
161*ebfedea0SLionel Sambuc 	pattern2,
162*ebfedea0SLionel Sambuc 	sizeof(pattern2)/sizeof(pattern2[0]),
163*ebfedea0SLionel Sambuc 	GSS_S_GAP_TOKEN
164*ebfedea0SLionel Sambuc     },
165*ebfedea0SLionel Sambuc     {
166*ebfedea0SLionel Sambuc 	GSS_C_REPLAY_FLAG|GSS_C_SEQUENCE_FLAG,
167*ebfedea0SLionel Sambuc 	pattern3,
168*ebfedea0SLionel Sambuc 	sizeof(pattern3)/sizeof(pattern3[0]),
169*ebfedea0SLionel Sambuc 	GSS_S_DUPLICATE_TOKEN
170*ebfedea0SLionel Sambuc     },
171*ebfedea0SLionel Sambuc     {
172*ebfedea0SLionel Sambuc 	GSS_C_REPLAY_FLAG|GSS_C_SEQUENCE_FLAG,
173*ebfedea0SLionel Sambuc 	pattern4,
174*ebfedea0SLionel Sambuc 	sizeof(pattern4)/sizeof(pattern4[0]),
175*ebfedea0SLionel Sambuc 	GSS_S_GAP_TOKEN
176*ebfedea0SLionel Sambuc     },
177*ebfedea0SLionel Sambuc     {
178*ebfedea0SLionel Sambuc 	GSS_C_REPLAY_FLAG|GSS_C_SEQUENCE_FLAG,
179*ebfedea0SLionel Sambuc 	pattern5,
180*ebfedea0SLionel Sambuc 	sizeof(pattern5)/sizeof(pattern5[0]),
181*ebfedea0SLionel Sambuc 	GSS_S_GAP_TOKEN
182*ebfedea0SLionel Sambuc     },
183*ebfedea0SLionel Sambuc     {
184*ebfedea0SLionel Sambuc 	GSS_C_REPLAY_FLAG|GSS_C_SEQUENCE_FLAG,
185*ebfedea0SLionel Sambuc 	pattern6,
186*ebfedea0SLionel Sambuc 	sizeof(pattern6)/sizeof(pattern6[0]),
187*ebfedea0SLionel Sambuc 	GSS_S_COMPLETE
188*ebfedea0SLionel Sambuc     },
189*ebfedea0SLionel Sambuc     {
190*ebfedea0SLionel Sambuc 	GSS_C_REPLAY_FLAG|GSS_C_SEQUENCE_FLAG,
191*ebfedea0SLionel Sambuc 	pattern7,
192*ebfedea0SLionel Sambuc 	sizeof(pattern7)/sizeof(pattern7[0]),
193*ebfedea0SLionel Sambuc 	GSS_S_GAP_TOKEN
194*ebfedea0SLionel Sambuc     },
195*ebfedea0SLionel Sambuc     {
196*ebfedea0SLionel Sambuc 	GSS_C_REPLAY_FLAG|GSS_C_SEQUENCE_FLAG,
197*ebfedea0SLionel Sambuc 	pattern8,
198*ebfedea0SLionel Sambuc 	sizeof(pattern8)/sizeof(pattern8[0]),
199*ebfedea0SLionel Sambuc 	GSS_S_COMPLETE,
200*ebfedea0SLionel Sambuc 	4294967293U
201*ebfedea0SLionel Sambuc     },
202*ebfedea0SLionel Sambuc     {
203*ebfedea0SLionel Sambuc 	0,
204*ebfedea0SLionel Sambuc 	pattern1,
205*ebfedea0SLionel Sambuc 	sizeof(pattern1)/sizeof(pattern1[0]),
206*ebfedea0SLionel Sambuc 	GSS_S_COMPLETE
207*ebfedea0SLionel Sambuc     },
208*ebfedea0SLionel Sambuc     {
209*ebfedea0SLionel Sambuc 	0,
210*ebfedea0SLionel Sambuc 	pattern2,
211*ebfedea0SLionel Sambuc 	sizeof(pattern2)/sizeof(pattern2[0]),
212*ebfedea0SLionel Sambuc 	GSS_S_COMPLETE
213*ebfedea0SLionel Sambuc     },
214*ebfedea0SLionel Sambuc     {
215*ebfedea0SLionel Sambuc 	0,
216*ebfedea0SLionel Sambuc 	pattern3,
217*ebfedea0SLionel Sambuc 	sizeof(pattern3)/sizeof(pattern3[0]),
218*ebfedea0SLionel Sambuc 	GSS_S_COMPLETE
219*ebfedea0SLionel Sambuc     },
220*ebfedea0SLionel Sambuc     {
221*ebfedea0SLionel Sambuc 	0,
222*ebfedea0SLionel Sambuc 	pattern4,
223*ebfedea0SLionel Sambuc 	sizeof(pattern4)/sizeof(pattern4[0]),
224*ebfedea0SLionel Sambuc 	GSS_S_COMPLETE
225*ebfedea0SLionel Sambuc     },
226*ebfedea0SLionel Sambuc     {
227*ebfedea0SLionel Sambuc 	0,
228*ebfedea0SLionel Sambuc 	pattern5,
229*ebfedea0SLionel Sambuc 	sizeof(pattern5)/sizeof(pattern5[0]),
230*ebfedea0SLionel Sambuc 	GSS_S_COMPLETE
231*ebfedea0SLionel Sambuc     },
232*ebfedea0SLionel Sambuc     {
233*ebfedea0SLionel Sambuc 	0,
234*ebfedea0SLionel Sambuc 	pattern6,
235*ebfedea0SLionel Sambuc 	sizeof(pattern6)/sizeof(pattern6[0]),
236*ebfedea0SLionel Sambuc 	GSS_S_COMPLETE
237*ebfedea0SLionel Sambuc     },
238*ebfedea0SLionel Sambuc     {
239*ebfedea0SLionel Sambuc 	0,
240*ebfedea0SLionel Sambuc 	pattern7,
241*ebfedea0SLionel Sambuc 	sizeof(pattern7)/sizeof(pattern7[0]),
242*ebfedea0SLionel Sambuc 	GSS_S_COMPLETE
243*ebfedea0SLionel Sambuc     },
244*ebfedea0SLionel Sambuc     {
245*ebfedea0SLionel Sambuc 	0,
246*ebfedea0SLionel Sambuc 	pattern8,
247*ebfedea0SLionel Sambuc 	sizeof(pattern8)/sizeof(pattern8[0]),
248*ebfedea0SLionel Sambuc 	GSS_S_COMPLETE,
249*ebfedea0SLionel Sambuc 	4294967293U
250*ebfedea0SLionel Sambuc 
251*ebfedea0SLionel Sambuc     },
252*ebfedea0SLionel Sambuc     {
253*ebfedea0SLionel Sambuc 	GSS_C_REPLAY_FLAG,
254*ebfedea0SLionel Sambuc 	pattern1,
255*ebfedea0SLionel Sambuc 	sizeof(pattern1)/sizeof(pattern1[0]),
256*ebfedea0SLionel Sambuc 	GSS_S_COMPLETE
257*ebfedea0SLionel Sambuc     },
258*ebfedea0SLionel Sambuc     {
259*ebfedea0SLionel Sambuc 	GSS_C_REPLAY_FLAG,
260*ebfedea0SLionel Sambuc 	pattern2,
261*ebfedea0SLionel Sambuc 	sizeof(pattern2)/sizeof(pattern2[0]),
262*ebfedea0SLionel Sambuc 	GSS_S_COMPLETE
263*ebfedea0SLionel Sambuc     },
264*ebfedea0SLionel Sambuc     {
265*ebfedea0SLionel Sambuc 	GSS_C_REPLAY_FLAG,
266*ebfedea0SLionel Sambuc 	pattern3,
267*ebfedea0SLionel Sambuc 	sizeof(pattern3)/sizeof(pattern3[0]),
268*ebfedea0SLionel Sambuc 	GSS_S_DUPLICATE_TOKEN
269*ebfedea0SLionel Sambuc     },
270*ebfedea0SLionel Sambuc     {
271*ebfedea0SLionel Sambuc 	GSS_C_REPLAY_FLAG,
272*ebfedea0SLionel Sambuc 	pattern4,
273*ebfedea0SLionel Sambuc 	sizeof(pattern4)/sizeof(pattern4[0]),
274*ebfedea0SLionel Sambuc 	GSS_S_COMPLETE
275*ebfedea0SLionel Sambuc     },
276*ebfedea0SLionel Sambuc     {
277*ebfedea0SLionel Sambuc 	GSS_C_REPLAY_FLAG,
278*ebfedea0SLionel Sambuc 	pattern5,
279*ebfedea0SLionel Sambuc 	sizeof(pattern5)/sizeof(pattern5[0]),
280*ebfedea0SLionel Sambuc 	0
281*ebfedea0SLionel Sambuc     },
282*ebfedea0SLionel Sambuc     {
283*ebfedea0SLionel Sambuc 	GSS_C_REPLAY_FLAG,
284*ebfedea0SLionel Sambuc 	pattern6,
285*ebfedea0SLionel Sambuc 	sizeof(pattern6)/sizeof(pattern6[0]),
286*ebfedea0SLionel Sambuc 	GSS_S_COMPLETE
287*ebfedea0SLionel Sambuc     },
288*ebfedea0SLionel Sambuc     {
289*ebfedea0SLionel Sambuc 	GSS_C_REPLAY_FLAG,
290*ebfedea0SLionel Sambuc 	pattern7,
291*ebfedea0SLionel Sambuc 	sizeof(pattern7)/sizeof(pattern7[0]),
292*ebfedea0SLionel Sambuc 	GSS_S_COMPLETE
293*ebfedea0SLionel Sambuc     },
294*ebfedea0SLionel Sambuc     {
295*ebfedea0SLionel Sambuc 	GSS_C_SEQUENCE_FLAG,
296*ebfedea0SLionel Sambuc 	pattern8,
297*ebfedea0SLionel Sambuc 	sizeof(pattern8)/sizeof(pattern8[0]),
298*ebfedea0SLionel Sambuc 	GSS_S_COMPLETE,
299*ebfedea0SLionel Sambuc 	4294967293U
300*ebfedea0SLionel Sambuc     },
301*ebfedea0SLionel Sambuc     {
302*ebfedea0SLionel Sambuc 	GSS_C_SEQUENCE_FLAG,
303*ebfedea0SLionel Sambuc 	pattern1,
304*ebfedea0SLionel Sambuc 	sizeof(pattern1)/sizeof(pattern1[0]),
305*ebfedea0SLionel Sambuc 	0
306*ebfedea0SLionel Sambuc     },
307*ebfedea0SLionel Sambuc     {
308*ebfedea0SLionel Sambuc 	GSS_C_SEQUENCE_FLAG,
309*ebfedea0SLionel Sambuc 	pattern2,
310*ebfedea0SLionel Sambuc 	sizeof(pattern2)/sizeof(pattern2[0]),
311*ebfedea0SLionel Sambuc 	GSS_S_GAP_TOKEN
312*ebfedea0SLionel Sambuc     },
313*ebfedea0SLionel Sambuc     {
314*ebfedea0SLionel Sambuc 	GSS_C_SEQUENCE_FLAG,
315*ebfedea0SLionel Sambuc 	pattern3,
316*ebfedea0SLionel Sambuc 	sizeof(pattern3)/sizeof(pattern3[0]),
317*ebfedea0SLionel Sambuc 	GSS_S_DUPLICATE_TOKEN
318*ebfedea0SLionel Sambuc     },
319*ebfedea0SLionel Sambuc     {
320*ebfedea0SLionel Sambuc 	GSS_C_SEQUENCE_FLAG,
321*ebfedea0SLionel Sambuc 	pattern4,
322*ebfedea0SLionel Sambuc 	sizeof(pattern4)/sizeof(pattern4[0]),
323*ebfedea0SLionel Sambuc 	GSS_S_GAP_TOKEN
324*ebfedea0SLionel Sambuc     },
325*ebfedea0SLionel Sambuc     {
326*ebfedea0SLionel Sambuc 	GSS_C_SEQUENCE_FLAG,
327*ebfedea0SLionel Sambuc 	pattern5,
328*ebfedea0SLionel Sambuc 	sizeof(pattern5)/sizeof(pattern5[0]),
329*ebfedea0SLionel Sambuc 	GSS_S_GAP_TOKEN
330*ebfedea0SLionel Sambuc     },
331*ebfedea0SLionel Sambuc     {
332*ebfedea0SLionel Sambuc 	GSS_C_SEQUENCE_FLAG,
333*ebfedea0SLionel Sambuc 	pattern6,
334*ebfedea0SLionel Sambuc 	sizeof(pattern6)/sizeof(pattern6[0]),
335*ebfedea0SLionel Sambuc 	GSS_S_COMPLETE
336*ebfedea0SLionel Sambuc     },
337*ebfedea0SLionel Sambuc     {
338*ebfedea0SLionel Sambuc 	GSS_C_SEQUENCE_FLAG,
339*ebfedea0SLionel Sambuc 	pattern7,
340*ebfedea0SLionel Sambuc 	sizeof(pattern7)/sizeof(pattern7[0]),
341*ebfedea0SLionel Sambuc 	GSS_S_GAP_TOKEN
342*ebfedea0SLionel Sambuc     },
343*ebfedea0SLionel Sambuc     {
344*ebfedea0SLionel Sambuc 	GSS_C_REPLAY_FLAG,
345*ebfedea0SLionel Sambuc 	pattern8,
346*ebfedea0SLionel Sambuc 	sizeof(pattern8)/sizeof(pattern8[0]),
347*ebfedea0SLionel Sambuc 	GSS_S_COMPLETE,
348*ebfedea0SLionel Sambuc 	4294967293U
349*ebfedea0SLionel Sambuc     }
350*ebfedea0SLionel Sambuc };
351*ebfedea0SLionel Sambuc 
352*ebfedea0SLionel Sambuc int
main(int argc,char ** argv)353*ebfedea0SLionel Sambuc main(int argc, char **argv)
354*ebfedea0SLionel Sambuc {
355*ebfedea0SLionel Sambuc     int i, failed = 0;
356*ebfedea0SLionel Sambuc 
357*ebfedea0SLionel Sambuc     for (i = 0; i < sizeof(pl)/sizeof(pl[0]); i++) {
358*ebfedea0SLionel Sambuc 	if (test_seq(i,
359*ebfedea0SLionel Sambuc 		     pl[i].flags,
360*ebfedea0SLionel Sambuc 		     pl[i].start_seq,
361*ebfedea0SLionel Sambuc 		     pl[i].pattern,
362*ebfedea0SLionel Sambuc 		     pl[i].pattern_len,
363*ebfedea0SLionel Sambuc 		     pl[i].error_code))
364*ebfedea0SLionel Sambuc 	    failed++;
365*ebfedea0SLionel Sambuc     }
366*ebfedea0SLionel Sambuc     if (failed)
367*ebfedea0SLionel Sambuc 	printf("FAILED %d tests\n", failed);
368*ebfedea0SLionel Sambuc     return failed != 0;
369*ebfedea0SLionel Sambuc }
370