annotate marcus.php @ 1:caa68b502313 draft

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