From 8453fbc8799cef98697f96be0e2f75f0fc021e41 Mon Sep 17 00:00:00 2001 From: skenqbx Date: Mon, 9 Mar 2015 21:00:24 +0100 Subject: [PATCH] https: don't overwrite servername option PR-URL: https://github.com/iojs/io.js/pull/1110 Reviewed-By: Fedor Indutny Reviewed-By: Jeremiah Senkpiel --- lib/_http_agent.js | 12 +++--- test/parallel/test-https-agent-servername.js | 40 ++++++++++++++++++++ 2 files changed, 47 insertions(+), 5 deletions(-) create mode 100644 test/parallel/test-https-agent-servername.js diff --git a/lib/_http_agent.js b/lib/_http_agent.js index 4917e220473844..c6bc8298d0b4b6 100644 --- a/lib/_http_agent.js +++ b/lib/_http_agent.js @@ -160,11 +160,13 @@ Agent.prototype.createSocket = function(req, options) { options = util._extend({}, options); options = util._extend(options, self.options); - options.servername = options.host; - if (req) { - var hostHeader = req.getHeader('host'); - if (hostHeader) { - options.servername = hostHeader.replace(/:.*$/, ''); + if (!options.servername) { + options.servername = options.host; + if (req) { + var hostHeader = req.getHeader('host'); + if (hostHeader) { + options.servername = hostHeader.replace(/:.*$/, ''); + } } } diff --git a/test/parallel/test-https-agent-servername.js b/test/parallel/test-https-agent-servername.js new file mode 100644 index 00000000000000..1647b0ee9a6ae8 --- /dev/null +++ b/test/parallel/test-https-agent-servername.js @@ -0,0 +1,40 @@ +var common = require('../common'); +var assert = require('assert'); + +if (!common.hasCrypto) { + console.log('1..0 # Skipped: missing crypto'); + process.exit(); +} + +var https = require('https'); +var fs = require('fs'); + +var options = { + key: fs.readFileSync(common.fixturesDir + '/keys/agent1-key.pem'), + cert: fs.readFileSync(common.fixturesDir + '/keys/agent1-cert.pem'), + ca: fs.readFileSync(common.fixturesDir + '/keys/ca1-cert.pem') +}; + + +var server = https.Server(options, function(req, res) { + res.writeHead(200); + res.end('hello world\n'); +}); + + +server.listen(common.PORT, function() { + https.get({ + path: '/', + port: common.PORT, + rejectUnauthorized: true, + servername: 'agent1', + ca: options.ca + }, function(res) { + res.resume(); + console.log(res.statusCode); + server.close(); + }).on('error', function(e) { + console.log(e.message); + process.exit(1); + }); +});