""" Fix problems in asns.csv generated from RIPE's database. RIPE's database contains inconsistancies, overlaps, and format errors that make it impossible to feed the output of ripe-to-csv.awk directly into testbed-rootcert.py without OpenSSL rejecting the resulting root.conf. This script takes a brute force approach to fixing this: it converts all ASNs to range form, runs the resulting file through the unix sort program to put the data into canonical order, then reads it back, merging overlaps, and writing the result in a form acceptable to testbed-rootcert.py. Since we're doing all this anyway, the script also merges adjacent blocks. Ordinarily, it would be dangerous to have the same program act as both the source and sink of a pipeline, particularly for such a large data set, as the chance of deadlock would approach 100%, but in this case we know that the sort program must consume and buffer (somehow) all of its input before writing a single line of output, so a single script can safely act as a filter both before and after sort. $Id$ Copyright (C) 2010 Internet Systems Consortium ("ISC") Permission to use, copy, modify, and distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. """ import sys, subprocess sorter = subprocess.Popen(("sort", "-T.", "-n"), stdin = subprocess.PIPE, stdout = subprocess.PIPE) for line in sys.stdin: handle, asn = line.split() if "-" in asn: range_min, range_max = asn.split("-") else: range_min, range_max = asn, asn sorter.stdin.write("%d %d\n" % (long(range_min), long(range_max))) sorter.stdin.close() prev_min = None prev_max = None def show(): if prev_min and prev_max: sys.stdout.write("x\t%s-%s\n" % (prev_min, prev_max)) for line in sorter.stdout: this_min, this_max = line.split() this_min = long(this_min) this_max = long(this_max) if prev_min and prev_max and prev_max + 1 >= this_min: prev_min = min(prev_min, this_min) prev_max = max(prev_max, this_max) else: show() prev_min = this_min prev_max = this_max show() sorter.stdout.close() sys.exit(sorter.wait()) n class='sha1'>92455ae8
6f45f4a6
b2b0d58c
6f45f4a6

































































































































































































1ebe223b


































































































































































































6f45f4a6













































































































































1ebe223b


6f45f4a6










































































































































































1ebe223b


6f45f4a6

















































































































































































1ebe223b


6f45f4a6




























































































































1ebe223b


6f45f4a6










































































































































1ebe223b


6f45f4a6













































































































1ebe223b









b2b0d58c















































































































































































































19244689
92455ae8






















































































19244689
383955d4
b2b0d58c
19244689







































































































































































b2b0d58c















































6f45f4a6



































f368d594
c027bd7e

efef2e92

1ebe223b
0474e00d


b2b0d58c


















































9d316732

6f45f4a6























99f5e0b7
1e082efc
f368d594
c027bd7e

efef2e92


2262ef7d


411bf032
0236cefb
6f45f4a6
76a7d661
0474e00d

86a36ddd
3b68c41d

b2b0d58c
















































f368d594
55570d2e


85750753




5fd1f7c3
85750753
5fd1f7c3
85750753
b13f104f
4c49b59e
6996eaa8
464e28c6




6996eaa8
464e28c6
130b28c5
c027bd7e

f2f51389
68449992
efef2e92
e555b8f2
2262ef7d


411bf032

0236cefb
68449992
76a7d661


68449992
6062493d
68449992
6062493d
0474e00d
e123d08c
b2b0d58c




















































879fe502



0236cefb


411bf032



2262ef7d




e555b8f2
2262ef7d
e555b8f2
2262ef7d
fe77a3c2
2262ef7d
fe77a3c2
2262ef7d
fe77a3c2
411bf032
fe77a3c2
411bf032

2262ef7d
411bf032
76a7d661


2262ef7d
1ebe223b

0474e00d


191fa32b

9d316732

e123d08c
b2b0d58c











































2262ef7d


e555b8f2
2262ef7d
e555b8f2
2262ef7d
411bf032
76a7d661




2262ef7d
76a7d661
2262ef7d
76a7d661
2262ef7d
76a7d661
2262ef7d
76a7d661
2262ef7d
411bf032
2262ef7d
411bf032
2262ef7d
76a7d661
2262ef7d
76a7d661


1ebe223b

86a36ddd
3b68c41d
4421a6a5

e123d08c
b2b0d58c
















































411bf032
76a7d661





411bf032
76a7d661
411bf032
76a7d661
2262ef7d
76a7d661
2262ef7d
76a7d661
0474e00d




191fa32b


2ec52f35
09b554c0
0474e00d
09b554c0
9d316732


0474e00d
191fa32b


9d316732





4421a6a5
9d316732
b2b0d58c








183ff29b

b2b0d58c














9d316732
b2b0d58c










9d316732
b2b0d58c
183ff29b
b2b0d58c














































19244689


183ff29b

b2b0d58c


















19244689
b2b0d58c
19244689
183ff29b


b2b0d58c



















19244689
b2b0d58c














































183ff29b
b2b0d58c






















e123d08c


b2b0d58c

























e123d08c

183ff29b

b2b0d58c





183ff29b
b2b0d58c





183ff29b
b2b0d58c


















9d316732
4421a6a5
b2b0d58c


e123d08c
183ff29b

b2b0d58c


19244689
b2b0d58c








183ff29b
b2b0d58c








e123d08c
b2b0d58c













183ff29b
b2b0d58c
























19244689
b2b0d58c


183ff29b
b2b0d58c





183ff29b
b2b0d58c





















19244689

183ff29b
b2b0d58c






183ff29b
b2b0d58c



























183ff29b
b2b0d58c



























































































































































































































































































































































































































































































































































































































































a73acf54























































































b2b0d58c













6f45f4a6
b2b0d58c

6f45f4a6



b2b0d58c

6f45f4a6

b2b0d58c













9d316732
b2b0d58c











0474e00d
b2b0d58c
















1e082efc
b2b0d58c




68449992
b2b0d58c

























68449992
b2b0d58c






















2262ef7d
b2b0d58c







76a7d661
b2b0d58c





92426bbc
b2b0d58c

19244689





b2b0d58c
0236cefb
b2b0d58c

96831d5e




b2b0d58c
9d316732
b2b0d58c

9d316732







b2b0d58c
9d316732
b2b0d58c

9d316732

b2b0d58c
9d316732
b2b0d58c








9d316732
b2b0d58c

9d316732










b2b0d58c
92426bbc
b2b0d58c







92426bbc
b2b0d58c








92426bbc
b2b0d58c





c027bd7e
b2b0d58c

9d316732
b2b0d58c
c027bd7e
b2b0d58c

9d316732














b2b0d58c
83999638
b2b0d58c






9d316732
b2b0d58c
83999638
b2b0d58c

9d316732









b2b0d58c
5fd1f7c3
b2b0d58c

92455ae8

b2b0d58c
83999638
b2b0d58c








83999638
b2b0d58c

92455ae8



b2b0d58c
83999638
b2b0d58c











0474e00d
b2b0d58c








83999638
b2b0d58c

92455ae8










b2b0d58c