annotate anoclaims.php @ 4:c642254dc9ee draft default tip

Fixed transfer chain generation and construction of empty updates, some small improvements in tools
author Ivo Smits <Ivo@UCIS.nl>
date Sat, 22 Nov 2014 18:18:52 +0100
parents caa68b502313
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
1 <?php
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
2 require_once './marccore.php';
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
3 error_reporting(E_ALL);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
4 if (!isset($argv)) $argv = $_SERVER['argv'];
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
5 $argi = 1;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
6 $database = new MARCDatabaseFlatFile('anoclaims.db');
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
7 $key = NULL;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
8 if (file_exists('anoclaims.key')) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
9 $key = file_get_contents('anoclaims.key');
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
10 if (strlen($key) != 32) $key = NULL;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
11 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
12 switch (strtoupper($argv[$argi++])) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
13 case 'REGISTER':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
14 if (is_null($key)) $key = randombytes(32);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
15 $label = chr(0).nacl_crypto_sign_ed25519_keypair($key, $key);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
16 $resource = array('label' => $label, 'value' => array('owner' => $argv[$argi++]));
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
17 if (!$database->UpdateResource($resource, $key)) throw new Exception('Could not update resource');
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
18 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
19 case 'CLAIM':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
20 if (is_null($key)) throw new Exception('Key not found');
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
21 $label = argtolabel($argv, $argi);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
22 $resource = $database->GetResource($label);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
23 if (!$resource) $resource = array('label' => $label, 'value' => array());
1
caa68b502313 Added the MARC DNS server (and small fixes in marcus and anoclaims)
Ivo Smits <Ivo@UCIS.nl>
parents: 0
diff changeset
24 else $resource = $resource->ToArray();
0
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
25 if (!$database->UpdateResource($resource, $key)) throw new Exception('Could not update resource');
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
26 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
27 case 'SETNS':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
28 if (is_null($key)) throw new Exception('Key not found');
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
29 $label = argtolabel($argv, $argi);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
30 $resource = $database->GetResource($label);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
31 if (!$resource) throw new Exception('Resource is not registered');
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
32 if (!is_array($resource['value'])) $resource['value'] = array();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
33 if (!isset($resource['value']) || !is_array($resource['value'])) $resource['value'] = array();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
34 if (!isset($resource['value']['ns']) || !is_array($resource['value']['ns'])) $resource['value']['ns'] = array();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
35 $nsname = $argv[$argi++];
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
36 if (strlen($nsname) && $nsname[strlen($nsname)-1] != '.') $resource['value']['ns'] = array($nsname => array());
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
37 else $resource['value']['ns'] = array($nsname => $argv[$argi++]);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
38 if (!$database->UpdateResource($resource, $key)) throw new Exception('Could not update resource');
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
39 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
40 case 'SYNC':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
41 $database->SyncHTTP($argv[$argi++]);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
42 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
43 case 'HELP':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
44 print_help();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
45 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
46 default:
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
47 throw new Exception('Unknown operation '.$argv[$argi-1]);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
48 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
49 $database->Save();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
50 $database->Close();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
51
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
52 function argtolabel($argv, &$argi) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
53 $t = $argv[$argi++];
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
54 if (preg_match('/^AS[0-9]{1-9}$/', $t)) return chr(3).marc_decode_int32be(substr($argv[$argi++], 2));
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
55 if (preg_match('_^[0-9]{1-3}\.[0-9]{1-3}\.[0-9]{1-3}\.[0-9]{1-3}/[0-9]{1-2}$_', $t)) return ipv4tolabel($t);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
56 if (preg_match('_^(((?=.*(::))(?!.*\3.+\3))\3?|([\dA-F]{1,4}(\3|:\b|$)|\2))(?4){5}((?4){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})\z/[0-9]{1-3}_i', $t)) return ipv6tolabel($t);
4
c642254dc9ee Fixed transfer chain generation and construction of empty updates, some small improvements in tools
Ivo Smits <Ivo@UCIS.nl>
parents: 1
diff changeset
57 if (preg_match('/^[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z0-9]{2,6}$/i', $t)) return chr(4).strtolower(trim($t, '.'));
0
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
58 throw new Exception('Could not detect label type for '.$t);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
59 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
60 function ipnettolabel($s) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
61 $ip = inet_pton(strtok($s, '/'));
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
62 $pl = intval(strtok('/'));
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
63 if ($pl == 0) throw new Exception('Invalid IP network specified');
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
64 if (strlen($ip) == 4) return chr(1).$ip.chr($pl);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
65 if (strlen($ip) == 16) return chr(2).$ip.chr($pl);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
66 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
67 function randombytes($n) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
68 $b = '';
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
69 $file = fopen('/dev/urandom', 'r');
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
70 for ($i = 0; $i < $n; $i++) $b .= fgetc($file);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
71 fclose($file);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
72 return $b;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
73 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
74
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
75 function print_help() {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
76 echo 'Usage: anoclaims.php [operation] [arguments]
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
77 register [ownername] - generate a key pair and register it with specified owner name
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
78 claim [resource] - claim a resource (eg 1.2.3.0/24, fd63:1e39:6f73:0203::/64, test.ano, AS1234)
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
79 setns [resource] [nsname]. - define an external DNS server for a domain name or IP network (don\'t forget the .)
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
80 setns [resource] [nsname] [nsglue] - define an in-zone DNS server for a domain name or IP network with glue record
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
81 sync [server] - synchronize the local database with a remote HTTP server (eg http://marc.ucis.ano)
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
82 ';
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
83 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
84