1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 |
|
7 | var _alinexUtil = require('alinex-util');
|
8 |
|
9 | var _alinexUtil2 = _interopRequireDefault(_alinexUtil);
|
10 |
|
11 | var _Number = require('./Number');
|
12 |
|
13 | var _Number2 = _interopRequireDefault(_Number);
|
14 |
|
15 | var _Error = require('../Error');
|
16 |
|
17 | var _Error2 = _interopRequireDefault(_Error);
|
18 |
|
19 | var _Reference = require('../Reference');
|
20 |
|
21 | var _Reference2 = _interopRequireDefault(_Reference);
|
22 |
|
23 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
24 |
|
25 | const portNames = {
|
26 | 'acr-nema': 104,
|
27 | afbackup: 2988,
|
28 | afmbackup: 2989,
|
29 | afpovertcp: 548,
|
30 | 'afs3-bos': 7007,
|
31 | 'afs3-callback': 7001,
|
32 | 'afs3-errors': 7006,
|
33 | 'afs3-fileserver': 7000,
|
34 | 'afs3-kaserver': 7004,
|
35 | 'afs3-prserver': 7002,
|
36 | 'afs3-rmtsys': 7009,
|
37 | 'afs3-update': 7008,
|
38 | 'afs3-vlserver': 7003,
|
39 | 'afs3-volser': 7005,
|
40 | amanda: 10080,
|
41 | amandaidx: 10082,
|
42 | amidxtape: 10083,
|
43 | amqp: 5672,
|
44 | aol: 5190,
|
45 | 'asf-rmcp': 623,
|
46 | asp: 27374,
|
47 | 'at-echo': 204,
|
48 | 'at-nbp': 202,
|
49 | 'at-rtmp': 201,
|
50 | 'at-zis': 206,
|
51 | auth: 113,
|
52 | 'bacula-dir': 9101,
|
53 | 'bacula-fd': 9102,
|
54 | 'bacula-sd': 9103,
|
55 | bgp: 179,
|
56 | bgpd: 2605,
|
57 | bgpsim: 5675,
|
58 | biff: 512,
|
59 | binkp: 24554,
|
60 | bootpc: 68,
|
61 | bootps: 67,
|
62 | bpcd: 13782,
|
63 | bpdbm: 13721,
|
64 | 'bpjava-msvc': 13722,
|
65 | bprd: 13720,
|
66 | canna: 5680,
|
67 | cfengine: 5308,
|
68 | cfinger: 2003,
|
69 | chargen: 19,
|
70 | 'cisco-sccp': 2000,
|
71 | 'clc-build-daemon': 8990,
|
72 | clearcase: 371,
|
73 | 'cmip-agent': 164,
|
74 | 'cmip-man': 163,
|
75 | codaauth2: 370,
|
76 | codasrv: 2432,
|
77 | 'codasrv-se': 2433,
|
78 | conference: 531,
|
79 | courier: 530,
|
80 | 'csnet-ns': 105,
|
81 | csync2: 30865,
|
82 | customs: 1001,
|
83 | cvspserver: 2401,
|
84 | daap: 3689,
|
85 | datametrics: 1645,
|
86 | daytime: 13,
|
87 | 'db-lsp': 17500,
|
88 | dcap: 22125,
|
89 | 'dhcpv6-client': 546,
|
90 | 'dhcpv6-server': 547,
|
91 | dicom: 11112,
|
92 | dict: 2628,
|
93 | dircproxy: 57000,
|
94 | discard: 9,
|
95 | distcc: 3632,
|
96 | distmp3: 4600,
|
97 | domain: 53,
|
98 | echo: 7,
|
99 | eklogin: 2105,
|
100 | 'enbd-cstatd': 5051,
|
101 | 'enbd-sstatd': 5052,
|
102 | epmd: 4369,
|
103 | exec: 512,
|
104 | 'f5-globalsite': 2792,
|
105 | 'f5-iquery': 4353,
|
106 | fatserv: 347,
|
107 | fax: 4557,
|
108 | fido: 60179,
|
109 | finger: 79,
|
110 | 'font-service': 7100,
|
111 | freeciv: 5556,
|
112 | frox: 2121,
|
113 | fsp: 21,
|
114 | ftp: 21,
|
115 | 'ftp-data': 20,
|
116 | ftps: 990,
|
117 | 'ftps-data': 989,
|
118 | gdomap: 538,
|
119 | 'gds-db': 3050,
|
120 | ggz: 5688,
|
121 | git: 9418,
|
122 | gnunet: 2086,
|
123 | 'gnutella-rtr': 6347,
|
124 | 'gnutella-svc': 6346,
|
125 | gopher: 70,
|
126 | gpsd: 2947,
|
127 | gris: 2135,
|
128 | groupwise: 1677,
|
129 | gsidcap: 22128,
|
130 | gsiftp: 2811,
|
131 | gsigatekeeper: 2119,
|
132 | hkp: 11371,
|
133 | 'hmmp-ind': 612,
|
134 | hostmon: 5355,
|
135 | hostnames: 101,
|
136 | http: 80,
|
137 | 'http-alt': 8080,
|
138 | https: 443,
|
139 | hylafax: 4559,
|
140 | iax: 4569,
|
141 | icpv2: 3130,
|
142 | idfp: 549,
|
143 | imap2: 143,
|
144 | imap3: 220,
|
145 | imaps: 993,
|
146 | imsp: 406,
|
147 | ingreslock: 1524,
|
148 | ipp: 631,
|
149 | iprop: 2121,
|
150 | 'ipsec-nat-t': 4500,
|
151 | ipx: 213,
|
152 | irc: 194,
|
153 | ircd: 6667,
|
154 | ircs: 994,
|
155 | isakmp: 500,
|
156 | 'iscsi-target': 3260,
|
157 | isdnlog: 20011,
|
158 | isisd: 2608,
|
159 | 'iso-tsap': 102,
|
160 | kamanda: 10081,
|
161 | kazaa: 1214,
|
162 | kerberos4: 750,
|
163 | kerberos: 88,
|
164 | 'kerberos-adm': 749,
|
165 | 'kerberos-master': 751,
|
166 | kermit: 1649,
|
167 | klogin: 543,
|
168 | knetd: 2053,
|
169 | kpasswd: 464,
|
170 | kpop: 1109,
|
171 | 'krb-prop': 754,
|
172 | krbupdate: 760,
|
173 | kshell: 544,
|
174 | kx: 2111,
|
175 | l2f: 1701,
|
176 | ldap: 389,
|
177 | ldaps: 636,
|
178 | link: 87,
|
179 | linuxconf: 98,
|
180 | 'loc-srv': 135,
|
181 | login: 513,
|
182 | 'log-server': 1958,
|
183 | lotusnote: 1352,
|
184 | mailq: 174,
|
185 | mandelspawn: 9359,
|
186 | mdns: 5353,
|
187 | 'microsoft-ds': 445,
|
188 | mmcc: 5050,
|
189 | 'moira-db': 775,
|
190 | 'moira-update': 777,
|
191 | 'moira-ureg': 779,
|
192 | mon: 2583,
|
193 | mrtd: 5674,
|
194 | msnp: 1863,
|
195 | msp: 18,
|
196 | 'ms-sql-m': 1434,
|
197 | 'ms-sql-s': 1433,
|
198 | mtn: 4691,
|
199 | mtp: 57,
|
200 | munin: 4949,
|
201 | mysql: 3306,
|
202 | 'mysql-proxy': 6446,
|
203 | nameserver: 42,
|
204 | nbd: 10809,
|
205 | nbp: 2,
|
206 | nessus: 1241,
|
207 | 'netbios-dgm': 138,
|
208 | 'netbios-ns': 137,
|
209 | 'netbios-ssn': 139,
|
210 | netnews: 532,
|
211 | netstat: 15,
|
212 | netwall: 533,
|
213 | nextstep: 178,
|
214 | nfs: 2049,
|
215 | ninstall: 2150,
|
216 | nntp: 119,
|
217 | nntps: 563,
|
218 | noclog: 5354,
|
219 | 'npmp-gui': 611,
|
220 | 'npmp-local': 610,
|
221 | nqs: 607,
|
222 | nrpe: 5666,
|
223 | nsca: 5667,
|
224 | ntalk: 518,
|
225 | ntp: 123,
|
226 | nut: 3493,
|
227 | omirr: 808,
|
228 | omniorb: 8088,
|
229 | openvpn: 1194,
|
230 | ospf6d: 2606,
|
231 | ospfapi: 2607,
|
232 | ospfd: 2604,
|
233 | 'passwd-server': 752,
|
234 | pawserv: 345,
|
235 | pcrd: 5151,
|
236 | 'pipe-server': 2010,
|
237 | pop2: 109,
|
238 | pop3: 110,
|
239 | pop3s: 995,
|
240 | poppassd: 106,
|
241 | postgresql: 5432,
|
242 | predict: 1210,
|
243 | printer: 515,
|
244 | proofd: 1093,
|
245 | prospero: 191,
|
246 | 'prospero-np': 1525,
|
247 | pwdgen: 129,
|
248 | qmqp: 628,
|
249 | qmtp: 209,
|
250 | qotd: 17,
|
251 | radius: 1812,
|
252 | 'radius-acct': 1813,
|
253 | 'radmin-port': 4899,
|
254 | 're-mail-ck': 50,
|
255 | remctl: 4373,
|
256 | remotefs: 556,
|
257 | remoteping: 1959,
|
258 | rfe: 5002,
|
259 | ripd: 2602,
|
260 | ripngd: 2603,
|
261 | rje: 77,
|
262 | rlp: 39,
|
263 | rmiregistry: 1099,
|
264 | rmtcfg: 1236,
|
265 | rootd: 1094,
|
266 | route: 520,
|
267 | rpc2portmap: 369,
|
268 | rplay: 5555,
|
269 | rsync: 873,
|
270 | 'rtcm-sc104': 2101,
|
271 | rtelnet: 107,
|
272 | rtmp: 1935,
|
273 | rtsp: 554,
|
274 | saft: 487,
|
275 | 'sa-msg-port': 1646,
|
276 | 'sane-port': 6566,
|
277 | search: 2010,
|
278 | sftp: 115,
|
279 | 'sge-execd': 6445,
|
280 | 'sge-qmaster': 6444,
|
281 | 'sgi-cad': 17004,
|
282 | 'sgi-cmsd': 17001,
|
283 | 'sgi-crsd': 17002,
|
284 | 'sgi-gcd': 17003,
|
285 | shell: 514,
|
286 | sieve: 4190,
|
287 | silc: 706,
|
288 | sip: 5060,
|
289 | 'sip-tls': 5061,
|
290 | skkserv: 1178,
|
291 | smsqp: 11201,
|
292 | smtp: 25,
|
293 | smux: 199,
|
294 | snmp: 161,
|
295 | 'snmp-trap': 162,
|
296 | snpp: 444,
|
297 | socks: 1080,
|
298 | spamd: 783,
|
299 | ssh: 22,
|
300 | submission: 587,
|
301 | sunrpc: 111,
|
302 | supdup: 95,
|
303 | supfiledbg: 1127,
|
304 | supfilesrv: 871,
|
305 | support: 1529,
|
306 | suucp: 4031,
|
307 | svn: 3690,
|
308 | svrloc: 427,
|
309 | swat: 901,
|
310 | syslog: 514,
|
311 | 'syslog-tls': 6514,
|
312 | sysrqd: 4094,
|
313 | systat: 11,
|
314 | tacacs: 49,
|
315 | 'tacacs-ds': 65,
|
316 | talk: 517,
|
317 | tcpmux: 1,
|
318 | telnet: 23,
|
319 | telnets: 992,
|
320 | tempo: 526,
|
321 | tfido: 60177,
|
322 | tftp: 69,
|
323 | time: 37,
|
324 | timed: 525,
|
325 | tinc: 655,
|
326 | tproxy: 8081,
|
327 | ulistserv: 372,
|
328 | 'unix-status': 1957,
|
329 | urd: 465,
|
330 | uucp: 540,
|
331 | 'uucp-path': 117,
|
332 | vboxd: 20012,
|
333 | venus: 2430,
|
334 | 'venus-se': 2431,
|
335 | vnetd: 13724,
|
336 | vopied: 13783,
|
337 | webmin: 10000,
|
338 | webster: 765,
|
339 | who: 513,
|
340 | whois: 43,
|
341 | wipld: 1300,
|
342 | wnn6: 22273,
|
343 | 'x11-1': 6001,
|
344 | 'x11-2': 6002,
|
345 | 'x11-3': 6003,
|
346 | 'x11-4': 6004,
|
347 | 'x11-5': 6005,
|
348 | x11: 6000,
|
349 | 'x11-6': 6006,
|
350 | 'x11-7': 6007,
|
351 | xdmcp: 177,
|
352 | xinetd: 9098,
|
353 | xmms2: 9667,
|
354 | 'xmpp-client': 5222,
|
355 | 'xmpp-server': 5269,
|
356 | xpilot: 15345,
|
357 | xtel: 1313,
|
358 | xtell: 4224,
|
359 | xtelw: 1314,
|
360 | z3950: 210,
|
361 | 'zabbix-agent': 10050,
|
362 | 'zabbix-trapper': 10051,
|
363 | zebra: 2601,
|
364 | zebrasrv: 2600,
|
365 | 'zephyr-clt': 2103,
|
366 | 'zephyr-hm': 2104,
|
367 | 'zephyr-srv': 2102,
|
368 | zip: 6,
|
369 | zope: 9673,
|
370 | 'zope-ftp': 8021,
|
371 | zserv: 346
|
372 | };
|
373 |
|
374 | const portRanges = {
|
375 | system: [0, 1023],
|
376 | registered: [1024, 49151],
|
377 | dynamic: [49152, 65535]
|
378 | };
|
379 |
|
380 | class PortSchema extends _Number2.default {
|
381 | constructor(base) {
|
382 | super(base);
|
383 | super.integerType('short');
|
384 | super.positive();
|
385 | }
|
386 |
|
387 | sanitize() {
|
388 | return this._setError('sanitize');
|
389 | }
|
390 |
|
391 | _sanitizeDescriptor() {
|
392 | const set = this._setting;
|
393 | let msg = 'A port number or name is needed, the names will be replaced with their standard \
|
394 | ports. ';
|
395 | if (set.sanitize instanceof _Reference2.default) {
|
396 | msg += `Strings are sanitized depending on ${set.sanitize.description}. `;
|
397 | } else if (set.sanitize) {
|
398 | msg += 'Strings are sanitized to get the first numerical value out of it. ';
|
399 | }
|
400 | return msg.replace(/ $/, '\n');
|
401 | }
|
402 |
|
403 | _sanitizeValidator(data) {
|
404 | const check = this._check;
|
405 | try {
|
406 | this._checkBoolean('sanitize');
|
407 | } catch (err) {
|
408 | return Promise.reject(new _Error2.default(this, data, err.message));
|
409 | }
|
410 |
|
411 | const orig = data.value;
|
412 | if (typeof data.value === 'string') {
|
413 | const lc = data.value.toLowerCase();
|
414 | if (portNames[lc]) data.value = portNames[lc];
|
415 | if (check.sanitize) data.value = data.value.replace(/^.*?([-+]?\d+\.?\d*).*?$/, '$1');
|
416 | if (typeof data.value === 'string') data.value = parseInt(data.value, 10);
|
417 | data.value = Number(data.value);
|
418 | }
|
419 | if (typeof data.value !== 'number') {
|
420 | return Promise.reject(new _Error2.default(this, data, `The given value is of type ${typeof data.value} but a number is needed.`));
|
421 | } else if (Number.isNaN(data.value)) {
|
422 | return Promise.reject(new _Error2.default(this, data, `The given element \`${_alinexUtil2.default.inspect(orig)}\` is no valid number.`));
|
423 | }
|
424 | return Promise.resolve();
|
425 | }
|
426 |
|
427 | unit() {
|
428 | return this._setError('unit');
|
429 | }
|
430 | toUnit() {
|
431 | return this._setError('toUnit');
|
432 | }
|
433 | positive() {
|
434 | return this._setError('positive');
|
435 | }
|
436 | negative() {
|
437 | return this._setError('negative');
|
438 | }
|
439 | integer() {
|
440 | return this._setError('integer');
|
441 | }
|
442 | integerType() {
|
443 | return this._setError('integerType');
|
444 | }
|
445 | round() {
|
446 | return this._setError('round');
|
447 | }
|
448 | multiple() {
|
449 | return this._setError('multiple');
|
450 | }
|
451 | format() {
|
452 | return this._setError('format');
|
453 | }
|
454 |
|
455 | _allowValidator(data) {
|
456 | const check = this._check;
|
457 | this._checkArray('allow');
|
458 | this._checkArray('deny');
|
459 |
|
460 | const deny = [];
|
461 | if (check.deny) {
|
462 | var _iteratorNormalCompletion = true;
|
463 | var _didIteratorError = false;
|
464 | var _iteratorError = undefined;
|
465 |
|
466 | try {
|
467 | for (var _iterator = check.deny[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
468 | const e = _step.value;
|
469 |
|
470 | if (portRanges[e]) {
|
471 | for (let n = portRanges[e][0]; n <= portRanges[e][1]; n += 1) deny.push(n);
|
472 | }
|
473 | }
|
474 | } catch (err) {
|
475 | _didIteratorError = true;
|
476 | _iteratorError = err;
|
477 | } finally {
|
478 | try {
|
479 | if (!_iteratorNormalCompletion && _iterator.return) {
|
480 | _iterator.return();
|
481 | }
|
482 | } finally {
|
483 | if (_didIteratorError) {
|
484 | throw _iteratorError;
|
485 | }
|
486 | }
|
487 | }
|
488 | }
|
489 | const allow = [];
|
490 | if (check.allow) {
|
491 | var _iteratorNormalCompletion2 = true;
|
492 | var _didIteratorError2 = false;
|
493 | var _iteratorError2 = undefined;
|
494 |
|
495 | try {
|
496 | for (var _iterator2 = check.allow[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
497 | const e = _step2.value;
|
498 |
|
499 | if (portRanges[e]) {
|
500 | for (let n = portRanges[e][0]; n <= portRanges[e][1]; n += 1) allow.push(n);
|
501 | }
|
502 | }
|
503 | } catch (err) {
|
504 | _didIteratorError2 = true;
|
505 | _iteratorError2 = err;
|
506 | } finally {
|
507 | try {
|
508 | if (!_iteratorNormalCompletion2 && _iterator2.return) {
|
509 | _iterator2.return();
|
510 | }
|
511 | } finally {
|
512 | if (_didIteratorError2) {
|
513 | throw _iteratorError2;
|
514 | }
|
515 | }
|
516 | }
|
517 | }
|
518 | if (allow && deny && allow.length && deny.length) {
|
519 | check.deny = check.deny.filter(e => !check.allow.includes(e));
|
520 | }
|
521 |
|
522 | if (check.deny) {
|
523 | var _iteratorNormalCompletion3 = true;
|
524 | var _didIteratorError3 = false;
|
525 | var _iteratorError3 = undefined;
|
526 |
|
527 | try {
|
528 | for (var _iterator3 = check.deny[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
529 | const e = _step3.value;
|
530 |
|
531 | if (portNames[e]) allow.push(portNames[e]);else if (!portRanges[e]) {
|
532 | deny.push(e);
|
533 | const idx = allow.indexOf(e);
|
534 | if (idx > -1) allow.splice(idx, 1);
|
535 | }
|
536 | }
|
537 | } catch (err) {
|
538 | _didIteratorError3 = true;
|
539 | _iteratorError3 = err;
|
540 | } finally {
|
541 | try {
|
542 | if (!_iteratorNormalCompletion3 && _iterator3.return) {
|
543 | _iterator3.return();
|
544 | }
|
545 | } finally {
|
546 | if (_didIteratorError3) {
|
547 | throw _iteratorError3;
|
548 | }
|
549 | }
|
550 | }
|
551 | }
|
552 | if (check.allow) {
|
553 | var _iteratorNormalCompletion4 = true;
|
554 | var _didIteratorError4 = false;
|
555 | var _iteratorError4 = undefined;
|
556 |
|
557 | try {
|
558 | for (var _iterator4 = check.allow[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
|
559 | const e = _step4.value;
|
560 |
|
561 | if (portNames[e]) allow.push(portNames[e]);else if (!portRanges[e]) {
|
562 | allow.push(e);
|
563 | const idx = deny.indexOf(e);
|
564 | if (idx > -1) deny.splice(idx, 1);
|
565 | }
|
566 | }
|
567 | } catch (err) {
|
568 | _didIteratorError4 = true;
|
569 | _iteratorError4 = err;
|
570 | } finally {
|
571 | try {
|
572 | if (!_iteratorNormalCompletion4 && _iterator4.return) {
|
573 | _iterator4.return();
|
574 | }
|
575 | } finally {
|
576 | if (_didIteratorError4) {
|
577 | throw _iteratorError4;
|
578 | }
|
579 | }
|
580 | }
|
581 | }
|
582 | if (check.deny) check.deny = deny;
|
583 | if (check.allow) check.allow = allow;
|
584 |
|
585 | return super._allowValidator(data);
|
586 | }
|
587 | }
|
588 |
|
589 | exports.default = PortSchema; |
\ | No newline at end of file |