https: don't overwrite servername option
authorskenqbx <skenqbx@gmail.com>
Mon, 9 Mar 2015 20:00:24 +0000 (21:00 +0100)
committerFedor Indutny <fedor@indutny.com>
Wed, 11 Mar 2015 06:28:04 +0000 (23:28 -0700)
PR-URL: https://github.com/iojs/io.js/pull/1110
Reviewed-By: Fedor Indutny <fedor@indutny.com>
Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>
lib/_http_agent.js
test/parallel/test-https-agent-servername.js [new file with mode: 0644]

index 4917e22..c6bc829 100644 (file)
@@ -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 (file)
index 0000000..1647b0e
--- /dev/null
@@ -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);
+  });
+});