mirror of https://github.com/lukechilds/node.git
Ben Noordhuis
12 years ago
16 changed files with 438 additions and 73 deletions
@ -0,0 +1,116 @@ |
|||
version: 0.9.1 |
|||
title: Version 0.9.1 (Unstable) |
|||
category: release |
|||
slug: node-v0-9-1-unstable |
|||
date: 2012-08-28T22:33:45.659Z |
|||
|
|||
2012.08.28, Version 0.9.1 (Unstable) |
|||
|
|||
* buffer: Add Buffer.isEncoding(enc) to test for valid encoding values (isaacs) |
|||
|
|||
* Raise UV_ECANCELED on premature close. (Ben Noordhuis) |
|||
|
|||
* Remove c-ares from libuv, move to a top-level node dependency (Bert Belder) |
|||
|
|||
* ref/unref for all HandleWraps, timers, servers, and sockets (Timothy J Fontaine) |
|||
|
|||
* addon: remove node-waf, superseded by node-gyp (Ben Noordhuis) |
|||
|
|||
* child_process: emit error on exec failure (Ben Noordhuis) |
|||
|
|||
* cluster: do not use internal server API (Andreas Madsen) |
|||
|
|||
* constants: add O_DIRECT (Ian Babrou) |
|||
|
|||
* crypto: add sync interface to crypto.pbkdf2() (Ben Noordhuis) |
|||
|
|||
* darwin: emulate fdatasync() (Fedor Indutny) |
|||
|
|||
* dgram: make .bind() always asynchronous (Ben Noordhuis) |
|||
|
|||
* events: Make emitter.listeners() side-effect free (isaacs, Joe Andaverde) |
|||
|
|||
* fs: Throw early on invalid encoding args (isaacs) |
|||
|
|||
* fs: fix naming of truncate/ftruncate functions (isaacs) |
|||
|
|||
* http: bubble up parser errors to ClientRequest (Brian White) |
|||
|
|||
* linux: improve cpuinfo parser on ARM and MIPS (Ben Noordhuis) |
|||
|
|||
* net: add support for IPv6 addresses ending in :: (Josh Erickson) |
|||
|
|||
* net: support Server.listen(Pipe) (Andreas Madsen) |
|||
|
|||
* node: don't scan add-on for "init" symbol (Ben Noordhuis) |
|||
|
|||
* remove process.uvCounters() (Ben Noordhuis) |
|||
|
|||
* repl: console writes to repl rather than process stdio (Nathan Rajlich) |
|||
|
|||
* timers: implement setImmediate (Timothy J Fontaine) |
|||
|
|||
* tls: fix segfault in pummel/test-tls-ci-reneg-attack (Ben Noordhuis) |
|||
|
|||
* tools: Move gyp addon tools to node-gyp (Nathan Rajlich) |
|||
|
|||
* unix: preliminary signal handler support (Ben Noordhuis) |
|||
|
|||
* unix: remove dependency on ev_child (Ben Noordhuis) |
|||
|
|||
* unix: work around darwin bug, don't poll() on pipe (Fedor Indutny) |
|||
|
|||
* util: Formally deprecate util.pump() (Ben Noordhuis) |
|||
|
|||
* windows: make active and closing handle state independent (Bert Belder) |
|||
|
|||
* windows: report spawn errors to the exit callback (Bert Belder) |
|||
|
|||
* windows: signal handling support with uv_signal_t (Bert Belder) |
|||
|
|||
|
|||
Source Code: http://nodejs.org/dist/v0.9.1/node-v0.9.1.tar.gz |
|||
|
|||
Macintosh Installer (Universal): http://nodejs.org/dist/v0.9.1/node-v0.9.1.pkg |
|||
|
|||
Windows Installer: http://nodejs.org/dist/v0.9.1/node-v0.9.1-x86.msi |
|||
|
|||
Windows x64 Installer: http://nodejs.org/dist/v0.9.1/x64/node-v0.9.1-x64.msi |
|||
|
|||
Windows x64 Files: http://nodejs.org/dist/v0.9.1/x64/ |
|||
|
|||
Linux 32-bit Binary: http://nodejs.org/dist/v0.9.1/node-v0.9.1-linux-x86.tar.gz |
|||
|
|||
Linux 64-bit Binary: http://nodejs.org/dist/v0.9.1/node-v0.9.1-linux-x64.tar.gz |
|||
|
|||
Solaris 32-bit Binary: http://nodejs.org/dist/v0.9.1/node-v0.9.1-sunos-x86.tar.gz |
|||
|
|||
Solaris 64-bit Binary: http://nodejs.org/dist/v0.9.1/node-v0.9.1-sunos-x64.tar.gz |
|||
|
|||
Other release files: http://nodejs.org/dist/v0.9.1/ |
|||
|
|||
Website: http://nodejs.org/docs/v0.9.1/ |
|||
|
|||
Documentation: http://nodejs.org/docs/v0.9.1/api/ |
|||
|
|||
Shasums: |
|||
|
|||
``` |
|||
b86a5b0b2c9a89d08baaeb3d5270a8f247b4ba43 node-v0.9.1-darwin-x64.tar.gz |
|||
800af9d15a4b65e624351bb94dedc3b7eb322b86 node-v0.9.1-darwin-x86.tar.gz |
|||
a7ea43b0db472ca84dc9838960dae57ff0abaa72 node-v0.9.1-linux-x64.tar.gz |
|||
89c4be492a946eefa45aa87d16787875aa0f2dff node-v0.9.1-linux-x86.tar.gz |
|||
6495d2814541e945dba5941b8d3facf2a61dc55d node-v0.9.1-sunos-x64.tar.gz |
|||
05ea83ba4d648f5b949833bb28d69e6eeebabb78 node-v0.9.1-sunos-x86.tar.gz |
|||
3ccf1ac2fea7f2d05bcaed590bc54ee61c982fbb node-v0.9.1-x86.msi |
|||
bd0ede40e4681b16088284fe6a18ae3a5c5a3795 node-v0.9.1.tar.gz |
|||
159470a999ef23fa940ad3c54265053c3d2a4332 node.exe |
|||
02472e388a44b91e2644178a0fe011354fcd361e node.exp |
|||
c6d6ce22be4b47ad022d82dd91ebd4c040742fee node.lib |
|||
7b4cec8b4106d90a077388fe483fdbb13119dcb1 node.pdb |
|||
a5fbf5e22c7623a9206abc6608d084ff53c7c4c9 x64/node-v0.9.1-x64.msi |
|||
9755685a9d7bea6dc63d3260829c26c5b0430a7a x64/node.exe |
|||
621f177733647848f7f667926fe4f498a1f50c97 x64/node.exp |
|||
5877dffbf012c458dab88f3392af59cb33720d2f x64/node.lib |
|||
dc513ce5c16771dcfab9c1777d5949252290b412 x64/node.pdb |
|||
``` |
@ -0,0 +1,3 @@ |
|||
|
|||
process.send('hello'); |
|||
process.exit(0); |
@ -0,0 +1,106 @@ |
|||
// Copyright Joyent, Inc. and other Node contributors.
|
|||
//
|
|||
// Permission is hereby granted, free of charge, to any person obtaining a
|
|||
// copy of this software and associated documentation files (the
|
|||
// "Software"), to deal in the Software without restriction, including
|
|||
// without limitation the rights to use, copy, modify, merge, publish,
|
|||
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
|||
// persons to whom the Software is furnished to do so, subject to the
|
|||
// following conditions:
|
|||
//
|
|||
// The above copyright notice and this permission notice shall be included
|
|||
// in all copies or substantial portions of the Software.
|
|||
//
|
|||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|||
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
|
|||
var common = require('../common'); |
|||
var assert = require('assert'); |
|||
var spawn = require('child_process').spawn; |
|||
var tls = require('tls'); |
|||
var https = require('https'); |
|||
var fs = require('fs'); |
|||
|
|||
// renegotiation limits to test
|
|||
var LIMITS = [0, 1, 2, 3, 5, 10, 16]; |
|||
|
|||
if (process.platform === 'win32') { |
|||
console.log('Skipping test, you probably don\'t have openssl installed.'); |
|||
process.exit(); |
|||
} |
|||
|
|||
(function() { |
|||
var n = 0; |
|||
function next() { |
|||
if (n >= LIMITS.length) return; |
|||
tls.CLIENT_RENEG_LIMIT = LIMITS[n++]; |
|||
test(next); |
|||
} |
|||
next(); |
|||
})(); |
|||
|
|||
function test(next) { |
|||
var options = { |
|||
cert: fs.readFileSync(common.fixturesDir + '/test_cert.pem'), |
|||
key: fs.readFileSync(common.fixturesDir + '/test_key.pem') |
|||
}; |
|||
|
|||
var seenError = false; |
|||
|
|||
var server = https.createServer(options, function(req, res) { |
|||
var conn = req.connection; |
|||
conn.on('error', function(err) { |
|||
console.error('Caught exception: ' + err); |
|||
assert(/TLS session renegotiation attack/.test(err)); |
|||
conn.destroy(); |
|||
seenError = true; |
|||
}); |
|||
res.end('ok'); |
|||
}); |
|||
|
|||
server.listen(common.PORT, function() { |
|||
var args = ('s_client -connect 127.0.0.1:' + common.PORT).split(' '); |
|||
var child = spawn('openssl', args); |
|||
|
|||
child.stdout.pipe(process.stdout); |
|||
child.stderr.pipe(process.stderr); |
|||
|
|||
// count handshakes, start the attack after the initial handshake is done
|
|||
var handshakes = 0; |
|||
var renegs = 0; |
|||
|
|||
child.stderr.on('data', function(data) { |
|||
if (seenError) return; |
|||
handshakes += (('' + data).match(/verify return:1/g) || []).length; |
|||
if (handshakes === 2) spam(); |
|||
renegs += (('' + data).match(/RENEGOTIATING/g) || []).length; |
|||
}); |
|||
|
|||
child.on('exit', function() { |
|||
assert.equal(renegs, tls.CLIENT_RENEG_LIMIT + 1); |
|||
server.close(); |
|||
process.nextTick(next); |
|||
}); |
|||
|
|||
var closed = false; |
|||
child.stdin.on('error', function(err) { |
|||
assert.equal(err.code, 'EPIPE'); |
|||
closed = true; |
|||
}); |
|||
child.stdin.on('close', function() { |
|||
closed = true; |
|||
}); |
|||
|
|||
// simulate renegotiation attack
|
|||
function spam() { |
|||
if (closed) return; |
|||
child.stdin.write('R\n'); |
|||
setTimeout(spam, 50); |
|||
} |
|||
}); |
|||
} |
@ -0,0 +1,57 @@ |
|||
// Copyright Joyent, Inc. and other Node contributors.
|
|||
//
|
|||
// Permission is hereby granted, free of charge, to any person obtaining a
|
|||
// copy of this software and associated documentation files (the
|
|||
// "Software"), to deal in the Software without restriction, including
|
|||
// without limitation the rights to use, copy, modify, merge, publish,
|
|||
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
|||
// persons to whom the Software is furnished to do so, subject to the
|
|||
// following conditions:
|
|||
//
|
|||
// The above copyright notice and this permission notice shall be included
|
|||
// in all copies or substantial portions of the Software.
|
|||
//
|
|||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|||
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
|
|||
var assert = require('assert'), |
|||
common = require('../common'), |
|||
fork = require('child_process').fork, |
|||
fork = require('child_process').fork; |
|||
|
|||
var cp = fork(common.fixturesDir + '/child-process-message-and-exit.js'); |
|||
|
|||
var gotMessage = false, |
|||
gotExit = false, |
|||
gotClose = false; |
|||
|
|||
cp.on('message', function(message) { |
|||
assert(!gotMessage); |
|||
assert(!gotClose); |
|||
assert.strictEqual(message, 'hello'); |
|||
gotMessage = true; |
|||
}); |
|||
|
|||
cp.on('exit', function() { |
|||
assert(!gotExit); |
|||
assert(!gotClose); |
|||
gotExit = true; |
|||
}); |
|||
|
|||
cp.on('close', function() { |
|||
assert(gotMessage); |
|||
assert(gotExit); |
|||
assert(!gotClose); |
|||
gotClose = true; |
|||
}); |
|||
|
|||
process.on('exit', function() { |
|||
assert(gotMessage); |
|||
assert(gotExit); |
|||
assert(gotClose); |
|||
}); |
@ -0,0 +1,37 @@ |
|||
// Copyright Joyent, Inc. and other Node contributors.
|
|||
//
|
|||
// Permission is hereby granted, free of charge, to any person obtaining a
|
|||
// copy of this software and associated documentation files (the
|
|||
// "Software"), to deal in the Software without restriction, including
|
|||
// without limitation the rights to use, copy, modify, merge, publish,
|
|||
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
|||
// persons to whom the Software is furnished to do so, subject to the
|
|||
// following conditions:
|
|||
//
|
|||
// The above copyright notice and this permission notice shall be included
|
|||
// in all copies or substantial portions of the Software.
|
|||
//
|
|||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|||
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
|
|||
try { |
|||
var crypto = require('crypto'); |
|||
} catch (e) { |
|||
console.log('Not compiled with OPENSSL support.'); |
|||
process.exit(); |
|||
} |
|||
|
|||
// the missing var keyword is intentional
|
|||
domain = require('domain'); |
|||
|
|||
// should not throw a 'TypeError: undefined is not a function' exception
|
|||
crypto.randomBytes(8); |
|||
crypto.randomBytes(8, function() {}); |
|||
crypto.pseudoRandomBytes(8); |
|||
crypto.pseudoRandomBytes(8, function() {}); |
|||
crypto.pbkdf2('password', 'salt', 8, 8, function() {}); |
@ -0,0 +1,49 @@ |
|||
// Copyright Joyent, Inc. and other Node contributors.
|
|||
//
|
|||
// Permission is hereby granted, free of charge, to any person obtaining a
|
|||
// copy of this software and associated documentation files (the
|
|||
// "Software"), to deal in the Software without restriction, including
|
|||
// without limitation the rights to use, copy, modify, merge, publish,
|
|||
// distribute, sublicense, and/or sell copies of the Software, and to permit
|
|||
// persons to whom the Software is furnished to do so, subject to the
|
|||
// following conditions:
|
|||
//
|
|||
// The above copyright notice and this permission notice shall be included
|
|||
// in all copies or substantial portions of the Software.
|
|||
//
|
|||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|||
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
|
|||
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
|
|||
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|||
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
|||
// USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|||
|
|||
var common = require('../common'); |
|||
var assert = require('assert'); |
|||
var tls = require('tls'); |
|||
var fs = require('fs'); |
|||
|
|||
var clientConnected = 0; |
|||
var serverConnected = 0; |
|||
|
|||
var options = { |
|||
key: fs.readFileSync(common.fixturesDir + '/keys/agent1-key.pem'), |
|||
cert: fs.readFileSync(common.fixturesDir + '/keys/agent1-cert.pem') |
|||
}; |
|||
|
|||
var server = tls.Server(options, function(socket) { |
|||
++serverConnected; |
|||
server.close(); |
|||
}); |
|||
server.listen(common.PIPE, function() { |
|||
var client = tls.connect(common.PIPE, function() { |
|||
++clientConnected; |
|||
client.end(); |
|||
}); |
|||
}); |
|||
|
|||
process.on('exit', function() { |
|||
assert.equal(clientConnected, 1); |
|||
assert.equal(serverConnected, 1); |
|||
}); |
Loading…
Reference in new issue