diff --git a/lib/linux.js b/lib/linux.js index 2347dcc..08de844 100644 --- a/lib/linux.js +++ b/lib/linux.js @@ -13,12 +13,21 @@ function trim_exec(cmd, cb) { }) } +function ensure_valid_nic(str) { + if (str.match(/[^\w]/)) + throw new Error("Invalid nic name given: " + str); +} + // If no wifi, then there is no error but cbed get's a null in second param. exports.get_active_network_interface_name = function(cb) { var cmd = "netstat -rn | grep UG | awk '{print $NF}'"; - exec(cmd, function(err, stdout) { + exec(cmd, function(err, stdout, stderr) { if (err) return cb(err); + if (stderr.toString().match('not found')) { + return cb(new Error('Command failed: ' + stderr.toString().trim())) + } + var raw = stdout.toString().trim().split('\n'); if (raw.length === 0 || raw === ['']) return cb(new Error('No active network interface found.')); @@ -28,21 +37,25 @@ exports.get_active_network_interface_name = function(cb) { }; exports.interface_type_for = function(nic_name, cb) { + ensure_valid_nic(nic_name); exec('cat /proc/net/wireless | grep ' + nic_name, function(err, out) { return cb(null, err ? 'Wired' : 'Wireless') }) }; exports.mac_address_for = function(nic_name, cb) { + ensure_valid_nic(nic_name); var cmd = 'cat /sys/class/net/' + nic_name + '/address'; trim_exec(cmd, cb); }; exports.gateway_ip_for = function(nic_name, cb) { + ensure_valid_nic(nic_name); trim_exec("ip r | grep " + nic_name + " | grep default | cut -d ' ' -f 3 | head -n1", cb); }; exports.netmask_for = function(nic_name, cb) { + ensure_valid_nic(nic_name); var cmd = "ifconfig " + nic_name + " 2> /dev/null | egrep 'netmask|Mask:' | awk '{print $4}' | sed 's/Mask://'"; trim_exec(cmd, cb); };