Repository navigation
Expand file tree
/
Copy pathmactrack_import_ouidb.php
More file actions
149 lines (129 loc) · 4.72 KB
/
Copy pathmactrack_import_ouidb.php
File metadata and controls
149 lines (129 loc) · 4.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<?php
/*
+-------------------------------------------------------------------------+
| Copyright (C) 2004-2026 The Cacti Group |
| |
| This program is free software; you can redistribute it and/or |
| modify it under the terms of the GNU General Public License |
| as published by the Free Software Foundation; either version 2 |
| of the License, or (at your option) any later version. |
| |
| This program is distributed in the hope that it will be useful, |
| but WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| GNU General Public License for more details. |
+-------------------------------------------------------------------------+
| Cacti: The Complete RRDTool-based Graphing Solution |
+-------------------------------------------------------------------------+
| This code is designed, written, and maintained by the Cacti Group. See |
| about.php and/or the AUTHORS file for specific developer information. |
+-------------------------------------------------------------------------+
| http://www.cacti.net/ |
| http://standards-oui.ieee.org/oui/oui.txt |
+-------------------------------------------------------------------------+
*/
$dir = __DIR__;
chdir($dir);
if (substr_count(strtolower($dir), 'mactrack')) {
chdir('../../');
}
require('./include/cli_check.php');
global $config;
require_once($config['base_path'] . '/plugins/mactrack/lib/mactrack_functions.php');
// process calling arguments
$parms = $_SERVER['argv'];
array_shift($parms);
$debug = false;
$oui_file = '';
// add more memory for import
ini_set('memory_limit', '-1');
if (cacti_sizeof($parms)) {
foreach ($parms as $parameter) {
if (strpos($parameter, '=')) {
[$arg, $value] = explode('=', $parameter);
} else {
$arg = $parameter;
$value = '';
}
switch ($arg) {
case '-f':
$oui_file = trim($value);
break;
case '--version':
case '-V':
case '-v':
display_version();
exit;
case '--help':
case '-H':
case '-h':
display_help();
exit;
default:
print 'ERROR: Invalid Parameter ' . $parameter . "\n\n";
display_help();
exit;
}
}
}
if ($oui_file != '') {
$oui_file = mactrack_validate_oui_file($oui_file);
if ($oui_file == '') {
print "ERROR: OUI Database file must be a readable regular file\n";
} else {
import_oui_database('ui', $oui_file);
}
} else {
import_oui_database();
}
/**
* Validates and resolves a user-supplied OUI database file path,
* rejecting empty paths, paths containing NUL bytes, and paths that
* don't resolve to an existing, readable regular file. Note this only
* canonicalizes the path and confirms it is readable - it does not
* confine the result to any particular directory, so it does not by
* itself prevent a path from traversing outside an intended location.
*
* @param string $path The candidate file path to validate.
*
* @return string The resolved absolute path if valid, or an empty
* string if the path is invalid/unreadable.
*/
function mactrack_validate_oui_file(string $path): string {
if ($path === '' || strpos($path, "\0") !== false) {
return '';
}
$resolved = realpath($path);
if ($resolved === false || !is_file($resolved) || !is_readable($resolved)) {
return '';
}
return $resolved;
}
/**
* Prints this script's name, version, and copyright banner to stdout.
*
* @return void
*
* @global array $config Cacti global configuration array (declared but
* not used directly here).
*/
function display_version(): void {
global $config;
$info = plugin_mactrack_version();
print 'Mactrack import OUI Database, Version ' . $info['version'] . ', ' . COPYRIGHT_YEARS . "\n";
}
/**
* Prints this script's version banner followed by its command-line
* usage instructions to stdout.
*
* @return void
*/
function display_help(): void {
display_version();
print "\nusage: mactrack_import_ouidb.php [-f=ouifile] [-h] [--help] [-v] [-V] [--version]\n\n";
print "-f='outdbfile' - Specify the location of the OUI dataabase file. If your system\n";
print " does not allow native access to the IEEE via http, you can manually\n";
print " download the file, and then import it using this option.\n";
print "-v -V --version - Display this help message\n";
print "-h --help - Display this help message\n";
}