summaryrefslogtreecommitdiffstats
path: root/net/ipv6/icmp.c
blob: 4f433847d95f51724c0a943d50a5a67edb80b34c (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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
/*
 *	Internet Control Message Protocol (ICMPv6)
 *	Linux INET6 implementation
 *
 *	Authors:
 *	Pedro Roque		<roque@di.fc.ul.pt>
 *
 *	Based on net/ipv4/icmp.c
 *
 *	RFC 1885
 *
 *	This program is free software; you can redistribute it and/or
 *      modify it under the terms of the GNU General Public License
 *      as published by the Free Software Foundation; either version
 *      2 of the License, or (at your option) any later version.
 */

/*
 *	Changes:
 *
 *	Andi Kleen		:	exception handling
 *	Andi Kleen			add rate limits. never reply to a icmp.
 *					add more length checks and other fixes.
 *	yoshfuji		:	ensure to sent parameter problem for
 *					fragments.
 *	YOSHIFUJI Hideaki @USAGI:	added sysctl for icmp rate limit.
 *	Randy Dunlap and
 *	YOSHIFUJI Hideaki @USAGI:	Per-interface statistics support
 *	Kazunori MIYAZAWA @USAGI:       change output process to use ip6_append_data
 */

#include <linux/module.h>
#include <linux/errno.h>
#include <linux/types.h>
#include <linux/socket.h>
#include <linux/in.h>
#include <linux/kernel.h>
#include <linux/sockios.h>
#include <linux/net.h>
#include <linux/skbuff.h>
#include <linux/init.h>
#include <linux/netfilter.h>

#ifdef CONFIG_SYSCTL
#include <linux/sysctl.h>
#endif

#include <linux/inet.h>
#include <linux/netdevice.h>
#include <linux/icmpv6.h>

#include <net/ip.h>
#include <net/sock.h>

#include <net/ipv6.h>
#include <net/ip6_checksum.h>
#include <net/protocol.h>
#include <net/raw.h>
#include <net/rawv6.h>
#include <net/transp_v6.h>
#include <net/ip6_route.h>
#include <net/addrconf.h>
#include <net/icmp.h>
#include <net/xfrm.h>
#include <net/inet_common.h>

#include <asm/uaccess.h>
#include <asm/system.h>

DEFINE_SNMP_STAT(struct icmpv6_mib, icmpv6_statistics) __read_mostly;
EXPORT_SYMBOL(icmpv6_statistics);
DEFINE_SNMP_STAT(struct icmpv6msg_mib, icmpv6msg_statistics) __read_mostly;
EXPORT_SYMBOL(icmpv6msg_statistics);

/*
 *	The ICMP socket(s). This is the most convenient way to flow control
 *	our ICMP output as well as maintain a clean interface throughout
 *	all layers. All Socketless IP sends will soon be gone.
 *
 *	On SMP we have one ICMP socket per-cpu.
 */
static inline struct sock *icmpv6_sk(struct net *net)
{
	return net->ipv6.icmp_sk[smp_processor_id()];
}

static int icmpv6_rcv(struct sk_buff *skb);

static struct inet6_protocol icmpv6_protocol = {
	.handler	=	icmpv6_rcv,
	.flags		=	INET6_PROTO_NOPOLICY|INET6_PROTO_FINAL,
};

static __inline__ struct sock *icmpv6_xmit_lock(struct net *net)
{
	struct sock *sk;

	local_bh_disable();

	sk = icmpv6_sk(net);
	if (unlikely(!spin_trylock(&sk->sk_lock.slock))) {
		/* This can happen if the output path (f.e. SIT or
		 * ip6ip6 tunnel) signals dst_link_failure() for an
		 * outgoing ICMP6 packet.
		 */
		local_bh_enable();
		return NULL;
	}
	return sk;
}

static __inline__ void icmpv6_xmit_unlock(struct sock *sk)
{
	spin_unlock_bh(&sk->sk_lock.slock);
}

/*
 * Slightly more convenient version of icmpv6_send.
 */
void icmpv6_param_prob(struct sk_buff *skb, int code, int pos)
{
	icmpv6_send(skb, ICMPV6_PARAMPROB, code, pos, skb->dev);
	kfree_skb(skb);
}

/*
 * Figure out, may we reply to this packet with icmp error.
 *
 * We do not reply, if:
 *	- it was icmp error message.
 *	- it is truncated, so that it is known, that protocol is ICMPV6
 *	  (i.e. in the middle of some exthdr)
 *
 *	--ANK (980726)
 */

static int is_ineligible(struct sk_buff *skb)
{
	int ptr = (u8 *)(ipv6_hdr(skb) + 1) - skb->data;
	int len = skb->len - ptr;
	__u8 nexthdr = ipv6_hdr(skb)->nexthdr;

	if (len < 0)
		return 1;

	ptr = ipv6_skip_exthdr(skb, ptr, &nexthdr);
	if (ptr < 0)
		return 0;
	if (nexthdr == IPPROTO_ICMPV6) {
		u8 _type, *tp;
		tp = skb_header_pointer(skb,
			ptr+offsetof(struct icmp6hdr, icmp6_type),
			sizeof(_type), &_type);
		if (tp == NULL ||
		    !(*tp & ICMPV6_INFOMSG_MASK))
			return 1;
	}
	return 0;
}

/*
 * Check the ICMP output rate limit
 */
static inline int icmpv6_xrlim_allow(struct sock *sk, int type,
				     struct flowi *fl)
{
	struct dst_entry *dst;
	struct net *net = sock_net(sk);
	int res = 0;

	/* Informational messages are not limited. */
	if (type & ICMPV6_INFOMSG_MASK)
		return 1;

	/* Do not limit pmtu discovery, it would break it. */
	if (type == ICMPV6_PKT_TOOBIG)
		return 1;

	/*
	 * Look up the output route.
	 * XXX: perhaps the expire for routing entries cloned by
	 * this lookup should be more aggressive (not longer than timeout).
	 */
	dst = ip6_route_output(net, sk, fl);
	if (dst->error) {
		IP6_INC_STATS(net, ip6_dst_idev(dst),
			      IPSTATS_MIB_OUTNOROUTES);
	} else if (dst->dev && (dst->dev->flags&IFF_LOOPBACK)) {
		res = 1;
	} else {
		struct rt6_info *rt = (struct rt6_info *)dst;
		int tmo = net->ipv6.sysctl.icmpv6_time;

		/* Give more bandwidth to wider prefixes. */
		if (rt->rt6i_dst.plen < 128)
			tmo >>= ((128 - rt->rt6i_dst.plen)>>5);

		res = xrlim_allow(dst, tmo);
	}
	dst_release(dst);
	return res;
}

/*
 *	an inline helper for the "simple" if statement below
 *	checks if parameter problem report is caused by an
 *	unrecognized IPv6 option that has the Option Type
 *	highest-order two bits set to 10
 */

static __inline__ int opt_unrec(struct sk_buff *skb, __u32 offset)
{
	u8 _optval, *op;

	offset += skb_network_offset(skb);
	op = skb_header_pointer(skb, offset, sizeof(_optval), &_optval);
	if (op == NULL)
		return 1;
	return (*op & 0xC0) == 0x80;
}

static int icmpv6_push_pending_frames(struct sock *sk, struct flowi *fl, struct icmp6hdr *thdr, int len)
{
	struct sk_buff *skb;
	struct icmp6hdr *icmp6h;
	int err = 0;

	if ((skb = skb_peek(&sk->sk_write_queue)) == NULL)
		goto out;

	icmp6h = icmp6_hdr(skb);
	memcpy(icmp6h, thdr, sizeof(struct icmp6hdr));
	icmp6h->icmp6_cksum = 0;

	if (skb_queue_len(&sk->sk_write_queue) == 1) {
		skb->csum = csum_partial(icmp6h,
					sizeof(struct icmp6hdr), skb->csum);
		icmp6h->icmp6_cksum = csum_ipv6_magic(&fl->fl6_src,
						      &fl->fl6_dst,
						      len, fl->proto,
						      skb->csum);
	} else {
		__wsum tmp_csum = 0;

		skb_queue_walk(&sk->sk_write_queue, skb) {
			tmp_csum = csum_add(tmp_csum, skb->csum);
		}

		tmp_csum = csum_partial(icmp6h,
					sizeof(struct icmp6hdr), tmp_csum);
		icmp6h->icmp6_cksum = csum_ipv6_magic(&fl->fl6_src,
						      &fl->fl6_dst,
						      len, fl->proto,
						      tmp_csum);
	}
	ip6_push_pending_frames(sk);
out:
	return err;
}

struct icmpv6_msg {
	struct sk_buff	*skb;
	int		offset;
	uint8_t		type;
};

static int icmpv6_getfrag(void *from, char *to, int offset, int len, int odd, struct sk_buff *skb)
{
	struct icmpv6_msg *msg = (struct icmpv6_msg *) from;
	struct sk_buff *org_skb = msg->skb;
	__wsum csum = 0;

	csum = skb_copy_and_csum_bits(org_skb, msg->offset + offset,
				      to, len, csum);
	skb->csum = csum_block_add(skb->csum, csum, odd);
	if (!(msg->type & ICMPV6_INFOMSG_MASK))
		nf_ct_attach(skb, org_skb);
	return 0;
}

#if defined(CONFIG_IPV6_MIP6) || defined(CONFIG_IPV6_MIP6_MODULE)
static void mip6_addr_swap(struct sk_buff *skb)
{
	struct ipv6hdr *iph = ipv6_hdr(skb);
	struct inet6_skb_parm *opt = IP6CB(skb);
	struct ipv6_destopt_hao *hao;
	struct in6_addr tmp;
	int off;

	if (opt->dsthao) {
		off = ipv6_find_tlv(skb, opt->dsthao, IPV6_TLV_HAO);
		if (likely(off >= 0)) {
			hao = (struct ipv6_destopt_hao *)
					(skb_network_header(skb) + off);
			ipv6_addr_copy(&tmp, &iph->saddr);
			ipv6_addr_copy(&iph->saddr, &hao->addr);
			ipv6_addr_copy(&hao->addr, &tmp);
		}
	}
}
#else
static inline void mip6_addr_swap(struct sk_buff *skb) {}
#endif

/*
 *	Send an ICMP message in response to a packet in error
 */
void icmpv6_send(struct sk_buff *skb, int type, int code, __u32 info,
		 struct net_device *dev)
{
	struct net *net = dev_net(skb->dev);
	struct inet6_dev *idev = NULL;
	struct ipv6hdr *hdr = ipv6_hdr(skb);
	struct sock *sk;
	struct ipv6_pinfo *np;
	struct in6_addr *saddr = NULL;
	struct dst_entry *dst;
	struct dst_entry *dst2;
	struct icmp6hdr tmp_hdr;
	struct flowi fl;
	struct flowi fl2;
	struct icmpv6_msg msg;
	int iif = 0;
	int addr_type = 0;
	int len;
	int hlimit, tclass;
	int err = 0;

	if ((u8 *)hdr < skb->head ||
	    (skb->network_header + sizeof(*hdr)) > skb->tail)
		return;

	/*
	 *	Make sure we respect the rules
	 *	i.e. RFC 1885 2.4(e)
	 *	Rule (e.1) is enforced by not using icmpv6_send
	 *	in any code that processes icmp errors.
	 */
	addr_type = ipv6_addr_type(&hdr->daddr);

	if (ipv6_chk_addr(net, &hdr->daddr, skb->dev, 0))
		saddr = &hdr->daddr;

	/*
	 *	Dest addr check
	 */

	if ((addr_type & IPV6_ADDR_MULTICAST || skb->pkt_type != PACKET_HOST)) {
		if (type != ICMPV6_PKT_TOOBIG &&
		    !(type == ICMPV6_PARAMPROB &&
		      code == ICMPV6_UNK_OPTION &&
		      (opt_unrec(skb, info))))
			return;

		saddr = NULL;
	}

	addr_type = ipv6_addr_type(&hdr->saddr);

	/*
	 *	Source addr check
	 */

	if (addr_type & IPV6_ADDR_LINKLOCAL)
		iif = skb->dev->ifindex;

	/*
	 *	Must not send error if the source does not uniquely
	 *	identify a single node (RFC2463 Section 2.4).
	 *	We check unspecified / multicast addresses here,
	 *	and anycast addresses will be checked later.
	 */
	if ((addr_type == IPV6_ADDR_ANY) || (addr_type & IPV6_ADDR_MULTICAST)) {
		LIMIT_NETDEBUG(KERN_DEBUG "icmpv6_send: addr_any/mcast source\n");
		return;
	}

	/*
	 *	Never answer to a ICMP packet.
	 */
	if (is_ineligible(skb)) {
		LIMIT_NETDEBUG(KERN_DEBUG "icmpv6_send: no reply to icmp error\n");
		return;
	}

	mip6_addr_swap(skb);

	memset(&fl, 0, sizeof(fl));
	fl.proto = IPPROTO_ICMPV6;
	ipv6_addr_copy(&fl.fl6_dst, &hdr->saddr);
	if (saddr)
		ipv6_addr_copy(&fl.fl6_src, saddr);
	fl.oif = iif;
	fl.fl_icmp_type = type;
	fl.fl_icmp_code = code;
	security_skb_classify_flow(skb, &fl);

	sk = icmpv6_xmit_lock(net);
	if (sk == NULL)
		return;
	np = inet6_sk(sk);

	if (!icmpv6_xrlim_allow(sk, type, &fl))
		goto out;

	tmp_hdr.icmp6_type = type;
	tmp_hdr.icmp6_code = code;
	tmp_hdr.icmp6_cksum = 0;
	tmp_hdr.icmp6_pointer = htonl(info);

	if (!fl.oif && ipv6_addr_is_multicast(&fl.fl6_dst))
		fl.oif = np->mcast_oif;

	err = ip6_dst_lookup(sk, &dst, &fl);
	if (err)
		goto out;

	/*
	 * We won't send icmp if the destination is known
	 * anycast.
	 */
	if (((struct rt6_info *)dst)->rt6i_flags & RTF_ANYCAST) {
		LIMIT_NETDEBUG(KERN_DEBUG "icmpv6_send: acast source\n");
		goto out_dst_release;
	}

	/* No need to clone since we're just using its address. */
	dst2 = dst;

	err = xfrm_lookup(net, &dst, &fl, sk, 0);
	switch (err) {
	case 0:
		if (dst != dst2)
			goto route_done;
		break;
	case -EPERM:
		dst = NULL;
		break;
	default:
		goto out;
	}

	if (xfrm_decode_session_reverse(skb, &fl2, AF_INET6))
		goto relookup_failed;

	if (ip6_dst_lookup(sk, &dst2, &fl))
		goto relookup_failed;

	err = xfrm_lookup(net, &dst2, &fl, sk, XFRM_LOOKUP_ICMP);
	switch (err) {
	case 0:
		dst_release(dst);
		dst = dst2;
		break;
	case -EPERM:
		goto out_dst_release;
	default:
relookup_failed:
		if (!dst)
			goto out;
		break;
	}

route_done:
	if (ipv6_addr_is_multicast(&fl.fl6_dst))
		hlimit = np->mcast_hops;
	else
		hlimit = np->hop_limit;
	if (hlimit < 0)
		hlimit = ip6_dst_hoplimit(dst);

	tclass = np->tclass;
	if (tclass < 0)
		tclass = 0;

	msg.skb = skb;
	msg.offset = skb_network_offset(skb);
	msg.type = type;

	len = skb->len - msg.offset;
	len = min_t(unsigned int, len, IPV6_MIN_MTU - sizeof(struct ipv6hdr) -sizeof(struct icmp6hdr));
	if (len < 0) {
		LIMIT_NETDEBUG(KERN_DEBUG "icmp: len problem\n");
		goto out_dst_release;
	}

	idev = in6_dev_get(skb->dev);

	err = ip6_append_data(sk, icmpv6_getfrag, &msg,
			      len + sizeof(struct icmp6hdr),
			      sizeof(struct icmp6hdr),
			      hlimit, tclass, NULL, &fl, (struct rt6_info*)dst,
			      MSG_DONTWAIT);
	if (err) {
		ip6_flush_pending_frames(sk);
		goto out_put;
	}
	err = icmpv6_push_pending_frames(sk, &fl, &tmp_hdr, len + sizeof(struct icmp6hdr));

out_put:
	if (likely(idev != NULL))
		in6_dev_put(idev);
out_dst_release:
	dst_release(dst);
out:
	icmpv6_xmit_unlock(sk);
}

EXPORT_SYMBOL(icmpv6_send);

static void icmpv6_echo_reply(struct sk_buff *skb)
{
	struct net *net = dev_net(skb->dev);
	struct sock *sk;
	struct inet6_dev *idev;
	struct ipv6_pinfo *np;
	struct in6_addr *saddr = NULL;
	struct icmp6hdr *icmph = icmp6_hdr(skb);
	struct icmp6hdr tmp_hdr;
	struct flowi fl;
	struct icmpv6_msg msg;
	struct dst_entry *dst;
	int err = 0;
	int hlimit;
	int tclass;

	saddr = &ipv6_hdr(skb)->daddr;

	if (!ipv6_unicast_destination(skb))
		saddr = NULL;

	memcpy(&tmp_hdr, icmph, sizeof(tmp_hdr));
	tmp_hdr.icmp6_type = ICMPV6_ECHO_REPLY;

	memset(&fl, 0, sizeof(fl));
	fl.proto = IPPROTO_ICMPV6;
	ipv6_addr_copy(&fl.fl6_dst, &ipv6_hdr(skb)->saddr);
	if (saddr)
		ipv6_addr_copy(&fl.fl6_src, saddr);
	fl.oif = skb->dev->ifindex;
	fl.fl_icmp_type = ICMPV6_ECHO_REPLY;
	security_skb_classify_flow(skb, &fl);

	sk = icmpv6_xmit_lock(net);
	if (sk == NULL)
		return;
	np = inet6_sk(sk);

	if (!fl.oif && ipv6_addr_is_multicast(&fl.fl6_dst))
		fl.oif = np->mcast_oif;

	err = ip6_dst_lookup(sk, &dst, &fl);
	if (err)
		goto out;
	if ((err = xfrm_lookup(net, &dst, &fl, sk, 0)) < 0)
		goto out;

	if (ipv6_addr_is_multicast(&fl.fl6_dst))
		hlimit = np->mcast_hops;
	else
		hlimit = np->hop_limit;
	if (hlimit < 0)
		hlimit = ip6_dst_hoplimit(dst);

	tclass = np->tclass;
	if (tclass < 0)
		tclass = 0;

	idev = in6_dev_get(skb->dev);

	msg.skb = skb;
	msg.offset = 0;
	msg.type = ICMPV6_ECHO_REPLY;

	err = ip6_append_data(sk, icmpv6_getfrag, &msg, skb->len + sizeof(struct icmp6hdr),
				sizeof(struct icmp6hdr), hlimit, tclass, NULL, &fl,
				(struct rt6_info*)dst, MSG_DONTWAIT);

	if (err) {
		ip6_flush_pending_frames(sk);
		goto out_put;
	}
	err = icmpv6_push_pending_frames(sk, &fl, &tmp_hdr, skb->len + sizeof(struct icmp6hdr));

out_put:
	if (likely(idev != NULL))
		in6_dev_put(idev);
	dst_release(dst);
out:
	icmpv6_xmit_unlock(sk);
}

static void icmpv6_notify(struct sk_buff *skb, int type, int code, __be32 info)
{
	struct inet6_protocol *ipprot;
	int inner_offset;
	int hash;
	u8 nexthdr;

	if (!pskb_may_pull(skb, sizeof(struct ipv6hdr)))
		return;

	nexthdr = ((struct ipv6hdr *)skb->data)->nexthdr;
	if (ipv6_ext_hdr(nexthdr)) {
		/* now skip over extension headers */
		inner_offset = ipv6_skip_exthdr(skb, sizeof(struct ipv6hdr), &nexthdr);
		if (inner_offset<0)
			return;
	} else {
		inner_offset = sizeof(struct ipv6hdr);
	}

	/* Checkin header including 8 bytes of inner protocol header. */
	if (!pskb_may_pull(skb, inner_offset+8))
		return;

	/* BUGGG_FUTURE: we should try to parse exthdrs in this packet.
	   Without this we will not able f.e. to make source routed
	   pmtu discovery.
	   Corresponding argument (opt) to notifiers is already added.
	   --ANK (980726)
	 */

	hash = nexthdr & (MAX_INET_PROTOS - 1);

	rcu_read_lock();
	ipprot = rcu_dereference(inet6_protos[hash]);
	if (ipprot && ipprot->err_handler)
		ipprot->err_handler(skb, NULL, type, code, inner_offset, info);
	rcu_read_unlock();

	raw6_icmp_error(skb, nexthdr, type, code, inner_offset, info);
}

/*
 *	Handle icmp messages
 */

static int icmpv6_rcv(struct sk_buff *skb)
{
	struct net_device *dev = skb->dev;
	struct inet6_dev *idev = __in6_dev_get(dev);
	struct in6_addr *saddr, *daddr;
	struct ipv6hdr *orig_hdr;
	struct icmp6hdr *hdr;
	int type;

	if (!xfrm6_policy_check(NULL, XFRM_POLICY_IN, skb)) {
		struct sec_path *sp = skb_sec_path(skb);
		int nh;

		if (!(sp && sp->xvec[sp->len - 1]->props.flags &
				 XFRM_STATE_ICMP))
			goto drop_no_count;

		if (!pskb_may_pull(skb, sizeof(*hdr) + sizeof(*orig_hdr)))
			goto drop_no_count;

		nh = skb_network_offset(skb);
		skb_set_network_header(skb, sizeof(*hdr));

		if (!xfrm6_policy_check_reverse(NULL, XFRM_POLICY_IN, skb))
			goto drop_no_count;

		skb_set_network_header(skb, nh);
	}

	ICMP6_INC_STATS_BH(dev_net(dev), idev, ICMP6_MIB_INMSGS);

	saddr = &ipv6_hdr(skb)->saddr;
	daddr = &ipv6_hdr(skb)->daddr;

	/* Perform checksum. */
	switch (skb->ip_summed) {
	case CHECKSUM_COMPLETE:
		if (!csum_ipv6_magic(saddr, daddr, skb->len, IPPROTO_ICMPV6,
				     skb->csum))
			break;
		/* fall through */
	case CHECKSUM_NONE:
		skb->csum = ~csum_unfold(csum_ipv6_magic(saddr, daddr, skb->len,
					     IPPROTO_ICMPV6, 0));
		if (__skb_checksum_complete(skb)) {
			LIMIT_NETDEBUG(KERN_DEBUG "ICMPv6 checksum failed [%pI6 > %pI6]\n",
				       saddr, daddr);
			goto discard_it;
		}
	}

	if (!pskb_pull(skb, sizeof(*hdr)))
		goto discard_it;

	hdr = icmp6_hdr(skb);

	type = hdr->icmp6_type;

	ICMP6MSGIN_INC_STATS_BH(dev_net(dev), idev, type);

	switch (type) {
	case ICMPV6_ECHO_REQUEST:
		icmpv6_echo_reply(skb);
		break;

	case ICMPV6_ECHO_REPLY:
		/* we couldn't care less */
		break;

	case ICMPV6_PKT_TOOBIG:
		/* BUGGG_FUTURE: if packet contains rthdr, we cannot update
		   standard destination cache. Seems, only "advanced"
		   destination cache will allow to solve this problem
		   --ANK (980726)
		 */
		if (!pskb_may_pull(skb, sizeof(struct ipv6hdr)))
			goto discard_it;
		hdr = icmp6_hdr(skb);
		orig_hdr = (struct ipv6hdr *) (hdr + 1);
		rt6_pmtu_discovery(&orig_hdr->daddr, &orig_hdr->saddr, dev,
				   ntohl(hdr->icmp6_mtu));

		/*
		 *	Drop through to notify
		 */

	case ICMPV6_DEST_UNREACH:
	case ICMPV6_TIME_EXCEED:
	case ICMPV6_PARAMPROB:
		icmpv6_notify(skb, type, hdr->icmp6_code, hdr->icmp6_mtu);
		break;

	case NDISC_ROUTER_SOLICITATION:
	case NDISC_ROUTER_ADVERTISEMENT:
	case NDISC_NEIGHBOUR_SOLICITATION:
	case NDISC_NEIGHBOUR_ADVERTISEMENT:
	case NDISC_REDIRECT:
		ndisc_rcv(skb);
		break;

	case ICMPV6_MGM_QUERY:
		igmp6_event_query(skb);
		break;

	case ICMPV6_MGM_REPORT:
		igmp6_event_report(skb);
		break;

	case ICMPV6_MGM_REDUCTION:
	case ICMPV6_NI_QUERY:
	case ICMPV6_NI_REPLY:
	case ICMPV6_MLD2_REPORT:
	case ICMPV6_DHAAD_REQUEST:
	case ICMPV6_DHAAD_REPLY:
	case ICMPV6_MOBILE_PREFIX_SOL:
	case ICMPV6_MOBILE_PREFIX_ADV:
		break;

	default:
		LIMIT_NETDEBUG(KERN_DEBUG "icmpv6: msg of unknown type\n");

		/* informational */
		if (type & ICMPV6_INFOMSG_MASK)
			break;

		/*
		 * error of unknown type.
		 * must pass to upper level
		 */

		icmpv6_notify(skb, type, hdr->icmp6_code, hdr->icmp6_mtu);
	}

	kfree_skb(skb);
	return 0;

discard_it:
	ICMP6_INC_STATS_BH(dev_net(dev), idev, ICMP6_MIB_INERRORS);
drop_no_count:
	kfree_skb(skb);
	return 0;
}

void icmpv6_flow_init(struct sock *sk, struct flowi *fl,
		      u8 type,
		      const struct in6_addr *saddr,
		      const struct in6_addr *daddr,
		      int oif)
{
	memset(fl, 0, sizeof(*fl));
	ipv6_addr_copy(&fl->fl6_src, saddr);
	ipv6_addr_copy(&fl->fl6_dst, daddr);
	fl->proto	 	= IPPROTO_ICMPV6;
	fl->fl_icmp_type	= type;
	fl->fl_icmp_code	= 0;
	fl->oif			= oif;
	security_sk_classify_flow(sk, fl);
}

/*
 * Special lock-class for __icmpv6_sk:
 */
static struct lock_class_key icmpv6_socket_sk_dst_lock_key;

static int __net_init icmpv6_sk_init(struct net *net)
{
	struct sock *sk;
	int err, i, j;

	net->ipv6.icmp_sk =
		kzalloc(nr_cpu_ids * sizeof(struct sock *), GFP_KERNEL);
	if (net->ipv6.icmp_sk == NULL)
		return -ENOMEM;

	for_each_possible_cpu(i) {
		err = inet_ctl_sock_create(&sk, PF_INET6,
					   SOCK_RAW, IPPROTO_ICMPV6, net);
		if (err < 0) {
			printk(KERN_ERR
			       "Failed to initialize the ICMP6 control socket "
			       "(err %d).\n",
			       err);
			goto fail;
		}

		net->ipv6.icmp_sk[i] = sk;

		/*
		 * Split off their lock-class, because sk->sk_dst_lock
		 * gets used from softirqs, which is safe for
		 * __icmpv6_sk (because those never get directly used
		 * via userspace syscalls), but unsafe for normal sockets.
		 */
		lockdep_set_class(&sk->sk_dst_lock,
				  &icmpv6_socket_sk_dst_lock_key);

		/* Enough space for 2 64K ICMP packets, including
		 * sk_buff struct overhead.
		 */
		sk->sk_sndbuf =
			(2 * ((64 * 1024) + sizeof(struct sk_buff)));
	}
	return 0;

 fail:
	for (j = 0; j < i; j++)
		inet_ctl_sock_destroy(net->ipv6.icmp_sk[j]);
	kfree(net->ipv6.icmp_sk);
	return err;
}

static void __net_exit icmpv6_sk_exit(struct net *net)
{
	int i;

	for_each_possible_cpu(i) {
		inet_ctl_sock_destroy(net->ipv6.icmp_sk[i]);
	}
	kfree(net->ipv6.icmp_sk);
}

static struct pernet_operations icmpv6_sk_ops = {
       .init = icmpv6_sk_init,
       .exit = icmpv6_sk_exit,
};

int __init icmpv6_init(void)
{
	int err;

	err = register_pernet_subsys(&icmpv6_sk_ops);
	if (err < 0)
		return err;

	err = -EAGAIN;
	if (inet6_add_protocol(&icmpv6_protocol, IPPROTO_ICMPV6) < 0)
		goto fail;
	return 0;

fail:
	printk(KERN_ERR "Failed to register ICMP6 protocol\n");
	unregister_pernet_subsys(&icmpv6_sk_ops);
	return err;
}

void icmpv6_cleanup(void)
{
	unregister_pernet_subsys(&icmpv6_sk_ops);
	inet6_del_protocol(&icmpv6_protocol, IPPROTO_ICMPV6);
}


static const struct icmp6_err {
	int err;
	int fatal;
} tab_unreach[] = {
	{	/* NOROUTE */
		.err	= ENETUNREACH,
		.fatal	= 0,
	},
	{	/* ADM_PROHIBITED */
		.err	= EACCES,
		.fatal	= 1,
	},
	{	/* Was NOT_NEIGHBOUR, now reserved */
		.err	= EHOSTUNREACH,
		.fatal	= 0,
	},
	{	/* ADDR_UNREACH	*/
		.err	= EHOSTUNREACH,
		.fatal	= 0,
	},
	{	/* PORT_UNREACH	*/
		.err	= ECONNREFUSED,
		.fatal	= 1,
	},
};

int icmpv6_err_convert(int type, int code, int *err)
{
	int fatal = 0;

	*err = EPROTO;

	switch (type) {
	case ICMPV6_DEST_UNREACH:
		fatal = 1;
		if (code <= ICMPV6_PORT_UNREACH) {
			*err  = tab_unreach[code].err;
			fatal = tab_unreach[code].fatal;
		}
		break;

	case ICMPV6_PKT_TOOBIG:
		*err = EMSGSIZE;
		break;

	case ICMPV6_PARAMPROB:
		*err = EPROTO;
		fatal = 1;
		break;

	case ICMPV6_TIME_EXCEED:
		*err = EHOSTUNREACH;
		break;
	}

	return fatal;
}

EXPORT_SYMBOL(icmpv6_err_convert);

#ifdef CONFIG_SYSCTL
ctl_table ipv6_icmp_table_template[] = {
	{
		.ctl_name	= NET_IPV6_ICMP_RATELIMIT,
		.procname	= "ratelimit",
		.data		= &init_net.ipv6.sysctl.icmpv6_time,
		.maxlen		= sizeof(int),
		.mode		= 0644,
		.proc_handler	= proc_dointvec_ms_jiffies,
		.strategy	= sysctl_ms_jiffies
	},
	{ .ctl_name = 0 },
};

struct ctl_table *ipv6_icmp_sysctl_init(struct net *net)
{
	struct ctl_table *table;

	table = kmemdup(ipv6_icmp_table_template,
			sizeof(ipv6_icmp_table_template),
			GFP_KERNEL);

	if (table)
		table[0].data = &net->ipv6.sysctl.icmpv6_time;

	return table;
}
#endif

05.ASP)>>endobj 69 0 obj<</Subtype/Link/Rect[72.0 297.4 355.9 310.4]/Border[0 0 0]/A 68 0 R>>endobj 70 0 obj[65 0 R 67 0 R 69 0 R ]endobj 71 0 obj<</Subtype/Link/Rect[462.9 705.8 540.9 718.8]/Border[0 0 0]/Dest[645 0 R/XYZ null 768 0]>>endobj 72 0 obj<</S/URI/URI(#WRITELIST)>>endobj 73 0 obj<</Subtype/Link/Rect[91.9 313.4 157.9 326.4]/Border[0 0 0]/A 72 0 R>>endobj 74 0 obj<</S/URI/URI(smb.conf.5.html)>>endobj 75 0 obj<</Subtype/Link/Rect[192.7 300.2 294.1 313.2]/Border[0 0 0]/A 74 0 R>>endobj 76 0 obj<</S/URI/URI(#GUESTOK)>>endobj 77 0 obj<</Subtype/Link/Rect[163.3 273.8 231.3 286.8]/Border[0 0 0]/A 76 0 R>>endobj 78 0 obj<</S/URI/URI(#MAPTOGUEST)>>endobj 79 0 obj<</Subtype/Link/Rect[401.4 168.2 492.0 181.2]/Border[0 0 0]/A 78 0 R>>endobj 80 0 obj<</S/URI/URI(#MAPTOGUEST)>>endobj 81 0 obj<</Subtype/Link/Rect[108.0 155.0 130.0 168.0]/Border[0 0 0]/A 80 0 R>>endobj 82 0 obj[71 0 R 73 0 R 75 0 R 77 0 R 79 0 R 81 0 R ]endobj 83 0 obj<</S/URI/URI(#PRINTERADMIN)>>endobj 84 0 obj<</Subtype/Link/Rect[433.8 567.8 526.2 580.8]/Border[0 0 0]/A 83 0 R>>endobj 85 0 obj[84 0 R ]endobj 86 0 obj<</S/URI/URI(rpcclient.1.html)>>endobj 87 0 obj<</Subtype/Link/Rect[239.1 583.4 382.1 596.4]/Border[0 0 0]/A 86 0 R>>endobj 88 0 obj<</S/URI/URI(#SHOWADDPRINTERWIZARD)>>endobj 89 0 obj<</Subtype/Link/Rect[108.0 159.0 306.0 172.0]/Border[0 0 0]/A 88 0 R>>endobj 90 0 obj<</S/URI/URI(#ADDPRINTERCOMMAND)>>endobj 91 0 obj<</Subtype/Link/Rect[456.6 132.6 535.8 145.6]/Border[0 0 0]/A 90 0 R>>endobj 92 0 obj<</S/URI/URI(#ADDPRINTERCOMMAND)>>endobj 93 0 obj<</Subtype/Link/Rect[72.0 119.4 118.2 132.4]/Border[0 0 0]/A 92 0 R>>endobj 94 0 obj[87 0 R 89 0 R 91 0 R 93 0 R ]endobj 95 0 obj<</S/URI/URI(#DELETEPRINTERCOMMAND)>>endobj 96 0 obj<</Subtype/Link/Rect[189.3 681.4 334.5 694.4]/Border[0 0 0]/A 95 0 R>>endobj 97 0 obj<</S/URI/URI(#ENUMPORTSCOMMAND)>>endobj 98 0 obj<</Subtype/Link/Rect[451.4 504.2 510.8 517.2]/Border[0 0 0]/A 97 0 R>>endobj 99 0 obj<</S/URI/URI(#ENUMPORTSCOMMAND)>>endobj 100 0 obj<</Subtype/Link/Rect[72.0 491.0 118.2 504.0]/Border[0 0 0]/A 99 0 R>>endobj 101 0 obj<</S/URI/URI(http://imprints.sourceforge.net/)>>endobj 102 0 obj<</Subtype/Link/Rect[303.3 406.2 442.9 419.2]/Border[0 0 0]/A 101 0 R>>endobj 103 0 obj[96 0 R 98 0 R 100 0 R 102 0 R ]endobj 104 0 obj<</S/URI/URI(http://imprints.sourceforge.net/)>>endobj 105 0 obj<</Subtype/Link/Rect[108.0 479.8 244.9 492.8]/Border[0 0 0]/A 104 0 R>>endobj 106 0 obj[105 0 R ]endobj 107 0 obj<</S/URI/URI(smbpasswd.8.html)>>endobj 108 0 obj<</Subtype/Link/Rect[221.4 455.8 287.7 468.8]/Border[0 0 0]/A 107 0 R>>endobj 109 0 obj<</S/URI/URI(smb.conf.5.html)>>endobj 110 0 obj<</Subtype/Link/Rect[353.1 139.0 425.7 152.0]/Border[0 0 0]/A 109 0 R>>endobj 111 0 obj<</S/URI/URI(#SECURITY)>>endobj 112 0 obj<</Subtype/Link/Rect[169.1 99.4 241.7 112.4]/Border[0 0 0]/A 111 0 R>>endobj 113 0 obj[108 0 R 110 0 R 112 0 R ]endobj 114 0 obj<</S/URI/URI(#WORKGROUP)>>endobj 115 0 obj<</Subtype/Link/Rect[146.2 721.0 225.4 734.0]/Border[0 0 0]/A 114 0 R>>endobj 116 0 obj<</S/URI/URI(#ENCRYPTPASSWORDS)>>endobj 117 0 obj<</Subtype/Link/Rect[224.7 641.8 343.5 654.8]/Border[0 0 0]/A 116 0 R>>endobj 118 0 obj<</S/URI/URI(#PASSWORDSERVER)>>endobj 119 0 obj<</Subtype/Link/Rect[188.7 602.2 307.5 615.2]/Border[0 0 0]/A 118 0 R>>endobj 120 0 obj[115 0 R 117 0 R 119 0 R ]endobj 121 0 obj<</S/URI/URI(#SECURITYEQUALSSERVER)>>endobj 122 0 obj<</Subtype/Link/Rect[277.9 721.0 354.1 734.0]/Border[0 0 0]/A 121 0 R>>endobj 123 0 obj<</S/URI/URI(winbind.html)>>endobj 124 0 obj<</Subtype/Link/Rect[153.9 668.2 222.3 681.2]/Border[0 0 0]/A 123 0 R>>endobj 125 0 obj<</S/URI/URI(http://www.linuxworld.com)>>endobj 126 0 obj<</Subtype/Link/Rect[443.5 351.4 500.6 364.4]/Border[0 0 0]/A 125 0 R>>endobj 127 0 obj<</S/URI/URI(http://www.linuxworld.com/linuxworld/lw-1998-10/lw-10-samba.html)>>endobj 128 0 obj<</Subtype/Link/Rect[72.0 338.2 189.3 351.2]/Border[0 0 0]/A 127 0 R>>endobj 129 0 obj[122 0 R 124 0 R 126 0 R 128 0 R ]endobj 130 0 obj<</S/URI/URI(smb.conf.5.html)>>endobj 131 0 obj<</Subtype/Link/Rect[182.3 603.4 254.9 616.4]/Border[0 0 0]/A 130 0 R>>endobj 132 0 obj<</S/URI/URI(ENCRYPTION.html)>>endobj 133 0 obj<</Subtype/Link/Rect[334.9 603.4 418.9 616.4]/Border[0 0 0]/A 132 0 R>>endobj 134 0 obj<</S/URI/URI(UNIX_INSTALL.html)>>endobj 135 0 obj<</Subtype/Link/Rect[339.0 439.4 443.5 452.4]/Border[0 0 0]/A 134 0 R>>endobj 136 0 obj<</S/URI/URI(smb.conf.5.html)>>endobj 137 0 obj<</Subtype/Link/Rect[445.9 426.2 544.6 439.2]/Border[0 0 0]/A 136 0 R>>endobj 138 0 obj[131 0 R 133 0 R 135 0 R 137 0 R ]endobj 139 0 obj<</S/URI/URI(smb.conf.5.html)>>endobj 140 0 obj<</Subtype/Link/Rect[468.3 636.2 549.6 649.2]/Border[0 0 0]/A 139 0 R>>endobj 141 0 obj<</S/URI/URI(smb.conf.5.html)>>endobj 142 0 obj<</Subtype/Link/Rect[72.0 623.0 92.8 636.0]/Border[0 0 0]/A 141 0 R>>endobj 143 0 obj<</S/URI/URI(#NETBIOSNAME)>>endobj 144 0 obj<</Subtype/Link/Rect[94.6 549.6 159.4 560.6]/Border[0 0 0]/A 143 0 R>>endobj 145 0 obj<</S/URI/URI(#WORKGROUP)>>endobj 146 0 obj<</Subtype/Link/Rect[94.6 538.8 143.2 549.8]/Border[0 0 0]/A 145 0 R>>endobj 147 0 obj<</S/URI/URI(#OSLEVEL)>>endobj 148 0 obj<</Subtype/Link/Rect[94.6 506.4 137.8 517.4]/Border[0 0 0]/A 147 0 R>>endobj 149 0 obj<</S/URI/URI(#PERFERREDMASTER)>>endobj 150 0 obj<</Subtype/Link/Rect[94.6 495.6 181.0 506.6]/Border[0 0 0]/A 149 0 R>>endobj 151 0 obj<</S/URI/URI(#DOMAINMASTER)>>endobj 152 0 obj<</Subtype/Link/Rect[94.6 484.8 164.8 495.8]/Border[0 0 0]/A 151 0 R>>endobj 153 0 obj<</S/URI/URI(#LOCALMASTER)>>endobj 154 0 obj<</Subtype/Link/Rect[94.6 474.0 159.4 485.0]/Border[0 0 0]/A 153 0 R>>endobj 155 0 obj<</S/URI/URI(#SECURITYEQUALSUSER)>>endobj 156 0 obj<</Subtype/Link/Rect[94.6 441.6 137.8 452.6]/Border[0 0 0]/A 155 0 R>>endobj 157 0 obj<</S/URI/URI(#ENCRYPTPASSWORDS)>>endobj 158 0 obj<</Subtype/Link/Rect[94.6 409.2 186.4 420.2]/Border[0 0 0]/A 157 0 R>>endobj 159 0 obj<</S/URI/URI(#DOMAINLOGONS)>>endobj 160 0 obj<</Subtype/Link/Rect[94.6 376.8 164.8 387.8]/Border[0 0 0]/A 159 0 R>>endobj 161 0 obj<</S/URI/URI(#LOGONPATH)>>endobj 162 0 obj<</Subtype/Link/Rect[94.6 344.4 148.6 355.4]/Border[0 0 0]/A 161 0 R>>endobj 163 0 obj<</S/URI/URI(#LOGONDRIVE)>>endobj 164 0 obj<</Subtype/Link/Rect[94.6 301.2 154.0 312.2]/Border[0 0 0]/A 163 0 R>>endobj 165 0 obj<</S/URI/URI(#LOGONHOME)>>endobj 166 0 obj<</Subtype/Link/Rect[94.6 290.4 148.6 301.4]/Border[0 0 0]/A 165 0 R>>endobj 167 0 obj<</S/URI/URI(#LOGONSCRIPT)>>endobj 168 0 obj<</Subtype/Link/Rect[94.6 247.2 159.4 258.2]/Border[0 0 0]/A 167 0 R>>endobj 169 0 obj<</S/URI/URI(#PATH)>>endobj 170 0 obj<</Subtype/Link/Rect[94.6 204.0 116.2 215.0]/Border[0 0 0]/A 169 0 R>>endobj 171 0 obj<</S/URI/URI(#READONLY)>>endobj 172 0 obj<</Subtype/Link/Rect[94.6 193.2 143.2 204.2]/Border[0 0 0]/A 171 0 R>>endobj 173 0 obj<</S/URI/URI(#WRITELIST)>>endobj 174 0 obj<</Subtype/Link/Rect[94.6 182.4 148.6 193.4]/Border[0 0 0]/A 173 0 R>>endobj 175 0 obj<</S/URI/URI(#PATH)>>endobj 176 0 obj<</Subtype/Link/Rect[94.6 139.2 116.2 150.2]/Border[0 0 0]/A 175 0 R>>endobj 177 0 obj<</S/URI/URI(#READONLY)>>endobj 178 0 obj<</Subtype/Link/Rect[94.6 128.4 143.2 139.4]/Border[0 0 0]/A 177 0 R>>endobj 179 0 obj<</S/URI/URI(#CREATEMASK)>>endobj 180 0 obj<</Subtype/Link/Rect[94.6 117.6 154.0 128.6]/Border[0 0 0]/A 179 0 R>>endobj 181 0 obj<</S/URI/URI(#DIRECTORYMASK)>>endobj 182 0 obj<</Subtype/Link/Rect[94.6 106.8 170.2 117.8]/Border[0 0 0]/A 181 0 R>>endobj 183 0 obj[140 0 R 142 0 R 144 0 R 146 0 R 148 0 R 150 0 R 152 0 R 154 0 R 156 0 R 158 0 R 160 0 R 162 0 R 164 0 R 166 0 R 168 0 R 170 0 R 172 0 R 174 0 R 176 0 R 178 0 R 180 0 R 182 0 R ]endobj 184 0 obj<</S/URI/URI(ENCRYPTION.html)>>endobj 185 0 obj<</Subtype/Link/Rect[108.0 707.8 200.6 720.8]/Border[0 0 0]/A 184 0 R>>endobj 186 0 obj<</S/URI/URI(#DOMAINADMINGROUP)>>endobj 187 0 obj<</Subtype/Link/Rect[497.0 615.4 530.0 628.4]/Border[0 0 0]/A 186 0 R>>endobj 188 0 obj<</S/URI/URI(#DOMAINADMINGROUP)>>endobj 189 0 obj<</Subtype/Link/Rect[72.0 602.2 127.9 615.2]/Border[0 0 0]/A 188 0 R>>endobj 190 0 obj[185 0 R 187 0 R 189 0 R ]endobj 191 0 obj<</S/URI/URI(smbpasswd.8.html)>>endobj 192 0 obj<</Subtype/Link/Rect[72.0 550.6 138.6 563.6]/Border[0 0 0]/A 191 0 R>>endobj 193 0 obj<</S/URI/URI(#ADDUSERSCRIPT)>>endobj 194 0 obj<</Subtype/Link/Rect[422.7 229.4 486.9 242.4]/Border[0 0 0]/A 193 0 R>>endobj 195 0 obj[192 0 R 194 0 R ]endobj 196 0 obj<</S/URI/URI(http://www.microsoft.com/ntserver/management/deployment/planguide/prof_policies.asp)>>endobj 197 0 obj<</Subtype/Link/Rect[164.2 636.2 409.3 649.2]/Border[0 0 0]/A 196 0 R>>endobj 198 0 obj[197 0 R ]endobj 199 0 obj<</S/URI/URI(ftp://ftp.microsoft.com/Softlib/MSLFILES/NEXUS.EXE)>>endobj 200 0 obj<</Subtype/Link/Rect[287.9 721.0 540.0 734.0]/Border[0 0 0]/A 199 0 R>>endobj 201 0 obj<</S/URI/URI(ftp://ftp.microsoft.com/Softlib/MSLFILES/SRVTOOLS.EXE)>>endobj 202 0 obj<</Subtype/Link/Rect[236.3 681.4 508.6 694.4]/Border[0 0 0]/A 201 0 R>>endobj 203 0 obj<</S/URI/URI(http://www.tcpdump.org/)>>endobj 204 0 obj<</Subtype/Link/Rect[352.1 266.6 458.1 279.6]/Border[0 0 0]/A 203 0 R>>endobj 205 0 obj<</S/URI/URI(http://www.ethereal.com/)>>endobj 206 0 obj<</Subtype/Link/Rect[430.0 253.4 539.4 266.4]/Border[0 0 0]/A 205 0 R>>endobj 207 0 obj[200 0 R 202 0 R 204 0 R 206 0 R ]endobj 208 0 obj<</S/URI/URI(http://samba.org)>>endobj 209 0 obj<</Subtype/Link/Rect[236.3 338.2 310.8 351.2]/Border[0 0 0]/A 208 0 R>>endobj 210 0 obj<</S/URI/URI(http://www.skippy.net/linux/smb-howto.html)>>endobj 211 0 obj<</Subtype/Link/Rect[144.0 285.4 346.1 298.4]/Border[0 0 0]/A 210 0 R>>endobj 212 0 obj<</S/URI/URI(http://bioserve.latrobe.edu.au/samba)>>endobj 213 0 obj<</Subtype/Link/Rect[182.5 259.0 345.0 272.0]/Border[0 0 0]/A 212 0 R>>endobj 214 0 obj<</S/URI/URI(http://samba.org/cifs/)>>endobj 215 0 obj<</Subtype/Link/Rect[284.9 245.8 381.4 258.8]/Border[0 0 0]/A 214 0 R>>endobj 216 0 obj<</S/URI/URI(http://mailhost.cb1.com/~lkcl/ntdom/)>>endobj 217 0 obj<</Subtype/Link/Rect[244.2 232.6 411.2 245.6]/Border[0 0 0]/A 216 0 R>>endobj 218 0 obj<</S/URI/URI(ftp://ftp.microsoft.com/developr/drg/CIFS/)>>endobj 219 0 obj<</Subtype/Link/Rect[280.3 219.4 471.9 232.4]/Border[0 0 0]/A 218 0 R>>endobj 220 0 obj<</S/URI/URI(http://samba.org)>>endobj 221 0 obj<</Subtype/Link/Rect[361.0 166.6 432.8 179.6]/Border[0 0 0]/A 220 0 R>>endobj 222 0 obj<</S/URI/URI(http://www.samba-tng.org/)>>endobj 223 0 obj<</Subtype/Link/Rect[301.1 127.0 425.6 140.0]/Border[0 0 0]/A 222 0 R>>endobj 224 0 obj[209 0 R 211 0 R 213 0 R 215 0 R 217 0 R 219 0 R 221 0 R 223 0 R ]endobj 225 0 obj<</S/URI/URI(http://lists.samba.org/)>>endobj 226 0 obj<</Subtype/Link/Rect[135.5 351.4 227.8 364.4]/Border[0 0 0]/A 225 0 R>>endobj 227 0 obj<</S/URI/URI(http://lists.samba.org/mailman/roster/samba-ntdom)>>endobj 228 0 obj<</Subtype/Link/Rect[309.0 338.2 330.7 351.2]/Border[0 0 0]/A 227 0 R>>endobj 229 0 obj[226 0 R 228 0 R ]endobj 230 0 obj<</S/URI/URI(mailto:jtrostel@snapserver.com)>>endobj 231 0 obj<</Subtype/Link/Rect[200.6 255.4 310.1 268.4]/Border[0 0 0]/A 230 0 R>>endobj 232 0 obj[231 0 R ]endobj 233 0 obj<</S/URI/URI(http://samba.org/)>>endobj 234 0 obj<</Subtype/Link/Rect[196.9 385.4 308.1 398.4]/Border[0 0 0]/A 233 0 R>>endobj 235 0 obj[234 0 R ]endobj 236 0 obj<</S/URI/URI(winbindd.8.html)>>endobj 237 0 obj<</Subtype/Link/Rect[311.8 208.2 366.1 221.2]/Border[0 0 0]/A 236 0 R>>endobj 238 0 obj<</S/URI/URI(#WINBINDSEPARATOR)>>endobj 239 0 obj<</Subtype/Link/Rect[100.0 137.2 191.8 148.2]/Border[0 0 0]/A 238 0 R>>endobj 240 0 obj<</S/URI/URI(#WINBINDUID)>>endobj 241 0 obj<</Subtype/Link/Rect[100.0 115.6 159.4 126.6]/Border[0 0 0]/A 240 0 R>>endobj 242 0 obj<</S/URI/URI(#WINBINDGID)>>endobj 243 0 obj<</Subtype/Link/Rect[100.0 94.0 159.4 105.0]/Border[0 0 0]/A 242 0 R>>endobj 244 0 obj<</S/URI/URI(#WINBINDENUMUSERS)>>endobj 245 0 obj<</Subtype/Link/Rect[100.0 72.4 197.2 83.4]/Border[0 0 0]/A 244 0 R>>endobj 246 0 obj<</S/URI/URI(#WINBINDENUMGROUP)>>endobj 247 0 obj<</Subtype/Link/Rect[100.0 61.6 202.6 72.6]/Border[0 0 0]/A 246 0 R>>endobj 248 0 obj[237 0 R 239 0 R 241 0 R 243 0 R 245 0 R 247 0 R ]endobj 249 0 obj<</S/URI/URI(#TEMPLATEHOMEDIR)>>endobj 250 0 obj<</Subtype/Link/Rect[100.0 711.2 186.4 722.2]/Border[0 0 0]/A 249 0 R>>endobj 251 0 obj<</S/URI/URI(#TEMPLATESHELL)>>endobj 252 0 obj<</Subtype/Link/Rect[100.0 700.4 175.6 711.4]/Border[0 0 0]/A 251 0 R>>endobj 253 0 obj[250 0 R 252 0 R ]endobj 254 0 obj<</S/URI/URI(http://carol.wins.uva.nl/~leeuw/samba/warp.html)>>endobj 255 0 obj<</Subtype/Link/Rect[331.1 607.0 550.0 620.0]/Border[0 0 0]/A 254 0 R>>endobj 256 0 obj<</S/URI/URI(ftp://ftp.microsoft.com/BusSys/Clients/LANMAN.OS2/)>>endobj 257 0 obj<</Subtype/Link/Rect[72.0 241.4 319.2 254.4]/Border[0 0 0]/A 256 0 R>>endobj 258 0 obj<</S/URI/URI(http://carol.wins.uva.nl/~leeuw/lanman.html)>>endobj 259 0 obj<</Subtype/Link/Rect[346.1 241.4 544.2 254.4]/Border[0 0 0]/A 258 0 R>>endobj 260 0 obj<</S/URI/URI(ftp://ftp.cdrom.com/pub/os2/network/ndis/)>>endobj 261 0 obj<</Subtype/Link/Rect[175.9 117.8 366.2 130.8]/Border[0 0 0]/A 260 0 R>>endobj 262 0 obj[255 0 R 257 0 R 259 0 R 261 0 R ]endobj 263 0 obj<</S/URI/URI(http://carol.wins.uva.nl/~leeuw/samba/fix.html)>>endobj 264 0 obj<</Subtype/Link/Rect[225.7 661.0 434.8 674.0]/Border[0 0 0]/A 263 0 R>>endobj 265 0 obj[264 0 R ]endobj 266 0 obj<</S/URI/URI(http://samba.org/samba/cvs.html)>>endobj 267 0 obj<</Subtype/Link/Rect[357.1 577.0 500.7 590.0]/Border[0 0 0]/A 266 0 R>>endobj 268 0 obj<</S/URI/URI(http://samba.org/cgi-bin/cvsweb)>>endobj 269 0 obj<</Subtype/Link/Rect[138.6 354.6 283.2 367.6]/Border[0 0 0]/A 268 0 R>>endobj 270 0 obj<</S/URI/URI(http://www.cyclic.com/)>>endobj 271 0 obj<</Subtype/Link/Rect[394.3 230.2 498.2 243.2]/Border[0 0 0]/A 270 0 R>>endobj 272 0 obj[267 0 R 269 0 R 271 0 R ]endobj 273 0 obj<</S/URI/URI(x1098.htm)>>endobj 274 0 obj<</Subtype/Link/Rect[201.6 408.2 258.1 421.2]/Border[0 0 0]/A 273 0 R>>endobj 275 0 obj[274 0 R ]endobj 276 0 obj<</Subtype/Link/Rect[72.0 684.0 277.3 697.0]/Border[0 0 0]/Dest[543 0 R/XYZ null 798 0]>>endobj 277 0 obj<</Subtype/Link/Rect[108.0 670.8 249.2 683.8]/Border[0 0 0]/Dest[543 0 R/XYZ null 730 0]>>endobj 278 0 obj<</Subtype/Link/Rect[108.0 657.6 255.0 670.6]/Border[0 0 0]/Dest[543 0 R/XYZ null 593 0]>>endobj 279 0 obj<</Subtype/Link/Rect[108.0 644.4 257.7 657.4]/Border[0 0 0]/Dest[543 0 R/XYZ null 178 0]>>endobj 280 0 obj<</Subtype/Link/Rect[108.0 631.2 309.0 644.2]/Border[0 0 0]/Dest[546 0 R/XYZ null 739 0]>>endobj 281 0 obj<</Subtype/Link/Rect[108.0 618.0 316.7 631.0]/Border[0 0 0]/Dest[546 0 R/XYZ null 379 0]>>endobj 282 0 obj<</Subtype/Link/Rect[108.0 604.8 284.9 617.8]/Border[0 0 0]/Dest[546 0 R/XYZ null 268 0]>>endobj 283 0 obj<</Subtype/Link/Rect[108.0 591.6 280.0 604.6]/Border[0 0 0]/Dest[549 0 R/XYZ null 768 0]>>endobj 284 0 obj<</Subtype/Link/Rect[108.0 578.4 328.6 591.4]/Border[0 0 0]/Dest[549 0 R/XYZ null 266 0]>>endobj 285 0 obj<</Subtype/Link/Rect[108.0 565.2 364.9 578.2]/Border[0 0 0]/Dest[552 0 R/XYZ null 686 0]>>endobj 286 0 obj<</Subtype/Link/Rect[108.0 552.0 315.8 565.0]/Border[0 0 0]/Dest[552 0 R/XYZ null 509 0]>>endobj 287 0 obj<</Subtype/Link/Rect[108.0 538.8 514.3 551.8]/Border[0 0 0]/Dest[552 0 R/XYZ null 332 0]>>endobj 288 0 obj<</Subtype/Link/Rect[108.0 525.6 259.4 538.6]/Border[0 0 0]/Dest[555 0 R/XYZ null 768 0]>>endobj 289 0 obj<</Subtype/Link/Rect[108.0 512.4 236.0 525.4]/Border[0 0 0]/Dest[555 0 R/XYZ null 577 0]>>endobj 290 0 obj<</Subtype/Link/Rect[108.0 499.2 186.5 512.2]/Border[0 0 0]/Dest[555 0 R/XYZ null 505 0]>>endobj 291 0 obj<</Subtype/Link/Rect[108.0 486.0 267.2 499.0]/Border[0 0 0]/Dest[555 0 R/XYZ null 394 0]>>endobj 292 0 obj<</Subtype/Link/Rect[108.0 472.8 295.6 485.8]/Border[0 0 0]/Dest[558 0 R/XYZ null 739 0]>>endobj 293 0 obj<</Subtype/Link/Rect[108.0 459.6 177.7 472.6]/Border[0 0 0]/Dest[558 0 R/XYZ null 615 0]>>endobj 294 0 obj<</Subtype/Link/Rect[108.0 446.4 232.3 459.4]/Border[0 0 0]/Dest[561 0 R/XYZ null 768 0]>>endobj 295 0 obj<</Subtype/Link/Rect[108.0 433.2 232.6 446.2]/Border[0 0 0]/Dest[561 0 R/XYZ null 683 0]>>endobj 296 0 obj<</Subtype/Link/Rect[72.0 406.8 348.8 419.8]/Border[0 0 0]/Dest[564 0 R/XYZ null 798 0]>>endobj 297 0 obj<</Subtype/Link/Rect[108.0 393.6 161.5 406.6]/Border[0 0 0]/Dest[564 0 R/XYZ null 706 0]>>endobj 298 0 obj<</Subtype/Link/Rect[108.0 380.4 327.7 393.4]/Border[0 0 0]/Dest[564 0 R/XYZ null 463 0]>>endobj 299 0 obj<</Subtype/Link/Rect[108.0 367.2 177.1 380.2]/Border[0 0 0]/Dest[564 0 R/XYZ null 325 0]>>endobj 300 0 obj<</Subtype/Link/Rect[108.0 354.0 203.6 367.0]/Border[0 0 0]/Dest[567 0 R/XYZ null 435 0]>>endobj 301 0 obj<</Subtype/Link/Rect[108.0 340.8 195.1 353.8]/Border[0 0 0]/Dest[567 0 R/XYZ null 285 0]>>endobj 302 0 obj<</Subtype/Link/Rect[108.0 327.6 215.2 340.6]/Border[0 0 0]/Dest[570 0 R/XYZ null 768 0]>>endobj 303 0 obj<</Subtype/Link/Rect[108.0 314.4 382.4 327.4]/Border[0 0 0]/Dest[570 0 R/XYZ null 268 0]>>endobj 304 0 obj<</Subtype/Link/Rect[108.0 301.2 255.6 314.2]/Border[0 0 0]/Dest[573 0 R/XYZ null 210 0]>>endobj 305 0 obj<</Subtype/Link/Rect[108.0 288.0 224.1 301.0]/Border[0 0 0]/Dest[576 0 R/XYZ null 660 0]>>endobj 306 0 obj<</Subtype/Link/Rect[108.0 274.8 187.8 287.8]/Border[0 0 0]/Dest[579 0 R/XYZ null 371 0]>>endobj 307 0 obj<</Subtype/Link/Rect[108.0 261.6 194.5 274.6]/Border[0 0 0]/Dest[579 0 R/XYZ null 260 0]>>endobj 308 0 obj<</Subtype/Link/Rect[108.0 248.4 200.6 261.4]/Border[0 0 0]/Dest[582 0 R/XYZ null 768 0]>>endobj 309 0 obj<</Subtype/Link/Rect[108.0 235.2 526.0 248.2]/Border[0 0 0]/Dest[582 0 R/XYZ null 529 0]>>endobj 310 0 obj<</Subtype/Link/Rect[108.0 222.0 500.6 235.0]/Border[0 0 0]/Dest[585 0 R/XYZ null 633 0]>>endobj 311 0 obj<</Subtype/Link/Rect[108.0 208.8 353.3 221.8]/Border[0 0 0]/Dest[588 0 R/XYZ null 581 0]>>endobj 312 0 obj<</Subtype/Link/Rect[108.0 195.6 419.0 208.6]/Border[0 0 0]/Dest[588 0 R/XYZ null 304 0]>>endobj 313 0 obj<</Subtype/Link/Rect[108.0 182.4 332.5 195.4]/Border[0 0 0]/Dest[591 0 R/XYZ null 594 0]>>endobj 314 0 obj<</Subtype/Link/Rect[108.0 169.2 181.6 182.2]/Border[0 0 0]/Dest[594 0 R/XYZ null 639 0]>>endobj 315 0 obj<</Subtype/Link/Rect[72.0 142.8 463.4 155.8]/Border[0 0 0]/Dest[597 0 R/XYZ null 798 0]>>endobj 316 0 obj<</Subtype/Link/Rect[108.0 129.6 202.4 142.6]/Border[0 0 0]/Dest[597 0 R/XYZ null 706 0]>>endobj 317 0 obj<</Subtype/Link/Rect[108.0 116.4 244.9 129.4]/Border[0 0 0]/Dest[600 0 R/XYZ null 179 0]>>endobj 318 0 obj<</Subtype/Link/Rect[108.0 103.2 270.3 116.2]/Border[0 0 0]/Dest[603 0 R/XYZ null 726 0]>>endobj 319 0 obj<</Subtype/Link/Rect[72.0 76.8 402.3 89.8]/Border[0 0 0]/Dest[606 0 R/XYZ null 798 0]>>endobj 320 0 obj<</Subtype/Link/Rect[108.0 63.6 179.2 76.6]/Border[0 0 0]/Dest[606 0 R/XYZ null 706 0]>>endobj 321 0 obj[276 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R 309 0 R 310 0 R 311 0 R 312 0 R 313 0 R 314 0 R 315 0 R 316 0 R 317 0 R 318 0 R 319 0 R 320 0 R ]endobj 322 0 obj<</Subtype/Link/Rect[108.0 684.0 161.2 697.0]/Border[0 0 0]/Dest[609 0 R/XYZ null 673 0]>>endobj 323 0 obj<</Subtype/Link/Rect[72.0 657.6 412.7 670.6]/Border[0 0 0]/Dest[612 0 R/XYZ null 798 0]>>endobj 324 0 obj<</Subtype/Link/Rect[108.0 644.4 447.4 657.4]/Border[0 0 0]/Dest[612 0 R/XYZ null 706 0]>>endobj 325 0 obj<</Subtype/Link/Rect[108.0 631.2 319.1 644.2]/Border[0 0 0]/Dest[612 0 R/XYZ null 525 0]>>endobj 326 0 obj<</Subtype/Link/Rect[108.0 618.0 231.1 631.0]/Border[0 0 0]/Dest[612 0 R/XYZ null 348 0]>>endobj 327 0 obj<</Subtype/Link/Rect[108.0 604.8 292.2 617.8]/Border[0 0 0]/Dest[615 0 R/XYZ null 686 0]>>endobj 328 0 obj<</Subtype/Link/Rect[108.0 591.6 208.5 604.6]/Border[0 0 0]/Dest[615 0 R/XYZ null 443 0]>>endobj 329 0 obj<</Subtype/Link/Rect[108.0 578.4 233.6 591.4]/Border[0 0 0]/Dest[615 0 R/XYZ null 187 0]>>endobj 330 0 obj<</Subtype/Link/Rect[108.0 565.2 301.4 578.2]/Border[0 0 0]/Dest[618 0 R/XYZ null 673 0]>>endobj 331 0 obj<</Subtype/Link/Rect[108.0 552.0 394.8 565.0]/Border[0 0 0]/Dest[618 0 R/XYZ null 232 0]>>endobj 332 0 obj<</Subtype/Link/Rect[108.0 538.8 386.9 551.8]/Border[0 0 0]/Dest[624 0 R/XYZ null 594 0]>>endobj 333 0 obj<</Subtype/Link/Rect[72.0 512.4 277.1 525.4]/Border[0 0 0]/Dest[627 0 R/XYZ null 798 0]>>endobj 334 0 obj<</Subtype/Link/Rect[108.0 499.2 181.6 512.2]/Border[0 0 0]/Dest[627 0 R/XYZ null 730 0]>>endobj 335 0 obj<</Subtype/Link/Rect[108.0 486.0 189.0 499.0]/Border[0 0 0]/Dest[627 0 R/XYZ null 302 0]>>endobj 336 0 obj<</Subtype/Link/Rect[108.0 472.8 209.7 485.8]/Border[0 0 0]/Dest[630 0 R/XYZ null 693 0]>>endobj 337 0 obj<</Subtype/Link/Rect[108.0 459.6 294.4 472.6]/Border[0 0 0]/Dest[633 0 R/XYZ null 463 0]>>endobj 338 0 obj<</Subtype/Link/Rect[108.0 446.4 287.3 459.4]/Border[0 0 0]/Dest[636 0 R/XYZ null 686 0]>>endobj 339 0 obj<</Subtype/Link/Rect[108.0 433.2 350.9 446.2]/Border[0 0 0]/Dest[636 0 R/XYZ null 302 0]>>endobj 340 0 obj<</Subtype/Link/Rect[108.0 420.0 242.1 433.0]/Border[0 0 0]/Dest[639 0 R/XYZ null 686 0]>>endobj 341 0 obj<</Subtype/Link/Rect[108.0 406.8 220.1 419.8]/Border[0 0 0]/Dest[639 0 R/XYZ null 496 0]>>endobj 342 0 obj<</Subtype/Link/Rect[108.0 393.6 214.3 406.6]/Border[0 0 0]/Dest[639 0 R/XYZ null 385 0]>>endobj 343 0 obj<</Subtype/Link/Rect[108.0 380.4 281.2 393.4]/Border[0 0 0]/Dest[639 0 R/XYZ null 247 0]>>endobj 344 0 obj<</Subtype/Link/Rect[108.0 367.2 222.3 380.2]/Border[0 0 0]/Dest[639 0 R/XYZ null 149 0]>>endobj 345 0 obj<</Subtype/Link/Rect[108.0 354.0 234.5 367.0]/Border[0 0 0]/Dest[642 0 R/XYZ null 713 0]>>endobj 346 0 obj<</Subtype/Link/Rect[108.0 340.8 300.2 353.8]/Border[0 0 0]/Dest[645 0 R/XYZ null 768 0]>>endobj 347 0 obj<</Subtype/Link/Rect[72.0 314.4 272.9 327.4]/Border[0 0 0]/Dest[648 0 R/XYZ null 798 0]>>endobj 348 0 obj<</Subtype/Link/Rect[108.0 301.2 299.9 314.2]/Border[0 0 0]/Dest[648 0 R/XYZ null 730 0]>>endobj 349 0 obj<</Subtype/Link/Rect[108.0 288.0 288.0 301.0]/Border[0 0 0]/Dest[651 0 R/XYZ null 383 0]>>endobj 350 0 obj<</Subtype/Link/Rect[108.0 274.8 307.9 287.8]/Border[0 0 0]/Dest[651 0 R/XYZ null 166 0]>>endobj 351 0 obj<</Subtype/Link/Rect[72.0 248.4 416.3 261.4]/Border[0 0 0]/Dest[657 0 R/XYZ null 798 0]>>endobj 352 0 obj<</Subtype/Link/Rect[108.0 235.2 219.2 248.2]/Border[0 0 0]/Dest[657 0 R/XYZ null 706 0]>>endobj 353 0 obj<</Subtype/Link/Rect[108.0 222.0 181.0 235.0]/Border[0 0 0]/Dest[657 0 R/XYZ null 608 0]>>endobj 354 0 obj<</Subtype/Link/Rect[108.0 208.8 316.1 221.8]/Border[0 0 0]/Dest[660 0 R/XYZ null 726 0]>>endobj 355 0 obj<</Subtype/Link/Rect[108.0 195.6 430.0 208.6]/Border[0 0 0]/Dest[663 0 R/XYZ null 607 0]>>endobj 356 0 obj<</Subtype/Link/Rect[108.0 182.4 333.2 195.4]/Border[0 0 0]/Dest[663 0 R/XYZ null 232 0]>>endobj 357 0 obj<</Subtype/Link/Rect[108.0 169.2 362.5 182.2]/Border[0 0 0]/Dest[666 0 R/XYZ null 359 0]>>endobj 358 0 obj<</Subtype/Link/Rect[108.0 156.0 279.4 169.0]/Border[0 0 0]/Dest[669 0 R/XYZ null 768 0]>>endobj 359 0 obj<</Subtype/Link/Rect[108.0 142.8 261.4 155.8]/Border[0 0 0]/Dest[669 0 R/XYZ null 392 0]>>endobj 360 0 obj<</Subtype/Link/Rect[108.0 129.6 252.8 142.6]/Border[0 0 0]/Dest[675 0 R/XYZ null 739 0]>>endobj 361 0 obj<</Subtype/Link/Rect[108.0 116.4 243.6 129.4]/Border[0 0 0]/Dest[678 0 R/XYZ null 686 0]>>endobj 362 0 obj<</Subtype/Link/Rect[108.0 103.2 292.9 116.2]/Border[0 0 0]/Dest[684 0 R/XYZ null 303 0]>>endobj 363 0 obj<</Subtype/Link/Rect[108.0 90.0 332.0 103.0]/Border[0 0 0]/Dest[687 0 R/XYZ null 277 0]>>endobj 364 0 obj<</Subtype/Link/Rect[108.0 76.8 406.2 89.8]/Border[0 0 0]/Dest[690 0 R/XYZ null 482 0]>>endobj 365 0 obj<</Subtype/Link/Rect[108.0 63.6 431.0 76.6]/Border[0 0 0]/Dest[702 0 R/XYZ null 274 0]>>endobj 366 0 obj[322 0 R 323 0 R 324 0 R 325 0 R 326 0 R 327 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R 345 0 R 346 0 R 347 0 R 348 0 R 349 0 R 350 0 R 351 0 R 352 0 R 353 0 R 354 0 R 355 0 R 356 0 R 357 0 R 358 0 R 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R 364 0 R 365 0 R ]endobj 367 0 obj<</Subtype/Link/Rect[72.0 684.0 426.2 697.0]/Border[0 0 0]/Dest[711 0 R/XYZ null 798 0]>>endobj 368 0 obj<</Subtype/Link/Rect[108.0 670.8 164.5 683.8]/Border[0 0 0]/Dest[711 0 R/XYZ null 706 0]>>endobj 369 0 obj<</Subtype/Link/Rect[108.0 657.6 181.6 670.6]/Border[0 0 0]/Dest[711 0 R/XYZ null 569 0]>>endobj 370 0 obj<</Subtype/Link/Rect[108.0 644.4 233.6 657.4]/Border[0 0 0]/Dest[711 0 R/XYZ null 246 0]>>endobj 371 0 obj<</Subtype/Link/Rect[108.0 631.2 188.3 644.2]/Border[0 0 0]/Dest[714 0 R/XYZ null 581 0]>>endobj 372 0 obj<</Subtype/Link/Rect[108.0 618.0 222.0 631.0]/Border[0 0 0]/Dest[714 0 R/XYZ null 417 0]>>endobj 373 0 obj<</Subtype/Link/Rect[108.0 604.8 288.6 617.8]/Border[0 0 0]/Dest[714 0 R/XYZ null 292 0]>>endobj 374 0 obj<</Subtype/Link/Rect[108.0 591.6 230.8 604.6]/Border[0 0 0]/Dest[717 0 R/XYZ null 768 0]>>endobj 375 0 obj<</Subtype/Link/Rect[108.0 578.4 288.9 591.4]/Border[0 0 0]/Dest[717 0 R/XYZ null 313 0]>>endobj 376 0 obj<</Subtype/Link/Rect[108.0 565.2 269.3 578.2]/Border[0 0 0]/Dest[720 0 R/XYZ null 673 0]>>endobj 377 0 obj<</Subtype/Link/Rect[108.0 552.0 203.0 565.0]/Border[0 0 0]/Dest[720 0 R/XYZ null 483 0]>>endobj 378 0 obj<</Subtype/Link/Rect[108.0 538.8 259.9 551.8]/Border[0 0 0]/Dest[720 0 R/XYZ null 332 0]>>endobj 379 0 obj<</Subtype/Link/Rect[108.0 525.6 189.9 538.6]/Border[0 0 0]/Dest[720 0 R/XYZ null 221 0]>>endobj 380 0 obj<</Subtype/Link/Rect[108.0 512.4 196.6 525.4]/Border[0 0 0]/Dest[723 0 R/XYZ null 581 0]>>endobj 381 0 obj<</Subtype/Link/Rect[108.0 499.2 221.1 512.2]/Border[0 0 0]/Dest[723 0 R/XYZ null 298 0]>>endobj 382 0 obj<</Subtype/Link/Rect[108.0 486.0 178.0 499.0]/Border[0 0 0]/Dest[738 0 R/XYZ null 355 0]>>endobj 383 0 obj<</Subtype/Link/Rect[108.0 472.8 177.4 485.8]/Border[0 0 0]/Dest[741 0 R/XYZ null 768 0]>>endobj 384 0 obj<</Subtype/Link/Rect[72.0 446.4 228.8 459.4]/Border[0 0 0]/Dest[744 0 R/XYZ null 798 0]>>endobj 385 0 obj<</Subtype/Link/Rect[108.0 433.2 159.0 446.2]/Border[0 0 0]/Dest[744 0 R/XYZ null 730 0]>>endobj 386 0 obj<</Subtype/Link/Rect[108.0 420.0 499.0 433.0]/Border[0 0 0]/Dest[744 0 R/XYZ null 700 0]>>endobj 387 0 obj<</Subtype/Link/Rect[108.0 406.8 504.2 419.8]/Border[0 0 0]/Dest[744 0 R/XYZ null 348 0]>>endobj 388 0 obj<</Subtype/Link/Rect[108.0 393.6 455.7 406.6]/Border[0 0 0]/Dest[747 0 R/XYZ null 768 0]>>endobj 389 0 obj<</Subtype/Link/Rect[108.0 380.4 425.4 393.4]/Border[0 0 0]/Dest[747 0 R/XYZ null 639 0]>>endobj 390 0 obj<</Subtype/Link/Rect[72.0 354.0 342.4 367.0]/Border[0 0 0]/Dest[750 0 R/XYZ null 798 0]>>endobj 391 0 obj<</Subtype/Link/Rect[108.0 340.8 187.1 353.8]/Border[0 0 0]/Dest[750 0 R/XYZ null 706 0]>>endobj 392 0 obj<</Subtype/Link/Rect[108.0 327.6 247.6 340.6]/Border[0 0 0]/Dest[750 0 R/XYZ null 582 0]>>endobj 393 0 obj<</Subtype/Link/Rect[108.0 314.4 230.8 327.4]/Border[0 0 0]/Dest[750 0 R/XYZ null 484 0]>>endobj 394 0 obj<</Subtype/Link/Rect[108.0 301.2 205.8 314.2]/Border[0 0 0]/Dest[750 0 R/XYZ null 359 0]>>endobj 395 0 obj<</Subtype/Link/Rect[72.0 288.0 97.0 301.0]/Border[0 0 0]/Dest[753 0 R/XYZ null 503 0]>>endobj 396 0 obj[367 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R 373 0 R 374 0 R 375 0 R 376 0 R 377 0 R 378 0 R 379 0 R 380 0 R 381 0 R 382 0 R 383 0 R 384 0 R 385 0 R 386 0 R 387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 394 0 R 395 0 R ]endobj 397 0 obj<</Dests 398 0 R>>endobj 398 0 obj<</Kids[399 0 R]>>endobj 399 0 obj<</Limits[(aen1054)(winbind)]/Names[(aen1054)400 0 R(aen1059)401 0 R(aen1092)402 0 R(aen1098)403 0 R(aen1137)404 0 R(aen117)405 0 R(aen1180)406 0 R(aen1199)407 0 R(aen1234)408 0 R(aen1243)409 0 R(aen1258)410 0 R(aen1306)411 0 R(aen133)412 0 R(aen1350)413 0 R(aen142)414 0 R(aen1464)415 0 R(aen1490)416 0 R(aen1509)417 0 R(aen1517)418 0 R(aen1525)419 0 R(aen1533)420 0 R(aen1540)421 0 R(aen1576)422 0 R(aen158)423 0 R(aen1589)424 0 R(aen1592)425 0 R(aen1602)426 0 R(aen1652)427 0 R(aen1656)428 0 R(aen1669)429 0 R(aen1676)430 0 R(aen1680)431 0 R(aen1685)432 0 R(aen1689)433 0 R(aen1705)434 0 R(aen1713)435 0 R(aen1717)436 0 R(aen172)437 0 R(aen1720)438 0 R(aen1725)439 0 R(aen1738)440 0 R(aen1752)441 0 R(aen1763)442 0 R(aen177)443 0 R(aen1782)444 0 R(aen18)445 0 R(aen1807)446 0 R(aen181)447 0 R(aen1823)448 0 R(aen1834)449 0 R(aen184)450 0 R(aen1870)451 0 R(aen1892)452 0 R(aen193)453 0 R(aen1939)454 0 R(aen1949)455 0 R(aen1963)456 0 R(aen1965)457 0 R(aen197)458 0 R(aen1980)459 0 R(aen1989)460 0 R(aen1993)461 0 R(aen2009)462 0 R(aen2014)463 0 R(aen2017)464 0 R(aen2022)465 0 R(aen2050)466 0 R(aen207)467 0 R(aen210)468 0 R(aen224)469 0 R(aen246)470 0 R(aen26)471 0 R(aen262)472 0 R(aen278)473 0 R(aen289)474 0 R(aen297)475 0 R(aen309)476 0 R(aen321)477 0 R(aen326)478 0 R(aen334)479 0 R(aen339)480 0 R(aen342)481 0 R(aen354)482 0 R(aen364)483 0 R(aen392)484 0 R(aen4)485 0 R(aen400)486 0 R(aen417)487 0 R(aen424)488 0 R(aen429)489 0 R(aen434)490 0 R(aen455)491 0 R(aen499)492 0 R(aen506)493 0 R(aen526)494 0 R(aen54)495 0 R(aen561)496 0 R(aen58)497 0 R(aen581)498 0 R(aen590)499 0 R(aen601)500 0 R(aen621)501 0 R(aen636)502 0 R(aen650)503 0 R(aen657)504 0 R(aen679)505 0 R(aen72)506 0 R(aen743)507 0 R(aen764)508 0 R(aen78)509 0 R(aen786)510 0 R(aen797)511 0 R(aen8)512 0 R(aen832)513 0 R(aen849)514 0 R(aen860)515 0 R(aen88)516 0 R(aen885)517 0 R(aen893)518 0 R(aen897)519 0 R(aen907)520 0 R(aen910)521 0 R(aen914)522 0 R(aen936)523 0 R(aen990)524 0 R(body.html)525 0 R(cvs-access)526 0 R(domain-security)527 0 R(install)528 0 R(integrate-ms-networks)529 0 R(migration)530 0 R(msdfs)531 0 R(os2)532 0 R(pam)533 0 R(printing)534 0 R(samba-pdc)535 0 R(samba-project-documentation)536 0 R(unix-permissions)537 0 R(winbind)538 0 R]>>endobj 400 0 obj<</D[648 0 R/XYZ null 383 null]>>endobj 401 0 obj<</D[648 0 R/XYZ null 166 null]>>endobj 402 0 obj<</D[654 0 R/XYZ null 706 null]>>endobj 403 0 obj<</D[654 0 R/XYZ null 608 null]>>endobj 404 0 obj<</D[657 0 R/XYZ null 726 null]>>endobj 405 0 obj<</D[546 0 R/XYZ null 266 null]>>endobj 406 0 obj<</D[660 0 R/XYZ null 607 null]>>endobj 407 0 obj<</D[660 0 R/XYZ null 232 null]>>endobj 408 0 obj<</D[663 0 R/XYZ null 359 null]>>endobj 409 0 obj<</D[666 0 R/XYZ null 768 null]>>endobj 410 0 obj<</D[666 0 R/XYZ null 392 null]>>endobj 411 0 obj<</D[672 0 R/XYZ null 739 null]>>endobj 412 0 obj<</D[549 0 R/XYZ null 686 null]>>endobj 413 0 obj<</D[675 0 R/XYZ null 686 null]>>endobj 414 0 obj<</D[549 0 R/XYZ null 509 null]>>endobj 415 0 obj<</D[681 0 R/XYZ null 303 null]>>endobj 416 0 obj<</D[684 0 R/XYZ null 277 null]>>endobj 417 0 obj<</D[687 0 R/XYZ null 482 null]>>endobj 418 0 obj<</D[687 0 R/XYZ null 225 null]>>endobj 419 0 obj<</D[690 0 R/XYZ null 684 null]>>endobj 420 0 obj<</D[690 0 R/XYZ null 446 null]>>endobj 421 0 obj<</D[690 0 R/XYZ null 289 null]>>endobj 422 0 obj<</D[696 0 R/XYZ null 605 null]>>endobj 423 0 obj<</D[549 0 R/XYZ null 332 null]>>endobj 424 0 obj<</D[699 0 R/XYZ null 698 null]>>endobj 425 0 obj<</D[699 0 R/XYZ null 603 null]>>endobj 426 0 obj<</D[699 0 R/XYZ null 274 null]>>endobj 427 0 obj<</D[708 0 R/XYZ null 706 null]>>endobj 428 0 obj<</D[708 0 R/XYZ null 569 null]>>endobj 429 0 obj<</D[708 0 R/XYZ null 246 null]>>endobj 430 0 obj<</D[711 0 R/XYZ null 581 null]>>endobj 431 0 obj<</D[711 0 R/XYZ null 417 null]>>endobj 432 0 obj<</D[711 0 R/XYZ null 292 null]>>endobj 433 0 obj<</D[714 0 R/XYZ null 768 null]>>endobj 434 0 obj<</D[714 0 R/XYZ null 313 null]>>endobj 435 0 obj<</D[717 0 R/XYZ null 673 null]>>endobj 436 0 obj<</D[717 0 R/XYZ null 483 null]>>endobj 437 0 obj<</D[552 0 R/XYZ null 768 null]>>endobj 438 0 obj<</D[717 0 R/XYZ null 332 null]>>endobj 439 0 obj<</D[717 0 R/XYZ null 221 null]>>endobj 440 0 obj<</D[720 0 R/XYZ null 581 null]>>endobj 441 0 obj<</D[720 0 R/XYZ null 298 null]>>endobj 442 0 obj<</D[720 0 R/XYZ null 132 null]>>endobj 443 0 obj<</D[552 0 R/XYZ null 577 null]>>endobj 444 0 obj<</D[723 0 R/XYZ null 619 null]>>endobj 445 0 obj<</D[540 0 R/XYZ null 730 null]>>endobj 446 0 obj<</D[723 0 R/XYZ null 279 null]>>endobj 447 0 obj<</D[552 0 R/XYZ null 505 null]>>endobj 448 0 obj<</D[726 0 R/XYZ null 691 null]>>endobj 449 0 obj<</D[726 0 R/XYZ null 530 null]>>endobj 450 0 obj<</D[552 0 R/XYZ null 394 null]>>endobj 451 0 obj<</D[729 0 R/XYZ null 467 null]>>endobj 452 0 obj<</D[732 0 R/XYZ null 511 null]>>endobj 453 0 obj<</D[555 0 R/XYZ null 739 null]>>endobj 454 0 obj<</D[735 0 R/XYZ null 355 null]>>endobj 455 0 obj<</D[738 0 R/XYZ null 768 null]>>endobj 456 0 obj<</D[741 0 R/XYZ null 730 null]>>endobj 457 0 obj<</D[741 0 R/XYZ null 700 null]>>endobj 458 0 obj<</D[555 0 R/XYZ null 615 null]>>endobj 459 0 obj<</D[741 0 R/XYZ null 348 null]>>endobj 460 0 obj<</D[744 0 R/XYZ null 768 null]>>endobj 461 0 obj<</D[744 0 R/XYZ null 639 null]>>endobj 462 0 obj<</D[747 0 R/XYZ null 706 null]>>endobj 463 0 obj<</D[747 0 R/XYZ null 582 null]>>endobj 464 0 obj<</D[747 0 R/XYZ null 484 null]>>endobj 465 0 obj<</D[747 0 R/XYZ null 359 null]>>endobj 466 0 obj<</D[750 0 R/XYZ null 503 null]>>endobj 467 0 obj<</D[558 0 R/XYZ null 768 null]>>endobj 468 0 obj<</D[558 0 R/XYZ null 683 null]>>endobj 469 0 obj<</D[561 0 R/XYZ null 706 null]>>endobj 470 0 obj<</D[561 0 R/XYZ null 463 null]>>endobj 471 0 obj<</D[540 0 R/XYZ null 593 null]>>endobj 472 0 obj<</D[561 0 R/XYZ null 325 null]>>endobj 473 0 obj<</D[564 0 R/XYZ null 435 null]>>endobj 474 0 obj<</D[564 0 R/XYZ null 285 null]>>endobj 475 0 obj<</D[567 0 R/XYZ null 768 null]>>endobj 476 0 obj<</D[567 0 R/XYZ null 268 null]>>endobj 477 0 obj<</D[570 0 R/XYZ null 210 null]>>endobj 478 0 obj<</D[573 0 R/XYZ null 660 null]>>endobj 479 0 obj<</D[576 0 R/XYZ null 371 null]>>endobj 480 0 obj<</D[576 0 R/XYZ null 260 null]>>endobj 481 0 obj<</D[579 0 R/XYZ null 768 null]>>endobj 482 0 obj<</D[579 0 R/XYZ null 529 null]>>endobj 483 0 obj<</D[582 0 R/XYZ null 633 null]>>endobj 484 0 obj<</D[585 0 R/XYZ null 581 null]>>endobj 485 0 obj<</D[537 0 R/XYZ null 647 null]>>endobj 486 0 obj<</D[585 0 R/XYZ null 304 null]>>endobj 487 0 obj<</D[588 0 R/XYZ null 594 null]>>endobj 488 0 obj<</D[588 0 R/XYZ null 271 null]>>endobj 489 0 obj<</D[591 0 R/XYZ null 753 null]>>endobj 490 0 obj<</D[591 0 R/XYZ null 639 null]>>endobj 491 0 obj<</D[594 0 R/XYZ null 706 null]>>endobj 492 0 obj<</D[597 0 R/XYZ null 179 null]>>endobj 493 0 obj<</D[600 0 R/XYZ null 726 null]>>endobj 494 0 obj<</D[603 0 R/XYZ null 706 null]>>endobj 495 0 obj<</D[540 0 R/XYZ null 178 null]>>endobj 496 0 obj<</D[606 0 R/XYZ null 673 null]>>endobj 497 0 obj<</D[543 0 R/XYZ null 739 null]>>endobj 498 0 obj<</D[609 0 R/XYZ null 706 null]>>endobj 499 0 obj<</D[609 0 R/XYZ null 525 null]>>endobj 500 0 obj<</D[609 0 R/XYZ null 348 null]>>endobj 501 0 obj<</D[612 0 R/XYZ null 686 null]>>endobj 502 0 obj<</D[612 0 R/XYZ null 443 null]>>endobj 503 0 obj<</D[612 0 R/XYZ null 187 null]>>endobj 504 0 obj<</D[615 0 R/XYZ null 673 null]>>endobj 505 0 obj<</D[615 0 R/XYZ null 232 null]>>endobj 506 0 obj<</D[543 0 R/XYZ null 379 null]>>endobj 507 0 obj<</D[621 0 R/XYZ null 594 null]>>endobj 508 0 obj<</D[624 0 R/XYZ null 730 null]>>endobj 509 0 obj<</D[543 0 R/XYZ null 268 null]>>endobj 510 0 obj<</D[624 0 R/XYZ null 302 null]>>endobj 511 0 obj<</D[627 0 R/XYZ null 693 null]>>endobj 512 0 obj<</D[537 0 R/XYZ null 616 null]>>endobj 513 0 obj<</D[630 0 R/XYZ null 463 null]>>endobj 514 0 obj<</D[633 0 R/XYZ null 686 null]>>endobj 515 0 obj<</D[633 0 R/XYZ null 302 null]>>endobj 516 0 obj<</D[546 0 R/XYZ null 768 null]>>endobj 517 0 obj<</D[636 0 R/XYZ null 686 null]>>endobj 518 0 obj<</D[636 0 R/XYZ null 496 null]>>endobj 519 0 obj<</D[636 0 R/XYZ null 385 null]>>endobj 520 0 obj<</D[636 0 R/XYZ null 247 null]>>endobj 521 0 obj<</D[636 0 R/XYZ null 149 null]>>endobj 522 0 obj<</D[639 0 R/XYZ null 713 null]>>endobj 523 0 obj<</D[642 0 R/XYZ null 768 null]>>endobj 524 0 obj<</D[645 0 R/XYZ null 730 null]>>endobj 525 0 obj<</D[543 0 R/XYZ null 698 null]>>endobj 526 0 obj<</D[747 0 R/XYZ null 798 null]>>endobj 527 0 obj<</D[645 0 R/XYZ null 798 null]>>endobj 528 0 obj<</D[540 0 R/XYZ null 798 null]>>endobj 529 0 obj<</D[561 0 R/XYZ null 798 null]>>endobj 530 0 obj<</D[642 0 R/XYZ null 768 null]>>endobj 531 0 obj<</D[603 0 R/XYZ null 798 null]>>endobj 532 0 obj<</D[741 0 R/XYZ null 798 null]>>endobj 533 0 obj<</D[594 0 R/XYZ null 798 null]>>endobj 534 0 obj<</D[624 0 R/XYZ null 798 null]>>endobj 535 0 obj<</D[654 0 R/XYZ null 798 null]>>endobj 536 0 obj<</D[537 0 R/XYZ null 753 null]>>endobj 537 0 obj<</D[609 0 R/XYZ null 798 null]>>endobj 538 0 obj<</D[708 0 R/XYZ null 798 null]>>endobj 539 0 obj<</Type/Pages/MediaBox[0 0 595 792]/Count 75/Kids[540 0 R 756 0 R 759 0 R 762 0 R 543 0 R 546 0 R 549 0 R 552 0 R 555 0 R 558 0 R 561 0 R 564 0 R 567 0 R 570 0 R 573 0 R 576 0 R 579 0 R 582 0 R 585 0 R 588 0 R 591 0 R 594 0 R 597 0 R 600 0 R 603 0 R 606 0 R 609 0 R 612 0 R 615 0 R 618 0 R 621 0 R 624 0 R 627 0 R 630 0 R 633 0 R 636 0 R 639 0 R 642 0 R 645 0 R 648 0 R 651 0 R 654 0 R 657 0 R 660 0 R 663 0 R 666 0 R 669 0 R 672 0 R 675 0 R 678 0 R 681 0 R 684 0 R 687 0 R 690 0 R 693 0 R 696 0 R 699 0 R 702 0 R 705 0 R 708 0 R 711 0 R 714 0 R 717 0 R 720 0 R 723 0 R 726 0 R 729 0 R 732 0 R 735 0 R 738 0 R 741 0 R 744 0 R 747 0 R 750 0 R 753 0 R ]>>endobj 540 0 obj<</Type/Page/Parent 539 0 R/Contents 541 0 R/Resources<</ProcSet[/PDF/Text]/Font<</F4 7 0 R/F6 9 0 R/F8 10 0 R/F9 11 0 R>>>>/Annots 17 0 R>>endobj 541 0 obj<</Length 542 0 R/Filter/FlateDecode>>stream xuSn0+rrT&%Yv|tE)iU]VE!hޛѯHB%1M趈n+ij\|]U[r[ݽ*v!UrO}=񌓇TCWd"ٛͦm#q*C3EiQ;!