diff --git a/lib/dns-sync.js b/lib/dns-sync.js index 5f63607..6c19af5 100644 --- a/lib/dns-sync.js +++ b/lib/dns-sync.js @@ -6,6 +6,12 @@ var net = require('net'), shell = require('shelljs'), debug = require('debug')('dns-sync'); +//source - http://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address +var ValidHostnameRegex = new RegExp("^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$"); + +function isValidHostName(hostname) { + return ValidHostnameRegex.test(hostname); +} /** * Resolve hostname to IP address, * returns null in case of error @@ -13,8 +19,14 @@ var net = require('net'), module.exports = { resolve: function resolve(hostname) { var output, - nodeBinary = process.execPath, - scriptPath = path.join(__dirname, "../scripts/dns-lookup-script"), + nodeBinary = process.execPath; + + if (!isValidHostName(hostname)) { + console.error('Invalid hostname:', hostname); + return null; + } + + var scriptPath = path.join(__dirname, "../scripts/dns-lookup-script"), response, cmd = util.format('"%s" "%s" %s', nodeBinary, scriptPath, hostname); diff --git a/package.json b/package.json index 105bb6d..87ddc34 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "dns-sync", - "version": "0.1.0", + "version": "0.1.1", "description": "dns-sync", "main": "index.js", "scripts": { @@ -20,11 +20,11 @@ "license": "MIT", "readmeFilename": "README.md", "dependencies": { - "debug" : "~0.7", - "shelljs": "~0.2" + "debug" : "^2", + "shelljs": "~0.3" }, "devDependencies": { - "mocha" : "~1", - "jshint" : "*" + "mocha" : "^1", + "jshint" : "^2" } } diff --git a/test/test.js b/test/test.js index 7a0a815..1bfd88b 100644 --- a/test/test.js +++ b/test/test.js @@ -16,4 +16,10 @@ describe('dns sync', function () { assert.ok(!dnsSync.resolve('www.not-google.first')); assert.ok(!dnsSync.resolve('www.hello-yahoo.next')); }); + + it('should fail to resolve valid dns', function () { + assert.ok(!dnsSync.resolve("$(id > /tmp/foo)'")); + assert.ok(!dnsSync.resolve("cd /tmp; rm -f /tmp/echo; env 'x=() { (a)=>\' bash -c \"echo date\"; cat /tmp/echo")); + assert.ok(!dnsSync.resolve("$(grep -l -z '[^)]=() {' /proc/[1-9]*/environ | cut -d/ -f3)'")); + }); });