annotate marcus.php @ 3:5c8c4fa95803 draft

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