annotate marcus.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 5c8c4fa95803
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
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
4 error_reporting(E_ALL);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
5
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
6 if (!isset($argv)) $argv = $_SERVER['argv'];
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
7 $argi = 1;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
8
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
9 class FilteredResourceIterator implements Iterator {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
10 private $source, $filtertype, $filtervalue;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
11 public function __construct($source, $filtertype, $filtervalue) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
12 $this->source = $source;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
13 $this->filtertype = $filtertype;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
14 $this->filtervalue = $filtervalue;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
15 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
16 public function current() { $r = $this->source->current(); return $r; }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
17 public function key() { return $this->source->key(); }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
18 public function valid() { return $this->source->valid(); }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
19 public function next() { $this->source->next(); $this->findnext(); }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
20 public function rewind() { $this->source->rewind(); $this->findnext(); }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
21 private function findnext() {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
22 while ($this->source->valid()) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
23 $c = $this->source->current();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
24 if ($this->filter($c)) break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
25 $this->source->next();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
26 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
27 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
28 private function filter($c) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
29 switch ($this->filtertype) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
30 case 'OWNER': return isset($c['value']['owner']) && is_scalar($c['value']['owner']) && strcasecmp($c['value']['owner'], $this->filtervalue) == 0;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
31 case 'KEY': return $c['key'] == hex2bin($this->filtervalue);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
32 case 'DOMEXT': return ord($c['label'][0]) == 4 && substr_compare($c['label'], $this->filtervalue, -strlen($this->filtervalue), strlen($this->filtervalue), TRUE) == 0;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
33 default: return FALSE;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
34 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
35 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
36 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
37
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
38 $database = new MARCDatabaseFlatFile();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
39 $key = NULL;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
40 $resource = NULL;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
41 $reschanged = FALSE;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
42
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
43 while ($argi < count($argv)) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
44 switch (strtoupper($argv[$argi++])) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
45 case 'OPEN':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
46 if ($reschanged) echo "Warning: selected resource has not been updated.\n";
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
47 if ($database->IsChanged()) echo "Warning: database has unsaved changes.\n";
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
48 $database->Open($argv[$argi++]);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
49 $reschanged = FALSE;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
50 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
51 case 'OPENSQLITE':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
52 $database = new MARCDatabaseSQLite($argv[$argi++]);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
53 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
54 case 'OPENDBA':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
55 $database = new MARCDatabaseDBA($argv[$argi++]);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
56 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
57 case 'SAVE':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
58 $database->Save();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
59 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
60 case 'SAVEAS':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
61 $database->SaveAs($argv[$argi]);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
62 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
63 case 'SYNC':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
64 $database->SyncHTTP($argv[$argi++]);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
65 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
66 case 'KEY':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
67 switch (strtoupper($argv[$argi++])) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
68 case 'CREATE':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
69 $key = array('store' => TRUE);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
70 $key['pk'] = nacl_crypto_sign_ed25519_keypair($key['sk'], randombytes(32));
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
71 echo 'Created public key '.bin2hex($key['pk'])."\n";
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
72 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
73 case 'FORGET':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
74 $key['store'] = FALSE;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
75 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
76 case 'STORE':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
77 $key['store'] = TRUE;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
78 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
79 case 'USE':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
80 $key = array('store' => FALSE, 'pk' => $resource['key']);
3
5c8c4fa95803 Added support for transfer chaining and some bugfixes
Ivo Smits <Ivo@UCIS.nl>
parents: 1
diff changeset
81 if (isset($resource['value']['seckey'])) $key['locked'] = $resource['value']['seckey'];
0
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
82 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
83 case 'IMPORT':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
84 $key = array('store' => FALSE);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
85 $key['pk'] = nacl_crypto_sign_ed25519_keypair($key['sk'], hex2bin($argv[$argi++]));
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
86 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
87 case 'UNLOCK':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
88 if (!isset($key['locked'])) throw new Exception('The key is not locked');
3
5c8c4fa95803 Added support for transfer chaining and some bugfixes
Ivo Smits <Ivo@UCIS.nl>
parents: 1
diff changeset
89 if (!is_array($key['locked']) || !isset($key['locked']['key'])) throw new Exception('The locked key is invalid');
5c8c4fa95803 Added support for transfer chaining and some bugfixes
Ivo Smits <Ivo@UCIS.nl>
parents: 1
diff changeset
90 $rounds = isset($key['locked']['rounds']) ? intval($key['locked']['rounds']) : 0;
5c8c4fa95803 Added support for transfer chaining and some bugfixes
Ivo Smits <Ivo@UCIS.nl>
parents: 1
diff changeset
91 $ret = str_repeat(chr(0), 64);
5c8c4fa95803 Added support for transfer chaining and some bugfixes
Ivo Smits <Ivo@UCIS.nl>
parents: 1
diff changeset
92 for ($i = 0; $i < $rounds; $i++) $ret = hash('sha512', $ret.$argv[$argi].$key['pk'], TRUE);
5c8c4fa95803 Added support for transfer chaining and some bugfixes
Ivo Smits <Ivo@UCIS.nl>
parents: 1
diff changeset
93 $argi++;
5c8c4fa95803 Added support for transfer chaining and some bugfixes
Ivo Smits <Ivo@UCIS.nl>
parents: 1
diff changeset
94 $ret = substr($key['locked'] ^ $ret, 0, 32);
5c8c4fa95803 Added support for transfer chaining and some bugfixes
Ivo Smits <Ivo@UCIS.nl>
parents: 1
diff changeset
95 $ret = nacl_crypto_sign_ed25519_keypair($key['sk'], $ret);
0
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
96 if ($ret != $key['pk']) throw new Exception('Key password is not valid');
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
97 echo 'Unlocked public key '.bin2hex($key['pk'])."\n";
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
98 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
99 default:
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
100 throw new Exception('Unknown key operation '.$argv[$argi-1]);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
101 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
102 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
103 case 'LIST':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
104 foreach ($database->GetResources() as $ret) echo labeltoname($ret['label'])."\n";
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
105 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
106 case 'FIND':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
107 foreach (filterresources($database->GetResources(), $argv, $argi) as $ret) echo labeltoname($ret['label'])."\n";
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
108 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
109 case 'DELETE':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
110 $database->DeleteResource($resource['label']);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
111 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
112 case 'DUMP':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
113 dumpresource($resource);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
114 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
115 case 'UPDATE':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
116 if (!isset($resource['key'])) $resource['key'] = $key['pk'];
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
117 unset($resource['serial']);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
118 $res = $database->UpdateResource($resource, $key['sk']);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
119 if (!$res) throw new Exception('Could not update resource');
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
120 $resource = $res->ToArray();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
121 $reschanged = FALSE;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
122 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
123 case 'SET':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
124 switch (strtoupper($argv[$argi++])) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
125 case 'OWNER':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
126 if (!isset($resource['value']) || !is_array($resource['value'])) $resource['value'] = array();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
127 $resource['value']['owner'] = $argv[$argi++];
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
128 $reschanged = TRUE;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
129 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
130 case 'DESC':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
131 case 'DESCR':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
132 case 'DESCRIPTION':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
133 if (!isset($resource['value']) || !is_array($resource['value'])) $resource['value'] = array();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
134 $resource['value']['descr'] = $argv[$argi++];
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
135 $reschanged = TRUE;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
136 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
137 case 'PWAUTH':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
138 if (!isset($key['sk'])) throw new Exception('The key is not available');
3
5c8c4fa95803 Added support for transfer chaining and some bugfixes
Ivo Smits <Ivo@UCIS.nl>
parents: 1
diff changeset
139 $rounds = 5000;
5c8c4fa95803 Added support for transfer chaining and some bugfixes
Ivo Smits <Ivo@UCIS.nl>
parents: 1
diff changeset
140 $ret = str_repeat(chr(0), 64);
5c8c4fa95803 Added support for transfer chaining and some bugfixes
Ivo Smits <Ivo@UCIS.nl>
parents: 1
diff changeset
141 for ($i = 0; $i < $rounds; $i++) $ret = hash('sha512', $ret.$argv[$argi].$key['pk'], TRUE);
5c8c4fa95803 Added support for transfer chaining and some bugfixes
Ivo Smits <Ivo@UCIS.nl>
parents: 1
diff changeset
142 $argi++;
5c8c4fa95803 Added support for transfer chaining and some bugfixes
Ivo Smits <Ivo@UCIS.nl>
parents: 1
diff changeset
143 $key['locked'] = array('rounds' => $rounds, 'key' => substr($key['sk'] ^ $hash, 0, 32));
0
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
144 if (!isset($resource['value']) || !is_array($resource['value'])) $resource['value'] = array();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
145 $resource['value']['seckeyenc'] = $key['locked'];
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
146 $reschanged = TRUE;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
147 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
148 case 'TRANSFER':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
149 $ret = $argv[$argi++];
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
150 $resource['value']['transfer'] = (strtolower($ret) == 'any') ? '' : hex2bin($ret);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
151 $reschanged = TRUE;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
152 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
153 default:
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
154 throw new Exception('Unknown set operation '.$argv[$argi-1]);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
155 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
156 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
157 case 'ADD':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
158 switch (strtoupper($argv[$argi++])) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
159 case 'NS':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
160 if (!isset($resource['value']) || !is_array($resource['value'])) $resource['value'] = array();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
161 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
162 $nsname = $argv[$argi++];
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
163 $nsglue = (strlen($nsname) && $nsname[strlen($nsname)-1] != '.') ? $argv[$argi++] : NULL;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
164 if (!isset($resource['value']['ns'][$nsname]) || !is_array($resource['value']['ns'][$nsname])) $resource['value']['ns'][$nsname] = array();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
165 if ($nsglue !== NULL) $resource['value']['ns'][$nsname][] = $nsglue;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
166 $reschanged = TRUE;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
167 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
168 default:
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
169 throw new Exception('Unknown add operation '.$argv[$argi-1]);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
170 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
171 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
172 case 'RESET':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
173 switch (strtoupper($argv[$argi++])) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
174 case 'OWNER':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
175 if (!is_array($resource['value'])) $resource['value'] = array();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
176 unset($resource['value']['owner']);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
177 $reschanged = TRUE;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
178 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
179 case 'DESC':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
180 case 'DESCR':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
181 case 'DESCRIPTION':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
182 if (!is_array($resource['value'])) $resource['value'] = array();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
183 unset($resource['value']['descr']);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
184 $reschanged = TRUE;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
185 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
186 case 'PWAUTH':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
187 if (!is_array($resource['value'])) $resource['value'] = array();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
188 unset($resource['value']['seckeyenc']);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
189 $reschanged = TRUE;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
190 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
191 case 'NS':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
192 if (!is_array($resource['value'])) $resource['value'] = array();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
193 unset($resource['value']['ns']);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
194 $reschanged = TRUE;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
195 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
196 case 'VALUE':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
197 $resource['value'] = array();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
198 $reschanged = TRUE;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
199 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
200 case 'TRANSFER':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
201 unset($resource['transfer']);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
202 $reschanged = TRUE;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
203 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
204 case 'EXPIRATION':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
205 unset($resource['expiration']);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
206 $reschanged = TRUE;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
207 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
208 default:
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
209 throw new Exception('Unknown reset operation '.$argv[$argi-1]);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
210 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
211 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
212 case 'CREATE':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
213 if ($reschanged) echo "Warning: selected resource has not been updated.\n";
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
214 $reschanged = TRUE;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
215 $resource = array('label' => argtolabel($argv, $argi));
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
216 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
217 case 'SELECT':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
218 if ($reschanged) echo "Warning: selected resource has not been updated.\n";
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
219 $reschanged = FALSE;
4
c642254dc9ee Fixed transfer chain generation and construction of empty updates, some small improvements in tools
Ivo Smits <Ivo@UCIS.nl>
parents: 3
diff changeset
220 if (strcasecmp($argv[$argi], 'TRANSFERCHAIN') == 0) {
c642254dc9ee Fixed transfer chain generation and construction of empty updates, some small improvements in tools
Ivo Smits <Ivo@UCIS.nl>
parents: 3
diff changeset
221 $resource = MARCUpdate::Decode($resource['transferchain']);
c642254dc9ee Fixed transfer chain generation and construction of empty updates, some small improvements in tools
Ivo Smits <Ivo@UCIS.nl>
parents: 3
diff changeset
222 if (!$resource) echo "Warning: failed to decode chained transfer data.\n";
c642254dc9ee Fixed transfer chain generation and construction of empty updates, some small improvements in tools
Ivo Smits <Ivo@UCIS.nl>
parents: 3
diff changeset
223 $argi++;
c642254dc9ee Fixed transfer chain generation and construction of empty updates, some small improvements in tools
Ivo Smits <Ivo@UCIS.nl>
parents: 3
diff changeset
224 } else {
c642254dc9ee Fixed transfer chain generation and construction of empty updates, some small improvements in tools
Ivo Smits <Ivo@UCIS.nl>
parents: 3
diff changeset
225 $label = argtolabel($argv, $argi);
c642254dc9ee Fixed transfer chain generation and construction of empty updates, some small improvements in tools
Ivo Smits <Ivo@UCIS.nl>
parents: 3
diff changeset
226 $resource = $database->GetResource($label);
c642254dc9ee Fixed transfer chain generation and construction of empty updates, some small improvements in tools
Ivo Smits <Ivo@UCIS.nl>
parents: 3
diff changeset
227 if (!$resource) echo "Warning: resource ".labeltoname($label)." does not exist.\n";
c642254dc9ee Fixed transfer chain generation and construction of empty updates, some small improvements in tools
Ivo Smits <Ivo@UCIS.nl>
parents: 3
diff changeset
228 }
c642254dc9ee Fixed transfer chain generation and construction of empty updates, some small improvements in tools
Ivo Smits <Ivo@UCIS.nl>
parents: 3
diff changeset
229 if ($resource) $resource = $resource->ToArray();
0
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
230 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
231 case 'HELP':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
232 print_help();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
233 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
234 default:
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
235 throw new Exception('Unknown operation '.$argv[$argi-1]);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
236 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
237 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
238 if ($reschanged) echo "Warning: selected resource has not been updated.\n";
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
239 if ($database->IsChanged()) echo "Warning: database has unsaved changes.\n";
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
240 $database->Close();
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
241
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
242 function filterresources($iterator, $argv, &$argi) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
243 $filtertype = strtoupper($argv[$argi++]);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
244 switch ($filtertype) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
245 case 'OWNER':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
246 case 'KEY':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
247 case 'DOMEXT':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
248 $filtervalue = $argv[$argi++];
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
249 break;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
250 default:
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
251 throw new Exception('Unknown filter type '.$t);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
252 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
253 return new FilteredResourceIterator($iterator, $filtertype, $filtervalue);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
254 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
255 function argtolabel($argv, &$argi) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
256 $t = $argv[$argi++];
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
257 switch (strtoupper($t)) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
258 case 'LABEL': return hex2bin($argv[$argi++]);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
259 case 'CURRENTKEY': return chr(0).$GLOBALS['key']['pk'];
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
260 case 'RESOURCEKEY': return chr(0).$GLOBALS['resource']['key'];
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
261 case 'KEY': return chr(0).hex2bin($argv[$argi++]);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
262 case 'IP':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
263 case 'IP4':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
264 case 'IPV4':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
265 case 'IP6':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
266 case 'IPV6': return ipnettolabel($argv[$argi++]);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
267 case 'AS': return chr(3).marc_decode_int32be($argv[$argi++]);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
268 case 'DOM':
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
269 case 'DOMAIN': return chr(4).strtolower(trim($argv[$argi++], '.'));
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
270 default:
1
caa68b502313 Added the MARC DNS server (and small fixes in marcus and anoclaims)
Ivo Smits <Ivo@UCIS.nl>
parents: 0
diff changeset
271 if (preg_match('/^AS[0-9]{1-9}$/', $t)) return chr(3).marc_decode_int32be(substr($t, 2));
caa68b502313 Added the MARC DNS server (and small fixes in marcus and anoclaims)
Ivo Smits <Ivo@UCIS.nl>
parents: 0
diff changeset
272 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 ipnettolabel($t);
caa68b502313 Added the MARC DNS server (and small fixes in marcus and anoclaims)
Ivo Smits <Ivo@UCIS.nl>
parents: 0
diff changeset
273 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 ipnettolabel($t);
0
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
274 if (preg_match('/^[a-f0-9]{64}$/i', $t)) return chr(0).hex2bin($t);
4
c642254dc9ee Fixed transfer chain generation and construction of empty updates, some small improvements in tools
Ivo Smits <Ivo@UCIS.nl>
parents: 3
diff changeset
275 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
276 throw new Exception('Could not detect label type for '.$t);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
277 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
278 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
279 function ipnettolabel($s) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
280 $ip = inet_pton(strtok($s, '/'));
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
281 $pl = intval(strtok('/'));
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
282 if ($pl == 0) throw new Exception('Invalid IP network specified');
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
283 if (strlen($ip) == 4) return chr(1).$ip.chr($pl);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
284 if (strlen($ip) == 16) return chr(2).$ip.chr($pl);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
285 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
286 function labeltoname($l) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
287 switch (ord($l)) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
288 case 0: return 'KEY '.bin2hex(substr($l, 1));
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
289 case 1: if (strlen($l) == 6) return 'IPv4 '.inet_ntop(substr($l, 1, 4)).'/'.ord($l[5]); else return 'LABEL '.bin2hex($l);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
290 case 2: if (strlen($l) == 18) return 'IPv6 '.inet_ntop(substr($l, 1, 16)).'/'.ord($l[17]); else return 'LABEL '.bin2hex($l);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
291 case 3: if (strlen($l) == 5) return 'AS '.marc_decode_int32be(substr($l, 1, 4)); else return 'LABEL '.bin2hex($l);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
292 case 4: if (strlen($l) > 1) return 'DOM '.substr($l, 1); else return 'LABEL '.bin2hex($l);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
293 default: return 'LABEL '.bin2hex($l);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
294 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
295 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
296 function dumpresource($r, $p = '') {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
297 if (is_null($r)) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
298 echo "NULL\n";
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
299 } else if (is_string($r)) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
300 $bin = FALSE;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
301 for ($i = 0; $i < strlen($r); $i++) $bin |= ord($r[$i]) < 32 || ord($r[$i]) > 126;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
302 if ($bin) echo '0x'.bin2hex($r)."\n";
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
303 else echo '"'.$r.'"'."\n";
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
304 } else if (is_scalar($r)) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
305 echo $r."\n";
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
306 } else if (is_array($r)) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
307 echo "array(\n";
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
308 foreach ($r as $key => $value) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
309 echo $p.' ['.$key.'] => ';
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
310 dumpresource($value, $p.' ');
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
311 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
312 echo $p." )\n";
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
313 } else {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
314 print_r($r);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
315 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
316 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
317 function randombytes($n) {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
318 $b = '';
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
319 $file = fopen('/dev/urandom', 'r');
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
320 for ($i = 0; $i < $n; $i++) $b .= fgetc($file);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
321 fclose($file);
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
322 return $b;
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
323 }
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
324
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
325 function print_help() {
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
326 echo 'Usage: marcus.php [operation] [arguments] [operation] [arguments]...
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
327 open [filename.mdb] - opens the specified database file
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
328 save - saves the current database file
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
329 saveas [filename.mdb] - saves the current data to a new databse file
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
330 sync [url] - synchronize database with remote server
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
331 key create - create a new key pair
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
332 key forget - do not store the current key pair in the local database
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
333 key store - store the current key pair in the local database
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
334 key use - use the key pair from the currently selected resource
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
335 key import [secretkey] - import the key pair defined by the given secret key
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
336 key unlock [password] - unlock a password protected key pair
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
337 list - list registered resources
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
338 find [type] [value] - list registered sources matching filter (type=OWNER|KEY|DOMEXT)
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
339 create [identifier] - create given resource
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
340 create currentkey - create resource for current key pair
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
341 create ip|ip4|ipv4 [ipv4network] - create resource for IPv4 network
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
342 create ip|ip6|ipv6 [ipv6network] - create resource for IPv6 network
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
343 create dom|domain [ipv6network] - create resource for domain name
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
344 select [identifier] - select resource given by identifier
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
345 select currentkey - select key resource for current key pair
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
346 select resourcekey - select key resource for the key that signed the currently selected resource
4
c642254dc9ee Fixed transfer chain generation and construction of empty updates, some small improvements in tools
Ivo Smits <Ivo@UCIS.nl>
parents: 3
diff changeset
347 select transferchain - extract the chained transfer data from the currently selected resource
0
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
348 select label [identifier] - select resource by hexadecimal label
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
349 select key [publickey] - select key resource (hexadecimal)
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
350 select ip|ip4|ipv4 [ipv4network] - select resource for IPv4 network
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
351 select ip|ip6|ipv6 [ipv6network] - select resource for IPv6 network
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
352 select dom|domain [ipv6network] - select resource for domain name
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
353 delete - delete currently selected resource
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
354 dump - display currently selected resource
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
355 update - update selected resource in the local database
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
356 set owner [name] - set the owner name for the selected resource
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
357 set descr|desc|description [text] - set the description for the selected resource
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
358 set pwauth [password] - store the current key pair in the selected resource for password authentication
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
359 set transfer any - allow anyone to take over the resource
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
360 set transfer [key] - transfer the resource to given key
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
361 TODO: set expiration [value]
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
362 add ns [name] [glue] - add in-zone nameserver with glue record (name is the part of the nameserver name before the domain name, glue is an IPv4 or IPv6 address)
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
363 add ns [name]. - add an external nameserver
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
364 reset owner - clear the owner
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
365 reset descr|desc|description - clear the description
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
366 reset pwauth - remove the key pair from the recourse, disabling password authentication
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
367 reset ns - clear the nameserver records
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
368 reset transfer - disable resource transfers
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
369 reset expiration - disable explicit expiration
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
370 reset value - clear the owner, description, password authentication and nameserver records
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
371
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
372 Examples:
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
373 OPEN marc.mdb KEY create CREATE currentkey SET owner "Your name" SET pwauth yourpassword UPDATE KEY forget CREATE yourdomain.ano SET owner "Your name" UPDATE SAVE
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
374 OPEN marc.mdb SELECT yourdomain.ano SELECT resourcekey KEY use KEY unlock yourpassword SELECT yourdomain.ano ADD ns ns1 1.2.3.4 UPDATE SAVE
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
375 OPEN marc.mdb SELECT yourdomain.ano SELECT resourcekey KEY use KEY unlock yourpassword CREATE 1.2.3.0/24 SET owner "Your name" ADD ns ns1.yourdomain.ano. UPDATE SAVE
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
376 OPEN marc.mdb SYNC http://marc.ucis.ano/ SAVE
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
377 ';
3ac7bd7495fd Initial commit
Ivo Smits <Ivo@UCIS.nl>
parents:
diff changeset
378 }