From b68781e500c06877964e15b2a3c6f654a96bac2a Mon Sep 17 00:00:00 2001 From: Forrest L Norvell Date: Mon, 2 Nov 2015 17:53:58 -0800 Subject: [PATCH 1/7] deps: upgrade npm to 1.4.29 See https://github.com/npm/npm/releases/tag/v1.4.29 for details. Encourage users to upgrade to a newer npm, and lays the groundwork for getting npm@2 into Node 0.10 LTS. PR-URL: https://github.com/nodejs/node/pull/3639 Reviewed-By: Rod Vagg Reviewed-By: James M Snell --- deps/npm/CHANGELOG.md | 50 ++++++++ deps/npm/html/doc/README.html | 6 +- deps/npm/html/doc/api/npm-bin.html | 2 +- deps/npm/html/doc/api/npm-bugs.html | 2 +- deps/npm/html/doc/api/npm-cache.html | 2 +- deps/npm/html/doc/api/npm-commands.html | 2 +- deps/npm/html/doc/api/npm-config.html | 2 +- deps/npm/html/doc/api/npm-deprecate.html | 2 +- deps/npm/html/doc/api/npm-docs.html | 2 +- deps/npm/html/doc/api/npm-edit.html | 2 +- deps/npm/html/doc/api/npm-explore.html | 2 +- deps/npm/html/doc/api/npm-help-search.html | 2 +- deps/npm/html/doc/api/npm-init.html | 2 +- deps/npm/html/doc/api/npm-install.html | 2 +- deps/npm/html/doc/api/npm-link.html | 2 +- deps/npm/html/doc/api/npm-load.html | 2 +- deps/npm/html/doc/api/npm-ls.html | 2 +- deps/npm/html/doc/api/npm-outdated.html | 2 +- deps/npm/html/doc/api/npm-owner.html | 2 +- deps/npm/html/doc/api/npm-pack.html | 2 +- deps/npm/html/doc/api/npm-prefix.html | 2 +- deps/npm/html/doc/api/npm-prune.html | 2 +- deps/npm/html/doc/api/npm-publish.html | 2 +- deps/npm/html/doc/api/npm-rebuild.html | 2 +- deps/npm/html/doc/api/npm-repo.html | 2 +- deps/npm/html/doc/api/npm-restart.html | 2 +- deps/npm/html/doc/api/npm-root.html | 2 +- deps/npm/html/doc/api/npm-run-script.html | 2 +- deps/npm/html/doc/api/npm-search.html | 2 +- deps/npm/html/doc/api/npm-shrinkwrap.html | 2 +- deps/npm/html/doc/api/npm-start.html | 2 +- deps/npm/html/doc/api/npm-stop.html | 2 +- deps/npm/html/doc/api/npm-submodule.html | 2 +- deps/npm/html/doc/api/npm-tag.html | 2 +- deps/npm/html/doc/api/npm-test.html | 2 +- deps/npm/html/doc/api/npm-uninstall.html | 2 +- deps/npm/html/doc/api/npm-unpublish.html | 2 +- deps/npm/html/doc/api/npm-update.html | 2 +- deps/npm/html/doc/api/npm-version.html | 2 +- deps/npm/html/doc/api/npm-view.html | 2 +- deps/npm/html/doc/api/npm-whoami.html | 2 +- deps/npm/html/doc/api/npm.html | 4 +- deps/npm/html/doc/cli/npm-adduser.html | 2 +- deps/npm/html/doc/cli/npm-bin.html | 2 +- deps/npm/html/doc/cli/npm-bugs.html | 2 +- deps/npm/html/doc/cli/npm-build.html | 2 +- deps/npm/html/doc/cli/npm-bundle.html | 2 +- deps/npm/html/doc/cli/npm-cache.html | 2 +- deps/npm/html/doc/cli/npm-completion.html | 2 +- deps/npm/html/doc/cli/npm-config.html | 2 +- deps/npm/html/doc/cli/npm-dedupe.html | 2 +- deps/npm/html/doc/cli/npm-deprecate.html | 2 +- deps/npm/html/doc/cli/npm-docs.html | 2 +- deps/npm/html/doc/cli/npm-edit.html | 2 +- deps/npm/html/doc/cli/npm-explore.html | 2 +- deps/npm/html/doc/cli/npm-help-search.html | 2 +- deps/npm/html/doc/cli/npm-help.html | 2 +- deps/npm/html/doc/cli/npm-init.html | 2 +- deps/npm/html/doc/cli/npm-install.html | 2 +- deps/npm/html/doc/cli/npm-link.html | 2 +- deps/npm/html/doc/cli/npm-ls.html | 4 +- deps/npm/html/doc/cli/npm-outdated.html | 2 +- deps/npm/html/doc/cli/npm-owner.html | 2 +- deps/npm/html/doc/cli/npm-pack.html | 2 +- deps/npm/html/doc/cli/npm-prefix.html | 2 +- deps/npm/html/doc/cli/npm-prune.html | 2 +- deps/npm/html/doc/cli/npm-publish.html | 2 +- deps/npm/html/doc/cli/npm-rebuild.html | 2 +- deps/npm/html/doc/cli/npm-repo.html | 2 +- deps/npm/html/doc/cli/npm-restart.html | 2 +- deps/npm/html/doc/cli/npm-rm.html | 2 +- deps/npm/html/doc/cli/npm-root.html | 2 +- deps/npm/html/doc/cli/npm-run-script.html | 2 +- deps/npm/html/doc/cli/npm-search.html | 2 +- deps/npm/html/doc/cli/npm-shrinkwrap.html | 2 +- deps/npm/html/doc/cli/npm-star.html | 2 +- deps/npm/html/doc/cli/npm-stars.html | 2 +- deps/npm/html/doc/cli/npm-start.html | 2 +- deps/npm/html/doc/cli/npm-stop.html | 2 +- deps/npm/html/doc/cli/npm-submodule.html | 2 +- deps/npm/html/doc/cli/npm-tag.html | 2 +- deps/npm/html/doc/cli/npm-test.html | 2 +- deps/npm/html/doc/cli/npm-uninstall.html | 2 +- deps/npm/html/doc/cli/npm-unpublish.html | 2 +- deps/npm/html/doc/cli/npm-update.html | 2 +- deps/npm/html/doc/cli/npm-version.html | 2 +- deps/npm/html/doc/cli/npm-view.html | 2 +- deps/npm/html/doc/cli/npm-whoami.html | 2 +- deps/npm/html/doc/cli/npm.html | 10 +- deps/npm/html/doc/files/npm-folders.html | 2 +- deps/npm/html/doc/files/npm-global.html | 2 +- deps/npm/html/doc/files/npm-json.html | 2 +- deps/npm/html/doc/files/npmrc.html | 2 +- deps/npm/html/doc/files/package.json.html | 2 +- deps/npm/html/doc/index.html | 2 +- deps/npm/html/doc/misc/npm-coding-style.html | 2 +- deps/npm/html/doc/misc/npm-config.html | 2 +- deps/npm/html/doc/misc/npm-developers.html | 2 +- deps/npm/html/doc/misc/npm-disputes.html | 8 +- deps/npm/html/doc/misc/npm-faq.html | 4 +- deps/npm/html/doc/misc/npm-index.html | 2 +- deps/npm/html/doc/misc/npm-registry.html | 2 +- deps/npm/html/doc/misc/npm-scope.html | 82 ------------- deps/npm/html/doc/misc/npm-scripts.html | 2 +- deps/npm/html/doc/misc/removing-npm.html | 2 +- deps/npm/html/doc/misc/semver.html | 2 +- deps/npm/lib/cache.js | 9 ++ deps/npm/lib/npm.js | 15 +++ deps/npm/man/man1/npm-README.1 | 11 +- deps/npm/man/man1/npm-adduser.1 | 6 +- deps/npm/man/man1/npm-bin.1 | 6 +- deps/npm/man/man1/npm-bugs.1 | 6 +- deps/npm/man/man1/npm-build.1 | 6 +- deps/npm/man/man1/npm-bundle.1 | 6 +- deps/npm/man/man1/npm-cache.1 | 6 +- deps/npm/man/man1/npm-completion.1 | 6 +- deps/npm/man/man1/npm-config.1 | 6 +- deps/npm/man/man1/npm-dedupe.1 | 6 +- deps/npm/man/man1/npm-deprecate.1 | 6 +- deps/npm/man/man1/npm-docs.1 | 6 +- deps/npm/man/man1/npm-edit.1 | 6 +- deps/npm/man/man1/npm-explore.1 | 6 +- deps/npm/man/man1/npm-help-search.1 | 6 +- deps/npm/man/man1/npm-help.1 | 6 +- deps/npm/man/man1/npm-init.1 | 6 +- deps/npm/man/man1/npm-install.1 | 52 ++++++--- deps/npm/man/man1/npm-link.1 | 6 +- deps/npm/man/man1/npm-ls.1 | 8 +- deps/npm/man/man1/npm-outdated.1 | 6 +- deps/npm/man/man1/npm-owner.1 | 6 +- deps/npm/man/man1/npm-pack.1 | 6 +- deps/npm/man/man1/npm-prefix.1 | 6 +- deps/npm/man/man1/npm-prune.1 | 6 +- deps/npm/man/man1/npm-publish.1 | 6 +- deps/npm/man/man1/npm-rebuild.1 | 6 +- deps/npm/man/man1/npm-repo.1 | 6 +- deps/npm/man/man1/npm-restart.1 | 6 +- deps/npm/man/man1/npm-rm.1 | 6 +- deps/npm/man/man1/npm-root.1 | 6 +- deps/npm/man/man1/npm-run-script.1 | 6 +- deps/npm/man/man1/npm-search.1 | 6 +- deps/npm/man/man1/npm-shrinkwrap.1 | 6 +- deps/npm/man/man1/npm-star.1 | 6 +- deps/npm/man/man1/npm-stars.1 | 6 +- deps/npm/man/man1/npm-start.1 | 6 +- deps/npm/man/man1/npm-stop.1 | 6 +- deps/npm/man/man1/npm-submodule.1 | 6 +- deps/npm/man/man1/npm-tag.1 | 6 +- deps/npm/man/man1/npm-test.1 | 6 +- deps/npm/man/man1/npm-uninstall.1 | 6 +- deps/npm/man/man1/npm-unpublish.1 | 6 +- deps/npm/man/man1/npm-update.1 | 6 +- deps/npm/man/man1/npm-version.1 | 6 +- deps/npm/man/man1/npm-view.1 | 6 +- deps/npm/man/man1/npm-whoami.1 | 6 +- deps/npm/man/man1/npm.1 | 8 +- deps/npm/man/man3/npm-bin.3 | 6 +- deps/npm/man/man3/npm-bugs.3 | 6 +- deps/npm/man/man3/npm-cache.3 | 6 +- deps/npm/man/man3/npm-commands.3 | 6 +- deps/npm/man/man3/npm-config.3 | 6 +- deps/npm/man/man3/npm-deprecate.3 | 6 +- deps/npm/man/man3/npm-docs.3 | 6 +- deps/npm/man/man3/npm-edit.3 | 6 +- deps/npm/man/man3/npm-explore.3 | 6 +- deps/npm/man/man3/npm-help-search.3 | 6 +- deps/npm/man/man3/npm-init.3 | 6 +- deps/npm/man/man3/npm-install.3 | 6 +- deps/npm/man/man3/npm-link.3 | 6 +- deps/npm/man/man3/npm-load.3 | 6 +- deps/npm/man/man3/npm-ls.3 | 6 +- deps/npm/man/man3/npm-outdated.3 | 6 +- deps/npm/man/man3/npm-owner.3 | 6 +- deps/npm/man/man3/npm-pack.3 | 6 +- deps/npm/man/man3/npm-prefix.3 | 6 +- deps/npm/man/man3/npm-prune.3 | 6 +- deps/npm/man/man3/npm-publish.3 | 6 +- deps/npm/man/man3/npm-rebuild.3 | 6 +- deps/npm/man/man3/npm-repo.3 | 6 +- deps/npm/man/man3/npm-restart.3 | 6 +- deps/npm/man/man3/npm-root.3 | 6 +- deps/npm/man/man3/npm-run-script.3 | 6 +- deps/npm/man/man3/npm-search.3 | 6 +- deps/npm/man/man3/npm-shrinkwrap.3 | 6 +- deps/npm/man/man3/npm-start.3 | 6 +- deps/npm/man/man3/npm-stop.3 | 6 +- deps/npm/man/man3/npm-submodule.3 | 6 +- deps/npm/man/man3/npm-tag.3 | 6 +- deps/npm/man/man3/npm-test.3 | 6 +- deps/npm/man/man3/npm-uninstall.3 | 6 +- deps/npm/man/man3/npm-unpublish.3 | 6 +- deps/npm/man/man3/npm-update.3 | 6 +- deps/npm/man/man3/npm-version.3 | 6 +- deps/npm/man/man3/npm-view.3 | 6 +- deps/npm/man/man3/npm-whoami.3 | 6 +- deps/npm/man/man3/npm.3 | 8 +- deps/npm/man/man5/npm-folders.5 | 6 +- deps/npm/man/man5/npm-global.5 | 6 +- deps/npm/man/man5/npm-json.5 | 6 +- deps/npm/man/man5/npmrc.5 | 6 +- deps/npm/man/man5/package.json.5 | 6 +- deps/npm/man/man7/npm-coding-style.7 | 6 +- deps/npm/man/man7/npm-config.7 | 6 +- deps/npm/man/man7/npm-developers.7 | 6 +- deps/npm/man/man7/npm-disputes.7 | 6 +- deps/npm/man/man7/npm-faq.7 | 6 +- deps/npm/man/man7/npm-index.7 | 6 +- deps/npm/man/man7/npm-registry.7 | 6 +- deps/npm/man/man7/npm-scope.7 | 108 ------------------ deps/npm/man/man7/npm-scripts.7 | 6 +- deps/npm/man/man7/removing-npm.7 | 6 +- deps/npm/man/man7/semver.7 | 6 +- .../@npm/npm-registry-client/cache.json | 1 + .../test/fixtures/underscore/1.3.3/cache.json | 1 + .../fixtures/underscore/1.3.3/package.tgz | Bin 0 -> 58692 bytes .../test/fixtures/underscore/cache.json | 1 + deps/npm/package.json | 2 +- .../test/tap/cache-add-scoped-unsupported.js | 12 ++ deps/npm/test/tap/cache-add-unpublished.js | 51 +-------- deps/npm/test/tap/prepublish.js | 7 +- .../test/tap/scripts-whitespace-windows.js | 14 ++- 221 files changed, 569 insertions(+), 691 deletions(-) delete mode 100644 deps/npm/html/doc/misc/npm-scope.html delete mode 100644 deps/npm/man/man7/npm-scope.7 create mode 100644 deps/npm/node_modules/npm-registry-client/test/fixtures/@npm/npm-registry-client/cache.json create mode 100644 deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/cache.json create mode 100644 deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/package.tgz create mode 100644 deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/cache.json create mode 100644 deps/npm/test/tap/cache-add-scoped-unsupported.js diff --git a/deps/npm/CHANGELOG.md b/deps/npm/CHANGELOG.md index 330c1ac17adcf3..99ead24e84671f 100644 --- a/deps/npm/CHANGELOG.md +++ b/deps/npm/CHANGELOG.md @@ -1,3 +1,53 @@ +### v1.4.29 (2015-10-29): + +#### THINGS ARE HAPPENING IN LTS LAND + +In a special one-off release as part of the [strategy to get a version of npm +into Node LTS that works with the current +registry](https://github.com/nodejs/LTS/issues/37), modify npm to print out +this deprecation banner literally every time npm is invoked to do anything: + +``` +npm WARN deprecated This version of npm lacks support for important features, +npm WARN deprecated such as scoped packages, offered by the primary npm +npm WARN deprecated registry. Consider upgrading to at least npm@2, if not the +npm WARN deprecated latest stable version. To upgrade to npm@2, run: +npm WARN deprecated +npm WARN deprecated npm -g install npm@latest-2 +npm WARN deprecated +npm WARN deprecated To upgrade to the latest stable version, run: +npm WARN deprecated +npm WARN deprecated npm -g install npm@latest +npm WARN deprecated +npm WARN deprecated (Depending on how Node.js was installed on your system, you +npm WARN deprecated may need to prefix the preceding commands with `sudo`, or if +npm WARN deprecated on Windows, run them from an Administrator prompt.) +npm WARN deprecated +npm WARN deprecated If you're running the version of npm bundled with +npm WARN deprecated Node.js 0.10 LTS, be aware that the next version of 0.10 LTS +npm WARN deprecated will be bundled with a version of npm@2, which has some small +npm WARN deprecated backwards-incompatible changes made to `npm run-script` and +npm WARN deprecated semver behavior. +``` + +The message basically tells the tale: Node 0.10 will finally be getting +`npm@2`, so those of you who haven't upgraded your build systems to deal with +its (relatively small) breaking changes should do so now. + +Also, this version doesn't even pretend that it can deal with scoped packages, +which, given the confusing behavior of older versions of `npm@1.4`, where it +would sometimes try to install packages from GitHub, is a distinct improvement. + +There is no good reason for you as an end user to upgrade to this version of +npm yourself. + +* [`709e9b4`](https://github.com/npm/npm/commit/709e9b44f5df9817a1c4babfbf26a2329bd265fb) + Print 20-line deprecation banner on all command invocations. + ([@othiym23](https://github.com/othiym23)) +* [`0c29d09`](https://github.com/npm/npm/commit/0c29d0906608e8e174bd30a7a245e19795326051) + Crash out immediately with an exhortation to upgrade on attempts to use + scoped packages. ([@othiym23](https://github.com/othiym23)) + ### v1.4.28 (2014-09-12): * [`f4540b6`](https://github.com/npm/npm/commit/f4540b6537a87e653d7495a9ddcf72949fdd4d14) diff --git a/deps/npm/html/doc/README.html b/deps/npm/html/doc/README.html index 6a4832313b0ee2..a3537f75b7bdbe 100644 --- a/deps/npm/html/doc/README.html +++ b/deps/npm/html/doc/README.html @@ -141,7 +141,7 @@

If you have a complaint about a package in the public npm registry, and cannot resolve it with the package owner, please email -support@npmjs.com and explain the situation.

+support@npmjs.com and explain the situation.

Any data published to The npm Registry (including user account information) may be removed or modified at the sole discretion of the npm server administrators.

@@ -161,7 +161,7 @@

BUGS

  • web: https://github.com/npm/npm/issues
  • email: -npm-@googlegroups.com
  • +npm-@googlegroups.com

    Be sure to include all of the output from the npm command that didn't work as expected. The npm-debug.log file is also helpful to provide.

    @@ -186,5 +186,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/api/npm-bin.html b/deps/npm/html/doc/api/npm-bin.html index 3a170b0244e917..0b1d1e791de26f 100644 --- a/deps/npm/html/doc/api/npm-bin.html +++ b/deps/npm/html/doc/api/npm-bin.html @@ -28,5 +28,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-bugs.html b/deps/npm/html/doc/api/npm-bugs.html index 1ab1393fff292a..fd06eef5ea6af3 100644 --- a/deps/npm/html/doc/api/npm-bugs.html +++ b/deps/npm/html/doc/api/npm-bugs.html @@ -33,5 +33,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-cache.html b/deps/npm/html/doc/api/npm-cache.html index ed67808303f002..470429ff164c67 100644 --- a/deps/npm/html/doc/api/npm-cache.html +++ b/deps/npm/html/doc/api/npm-cache.html @@ -42,5 +42,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-commands.html b/deps/npm/html/doc/api/npm-commands.html index 9ab89fb5cd00ba..a51579f947f82a 100644 --- a/deps/npm/html/doc/api/npm-commands.html +++ b/deps/npm/html/doc/api/npm-commands.html @@ -36,5 +36,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/api/npm-config.html b/deps/npm/html/doc/api/npm-config.html index 2fe37f217cbf53..b35437a58289bd 100644 --- a/deps/npm/html/doc/api/npm-config.html +++ b/deps/npm/html/doc/api/npm-config.html @@ -57,5 +57,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/api/npm-deprecate.html b/deps/npm/html/doc/api/npm-deprecate.html index 557d2efe3c46a0..5ef7ec3ed7ce69 100644 --- a/deps/npm/html/doc/api/npm-deprecate.html +++ b/deps/npm/html/doc/api/npm-deprecate.html @@ -47,5 +47,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/api/npm-docs.html b/deps/npm/html/doc/api/npm-docs.html index d42b27b037ffec..3ced066899f44f 100644 --- a/deps/npm/html/doc/api/npm-docs.html +++ b/deps/npm/html/doc/api/npm-docs.html @@ -33,5 +33,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-edit.html b/deps/npm/html/doc/api/npm-edit.html index f6f4617e1281a6..6cd6ee3509a7f7 100644 --- a/deps/npm/html/doc/api/npm-edit.html +++ b/deps/npm/html/doc/api/npm-edit.html @@ -36,5 +36,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-explore.html b/deps/npm/html/doc/api/npm-explore.html index 0136e705a2aa2c..452c5fa9941b21 100644 --- a/deps/npm/html/doc/api/npm-explore.html +++ b/deps/npm/html/doc/api/npm-explore.html @@ -31,5 +31,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-help-search.html b/deps/npm/html/doc/api/npm-help-search.html index e2bb08abbd0091..ecfb04cdcfa77d 100644 --- a/deps/npm/html/doc/api/npm-help-search.html +++ b/deps/npm/html/doc/api/npm-help-search.html @@ -44,5 +44,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-init.html b/deps/npm/html/doc/api/npm-init.html index ca23df8f483049..9715d46dd96a7e 100644 --- a/deps/npm/html/doc/api/npm-init.html +++ b/deps/npm/html/doc/api/npm-init.html @@ -39,5 +39,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/api/npm-install.html b/deps/npm/html/doc/api/npm-install.html index c0e0eb78bff435..3ee78a5672e5f6 100644 --- a/deps/npm/html/doc/api/npm-install.html +++ b/deps/npm/html/doc/api/npm-install.html @@ -32,5 +32,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-link.html b/deps/npm/html/doc/api/npm-link.html index aff1250a4ccccb..c0d7f8e0f44b41 100644 --- a/deps/npm/html/doc/api/npm-link.html +++ b/deps/npm/html/doc/api/npm-link.html @@ -42,5 +42,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-load.html b/deps/npm/html/doc/api/npm-load.html index 7451a75728e966..6d911616c18e39 100644 --- a/deps/npm/html/doc/api/npm-load.html +++ b/deps/npm/html/doc/api/npm-load.html @@ -37,5 +37,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-ls.html b/deps/npm/html/doc/api/npm-ls.html index f1c2504918d03e..54fb52774680b7 100644 --- a/deps/npm/html/doc/api/npm-ls.html +++ b/deps/npm/html/doc/api/npm-ls.html @@ -63,5 +63,5 @@

    global

           - + diff --git a/deps/npm/html/doc/api/npm-outdated.html b/deps/npm/html/doc/api/npm-outdated.html index a7e88b882c2a4e..f38b9a27e62e63 100644 --- a/deps/npm/html/doc/api/npm-outdated.html +++ b/deps/npm/html/doc/api/npm-outdated.html @@ -28,5 +28,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-owner.html b/deps/npm/html/doc/api/npm-owner.html index eb8f9abafa1ca0..0aee2e81091687 100644 --- a/deps/npm/html/doc/api/npm-owner.html +++ b/deps/npm/html/doc/api/npm-owner.html @@ -47,5 +47,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/api/npm-pack.html b/deps/npm/html/doc/api/npm-pack.html index c2476f20e00956..afe9d181599066 100644 --- a/deps/npm/html/doc/api/npm-pack.html +++ b/deps/npm/html/doc/api/npm-pack.html @@ -33,5 +33,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-prefix.html b/deps/npm/html/doc/api/npm-prefix.html index 583079e336d93a..f543c0d1d3a583 100644 --- a/deps/npm/html/doc/api/npm-prefix.html +++ b/deps/npm/html/doc/api/npm-prefix.html @@ -29,5 +29,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-prune.html b/deps/npm/html/doc/api/npm-prune.html index fabfab57d3c5bf..a31d083c2abf5f 100644 --- a/deps/npm/html/doc/api/npm-prune.html +++ b/deps/npm/html/doc/api/npm-prune.html @@ -30,5 +30,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-publish.html b/deps/npm/html/doc/api/npm-publish.html index 9d338cebbd7aaf..56d2476efaee8b 100644 --- a/deps/npm/html/doc/api/npm-publish.html +++ b/deps/npm/html/doc/api/npm-publish.html @@ -46,5 +46,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/api/npm-rebuild.html b/deps/npm/html/doc/api/npm-rebuild.html index 821becbf54377f..613cd5866da5cf 100644 --- a/deps/npm/html/doc/api/npm-rebuild.html +++ b/deps/npm/html/doc/api/npm-rebuild.html @@ -30,5 +30,5 @@

    CONFIGURATION

           - + diff --git a/deps/npm/html/doc/api/npm-repo.html b/deps/npm/html/doc/api/npm-repo.html index d624659c155950..042313d5e402d4 100644 --- a/deps/npm/html/doc/api/npm-repo.html +++ b/deps/npm/html/doc/api/npm-repo.html @@ -33,5 +33,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-restart.html b/deps/npm/html/doc/api/npm-restart.html index 67729df285db3f..d827cb5f8a6fe3 100644 --- a/deps/npm/html/doc/api/npm-restart.html +++ b/deps/npm/html/doc/api/npm-restart.html @@ -36,5 +36,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/api/npm-root.html b/deps/npm/html/doc/api/npm-root.html index 4f9b52931668f5..1ddcb762c53545 100644 --- a/deps/npm/html/doc/api/npm-root.html +++ b/deps/npm/html/doc/api/npm-root.html @@ -29,5 +29,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-run-script.html b/deps/npm/html/doc/api/npm-run-script.html index c7ca6138338efe..d0bb12efeac261 100644 --- a/deps/npm/html/doc/api/npm-run-script.html +++ b/deps/npm/html/doc/api/npm-run-script.html @@ -41,5 +41,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/api/npm-search.html b/deps/npm/html/doc/api/npm-search.html index 72fa33509daa4a..80cf57c9b5b977 100644 --- a/deps/npm/html/doc/api/npm-search.html +++ b/deps/npm/html/doc/api/npm-search.html @@ -53,5 +53,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-shrinkwrap.html b/deps/npm/html/doc/api/npm-shrinkwrap.html index 172646a9ee59a7..f3780155562c06 100644 --- a/deps/npm/html/doc/api/npm-shrinkwrap.html +++ b/deps/npm/html/doc/api/npm-shrinkwrap.html @@ -33,5 +33,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-start.html b/deps/npm/html/doc/api/npm-start.html index 813b28ce2aac54..f928820005563d 100644 --- a/deps/npm/html/doc/api/npm-start.html +++ b/deps/npm/html/doc/api/npm-start.html @@ -28,5 +28,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-stop.html b/deps/npm/html/doc/api/npm-stop.html index 65f5c9f26e6180..3c418ff3c37405 100644 --- a/deps/npm/html/doc/api/npm-stop.html +++ b/deps/npm/html/doc/api/npm-stop.html @@ -28,5 +28,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-submodule.html b/deps/npm/html/doc/api/npm-submodule.html index 35364403c35ce4..f374f1d3adb2df 100644 --- a/deps/npm/html/doc/api/npm-submodule.html +++ b/deps/npm/html/doc/api/npm-submodule.html @@ -42,5 +42,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/api/npm-tag.html b/deps/npm/html/doc/api/npm-tag.html index cf9c71c3c502c7..5a3a949c1f9f27 100644 --- a/deps/npm/html/doc/api/npm-tag.html +++ b/deps/npm/html/doc/api/npm-tag.html @@ -36,5 +36,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-test.html b/deps/npm/html/doc/api/npm-test.html index f2d37483ac38b6..4c46e540f29b82 100644 --- a/deps/npm/html/doc/api/npm-test.html +++ b/deps/npm/html/doc/api/npm-test.html @@ -30,5 +30,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-uninstall.html b/deps/npm/html/doc/api/npm-uninstall.html index 2abfd089964622..6f6a5c64ad18ab 100644 --- a/deps/npm/html/doc/api/npm-uninstall.html +++ b/deps/npm/html/doc/api/npm-uninstall.html @@ -30,5 +30,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-unpublish.html b/deps/npm/html/doc/api/npm-unpublish.html index f6412cf7d18947..70df3a88b5005c 100644 --- a/deps/npm/html/doc/api/npm-unpublish.html +++ b/deps/npm/html/doc/api/npm-unpublish.html @@ -33,5 +33,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-update.html b/deps/npm/html/doc/api/npm-update.html index 60bcde26543677..4c856608567ffd 100644 --- a/deps/npm/html/doc/api/npm-update.html +++ b/deps/npm/html/doc/api/npm-update.html @@ -27,5 +27,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-version.html b/deps/npm/html/doc/api/npm-version.html index 898582216478da..a686ef097cc3e8 100644 --- a/deps/npm/html/doc/api/npm-version.html +++ b/deps/npm/html/doc/api/npm-version.html @@ -32,5 +32,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm-view.html b/deps/npm/html/doc/api/npm-view.html index 59f68ee64ac045..8428dc8b3f205a 100644 --- a/deps/npm/html/doc/api/npm-view.html +++ b/deps/npm/html/doc/api/npm-view.html @@ -81,5 +81,5 @@

    RETURN VALUE

           - + diff --git a/deps/npm/html/doc/api/npm-whoami.html b/deps/npm/html/doc/api/npm-whoami.html index 9380f8664a73ff..3d15918e68e280 100644 --- a/deps/npm/html/doc/api/npm-whoami.html +++ b/deps/npm/html/doc/api/npm-whoami.html @@ -29,5 +29,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/api/npm.html b/deps/npm/html/doc/api/npm.html index 2335b7a226d877..11260591461860 100644 --- a/deps/npm/html/doc/api/npm.html +++ b/deps/npm/html/doc/api/npm.html @@ -23,7 +23,7 @@

    SYNOPSIS

    npm.commands.install(["package"], cb) })

    VERSION

    -

    1.4.28

    +

    1.4.29

    DESCRIPTION

    This is the API documentation for npm. To find documentation of the command line @@ -110,5 +110,5 @@

    ABBREVS

           - + diff --git a/deps/npm/html/doc/cli/npm-adduser.html b/deps/npm/html/doc/cli/npm-adduser.html index 9a0e55ee6079f1..2a8e3d0626d033 100644 --- a/deps/npm/html/doc/cli/npm-adduser.html +++ b/deps/npm/html/doc/cli/npm-adduser.html @@ -46,5 +46,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-bin.html b/deps/npm/html/doc/cli/npm-bin.html index d6e055aaa3d140..f66f563e9c985f 100644 --- a/deps/npm/html/doc/cli/npm-bin.html +++ b/deps/npm/html/doc/cli/npm-bin.html @@ -35,5 +35,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-bugs.html b/deps/npm/html/doc/cli/npm-bugs.html index 8693485aa3bcc9..6f80b74b630d0a 100644 --- a/deps/npm/html/doc/cli/npm-bugs.html +++ b/deps/npm/html/doc/cli/npm-bugs.html @@ -54,5 +54,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-build.html b/deps/npm/html/doc/cli/npm-build.html index 58dfd36fde0a69..78002adfaf75b1 100644 --- a/deps/npm/html/doc/cli/npm-build.html +++ b/deps/npm/html/doc/cli/npm-build.html @@ -38,5 +38,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-bundle.html b/deps/npm/html/doc/cli/npm-bundle.html index 47355abbf215cb..e2191db1fc7bc9 100644 --- a/deps/npm/html/doc/cli/npm-bundle.html +++ b/deps/npm/html/doc/cli/npm-bundle.html @@ -31,5 +31,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-cache.html b/deps/npm/html/doc/cli/npm-cache.html index 3b84f979dccdf1..1c57183e487a83 100644 --- a/deps/npm/html/doc/cli/npm-cache.html +++ b/deps/npm/html/doc/cli/npm-cache.html @@ -81,5 +81,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-completion.html b/deps/npm/html/doc/cli/npm-completion.html index cc56d45623d45b..b446703351f334 100644 --- a/deps/npm/html/doc/cli/npm-completion.html +++ b/deps/npm/html/doc/cli/npm-completion.html @@ -42,5 +42,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-config.html b/deps/npm/html/doc/cli/npm-config.html index 52efed825b98ac..709b7db881b63d 100644 --- a/deps/npm/html/doc/cli/npm-config.html +++ b/deps/npm/html/doc/cli/npm-config.html @@ -66,5 +66,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-dedupe.html b/deps/npm/html/doc/cli/npm-dedupe.html index f2d9794de90796..fc9afca7d59a1a 100644 --- a/deps/npm/html/doc/cli/npm-dedupe.html +++ b/deps/npm/html/doc/cli/npm-dedupe.html @@ -63,5 +63,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-deprecate.html b/deps/npm/html/doc/cli/npm-deprecate.html index 01640248b57514..7f066cafe06230 100644 --- a/deps/npm/html/doc/cli/npm-deprecate.html +++ b/deps/npm/html/doc/cli/npm-deprecate.html @@ -38,5 +38,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-docs.html b/deps/npm/html/doc/cli/npm-docs.html index 05b445cdaed2b7..64b646814687dd 100644 --- a/deps/npm/html/doc/cli/npm-docs.html +++ b/deps/npm/html/doc/cli/npm-docs.html @@ -56,5 +56,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-edit.html b/deps/npm/html/doc/cli/npm-edit.html index 50d21486a0eca8..0e12345c7e59c7 100644 --- a/deps/npm/html/doc/cli/npm-edit.html +++ b/deps/npm/html/doc/cli/npm-edit.html @@ -49,5 +49,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-explore.html b/deps/npm/html/doc/cli/npm-explore.html index c3c3127de6c2e0..fbbf1dd75cb669 100644 --- a/deps/npm/html/doc/cli/npm-explore.html +++ b/deps/npm/html/doc/cli/npm-explore.html @@ -50,5 +50,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-help-search.html b/deps/npm/html/doc/cli/npm-help-search.html index d09aecf8c1bcdd..fa5240c6142784 100644 --- a/deps/npm/html/doc/cli/npm-help-search.html +++ b/deps/npm/html/doc/cli/npm-help-search.html @@ -46,5 +46,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-help.html b/deps/npm/html/doc/cli/npm-help.html index bb5a2e16677ca9..857e946e2d8428 100644 --- a/deps/npm/html/doc/cli/npm-help.html +++ b/deps/npm/html/doc/cli/npm-help.html @@ -52,5 +52,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-init.html b/deps/npm/html/doc/cli/npm-init.html index ec53ca256799a1..14cbed3efa2aed 100644 --- a/deps/npm/html/doc/cli/npm-init.html +++ b/deps/npm/html/doc/cli/npm-init.html @@ -38,5 +38,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-install.html b/deps/npm/html/doc/cli/npm-install.html index 28b6afe39dda16..4e11eea53e7a43 100644 --- a/deps/npm/html/doc/cli/npm-install.html +++ b/deps/npm/html/doc/cli/npm-install.html @@ -220,5 +220,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-link.html b/deps/npm/html/doc/cli/npm-link.html index 0324ca130ee0e0..ece85bebf51efe 100644 --- a/deps/npm/html/doc/cli/npm-link.html +++ b/deps/npm/html/doc/cli/npm-link.html @@ -66,5 +66,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-ls.html b/deps/npm/html/doc/cli/npm-ls.html index 0e1fe6f358cfb5..307bc634910428 100644 --- a/deps/npm/html/doc/cli/npm-ls.html +++ b/deps/npm/html/doc/cli/npm-ls.html @@ -22,7 +22,7 @@

    SYNOPSIS

    limit the results to only the paths to the packages named. Note that nested packages will also show the paths to the specified packages. For example, running npm ls promzard in npm's source tree will show:

    -
    npm@1.4.28 /path/to/npm
    +
    npm@1.4.29 /path/to/npm
     └─┬ init-package-json@0.0.4
       └── promzard@0.1.5
     

    It will print out extraneous, missing, and invalid packages.

    @@ -85,5 +85,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-outdated.html b/deps/npm/html/doc/cli/npm-outdated.html index f4b3e1307e692d..f736ccaf84529a 100644 --- a/deps/npm/html/doc/cli/npm-outdated.html +++ b/deps/npm/html/doc/cli/npm-outdated.html @@ -67,5 +67,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-owner.html b/deps/npm/html/doc/cli/npm-owner.html index 4dd7b386d63908..f9e0046dbde193 100644 --- a/deps/npm/html/doc/cli/npm-owner.html +++ b/deps/npm/html/doc/cli/npm-owner.html @@ -49,5 +49,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-pack.html b/deps/npm/html/doc/cli/npm-pack.html index b5a68f27b7c1be..9e1a1a6079910b 100644 --- a/deps/npm/html/doc/cli/npm-pack.html +++ b/deps/npm/html/doc/cli/npm-pack.html @@ -41,5 +41,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-prefix.html b/deps/npm/html/doc/cli/npm-prefix.html index 56ef84cbc93027..bb43ab1da3a830 100644 --- a/deps/npm/html/doc/cli/npm-prefix.html +++ b/deps/npm/html/doc/cli/npm-prefix.html @@ -35,5 +35,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-prune.html b/deps/npm/html/doc/cli/npm-prune.html index 9db5665b33bf69..604dc2f769b6dd 100644 --- a/deps/npm/html/doc/cli/npm-prune.html +++ b/deps/npm/html/doc/cli/npm-prune.html @@ -39,5 +39,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-publish.html b/deps/npm/html/doc/cli/npm-publish.html index 573f72314f05eb..635418f2759562 100644 --- a/deps/npm/html/doc/cli/npm-publish.html +++ b/deps/npm/html/doc/cli/npm-publish.html @@ -54,5 +54,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-rebuild.html b/deps/npm/html/doc/cli/npm-rebuild.html index 3334c695f8df70..72bacd7e657d5a 100644 --- a/deps/npm/html/doc/cli/npm-rebuild.html +++ b/deps/npm/html/doc/cli/npm-rebuild.html @@ -38,5 +38,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-repo.html b/deps/npm/html/doc/cli/npm-repo.html index 3ad91979de18a7..64462a481300cd 100644 --- a/deps/npm/html/doc/cli/npm-repo.html +++ b/deps/npm/html/doc/cli/npm-repo.html @@ -42,5 +42,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-restart.html b/deps/npm/html/doc/cli/npm-restart.html index 115765cb07cbf5..c815eac3539d28 100644 --- a/deps/npm/html/doc/cli/npm-restart.html +++ b/deps/npm/html/doc/cli/npm-restart.html @@ -37,5 +37,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-rm.html b/deps/npm/html/doc/cli/npm-rm.html index 8622174552d4b9..895a230e77fe93 100644 --- a/deps/npm/html/doc/cli/npm-rm.html +++ b/deps/npm/html/doc/cli/npm-rm.html @@ -39,5 +39,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-root.html b/deps/npm/html/doc/cli/npm-root.html index b7be0eab402210..43da1e98449f47 100644 --- a/deps/npm/html/doc/cli/npm-root.html +++ b/deps/npm/html/doc/cli/npm-root.html @@ -35,5 +35,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-run-script.html b/deps/npm/html/doc/cli/npm-run-script.html index efaed0d9455637..9ed0741e36d168 100644 --- a/deps/npm/html/doc/cli/npm-run-script.html +++ b/deps/npm/html/doc/cli/npm-run-script.html @@ -40,5 +40,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-search.html b/deps/npm/html/doc/cli/npm-search.html index cbed4886460a21..84fce3bddd451c 100644 --- a/deps/npm/html/doc/cli/npm-search.html +++ b/deps/npm/html/doc/cli/npm-search.html @@ -49,5 +49,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-shrinkwrap.html b/deps/npm/html/doc/cli/npm-shrinkwrap.html index 37c8c9c05c84c2..db8aa0aa9313f6 100644 --- a/deps/npm/html/doc/cli/npm-shrinkwrap.html +++ b/deps/npm/html/doc/cli/npm-shrinkwrap.html @@ -164,5 +164,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-star.html b/deps/npm/html/doc/cli/npm-star.html index 5e98d0f272ddff..34fa2926c3fdd1 100644 --- a/deps/npm/html/doc/cli/npm-star.html +++ b/deps/npm/html/doc/cli/npm-star.html @@ -36,5 +36,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-stars.html b/deps/npm/html/doc/cli/npm-stars.html index c13ede22b8f528..916592833f090d 100644 --- a/deps/npm/html/doc/cli/npm-stars.html +++ b/deps/npm/html/doc/cli/npm-stars.html @@ -37,5 +37,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-start.html b/deps/npm/html/doc/cli/npm-start.html index 305050e41a62d5..084972206eba76 100644 --- a/deps/npm/html/doc/cli/npm-start.html +++ b/deps/npm/html/doc/cli/npm-start.html @@ -34,5 +34,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-stop.html b/deps/npm/html/doc/cli/npm-stop.html index 519fa856ce3b8a..09afa2178d0634 100644 --- a/deps/npm/html/doc/cli/npm-stop.html +++ b/deps/npm/html/doc/cli/npm-stop.html @@ -34,5 +34,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-submodule.html b/deps/npm/html/doc/cli/npm-submodule.html index 6716c4a11cce24..423c01b3c01337 100644 --- a/deps/npm/html/doc/cli/npm-submodule.html +++ b/deps/npm/html/doc/cli/npm-submodule.html @@ -42,5 +42,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-tag.html b/deps/npm/html/doc/cli/npm-tag.html index 40a2ffe89fa7bc..3d0d1e089bb193 100644 --- a/deps/npm/html/doc/cli/npm-tag.html +++ b/deps/npm/html/doc/cli/npm-tag.html @@ -44,5 +44,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-test.html b/deps/npm/html/doc/cli/npm-test.html index cc3d56d010b8a1..66b362aed39cf9 100644 --- a/deps/npm/html/doc/cli/npm-test.html +++ b/deps/npm/html/doc/cli/npm-test.html @@ -37,5 +37,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-uninstall.html b/deps/npm/html/doc/cli/npm-uninstall.html index 4f5a064606dc5e..55b03655544645 100644 --- a/deps/npm/html/doc/cli/npm-uninstall.html +++ b/deps/npm/html/doc/cli/npm-uninstall.html @@ -55,5 +55,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/cli/npm-unpublish.html b/deps/npm/html/doc/cli/npm-unpublish.html index be9430a15c5a5d..3652da17b4668a 100644 --- a/deps/npm/html/doc/cli/npm-unpublish.html +++ b/deps/npm/html/doc/cli/npm-unpublish.html @@ -46,5 +46,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-update.html b/deps/npm/html/doc/cli/npm-update.html index 650fd89f56dfde..2c4abb11232011 100644 --- a/deps/npm/html/doc/cli/npm-update.html +++ b/deps/npm/html/doc/cli/npm-update.html @@ -38,5 +38,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-version.html b/deps/npm/html/doc/cli/npm-version.html index 47ca7e582342d3..de8228c01cdab3 100644 --- a/deps/npm/html/doc/cli/npm-version.html +++ b/deps/npm/html/doc/cli/npm-version.html @@ -55,5 +55,5 @@

    SYNOPSIS

           - + diff --git a/deps/npm/html/doc/cli/npm-view.html b/deps/npm/html/doc/cli/npm-view.html index c30cc69f12693c..6740e273bb2e5a 100644 --- a/deps/npm/html/doc/cli/npm-view.html +++ b/deps/npm/html/doc/cli/npm-view.html @@ -82,5 +82,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm-whoami.html b/deps/npm/html/doc/cli/npm-whoami.html index 70dc893cd3ece9..bf50064c58d9a3 100644 --- a/deps/npm/html/doc/cli/npm-whoami.html +++ b/deps/npm/html/doc/cli/npm-whoami.html @@ -33,5 +33,5 @@

    SEE ALSO

           - + diff --git a/deps/npm/html/doc/cli/npm.html b/deps/npm/html/doc/cli/npm.html index 36ae925064ae4b..3e39be42f4c341 100644 --- a/deps/npm/html/doc/cli/npm.html +++ b/deps/npm/html/doc/cli/npm.html @@ -13,7 +13,7 @@

    npm

    node package manager

    SYNOPSIS

    npm <command> [args]
     

    VERSION

    -

    1.4.28

    +

    1.4.29

    DESCRIPTION

    npm is the package manager for the Node JavaScript platform. It puts modules in place so that node can find them, and manages dependency @@ -110,7 +110,7 @@

    CONTRIBUTIONS

    the issues list or ask on the mailing list.

    BUGS

    When you find issues, please report them:

    @@ -118,7 +118,7 @@

    BUGS

  • web: http://github.com/npm/npm/issues
  • email: -npm-@googlegroups.com
  • +npm-@googlegroups.com

    Be sure to include all of the output from the npm command that didn't work as expected. The npm-debug.log file is also helpful to provide.

    @@ -128,7 +128,7 @@

    AUTHOR

    Isaac Z. Schlueter :: isaacs :: @izs :: -i@izs.me

    +i@izs.me

    SEE ALSO

    • npm-help(1)
    • @@ -154,5 +154,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/files/npm-folders.html b/deps/npm/html/doc/files/npm-folders.html index 637b45c382122b..610192af4502c8 100644 --- a/deps/npm/html/doc/files/npm-folders.html +++ b/deps/npm/html/doc/files/npm-folders.html @@ -179,5 +179,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/files/npm-global.html b/deps/npm/html/doc/files/npm-global.html index 637b45c382122b..610192af4502c8 100644 --- a/deps/npm/html/doc/files/npm-global.html +++ b/deps/npm/html/doc/files/npm-global.html @@ -179,5 +179,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/files/npm-json.html b/deps/npm/html/doc/files/npm-json.html index 129661d526f364..09a4590e24905e 100644 --- a/deps/npm/html/doc/files/npm-json.html +++ b/deps/npm/html/doc/files/npm-json.html @@ -459,5 +459,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/files/npmrc.html b/deps/npm/html/doc/files/npmrc.html index ee029cfe8f91bd..fdc7b2e8164c2b 100644 --- a/deps/npm/html/doc/files/npmrc.html +++ b/deps/npm/html/doc/files/npmrc.html @@ -73,5 +73,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/files/package.json.html b/deps/npm/html/doc/files/package.json.html index 129661d526f364..09a4590e24905e 100644 --- a/deps/npm/html/doc/files/package.json.html +++ b/deps/npm/html/doc/files/package.json.html @@ -459,5 +459,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/index.html b/deps/npm/html/doc/index.html index 90c300c88f3eb1..f875889027dfee 100644 --- a/deps/npm/html/doc/index.html +++ b/deps/npm/html/doc/index.html @@ -232,5 +232,5 @@

      semver(7)

             - + diff --git a/deps/npm/html/doc/misc/npm-coding-style.html b/deps/npm/html/doc/misc/npm-coding-style.html index cd523ac91068a2..30d768a7e4c54c 100644 --- a/deps/npm/html/doc/misc/npm-coding-style.html +++ b/deps/npm/html/doc/misc/npm-coding-style.html @@ -147,5 +147,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/misc/npm-config.html b/deps/npm/html/doc/misc/npm-config.html index aa4c300bfa21d8..195f7b0ac6790c 100644 --- a/deps/npm/html/doc/misc/npm-config.html +++ b/deps/npm/html/doc/misc/npm-config.html @@ -749,5 +749,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/misc/npm-developers.html b/deps/npm/html/doc/misc/npm-developers.html index 3cc1b0466cf70b..3bebc7ac1c44ec 100644 --- a/deps/npm/html/doc/misc/npm-developers.html +++ b/deps/npm/html/doc/misc/npm-developers.html @@ -181,5 +181,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/misc/npm-disputes.html b/deps/npm/html/doc/misc/npm-disputes.html index 7a45340936bf80..f4062d12eb98e8 100644 --- a/deps/npm/html/doc/misc/npm-disputes.html +++ b/deps/npm/html/doc/misc/npm-disputes.html @@ -13,7 +13,7 @@

      npm-disputes

      Handling Module

      SYNOPSIS

      1. Get the author email with npm owner ls <pkgname>
      2. -
      3. Email the author, CC support@npmjs.com
      4. +
      5. Email the author, CC support@npmjs.com
      6. After a few weeks, if there's no resolution, we'll sort it out.

      Don't squat on package names. Publish code or move out of the way.

      @@ -51,12 +51,12 @@

      DESCRIPTION

      owner (Bob).
    • Joe emails Bob, explaining the situation as respectfully as possible, and what he would like to do with the module name. He -adds the npm support staff support@npmjs.com to the CC list of +adds the npm support staff support@npmjs.com to the CC list of the email. Mention in the email that Bob can run npm owner add joe foo to add Joe as an owner of the foo package.
    • After a reasonable amount of time, if Bob has not responded, or if Bob and Joe can't come to any sort of resolution, email support -support@npmjs.com and we'll sort it out. ("Reasonable" is +support@npmjs.com and we'll sort it out. ("Reasonable" is usually at least 4 weeks, but extra time is allowed around common holidays.)
    • @@ -112,5 +112,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/misc/npm-faq.html b/deps/npm/html/doc/misc/npm-faq.html index cdde512eee0c3d..5517fdc1121bf7 100644 --- a/deps/npm/html/doc/misc/npm-faq.html +++ b/deps/npm/html/doc/misc/npm-faq.html @@ -237,7 +237,7 @@

      I get ECONNREFUSED a lot. What'

      To check if the registry is down, open up https://registry.npmjs.org/ in a web browser. This will also tell you if you are just unable to access the internet for some reason.

      -

      If the registry IS down, let us know by emailing support@npmjs.com +

      If the registry IS down, let us know by emailing support@npmjs.com or posting an issue at https://github.com/npm/npm/issues. If it's down for the world (and not just on your local network) then we're probably already being pinged about it.

      @@ -285,5 +285,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/misc/npm-index.html b/deps/npm/html/doc/misc/npm-index.html index 3346d1ce98a391..0beb063e9e6cb9 100644 --- a/deps/npm/html/doc/misc/npm-index.html +++ b/deps/npm/html/doc/misc/npm-index.html @@ -232,5 +232,5 @@

      semver(7)

             - + diff --git a/deps/npm/html/doc/misc/npm-registry.html b/deps/npm/html/doc/misc/npm-registry.html index d08e8f877df3a3..503c6c8959cf96 100644 --- a/deps/npm/html/doc/misc/npm-registry.html +++ b/deps/npm/html/doc/misc/npm-registry.html @@ -71,5 +71,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/misc/npm-scope.html b/deps/npm/html/doc/misc/npm-scope.html deleted file mode 100644 index ae8dfa60376db5..00000000000000 --- a/deps/npm/html/doc/misc/npm-scope.html +++ /dev/null @@ -1,82 +0,0 @@ - - - npm-scope - - - - - - -
      - -

      npm-scope

      Scoped packages

      -

      DESCRIPTION

      -

      All npm packages have a name. Some package names also have a scope. A scope -follows the usual rules for package names (url-safe characters, no leading dots -or underscores). When used in package names, preceded by an @-symbol and -followed by a slash, e.g.

      -
      @somescope/somepackagename
      -

      Scopes are a way of grouping related packages together, and also affect a few -things about the way npm treats the package.

      -

      As of 2014-09-03, scoped packages are not supported by the public npm registry. -However, the npm client is backwards-compatible with un-scoped registries, so -it can be used to work with scoped and un-scoped registries at the same time.

      -

      Installing scoped packages

      -

      Scoped packages are installed to a sub-folder of the regular installation -folder, e.g. if your other packages are installed in node_modules/packagename, -scoped modules will be in node_modules/@myorg/packagename. The scope folder -(@myorg) is simply the name of the scope preceded by an @-symbol, and can -contain any number of scoped packages.

      -

      A scoped package is install by referencing it by name, preceded by an @-symbol, -in npm install:

      -
      npm install @myorg/mypackage
      -

      Or in package.json:

      -
      "dependencies": {
      -  "@myorg/mypackage": "^1.3.0"
      -}
      -

      Note that if the @-symbol is omitted in either case npm will instead attempt to -install from GitHub; see npm-install(1).

      -

      Requiring scoped packages

      -

      Because scoped packages are installed into a scope folder, you have to -include the name of the scope when requiring them in your code, e.g.

      -
      require('@myorg/mypackage')
      -

      There is nothing special about the way Node treats scope folders, this is -just specifying to require the module mypackage in the folder called @myorg.

      -

      Publishing scoped packages

      -

      Scoped packages can be published to any registry that supports them. -As of 2014-09-03, the public npm registry does not support scoped packages, -so attempting to publish a scoped package to the registry will fail unless -you have associated that scope with a different registry, see below.

      -

      Associating a scope with a registry

      -

      Scopes can be associated with a separate registry. This allows you to -seamlessly use a mix of packages from the public npm registry and one or more -private registries, such as npm Enterprise.

      -

      You can associate a scope with a registry at login, e.g.

      -
      npm login --registry=http://reg.example.com --scope=@myco
      -

      Scopes have a many-to-one relationship with registries: one registry can -host multiple scopes, but a scope only ever points to one registry.

      -

      You can also associate a scope with a registry using npm config:

      -
      npm config set @myco:registry http://reg.example.com
      -

      Once a scope is associated with a registry, any npm install for a package -with that scope will request packages from that registry instead. Any -npm publish for a package name that contains the scope will be published to -that registry instead.

      -

      SEE ALSO

      - - -
      - - - - - - - - - - - - diff --git a/deps/npm/html/doc/misc/npm-scripts.html b/deps/npm/html/doc/misc/npm-scripts.html index 0c2c697a50a930..3a097462aeac4e 100644 --- a/deps/npm/html/doc/misc/npm-scripts.html +++ b/deps/npm/html/doc/misc/npm-scripts.html @@ -218,5 +218,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/misc/removing-npm.html b/deps/npm/html/doc/misc/removing-npm.html index afd747c9560d2c..5ba5dbf95c6dff 100644 --- a/deps/npm/html/doc/misc/removing-npm.html +++ b/deps/npm/html/doc/misc/removing-npm.html @@ -57,5 +57,5 @@

      SEE ALSO

             - + diff --git a/deps/npm/html/doc/misc/semver.html b/deps/npm/html/doc/misc/semver.html index 5ab35fa819df4a..d8cb1824b2f95f 100644 --- a/deps/npm/html/doc/misc/semver.html +++ b/deps/npm/html/doc/misc/semver.html @@ -165,5 +165,5 @@

      Ranges

             - + diff --git a/deps/npm/lib/cache.js b/deps/npm/lib/cache.js index 37bba5a06533c1..0266bdc0e63ee3 100644 --- a/deps/npm/lib/cache.js +++ b/deps/npm/lib/cache.js @@ -243,6 +243,15 @@ function add (args, cb) { if (!name && !spec) return cb(usage) + var maybeScoped = name || spec || "" + if (maybeScoped.match(/^@[^/]+\/[^/]+/)) { + return cb(new Error( + "This version of npm doesn't support scoped packages " + + "(caused by reference to " + maybeScoped + + "). Update to npm@2+." + )) + } + if (adding <= 0) { npm.spinner.start() } diff --git a/deps/npm/lib/npm.js b/deps/npm/lib/npm.js index 3139b1d1452273..991daf3c564863 100644 --- a/deps/npm/lib/npm.js +++ b/deps/npm/lib/npm.js @@ -374,6 +374,21 @@ function load (npm, cli, cb) { var lp = Object.getOwnPropertyDescriptor(config, "localPrefix") Object.defineProperty(npm, "localPrefix", lp) + log.warn("deprecated", "This version of npm lacks support for important features,") + log.warn("deprecated", "such as scoped packages, offered by the primary npm") + log.warn("deprecated", "registry. Consider upgrading to at least npm@2, if not the") + log.warn("deprecated", "latest stable version. To upgrade to npm@2, run:\n") + log.warn("deprecated", " npm -g install npm@latest-2\n") + log.warn("deprecated", "To upgrade to the latest stable version, run:\n") + log.warn("deprecated", " npm -g install npm@latest\n") + log.warn("deprecated", "(Depending on how Node.js was installed on your system, you") + log.warn("deprecated", "may need to prefix the preceding commands with `sudo`, or if") + log.warn("deprecated", "on Windows, run them from an Administrator prompt.)\n") + log.warn("deprecated", "If you're running the version of npm bundled with") + log.warn("deprecated", "Node.js 0.10 LTS, be aware that the next version of 0.10 LTS") + log.warn("deprecated", "will be bundled with a version of npm@2, which has some small") + log.warn("deprecated", "backwards-incompatible changes made to `npm run-script` and") + log.warn("deprecated", "semver behavior.") return cb(null, npm) }) }) diff --git a/deps/npm/man/man1/npm-README.1 b/deps/npm/man/man1/npm-README.1 index cfa8b459836c94..d5a8bcd2b28981 100644 --- a/deps/npm/man/man1/npm-README.1 +++ b/deps/npm/man/man1/npm-README.1 @@ -1,13 +1,12 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM" "1" "September 2014" "" "" +.TH "NPM" "1" "November 2015" "" "" . .SH "NAME" -\fBnpm\fR \-\- node package manager![Build Status \fIhttps://img\.shields\.io/travis/npm/npm/master\.svg)](https://travis\-ci\.org/npm/npm\fR -## SYNOPSIS +\fBnpm\fR \-\- node package manager \fIhttps://travis\-ci\.org/npm/npm\fR . -.P +.SH "SYNOPSIS" This is just enough info to get you up and running\. . .P diff --git a/deps/npm/man/man1/npm-adduser.1 b/deps/npm/man/man1/npm-adduser.1 index da1dcdbc3f388b..dec82c5294515d 100644 --- a/deps/npm/man/man1/npm-adduser.1 +++ b/deps/npm/man/man1/npm-adduser.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-ADDUSER" "1" "September 2014" "" "" +.TH "NPM\-ADDUSER" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-adduser\fR \-\- Add a registry user account diff --git a/deps/npm/man/man1/npm-bin.1 b/deps/npm/man/man1/npm-bin.1 index 548bb6ad347d18..d61f6b944e9d9f 100644 --- a/deps/npm/man/man1/npm-bin.1 +++ b/deps/npm/man/man1/npm-bin.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-BIN" "1" "September 2014" "" "" +.TH "NPM\-BIN" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-bin\fR \-\- Display npm bin folder diff --git a/deps/npm/man/man1/npm-bugs.1 b/deps/npm/man/man1/npm-bugs.1 index 328ac304515d29..fa4adb7e6c007c 100644 --- a/deps/npm/man/man1/npm-bugs.1 +++ b/deps/npm/man/man1/npm-bugs.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-BUGS" "1" "September 2014" "" "" +.TH "NPM\-BUGS" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-bugs\fR \-\- Bugs for a package in a web browser maybe diff --git a/deps/npm/man/man1/npm-build.1 b/deps/npm/man/man1/npm-build.1 index cc815b63b51035..703f300c20c827 100644 --- a/deps/npm/man/man1/npm-build.1 +++ b/deps/npm/man/man1/npm-build.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-BUILD" "1" "September 2014" "" "" +.TH "NPM\-BUILD" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-build\fR \-\- Build a package diff --git a/deps/npm/man/man1/npm-bundle.1 b/deps/npm/man/man1/npm-bundle.1 index 5799f4b19d92de..56e1dc30a48718 100644 --- a/deps/npm/man/man1/npm-bundle.1 +++ b/deps/npm/man/man1/npm-bundle.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-BUNDLE" "1" "September 2014" "" "" +.TH "NPM\-BUNDLE" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-bundle\fR \-\- REMOVED diff --git a/deps/npm/man/man1/npm-cache.1 b/deps/npm/man/man1/npm-cache.1 index 3977da0b1af651..6f57849aac2ec5 100644 --- a/deps/npm/man/man1/npm-cache.1 +++ b/deps/npm/man/man1/npm-cache.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-CACHE" "1" "September 2014" "" "" +.TH "NPM\-CACHE" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-cache\fR \-\- Manipulates packages cache diff --git a/deps/npm/man/man1/npm-completion.1 b/deps/npm/man/man1/npm-completion.1 index 2ae25687a688a5..2c91a078ffd994 100644 --- a/deps/npm/man/man1/npm-completion.1 +++ b/deps/npm/man/man1/npm-completion.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-COMPLETION" "1" "September 2014" "" "" +.TH "NPM\-COMPLETION" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-completion\fR \-\- Tab Completion for npm diff --git a/deps/npm/man/man1/npm-config.1 b/deps/npm/man/man1/npm-config.1 index 0b019c7c025eee..161659f0a4b84a 100644 --- a/deps/npm/man/man1/npm-config.1 +++ b/deps/npm/man/man1/npm-config.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-CONFIG" "1" "September 2014" "" "" +.TH "NPM\-CONFIG" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-config\fR \-\- Manage the npm configuration files diff --git a/deps/npm/man/man1/npm-dedupe.1 b/deps/npm/man/man1/npm-dedupe.1 index cdfa3520f686f2..abdb9fcf757f5d 100644 --- a/deps/npm/man/man1/npm-dedupe.1 +++ b/deps/npm/man/man1/npm-dedupe.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-DEDUPE" "1" "September 2014" "" "" +.TH "NPM\-DEDUPE" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-dedupe\fR \-\- Reduce duplication diff --git a/deps/npm/man/man1/npm-deprecate.1 b/deps/npm/man/man1/npm-deprecate.1 index cc2d18ee52f915..e939b7df79aaa9 100644 --- a/deps/npm/man/man1/npm-deprecate.1 +++ b/deps/npm/man/man1/npm-deprecate.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-DEPRECATE" "1" "September 2014" "" "" +.TH "NPM\-DEPRECATE" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-deprecate\fR \-\- Deprecate a version of a package diff --git a/deps/npm/man/man1/npm-docs.1 b/deps/npm/man/man1/npm-docs.1 index db3d4e768fb402..9f7f0eea5f44c0 100644 --- a/deps/npm/man/man1/npm-docs.1 +++ b/deps/npm/man/man1/npm-docs.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-DOCS" "1" "September 2014" "" "" +.TH "NPM\-DOCS" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-docs\fR \-\- Docs for a package in a web browser maybe diff --git a/deps/npm/man/man1/npm-edit.1 b/deps/npm/man/man1/npm-edit.1 index 036d0715a4f0b5..70acb3a1f71ecc 100644 --- a/deps/npm/man/man1/npm-edit.1 +++ b/deps/npm/man/man1/npm-edit.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-EDIT" "1" "September 2014" "" "" +.TH "NPM\-EDIT" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-edit\fR \-\- Edit an installed package diff --git a/deps/npm/man/man1/npm-explore.1 b/deps/npm/man/man1/npm-explore.1 index c7d570745cf06d..24d71ca574fb99 100644 --- a/deps/npm/man/man1/npm-explore.1 +++ b/deps/npm/man/man1/npm-explore.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-EXPLORE" "1" "September 2014" "" "" +.TH "NPM\-EXPLORE" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-explore\fR \-\- Browse an installed package diff --git a/deps/npm/man/man1/npm-help-search.1 b/deps/npm/man/man1/npm-help-search.1 index 37ba03c7960df8..e23ed97f55599d 100644 --- a/deps/npm/man/man1/npm-help-search.1 +++ b/deps/npm/man/man1/npm-help-search.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-HELP\-SEARCH" "1" "September 2014" "" "" +.TH "NPM\-HELP\-SEARCH" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-help-search\fR \-\- Search npm help documentation diff --git a/deps/npm/man/man1/npm-help.1 b/deps/npm/man/man1/npm-help.1 index 7cc361f463b660..a6f16ae1b487d2 100644 --- a/deps/npm/man/man1/npm-help.1 +++ b/deps/npm/man/man1/npm-help.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-HELP" "1" "September 2014" "" "" +.TH "NPM\-HELP" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-help\fR \-\- Get help on npm diff --git a/deps/npm/man/man1/npm-init.1 b/deps/npm/man/man1/npm-init.1 index 5091fdefd83d58..81d4a100aad7c5 100644 --- a/deps/npm/man/man1/npm-init.1 +++ b/deps/npm/man/man1/npm-init.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-INIT" "1" "September 2014" "" "" +.TH "NPM\-INIT" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-init\fR \-\- Interactively create a package\.json file diff --git a/deps/npm/man/man1/npm-install.1 b/deps/npm/man/man1/npm-install.1 index 7e874f34900c42..fce62a2d9c8bd2 100644 --- a/deps/npm/man/man1/npm-install.1 +++ b/deps/npm/man/man1/npm-install.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-INSTALL" "1" "September 2014" "" "" +.TH "NPM\-INSTALL" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-install\fR \-\- Install a package @@ -134,8 +134,14 @@ of the module published on npm\. .IP Example: . -.IP - npm install sax +.IP "" 4 +. +.nf + npm install sax +. +.fi +. +.IP "" 0 . .IP \fBnpm install\fR takes 3 exclusive, optional flags which save or update @@ -150,6 +156,8 @@ the package version in your main package\.json: .IP "\(bu" 4 \fB\-\-save\-optional\fR: Package will appear in your \fBoptionalDependencies\fR\|\. . +.IP "" 0 +. .IP When using any of the above options to save dependencies to your package\.json, there is an additional, optional flag: @@ -159,22 +167,27 @@ package\.json, there is an additional, optional flag: exact version rather than using npm\'s default semver range operator\. . +.IP "" 0 +. .IP Examples: . -.IP +.IP "" 4 +. +.nf npm install sax \-\-save npm install node\-tap \-\-save\-dev npm install dtrace\-provider \-\-save\-optional npm install readable\-stream \-\-save \-\-save\-exact . +.fi +. +.IP "" 0 +. .IP \fBNote\fR: If there is a file or folder named \fB\fR in the current working directory, then it will try to install that, and only try to fetch the package by name if it is not valid\. -. -.IP "" 0 - . .IP "\(bu" 4 \fBnpm install @\fR: @@ -231,8 +244,15 @@ treat it as a single argument\. .IP Example: . -.IP - npm install sax@">=0\.1\.0 <0\.2\.0" +.IP "" 4 +. +.nf + npm install sax@">=0\.1\.0 <0\.2\.0" +. +.fi +. +.IP "" 0 + . .IP "\(bu" 4 \fBnpm install \fR: @@ -241,8 +261,14 @@ Example: Install a package by cloning a git remote url\. The format of the git url is: . -.IP - ://[@][#] +.IP "" 4 +. +.nf + ://[@][#] +. +.fi +. +.IP "" 0 . .IP \fB\fR is one of \fBgit\fR, \fBgit+ssh\fR, \fBgit+http\fR, or \fBgit+https\fR\|\. If no \fB\fR is specified, then \fBmaster\fR is diff --git a/deps/npm/man/man1/npm-link.1 b/deps/npm/man/man1/npm-link.1 index 15d45e4e079c11..04c6db2f2cd38d 100644 --- a/deps/npm/man/man1/npm-link.1 +++ b/deps/npm/man/man1/npm-link.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-LINK" "1" "September 2014" "" "" +.TH "NPM\-LINK" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-link\fR \-\- Symlink a package folder diff --git a/deps/npm/man/man1/npm-ls.1 b/deps/npm/man/man1/npm-ls.1 index 1584fb0f28c769..6aea2aa13cce31 100644 --- a/deps/npm/man/man1/npm-ls.1 +++ b/deps/npm/man/man1/npm-ls.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-LS" "1" "September 2014" "" "" +.TH "NPM\-LS" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-ls\fR \-\- List installed packages @@ -29,7 +29,7 @@ For example, running \fBnpm ls promzard\fR in npm\'s source tree will show: .IP "" 4 . .nf -npm@1.4.28 /path/to/npm +npm@1.4.29 /path/to/npm └─┬ init\-package\-json@0\.0\.4 └── promzard@0\.1\.5 . diff --git a/deps/npm/man/man1/npm-outdated.1 b/deps/npm/man/man1/npm-outdated.1 index 7376fcd24af8f6..cdf0e45d75b1bc 100644 --- a/deps/npm/man/man1/npm-outdated.1 +++ b/deps/npm/man/man1/npm-outdated.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-OUTDATED" "1" "September 2014" "" "" +.TH "NPM\-OUTDATED" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-outdated\fR \-\- Check for outdated packages diff --git a/deps/npm/man/man1/npm-owner.1 b/deps/npm/man/man1/npm-owner.1 index f204431e5dc091..1478727bd21f0a 100644 --- a/deps/npm/man/man1/npm-owner.1 +++ b/deps/npm/man/man1/npm-owner.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-OWNER" "1" "September 2014" "" "" +.TH "NPM\-OWNER" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-owner\fR \-\- Manage package owners diff --git a/deps/npm/man/man1/npm-pack.1 b/deps/npm/man/man1/npm-pack.1 index 951d209adb129a..375cdc1559c968 100644 --- a/deps/npm/man/man1/npm-pack.1 +++ b/deps/npm/man/man1/npm-pack.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-PACK" "1" "September 2014" "" "" +.TH "NPM\-PACK" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-pack\fR \-\- Create a tarball from a package diff --git a/deps/npm/man/man1/npm-prefix.1 b/deps/npm/man/man1/npm-prefix.1 index 9cc3f7cadd6a76..759eb2e3d73b27 100644 --- a/deps/npm/man/man1/npm-prefix.1 +++ b/deps/npm/man/man1/npm-prefix.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-PREFIX" "1" "September 2014" "" "" +.TH "NPM\-PREFIX" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-prefix\fR \-\- Display prefix diff --git a/deps/npm/man/man1/npm-prune.1 b/deps/npm/man/man1/npm-prune.1 index 71bb77c407d620..480e666d162c04 100644 --- a/deps/npm/man/man1/npm-prune.1 +++ b/deps/npm/man/man1/npm-prune.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-PRUNE" "1" "September 2014" "" "" +.TH "NPM\-PRUNE" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-prune\fR \-\- Remove extraneous packages diff --git a/deps/npm/man/man1/npm-publish.1 b/deps/npm/man/man1/npm-publish.1 index 547ad64ed6dc13..d5a1fbeff83fe3 100644 --- a/deps/npm/man/man1/npm-publish.1 +++ b/deps/npm/man/man1/npm-publish.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-PUBLISH" "1" "September 2014" "" "" +.TH "NPM\-PUBLISH" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-publish\fR \-\- Publish a package diff --git a/deps/npm/man/man1/npm-rebuild.1 b/deps/npm/man/man1/npm-rebuild.1 index 4130eb773f26e0..392642f88bfbda 100644 --- a/deps/npm/man/man1/npm-rebuild.1 +++ b/deps/npm/man/man1/npm-rebuild.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-REBUILD" "1" "September 2014" "" "" +.TH "NPM\-REBUILD" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-rebuild\fR \-\- Rebuild a package diff --git a/deps/npm/man/man1/npm-repo.1 b/deps/npm/man/man1/npm-repo.1 index 557a3566eaac44..f50a2e4e6612a2 100644 --- a/deps/npm/man/man1/npm-repo.1 +++ b/deps/npm/man/man1/npm-repo.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-REPO" "1" "September 2014" "" "" +.TH "NPM\-REPO" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-repo\fR \-\- Open package repository page in the browser diff --git a/deps/npm/man/man1/npm-restart.1 b/deps/npm/man/man1/npm-restart.1 index 828a43f30fc022..97dfe50d60830f 100644 --- a/deps/npm/man/man1/npm-restart.1 +++ b/deps/npm/man/man1/npm-restart.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-RESTART" "1" "September 2014" "" "" +.TH "NPM\-RESTART" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-restart\fR \-\- Start a package diff --git a/deps/npm/man/man1/npm-rm.1 b/deps/npm/man/man1/npm-rm.1 index 424314c7d57864..37f534bf036a47 100644 --- a/deps/npm/man/man1/npm-rm.1 +++ b/deps/npm/man/man1/npm-rm.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-RM" "1" "September 2014" "" "" +.TH "NPM\-RM" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-rm\fR \-\- Remove a package diff --git a/deps/npm/man/man1/npm-root.1 b/deps/npm/man/man1/npm-root.1 index 463eeaf934f9c4..af5b718c03cfad 100644 --- a/deps/npm/man/man1/npm-root.1 +++ b/deps/npm/man/man1/npm-root.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-ROOT" "1" "September 2014" "" "" +.TH "NPM\-ROOT" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-root\fR \-\- Display npm root diff --git a/deps/npm/man/man1/npm-run-script.1 b/deps/npm/man/man1/npm-run-script.1 index aa2740c11980dd..3e2d52bd33acb7 100644 --- a/deps/npm/man/man1/npm-run-script.1 +++ b/deps/npm/man/man1/npm-run-script.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-RUN\-SCRIPT" "1" "September 2014" "" "" +.TH "NPM\-RUN\-SCRIPT" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-run-script\fR \-\- Run arbitrary package scripts diff --git a/deps/npm/man/man1/npm-search.1 b/deps/npm/man/man1/npm-search.1 index 2c7edcd2ad0c98..47de55b8cb9a3e 100644 --- a/deps/npm/man/man1/npm-search.1 +++ b/deps/npm/man/man1/npm-search.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-SEARCH" "1" "September 2014" "" "" +.TH "NPM\-SEARCH" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-search\fR \-\- Search for packages diff --git a/deps/npm/man/man1/npm-shrinkwrap.1 b/deps/npm/man/man1/npm-shrinkwrap.1 index 2a053a5b0b7d54..01f844afe89260 100644 --- a/deps/npm/man/man1/npm-shrinkwrap.1 +++ b/deps/npm/man/man1/npm-shrinkwrap.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-SHRINKWRAP" "1" "September 2014" "" "" +.TH "NPM\-SHRINKWRAP" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-shrinkwrap\fR \-\- Lock down dependency versions diff --git a/deps/npm/man/man1/npm-star.1 b/deps/npm/man/man1/npm-star.1 index bbcfee19eb1040..264c654087b11c 100644 --- a/deps/npm/man/man1/npm-star.1 +++ b/deps/npm/man/man1/npm-star.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-STAR" "1" "September 2014" "" "" +.TH "NPM\-STAR" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-star\fR \-\- Mark your favorite packages diff --git a/deps/npm/man/man1/npm-stars.1 b/deps/npm/man/man1/npm-stars.1 index 9b2d6d187e43de..a8544840e0c627 100644 --- a/deps/npm/man/man1/npm-stars.1 +++ b/deps/npm/man/man1/npm-stars.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-STARS" "1" "September 2014" "" "" +.TH "NPM\-STARS" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-stars\fR \-\- View packages marked as favorites diff --git a/deps/npm/man/man1/npm-start.1 b/deps/npm/man/man1/npm-start.1 index c76e2c92a5de0e..1e15cae4d6d19d 100644 --- a/deps/npm/man/man1/npm-start.1 +++ b/deps/npm/man/man1/npm-start.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-START" "1" "September 2014" "" "" +.TH "NPM\-START" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-start\fR \-\- Start a package diff --git a/deps/npm/man/man1/npm-stop.1 b/deps/npm/man/man1/npm-stop.1 index 37c1a5fe03f188..facde7057a13ed 100644 --- a/deps/npm/man/man1/npm-stop.1 +++ b/deps/npm/man/man1/npm-stop.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-STOP" "1" "September 2014" "" "" +.TH "NPM\-STOP" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-stop\fR \-\- Stop a package diff --git a/deps/npm/man/man1/npm-submodule.1 b/deps/npm/man/man1/npm-submodule.1 index 71853335c59984..cc11cb7ec1a753 100644 --- a/deps/npm/man/man1/npm-submodule.1 +++ b/deps/npm/man/man1/npm-submodule.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-SUBMODULE" "1" "September 2014" "" "" +.TH "NPM\-SUBMODULE" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-submodule\fR \-\- Add a package as a git submodule diff --git a/deps/npm/man/man1/npm-tag.1 b/deps/npm/man/man1/npm-tag.1 index c1d463f8cefeee..bfdf51d276900e 100644 --- a/deps/npm/man/man1/npm-tag.1 +++ b/deps/npm/man/man1/npm-tag.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-TAG" "1" "September 2014" "" "" +.TH "NPM\-TAG" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-tag\fR \-\- Tag a published version diff --git a/deps/npm/man/man1/npm-test.1 b/deps/npm/man/man1/npm-test.1 index 063fc926793a49..547f3647f1e5b5 100644 --- a/deps/npm/man/man1/npm-test.1 +++ b/deps/npm/man/man1/npm-test.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-TEST" "1" "September 2014" "" "" +.TH "NPM\-TEST" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-test\fR \-\- Test a package diff --git a/deps/npm/man/man1/npm-uninstall.1 b/deps/npm/man/man1/npm-uninstall.1 index 364d9c1d7c41fb..569a5f98d1ed8d 100644 --- a/deps/npm/man/man1/npm-uninstall.1 +++ b/deps/npm/man/man1/npm-uninstall.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-RM" "1" "September 2014" "" "" +.TH "NPM\-RM" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-rm\fR \-\- Remove a package diff --git a/deps/npm/man/man1/npm-unpublish.1 b/deps/npm/man/man1/npm-unpublish.1 index e5b8a6560106f1..672bbfb6cb77c9 100644 --- a/deps/npm/man/man1/npm-unpublish.1 +++ b/deps/npm/man/man1/npm-unpublish.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-UNPUBLISH" "1" "September 2014" "" "" +.TH "NPM\-UNPUBLISH" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-unpublish\fR \-\- Remove a package from the registry diff --git a/deps/npm/man/man1/npm-update.1 b/deps/npm/man/man1/npm-update.1 index de2201209f8cf7..6f4b217cd02999 100644 --- a/deps/npm/man/man1/npm-update.1 +++ b/deps/npm/man/man1/npm-update.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-UPDATE" "1" "September 2014" "" "" +.TH "NPM\-UPDATE" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-update\fR \-\- Update a package diff --git a/deps/npm/man/man1/npm-version.1 b/deps/npm/man/man1/npm-version.1 index fc52da6e8f53f7..b76aa2be8ed716 100644 --- a/deps/npm/man/man1/npm-version.1 +++ b/deps/npm/man/man1/npm-version.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-VERSION" "1" "September 2014" "" "" +.TH "NPM\-VERSION" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-version\fR \-\- Bump a package version diff --git a/deps/npm/man/man1/npm-view.1 b/deps/npm/man/man1/npm-view.1 index 44b42b308d62d6..935e2fca9609f4 100644 --- a/deps/npm/man/man1/npm-view.1 +++ b/deps/npm/man/man1/npm-view.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-VIEW" "1" "September 2014" "" "" +.TH "NPM\-VIEW" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-view\fR \-\- View registry info diff --git a/deps/npm/man/man1/npm-whoami.1 b/deps/npm/man/man1/npm-whoami.1 index bf43ae7eee4a9e..b63d7ae73acd77 100644 --- a/deps/npm/man/man1/npm-whoami.1 +++ b/deps/npm/man/man1/npm-whoami.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-WHOAMI" "1" "September 2014" "" "" +.TH "NPM\-WHOAMI" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-whoami\fR \-\- Display npm username diff --git a/deps/npm/man/man1/npm.1 b/deps/npm/man/man1/npm.1 index 5a0f94c740b51d..d359b75bae4ac2 100644 --- a/deps/npm/man/man1/npm.1 +++ b/deps/npm/man/man1/npm.1 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM" "1" "September 2014" "" "" +.TH "NPM" "1" "November 2015" "" "" . .SH "NAME" \fBnpm\fR \-\- node package manager @@ -14,7 +14,7 @@ npm [args] .fi . .SH "VERSION" -1.4.28 +1.4.29 . .SH "DESCRIPTION" npm is the package manager for the Node JavaScript platform\. It puts diff --git a/deps/npm/man/man3/npm-bin.3 b/deps/npm/man/man3/npm-bin.3 index 97de75de85991c..32b9eb5d4126fc 100644 --- a/deps/npm/man/man3/npm-bin.3 +++ b/deps/npm/man/man3/npm-bin.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-BIN" "3" "September 2014" "" "" +.TH "NPM\-BIN" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-bin\fR \-\- Display npm bin folder diff --git a/deps/npm/man/man3/npm-bugs.3 b/deps/npm/man/man3/npm-bugs.3 index bb85060afe1437..7f6f6255c7e471 100644 --- a/deps/npm/man/man3/npm-bugs.3 +++ b/deps/npm/man/man3/npm-bugs.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-BUGS" "3" "September 2014" "" "" +.TH "NPM\-BUGS" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-bugs\fR \-\- Bugs for a package in a web browser maybe diff --git a/deps/npm/man/man3/npm-cache.3 b/deps/npm/man/man3/npm-cache.3 index b3396446ff3adf..c6f13204a2f972 100644 --- a/deps/npm/man/man3/npm-cache.3 +++ b/deps/npm/man/man3/npm-cache.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-CACHE" "3" "September 2014" "" "" +.TH "NPM\-CACHE" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-cache\fR \-\- manage the npm cache programmatically diff --git a/deps/npm/man/man3/npm-commands.3 b/deps/npm/man/man3/npm-commands.3 index 003f5e5ab476bc..7092fb447ee92e 100644 --- a/deps/npm/man/man3/npm-commands.3 +++ b/deps/npm/man/man3/npm-commands.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-COMMANDS" "3" "September 2014" "" "" +.TH "NPM\-COMMANDS" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-commands\fR \-\- npm commands diff --git a/deps/npm/man/man3/npm-config.3 b/deps/npm/man/man3/npm-config.3 index 578b939a6361eb..9b90b63f11e361 100644 --- a/deps/npm/man/man3/npm-config.3 +++ b/deps/npm/man/man3/npm-config.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-CONFIG" "3" "September 2014" "" "" +.TH "NPM\-CONFIG" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-config\fR \-\- Manage the npm configuration files diff --git a/deps/npm/man/man3/npm-deprecate.3 b/deps/npm/man/man3/npm-deprecate.3 index 29e4c34515498b..9c51ebca080e67 100644 --- a/deps/npm/man/man3/npm-deprecate.3 +++ b/deps/npm/man/man3/npm-deprecate.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-DEPRECATE" "3" "September 2014" "" "" +.TH "NPM\-DEPRECATE" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-deprecate\fR \-\- Deprecate a version of a package diff --git a/deps/npm/man/man3/npm-docs.3 b/deps/npm/man/man3/npm-docs.3 index e3039c2ef5e265..32f76fcf0e8304 100644 --- a/deps/npm/man/man3/npm-docs.3 +++ b/deps/npm/man/man3/npm-docs.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-DOCS" "3" "September 2014" "" "" +.TH "NPM\-DOCS" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-docs\fR \-\- Docs for a package in a web browser maybe diff --git a/deps/npm/man/man3/npm-edit.3 b/deps/npm/man/man3/npm-edit.3 index bcdabb6f237604..ab0c14195d91e2 100644 --- a/deps/npm/man/man3/npm-edit.3 +++ b/deps/npm/man/man3/npm-edit.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-EDIT" "3" "September 2014" "" "" +.TH "NPM\-EDIT" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-edit\fR \-\- Edit an installed package diff --git a/deps/npm/man/man3/npm-explore.3 b/deps/npm/man/man3/npm-explore.3 index 0918dae972ca0c..1ba91a0e041781 100644 --- a/deps/npm/man/man3/npm-explore.3 +++ b/deps/npm/man/man3/npm-explore.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-EXPLORE" "3" "September 2014" "" "" +.TH "NPM\-EXPLORE" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-explore\fR \-\- Browse an installed package diff --git a/deps/npm/man/man3/npm-help-search.3 b/deps/npm/man/man3/npm-help-search.3 index 2c39f5c7b42d39..08b44d3d78e8cc 100644 --- a/deps/npm/man/man3/npm-help-search.3 +++ b/deps/npm/man/man3/npm-help-search.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-HELP\-SEARCH" "3" "September 2014" "" "" +.TH "NPM\-HELP\-SEARCH" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-help-search\fR \-\- Search the help pages diff --git a/deps/npm/man/man3/npm-init.3 b/deps/npm/man/man3/npm-init.3 index d4eba220526050..d3d7c34758347f 100644 --- a/deps/npm/man/man3/npm-init.3 +++ b/deps/npm/man/man3/npm-init.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "INIT" "3" "September 2014" "" "" +.TH "INIT" "3" "November 2015" "" "" . .SH "NAME" \fBinit\fR \-\- Interactively create a package\.json file diff --git a/deps/npm/man/man3/npm-install.3 b/deps/npm/man/man3/npm-install.3 index 4b09fbe80fe541..3fd6531ac76acf 100644 --- a/deps/npm/man/man3/npm-install.3 +++ b/deps/npm/man/man3/npm-install.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-INSTALL" "3" "September 2014" "" "" +.TH "NPM\-INSTALL" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-install\fR \-\- install a package programmatically diff --git a/deps/npm/man/man3/npm-link.3 b/deps/npm/man/man3/npm-link.3 index dbecc0edb7d839..816e37b33d6b04 100644 --- a/deps/npm/man/man3/npm-link.3 +++ b/deps/npm/man/man3/npm-link.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-LINK" "3" "September 2014" "" "" +.TH "NPM\-LINK" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-link\fR \-\- Symlink a package folder diff --git a/deps/npm/man/man3/npm-load.3 b/deps/npm/man/man3/npm-load.3 index 4180127d7e1fc8..db5ac3c51c26c1 100644 --- a/deps/npm/man/man3/npm-load.3 +++ b/deps/npm/man/man3/npm-load.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-LOAD" "3" "September 2014" "" "" +.TH "NPM\-LOAD" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-load\fR \-\- Load config settings diff --git a/deps/npm/man/man3/npm-ls.3 b/deps/npm/man/man3/npm-ls.3 index 723e2bc45b044e..e0d8a00c6a0d00 100644 --- a/deps/npm/man/man3/npm-ls.3 +++ b/deps/npm/man/man3/npm-ls.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-LS" "3" "September 2014" "" "" +.TH "NPM\-LS" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-ls\fR \-\- List installed packages diff --git a/deps/npm/man/man3/npm-outdated.3 b/deps/npm/man/man3/npm-outdated.3 index 3da841dc3ddfaf..6da7f73be93f36 100644 --- a/deps/npm/man/man3/npm-outdated.3 +++ b/deps/npm/man/man3/npm-outdated.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-OUTDATED" "3" "September 2014" "" "" +.TH "NPM\-OUTDATED" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-outdated\fR \-\- Check for outdated packages diff --git a/deps/npm/man/man3/npm-owner.3 b/deps/npm/man/man3/npm-owner.3 index 38cc42d69921fd..183e1644dde796 100644 --- a/deps/npm/man/man3/npm-owner.3 +++ b/deps/npm/man/man3/npm-owner.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-OWNER" "3" "September 2014" "" "" +.TH "NPM\-OWNER" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-owner\fR \-\- Manage package owners diff --git a/deps/npm/man/man3/npm-pack.3 b/deps/npm/man/man3/npm-pack.3 index a7ccab0a732c0e..21b2dafc912526 100644 --- a/deps/npm/man/man3/npm-pack.3 +++ b/deps/npm/man/man3/npm-pack.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-PACK" "3" "September 2014" "" "" +.TH "NPM\-PACK" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-pack\fR \-\- Create a tarball from a package diff --git a/deps/npm/man/man3/npm-prefix.3 b/deps/npm/man/man3/npm-prefix.3 index 3e800556574644..4b0e1a51e7bb5a 100644 --- a/deps/npm/man/man3/npm-prefix.3 +++ b/deps/npm/man/man3/npm-prefix.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-PREFIX" "3" "September 2014" "" "" +.TH "NPM\-PREFIX" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-prefix\fR \-\- Display prefix diff --git a/deps/npm/man/man3/npm-prune.3 b/deps/npm/man/man3/npm-prune.3 index f9aff4ad32221f..a4f37a07b45b20 100644 --- a/deps/npm/man/man3/npm-prune.3 +++ b/deps/npm/man/man3/npm-prune.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-PRUNE" "3" "September 2014" "" "" +.TH "NPM\-PRUNE" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-prune\fR \-\- Remove extraneous packages diff --git a/deps/npm/man/man3/npm-publish.3 b/deps/npm/man/man3/npm-publish.3 index 842da1bb808ba2..ad7e5c510bfcec 100644 --- a/deps/npm/man/man3/npm-publish.3 +++ b/deps/npm/man/man3/npm-publish.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-PUBLISH" "3" "September 2014" "" "" +.TH "NPM\-PUBLISH" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-publish\fR \-\- Publish a package diff --git a/deps/npm/man/man3/npm-rebuild.3 b/deps/npm/man/man3/npm-rebuild.3 index f6233c2f290c04..c313a870d44f20 100644 --- a/deps/npm/man/man3/npm-rebuild.3 +++ b/deps/npm/man/man3/npm-rebuild.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-REBUILD" "3" "September 2014" "" "" +.TH "NPM\-REBUILD" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-rebuild\fR \-\- Rebuild a package diff --git a/deps/npm/man/man3/npm-repo.3 b/deps/npm/man/man3/npm-repo.3 index 06db0d50a25351..247c58ba22b3b2 100644 --- a/deps/npm/man/man3/npm-repo.3 +++ b/deps/npm/man/man3/npm-repo.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-REPO" "3" "September 2014" "" "" +.TH "NPM\-REPO" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-repo\fR \-\- Open package repository page in the browser diff --git a/deps/npm/man/man3/npm-restart.3 b/deps/npm/man/man3/npm-restart.3 index 5c0ed9ca0e8650..1e50990ca81cfb 100644 --- a/deps/npm/man/man3/npm-restart.3 +++ b/deps/npm/man/man3/npm-restart.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-RESTART" "3" "September 2014" "" "" +.TH "NPM\-RESTART" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-restart\fR \-\- Start a package diff --git a/deps/npm/man/man3/npm-root.3 b/deps/npm/man/man3/npm-root.3 index 5772cb40d337a1..c8f9c041e33b8a 100644 --- a/deps/npm/man/man3/npm-root.3 +++ b/deps/npm/man/man3/npm-root.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-ROOT" "3" "September 2014" "" "" +.TH "NPM\-ROOT" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-root\fR \-\- Display npm root diff --git a/deps/npm/man/man3/npm-run-script.3 b/deps/npm/man/man3/npm-run-script.3 index 5c5d435a30997b..489af7b1826727 100644 --- a/deps/npm/man/man3/npm-run-script.3 +++ b/deps/npm/man/man3/npm-run-script.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-RUN\-SCRIPT" "3" "September 2014" "" "" +.TH "NPM\-RUN\-SCRIPT" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-run-script\fR \-\- Run arbitrary package scripts diff --git a/deps/npm/man/man3/npm-search.3 b/deps/npm/man/man3/npm-search.3 index f7692a637c666c..2885bfcd80fe9a 100644 --- a/deps/npm/man/man3/npm-search.3 +++ b/deps/npm/man/man3/npm-search.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-SEARCH" "3" "September 2014" "" "" +.TH "NPM\-SEARCH" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-search\fR \-\- Search for packages diff --git a/deps/npm/man/man3/npm-shrinkwrap.3 b/deps/npm/man/man3/npm-shrinkwrap.3 index e5cdb59d9c3196..b3e841a916a4f7 100644 --- a/deps/npm/man/man3/npm-shrinkwrap.3 +++ b/deps/npm/man/man3/npm-shrinkwrap.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-SHRINKWRAP" "3" "September 2014" "" "" +.TH "NPM\-SHRINKWRAP" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-shrinkwrap\fR \-\- programmatically generate package shrinkwrap file diff --git a/deps/npm/man/man3/npm-start.3 b/deps/npm/man/man3/npm-start.3 index 6e2cb647713c12..7acf941b861bb5 100644 --- a/deps/npm/man/man3/npm-start.3 +++ b/deps/npm/man/man3/npm-start.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-START" "3" "September 2014" "" "" +.TH "NPM\-START" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-start\fR \-\- Start a package diff --git a/deps/npm/man/man3/npm-stop.3 b/deps/npm/man/man3/npm-stop.3 index b1f4ee75030201..9f3a3068cc8f9f 100644 --- a/deps/npm/man/man3/npm-stop.3 +++ b/deps/npm/man/man3/npm-stop.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-STOP" "3" "September 2014" "" "" +.TH "NPM\-STOP" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-stop\fR \-\- Stop a package diff --git a/deps/npm/man/man3/npm-submodule.3 b/deps/npm/man/man3/npm-submodule.3 index 95739ce3b08428..be19e13630a3a2 100644 --- a/deps/npm/man/man3/npm-submodule.3 +++ b/deps/npm/man/man3/npm-submodule.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-SUBMODULE" "3" "September 2014" "" "" +.TH "NPM\-SUBMODULE" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-submodule\fR \-\- Add a package as a git submodule diff --git a/deps/npm/man/man3/npm-tag.3 b/deps/npm/man/man3/npm-tag.3 index fe00dbcc2e4715..09deb9e4bac73c 100644 --- a/deps/npm/man/man3/npm-tag.3 +++ b/deps/npm/man/man3/npm-tag.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-TAG" "3" "September 2014" "" "" +.TH "NPM\-TAG" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-tag\fR \-\- Tag a published version diff --git a/deps/npm/man/man3/npm-test.3 b/deps/npm/man/man3/npm-test.3 index 86aa780ac1c07e..7f518a0ed7e054 100644 --- a/deps/npm/man/man3/npm-test.3 +++ b/deps/npm/man/man3/npm-test.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-TEST" "3" "September 2014" "" "" +.TH "NPM\-TEST" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-test\fR \-\- Test a package diff --git a/deps/npm/man/man3/npm-uninstall.3 b/deps/npm/man/man3/npm-uninstall.3 index 7ae13684231d38..c05a4e571e732a 100644 --- a/deps/npm/man/man3/npm-uninstall.3 +++ b/deps/npm/man/man3/npm-uninstall.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-UNINSTALL" "3" "September 2014" "" "" +.TH "NPM\-UNINSTALL" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-uninstall\fR \-\- uninstall a package programmatically diff --git a/deps/npm/man/man3/npm-unpublish.3 b/deps/npm/man/man3/npm-unpublish.3 index 63be8506ee766e..3bbd6344b483e1 100644 --- a/deps/npm/man/man3/npm-unpublish.3 +++ b/deps/npm/man/man3/npm-unpublish.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-UNPUBLISH" "3" "September 2014" "" "" +.TH "NPM\-UNPUBLISH" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-unpublish\fR \-\- Remove a package from the registry diff --git a/deps/npm/man/man3/npm-update.3 b/deps/npm/man/man3/npm-update.3 index 740038b419b9f5..9174ee6665bcd1 100644 --- a/deps/npm/man/man3/npm-update.3 +++ b/deps/npm/man/man3/npm-update.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-UPDATE" "3" "September 2014" "" "" +.TH "NPM\-UPDATE" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-update\fR \-\- Update a package diff --git a/deps/npm/man/man3/npm-version.3 b/deps/npm/man/man3/npm-version.3 index 2c79f3782f6bf8..559ecfb887ed4a 100644 --- a/deps/npm/man/man3/npm-version.3 +++ b/deps/npm/man/man3/npm-version.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-VERSION" "3" "September 2014" "" "" +.TH "NPM\-VERSION" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-version\fR \-\- Bump a package version diff --git a/deps/npm/man/man3/npm-view.3 b/deps/npm/man/man3/npm-view.3 index 3e91ce6716848d..5f5f544bf2db5a 100644 --- a/deps/npm/man/man3/npm-view.3 +++ b/deps/npm/man/man3/npm-view.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-VIEW" "3" "September 2014" "" "" +.TH "NPM\-VIEW" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-view\fR \-\- View registry info diff --git a/deps/npm/man/man3/npm-whoami.3 b/deps/npm/man/man3/npm-whoami.3 index 1a0a43cf51be24..2b71b355956d14 100644 --- a/deps/npm/man/man3/npm-whoami.3 +++ b/deps/npm/man/man3/npm-whoami.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-WHOAMI" "3" "September 2014" "" "" +.TH "NPM\-WHOAMI" "3" "November 2015" "" "" . .SH "NAME" \fBnpm-whoami\fR \-\- Display npm username diff --git a/deps/npm/man/man3/npm.3 b/deps/npm/man/man3/npm.3 index e762dc4851f663..4591d1a38c6df9 100644 --- a/deps/npm/man/man3/npm.3 +++ b/deps/npm/man/man3/npm.3 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM" "3" "September 2014" "" "" +.TH "NPM" "3" "November 2015" "" "" . .SH "NAME" \fBnpm\fR \-\- node package manager @@ -21,7 +21,7 @@ npm\.load([configObject, ]function (er, npm) { .fi . .SH "VERSION" -1.4.28 +1.4.29 . .SH "DESCRIPTION" This is the API documentation for npm\. diff --git a/deps/npm/man/man5/npm-folders.5 b/deps/npm/man/man5/npm-folders.5 index d349c1f43a5a5b..4e6f88b14c4bb2 100644 --- a/deps/npm/man/man5/npm-folders.5 +++ b/deps/npm/man/man5/npm-folders.5 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-FOLDERS" "5" "September 2014" "" "" +.TH "NPM\-FOLDERS" "5" "November 2015" "" "" . .SH "NAME" \fBnpm-folders\fR \-\- Folder Structures Used by npm diff --git a/deps/npm/man/man5/npm-global.5 b/deps/npm/man/man5/npm-global.5 index d349c1f43a5a5b..4e6f88b14c4bb2 100644 --- a/deps/npm/man/man5/npm-global.5 +++ b/deps/npm/man/man5/npm-global.5 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-FOLDERS" "5" "September 2014" "" "" +.TH "NPM\-FOLDERS" "5" "November 2015" "" "" . .SH "NAME" \fBnpm-folders\fR \-\- Folder Structures Used by npm diff --git a/deps/npm/man/man5/npm-json.5 b/deps/npm/man/man5/npm-json.5 index 8233dc1731539d..47a95f1f85ca49 100644 --- a/deps/npm/man/man5/npm-json.5 +++ b/deps/npm/man/man5/npm-json.5 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "PACKAGE\.JSON" "5" "September 2014" "" "" +.TH "PACKAGE\.JSON" "5" "November 2015" "" "" . .SH "NAME" \fBpackage.json\fR \-\- Specifics of npm\'s package\.json handling diff --git a/deps/npm/man/man5/npmrc.5 b/deps/npm/man/man5/npmrc.5 index d0b632365747ce..8c94196caf340f 100644 --- a/deps/npm/man/man5/npmrc.5 +++ b/deps/npm/man/man5/npmrc.5 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPMRC" "5" "September 2014" "" "" +.TH "NPMRC" "5" "November 2015" "" "" . .SH "NAME" \fBnpmrc\fR \-\- The npm config files diff --git a/deps/npm/man/man5/package.json.5 b/deps/npm/man/man5/package.json.5 index 8233dc1731539d..47a95f1f85ca49 100644 --- a/deps/npm/man/man5/package.json.5 +++ b/deps/npm/man/man5/package.json.5 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "PACKAGE\.JSON" "5" "September 2014" "" "" +.TH "PACKAGE\.JSON" "5" "November 2015" "" "" . .SH "NAME" \fBpackage.json\fR \-\- Specifics of npm\'s package\.json handling diff --git a/deps/npm/man/man7/npm-coding-style.7 b/deps/npm/man/man7/npm-coding-style.7 index 385a39087281a2..10811b2f053986 100644 --- a/deps/npm/man/man7/npm-coding-style.7 +++ b/deps/npm/man/man7/npm-coding-style.7 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-CODING\-STYLE" "7" "September 2014" "" "" +.TH "NPM\-CODING\-STYLE" "7" "November 2015" "" "" . .SH "NAME" \fBnpm-coding-style\fR \-\- npm\'s "funny" coding style diff --git a/deps/npm/man/man7/npm-config.7 b/deps/npm/man/man7/npm-config.7 index 7bdf1c00598758..73b834c4ec2b77 100644 --- a/deps/npm/man/man7/npm-config.7 +++ b/deps/npm/man/man7/npm-config.7 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-CONFIG" "7" "September 2014" "" "" +.TH "NPM\-CONFIG" "7" "November 2015" "" "" . .SH "NAME" \fBnpm-config\fR \-\- More than you probably want to know about npm configuration diff --git a/deps/npm/man/man7/npm-developers.7 b/deps/npm/man/man7/npm-developers.7 index 071b8c2d79a73a..a67068c628b6b9 100644 --- a/deps/npm/man/man7/npm-developers.7 +++ b/deps/npm/man/man7/npm-developers.7 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-DEVELOPERS" "7" "September 2014" "" "" +.TH "NPM\-DEVELOPERS" "7" "November 2015" "" "" . .SH "NAME" \fBnpm-developers\fR \-\- Developer Guide diff --git a/deps/npm/man/man7/npm-disputes.7 b/deps/npm/man/man7/npm-disputes.7 index a3163bcaec133d..064ecac0cf6c50 100644 --- a/deps/npm/man/man7/npm-disputes.7 +++ b/deps/npm/man/man7/npm-disputes.7 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-DISPUTES" "7" "September 2014" "" "" +.TH "NPM\-DISPUTES" "7" "November 2015" "" "" . .SH "NAME" \fBnpm-disputes\fR \-\- Handling Module Name Disputes diff --git a/deps/npm/man/man7/npm-faq.7 b/deps/npm/man/man7/npm-faq.7 index 5eefee8d06b9d6..13d03e836bebcc 100644 --- a/deps/npm/man/man7/npm-faq.7 +++ b/deps/npm/man/man7/npm-faq.7 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-FAQ" "7" "September 2014" "" "" +.TH "NPM\-FAQ" "7" "November 2015" "" "" . .SH "NAME" \fBnpm-faq\fR \-\- Frequently Asked Questions diff --git a/deps/npm/man/man7/npm-index.7 b/deps/npm/man/man7/npm-index.7 index 763b3dd3e52df3..474bd871550c1e 100644 --- a/deps/npm/man/man7/npm-index.7 +++ b/deps/npm/man/man7/npm-index.7 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-INDEX" "7" "September 2014" "" "" +.TH "NPM\-INDEX" "7" "November 2015" "" "" . .SH "NAME" \fBnpm-index\fR \-\- Index of all npm documentation diff --git a/deps/npm/man/man7/npm-registry.7 b/deps/npm/man/man7/npm-registry.7 index c190779ad1a849..77678b81595799 100644 --- a/deps/npm/man/man7/npm-registry.7 +++ b/deps/npm/man/man7/npm-registry.7 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-REGISTRY" "7" "September 2014" "" "" +.TH "NPM\-REGISTRY" "7" "November 2015" "" "" . .SH "NAME" \fBnpm-registry\fR \-\- The JavaScript Package Registry diff --git a/deps/npm/man/man7/npm-scope.7 b/deps/npm/man/man7/npm-scope.7 deleted file mode 100644 index ef8d251e0a8fbe..00000000000000 --- a/deps/npm/man/man7/npm-scope.7 +++ /dev/null @@ -1,108 +0,0 @@ -.TH "NPM\-SCOPE" "7" "September 2014" "" "" -.SH "NAME" -\fBnpm-scope\fR \- Scoped packages -.SH DESCRIPTION -.P -All npm packages have a name\. Some package names also have a scope\. A scope -follows the usual rules for package names (url\-safe characters, no leading dots -or underscores)\. When used in package names, preceded by an @\-symbol and -followed by a slash, e\.g\. -.P -.RS 2 -.EX -@somescope/somepackagename -.EE -.RE -.P -Scopes are a way of grouping related packages together, and also affect a few -things about the way npm treats the package\. -.P -\fBAs of 2014\-09\-03, scoped packages are not supported by the public npm registry\fR\|\. -However, the npm client is backwards\-compatible with un\-scoped registries, so -it can be used to work with scoped and un\-scoped registries at the same time\. -.SH Installing scoped packages -.P -Scoped packages are installed to a sub\-folder of the regular installation -folder, e\.g\. if your other packages are installed in \fBnode_modules/packagename\fR, -scoped modules will be in \fBnode_modules/@myorg/packagename\fR\|\. The scope folder -(\fB@myorg\fR) is simply the name of the scope preceded by an @\-symbol, and can -contain any number of scoped packages\. -.P -A scoped package is install by referencing it by name, preceded by an @\-symbol, -in \fBnpm install\fR: -.P -.RS 2 -.EX -npm install @myorg/mypackage -.EE -.RE -.P -Or in \fBpackage\.json\fR: -.P -.RS 2 -.EX -"dependencies": { - "@myorg/mypackage": "^1\.3\.0" -} -.EE -.RE -.P -Note that if the @\-symbol is omitted in either case npm will instead attempt to -install from GitHub; see npm help \fBnpm\-install\fR\|\. -.SH Requiring scoped packages -.P -Because scoped packages are installed into a scope folder, you have to -include the name of the scope when requiring them in your code, e\.g\. -.P -.RS 2 -.EX -require('@myorg/mypackage') -.EE -.RE -.P -There is nothing special about the way Node treats scope folders, this is -just specifying to require the module \fBmypackage\fR in the folder called \fB@myorg\fR\|\. -.SH Publishing scoped packages -.P -Scoped packages can be published to any registry that supports them\. -\fIAs of 2014\-09\-03, the public npm registry does not support scoped packages\fR, -so attempting to publish a scoped package to the registry will fail unless -you have associated that scope with a different registry, see below\. -.SH Associating a scope with a registry -.P -Scopes can be associated with a separate registry\. This allows you to -seamlessly use a mix of packages from the public npm registry and one or more -private registries, such as npm Enterprise\. -.P -You can associate a scope with a registry at login, e\.g\. -.P -.RS 2 -.EX -npm login \-\-registry=http://reg\.example\.com \-\-scope=@myco -.EE -.RE -.P -Scopes have a many\-to\-one relationship with registries: one registry can -host multiple scopes, but a scope only ever points to one registry\. -.P -You can also associate a scope with a registry using \fBnpm config\fR: -.P -.RS 2 -.EX -npm config set @myco:registry http://reg\.example\.com -.EE -.RE -.P -Once a scope is associated with a registry, any \fBnpm install\fR for a package -with that scope will request packages from that registry instead\. Any -\fBnpm publish\fR for a package name that contains the scope will be published to -that registry instead\. -.SH SEE ALSO -.RS 0 -.IP \(bu 2 -npm help install -.IP \(bu 2 -npm help publish - -.RE - diff --git a/deps/npm/man/man7/npm-scripts.7 b/deps/npm/man/man7/npm-scripts.7 index d4d045f8709d22..492fc562fbb3c6 100644 --- a/deps/npm/man/man7/npm-scripts.7 +++ b/deps/npm/man/man7/npm-scripts.7 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-SCRIPTS" "7" "September 2014" "" "" +.TH "NPM\-SCRIPTS" "7" "November 2015" "" "" . .SH "NAME" \fBnpm-scripts\fR \-\- How npm handles the "scripts" field diff --git a/deps/npm/man/man7/removing-npm.7 b/deps/npm/man/man7/removing-npm.7 index e8a60cdf95432d..e917d06e571ba4 100644 --- a/deps/npm/man/man7/removing-npm.7 +++ b/deps/npm/man/man7/removing-npm.7 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "NPM\-REMOVAL" "1" "September 2014" "" "" +.TH "NPM\-REMOVAL" "1" "November 2015" "" "" . .SH "NAME" \fBnpm-removal\fR \-\- Cleaning the Slate diff --git a/deps/npm/man/man7/semver.7 b/deps/npm/man/man7/semver.7 index 1e64a8df20ec74..33f95cb5a1b98a 100644 --- a/deps/npm/man/man7/semver.7 +++ b/deps/npm/man/man7/semver.7 @@ -1,7 +1,7 @@ -.\" Generated with Ronnjs 0.3.8 -.\" http://github.com/kapouer/ronnjs/ +.\" Generated with Ronnjs 0.4.0 +.\" http://github.com/kapouer/ronnjs . -.TH "SEMVER" "7" "September 2014" "" "" +.TH "SEMVER" "7" "November 2015" "" "" . .SH "NAME" \fBsemver\fR \-\- The semantic versioner for npm diff --git a/deps/npm/node_modules/npm-registry-client/test/fixtures/@npm/npm-registry-client/cache.json b/deps/npm/node_modules/npm-registry-client/test/fixtures/@npm/npm-registry-client/cache.json new file mode 100644 index 00000000000000..4561db502b18e5 --- /dev/null +++ b/deps/npm/node_modules/npm-registry-client/test/fixtures/@npm/npm-registry-client/cache.json @@ -0,0 +1 @@ +{"_id":"@npm%2fnpm-registry-client","_rev":"213-0a1049cf56172b7d9a1184742c6477b9","name":"@npm/npm-registry-client","description":"Client for the npm registry","dist-tags":{"latest":"2.0.4","v2.0":"2.0.3"},"versions":{"0.0.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_npmUser":{"name":"isaacs","email":"i@izs.me"},"_id":"@npm%2fnpm-registry-client@0.0.1","_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.7.10-pre","_defaultsLoaded":true,"dist":{"shasum":"693a08f6d2faea22bbd2bf412508a63d3e6229a7","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.1.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_npmUser":{"name":"isaacs","email":"i@izs.me"},"_id":"@npm%2fnpm-registry-client@0.0.2","_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.7.10-pre","_defaultsLoaded":true,"dist":{"shasum":"b48c0ec5563c6a6fdc253454fc56d2c60c5a26f4","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.2.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_npmUser":{"name":"isaacs","email":"i@izs.me"},"_id":"@npm%2fnpm-registry-client@0.0.3","_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.7.10-pre","_defaultsLoaded":true,"dist":{"shasum":"ccc0254c2d59e3ea9b9050e2b16edef78df1a1e8","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.3.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_npmUser":{"name":"isaacs","email":"i@izs.me"},"_id":"@npm%2fnpm-registry-client@0.0.4","_engineSupported":true,"_npmVersion":"1.1.25","_nodeVersion":"v0.7.10-pre","_defaultsLoaded":true,"dist":{"shasum":"faabd25ef477521c74ac21e0f4cf3a2f66d18fb3","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.4.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.5":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.5","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_id":"@npm%2fnpm-registry-client@0.0.5","dist":{"shasum":"85219810c9d89ae8d28ea766e7cf74efbd9f1e52","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.5.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.6":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"The code that npm uses to talk to the registry","version":"0.0.6","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_id":"@npm%2fnpm-registry-client@0.0.6","dist":{"shasum":"cc6533b3b41df65e6e9db2601fbbf1a509a7e94c","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.6.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.7":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"The code that npm uses to talk to the registry","version":"0.0.7","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"engines":{"node":"*"},"_id":"@npm%2fnpm-registry-client@0.0.7","dist":{"shasum":"0cee1d1c61f1c8e483774fe1f7bbb81c4f394a3a","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.7.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.8":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.8","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.0.8","dist":{"shasum":"1b7411c3f7310ec2a96b055b00e7ca606e47bd07","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.8.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.9":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.9","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.0.9","dist":{"shasum":"6d5bfde431559ac9e2e52a7db85f5839b874f022","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.9.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.10":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.10","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.0.10","dist":{"shasum":"0c8b6a4615bce82aa6cc04a0d1f7dc89921f7a38","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.10.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.0.11":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.0.11","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.0.11","dist":{"shasum":"afab40be5bed1faa946d8e1827844698f2ec1db7","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.0.11.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.1.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.1.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.1.0","dist":{"shasum":"1077d6bbb5e432450239dc6622a59474953ffbea","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.1.0.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.1.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.1.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.1.1","dist":{"shasum":"759765361d09b715270f59cf50f10908e4e9c5fc","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.1.1.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.1.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.1.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.1.2","dist":{"shasum":"541ce93abb3d35f5c325545c718dd3bbeaaa9ff0","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.1.2.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.1.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.1.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.1.3","dist":{"shasum":"e9a40d7031e8f809af5fd85aa9aac979e17efc97","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.1.3.tgz"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.1.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.1.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.1.4","dist":{"shasum":"b211485b046191a1085362376530316f0cab0420","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.1.4.tgz"},"_npmVersion":"1.1.48","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.0","dist":{"shasum":"6508a4b4d96f31057d5200ca5779531bafd2b840","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.0.tgz"},"_npmVersion":"1.1.49","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"node-uuid":"~1.3.3","request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.1","dist":{"shasum":"1bc8c4576c368cd88253d8a52daf40c55b89bb1a","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.1.tgz"},"_npmVersion":"1.1.49","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.5":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.5","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.5","dist":{"shasum":"2f55d675dfb977403b1ad0d96874c1d30e8058d7","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.5.tgz"},"_npmVersion":"1.1.51","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.6":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.6","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.6","dist":{"shasum":"f05df6695360360ad220e6e13a6a7bace7165fbe","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.6.tgz"},"_npmVersion":"1.1.56","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.7":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.7","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.0.14","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.7","dist":{"shasum":"867bad8854cae82ed89ee3b7f1d391af59491671","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.7.tgz"},"_npmVersion":"1.1.59","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.8":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.8","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.6","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.8","dist":{"shasum":"ef194cdb70f1ea03a576cff2c97392fa96e36563","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.8.tgz"},"_npmVersion":"1.1.62","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.9":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.9","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.9","dist":{"shasum":"3cec10431dfed1594adaf99c50f482ee56ecf9e4","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.9.tgz"},"_npmVersion":"1.1.59","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.10":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.10","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2.0.1","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.10","dist":{"shasum":"1e69726dae0944e78562fd77243f839c6a2ced1e","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.10.tgz"},"_npmVersion":"1.1.64","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.11":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.11","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.11","dist":{"shasum":"d92f33c297eb1bbd57fd597c3d8f5f7e9340a0b5","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.11.tgz"},"_npmVersion":"1.1.70","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.12":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.12","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.1.8","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.12","dist":{"shasum":"3bfb6fc0e4b131d665580cd1481c341fe521bfd3","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.12.tgz"},"_from":".","_npmVersion":"1.2.2","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.13":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.13","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.13","dist":{"shasum":"e03f2a4340065511b7184a3e2862cd5d459ef027","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.13.tgz"},"_from":".","_npmVersion":"1.2.4","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.14":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.14","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.14","dist":{"shasum":"186874a7790417a340d582b1cd4a7c338087ee12","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.14.tgz"},"_from":".","_npmVersion":"1.2.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.15":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.15","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.15","dist":{"shasum":"f71f32b7185855f1f8b7a5ef49e49d2357c2c552","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.15.tgz"},"_from":".","_npmVersion":"1.2.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.16":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.16","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.16","dist":{"shasum":"3331323b5050fc5afdf77c3a35913c16f3e43964","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.16.tgz"},"_from":".","_npmVersion":"1.2.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.17":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.17","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.17","dist":{"shasum":"1df2bbecac6751f5d9600fb43722aef96d956773","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.17.tgz"},"_from":".","_npmVersion":"1.2.11","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.18":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.18","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.9.202","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.18","dist":{"shasum":"198c8d15ed9b1ed546faf6e431eb63a6b18193ad","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.18.tgz"},"_from":".","_npmVersion":"1.2.13","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.19":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.19","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.16","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.19","dist":{"shasum":"106da826f0d2007f6e081f2b68fb6f26fa951b20","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.19.tgz"},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.20":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.20","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.16","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","_id":"@npm%2fnpm-registry-client@0.2.20","dist":{"shasum":"3fff194331e26660be2cf8ebf45ddf7d36add5f6","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.20.tgz"},"_from":".","_npmVersion":"1.2.15","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.21":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.21","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.16","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.21","dist":{"shasum":"d85dd32525f193925c46ff9eb0e0f529dfd1b254","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.21.tgz"},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.22":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.22","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"~2.20.0","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.22","dist":{"shasum":"caa22ff40a1ccd632a660b8b80c333c8f92d5a17","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.22.tgz"},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.23":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.23","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.20.0","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.23","dist":{"shasum":"a320ab2b1d048b4f7b88e40bd86974ca322b4c24","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.23.tgz"},"_from":".","_npmVersion":"1.2.19","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.24":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.24","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.20.0","graceful-fs":"~1.2.0","semver":"~1.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.24","dist":{"shasum":"e12f644338619319ee7f233363a1714a87f3c72d","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.24.tgz"},"_from":".","_npmVersion":"1.2.22","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.25":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.25","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.20.0","graceful-fs":"~1.2.0","semver":"~2.0.5","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.25","dist":{"shasum":"c2caeb1dcf937d6fcc4a187765d401f5e2f54027","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.25.tgz"},"_from":".","_npmVersion":"1.2.32","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.26":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.26","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.20.0","graceful-fs":"~1.2.0","semver":"~2.0.5","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.26","dist":{"shasum":"4c5a2b3de946e383032f10fa497d0c15ee5f4c60","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.26.tgz"},"_from":".","_npmVersion":"1.3.1","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.27":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.27","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.20.0","graceful-fs":"~2.0.0","semver":"~2.0.5","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.15","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.27","dist":{"shasum":"8f338189d32769267886a07ad7b7fd2267446adf","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.27.tgz"},"_from":".","_npmVersion":"1.3.2","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.28":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.28","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"~2.1.0","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"_id":"@npm%2fnpm-registry-client@0.2.28","dist":{"shasum":"959141fc0180d7b1ad089e87015a8a2142a8bffc","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.28.tgz"},"_from":".","_npmVersion":"1.3.6","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.29":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.29","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.2.29","dist":{"shasum":"66ff2766f0c61d41e8a6139d3692d8833002c686","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.29.tgz"},"_from":".","_npmVersion":"1.3.12","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.30":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.30","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.2.30","dist":{"shasum":"f01cae5c51aa0a1c5dc2516cbad3ebde068d3eaa","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.30.tgz"},"_from":".","_npmVersion":"1.3.14","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.2.31":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.2.31","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.2.31","dist":{"shasum":"24a23e24e43246677cb485f8391829e9536563d4","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.2.31.tgz"},"_from":".","_npmVersion":"1.3.17","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.0","dist":{"shasum":"66eab02a69be67f232ac14023eddfb8308c2eccd","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.0.tgz"},"_from":".","_npmVersion":"1.3.18","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.1","dist":{"shasum":"16dba07cc304442edcece378218672d0a1258ef8","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.1.tgz"},"_from":".","_npmVersion":"1.3.18","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.2","dist":{"shasum":"ea3060bd0a87fb1d97b87433b50f38f7272b1686","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.2.tgz"},"_from":".","_npmVersion":"1.3.20","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.3","dist":{"shasum":"da08bb681fb24aa5c988ca71f8c10f27f09daf4a","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.3.tgz"},"_from":".","_npmVersion":"1.3.21","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.4","dist":{"shasum":"25d771771590b1ca39277aea4506af234c5f4342","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.4.tgz"},"_from":".","_npmVersion":"1.3.25","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.5":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.5","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","couch-login":"~0.1.18","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.5","dist":{"shasum":"98ba1ac851a3939a3fb9917c28fa8da522dc635f","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.5.tgz"},"_from":".","_npmVersion":"1.3.25","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.3.6":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.3.6","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.3.6","dist":{"shasum":"c48a2a03643769acc49672860f7920ec6bffac6e","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.3.6.tgz"},"_from":".","_npmVersion":"1.3.26","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.0","dist":{"shasum":"30d0c178b7f2e54183a6a3fc9fe4071eb10290bf","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.0.tgz"},"_from":".","_npmVersion":"1.3.26","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.1","dist":{"shasum":"9c49b3e44558e2072158fb085be8a083c5f83537","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.1.tgz"},"_from":".","_npmVersion":"1.4.0","_npmUser":{"name":"npm-www","email":"npm@npmjs.com"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.2","dist":{"shasum":"d9568a9413bee14951201ce73f3b3992ec6658c0","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.2.tgz"},"_from":".","_npmVersion":"1.4.1","_npmUser":{"name":"npm-www","email":"npm@npmjs.com"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.3","dist":{"shasum":"aa188fc5067158e991a57f4697c54994108f5389","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.3.tgz"},"_from":".","_npmVersion":"1.4.2","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.4","dist":{"shasum":"f9dbc383a49069d8c7f67755a3ff6e424aff584f","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.4.tgz"},"_from":".","_npmVersion":"1.4.2","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.5":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.5","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.5","dist":{"shasum":"7d6fdca46139470715f9477ddb5ad3e770d4de7b","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.5.tgz"},"_from":".","_npmVersion":"1.4.4","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.6":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.6","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.6","_from":".","_npmVersion":"1.4.6","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"657f69a79543fc4cc264c3b2de958bd15f7140fe","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.6.tgz"},"directories":{}},"0.4.7":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.7","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.7","dist":{"shasum":"f4369b59890da7882527eb7c427dd95d43707afb","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.7.tgz"},"_from":".","_npmVersion":"1.4.6","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"directories":{}},"0.4.8":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.8","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.8","_shasum":"a6685a161033101be6064b7af887ab440e8695d0","_from":".","_npmVersion":"1.4.8","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"a6685a161033101be6064b7af887ab440e8695d0","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.8.tgz"},"directories":{}},"0.4.9":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.9","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.9","_shasum":"304d3d4726a58e33d8cc965afdc9ed70b996580c","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"304d3d4726a58e33d8cc965afdc9ed70b996580c","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.9.tgz"},"directories":{}},"0.4.10":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.10","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"^2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.10","_shasum":"ab7bf1be3ba07d769eaf74dee3c9347e02283116","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"ab7bf1be3ba07d769eaf74dee3c9347e02283116","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.10.tgz"},"directories":{}},"0.4.11":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.11","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"2 >=2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.11","_shasum":"032e9b6b050ed052ee9441841a945a184ea6bc33","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"032e9b6b050ed052ee9441841a945a184ea6bc33","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.11.tgz"},"directories":{}},"0.4.12":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"0.4.12","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"request":"2 >=2.25.0","graceful-fs":"~2.0.0","semver":"2 >=2.2.1","slide":"~1.1.3","chownr":"0","mkdirp":"~0.3.3","rimraf":"~2","retry":"0.6.0","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@0.4.12","_shasum":"34303422f6a3da93ca3a387a2650d707c8595b99","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"34303422f6a3da93ca3a387a2650d707c8595b99","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-0.4.12.tgz"},"directories":{}},"1.0.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"1.0.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"~2.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@1.0.0","_shasum":"2a6f9dfdce5f8ebf4b9af4dbfd738384d25014e5","_from":".","_npmVersion":"1.4.10","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"2a6f9dfdce5f8ebf4b9af4dbfd738384d25014e5","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-1.0.0.tgz"},"directories":{}},"1.0.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"1.0.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"~2.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"98b1278c230cf6c159f189e2f8c69daffa727ab8","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@1.0.1","_shasum":"c5f6a87d285f2005a35d3f67d9c724bce551b0f1","_from":".","_npmVersion":"1.4.13","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"c5f6a87d285f2005a35d3f67d9c724bce551b0f1","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-1.0.1.tgz"},"directories":{}},"2.0.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"2.0.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"~2.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"47a98069b6a34e751cbd5b84ce92858cae5abe70","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@2.0.0","_shasum":"88810dac2d534c0df1d905c79e723392fcfc791a","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"}],"dist":{"shasum":"88810dac2d534c0df1d905c79e723392fcfc791a","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-2.0.0.tgz"},"directories":{}},"2.0.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"2.0.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"123e40131f83f7265f66ecd2a558cce44a3aea86","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@2.0.1","_shasum":"611c7cb7c8f7ff22be2ebc6398423b5de10db0e2","_from":".","_npmVersion":"1.4.14","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"611c7cb7c8f7ff22be2ebc6398423b5de10db0e2","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-2.0.1.tgz"},"directories":{}},"2.0.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"2.0.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"6ecc311c9dd4890f2d9b6bae60447070a3321e12","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@2.0.2","_shasum":"a82b000354c7f830114fb18444764bc477d5740f","_from":".","_npmVersion":"1.4.15","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"a82b000354c7f830114fb18444764bc477d5740f","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-2.0.2.tgz"},"directories":{}},"3.0.0":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.0","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","normalize-package-data":"^0.4.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"6bb1aec1e85fa82ee075bd997d6fb9f2dbb7f643","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.0","_shasum":"4febc5cdb274e9fa06bc3008910e3fa1ec007994","_from":".","_npmVersion":"1.5.0-pre","_npmUser":{"name":"othiym23","email":"ogd@aoaioxxysz.net"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"4febc5cdb274e9fa06bc3008910e3fa1ec007994","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.0.tgz"},"directories":{}},"3.0.1":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.1","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","normalize-package-data":"^0.4.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"fe8382dde609ea1e3580fcdc5bc3d0bba119cfc6","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.1","_shasum":"5f3ee362ce5c237cfb798fce22c77875fc1a63c2","_from":".","_npmVersion":"1.5.0-alpha-1","_npmUser":{"name":"othiym23","email":"ogd@aoaioxxysz.net"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"5f3ee362ce5c237cfb798fce22c77875fc1a63c2","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.1.tgz"},"directories":{}},"2.0.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"2.0.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"2578fb9a807d77417554ba235ba8fac39405e832","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@2.0.3","_shasum":"93dad3d9a162c99404badb71739c622c0f3b9a72","_from":".","_npmVersion":"1.5.0-alpha-1","_npmUser":{"name":"othiym23","email":"ogd@aoaioxxysz.net"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"93dad3d9a162c99404badb71739c622c0f3b9a72","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-2.0.3.tgz"},"directories":{}},"3.0.2":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.2","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","normalize-package-data":"^0.4.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"15343019160ace0b9874cf0ec186b3425dbc7301","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.2","_shasum":"5dd0910157ce55f4286a1871d39f9a2128cd3c99","_from":".","_npmVersion":"1.5.0-alpha-2","_npmUser":{"name":"othiym23","email":"ogd@aoaioxxysz.net"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"5dd0910157ce55f4286a1871d39f9a2128cd3c99","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.2.tgz"},"directories":{}},"3.0.3":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.3","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.3.3","normalize-package-data":"^0.4.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1 || 3.x","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"b18a780d1185f27c06c27812147b83aba0d4a2f5","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.3","_shasum":"2377dc1cf69b4d374b3a95fb7feba8c804d8cb30","_from":".","_npmVersion":"2.0.0-alpha-5","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"2377dc1cf69b4d374b3a95fb7feba8c804d8cb30","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.3.tgz"},"directories":{}},"3.0.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"~0.5.0","normalize-package-data":"^0.4.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1 || 3.x","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"54900fe4b2eb5b99ee6dfe173f145732fdfae80e","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.4","_shasum":"d4a177d1f25615cfaef9b6844fa366ffbf5f578a","_from":".","_npmVersion":"2.0.0-alpha-5","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"d4a177d1f25615cfaef9b6844fa366ffbf5f578a","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.4.tgz"},"directories":{}},"3.0.5":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.5","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"0.5","normalize-package-data":"0.4","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"2","semver":"2 >=2.2.1 || 3.x","slide":"^1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"BSD","gitHead":"635db1654346bc86473df7b39626601425f46177","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.5","_shasum":"cdabaefa399b81ac8a86a48718aefd80e7b19ff3","_from":".","_npmVersion":"2.0.0-alpha-5","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"cdabaefa399b81ac8a86a48718aefd80e7b19ff3","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.5.tgz"},"directories":{}},"3.0.6":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"3.0.6","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"^0.5.0","normalize-package-data":"0.4","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"2","semver":"2 >=2.2.1 || 3.x","slide":"^1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"ISC","gitHead":"eba30fadd724ed5cad1aec95ac3ee907a59b7317","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@3.0.6","_shasum":"14a17d9a60ed2a80b04edcbc596dbce0d96540ee","_from":".","_npmVersion":"1.4.22","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"14a17d9a60ed2a80b04edcbc596dbce0d96540ee","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-3.0.6.tgz"},"directories":{}},"2.0.4":{"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"name":"@npm/npm-registry-client","description":"Client for the npm registry","version":"2.0.4","repository":{"url":"git://github.com/isaacs/npm-registry-client"},"main":"index.js","scripts":{"test":"tap test/*.js"},"dependencies":{"chownr":"0","graceful-fs":"^3.0.0","mkdirp":"^0.5.0","npm-cache-filename":"^1.0.0","request":"2 >=2.25.0","retry":"0.6.0","rimraf":"~2","semver":"2 >=2.2.1","slide":"~1.1.3","npmlog":""},"devDependencies":{"tap":""},"optionalDependencies":{"npmlog":""},"license":"ISC","gitHead":"a10f621d9cdc813b9d3092a14b661f65bfa6d40d","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"homepage":"https://github.com/isaacs/npm-registry-client","_id":"@npm%2fnpm-registry-client@2.0.4","_shasum":"528e08900d7655c12096d1637d1c3a7a5b451019","_from":".","_npmVersion":"1.4.22","_npmUser":{"name":"isaacs","email":"i@izs.me"},"maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"dist":{"shasum":"528e08900d7655c12096d1637d1c3a7a5b451019","tarball":"http://registry.npmjs.org/@npm%2fnpm-registry-client/-/@npm%2fnpm-registry-client-2.0.4.tgz"},"directories":{}}},"readme":"# npm-registry-client\u000a\u000aThe code that npm uses to talk to the registry.\u000a\u000aIt handles all the caching and HTTP calls.\u000a\u000a## Usage\u000a\u000a```javascript\u000avar RegClient = require('npm-registry-client')\u000avar client = new RegClient(config)\u000avar uri = \"npm://registry.npmjs.org/npm\"\u000avar options = {timeout: 1000}\u000a\u000aclient.get(uri, options, function (error, data, raw, res) {\u000a // error is an error if there was a problem.\u000a // data is the parsed data object\u000a // raw is the json string\u000a // res is the response from couch\u000a})\u000a```\u000a\u000a# Registry URLs\u000a\u000aThe registry calls take either a full URL pointing to a resource in the\u000aregistry, or a base URL for the registry as a whole (for the base URL, any path\u000awill be ignored). In addition to `http` and `https`, `npm` URLs are allowed.\u000a`npm` URLs are `https` URLs with the additional restrictions that they will\u000aalways include authorization credentials, and the response is always registry\u000ametadata (and not tarballs or other attachments).\u000a\u000a# Configuration\u000a\u000aThis program is designed to work with\u000a[npmconf](https://npmjs.org/package/npmconf), but you can also pass in\u000aa plain-jane object with the appropriate configs, and it'll shim it\u000afor you. Any configuration thingie that has get/set/del methods will\u000aalso be accepted.\u000a\u000a* `cache` **Required** {String} Path to the cache folder\u000a* `always-auth` {Boolean} Auth even for GET requests.\u000a* `auth` {String} A base64-encoded `username:password`\u000a* `email` {String} User's email address\u000a* `tag` {String} The default tag to use when publishing new packages.\u000a Default = `\"latest\"`\u000a* `ca` {String} Cerficate signing authority certificates to trust.\u000a* `cert` {String} Client certificate (PEM encoded). Enable access\u000a to servers that require client certificates\u000a* `key` {String} Private key (PEM encoded) for client certificate 'cert'\u000a* `strict-ssl` {Boolean} Whether or not to be strict with SSL\u000a certificates. Default = `true`\u000a* `user-agent` {String} User agent header to send. Default =\u000a `\"node/{process.version} {process.platform} {process.arch}\"`\u000a* `log` {Object} The logger to use. Defaults to `require(\"npmlog\")` if\u000a that works, otherwise logs are disabled.\u000a* `fetch-retries` {Number} Number of times to retry on GET failures.\u000a Default=2\u000a* `fetch-retry-factor` {Number} `factor` setting for `node-retry`. Default=10\u000a* `fetch-retry-mintimeout` {Number} `minTimeout` setting for `node-retry`.\u000a Default=10000 (10 seconds)\u000a* `fetch-retry-maxtimeout` {Number} `maxTimeout` setting for `node-retry`.\u000a Default=60000 (60 seconds)\u000a* `proxy` {URL} The url to proxy requests through.\u000a* `https-proxy` {URL} The url to proxy https requests through.\u000a Defaults to be the same as `proxy` if unset.\u000a* `_auth` {String} The base64-encoded authorization header.\u000a* `username` `_password` {String} Username/password to use to generate\u000a `_auth` if not supplied.\u000a* `_token` {Object} A token for use with\u000a [couch-login](https://npmjs.org/package/couch-login)\u000a\u000a# client.request(method, uri, options, cb)\u000a\u000a* `method` {String} HTTP method\u000a* `uri` {String} URI pointing to the resource to request\u000a* `options` {Object} Object containing optional per-request properties.\u000a * `what` {Stream | Buffer | String | Object} The request body. Objects\u000a that are not Buffers or Streams are encoded as JSON.\u000a * `etag` {String} The cached ETag\u000a * `follow` {Boolean} Follow 302/301 responses (defaults to true)\u000a* `cb` {Function}\u000a * `error` {Error | null}\u000a * `data` {Object} the parsed data object\u000a * `raw` {String} the json\u000a * `res` {Response Object} response from couch\u000a\u000aMake a request to the registry. All the other methods are wrappers around\u000a`request`.\u000a\u000a# client.adduser(base, username, password, email, cb)\u000a\u000a* `base` {String} Base registry URL\u000a* `username` {String}\u000a* `password` {String}\u000a* `email` {String}\u000a* `cb` {Function}\u000a\u000aAdd a user account to the registry, or verify the credentials.\u000a\u000a# client.deprecate(uri, version, message, cb)\u000a\u000a* `uri` {String} Full registry URI for the deprecated package\u000a* `version` {String} Semver version range\u000a* `message` {String} The message to use as a deprecation warning\u000a* `cb` {Function}\u000a\u000aDeprecate a version of a package in the registry.\u000a\u000a# client.bugs(uri, cb)\u000a\u000a* `uri` {String} Full registry URI for the package\u000a* `cb` {Function}\u000a\u000aGet the url for bugs of a package\u000a\u000a# client.get(uri, options, cb)\u000a\u000a* `uri` {String} The complete registry URI to fetch\u000a* `options` {Object} Object containing optional per-request properties.\u000a * `timeout` {Number} Duration before the request times out.\u000a * `follow` {Boolean} Follow 302/301 responses (defaults to true)\u000a * `staleOk` {Boolean} If there's cached data available, then return that\u000a to the callback quickly, and update the cache the background.\u000a\u000aFetches data from the registry via a GET request, saving it in the cache folder\u000awith the ETag.\u000a\u000a# client.publish(uri, data, tarball, cb)\u000a\u000a* `uri` {String} The registry URI to publish to\u000a* `data` {Object} Package data\u000a* `tarball` {String | Stream} Filename or stream of the package tarball\u000a* `cb` {Function}\u000a\u000aPublish a package to the registry.\u000a\u000aNote that this does not create the tarball from a folder. However, it can\u000aaccept a gzipped tar stream or a filename to a tarball.\u000a\u000a# client.star(uri, starred, cb)\u000a\u000a* `uri` {String} The complete registry URI to star\u000a* `starred` {Boolean} True to star the package, false to unstar it.\u000a* `cb` {Function}\u000a\u000aStar or unstar a package.\u000a\u000aNote that the user does not have to be the package owner to star or unstar a\u000apackage, though other writes do require that the user be the package owner.\u000a\u000a# client.stars(base, username, cb)\u000a\u000a* `base` {String} The base URL for the registry\u000a* `username` {String} Name of user to fetch starred packages for.\u000a* `cb` {Function}\u000a\u000aView your own or another user's starred packages.\u000a\u000a# client.tag(uri, version, tag, cb)\u000a\u000a* `uri` {String} The complete registry URI to tag\u000a* `version` {String} Version to tag\u000a* `tag` {String} Tag name to apply\u000a* `cb` {Function}\u000a\u000aMark a version in the `dist-tags` hash, so that `pkg@tag` will fetch the\u000aspecified version.\u000a\u000a# client.unpublish(uri, [ver], cb)\u000a\u000a* `uri` {String} The complete registry URI to unpublish\u000a* `ver` {String} version to unpublish. Leave blank to unpublish all\u000a versions.\u000a* `cb` {Function}\u000a\u000aRemove a version of a package (or all versions) from the registry. When the\u000alast version us unpublished, the entire document is removed from the database.\u000a\u000a# client.upload(uri, file, [etag], [nofollow], cb)\u000a\u000a* `uri` {String} The complete registry URI to upload to\u000a* `file` {String | Stream} Either the filename or a readable stream\u000a* `etag` {String} Cache ETag\u000a* `nofollow` {Boolean} Do not follow 301/302 responses\u000a* `cb` {Function}\u000a\u000aUpload an attachment. Mostly used by `client.publish()`.\u000a","maintainers":[{"name":"isaacs","email":"i@izs.me"},{"name":"othiym23","email":"ogd@aoaioxxysz.net"}],"time":{"modified":"2014-07-31T21:59:52.896Z","created":"2012-06-07T04:43:36.581Z","0.0.1":"2012-06-07T04:43:38.123Z","0.0.2":"2012-06-07T05:35:05.937Z","0.0.3":"2012-06-09T00:55:25.861Z","0.0.4":"2012-06-11T03:53:26.548Z","0.0.5":"2012-06-11T23:48:11.235Z","0.0.6":"2012-06-17T06:23:27.320Z","0.0.7":"2012-06-18T19:19:38.315Z","0.0.8":"2012-06-28T20:40:20.563Z","0.0.9":"2012-07-10T03:28:04.651Z","0.0.10":"2012-07-11T17:03:45.151Z","0.0.11":"2012-07-17T14:06:37.489Z","0.1.0":"2012-07-23T18:17:38.007Z","0.1.1":"2012-07-23T21:21:28.196Z","0.1.2":"2012-07-24T06:14:12.831Z","0.1.3":"2012-08-07T02:02:20.564Z","0.1.4":"2012-08-15T03:04:52.822Z","0.1.5":"2012-08-17T21:59:33.310Z","0.2.0":"2012-08-17T22:00:18.081Z","0.2.1":"2012-08-17T22:07:28.827Z","0.2.2":"2012-08-17T22:37:24.352Z","0.2.3":"2012-08-19T19:16:44.808Z","0.2.4":"2012-08-19T19:18:51.792Z","0.2.5":"2012-08-20T16:54:50.794Z","0.2.6":"2012-08-22T00:25:04.766Z","0.2.7":"2012-08-27T19:07:34.829Z","0.2.8":"2012-10-02T19:53:50.661Z","0.2.9":"2012-10-03T22:09:50.766Z","0.2.10":"2012-10-25T14:55:54.216Z","0.2.11":"2012-12-21T16:26:38.094Z","0.2.12":"2013-01-18T22:22:41.668Z","0.2.13":"2013-02-06T00:16:35.939Z","0.2.14":"2013-02-10T02:44:02.764Z","0.2.15":"2013-02-11T19:18:55.678Z","0.2.16":"2013-02-15T17:09:03.249Z","0.2.17":"2013-02-16T03:47:13.898Z","0.2.18":"2013-03-06T22:09:23.536Z","0.2.19":"2013-03-20T06:27:39.128Z","0.2.20":"2013-03-28T00:43:07.558Z","0.2.21":"2013-04-29T15:46:54.094Z","0.2.22":"2013-04-29T15:51:02.178Z","0.2.23":"2013-05-11T00:28:14.198Z","0.2.24":"2013-05-24T21:27:50.693Z","0.2.25":"2013-06-20T15:36:46.277Z","0.2.26":"2013-07-06T17:12:54.670Z","0.2.27":"2013-07-11T07:14:45.740Z","0.2.28":"2013-08-02T20:27:41.732Z","0.2.29":"2013-10-28T18:23:24.477Z","0.2.30":"2013-11-18T23:12:00.540Z","0.2.31":"2013-12-16T08:36:43.044Z","0.3.0":"2013-12-17T07:03:10.699Z","0.3.1":"2013-12-17T16:53:27.867Z","0.3.2":"2013-12-17T22:25:14.882Z","0.3.3":"2013-12-21T16:07:06.773Z","0.3.4":"2014-01-29T15:24:05.163Z","0.3.5":"2014-01-31T01:53:19.656Z","0.3.6":"2014-02-07T00:17:21.362Z","0.4.0":"2014-02-13T01:17:18.973Z","0.4.1":"2014-02-13T23:47:37.892Z","0.4.2":"2014-02-14T00:29:13.086Z","0.4.3":"2014-02-16T03:40:54.640Z","0.4.4":"2014-02-16T03:41:48.856Z","0.4.5":"2014-03-12T05:09:17.474Z","0.4.6":"2014-03-29T19:44:15.041Z","0.4.7":"2014-04-02T19:41:07.149Z","0.4.8":"2014-05-01T22:24:54.980Z","0.4.9":"2014-05-12T21:52:55.127Z","0.4.10":"2014-05-13T16:44:29.801Z","0.4.11":"2014-05-13T20:33:04.738Z","0.4.12":"2014-05-14T06:14:22.842Z","1.0.0":"2014-05-14T23:04:37.188Z","1.0.1":"2014-06-03T00:55:54.448Z","2.0.0":"2014-06-06T04:23:46.579Z","2.0.1":"2014-06-06T06:25:14.419Z","2.0.2":"2014-06-14T00:33:10.205Z","3.0.0":"2014-07-02T00:30:29.154Z","3.0.1":"2014-07-14T23:29:05.057Z","2.0.3":"2014-07-15T00:09:36.043Z","3.0.2":"2014-07-17T06:30:02.659Z","3.0.3":"2014-07-23T21:20:42.406Z","3.0.4":"2014-07-25T00:27:26.007Z","3.0.5":"2014-07-25T00:28:48.007Z","3.0.6":"2014-07-31T21:57:49.043Z","2.0.4":"2014-07-31T21:59:52.896Z"},"author":{"name":"Isaac Z. Schlueter","email":"i@izs.me","url":"http://blog.izs.me/"},"repository":{"url":"git://github.com/isaacs/npm-registry-client"},"users":{"fgribreau":true,"fengmk2":true},"readmeFilename":"README.md","homepage":"https://github.com/isaacs/npm-registry-client","bugs":{"url":"https://github.com/isaacs/npm-registry-client/issues"},"license":"ISC","_attachments":{}} diff --git a/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/cache.json b/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/cache.json new file mode 100644 index 00000000000000..01da3002763731 --- /dev/null +++ b/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/cache.json @@ -0,0 +1 @@ +{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.3.3","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.3.3","dependencies":{},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.1","_nodeVersion":"v0.6.11","_defaultsLoaded":true,"dist":{"shasum":"47ac53683daf832bfa952e1774417da47817ae42","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.3.3.tgz"},"readme":" __ \n /\\ \\ __ \n __ __ ___ \\_\\ \\ __ _ __ ____ ___ ___ _ __ __ /\\_\\ ____ \n /\\ \\/\\ \\ /' _ `\\ /'_ \\ /'__`\\/\\ __\\/ ,__\\ / ___\\ / __`\\/\\ __\\/'__`\\ \\/\\ \\ /',__\\ \n \\ \\ \\_\\ \\/\\ \\/\\ \\/\\ \\ \\ \\/\\ __/\\ \\ \\//\\__, `\\/\\ \\__//\\ \\ \\ \\ \\ \\//\\ __/ __ \\ \\ \\/\\__, `\\\n \\ \\____/\\ \\_\\ \\_\\ \\___,_\\ \\____\\\\ \\_\\\\/\\____/\\ \\____\\ \\____/\\ \\_\\\\ \\____\\/\\_\\ _\\ \\ \\/\\____/\n \\/___/ \\/_/\\/_/\\/__,_ /\\/____/ \\/_/ \\/___/ \\/____/\\/___/ \\/_/ \\/____/\\/_//\\ \\_\\ \\/___/ \n \\ \\____/ \n \\/___/\n \nUnderscore.js is a utility-belt library for JavaScript that provides \nsupport for the usual functional suspects (each, map, reduce, filter...) \nwithout extending any core JavaScript objects.\n\nFor Docs, License, Tests, and pre-packed downloads, see:\nhttp://documentcloud.github.com/underscore/\n\nMany thanks to our contributors:\nhttps://github.com/documentcloud/underscore/contributors\n","maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}} \ No newline at end of file diff --git a/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/package.tgz b/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/1.3.3/package.tgz new file mode 100644 index 0000000000000000000000000000000000000000..19da9baa7fb191637b058d52d7f1c94a67e2196e GIT binary patch literal 58692 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Ã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 RfB#SZ{s)0Zq*MTO1pt4+z1;u+ literal 0 HcmV?d00001 diff --git a/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/cache.json b/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/cache.json new file mode 100644 index 00000000000000..d899f11922a405 --- /dev/null +++ b/deps/npm/node_modules/npm-registry-client/test/fixtures/underscore/cache.json @@ -0,0 +1 @@ +{"_id":"underscore","_rev":"72-47f2986bfd8e8b55068b204588bbf484","name":"underscore","description":"JavaScript's functional programming helper library.","dist-tags":{"latest":"1.3.3","stable":"1.3.3"},"versions":{"1.0.3":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.0.3","_id":"underscore@1.0.3","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.7-2","_nodeVersion":"v0.3.1-pre","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.0.3.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.0.4":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.0.4","_id":"underscore@1.0.4","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.7-2","_nodeVersion":"v0.3.1-pre","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.0.4.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.0":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.1.0","_id":"underscore@1.1.0","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.7-2","_nodeVersion":"v0.3.1-pre","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.0.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.1":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.1.1","_id":"underscore@1.1.1","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.7-2","_nodeVersion":"v0.3.1-pre","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.1.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.2":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.1.2","_id":"underscore@1.1.2","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.7-2","_nodeVersion":"v0.3.1-pre","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.2.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.3":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore","version":"1.1.3","_id":"underscore@1.1.3","engines":{"node":"*"},"_nodeSupported":true,"_npmVersion":"0.2.8-1","_nodeVersion":"v0.2.5","dist":{"tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.3.tgz"},"directories":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.4":{"name":"underscore","description":"Functional programming aid for JavaScript. Works well with jQuery.","url":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"lib":".","main":"underscore.js","version":"1.1.4","_id":"underscore@1.1.4","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"0.3.9","_nodeVersion":"v0.5.0-pre","dist":{"shasum":"9e82274902865625b3a6d4c315a38ffd80047dae","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.4.tgz"},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.1.5":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.1.5","_id":"underscore@1.1.5","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"0.3.16","_nodeVersion":"v0.4.2","directories":{},"files":[""],"_defaultsLoaded":true,"dist":{"shasum":"23601d62c75619998b2f0db24938102793336a56","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.5.tgz"},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.6":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.1.6","_id":"underscore@1.1.6","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"0.3.18","_nodeVersion":"v0.4.2","directories":{},"files":[""],"_defaultsLoaded":true,"dist":{"shasum":"6868da1bdd72d75285be0b4e50f228e70d001a2c","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.6.tgz"},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}]},"1.1.7":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.1.7","devDependencies":{},"_id":"underscore@1.1.7","engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.3","_nodeVersion":"v0.4.7","_defaultsLoaded":true,"dist":{"shasum":"40bab84bad19d230096e8d6ef628bff055d83db0","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.1.7.tgz"},"scripts":{},"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.2.0":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.2.0","_npmJsonOpts":{"file":"/Users/jashkenas/.npm/underscore/1.2.0/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"underscore@1.2.0","devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.22","_nodeVersion":"v0.4.10","_defaultsLoaded":true,"dist":{"shasum":"b32ce32c8c118caa8031c10b54c7f65ab3b557fd","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.2.0.tgz"},"scripts":{},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"directories":{}},"1.2.1":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.2.1","_npmJsonOpts":{"file":"/Users/jashkenas/.npm/underscore/1.2.1/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"underscore@1.2.1","devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.22","_nodeVersion":"v0.4.10","_defaultsLoaded":true,"dist":{"shasum":"fc5c6b0765673d92a2d4ac8b4dc0aa88702e2bd4","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.2.1.tgz"},"scripts":{},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"directories":{}},"1.2.2":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.2.2","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.2.2","devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.104","_nodeVersion":"v0.6.0","_defaultsLoaded":true,"dist":{"shasum":"74dd40e9face84e724eb2edae945b8aedc233ba3","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.2.2.tgz"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.2.3":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"dependencies":{},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.2.3","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.2.3","devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.104","_nodeVersion":"v0.6.0","_defaultsLoaded":true,"dist":{"shasum":"11b874da70f4683d7d48bba2b44be1e600d2f6cf","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.2.3.tgz"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.2.4":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.2.4","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.2.4","dependencies":{},"devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.104","_nodeVersion":"v0.6.6","_defaultsLoaded":true,"dist":{"shasum":"e8da6241aa06f64df2473bb2590b8c17c84c3c7e","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.2.4.tgz"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.3.0":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"contributors":[],"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.3.0","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.3.0","dependencies":{},"devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.104","_nodeVersion":"v0.6.6","_defaultsLoaded":true,"dist":{"shasum":"253b2d79b7bb67943ced0fc744eb18267963ede8","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.3.0.tgz"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.3.1":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.3.1","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.3.1","dependencies":{},"devDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.0.104","_nodeVersion":"v0.6.6","_defaultsLoaded":true,"dist":{"shasum":"6cb8aad0e77eb5dbbfb54b22bcd8697309cf9641","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.3.1.tgz"},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.3.2":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.3.2","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.3.2","dependencies":{},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.1","_nodeVersion":"v0.6.11","_defaultsLoaded":true,"dist":{"shasum":"1b4e455089ab1d1d38ab6794ffe6cf08f764394a","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.3.2.tgz"},"readme":" __ \n /\\ \\ __ \n __ __ ___ \\_\\ \\ __ _ __ ____ ___ ___ _ __ __ /\\_\\ ____ \n /\\ \\/\\ \\ /' _ `\\ /'_ \\ /'__`\\/\\ __\\/ ,__\\ / ___\\ / __`\\/\\ __\\/'__`\\ \\/\\ \\ /',__\\ \n \\ \\ \\_\\ \\/\\ \\/\\ \\/\\ \\ \\ \\/\\ __/\\ \\ \\//\\__, `\\/\\ \\__//\\ \\ \\ \\ \\ \\//\\ __/ __ \\ \\ \\/\\__, `\\\n \\ \\____/\\ \\_\\ \\_\\ \\___,_\\ \\____\\\\ \\_\\\\/\\____/\\ \\____\\ \\____/\\ \\_\\\\ \\____\\/\\_\\ _\\ \\ \\/\\____/\n \\/___/ \\/_/\\/_/\\/__,_ /\\/____/ \\/_/ \\/___/ \\/____/\\/___/ \\/_/ \\/____/\\/_//\\ \\_\\ \\/___/ \n \\ \\____/ \n \\/___/\n \nUnderscore.js is a utility-belt library for JavaScript that provides \nsupport for the usual functional suspects (each, map, reduce, filter...) \nwithout extending any core JavaScript objects.\n\nFor Docs, License, Tests, and pre-packed downloads, see:\nhttp://documentcloud.github.com/underscore/\n\nMany thanks to our contributors:\nhttps://github.com/documentcloud/underscore/contributors\n","maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}},"1.3.3":{"name":"underscore","description":"JavaScript's functional programming helper library.","homepage":"http://documentcloud.github.com/underscore/","keywords":["util","functional","server","client","browser"],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"main":"underscore.js","version":"1.3.3","_npmUser":{"name":"jashkenas","email":"jashkenas@gmail.com"},"_id":"underscore@1.3.3","dependencies":{},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"_engineSupported":true,"_npmVersion":"1.1.1","_nodeVersion":"v0.6.11","_defaultsLoaded":true,"dist":{"shasum":"47ac53683daf832bfa952e1774417da47817ae42","tarball":"http://registry.npmjs.org/underscore/-/underscore-1.3.3.tgz"},"readme":" __ \n /\\ \\ __ \n __ __ ___ \\_\\ \\ __ _ __ ____ ___ ___ _ __ __ /\\_\\ ____ \n /\\ \\/\\ \\ /' _ `\\ /'_ \\ /'__`\\/\\ __\\/ ,__\\ / ___\\ / __`\\/\\ __\\/'__`\\ \\/\\ \\ /',__\\ \n \\ \\ \\_\\ \\/\\ \\/\\ \\/\\ \\ \\ \\/\\ __/\\ \\ \\//\\__, `\\/\\ \\__//\\ \\ \\ \\ \\ \\//\\ __/ __ \\ \\ \\/\\__, `\\\n \\ \\____/\\ \\_\\ \\_\\ \\___,_\\ \\____\\\\ \\_\\\\/\\____/\\ \\____\\ \\____/\\ \\_\\\\ \\____\\/\\_\\ _\\ \\ \\/\\____/\n \\/___/ \\/_/\\/_/\\/__,_ /\\/____/ \\/_/ \\/___/ \\/____/\\/___/ \\/_/ \\/____/\\/_//\\ \\_\\ \\/___/ \n \\ \\____/ \n \\/___/\n \nUnderscore.js is a utility-belt library for JavaScript that provides \nsupport for the usual functional suspects (each, map, reduce, filter...) \nwithout extending any core JavaScript objects.\n\nFor Docs, License, Tests, and pre-packed downloads, see:\nhttp://documentcloud.github.com/underscore/\n\nMany thanks to our contributors:\nhttps://github.com/documentcloud/underscore/contributors\n","maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"directories":{}}},"maintainers":[{"name":"documentcloud","email":"jeremy@documentcloud.org"},{"name":"jashkenas","email":"jashkenas@gmail.com"}],"author":{"name":"Jeremy Ashkenas","email":"jeremy@documentcloud.org"},"time":{"1.0.3":"2011-12-07T15:12:18.045Z","1.0.4":"2011-12-07T15:12:18.045Z","1.1.0":"2011-12-07T15:12:18.045Z","1.1.1":"2011-12-07T15:12:18.045Z","1.1.2":"2011-12-07T15:12:18.045Z","1.1.3":"2011-12-07T15:12:18.045Z","1.1.4":"2011-12-07T15:12:18.045Z","1.1.5":"2011-12-07T15:12:18.045Z","1.1.6":"2011-12-07T15:12:18.045Z","1.1.7":"2011-12-07T15:12:18.045Z","1.2.0":"2011-12-07T15:12:18.045Z","1.2.1":"2011-12-07T15:12:18.045Z","1.2.2":"2011-11-14T20:28:47.115Z","1.2.3":"2011-12-07T15:12:18.045Z","1.2.4":"2012-01-09T17:23:14.818Z","1.3.0":"2012-01-11T16:41:38.459Z","1.3.1":"2012-01-23T22:57:36.474Z","1.3.2":"2012-04-09T18:38:14.345Z","1.3.3":"2012-04-10T14:43:48.089Z"},"repository":{"type":"git","url":"git://github.com/documentcloud/underscore.git"},"users":{"vesln":true,"mvolkmann":true,"lancehunt":true,"mikl":true,"linus":true,"vasc":true,"bat":true,"dmalam":true,"mbrevoort":true,"danielr":true,"rsimoes":true,"thlorenz":true}} \ No newline at end of file diff --git a/deps/npm/package.json b/deps/npm/package.json index a2961a3606bc5f..494a4308df409f 100644 --- a/deps/npm/package.json +++ b/deps/npm/package.json @@ -1,5 +1,5 @@ { - "version": "1.4.28", + "version": "1.4.29", "name": "npm", "description": "A package manager for node", "keywords": [ diff --git a/deps/npm/test/tap/cache-add-scoped-unsupported.js b/deps/npm/test/tap/cache-add-scoped-unsupported.js new file mode 100644 index 00000000000000..0da201d860b608 --- /dev/null +++ b/deps/npm/test/tap/cache-add-scoped-unsupported.js @@ -0,0 +1,12 @@ +var common = require('../common-tap.js') +var test = require('tap').test + +test('cache add scoped package', function (t) { + common.npm(['cache', 'add', '@scoped/package'], {}, function (er, c, so, se) { + if (er) throw er + t.notEqual(c, 0, 'should get an error code') + t.equal(so, '', 'no regular output') + t.similar(se, /This version of npm doesn't support scoped packages/) + t.end() + }) +}) diff --git a/deps/npm/test/tap/cache-add-unpublished.js b/deps/npm/test/tap/cache-add-unpublished.js index e3132131453c7e..50595f43cdeefc 100644 --- a/deps/npm/test/tap/cache-add-unpublished.js +++ b/deps/npm/test/tap/cache-add-unpublished.js @@ -1,61 +1,12 @@ var common = require('../common-tap.js') var test = require('tap').test -var server - -var port = common.port -var http = require("http") - -var doc = { - "_id": "superfoo", - "_rev": "5-d11adeec0fdfea6b96b120610d2bed71", - "name": "superfoo", - "time": { - "modified": "2014-02-18T18:35:02.930Z", - "created": "2014-02-18T18:34:08.437Z", - "1.1.0": "2014-02-18T18:34:08.437Z", - "unpublished": { - "name": "isaacs", - "time": "2014-04-30T18:26:45.584Z", - "tags": { - "latest": "1.1.0" - }, - "maintainers": [ - { - "name": "foo", - "email": "foo@foo.com" - } - ], - "description": "do lots a foo", - "versions": [ - "1.1.0" - ] - } - }, - "_attachments": {} -} - -test("setup", function (t) { - server = http.createServer(function(req, res) { - res.end(JSON.stringify(doc)) - }) - server.listen(port, function() { - t.end() - }) -}) - test("cache add", function (t) { common.npm(["cache", "add", "superfoo"], {}, function (er, c, so, se) { if (er) throw er t.ok(c) t.equal(so, "") - t.similar(se, /404 Not Found: superfoo/) - t.end() - }) -}) - -test("cleanup", function (t) { - server.close(function() { + t.similar(se, /'superfoo' is not in the npm registry./) t.end() }) }) diff --git a/deps/npm/test/tap/prepublish.js b/deps/npm/test/tap/prepublish.js index f80085d92c64bc..3464efcbf40d26 100644 --- a/deps/npm/test/tap/prepublish.js +++ b/deps/npm/test/tap/prepublish.js @@ -70,9 +70,10 @@ test('test', function (t) { e += chunk } function onend () { - if (e) { - throw new Error('got stderr data: ' + JSON.stringify('' + e)) - } + // FIXME: npm@1.4.29 always prints a deprecation banner to stdout + // if (e) { + // throw new Error('got stderr data: ' + JSON.stringify('' + e)) + // } c = c.trim() var regex = new RegExp("" + "> npm-test-prepublish@1.2.5 prepublish [^\\r\\n]+\\r?\\n" + diff --git a/deps/npm/test/tap/scripts-whitespace-windows.js b/deps/npm/test/tap/scripts-whitespace-windows.js index 97bed98cb71992..c018aec340504d 100644 --- a/deps/npm/test/tap/scripts-whitespace-windows.js +++ b/deps/npm/test/tap/scripts-whitespace-windows.js @@ -30,9 +30,10 @@ test('setup', function (t) { }) child.stdout.setEncoding('utf8') - child.stderr.on('data', function(chunk) { - throw new Error('got stderr data: ' + JSON.stringify('' + chunk)) - }) + // FIXME: npm@1.4.29 always prints a deprecation banner to stdout + // child.stderr.on('data', function(chunk) { + // throw new Error('got stderr data: ' + JSON.stringify('' + chunk)) + // }) child.on('close', function () { t.end() }) @@ -46,9 +47,10 @@ test('test', function (t) { }) child.stdout.setEncoding('utf8') - child.stderr.on('data', function(chunk) { - throw new Error('got stderr data: ' + JSON.stringify('' + chunk)) - }) + // FIXME: npm@1.4.29 always prints a deprecation banner to stdout + // child.stderr.on('data', function(chunk) { + // throw new Error('got stderr data: ' + JSON.stringify('' + chunk)) + // }) child.stdout.on('data', ondata) child.on('close', onend) var c = '' From ce0a48826ece646d1e43bf8ca9623568be8c33d3 Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Thu, 3 Dec 2015 17:18:52 +0100 Subject: [PATCH 2/7] deps: upgrade to openssl 1.0.1q Contains fixes for: * CVE-2015-3194 Certificate verify crash with missing PSS parameter * CVE-2015-3195 X509_ATTRIBUTE memory leak fixup! character encoding noise fixup! update opensslconf.h PR-URL: https://github.com/nodejs/node/pull/4132 Reviewed-By: Fedor Indutny Reviewed-By: Shigeki Ohtsu --- deps/openssl/asm/arm-elf-gas/bn/armv4-gf2m.S | 22 +- .../asm/arm-elf-gas/modes/ghash-armv4.S | 6 +- deps/openssl/config/opensslconf.h | 2 +- deps/openssl/openssl/apps/Makefile | 2 +- deps/openssl/openssl/apps/apps.c | 9 +- deps/openssl/openssl/apps/asn1pars.c | 4 +- deps/openssl/openssl/apps/ca.c | 14 +- deps/openssl/openssl/apps/ecparam.c | 7 +- deps/openssl/openssl/apps/engine.c | 5 - deps/openssl/openssl/apps/md4.c | 2 +- deps/openssl/openssl/apps/ocsp.c | 4 +- deps/openssl/openssl/apps/pkcs12.c | 14 +- deps/openssl/openssl/apps/s_client.c | 3 + deps/openssl/openssl/apps/s_server.c | 15 ++ .../openssl/openssl/crypto/aes/asm/aes-586.pl | 6 +- .../openssl/crypto/aes/asm/aesni-x86.pl | 2 +- deps/openssl/openssl/crypto/asn1/asn1_par.c | 10 + deps/openssl/openssl/crypto/asn1/d2i_pr.c | 15 +- deps/openssl/openssl/crypto/asn1/tasn_dec.c | 11 +- deps/openssl/openssl/crypto/asn1/x_bignum.c | 5 +- deps/openssl/openssl/crypto/asn1/x_pubkey.c | 5 +- deps/openssl/openssl/crypto/asn1/x_x509.c | 9 +- deps/openssl/openssl/crypto/bio/b_dump.c | 1 - deps/openssl/openssl/crypto/bio/bss_file.c | 13 +- .../openssl/crypto/bn/asm/armv4-gf2m.pl | 24 +- deps/openssl/openssl/crypto/bn/asm/ia64.S | 4 +- .../openssl/crypto/bn/asm/s390x-gf2m.pl | 6 +- .../openssl/openssl/crypto/bn/asm/x86-gf2m.pl | 16 +- .../openssl/crypto/bn/asm/x86_64-gcc.c | 2 +- .../openssl/crypto/bn/asm/x86_64-gf2m.pl | 16 +- deps/openssl/openssl/crypto/bn/bn_exp.c | 7 +- deps/openssl/openssl/crypto/bn/bn_gcd.c | 2 + deps/openssl/openssl/crypto/bn/bn_gf2m.c | 11 +- deps/openssl/openssl/crypto/bn/bn_mont.c | 9 +- deps/openssl/openssl/crypto/bn/bn_recp.c | 4 +- deps/openssl/openssl/crypto/bn/bn_x931p.c | 7 +- deps/openssl/openssl/crypto/bn/bntest.c | 56 ++++- deps/openssl/openssl/crypto/buffer/buf_str.c | 21 +- deps/openssl/openssl/crypto/buffer/buffer.h | 6 + deps/openssl/openssl/crypto/cms/cms_enc.c | 2 +- deps/openssl/openssl/crypto/cms/cms_pwri.c | 3 + deps/openssl/openssl/crypto/cms/cms_smime.c | 2 +- deps/openssl/openssl/crypto/comp/c_zlib.c | 3 +- deps/openssl/openssl/crypto/conf/conf_def.c | 3 +- deps/openssl/openssl/crypto/conf/conf_sap.c | 1 + deps/openssl/openssl/crypto/cryptlib.c | 26 ++- deps/openssl/openssl/crypto/des/t/test | 27 --- deps/openssl/openssl/crypto/dsa/dsa_ameth.c | 1 + deps/openssl/openssl/crypto/dsa/dsa_gen.c | 19 +- deps/openssl/openssl/crypto/ec/ec.h | 2 +- deps/openssl/openssl/crypto/ec/ec_asn1.c | 8 +- deps/openssl/openssl/crypto/ec/ec_key.c | 12 +- .../openssl/crypto/engine/eng_cryptodev.c | 7 +- deps/openssl/openssl/crypto/engine/eng_list.c | 1 + deps/openssl/openssl/crypto/evp/e_des3.c | 2 +- deps/openssl/openssl/crypto/evp/encode.c | 198 ++++++++-------- deps/openssl/openssl/crypto/evp/evp_key.c | 6 +- deps/openssl/openssl/crypto/evp/evp_lib.c | 33 ++- deps/openssl/openssl/crypto/evp/evp_pbe.c | 16 +- deps/openssl/openssl/crypto/evp/p_lib.c | 2 +- deps/openssl/openssl/crypto/evp/pmeth_gn.c | 9 +- deps/openssl/openssl/crypto/hmac/hm_ameth.c | 9 +- deps/openssl/openssl/crypto/jpake/jpake.c | 4 + deps/openssl/openssl/crypto/mem_clr.c | 4 + .../openssl/crypto/modes/asm/ghash-armv4.pl | 6 +- .../openssl/crypto/modes/asm/ghash-x86.pl | 2 +- deps/openssl/openssl/crypto/ocsp/ocsp_lib.c | 6 - deps/openssl/openssl/crypto/ocsp/ocsp_prn.c | 3 +- deps/openssl/openssl/crypto/opensslconf.h.in | 2 +- deps/openssl/openssl/crypto/opensslv.h | 6 +- deps/openssl/openssl/crypto/pem/pem_info.c | 6 + deps/openssl/openssl/crypto/pem/pvkfmt.c | 10 +- deps/openssl/openssl/crypto/pkcs12/p12_add.c | 27 ++- deps/openssl/openssl/crypto/pkcs12/p12_crpt.c | 3 + deps/openssl/openssl/crypto/pkcs12/p12_mutl.c | 4 +- deps/openssl/openssl/crypto/pkcs7/pk7_doit.c | 3 +- .../openssl/crypto/rc4/asm/rc4-x86_64.pl | 2 +- deps/openssl/openssl/crypto/rsa/rsa_ameth.c | 2 +- deps/openssl/openssl/crypto/rsa/rsa_gen.c | 4 +- deps/openssl/openssl/crypto/rsa/rsa_sign.c | 11 +- deps/openssl/openssl/crypto/rsa/rsa_test.c | 32 ++- .../openssl/crypto/sha/asm/sha1-586.pl | 4 +- .../openssl/crypto/sha/asm/sha256-586.pl | 2 +- .../openssl/crypto/sha/asm/sha512-586.pl | 2 +- .../openssl/crypto/sha/asm/sha512-parisc.pl | 2 +- deps/openssl/openssl/crypto/sparccpuid.S | 2 +- deps/openssl/openssl/crypto/srp/srp_vfy.c | 34 ++- .../openssl/openssl/crypto/ts/ts_rsp_verify.c | 2 +- .../openssl/crypto/whrlpool/asm/wp-mmx.pl | 2 +- deps/openssl/openssl/crypto/x509/x509_cmp.c | 15 +- deps/openssl/openssl/crypto/x509/x509_lu.c | 2 - deps/openssl/openssl/crypto/x509v3/v3_cpols.c | 4 + deps/openssl/openssl/crypto/x509v3/v3_ncons.c | 2 + deps/openssl/openssl/crypto/x509v3/v3_pci.c | 2 +- deps/openssl/openssl/crypto/x509v3/v3_pcia.c | 2 +- deps/openssl/openssl/doc/apps/ciphers.pod | 2 +- deps/openssl/openssl/doc/apps/dgst.pod | 5 - deps/openssl/openssl/doc/apps/genrsa.pod | 6 - deps/openssl/openssl/doc/apps/req.pod | 2 +- deps/openssl/openssl/doc/apps/x509.pod | 3 +- deps/openssl/openssl/doc/crypto/BIO_read.pod | 6 +- deps/openssl/openssl/doc/crypto/BN_rand.pod | 4 +- .../doc/crypto/DSA_generate_parameters.pod | 2 +- .../doc/crypto/EVP_DigestVerifyInit.pod | 9 +- .../openssl/doc/crypto/EVP_SignInit.pod | 3 +- deps/openssl/openssl/doc/crypto/buffer.pod | 47 ++-- .../openssl/doc/crypto/d2i_X509_NAME.pod | 2 +- .../doc/ssl/SSL_CTX_add_extra_chain_cert.pod | 35 ++- deps/openssl/openssl/include/openssl/buffer.h | 6 + deps/openssl/openssl/include/openssl/ec.h | 2 +- .../openssl/include/openssl/opensslv.h | 6 +- deps/openssl/openssl/include/openssl/ssl.h | 4 + deps/openssl/openssl/include/openssl/ssl3.h | 2 + deps/openssl/openssl/include/openssl/tls1.h | 15 +- deps/openssl/openssl/ssl/Makefile | 2 +- deps/openssl/openssl/ssl/bio_ssl.c | 4 + deps/openssl/openssl/ssl/clienthellotest.c | 218 ++++++++++++++++++ deps/openssl/openssl/ssl/d1_both.c | 7 +- deps/openssl/openssl/ssl/d1_clnt.c | 23 +- deps/openssl/openssl/ssl/d1_srvr.c | 31 ++- deps/openssl/openssl/ssl/s23_clnt.c | 21 +- deps/openssl/openssl/ssl/s3_cbc.c | 45 ++-- deps/openssl/openssl/ssl/s3_clnt.c | 119 +++++++--- deps/openssl/openssl/ssl/s3_enc.c | 108 +++++---- deps/openssl/openssl/ssl/s3_lib.c | 2 +- deps/openssl/openssl/ssl/s3_srvr.c | 78 ++++--- deps/openssl/openssl/ssl/ssl.h | 4 + deps/openssl/openssl/ssl/ssl3.h | 2 + deps/openssl/openssl/ssl/ssl_asn1.c | 5 +- deps/openssl/openssl/ssl/ssl_cert.c | 2 +- deps/openssl/openssl/ssl/ssl_ciph.c | 11 +- deps/openssl/openssl/ssl/ssl_err.c | 5 + deps/openssl/openssl/ssl/ssl_lib.c | 9 +- deps/openssl/openssl/ssl/ssl_locl.h | 20 +- deps/openssl/openssl/ssl/ssl_rsa.c | 23 +- deps/openssl/openssl/ssl/ssl_sess.c | 4 +- deps/openssl/openssl/ssl/ssltest.c | 1 + deps/openssl/openssl/ssl/t1_enc.c | 48 ++-- deps/openssl/openssl/ssl/t1_lib.c | 57 +++-- deps/openssl/openssl/ssl/tls1.h | 15 +- 140 files changed, 1331 insertions(+), 677 deletions(-) delete mode 100644 deps/openssl/openssl/crypto/des/t/test create mode 100644 deps/openssl/openssl/ssl/clienthellotest.c diff --git a/deps/openssl/asm/arm-elf-gas/bn/armv4-gf2m.S b/deps/openssl/asm/arm-elf-gas/bn/armv4-gf2m.S index 552a883709f43e..7efebb81d4dc9a 100644 --- a/deps/openssl/asm/arm-elf-gas/bn/armv4-gf2m.S +++ b/deps/openssl/asm/arm-elf-gas/bn/armv4-gf2m.S @@ -11,13 +11,13 @@ mul_1x1_neon: vshl.u64 d2,d16,#8 @ q1-q3 are slided - vmull.p8 q0,d16,d17 @ abb + vmull.p8 q0,d16,d17 @ a·bb vshl.u64 d4,d16,#16 - vmull.p8 q1,d2,d17 @ a<<8bb + vmull.p8 q1,d2,d17 @ a<<8·bb vshl.u64 d6,d16,#24 - vmull.p8 q2,d4,d17 @ a<<16bb + vmull.p8 q2,d4,d17 @ a<<16·bb vshr.u64 d2,#8 - vmull.p8 q3,d6,d17 @ a<<24bb + vmull.p8 q3,d6,d17 @ a<<24·bb vshl.u64 d3,#24 veor d0,d2 vshr.u64 d4,#16 @@ -132,20 +132,20 @@ bn_GF2m_mul_2x2: vmov d16,d18 vmov d17,d19 - bl mul_1x1_neon @ a1b1 + bl mul_1x1_neon @ a1·b1 vmov d22,d0 vmov d16,d20 vmov d17,d21 - bl mul_1x1_neon @ a0b0 + bl mul_1x1_neon @ a0·b0 vmov d23,d0 veor d16,d20,d18 veor d17,d21,d19 veor d20,d23,d22 - bl mul_1x1_neon @ (a0+a1)(b0+b1) + bl mul_1x1_neon @ (a0+a1)·(b0+b1) - veor d0,d20 @ (a0+a1)(b0+b1)-a0b0-a1b1 + veor d0,d20 @ (a0+a1)·(b0+b1)-a0·b0-a1·b1 vshl.u64 d1,d0,#32 vshr.u64 d0,d0,#32 veor d23,d1 @@ -165,7 +165,7 @@ bn_GF2m_mul_2x2: mov r12,#7<<2 sub sp,sp,#32 @ allocate tab[8] - bl mul_1x1_ialu @ a1b1 + bl mul_1x1_ialu @ a1·b1 str r5,[r10,#8] str r4,[r10,#12] @@ -175,13 +175,13 @@ bn_GF2m_mul_2x2: eor r2,r2,r1 eor r0,r0,r3 eor r1,r1,r2 - bl mul_1x1_ialu @ a0b0 + bl mul_1x1_ialu @ a0·b0 str r5,[r10] str r4,[r10,#4] eor r1,r1,r2 eor r0,r0,r3 - bl mul_1x1_ialu @ (a1+a0)(b1+b0) + bl mul_1x1_ialu @ (a1+a0)·(b1+b0) ldmia r10,{r6-r9} eor r5,r5,r4 eor r4,r4,r7 diff --git a/deps/openssl/asm/arm-elf-gas/modes/ghash-armv4.S b/deps/openssl/asm/arm-elf-gas/modes/ghash-armv4.S index 872aff1727fdda..c291a571167548 100644 --- a/deps/openssl/asm/arm-elf-gas/modes/ghash-armv4.S +++ b/deps/openssl/asm/arm-elf-gas/modes/ghash-armv4.S @@ -368,8 +368,8 @@ gcm_ghash_neon: vdup.8 d4,d28[0] @ broadcast lowest byte .Linner_neon: subs r1,r1,#1 - vmull.p8 q9,d1,d4 @ H.loXi[i] - vmull.p8 q8,d0,d4 @ H.hiXi[i] + vmull.p8 q9,d1,d4 @ H.lo·Xi[i] + vmull.p8 q8,d0,d4 @ H.hi·Xi[i] vext.8 q14,q12,#1 @ IN>>=8 veor q10,q13 @ modulo-scheduled part @@ -382,7 +382,7 @@ gcm_ghash_neon: vsli.8 d2,d3,#1 @ compose the "carry" byte vext.8 q10,q12,#1 @ Z>>=8 - vmull.p8 q11,d2,d5 @ "carry"0xe1 + vmull.p8 q11,d2,d5 @ "carry"·0xe1 vshr.u8 d2,d3,#7 @ save Z's bottom bit vext.8 q13,q9,q12,#1 @ Qlo>>=8 veor q10,q8 diff --git a/deps/openssl/config/opensslconf.h b/deps/openssl/config/opensslconf.h index 9bf23692d64f4b..508b1b2da71850 100644 --- a/deps/openssl/config/opensslconf.h +++ b/deps/openssl/config/opensslconf.h @@ -299,7 +299,7 @@ even newer MIPS CPU's, but at the moment one size fits all for optimization options. Older Sparc's work better with only UNROLL, but there's no way to tell at compile time what it is you're running on */ -# if defined( sun ) /* Newer Sparc's */ +# if defined( __sun ) || defined ( sun ) /* Newer Sparc's */ # define DES_PTR # define DES_RISC1 # define DES_UNROLL diff --git a/deps/openssl/openssl/apps/Makefile b/deps/openssl/openssl/apps/Makefile index cafe55458ddc14..8c3297ea672473 100644 --- a/deps/openssl/openssl/apps/Makefile +++ b/deps/openssl/openssl/apps/Makefile @@ -135,7 +135,7 @@ update: openssl-vms.cnf local_depend depend: local_depend @if [ -z "$(THIS)" ]; then $(MAKE) -f $(TOP)/Makefile reflect THIS=$@; fi local_depend: - @[ -z "$(THIS)" ] || $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(SRC); \ + @[ -z "$(THIS)" ] || $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(SRC) dclean: $(PERL) -pe 'if (/^# DO NOT DELETE THIS LINE/) {print; exit(0);}' $(MAKEFILE) >Makefile.new diff --git a/deps/openssl/openssl/apps/apps.c b/deps/openssl/openssl/apps/apps.c index 6801238348315c..8ab4833668bcf4 100644 --- a/deps/openssl/openssl/apps/apps.c +++ b/deps/openssl/openssl/apps/apps.c @@ -119,9 +119,6 @@ #include #include #include -#if !defined(OPENSSL_SYSNAME_WIN32) && !defined(NETWARE_CLIB) -# include -#endif #include #include #include @@ -1247,7 +1244,11 @@ int set_name_ex(unsigned long *flags, const char *arg) {"ca_default", XN_FLAG_MULTILINE, 0xffffffffL}, {NULL, 0, 0} }; - return set_multi_opts(flags, arg, ex_tbl); + if (set_multi_opts(flags, arg, ex_tbl) == 0) + return 0; + if ((*flags & XN_FLAG_SEP_MASK) == 0) + *flags |= XN_FLAG_SEP_CPLUS_SPC; + return 1; } int set_ext_copy(int *copy_type, const char *arg) diff --git a/deps/openssl/openssl/apps/asn1pars.c b/deps/openssl/openssl/apps/asn1pars.c index 11b07875943be8..0a6b990b503d85 100644 --- a/deps/openssl/openssl/apps/asn1pars.c +++ b/deps/openssl/openssl/apps/asn1pars.c @@ -313,9 +313,9 @@ int MAIN(int argc, char **argv) } typ = ASN1_TYPE_get(at); if ((typ == V_ASN1_OBJECT) + || (typ == V_ASN1_BOOLEAN) || (typ == V_ASN1_NULL)) { - BIO_printf(bio_err, "Can't parse %s type\n", - typ == V_ASN1_NULL ? "NULL" : "OBJECT"); + BIO_printf(bio_err, "Can't parse %s type\n", ASN1_tag2str(typ)); ERR_print_errors(bio_err); goto end; } diff --git a/deps/openssl/openssl/apps/ca.c b/deps/openssl/openssl/apps/ca.c index 97ad0c1ffe96b5..4d64eb2dc39615 100644 --- a/deps/openssl/openssl/apps/ca.c +++ b/deps/openssl/openssl/apps/ca.c @@ -99,25 +99,19 @@ #undef PROG #define PROG ca_main -#define BASE_SECTION "ca" -#define CONFIG_FILE "openssl.cnf" +#define BASE_SECTION "ca" +#define CONFIG_FILE "openssl.cnf" #define ENV_DEFAULT_CA "default_ca" -#define STRING_MASK "string_mask" +#define STRING_MASK "string_mask" #define UTF8_IN "utf8" -#define ENV_DIR "dir" -#define ENV_CERTS "certs" -#define ENV_CRL_DIR "crl_dir" -#define ENV_CA_DB "CA_DB" #define ENV_NEW_CERTS_DIR "new_certs_dir" #define ENV_CERTIFICATE "certificate" #define ENV_SERIAL "serial" #define ENV_CRLNUMBER "crlnumber" -#define ENV_CRL "crl" #define ENV_PRIVATE_KEY "private_key" -#define ENV_RANDFILE "RANDFILE" #define ENV_DEFAULT_DAYS "default_days" #define ENV_DEFAULT_STARTDATE "default_startdate" #define ENV_DEFAULT_ENDDATE "default_enddate" @@ -2520,6 +2514,8 @@ static int do_updatedb(CA_DB *db) char **rrow, *a_tm_s; a_tm = ASN1_UTCTIME_new(); + if (a_tm == NULL) + return -1; /* get actual time and make a string */ a_tm = X509_gmtime_adj(a_tm, 0); diff --git a/deps/openssl/openssl/apps/ecparam.c b/deps/openssl/openssl/apps/ecparam.c index 1f340a9b84e024..402fb3140d8623 100644 --- a/deps/openssl/openssl/apps/ecparam.c +++ b/deps/openssl/openssl/apps/ecparam.c @@ -413,14 +413,13 @@ int MAIN(int argc, char **argv) } if (check) { - if (group == NULL) - BIO_printf(bio_err, "no elliptic curve parameters\n"); BIO_printf(bio_err, "checking elliptic curve parameters: "); if (!EC_GROUP_check(group, NULL)) { BIO_printf(bio_err, "failed\n"); ERR_print_errors(bio_err); - } else - BIO_printf(bio_err, "ok\n"); + goto end; + } + BIO_printf(bio_err, "ok\n"); } diff --git a/deps/openssl/openssl/apps/engine.c b/deps/openssl/openssl/apps/engine.c index 3d70cac416d6a5..460ec60cb14c89 100644 --- a/deps/openssl/openssl/apps/engine.c +++ b/deps/openssl/openssl/apps/engine.c @@ -99,8 +99,6 @@ static void identity(char *ptr) static int append_buf(char **buf, const char *s, int *size, int step) { - int l = strlen(s); - if (*buf == NULL) { *size = step; *buf = OPENSSL_malloc(*size); @@ -109,9 +107,6 @@ static int append_buf(char **buf, const char *s, int *size, int step) **buf = '\0'; } - if (**buf != '\0') - l += 2; /* ", " */ - if (strlen(*buf) + strlen(s) >= (unsigned int)*size) { *size += step; *buf = OPENSSL_realloc(*buf, *size); diff --git a/deps/openssl/openssl/apps/md4.c b/deps/openssl/openssl/apps/md4.c index 7f457b2ab1e120..80e56b475c13d2 120000 --- a/deps/openssl/openssl/apps/md4.c +++ b/deps/openssl/openssl/apps/md4.c @@ -1 +1 @@ -../crypto/md4/md4.c \ No newline at end of file +openssl-1.0.1q/../crypto/md4/md4.c \ No newline at end of file diff --git a/deps/openssl/openssl/apps/ocsp.c b/deps/openssl/openssl/apps/ocsp.c index 572f0643e13c7a..9fd95688251f14 100644 --- a/deps/openssl/openssl/apps/ocsp.c +++ b/deps/openssl/openssl/apps/ocsp.c @@ -1220,8 +1220,8 @@ static OCSP_RESPONSE *query_responder(BIO *err, BIO *cbio, char *path, return NULL; } - if (BIO_get_fd(cbio, &fd) <= 0) { - BIO_puts(err, "Can't get connection fd\n"); + if (BIO_get_fd(cbio, &fd) < 0) { + BIO_puts(bio_err, "Can't get connection fd\n"); goto err; } diff --git a/deps/openssl/openssl/apps/pkcs12.c b/deps/openssl/openssl/apps/pkcs12.c index 4ff64495a956cc..e41b445a50b052 100644 --- a/deps/openssl/openssl/apps/pkcs12.c +++ b/deps/openssl/openssl/apps/pkcs12.c @@ -134,13 +134,6 @@ int MAIN(int argc, char **argv) apps_startup(); -# ifdef OPENSSL_FIPS - if (FIPS_mode()) - cert_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; - else -# endif - cert_pbe = NID_pbe_WithSHA1And40BitRC2_CBC; - enc = EVP_des_ede3_cbc(); if (bio_err == NULL) bio_err = BIO_new_fp(stderr, BIO_NOCLOSE); @@ -148,6 +141,13 @@ int MAIN(int argc, char **argv) if (!load_config(bio_err, NULL)) goto end; +# ifdef OPENSSL_FIPS + if (FIPS_mode()) + cert_pbe = NID_pbe_WithSHA1And3_Key_TripleDES_CBC; + else +# endif + cert_pbe = NID_pbe_WithSHA1And40BitRC2_CBC; + args = argv + 1; while (*args) { diff --git a/deps/openssl/openssl/apps/s_client.c b/deps/openssl/openssl/apps/s_client.c index c2e6c0bfdcc136..494792450f66ac 100644 --- a/deps/openssl/openssl/apps/s_client.c +++ b/deps/openssl/openssl/apps/s_client.c @@ -1890,6 +1890,9 @@ int MAIN(int argc, char **argv) EVP_PKEY_free(key); if (pass) OPENSSL_free(pass); +#ifndef OPENSSL_NO_SRP + OPENSSL_free(srp_arg.srppassin); +#endif if (vpm) X509_VERIFY_PARAM_free(vpm); if (cbuf != NULL) { diff --git a/deps/openssl/openssl/apps/s_server.c b/deps/openssl/openssl/apps/s_server.c index b58e5e07c41c1c..a8aee77a6e8410 100644 --- a/deps/openssl/openssl/apps/s_server.c +++ b/deps/openssl/openssl/apps/s_server.c @@ -2654,6 +2654,21 @@ static int www_body(char *hostname, int s, unsigned char *context) goto err; } else { BIO_printf(bio_s_out, "read R BLOCK\n"); +#ifndef OPENSSL_NO_SRP + if (BIO_should_io_special(io) + && BIO_get_retry_reason(io) == BIO_RR_SSL_X509_LOOKUP) { + BIO_printf(bio_s_out, "LOOKUP renego during read\n"); + srp_callback_parm.user = + SRP_VBASE_get_by_user(srp_callback_parm.vb, + srp_callback_parm.login); + if (srp_callback_parm.user) + BIO_printf(bio_s_out, "LOOKUP done %s\n", + srp_callback_parm.user->info); + else + BIO_printf(bio_s_out, "LOOKUP not successful\n"); + continue; + } +#endif #if defined(OPENSSL_SYS_NETWARE) delay(1000); #elif !defined(OPENSSL_SYS_MSDOS) && !defined(__DJGPP__) diff --git a/deps/openssl/openssl/crypto/aes/asm/aes-586.pl b/deps/openssl/openssl/crypto/aes/asm/aes-586.pl index 687ed811be4796..51b500ddeff491 100755 --- a/deps/openssl/openssl/crypto/aes/asm/aes-586.pl +++ b/deps/openssl/openssl/crypto/aes/asm/aes-586.pl @@ -45,7 +45,7 @@ # the undertaken effort was that it appeared that in tight IA-32 # register window little-endian flavor could achieve slightly higher # Instruction Level Parallelism, and it indeed resulted in up to 15% -# better performance on most recent -archs... +# better performance on most recent µ-archs... # # Third version adds AES_cbc_encrypt implementation, which resulted in # up to 40% performance imrovement of CBC benchmark results. 40% was @@ -223,7 +223,7 @@ $speed_limit=512; # chunks smaller than $speed_limit are # processed with compact routine in CBC mode $small_footprint=1; # $small_footprint=1 code is ~5% slower [on - # recent -archs], but ~5 times smaller! + # recent µ-archs], but ~5 times smaller! # I favor compact code to minimize cache # contention and in hope to "collect" 5% back # in real-life applications... @@ -562,7 +562,7 @@ () # Performance is not actually extraordinary in comparison to pure # x86 code. In particular encrypt performance is virtually the same. # Decrypt performance on the other hand is 15-20% better on newer -# -archs [but we're thankful for *any* improvement here], and ~50% +# µ-archs [but we're thankful for *any* improvement here], and ~50% # better on PIII:-) And additionally on the pros side this code # eliminates redundant references to stack and thus relieves/ # minimizes the pressure on the memory bus. diff --git a/deps/openssl/openssl/crypto/aes/asm/aesni-x86.pl b/deps/openssl/openssl/crypto/aes/asm/aesni-x86.pl index 3dc345b585f623..8c1d0b5bed20d3 100644 --- a/deps/openssl/openssl/crypto/aes/asm/aesni-x86.pl +++ b/deps/openssl/openssl/crypto/aes/asm/aesni-x86.pl @@ -74,7 +74,7 @@ $inout4="xmm6"; $in0="xmm6"; $inout5="xmm7"; $ivec="xmm7"; -# AESNI extenstion +# AESNI extension sub aeskeygenassist { my($dst,$src,$imm)=@_; if ("$dst:$src" =~ /xmm([0-7]):xmm([0-7])/) diff --git a/deps/openssl/openssl/crypto/asn1/asn1_par.c b/deps/openssl/openssl/crypto/asn1/asn1_par.c index a5d2da10bb72df..0ca985a2be1e70 100644 --- a/deps/openssl/openssl/crypto/asn1/asn1_par.c +++ b/deps/openssl/openssl/crypto/asn1/asn1_par.c @@ -62,6 +62,10 @@ #include #include +#ifndef ASN1_PARSE_MAXDEPTH +#define ASN1_PARSE_MAXDEPTH 128 +#endif + static int asn1_print_info(BIO *bp, int tag, int xclass, int constructed, int indent); static int asn1_parse2(BIO *bp, const unsigned char **pp, long length, @@ -128,6 +132,12 @@ static int asn1_parse2(BIO *bp, const unsigned char **pp, long length, #else dump_indent = 6; /* Because we know BIO_dump_indent() */ #endif + + if (depth > ASN1_PARSE_MAXDEPTH) { + BIO_puts(bp, "BAD RECURSION DEPTH\n"); + return 0; + } + p = *pp; tot = p + length; op = p - 1; diff --git a/deps/openssl/openssl/crypto/asn1/d2i_pr.c b/deps/openssl/openssl/crypto/asn1/d2i_pr.c index c96da091d39c44..d21829af192f0c 100644 --- a/deps/openssl/openssl/crypto/asn1/d2i_pr.c +++ b/deps/openssl/openssl/crypto/asn1/d2i_pr.c @@ -72,6 +72,7 @@ EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, long length) { EVP_PKEY *ret; + const unsigned char *p = *pp; if ((a == NULL) || (*a == NULL)) { if ((ret = EVP_PKEY_new()) == NULL) { @@ -94,21 +95,23 @@ EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, } if (!ret->ameth->old_priv_decode || - !ret->ameth->old_priv_decode(ret, pp, length)) { + !ret->ameth->old_priv_decode(ret, &p, length)) { if (ret->ameth->priv_decode) { PKCS8_PRIV_KEY_INFO *p8 = NULL; - p8 = d2i_PKCS8_PRIV_KEY_INFO(NULL, pp, length); + p8 = d2i_PKCS8_PRIV_KEY_INFO(NULL, &p, length); if (!p8) goto err; EVP_PKEY_free(ret); ret = EVP_PKCS82PKEY(p8); PKCS8_PRIV_KEY_INFO_free(p8); - + if (ret == NULL) + goto err; } else { ASN1err(ASN1_F_D2I_PRIVATEKEY, ERR_R_ASN1_LIB); goto err; } } + *pp = p; if (a != NULL) (*a) = ret; return (ret); @@ -136,6 +139,7 @@ EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, * input is surrounded by an ASN1 SEQUENCE. */ inkey = d2i_ASN1_SEQUENCE_ANY(NULL, &p, length); + p = *pp; /* * Since we only need to discern "traditional format" RSA and DSA keys we * can just count the elements. @@ -146,7 +150,7 @@ EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, keytype = EVP_PKEY_EC; else if (sk_ASN1_TYPE_num(inkey) == 3) { /* This seems to be PKCS8, not * traditional format */ - PKCS8_PRIV_KEY_INFO *p8 = d2i_PKCS8_PRIV_KEY_INFO(NULL, pp, length); + PKCS8_PRIV_KEY_INFO *p8 = d2i_PKCS8_PRIV_KEY_INFO(NULL, &p, length); EVP_PKEY *ret; sk_ASN1_TYPE_pop_free(inkey, ASN1_TYPE_free); @@ -157,6 +161,9 @@ EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, const unsigned char **pp, } ret = EVP_PKCS82PKEY(p8); PKCS8_PRIV_KEY_INFO_free(p8); + if (ret == NULL) + return NULL; + *pp = p; if (a) { *a = ret; } diff --git a/deps/openssl/openssl/crypto/asn1/tasn_dec.c b/deps/openssl/openssl/crypto/asn1/tasn_dec.c index 7fd336a402268b..9256049d158814 100644 --- a/deps/openssl/openssl/crypto/asn1/tasn_dec.c +++ b/deps/openssl/openssl/crypto/asn1/tasn_dec.c @@ -180,6 +180,8 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, int otag; int ret = 0; ASN1_VALUE **pchptr, *ptmpval; + int combine = aclass & ASN1_TFLG_COMBINE; + aclass &= ~ASN1_TFLG_COMBINE; if (!pval) return 0; if (aux && aux->asn1_cb) @@ -350,9 +352,9 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, } asn1_set_choice_selector(pval, i, it); - *in = p; if (asn1_cb && !asn1_cb(ASN1_OP_D2I_POST, pval, it, NULL)) goto auxerr; + *in = p; return 1; case ASN1_ITYPE_NDEF_SEQUENCE: @@ -489,9 +491,9 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, /* Save encoding */ if (!asn1_enc_save(pval, *in, p - *in, it)) goto auxerr; - *in = p; if (asn1_cb && !asn1_cb(ASN1_OP_D2I_POST, pval, it, NULL)) goto auxerr; + *in = p; return 1; default: @@ -500,7 +502,8 @@ int ASN1_item_ex_d2i(ASN1_VALUE **pval, const unsigned char **in, long len, auxerr: ASN1err(ASN1_F_ASN1_ITEM_EX_D2I, ASN1_R_AUX_ERROR); err: - ASN1_item_ex_free(pval, it); + if (combine == 0) + ASN1_item_ex_free(pval, it); if (errtt) ERR_add_error_data(4, "Field=", errtt->field_name, ", Type=", it->sname); @@ -689,7 +692,7 @@ static int asn1_template_noexp_d2i(ASN1_VALUE **val, } else { /* Nothing special */ ret = ASN1_item_ex_d2i(val, &p, len, ASN1_ITEM_ptr(tt->item), - -1, 0, opt, ctx); + -1, tt->flags & ASN1_TFLG_COMBINE, opt, ctx); if (!ret) { ASN1err(ASN1_F_ASN1_TEMPLATE_NOEXP_D2I, ERR_R_NESTED_ASN1_ERROR); goto err; diff --git a/deps/openssl/openssl/crypto/asn1/x_bignum.c b/deps/openssl/openssl/crypto/asn1/x_bignum.c index a5a403c26e10ee..eaf046639d6a20 100644 --- a/deps/openssl/openssl/crypto/asn1/x_bignum.c +++ b/deps/openssl/openssl/crypto/asn1/x_bignum.c @@ -141,8 +141,9 @@ static int bn_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it) { BIGNUM *bn; - if (!*pval) - bn_new(pval, it); + + if (*pval == NULL && !bn_new(pval, it)) + return 0; bn = (BIGNUM *)*pval; if (!BN_bin2bn(cont, len, bn)) { bn_free(pval, it); diff --git a/deps/openssl/openssl/crypto/asn1/x_pubkey.c b/deps/openssl/openssl/crypto/asn1/x_pubkey.c index 4b682018c2de40..6c57a7971c9da2 100644 --- a/deps/openssl/openssl/crypto/asn1/x_pubkey.c +++ b/deps/openssl/openssl/crypto/asn1/x_pubkey.c @@ -188,13 +188,16 @@ EVP_PKEY *d2i_PUBKEY(EVP_PKEY **a, const unsigned char **pp, long length) { X509_PUBKEY *xpk; EVP_PKEY *pktmp; - xpk = d2i_X509_PUBKEY(NULL, pp, length); + const unsigned char *q; + q = *pp; + xpk = d2i_X509_PUBKEY(NULL, &q, length); if (!xpk) return NULL; pktmp = X509_PUBKEY_get(xpk); X509_PUBKEY_free(xpk); if (!pktmp) return NULL; + *pp = q; if (a) { EVP_PKEY_free(*a); *a = pktmp; diff --git a/deps/openssl/openssl/crypto/asn1/x_x509.c b/deps/openssl/openssl/crypto/asn1/x_x509.c index f56e837b3a0837..bcd9166c35eb67 100644 --- a/deps/openssl/openssl/crypto/asn1/x_x509.c +++ b/deps/openssl/openssl/crypto/asn1/x_x509.c @@ -180,16 +180,15 @@ X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length) if (!a || *a == NULL) { freeret = 1; } - ret = d2i_X509(a, pp, length); + ret = d2i_X509(a, &q, length); /* If certificate unreadable then forget it */ if (!ret) return NULL; /* update length */ - length -= *pp - q; - if (!length) - return ret; - if (!d2i_X509_CERT_AUX(&ret->aux, pp, length)) + length -= q - *pp; + if (length > 0 && !d2i_X509_CERT_AUX(&ret->aux, &q, length)) goto err; + *pp = q; return ret; err: if (freeret) { diff --git a/deps/openssl/openssl/crypto/bio/b_dump.c b/deps/openssl/openssl/crypto/bio/b_dump.c index 3293c724c94f86..87c8162c5e13fe 100644 --- a/deps/openssl/openssl/crypto/bio/b_dump.c +++ b/deps/openssl/openssl/crypto/bio/b_dump.c @@ -104,7 +104,6 @@ int BIO_dump_indent_cb(int (*cb) (const void *data, size_t len, void *u), if ((rows * dump_width) < len) rows++; for (i = 0; i < rows; i++) { - buf[0] = '\0'; /* start with empty string */ BUF_strlcpy(buf, str, sizeof buf); BIO_snprintf(tmp, sizeof tmp, "%04x - ", i * dump_width); BUF_strlcat(buf, tmp, sizeof buf); diff --git a/deps/openssl/openssl/crypto/bio/bss_file.c b/deps/openssl/openssl/crypto/bio/bss_file.c index d7f15b0699c91d..bfba93e62bbd08 100644 --- a/deps/openssl/openssl/crypto/bio/bss_file.c +++ b/deps/openssl/openssl/crypto/bio/bss_file.c @@ -115,9 +115,8 @@ static BIO_METHOD methods_filep = { NULL, }; -BIO *BIO_new_file(const char *filename, const char *mode) +static FILE *file_fopen(const char *filename, const char *mode) { - BIO *ret; FILE *file = NULL; # if defined(_WIN32) && defined(CP_UTF8) @@ -164,6 +163,14 @@ BIO *BIO_new_file(const char *filename, const char *mode) # else file = fopen(filename, mode); # endif + return (file); +} + +BIO *BIO_new_file(const char *filename, const char *mode) +{ + BIO *ret; + FILE *file = file_fopen(filename, mode); + if (file == NULL) { SYSerr(SYS_F_FOPEN, get_last_sys_error()); ERR_add_error_data(5, "fopen('", filename, "','", mode, "')"); @@ -386,7 +393,7 @@ static long MS_CALLBACK file_ctrl(BIO *b, int cmd, long num, void *ptr) else strcat(p, "t"); # endif - fp = fopen(ptr, p); + fp = file_fopen(ptr, p); if (fp == NULL) { SYSerr(SYS_F_FOPEN, get_last_sys_error()); ERR_add_error_data(5, "fopen('", ptr, "','", p, "')"); diff --git a/deps/openssl/openssl/crypto/bn/asm/armv4-gf2m.pl b/deps/openssl/openssl/crypto/bn/asm/armv4-gf2m.pl index c52e0b75b5b623..22ad1f85f9df92 100644 --- a/deps/openssl/openssl/crypto/bn/asm/armv4-gf2m.pl +++ b/deps/openssl/openssl/crypto/bn/asm/armv4-gf2m.pl @@ -41,13 +41,13 @@ .align 5 mul_1x1_neon: vshl.u64 `&Dlo("q1")`,d16,#8 @ q1-q3 are slided $a - vmull.p8 `&Q("d0")`,d16,d17 @ abb + vmull.p8 `&Q("d0")`,d16,d17 @ a·bb vshl.u64 `&Dlo("q2")`,d16,#16 - vmull.p8 q1,`&Dlo("q1")`,d17 @ a<<8bb + vmull.p8 q1,`&Dlo("q1")`,d17 @ a<<8·bb vshl.u64 `&Dlo("q3")`,d16,#24 - vmull.p8 q2,`&Dlo("q2")`,d17 @ a<<16bb + vmull.p8 q2,`&Dlo("q2")`,d17 @ a<<16·bb vshr.u64 `&Dlo("q1")`,#8 - vmull.p8 q3,`&Dlo("q3")`,d17 @ a<<24bb + vmull.p8 q3,`&Dlo("q3")`,d17 @ a<<24·bb vshl.u64 `&Dhi("q1")`,#24 veor d0,`&Dlo("q1")` vshr.u64 `&Dlo("q2")`,#16 @@ -158,7 +158,7 @@ ################ # void bn_GF2m_mul_2x2(BN_ULONG *r, # BN_ULONG a1,BN_ULONG a0, -# BN_ULONG b1,BN_ULONG b0); # r[3..0]=a1a0b1b0 +# BN_ULONG b1,BN_ULONG b0); # r[3..0]=a1a0·b1b0 ($A1,$B1,$A0,$B0,$A1B1,$A0B0)=map("d$_",(18..23)); @@ -184,20 +184,20 @@ vmov d16,$A1 vmov d17,$B1 - bl mul_1x1_neon @ a1b1 + bl mul_1x1_neon @ a1·b1 vmov $A1B1,d0 vmov d16,$A0 vmov d17,$B0 - bl mul_1x1_neon @ a0b0 + bl mul_1x1_neon @ a0·b0 vmov $A0B0,d0 veor d16,$A0,$A1 veor d17,$B0,$B1 veor $A0,$A0B0,$A1B1 - bl mul_1x1_neon @ (a0+a1)(b0+b1) + bl mul_1x1_neon @ (a0+a1)·(b0+b1) - veor d0,$A0 @ (a0+a1)(b0+b1)-a0b0-a1b1 + veor d0,$A0 @ (a0+a1)·(b0+b1)-a0·b0-a1·b1 vshl.u64 d1,d0,#32 vshr.u64 d0,d0,#32 veor $A0B0,d1 @@ -220,7 +220,7 @@ mov $mask,#7<<2 sub sp,sp,#32 @ allocate tab[8] - bl mul_1x1_ialu @ a1b1 + bl mul_1x1_ialu @ a1·b1 str $lo,[$ret,#8] str $hi,[$ret,#12] @@ -230,13 +230,13 @@ eor r2,r2,$a eor $b,$b,r3 eor $a,$a,r2 - bl mul_1x1_ialu @ a0b0 + bl mul_1x1_ialu @ a0·b0 str $lo,[$ret] str $hi,[$ret,#4] eor $a,$a,r2 eor $b,$b,r3 - bl mul_1x1_ialu @ (a1+a0)(b1+b0) + bl mul_1x1_ialu @ (a1+a0)·(b1+b0) ___ @r=map("r$_",(6..9)); $code.=<<___; diff --git a/deps/openssl/openssl/crypto/bn/asm/ia64.S b/deps/openssl/openssl/crypto/bn/asm/ia64.S index 951abc53ea5bba..a9a42abfc302d6 100644 --- a/deps/openssl/openssl/crypto/bn/asm/ia64.S +++ b/deps/openssl/openssl/crypto/bn/asm/ia64.S @@ -422,7 +422,7 @@ bn_mul_add_words: // This loop spins in 3*(n+10) ticks on Itanium and in 2*(n+10) on // Itanium 2. Yes, unlike previous versions it scales:-) Previous -// version was peforming *all* additions in IALU and was starving +// version was performing *all* additions in IALU and was starving // for those even on Itanium 2. In this version one addition is // moved to FPU and is folded with multiplication. This is at cost // of propogating the result from previous call to this subroutine @@ -568,7 +568,7 @@ bn_sqr_comba8: // I've estimated this routine to run in ~120 ticks, but in reality // (i.e. according to ar.itc) it takes ~160 ticks. Are those extra // cycles consumed for instructions fetch? Or did I misinterpret some -// clause in Itanium -architecture manual? Comments are welcomed and +// clause in Itanium µ-architecture manual? Comments are welcomed and // highly appreciated. // // On Itanium 2 it takes ~190 ticks. This is because of stalls on diff --git a/deps/openssl/openssl/crypto/bn/asm/s390x-gf2m.pl b/deps/openssl/openssl/crypto/bn/asm/s390x-gf2m.pl index cd9f13eca29265..9d18d40e778467 100644 --- a/deps/openssl/openssl/crypto/bn/asm/s390x-gf2m.pl +++ b/deps/openssl/openssl/crypto/bn/asm/s390x-gf2m.pl @@ -172,19 +172,19 @@ if ($SIZE_T==8) { my @r=map("%r$_",(6..9)); $code.=<<___; - bras $ra,_mul_1x1 # a1b1 + bras $ra,_mul_1x1 # a1·b1 stmg $lo,$hi,16($rp) lg $a,`$stdframe+128+4*$SIZE_T`($sp) lg $b,`$stdframe+128+6*$SIZE_T`($sp) - bras $ra,_mul_1x1 # a0b0 + bras $ra,_mul_1x1 # a0·b0 stmg $lo,$hi,0($rp) lg $a,`$stdframe+128+3*$SIZE_T`($sp) lg $b,`$stdframe+128+5*$SIZE_T`($sp) xg $a,`$stdframe+128+4*$SIZE_T`($sp) xg $b,`$stdframe+128+6*$SIZE_T`($sp) - bras $ra,_mul_1x1 # (a0+a1)(b0+b1) + bras $ra,_mul_1x1 # (a0+a1)·(b0+b1) lmg @r[0],@r[3],0($rp) xgr $lo,$hi diff --git a/deps/openssl/openssl/crypto/bn/asm/x86-gf2m.pl b/deps/openssl/openssl/crypto/bn/asm/x86-gf2m.pl index 808a1e59691de3..b57953027298f3 100644 --- a/deps/openssl/openssl/crypto/bn/asm/x86-gf2m.pl +++ b/deps/openssl/openssl/crypto/bn/asm/x86-gf2m.pl @@ -14,7 +14,7 @@ # the time being... Except that it has three code paths: pure integer # code suitable for any x86 CPU, MMX code suitable for PIII and later # and PCLMULQDQ suitable for Westmere and later. Improvement varies -# from one benchmark and -arch to another. Below are interval values +# from one benchmark and µ-arch to another. Below are interval values # for 163- and 571-bit ECDH benchmarks relative to compiler-generated # code: # @@ -226,22 +226,22 @@ &push ("edi"); &mov ($a,&wparam(1)); &mov ($b,&wparam(3)); - &call ("_mul_1x1_mmx"); # a1b1 + &call ("_mul_1x1_mmx"); # a1·b1 &movq ("mm7",$R); &mov ($a,&wparam(2)); &mov ($b,&wparam(4)); - &call ("_mul_1x1_mmx"); # a0b0 + &call ("_mul_1x1_mmx"); # a0·b0 &movq ("mm6",$R); &mov ($a,&wparam(1)); &mov ($b,&wparam(3)); &xor ($a,&wparam(2)); &xor ($b,&wparam(4)); - &call ("_mul_1x1_mmx"); # (a0+a1)(b0+b1) + &call ("_mul_1x1_mmx"); # (a0+a1)·(b0+b1) &pxor ($R,"mm7"); &mov ($a,&wparam(0)); - &pxor ($R,"mm6"); # (a0+a1)(b0+b1)-a1b1-a0b0 + &pxor ($R,"mm6"); # (a0+a1)·(b0+b1)-a1·b1-a0·b0 &movq ($A,$R); &psllq ($R,32); @@ -266,13 +266,13 @@ &mov ($a,&wparam(1)); &mov ($b,&wparam(3)); - &call ("_mul_1x1_ialu"); # a1b1 + &call ("_mul_1x1_ialu"); # a1·b1 &mov (&DWP(8,"esp"),$lo); &mov (&DWP(12,"esp"),$hi); &mov ($a,&wparam(2)); &mov ($b,&wparam(4)); - &call ("_mul_1x1_ialu"); # a0b0 + &call ("_mul_1x1_ialu"); # a0·b0 &mov (&DWP(0,"esp"),$lo); &mov (&DWP(4,"esp"),$hi); @@ -280,7 +280,7 @@ &mov ($b,&wparam(3)); &xor ($a,&wparam(2)); &xor ($b,&wparam(4)); - &call ("_mul_1x1_ialu"); # (a0+a1)(b0+b1) + &call ("_mul_1x1_ialu"); # (a0+a1)·(b0+b1) &mov ("ebp",&wparam(0)); @r=("ebx","ecx","edi","esi"); diff --git a/deps/openssl/openssl/crypto/bn/asm/x86_64-gcc.c b/deps/openssl/openssl/crypto/bn/asm/x86_64-gcc.c index 9c5074b308586c..0a5bb285a11d50 100644 --- a/deps/openssl/openssl/crypto/bn/asm/x86_64-gcc.c +++ b/deps/openssl/openssl/crypto/bn/asm/x86_64-gcc.c @@ -66,7 +66,7 @@ # undef sqr /*- - * "m"(a), "+m"(r) is the way to favor DirectPath -code; + * "m"(a), "+m"(r) is the way to favor DirectPath µ-code; * "g"(0) let the compiler to decide where does it * want to keep the value of zero; */ diff --git a/deps/openssl/openssl/crypto/bn/asm/x86_64-gf2m.pl b/deps/openssl/openssl/crypto/bn/asm/x86_64-gf2m.pl index 226c66c35e3557..42bbec2fb7ef72 100644 --- a/deps/openssl/openssl/crypto/bn/asm/x86_64-gf2m.pl +++ b/deps/openssl/openssl/crypto/bn/asm/x86_64-gf2m.pl @@ -13,7 +13,7 @@ # in bn_gf2m.c. It's kind of low-hanging mechanical port from C for # the time being... Except that it has two code paths: code suitable # for any x86_64 CPU and PCLMULQDQ one suitable for Westmere and -# later. Improvement varies from one benchmark and -arch to another. +# later. Improvement varies from one benchmark and µ-arch to another. # Vanilla code path is at most 20% faster than compiler-generated code # [not very impressive], while PCLMULQDQ - whole 85%-160% better on # 163- and 571-bit ECDH benchmarks on Intel CPUs. Keep in mind that @@ -184,13 +184,13 @@ $code.=<<___; movdqa %xmm0,%xmm4 movdqa %xmm1,%xmm5 - pclmulqdq \$0,%xmm1,%xmm0 # a1b1 + pclmulqdq \$0,%xmm1,%xmm0 # a1·b1 pxor %xmm2,%xmm4 pxor %xmm3,%xmm5 - pclmulqdq \$0,%xmm3,%xmm2 # a0b0 - pclmulqdq \$0,%xmm5,%xmm4 # (a0+a1)(b0+b1) + pclmulqdq \$0,%xmm3,%xmm2 # a0·b0 + pclmulqdq \$0,%xmm5,%xmm4 # (a0+a1)·(b0+b1) xorps %xmm0,%xmm4 - xorps %xmm2,%xmm4 # (a0+a1)(b0+b1)-a0b0-a1b1 + xorps %xmm2,%xmm4 # (a0+a1)·(b0+b1)-a0·b0-a1·b1 movdqa %xmm4,%xmm5 pslldq \$8,%xmm4 psrldq \$8,%xmm5 @@ -225,13 +225,13 @@ mov \$0xf,$mask mov $a1,$a mov $b1,$b - call _mul_1x1 # a1b1 + call _mul_1x1 # a1·b1 mov $lo,16(%rsp) mov $hi,24(%rsp) mov 48(%rsp),$a mov 64(%rsp),$b - call _mul_1x1 # a0b0 + call _mul_1x1 # a0·b0 mov $lo,0(%rsp) mov $hi,8(%rsp) @@ -239,7 +239,7 @@ mov 56(%rsp),$b xor 48(%rsp),$a xor 64(%rsp),$b - call _mul_1x1 # (a0+a1)(b0+b1) + call _mul_1x1 # (a0+a1)·(b0+b1) ___ @r=("%rbx","%rcx","%rdi","%rsi"); $code.=<<___; diff --git a/deps/openssl/openssl/crypto/bn/bn_exp.c b/deps/openssl/openssl/crypto/bn/bn_exp.c index 27146c89e74001..7e33ba91402349 100644 --- a/deps/openssl/openssl/crypto/bn/bn_exp.c +++ b/deps/openssl/openssl/crypto/bn/bn_exp.c @@ -599,12 +599,13 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, bn_check_top(p); bn_check_top(m); - top = m->top; - - if (!(m->d[0] & 1)) { + if (!BN_is_odd(m)) { BNerr(BN_F_BN_MOD_EXP_MONT_CONSTTIME, BN_R_CALLED_WITH_EVEN_MODULUS); return (0); } + + top = m->top; + bits = BN_num_bits(p); if (bits == 0) { ret = BN_one(rr); diff --git a/deps/openssl/openssl/crypto/bn/bn_gcd.c b/deps/openssl/openssl/crypto/bn/bn_gcd.c index 97c55ab7209815..ce59fe701f9db1 100644 --- a/deps/openssl/openssl/crypto/bn/bn_gcd.c +++ b/deps/openssl/openssl/crypto/bn/bn_gcd.c @@ -583,6 +583,7 @@ static BIGNUM *BN_mod_inverse_no_branch(BIGNUM *in, * BN_div_no_branch will be called eventually. */ pB = &local_B; + local_B.flags = 0; BN_with_flags(pB, B, BN_FLG_CONSTTIME); if (!BN_nnmod(B, pB, A, ctx)) goto err; @@ -610,6 +611,7 @@ static BIGNUM *BN_mod_inverse_no_branch(BIGNUM *in, * BN_div_no_branch will be called eventually. */ pA = &local_A; + local_A.flags = 0; BN_with_flags(pA, A, BN_FLG_CONSTTIME); /* (D, M) := (A/B, A%B) ... */ diff --git a/deps/openssl/openssl/crypto/bn/bn_gf2m.c b/deps/openssl/openssl/crypto/bn/bn_gf2m.c index a0ba8de31ad4e5..8ad44b4826026d 100644 --- a/deps/openssl/openssl/crypto/bn/bn_gf2m.c +++ b/deps/openssl/openssl/crypto/bn/bn_gf2m.c @@ -576,7 +576,7 @@ int BN_GF2m_mod_sqr_arr(BIGNUM *r, const BIGNUM *a, const int p[], bn_check_top(a); BN_CTX_start(ctx); if ((s = BN_CTX_get(ctx)) == NULL) - return 0; + goto err; if (!bn_wexpand(s, 2 * a->top)) goto err; @@ -700,18 +700,21 @@ int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx) int top = p->top; BN_ULONG *udp, *bdp, *vdp, *cdp; - bn_wexpand(u, top); + if (!bn_wexpand(u, top)) + goto err; udp = u->d; for (i = u->top; i < top; i++) udp[i] = 0; u->top = top; - bn_wexpand(b, top); + if (!bn_wexpand(b, top)) + goto err; bdp = b->d; bdp[0] = 1; for (i = 1; i < top; i++) bdp[i] = 0; b->top = top; - bn_wexpand(c, top); + if (!bn_wexpand(c, top)) + goto err; cdp = c->d; for (i = 0; i < top; i++) cdp[i] = 0; diff --git a/deps/openssl/openssl/crypto/bn/bn_mont.c b/deps/openssl/openssl/crypto/bn/bn_mont.c index aadd5db1d8dbde..be95bd55d02064 100644 --- a/deps/openssl/openssl/crypto/bn/bn_mont.c +++ b/deps/openssl/openssl/crypto/bn/bn_mont.c @@ -361,9 +361,9 @@ void BN_MONT_CTX_free(BN_MONT_CTX *mont) if (mont == NULL) return; - BN_free(&(mont->RR)); - BN_free(&(mont->N)); - BN_free(&(mont->Ni)); + BN_clear_free(&(mont->RR)); + BN_clear_free(&(mont->N)); + BN_clear_free(&(mont->Ni)); if (mont->flags & BN_FLG_MALLOCED) OPENSSL_free(mont); } @@ -373,6 +373,9 @@ int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx) int ret = 0; BIGNUM *Ri, *R; + if (BN_is_zero(mod)) + return 0; + BN_CTX_start(ctx); if ((Ri = BN_CTX_get(ctx)) == NULL) goto err; diff --git a/deps/openssl/openssl/crypto/bn/bn_recp.c b/deps/openssl/openssl/crypto/bn/bn_recp.c index 6826f93b3882f5..7497ac624d94e5 100644 --- a/deps/openssl/openssl/crypto/bn/bn_recp.c +++ b/deps/openssl/openssl/crypto/bn/bn_recp.c @@ -152,8 +152,10 @@ int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, if (BN_ucmp(m, &(recp->N)) < 0) { BN_zero(d); - if (!BN_copy(r, m)) + if (!BN_copy(r, m)) { + BN_CTX_end(ctx); return 0; + } BN_CTX_end(ctx); return (1); } diff --git a/deps/openssl/openssl/crypto/bn/bn_x931p.c b/deps/openssl/openssl/crypto/bn/bn_x931p.c index 6d76b1284e107d..efa48bdf87724a 100644 --- a/deps/openssl/openssl/crypto/bn/bn_x931p.c +++ b/deps/openssl/openssl/crypto/bn/bn_x931p.c @@ -213,14 +213,14 @@ int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx) * exceeded. */ if (!BN_rand(Xp, nbits, 1, 0)) - return 0; + goto err; BN_CTX_start(ctx); t = BN_CTX_get(ctx); for (i = 0; i < 1000; i++) { if (!BN_rand(Xq, nbits, 1, 0)) - return 0; + goto err; /* Check that |Xp - Xq| > 2^(nbits - 100) */ BN_sub(t, Xp, Xq); if (BN_num_bits(t) > (nbits - 100)) @@ -234,6 +234,9 @@ int BN_X931_generate_Xpq(BIGNUM *Xp, BIGNUM *Xq, int nbits, BN_CTX *ctx) return 0; + err: + BN_CTX_end(ctx); + return 0; } /* diff --git a/deps/openssl/openssl/crypto/bn/bntest.c b/deps/openssl/openssl/crypto/bn/bntest.c index 06662c58b32f3c..6d55049e3d4151 100644 --- a/deps/openssl/openssl/crypto/bn/bntest.c +++ b/deps/openssl/openssl/crypto/bn/bntest.c @@ -441,6 +441,14 @@ int test_div(BIO *bp, BN_CTX *ctx) BN_init(&d); BN_init(&e); + BN_one(&a); + BN_zero(&b); + + if (BN_div(&d, &c, &a, &b, ctx)) { + fprintf(stderr, "Division by zero succeeded!\n"); + return 0; + } + for (i = 0; i < num0 + num1; i++) { if (i < num1) { BN_bntest_rand(&a, 400, 0, 0); @@ -516,9 +524,9 @@ int test_div_word(BIO *bp) do { BN_bntest_rand(&a, 512, -1, 0); BN_bntest_rand(&b, BN_BITS2, -1, 0); - s = b.d[0]; - } while (!s); + } while (BN_is_zero(&b)); + s = b.d[0]; BN_copy(&b, &a); r = BN_div_word(&b, s); @@ -781,6 +789,18 @@ int test_mont(BIO *bp, BN_CTX *ctx) if (mont == NULL) return 0; + BN_zero(&n); + if (BN_MONT_CTX_set(mont, &n, ctx)) { + fprintf(stderr, "BN_MONT_CTX_set succeeded for zero modulus!\n"); + return 0; + } + + BN_set_word(&n, 16); + if (BN_MONT_CTX_set(mont, &n, ctx)) { + fprintf(stderr, "BN_MONT_CTX_set succeeded for even modulus!\n"); + return 0; + } + BN_bntest_rand(&a, 100, 0, 0); BN_bntest_rand(&b, 100, 0, 0); for (i = 0; i < num2; i++) { @@ -887,6 +907,14 @@ int test_mod_mul(BIO *bp, BN_CTX *ctx) d = BN_new(); e = BN_new(); + BN_one(a); + BN_one(b); + BN_zero(c); + if (BN_mod_mul(e, a, b, c, ctx)) { + fprintf(stderr, "BN_mod_mul with zero modulus succeeded!\n"); + return 0; + } + for (j = 0; j < 3; j++) { BN_bntest_rand(c, 1024, 0, 0); for (i = 0; i < num0; i++) { @@ -952,6 +980,14 @@ int test_mod_exp(BIO *bp, BN_CTX *ctx) d = BN_new(); e = BN_new(); + BN_one(a); + BN_one(b); + BN_zero(c); + if (BN_mod_exp(d, a, b, c, ctx)) { + fprintf(stderr, "BN_mod_exp with zero modulus succeeded!\n"); + return 0; + } + BN_bntest_rand(c, 30, 0, 1); /* must be odd for montgomery */ for (i = 0; i < num2; i++) { BN_bntest_rand(a, 20 + i * 5, 0, 0); @@ -999,6 +1035,22 @@ int test_mod_exp_mont_consttime(BIO *bp, BN_CTX *ctx) d = BN_new(); e = BN_new(); + BN_one(a); + BN_one(b); + BN_zero(c); + if (BN_mod_exp_mont_consttime(d, a, b, c, ctx, NULL)) { + fprintf(stderr, "BN_mod_exp_mont_consttime with zero modulus " + "succeeded\n"); + return 0; + } + + BN_set_word(c, 16); + if (BN_mod_exp_mont_consttime(d, a, b, c, ctx, NULL)) { + fprintf(stderr, "BN_mod_exp_mont_consttime with even modulus " + "succeeded\n"); + return 0; + } + BN_bntest_rand(c, 30, 0, 1); /* must be odd for montgomery */ for (i = 0; i < num2; i++) { BN_bntest_rand(a, 20 + i * 5, 0, 0); diff --git a/deps/openssl/openssl/crypto/buffer/buf_str.c b/deps/openssl/openssl/crypto/buffer/buf_str.c index fdde3d7db4ba0c..233af246e4c522 100644 --- a/deps/openssl/openssl/crypto/buffer/buf_str.c +++ b/deps/openssl/openssl/crypto/buffer/buf_str.c @@ -58,12 +58,13 @@ #include #include "cryptlib.h" +#include #include char *BUF_strdup(const char *str) { if (str == NULL) - return (NULL); + return NULL; return BUF_strndup(str, strlen(str)); } @@ -72,14 +73,20 @@ char *BUF_strndup(const char *str, size_t siz) char *ret; if (str == NULL) - return (NULL); + return NULL; + + if (siz >= INT_MAX) + return NULL; ret = OPENSSL_malloc(siz + 1); if (ret == NULL) { BUFerr(BUF_F_BUF_STRNDUP, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } - BUF_strlcpy(ret, str, siz + 1); + + memcpy(ret, str, siz); + ret[siz] = '\0'; + return (ret); } @@ -87,13 +94,13 @@ void *BUF_memdup(const void *data, size_t siz) { void *ret; - if (data == NULL) - return (NULL); + if (data == NULL || siz >= INT_MAX) + return NULL; ret = OPENSSL_malloc(siz); if (ret == NULL) { BUFerr(BUF_F_BUF_MEMDUP, ERR_R_MALLOC_FAILURE); - return (NULL); + return NULL; } return memcpy(ret, data, siz); } diff --git a/deps/openssl/openssl/crypto/buffer/buffer.h b/deps/openssl/openssl/crypto/buffer/buffer.h index 632df93c657ca7..89183adb4a8e1e 100644 --- a/deps/openssl/openssl/crypto/buffer/buffer.h +++ b/deps/openssl/openssl/crypto/buffer/buffer.h @@ -85,7 +85,13 @@ void BUF_MEM_free(BUF_MEM *a); int BUF_MEM_grow(BUF_MEM *str, size_t len); int BUF_MEM_grow_clean(BUF_MEM *str, size_t len); char *BUF_strdup(const char *str); + +/* + * Like strndup, but in addition, explicitly guarantees to never read past the + * first |siz| bytes of |str|. + */ char *BUF_strndup(const char *str, size_t siz); + void *BUF_memdup(const void *data, size_t siz); void BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz); diff --git a/deps/openssl/openssl/crypto/cms/cms_enc.c b/deps/openssl/openssl/crypto/cms/cms_enc.c index 85ae928a496ff0..b14b4b68b5c950 100644 --- a/deps/openssl/openssl/crypto/cms/cms_enc.c +++ b/deps/openssl/openssl/crypto/cms/cms_enc.c @@ -195,7 +195,7 @@ BIO *cms_EncryptedContent_init_bio(CMS_EncryptedContentInfo *ec) ok = 1; err: - if (ec->key && !keep_key) { + if (ec->key && (!keep_key || !ok)) { OPENSSL_cleanse(ec->key, ec->keylen); OPENSSL_free(ec->key); ec->key = NULL; diff --git a/deps/openssl/openssl/crypto/cms/cms_pwri.c b/deps/openssl/openssl/crypto/cms/cms_pwri.c index a8322dcdf1a62c..b91c01691fec21 100644 --- a/deps/openssl/openssl/crypto/cms/cms_pwri.c +++ b/deps/openssl/openssl/crypto/cms/cms_pwri.c @@ -121,6 +121,9 @@ CMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms, /* Setup algorithm identifier for cipher */ encalg = X509_ALGOR_new(); + if (encalg == NULL) { + goto merr; + } EVP_CIPHER_CTX_init(&ctx); if (EVP_EncryptInit_ex(&ctx, kekciph, NULL, NULL, NULL) <= 0) { diff --git a/deps/openssl/openssl/crypto/cms/cms_smime.c b/deps/openssl/openssl/crypto/cms/cms_smime.c index 8b37560821ad14..f45693ac207c31 100644 --- a/deps/openssl/openssl/crypto/cms/cms_smime.c +++ b/deps/openssl/openssl/crypto/cms/cms_smime.c @@ -714,7 +714,7 @@ int CMS_final(CMS_ContentInfo *cms, BIO *data, BIO *dcont, unsigned int flags) BIO *cmsbio; int ret = 0; if (!(cmsbio = CMS_dataInit(cms, dcont))) { - CMSerr(CMS_F_CMS_FINAL, ERR_R_MALLOC_FAILURE); + CMSerr(CMS_F_CMS_FINAL, CMS_R_CMS_LIB); return 0; } diff --git a/deps/openssl/openssl/crypto/comp/c_zlib.c b/deps/openssl/openssl/crypto/comp/c_zlib.c index 6731af8b0d7b29..9c32614d3c7027 100644 --- a/deps/openssl/openssl/crypto/comp/c_zlib.c +++ b/deps/openssl/openssl/crypto/comp/c_zlib.c @@ -404,8 +404,9 @@ COMP_METHOD *COMP_zlib(void) void COMP_zlib_cleanup(void) { #ifdef ZLIB_SHARED - if (zlib_dso) + if (zlib_dso != NULL) DSO_free(zlib_dso); + zlib_dso = NULL; #endif } diff --git a/deps/openssl/openssl/crypto/conf/conf_def.c b/deps/openssl/openssl/crypto/conf/conf_def.c index faca9aeb571b9d..68c77cec7d8b46 100644 --- a/deps/openssl/openssl/crypto/conf/conf_def.c +++ b/deps/openssl/openssl/crypto/conf/conf_def.c @@ -225,12 +225,11 @@ static int def_load_bio(CONF *conf, BIO *in, long *line) goto err; } - section = (char *)OPENSSL_malloc(10); + section = BUF_strdup("default"); if (section == NULL) { CONFerr(CONF_F_DEF_LOAD_BIO, ERR_R_MALLOC_FAILURE); goto err; } - BUF_strlcpy(section, "default", 10); if (_CONF_new_data(conf) == 0) { CONFerr(CONF_F_DEF_LOAD_BIO, ERR_R_MALLOC_FAILURE); diff --git a/deps/openssl/openssl/crypto/conf/conf_sap.c b/deps/openssl/openssl/crypto/conf/conf_sap.c index 544fe9738719c4..c042cf222dc7e4 100644 --- a/deps/openssl/openssl/crypto/conf/conf_sap.c +++ b/deps/openssl/openssl/crypto/conf/conf_sap.c @@ -90,6 +90,7 @@ void OPENSSL_config(const char *config_name) CONF_modules_load_file(NULL, config_name, CONF_MFLAGS_DEFAULT_SECTION | CONF_MFLAGS_IGNORE_MISSING_FILE); + openssl_configured = 1; } void OPENSSL_no_config() diff --git a/deps/openssl/openssl/crypto/cryptlib.c b/deps/openssl/openssl/crypto/cryptlib.c index c654a5c84f2c6d..eccee72311f097 100644 --- a/deps/openssl/openssl/crypto/cryptlib.c +++ b/deps/openssl/openssl/crypto/cryptlib.c @@ -930,13 +930,29 @@ void OPENSSL_showfatal(const char *fmta, ...) # if defined(_WIN32_WINNT) && _WIN32_WINNT>=0x0333 /* this -------------v--- guards NT-specific calls */ if (check_winnt() && OPENSSL_isservice() > 0) { - HANDLE h = RegisterEventSource(0, _T("OPENSSL")); - const TCHAR *pmsg = buf; - ReportEvent(h, EVENTLOG_ERROR_TYPE, 0, 0, 0, 1, 0, &pmsg, 0); - DeregisterEventSource(h); + HANDLE hEventLog = RegisterEventSource(NULL, _T("OpenSSL")); + + if (hEventLog != NULL) { + const TCHAR *pmsg = buf; + + if (!ReportEvent(hEventLog, EVENTLOG_ERROR_TYPE, 0, 0, NULL, + 1, 0, &pmsg, NULL)) { +#if defined(DEBUG) + /* + * We are in a situation where we tried to report a critical + * error and this failed for some reason. As a last resort, + * in debug builds, send output to the debugger or any other + * tool like DebugView which can monitor the output. + */ + OutputDebugString(pmsg); +#endif + } + + (void)DeregisterEventSource(hEventLog); + } } else # endif - MessageBox(NULL, buf, _T("OpenSSL: FATAL"), MB_OK | MB_ICONSTOP); + MessageBox(NULL, buf, _T("OpenSSL: FATAL"), MB_OK | MB_ICONERROR); } #else void OPENSSL_showfatal(const char *fmta, ...) diff --git a/deps/openssl/openssl/crypto/des/t/test b/deps/openssl/openssl/crypto/des/t/test deleted file mode 100644 index 97acd0552e4303..00000000000000 --- a/deps/openssl/openssl/crypto/des/t/test +++ /dev/null @@ -1,27 +0,0 @@ -#!./perl - -BEGIN { push(@INC, qw(../../../lib ../../lib ../lib lib)); } - -use DES; - -$key='00000000'; -$ks=DES::set_key($key); -@a=split(//,$ks); -foreach (@a) { printf "%02x-",ord($_); } -print "\n"; - - -$key=DES::random_key(); -print "($_)\n"; -@a=split(//,$key); -foreach (@a) { printf "%02x-",ord($_); } -print "\n"; -$str="this is and again into the breach"; -($k1,$k2)=DES::string_to_2keys($str); -@a=split(//,$k1); -foreach (@a) { printf "%02x-",ord($_); } -print "\n"; -@a=split(//,$k2); -foreach (@a) { printf "%02x-",ord($_); } -print "\n"; - diff --git a/deps/openssl/openssl/crypto/dsa/dsa_ameth.c b/deps/openssl/openssl/crypto/dsa/dsa_ameth.c index a2840eaed0950c..6ddef459cc3733 100644 --- a/deps/openssl/openssl/crypto/dsa/dsa_ameth.c +++ b/deps/openssl/openssl/crypto/dsa/dsa_ameth.c @@ -318,6 +318,7 @@ static int dsa_priv_encode(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pkey) dplen = i2d_ASN1_INTEGER(prkey, &dp); ASN1_STRING_clear_free(prkey); + prkey = NULL; if (!PKCS8_pkey_set0(p8, OBJ_nid2obj(NID_dsa), 0, V_ASN1_SEQUENCE, params, dp, dplen)) diff --git a/deps/openssl/openssl/crypto/dsa/dsa_gen.c b/deps/openssl/openssl/crypto/dsa/dsa_gen.c index d686ab0af77058..34c6113c45e24e 100644 --- a/deps/openssl/openssl/crypto/dsa/dsa_gen.c +++ b/deps/openssl/openssl/crypto/dsa/dsa_gen.c @@ -112,16 +112,8 @@ int DSA_generate_parameters_ex(DSA *ret, int bits, } # endif else { - const EVP_MD *evpmd; - size_t qbits = bits >= 2048 ? 256 : 160; - - if (bits >= 2048) { - qbits = 256; - evpmd = EVP_sha256(); - } else { - qbits = 160; - evpmd = EVP_sha1(); - } + const EVP_MD *evpmd = bits >= 2048 ? EVP_sha256() : EVP_sha1(); + size_t qbits = EVP_MD_size(evpmd) * 8; return dsa_builtin_paramgen(ret, bits, qbits, evpmd, seed_in, seed_len, NULL, counter_ret, @@ -174,13 +166,14 @@ int dsa_builtin_paramgen(DSA *ret, size_t bits, size_t qbits, if (seed_in != NULL) memcpy(seed, seed_in, seed_len); - if ((ctx = BN_CTX_new()) == NULL) + if ((mont = BN_MONT_CTX_new()) == NULL) goto err; - if ((mont = BN_MONT_CTX_new()) == NULL) + if ((ctx = BN_CTX_new()) == NULL) goto err; BN_CTX_start(ctx); + r0 = BN_CTX_get(ctx); g = BN_CTX_get(ctx); W = BN_CTX_get(ctx); @@ -201,7 +194,7 @@ int dsa_builtin_paramgen(DSA *ret, size_t bits, size_t qbits, if (!BN_GENCB_call(cb, 0, m++)) goto err; - if (!seed_len) { + if (!seed_len || !seed_in) { if (RAND_pseudo_bytes(seed, qsize) < 0) goto err; seed_is_random = 1; diff --git a/deps/openssl/openssl/crypto/ec/ec.h b/deps/openssl/openssl/crypto/ec/ec.h index c4e7aea938c23f..2a935fdb57c380 100644 --- a/deps/openssl/openssl/crypto/ec/ec.h +++ b/deps/openssl/openssl/crypto/ec/ec.h @@ -106,7 +106,7 @@ typedef enum { /** the point is encoded as z||x, where the octet z specifies * which solution of the quadratic equation y is */ POINT_CONVERSION_COMPRESSED = 2, - /** the point is encoded as z||x||y, where z is the octet 0x02 */ + /** the point is encoded as z||x||y, where z is the octet 0x04 */ POINT_CONVERSION_UNCOMPRESSED = 4, /** the point is encoded as z||x||y, where the octet z specifies * which solution of the quadratic equation y is */ diff --git a/deps/openssl/openssl/crypto/ec/ec_asn1.c b/deps/openssl/openssl/crypto/ec/ec_asn1.c index 4ad8494981bfc4..33abf61f44417c 100644 --- a/deps/openssl/openssl/crypto/ec/ec_asn1.c +++ b/deps/openssl/openssl/crypto/ec/ec_asn1.c @@ -970,8 +970,9 @@ EC_GROUP *d2i_ECPKParameters(EC_GROUP **a, const unsigned char **in, long len) { EC_GROUP *group = NULL; ECPKPARAMETERS *params = NULL; + const unsigned char *p = *in; - if ((params = d2i_ECPKPARAMETERS(NULL, in, len)) == NULL) { + if ((params = d2i_ECPKPARAMETERS(NULL, &p, len)) == NULL) { ECerr(EC_F_D2I_ECPKPARAMETERS, EC_R_D2I_ECPKPARAMETERS_FAILURE); ECPKPARAMETERS_free(params); return NULL; @@ -989,6 +990,7 @@ EC_GROUP *d2i_ECPKParameters(EC_GROUP **a, const unsigned char **in, long len) *a = group; ECPKPARAMETERS_free(params); + *in = p; return (group); } @@ -1016,8 +1018,9 @@ EC_KEY *d2i_ECPrivateKey(EC_KEY **a, const unsigned char **in, long len) int ok = 0; EC_KEY *ret = NULL; EC_PRIVATEKEY *priv_key = NULL; + const unsigned char *p = *in; - if ((priv_key = d2i_EC_PRIVATEKEY(NULL, in, len)) == NULL) { + if ((priv_key = d2i_EC_PRIVATEKEY(NULL, &p, len)) == NULL) { ECerr(EC_F_D2I_ECPRIVATEKEY, ERR_R_EC_LIB); return NULL; } @@ -1096,6 +1099,7 @@ EC_KEY *d2i_ECPrivateKey(EC_KEY **a, const unsigned char **in, long len) if (a) *a = ret; + *in = p; ok = 1; err: if (!ok) { diff --git a/deps/openssl/openssl/crypto/ec/ec_key.c b/deps/openssl/openssl/crypto/ec/ec_key.c index 55ce3fe9beb2fd..c784b6fd30a3c8 100644 --- a/deps/openssl/openssl/crypto/ec/ec_key.c +++ b/deps/openssl/openssl/crypto/ec/ec_key.c @@ -366,7 +366,10 @@ int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, BN_CTX *ctx = NULL; BIGNUM *tx, *ty; EC_POINT *point = NULL; - int ok = 0, tmp_nid, is_char_two = 0; + int ok = 0; +#ifndef OPENSSL_NO_EC2M + int tmp_nid, is_char_two = 0; +#endif if (!key || !key->group || !x || !y) { ECerr(EC_F_EC_KEY_SET_PUBLIC_KEY_AFFINE_COORDINATES, @@ -382,14 +385,15 @@ int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, if (!point) goto err; + tx = BN_CTX_get(ctx); + ty = BN_CTX_get(ctx); + +#ifndef OPENSSL_NO_EC2M tmp_nid = EC_METHOD_get_field_type(EC_GROUP_method_of(key->group)); if (tmp_nid == NID_X9_62_characteristic_two_field) is_char_two = 1; - tx = BN_CTX_get(ctx); - ty = BN_CTX_get(ctx); -#ifndef OPENSSL_NO_EC2M if (is_char_two) { if (!EC_POINT_set_affine_coordinates_GF2m(key->group, point, x, y, ctx)) diff --git a/deps/openssl/openssl/crypto/engine/eng_cryptodev.c b/deps/openssl/openssl/crypto/engine/eng_cryptodev.c index bcb936dfa75447..a8a24d054324fe 100644 --- a/deps/openssl/openssl/crypto/engine/eng_cryptodev.c +++ b/deps/openssl/openssl/crypto/engine/eng_cryptodev.c @@ -1230,15 +1230,18 @@ static DSA_SIG *cryptodev_dsa_do_sign(const unsigned char *dgst, int dlen, if (cryptodev_asym(&kop, BN_num_bytes(dsa->q), r, BN_num_bytes(dsa->q), s) == 0) { dsaret = DSA_SIG_new(); + if (dsaret == NULL) + goto err; dsaret->r = r; dsaret->s = s; + r = s = NULL; } else { const DSA_METHOD *meth = DSA_OpenSSL(); - BN_free(r); - BN_free(s); dsaret = (meth->dsa_do_sign) (dgst, dlen, dsa); } err: + BN_free(r); + BN_free(s); kop.crk_param[0].crp_p = NULL; zapparams(&kop); return (dsaret); diff --git a/deps/openssl/openssl/crypto/engine/eng_list.c b/deps/openssl/openssl/crypto/engine/eng_list.c index 3384e318289336..83c95d56f4660f 100644 --- a/deps/openssl/openssl/crypto/engine/eng_list.c +++ b/deps/openssl/openssl/crypto/engine/eng_list.c @@ -260,6 +260,7 @@ int ENGINE_add(ENGINE *e) } if ((e->id == NULL) || (e->name == NULL)) { ENGINEerr(ENGINE_F_ENGINE_ADD, ENGINE_R_ID_OR_NAME_MISSING); + return 0; } CRYPTO_w_lock(CRYPTO_LOCK_ENGINE); if (!engine_list_add(e)) { diff --git a/deps/openssl/openssl/crypto/evp/e_des3.c b/deps/openssl/openssl/crypto/evp/e_des3.c index 07a5aca606de0c..127230579931ac 100644 --- a/deps/openssl/openssl/crypto/evp/e_des3.c +++ b/deps/openssl/openssl/crypto/evp/e_des3.c @@ -241,7 +241,7 @@ static int des_ede_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, DES_cblock *deskey = (DES_cblock *)key; # ifdef EVP_CHECK_DES_KEY if (DES_set_key_checked(&deskey[0], &data(ctx)->ks1) - ! !DES_set_key_checked(&deskey[1], &data(ctx)->ks2)) + || DES_set_key_checked(&deskey[1], &data(ctx)->ks2)) return 0; # else DES_set_key_unchecked(&deskey[0], &data(ctx)->ks1); diff --git a/deps/openssl/openssl/crypto/evp/encode.c b/deps/openssl/openssl/crypto/evp/encode.c index 5c5988fc45e1ca..c6abc4ae8e47b0 100644 --- a/deps/openssl/openssl/crypto/evp/encode.c +++ b/deps/openssl/openssl/crypto/evp/encode.c @@ -60,9 +60,9 @@ #include "cryptlib.h" #include +static unsigned char conv_ascii2bin(unsigned char a); #ifndef CHARSET_EBCDIC # define conv_bin2ascii(a) (data_bin2ascii[(a)&0x3f]) -# define conv_ascii2bin(a) (data_ascii2bin[(a)&0x7f]) #else /* * We assume that PEM encoded files are EBCDIC files (i.e., printable text @@ -71,7 +71,6 @@ * as the underlying textstring data_bin2ascii[] is already EBCDIC) */ # define conv_bin2ascii(a) (data_bin2ascii[(a)&0x3f]) -# define conv_ascii2bin(a) (data_ascii2bin[os_toascii[a]&0x7f]) #endif /*- @@ -103,6 +102,7 @@ abcdefghijklmnopqrstuvwxyz0123456789+/"; #define B64_WS 0xE0 #define B64_ERROR 0xFF #define B64_NOT_BASE64(a) (((a)|0x13) == 0xF3) +#define B64_BASE64(a) !B64_NOT_BASE64(a) static const unsigned char data_ascii2bin[128] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, @@ -123,6 +123,23 @@ static const unsigned char data_ascii2bin[128] = { 0x31, 0x32, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, }; +#ifndef CHARSET_EBCDIC +static unsigned char conv_ascii2bin(unsigned char a) +{ + if (a & 0x80) + return B64_ERROR; + return data_ascii2bin[a]; +} +#else +static unsigned char conv_ascii2bin(unsigned char a) +{ + a = os_toascii[a]; + if (a & 0x80) + return B64_ERROR; + return data_ascii2bin[a]; +} +#endif + void EVP_EncodeInit(EVP_ENCODE_CTX *ctx) { ctx->length = 48; @@ -218,8 +235,9 @@ int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int dlen) void EVP_DecodeInit(EVP_ENCODE_CTX *ctx) { - ctx->length = 30; + /* Only ctx->num is used during decoding. */ ctx->num = 0; + ctx->length = 0; ctx->line_num = 0; ctx->expect_nl = 0; } @@ -228,139 +246,123 @@ void EVP_DecodeInit(EVP_ENCODE_CTX *ctx) * -1 for error * 0 for last line * 1 for full line + * + * Note: even though EVP_DecodeUpdate attempts to detect and report end of + * content, the context doesn't currently remember it and will accept more data + * in the next call. Therefore, the caller is responsible for checking and + * rejecting a 0 return value in the middle of content. + * + * Note: even though EVP_DecodeUpdate has historically tried to detect end of + * content based on line length, this has never worked properly. Therefore, + * we now return 0 when one of the following is true: + * - Padding or B64_EOF was detected and the last block is complete. + * - Input has zero-length. + * -1 is returned if: + * - Invalid characters are detected. + * - There is extra trailing padding, or data after padding. + * - B64_EOF is detected after an incomplete base64 block. */ int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, const unsigned char *in, int inl) { - int seof = -1, eof = 0, rv = -1, ret = 0, i, v, tmp, n, ln, exp_nl; + int seof = 0, eof = 0, rv = -1, ret = 0, i, v, tmp, n, decoded_len; unsigned char *d; n = ctx->num; d = ctx->enc_data; - ln = ctx->line_num; - exp_nl = ctx->expect_nl; - /* last line of input. */ - if ((inl == 0) || ((n == 0) && (conv_ascii2bin(in[0]) == B64_EOF))) { + if (n > 0 && d[n - 1] == '=') { + eof++; + if (n > 1 && d[n - 2] == '=') + eof++; + } + + /* Legacy behaviour: an empty input chunk signals end of input. */ + if (inl == 0) { rv = 0; goto end; } - /* We parse the input data */ for (i = 0; i < inl; i++) { - /* If the current line is > 80 characters, scream alot */ - if (ln >= 80) { - rv = -1; - goto end; - } - - /* Get char and put it into the buffer */ tmp = *(in++); v = conv_ascii2bin(tmp); - /* only save the good data :-) */ - if (!B64_NOT_BASE64(v)) { - OPENSSL_assert(n < (int)sizeof(ctx->enc_data)); - d[n++] = tmp; - ln++; - } else if (v == B64_ERROR) { + if (v == B64_ERROR) { rv = -1; goto end; } - /* - * have we seen a '=' which is 'definitly' the last input line. seof - * will point to the character that holds it. and eof will hold how - * many characters to chop off. - */ if (tmp == '=') { - if (seof == -1) - seof = n; eof++; + } else if (eof > 0 && B64_BASE64(v)) { + /* More data after padding. */ + rv = -1; + goto end; } - if (v == B64_CR) { - ln = 0; - if (exp_nl) - continue; + if (eof > 2) { + rv = -1; + goto end; } - /* eoln */ - if (v == B64_EOLN) { - ln = 0; - if (exp_nl) { - exp_nl = 0; - continue; - } - } - exp_nl = 0; - - /* - * If we are at the end of input and it looks like a line, process - * it. - */ - if (((i + 1) == inl) && (((n & 3) == 0) || eof)) { - v = B64_EOF; - /* - * In case things were given us in really small records (so two - * '=' were given in separate updates), eof may contain the - * incorrect number of ending bytes to skip, so let's redo the - * count - */ - eof = 0; - if (d[n - 1] == '=') - eof++; - if (d[n - 2] == '=') - eof++; - /* There will never be more than two '=' */ + if (v == B64_EOF) { + seof = 1; + goto tail; } - if ((v == B64_EOF && (n & 3) == 0) || (n >= 64)) { - /* - * This is needed to work correctly on 64 byte input lines. We - * process the line and then need to accept the '\n' - */ - if ((v != B64_EOF) && (n >= 64)) - exp_nl = 1; - if (n > 0) { - v = EVP_DecodeBlock(out, d, n); - n = 0; - if (v < 0) { - rv = 0; - goto end; - } - if (eof > v) { - rv = -1; - goto end; - } - ret += (v - eof); - } else { - eof = 1; - v = 0; + /* Only save valid base64 characters. */ + if (B64_BASE64(v)) { + if (n >= 64) { + /* + * We increment n once per loop, and empty the buffer as soon as + * we reach 64 characters, so this can only happen if someone's + * manually messed with the ctx. Refuse to write any more data. + */ + rv = -1; + goto end; } + OPENSSL_assert(n < (int)sizeof(ctx->enc_data)); + d[n++] = tmp; + } - /* - * This is the case where we have had a short but valid input - * line - */ - if ((v < ctx->length) && eof) { - rv = 0; + if (n == 64) { + decoded_len = EVP_DecodeBlock(out, d, n); + n = 0; + if (decoded_len < 0 || eof > decoded_len) { + rv = -1; goto end; - } else - ctx->length = v; + } + ret += decoded_len - eof; + out += decoded_len - eof; + } + } - if (seof >= 0) { - rv = 0; + /* + * Legacy behaviour: if the current line is a full base64-block (i.e., has + * 0 mod 4 base64 characters), it is processed immediately. We keep this + * behaviour as applications may not be calling EVP_DecodeFinal properly. + */ +tail: + if (n > 0) { + if ((n & 3) == 0) { + decoded_len = EVP_DecodeBlock(out, d, n); + n = 0; + if (decoded_len < 0 || eof > decoded_len) { + rv = -1; goto end; } - out += v; + ret += (decoded_len - eof); + } else if (seof) { + /* EOF in the middle of a base64 block. */ + rv = -1; + goto end; } } - rv = 1; - end: + + rv = seof || (n == 0 && eof) ? 0 : 1; +end: + /* Legacy behaviour. This should probably rather be zeroed on error. */ *outl = ret; ctx->num = n; - ctx->line_num = ln; - ctx->expect_nl = exp_nl; return (rv); } diff --git a/deps/openssl/openssl/crypto/evp/evp_key.c b/deps/openssl/openssl/crypto/evp/evp_key.c index 71fa627b20d3ed..5be9e336f9e717 100644 --- a/deps/openssl/openssl/crypto/evp/evp_key.c +++ b/deps/openssl/openssl/crypto/evp/evp_key.c @@ -104,6 +104,8 @@ int EVP_read_pw_string_min(char *buf, int min, int len, const char *prompt, if ((prompt == NULL) && (prompt_string[0] != '\0')) prompt = prompt_string; ui = UI_new(); + if (ui == NULL) + return -1; UI_add_input_string(ui, prompt, 0, buf, min, (len >= BUFSIZ) ? BUFSIZ - 1 : len); if (verify) @@ -137,7 +139,7 @@ int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md, EVP_MD_CTX_init(&c); for (;;) { if (!EVP_DigestInit_ex(&c, md, NULL)) - return 0; + goto err; if (addmd++) if (!EVP_DigestUpdate(&c, &(md_buf[0]), mds)) goto err; @@ -188,6 +190,6 @@ int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md, rv = type->key_len; err: EVP_MD_CTX_cleanup(&c); - OPENSSL_cleanse(&(md_buf[0]), EVP_MAX_MD_SIZE); + OPENSSL_cleanse(md_buf, sizeof(md_buf)); return rv; } diff --git a/deps/openssl/openssl/crypto/evp/evp_lib.c b/deps/openssl/openssl/crypto/evp/evp_lib.c index d4d2b4b2808153..b16d623a93f377 100644 --- a/deps/openssl/openssl/crypto/evp/evp_lib.c +++ b/deps/openssl/openssl/crypto/evp/evp_lib.c @@ -67,9 +67,19 @@ int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type) if (c->cipher->set_asn1_parameters != NULL) ret = c->cipher->set_asn1_parameters(c, type); - else if (c->cipher->flags & EVP_CIPH_FLAG_DEFAULT_ASN1) - ret = EVP_CIPHER_set_asn1_iv(c, type); - else + else if (c->cipher->flags & EVP_CIPH_FLAG_DEFAULT_ASN1) { + switch (EVP_CIPHER_CTX_mode(c)) { + + case EVP_CIPH_GCM_MODE: + case EVP_CIPH_CCM_MODE: + case EVP_CIPH_XTS_MODE: + ret = -1; + break; + + default: + ret = EVP_CIPHER_set_asn1_iv(c, type); + } + } else ret = -1; return (ret); } @@ -80,9 +90,20 @@ int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type) if (c->cipher->get_asn1_parameters != NULL) ret = c->cipher->get_asn1_parameters(c, type); - else if (c->cipher->flags & EVP_CIPH_FLAG_DEFAULT_ASN1) - ret = EVP_CIPHER_get_asn1_iv(c, type); - else + else if (c->cipher->flags & EVP_CIPH_FLAG_DEFAULT_ASN1) { + switch (EVP_CIPHER_CTX_mode(c)) { + + case EVP_CIPH_GCM_MODE: + case EVP_CIPH_CCM_MODE: + case EVP_CIPH_XTS_MODE: + ret = -1; + break; + + default: + ret = EVP_CIPHER_get_asn1_iv(c, type); + break; + } + } else ret = -1; return (ret); } diff --git a/deps/openssl/openssl/crypto/evp/evp_pbe.c b/deps/openssl/openssl/crypto/evp/evp_pbe.c index e3fa95db928988..7934c95fad0c50 100644 --- a/deps/openssl/openssl/crypto/evp/evp_pbe.c +++ b/deps/openssl/openssl/crypto/evp/evp_pbe.c @@ -228,12 +228,16 @@ int EVP_PBE_alg_add_type(int pbe_type, int pbe_nid, int cipher_nid, int md_nid, EVP_PBE_KEYGEN *keygen) { EVP_PBE_CTL *pbe_tmp; - if (!pbe_algs) + + if (pbe_algs == NULL) { pbe_algs = sk_EVP_PBE_CTL_new(pbe_cmp); - if (!(pbe_tmp = (EVP_PBE_CTL *)OPENSSL_malloc(sizeof(EVP_PBE_CTL)))) { - EVPerr(EVP_F_EVP_PBE_ALG_ADD_TYPE, ERR_R_MALLOC_FAILURE); - return 0; + if (pbe_algs == NULL) + goto err; } + + if ((pbe_tmp = OPENSSL_malloc(sizeof(*pbe_tmp))) == NULL) + goto err; + pbe_tmp->pbe_type = pbe_type; pbe_tmp->pbe_nid = pbe_nid; pbe_tmp->cipher_nid = cipher_nid; @@ -242,6 +246,10 @@ int EVP_PBE_alg_add_type(int pbe_type, int pbe_nid, int cipher_nid, sk_EVP_PBE_CTL_push(pbe_algs, pbe_tmp); return 1; + + err: + EVPerr(EVP_F_EVP_PBE_ALG_ADD_TYPE, ERR_R_MALLOC_FAILURE); + return 0; } int EVP_PBE_alg_add(int nid, const EVP_CIPHER *cipher, const EVP_MD *md, diff --git a/deps/openssl/openssl/crypto/evp/p_lib.c b/deps/openssl/openssl/crypto/evp/p_lib.c index 2b84dc75ec3a19..375f561258b956 100644 --- a/deps/openssl/openssl/crypto/evp/p_lib.c +++ b/deps/openssl/openssl/crypto/evp/p_lib.c @@ -253,7 +253,7 @@ int EVP_PKEY_set_type_str(EVP_PKEY *pkey, const char *str, int len) int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key) { - if (!EVP_PKEY_set_type(pkey, type)) + if (pkey == NULL || !EVP_PKEY_set_type(pkey, type)) return 0; pkey->pkey.ptr = key; return (key != NULL); diff --git a/deps/openssl/openssl/crypto/evp/pmeth_gn.c b/deps/openssl/openssl/crypto/evp/pmeth_gn.c index 59f81342e94d0b..6435f1b632cfe8 100644 --- a/deps/openssl/openssl/crypto/evp/pmeth_gn.c +++ b/deps/openssl/openssl/crypto/evp/pmeth_gn.c @@ -96,12 +96,17 @@ int EVP_PKEY_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY **ppkey) return -1; } - if (!ppkey) + if (ppkey == NULL) return -1; - if (!*ppkey) + if (*ppkey == NULL) *ppkey = EVP_PKEY_new(); + if (*ppkey == NULL) { + EVPerr(EVP_F_EVP_PKEY_PARAMGEN, ERR_R_MALLOC_FAILURE); + return -1; + } + ret = ctx->pmeth->paramgen(ctx, *ppkey); if (ret <= 0) { EVP_PKEY_free(*ppkey); diff --git a/deps/openssl/openssl/crypto/hmac/hm_ameth.c b/deps/openssl/openssl/crypto/hmac/hm_ameth.c index 641c797ef1d5c0..cf147437eaf0a3 100644 --- a/deps/openssl/openssl/crypto/hmac/hm_ameth.c +++ b/deps/openssl/openssl/crypto/hmac/hm_ameth.c @@ -108,9 +108,14 @@ static int old_hmac_decode(EVP_PKEY *pkey, ASN1_OCTET_STRING *os; os = ASN1_OCTET_STRING_new(); if (!os || !ASN1_OCTET_STRING_set(os, *pder, derlen)) - return 0; - EVP_PKEY_assign(pkey, EVP_PKEY_HMAC, os); + goto err; + if (!EVP_PKEY_assign(pkey, EVP_PKEY_HMAC, os)) + goto err; return 1; + + err: + ASN1_OCTET_STRING_free(os); + return 0; } static int old_hmac_encode(const EVP_PKEY *pkey, unsigned char **pder) diff --git a/deps/openssl/openssl/crypto/jpake/jpake.c b/deps/openssl/openssl/crypto/jpake/jpake.c index ed2e888eb4c0b7..ac853d4914d598 100644 --- a/deps/openssl/openssl/crypto/jpake/jpake.c +++ b/deps/openssl/openssl/crypto/jpake/jpake.c @@ -218,6 +218,9 @@ static int verify_zkp(const JPAKE_STEP_PART *p, const BIGNUM *zkpg, BIGNUM *t3 = BN_new(); int ret = 0; + if (h == NULL || t1 == NULL || t2 == NULL || t3 == NULL) + goto end; + zkp_hash(h, zkpg, p, ctx->p.peer_name); /* t1 = g^b */ @@ -233,6 +236,7 @@ static int verify_zkp(const JPAKE_STEP_PART *p, const BIGNUM *zkpg, else JPAKEerr(JPAKE_F_VERIFY_ZKP, JPAKE_R_ZKP_VERIFY_FAILED); +end: /* cleanup */ BN_free(t3); BN_free(t2); diff --git a/deps/openssl/openssl/crypto/mem_clr.c b/deps/openssl/openssl/crypto/mem_clr.c index 3df1f3928d0688..1a06636d0ce8da 100644 --- a/deps/openssl/openssl/crypto/mem_clr.c +++ b/deps/openssl/openssl/crypto/mem_clr.c @@ -66,6 +66,10 @@ void OPENSSL_cleanse(void *ptr, size_t len) { unsigned char *p = ptr; size_t loop = len, ctr = cleanse_ctr; + + if (ptr == NULL) + return; + while (loop--) { *(p++) = (unsigned char)ctr; ctr += (17 + ((size_t)p & 0xF)); diff --git a/deps/openssl/openssl/crypto/modes/asm/ghash-armv4.pl b/deps/openssl/openssl/crypto/modes/asm/ghash-armv4.pl index d91586ee2925bb..e46f8e34da14d7 100644 --- a/deps/openssl/openssl/crypto/modes/asm/ghash-armv4.pl +++ b/deps/openssl/openssl/crypto/modes/asm/ghash-armv4.pl @@ -374,8 +374,8 @@ () vdup.8 $xi,`&Dlo("$IN")`[0] @ broadcast lowest byte .Linner_neon: subs $cnt,$cnt,#1 - vmull.p8 $Qlo,$Hlo,$xi @ H.loXi[i] - vmull.p8 $Qhi,$Hhi,$xi @ H.hiXi[i] + vmull.p8 $Qlo,$Hlo,$xi @ H.lo·Xi[i] + vmull.p8 $Qhi,$Hhi,$xi @ H.hi·Xi[i] vext.8 $IN,$zero,#1 @ IN>>=8 veor $Z,$Qpost @ modulo-scheduled part @@ -388,7 +388,7 @@ () vsli.8 $Zo,$T,#1 @ compose the "carry" byte vext.8 $Z,$zero,#1 @ Z>>=8 - vmull.p8 $R,$Zo,$mod @ "carry"0xe1 + vmull.p8 $R,$Zo,$mod @ "carry"·0xe1 vshr.u8 $Zo,$T,#7 @ save Z's bottom bit vext.8 $Qpost,$Qlo,$zero,#1 @ Qlo>>=8 veor $Z,$Qhi diff --git a/deps/openssl/openssl/crypto/modes/asm/ghash-x86.pl b/deps/openssl/openssl/crypto/modes/asm/ghash-x86.pl index 83c727e07f9517..2426cd0c8a01d1 100644 --- a/deps/openssl/openssl/crypto/modes/asm/ghash-x86.pl +++ b/deps/openssl/openssl/crypto/modes/asm/ghash-x86.pl @@ -346,7 +346,7 @@ sub deposit_rem_4bit { # effective address calculation and finally merge of value to Z.hi. # Reference to rem_4bit is scheduled so late that I had to >>4 # rem_4bit elements. This resulted in 20-45% procent improvement -# on contemporary -archs. +# on contemporary µ-archs. { my $cnt; my $rem_4bit = "eax"; diff --git a/deps/openssl/openssl/crypto/ocsp/ocsp_lib.c b/deps/openssl/openssl/crypto/ocsp/ocsp_lib.c index d28d6b5c042e4e..8db62ba7656d92 100644 --- a/deps/openssl/openssl/crypto/ocsp/ocsp_lib.c +++ b/deps/openssl/openssl/crypto/ocsp/ocsp_lib.c @@ -246,12 +246,6 @@ int OCSP_parse_url(char *url, char **phost, char **pport, char **ppath, if ((p = strchr(p, ':'))) { *p = 0; port = p + 1; - } else { - /* Not found: set default port */ - if (*pssl) - port = "443"; - else - port = "80"; } *pport = BUF_strdup(port); diff --git a/deps/openssl/openssl/crypto/ocsp/ocsp_prn.c b/deps/openssl/openssl/crypto/ocsp/ocsp_prn.c index 1834256af271f3..47d5f83ef9b09a 100644 --- a/deps/openssl/openssl/crypto/ocsp/ocsp_prn.c +++ b/deps/openssl/openssl/crypto/ocsp/ocsp_prn.c @@ -212,8 +212,7 @@ int OCSP_RESPONSE_print(BIO *bp, OCSP_RESPONSE *o, unsigned long flags) return 1; } - i = ASN1_STRING_length(rb->response); - if (!(br = OCSP_response_get1_basic(o))) + if ((br = OCSP_response_get1_basic(o)) == NULL) goto err; rd = br->tbsResponseData; l = ASN1_INTEGER_get(rd->version); diff --git a/deps/openssl/openssl/crypto/opensslconf.h.in b/deps/openssl/openssl/crypto/opensslconf.h.in index 814309becb6c6c..7a1c85d6ec9da0 100644 --- a/deps/openssl/openssl/crypto/opensslconf.h.in +++ b/deps/openssl/openssl/crypto/opensslconf.h.in @@ -120,7 +120,7 @@ optimization options. Older Sparc's work better with only UNROLL, but there's no way to tell at compile time what it is you're running on */ -#if defined( sun ) /* Newer Sparc's */ +#if defined( __sun ) || defined ( sun ) /* Newer Sparc's */ # define DES_PTR # define DES_RISC1 # define DES_UNROLL diff --git a/deps/openssl/openssl/crypto/opensslv.h b/deps/openssl/openssl/crypto/opensslv.h index bd66999c1c6b80..9b1afc5af7222b 100644 --- a/deps/openssl/openssl/crypto/opensslv.h +++ b/deps/openssl/openssl/crypto/opensslv.h @@ -30,11 +30,11 @@ extern "C" { * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for * major minor fix final patch/beta) */ -# define OPENSSL_VERSION_NUMBER 0x1000110fL +# define OPENSSL_VERSION_NUMBER 0x1000111fL # ifdef OPENSSL_FIPS -# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1p-fips 9 Jul 2015" +# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1q-fips 3 Dec 2015" # else -# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1p 9 Jul 2015" +# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1q 3 Dec 2015" # endif # define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT diff --git a/deps/openssl/openssl/crypto/pem/pem_info.c b/deps/openssl/openssl/crypto/pem/pem_info.c index 68747d162586a8..4d736a1d07e585 100644 --- a/deps/openssl/openssl/crypto/pem/pem_info.c +++ b/deps/openssl/openssl/crypto/pem/pem_info.c @@ -172,6 +172,8 @@ STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, xi->enc_len = 0; xi->x_pkey = X509_PKEY_new(); + if (xi->x_pkey == NULL) + goto err; ptype = EVP_PKEY_RSA; pp = &xi->x_pkey->dec_pkey; if ((int)strlen(header) > 10) /* assume encrypted */ @@ -193,6 +195,8 @@ STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, xi->enc_len = 0; xi->x_pkey = X509_PKEY_new(); + if (xi->x_pkey == NULL) + goto err; ptype = EVP_PKEY_DSA; pp = &xi->x_pkey->dec_pkey; if ((int)strlen(header) > 10) /* assume encrypted */ @@ -214,6 +218,8 @@ STACK_OF(X509_INFO) *PEM_X509_INFO_read_bio(BIO *bp, STACK_OF(X509_INFO) *sk, xi->enc_len = 0; xi->x_pkey = X509_PKEY_new(); + if (xi->x_pkey == NULL) + goto err; ptype = EVP_PKEY_EC; pp = &xi->x_pkey->dec_pkey; if ((int)strlen(header) > 10) /* assume encrypted */ diff --git a/deps/openssl/openssl/crypto/pem/pvkfmt.c b/deps/openssl/openssl/crypto/pem/pvkfmt.c index ee4b6a8241cc2c..82d45273ed16e8 100644 --- a/deps/openssl/openssl/crypto/pem/pvkfmt.c +++ b/deps/openssl/openssl/crypto/pem/pvkfmt.c @@ -624,13 +624,11 @@ static int do_PVK_header(const unsigned char **in, unsigned int length, PEMerr(PEM_F_DO_PVK_HEADER, PEM_R_PVK_TOO_SHORT); return 0; } - length -= 20; } else { if (length < 24) { PEMerr(PEM_F_DO_PVK_HEADER, PEM_R_PVK_TOO_SHORT); return 0; } - length -= 24; pvk_magic = read_ledword(&p); if (pvk_magic != MS_PVKMAGIC) { PEMerr(PEM_F_DO_PVK_HEADER, PEM_R_BAD_MAGIC_NUMBER); @@ -692,23 +690,23 @@ static EVP_PKEY *do_PVK_body(const unsigned char **in, inlen = PEM_def_callback(psbuf, PEM_BUFSIZE, 0, u); if (inlen <= 0) { PEMerr(PEM_F_DO_PVK_BODY, PEM_R_BAD_PASSWORD_READ); - return NULL; + goto err; } enctmp = OPENSSL_malloc(keylen + 8); if (!enctmp) { PEMerr(PEM_F_DO_PVK_BODY, ERR_R_MALLOC_FAILURE); - return NULL; + goto err; } if (!derive_pvk_key(keybuf, p, saltlen, (unsigned char *)psbuf, inlen)) - return NULL; + goto err; p += saltlen; /* Copy BLOBHEADER across, decrypt rest */ memcpy(enctmp, p, 8); p += 8; if (keylen < 8) { PEMerr(PEM_F_DO_PVK_BODY, PEM_R_PVK_TOO_SHORT); - return NULL; + goto err; } inlen = keylen - 8; q = enctmp + 8; diff --git a/deps/openssl/openssl/crypto/pkcs12/p12_add.c b/deps/openssl/openssl/crypto/pkcs12/p12_add.c index 982805d988de28..d9f03a39fd1532 100644 --- a/deps/openssl/openssl/crypto/pkcs12/p12_add.c +++ b/deps/openssl/openssl/crypto/pkcs12/p12_add.c @@ -75,15 +75,19 @@ PKCS12_SAFEBAG *PKCS12_item_pack_safebag(void *obj, const ASN1_ITEM *it, bag->type = OBJ_nid2obj(nid1); if (!ASN1_item_pack(obj, it, &bag->value.octet)) { PKCS12err(PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG, ERR_R_MALLOC_FAILURE); - return NULL; + goto err; } if (!(safebag = PKCS12_SAFEBAG_new())) { PKCS12err(PKCS12_F_PKCS12_ITEM_PACK_SAFEBAG, ERR_R_MALLOC_FAILURE); - return NULL; + goto err; } safebag->value.bag = bag; safebag->type = OBJ_nid2obj(nid2); return safebag; + + err: + PKCS12_BAGS_free(bag); + return NULL; } /* Turn PKCS8 object into a keybag */ @@ -127,6 +131,7 @@ PKCS12_SAFEBAG *PKCS12_MAKE_SHKEYBAG(int pbe_nid, const char *pass, PKCS8_encrypt(pbe_nid, pbe_ciph, pass, passlen, salt, saltlen, iter, p8))) { PKCS12err(PKCS12_F_PKCS12_MAKE_SHKEYBAG, ERR_R_MALLOC_FAILURE); + PKCS12_SAFEBAG_free(bag); return NULL; } @@ -144,14 +149,18 @@ PKCS7 *PKCS12_pack_p7data(STACK_OF(PKCS12_SAFEBAG) *sk) p7->type = OBJ_nid2obj(NID_pkcs7_data); if (!(p7->d.data = M_ASN1_OCTET_STRING_new())) { PKCS12err(PKCS12_F_PKCS12_PACK_P7DATA, ERR_R_MALLOC_FAILURE); - return NULL; + goto err; } if (!ASN1_item_pack(sk, ASN1_ITEM_rptr(PKCS12_SAFEBAGS), &p7->d.data)) { PKCS12err(PKCS12_F_PKCS12_PACK_P7DATA, PKCS12_R_CANT_PACK_STRUCTURE); - return NULL; + goto err; } return p7; + + err: + PKCS7_free(p7); + return NULL; } /* Unpack SAFEBAGS from PKCS#7 data ContentInfo */ @@ -181,7 +190,7 @@ PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, if (!PKCS7_set_type(p7, NID_pkcs7_encrypted)) { PKCS12err(PKCS12_F_PKCS12_PACK_P7ENCDATA, PKCS12_R_ERROR_SETTING_ENCRYPTED_DATA_TYPE); - return NULL; + goto err; } pbe_ciph = EVP_get_cipherbynid(pbe_nid); @@ -193,7 +202,7 @@ PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, if (!pbe) { PKCS12err(PKCS12_F_PKCS12_PACK_P7ENCDATA, ERR_R_MALLOC_FAILURE); - return NULL; + goto err; } X509_ALGOR_free(p7->d.encrypted->enc_data->algorithm); p7->d.encrypted->enc_data->algorithm = pbe; @@ -202,10 +211,14 @@ PKCS7 *PKCS12_pack_p7encdata(int pbe_nid, const char *pass, int passlen, PKCS12_item_i2d_encrypt(pbe, ASN1_ITEM_rptr(PKCS12_SAFEBAGS), pass, passlen, bags, 1))) { PKCS12err(PKCS12_F_PKCS12_PACK_P7ENCDATA, PKCS12_R_ENCRYPT_ERROR); - return NULL; + goto err; } return p7; + + err: + PKCS7_free(p7); + return NULL; } STACK_OF(PKCS12_SAFEBAG) *PKCS12_unpack_p7encdata(PKCS7 *p7, const char *pass, diff --git a/deps/openssl/openssl/crypto/pkcs12/p12_crpt.c b/deps/openssl/openssl/crypto/pkcs12/p12_crpt.c index 3a166e61300365..9c2dcab0246329 100644 --- a/deps/openssl/openssl/crypto/pkcs12/p12_crpt.c +++ b/deps/openssl/openssl/crypto/pkcs12/p12_crpt.c @@ -77,6 +77,9 @@ int PKCS12_PBE_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass, int passlen, const unsigned char *pbuf; unsigned char key[EVP_MAX_KEY_LENGTH], iv[EVP_MAX_IV_LENGTH]; + if (cipher == NULL) + return 0; + /* Extract useful info from parameter */ if (param == NULL || param->type != V_ASN1_SEQUENCE || param->value.sequence == NULL) { diff --git a/deps/openssl/openssl/crypto/pkcs12/p12_mutl.c b/deps/openssl/openssl/crypto/pkcs12/p12_mutl.c index 5ab4bf290e142e..a9277827ff2df5 100644 --- a/deps/openssl/openssl/crypto/pkcs12/p12_mutl.c +++ b/deps/openssl/openssl/crypto/pkcs12/p12_mutl.c @@ -173,11 +173,11 @@ int PKCS12_setup_mac(PKCS12 *p12, int iter, unsigned char *salt, int saltlen, } if (!saltlen) saltlen = PKCS12_SALT_LEN; - p12->mac->salt->length = saltlen; - if (!(p12->mac->salt->data = OPENSSL_malloc(saltlen))) { + if ((p12->mac->salt->data = OPENSSL_malloc(saltlen)) == NULL) { PKCS12err(PKCS12_F_PKCS12_SETUP_MAC, ERR_R_MALLOC_FAILURE); return 0; } + p12->mac->salt->length = saltlen; if (!salt) { if (RAND_pseudo_bytes(p12->mac->salt->data, saltlen) < 0) return 0; diff --git a/deps/openssl/openssl/crypto/pkcs7/pk7_doit.c b/deps/openssl/openssl/crypto/pkcs7/pk7_doit.c index c8d7db01bd730c..946aaa65435b33 100644 --- a/deps/openssl/openssl/crypto/pkcs7/pk7_doit.c +++ b/deps/openssl/openssl/crypto/pkcs7/pk7_doit.c @@ -656,6 +656,8 @@ BIO *PKCS7_dataDecode(PKCS7 *p7, EVP_PKEY *pkey, BIO *in_bio, X509 *pcert) bio = BIO_new_mem_buf(data_body->data, data_body->length); else { bio = BIO_new(BIO_s_mem()); + if (bio == NULL) + goto err; BIO_set_mem_eof_return(bio, 0); } if (bio == NULL) @@ -1156,7 +1158,6 @@ PKCS7_ISSUER_AND_SERIAL *PKCS7_get_issuer_and_serial(PKCS7 *p7, int idx) rsk = p7->d.signed_and_enveloped->recipientinfo; if (rsk == NULL) return NULL; - ri = sk_PKCS7_RECIP_INFO_value(rsk, 0); if (sk_PKCS7_RECIP_INFO_num(rsk) <= idx) return (NULL); ri = sk_PKCS7_RECIP_INFO_value(rsk, idx); diff --git a/deps/openssl/openssl/crypto/rc4/asm/rc4-x86_64.pl b/deps/openssl/openssl/crypto/rc4/asm/rc4-x86_64.pl index 75750dbf334dda..20722d3e724615 100755 --- a/deps/openssl/openssl/crypto/rc4/asm/rc4-x86_64.pl +++ b/deps/openssl/openssl/crypto/rc4/asm/rc4-x86_64.pl @@ -56,7 +56,7 @@ # achieves respectful 432MBps on 2.8GHz processor now. For reference. # If executed on Xeon, current RC4_CHAR code-path is 2.7x faster than # RC4_INT code-path. While if executed on Opteron, it's only 25% -# slower than the RC4_INT one [meaning that if CPU -arch detection +# slower than the RC4_INT one [meaning that if CPU µ-arch detection # is not implemented, then this final RC4_CHAR code-path should be # preferred, as it provides better *all-round* performance]. diff --git a/deps/openssl/openssl/crypto/rsa/rsa_ameth.c b/deps/openssl/openssl/crypto/rsa/rsa_ameth.c index 93e071de75e2a8..c7f1148a1ded13 100644 --- a/deps/openssl/openssl/crypto/rsa/rsa_ameth.c +++ b/deps/openssl/openssl/crypto/rsa/rsa_ameth.c @@ -279,7 +279,7 @@ static RSA_PSS_PARAMS *rsa_pss_decode(const X509_ALGOR *alg, if (pss->maskGenAlgorithm) { ASN1_TYPE *param = pss->maskGenAlgorithm->parameter; if (OBJ_obj2nid(pss->maskGenAlgorithm->algorithm) == NID_mgf1 - && param->type == V_ASN1_SEQUENCE) { + && param && param->type == V_ASN1_SEQUENCE) { p = param->value.sequence->data; plen = param->value.sequence->length; *pmaskHash = d2i_X509_ALGOR(NULL, &p, plen); diff --git a/deps/openssl/openssl/crypto/rsa/rsa_gen.c b/deps/openssl/openssl/crypto/rsa/rsa_gen.c index 2465fbdebf190b..7f7dca39fd089b 100644 --- a/deps/openssl/openssl/crypto/rsa/rsa_gen.c +++ b/deps/openssl/openssl/crypto/rsa/rsa_gen.c @@ -69,6 +69,8 @@ #include #ifdef OPENSSL_FIPS # include +extern int FIPS_rsa_x931_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, + BN_GENCB *cb); #endif static int rsa_builtin_keygen(RSA *rsa, int bits, BIGNUM *e_value, @@ -94,7 +96,7 @@ int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e_value, BN_GENCB *cb) return rsa->meth->rsa_keygen(rsa, bits, e_value, cb); #ifdef OPENSSL_FIPS if (FIPS_mode()) - return FIPS_rsa_generate_key_ex(rsa, bits, e_value, cb); + return FIPS_rsa_x931_generate_key_ex(rsa, bits, e_value, cb); #endif return rsa_builtin_keygen(rsa, bits, e_value, cb); } diff --git a/deps/openssl/openssl/crypto/rsa/rsa_sign.c b/deps/openssl/openssl/crypto/rsa/rsa_sign.c index bc91da2c1fe9cd..41c827f4531378 100644 --- a/deps/openssl/openssl/crypto/rsa/rsa_sign.c +++ b/deps/openssl/openssl/crypto/rsa/rsa_sign.c @@ -218,14 +218,13 @@ int int_rsa_verify(int dtype, const unsigned char *m, memcpy(rm, s + 2, 16); *prm_len = 16; ret = 1; - } else if (memcmp(m, s + 2, 16)) + } else if (memcmp(m, s + 2, 16)) { RSAerr(RSA_F_INT_RSA_VERIFY, RSA_R_BAD_SIGNATURE); - else + } else { ret = 1; - } - - /* Special case: SSL signature */ - if (dtype == NID_md5_sha1) { + } + } else if (dtype == NID_md5_sha1) { + /* Special case: SSL signature */ if ((i != SSL_SIG_LENGTH) || memcmp(s, m, SSL_SIG_LENGTH)) RSAerr(RSA_F_INT_RSA_VERIFY, RSA_R_BAD_SIGNATURE); else diff --git a/deps/openssl/openssl/crypto/rsa/rsa_test.c b/deps/openssl/openssl/crypto/rsa/rsa_test.c index e9712953e99393..85c7440b8c6805 100644 --- a/deps/openssl/openssl/crypto/rsa/rsa_test.c +++ b/deps/openssl/openssl/crypto/rsa/rsa_test.c @@ -297,22 +297,30 @@ int main(int argc, char *argv[]) } else printf("OAEP encryption/decryption ok\n"); - /* Try decrypting corrupted ciphertexts */ + /* Try decrypting corrupted ciphertexts. */ for (n = 0; n < clen; ++n) { - int b; - unsigned char saved = ctext[n]; - for (b = 0; b < 256; ++b) { - if (b == saved) - continue; - ctext[n] = b; - num = RSA_private_decrypt(num, ctext, ptext, key, + ctext[n] ^= 1; + num = RSA_private_decrypt(clen, ctext, ptext, key, RSA_PKCS1_OAEP_PADDING); - if (num > 0) { - printf("Corrupt data decrypted!\n"); - err = 1; - } + if (num > 0) { + printf("Corrupt data decrypted!\n"); + err = 1; + break; } + ctext[n] ^= 1; } + + /* Test truncated ciphertexts, as well as negative length. */ + for (n = -1; n < clen; ++n) { + num = RSA_private_decrypt(n, ctext, ptext, key, + RSA_PKCS1_OAEP_PADDING); + if (num > 0) { + printf("Truncated data decrypted!\n"); + err = 1; + break; + } + } + next: RSA_free(key); } diff --git a/deps/openssl/openssl/crypto/sha/asm/sha1-586.pl b/deps/openssl/openssl/crypto/sha/asm/sha1-586.pl index 1084d227fe0608..2b119ffa4615b9 100644 --- a/deps/openssl/openssl/crypto/sha/asm/sha1-586.pl +++ b/deps/openssl/openssl/crypto/sha/asm/sha1-586.pl @@ -66,9 +66,9 @@ # switch to AVX alone improves performance by as little as 4% in # comparison to SSSE3 code path. But below result doesn't look like # 4% improvement... Trouble is that Sandy Bridge decodes 'ro[rl]' as -# pair of -ops, and it's the additional -ops, two per round, that +# pair of µ-ops, and it's the additional µ-ops, two per round, that # make it run slower than Core2 and Westmere. But 'sh[rl]d' is decoded -# as single -op by Sandy Bridge and it's replacing 'ro[rl]' with +# as single µ-op by Sandy Bridge and it's replacing 'ro[rl]' with # equivalent 'sh[rl]d' that is responsible for the impressive 5.1 # cycles per processed byte. But 'sh[rl]d' is not something that used # to be fast, nor does it appear to be fast in upcoming Bulldozer diff --git a/deps/openssl/openssl/crypto/sha/asm/sha256-586.pl b/deps/openssl/openssl/crypto/sha/asm/sha256-586.pl index 928ec53123bfd1..52a7c7f8a3b72e 100644 --- a/deps/openssl/openssl/crypto/sha/asm/sha256-586.pl +++ b/deps/openssl/openssl/crypto/sha/asm/sha256-586.pl @@ -21,7 +21,7 @@ # purposes. # # Performance improvement over compiler generated code varies from -# 10% to 40% [see above]. Not very impressive on some -archs, but +# 10% to 40% [see above]. Not very impressive on some µ-archs, but # it's 5 times smaller and optimizies amount of writes. $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1; diff --git a/deps/openssl/openssl/crypto/sha/asm/sha512-586.pl b/deps/openssl/openssl/crypto/sha/asm/sha512-586.pl index 7eab6a5b88b245..9f8c51eb54c07d 100644 --- a/deps/openssl/openssl/crypto/sha/asm/sha512-586.pl +++ b/deps/openssl/openssl/crypto/sha/asm/sha512-586.pl @@ -23,7 +23,7 @@ # # IALU code-path is optimized for elder Pentiums. On vanilla Pentium # performance improvement over compiler generated code reaches ~60%, -# while on PIII - ~35%. On newer -archs improvement varies from 15% +# while on PIII - ~35%. On newer µ-archs improvement varies from 15% # to 50%, but it's less important as they are expected to execute SSE2 # code-path, which is commonly ~2-3x faster [than compiler generated # code]. SSE2 code-path is as fast as original sha512-sse2.pl, even diff --git a/deps/openssl/openssl/crypto/sha/asm/sha512-parisc.pl b/deps/openssl/openssl/crypto/sha/asm/sha512-parisc.pl index fc0e15b3c0593a..6cad72e255730f 100755 --- a/deps/openssl/openssl/crypto/sha/asm/sha512-parisc.pl +++ b/deps/openssl/openssl/crypto/sha/asm/sha512-parisc.pl @@ -19,7 +19,7 @@ # SHA512 performance is >2.9x better than gcc 3.2 generated code on # PA-7100LC, PA-RISC 1.1 processor. Then implementation detects if the # code is executed on PA-RISC 2.0 processor and switches to 64-bit -# code path delivering adequate peformance even in "blended" 32-bit +# code path delivering adequate performance even in "blended" 32-bit # build. Though 64-bit code is not any faster than code generated by # vendor compiler on PA-8600... # diff --git a/deps/openssl/openssl/crypto/sparccpuid.S b/deps/openssl/openssl/crypto/sparccpuid.S index 0cc247e489719f..c63d5da46fecb1 100644 --- a/deps/openssl/openssl/crypto/sparccpuid.S +++ b/deps/openssl/openssl/crypto/sparccpuid.S @@ -123,7 +123,7 @@ OPENSSL_wipe_cpu: fmovs %f1,%f3 fmovs %f0,%f2 - add %fp,BIAS,%i0 ! return pointer to callers top of stack + add %fp,BIAS,%i0 ! return pointer to caller´s top of stack ret restore diff --git a/deps/openssl/openssl/crypto/srp/srp_vfy.c b/deps/openssl/openssl/crypto/srp/srp_vfy.c index 50f75d7e4c9f16..a3f1a8a0a4d5bd 100644 --- a/deps/openssl/openssl/crypto/srp/srp_vfy.c +++ b/deps/openssl/openssl/crypto/srp/srp_vfy.c @@ -521,12 +521,12 @@ char *SRP_create_verifier(const char *user, const char *pass, char **salt, char **verifier, const char *N, const char *g) { int len; - char *result = NULL; - char *vf; + char *result = NULL, *vf = NULL; BIGNUM *N_bn = NULL, *g_bn = NULL, *s = NULL, *v = NULL; unsigned char tmp[MAX_LEN]; unsigned char tmp2[MAX_LEN]; char *defgNid = NULL; + int vfsize = 0; if ((user == NULL) || (pass == NULL) || (salt == NULL) || (verifier == NULL)) @@ -564,22 +564,23 @@ char *SRP_create_verifier(const char *user, const char *pass, char **salt, goto err; BN_bn2bin(v, tmp); - if (((vf = OPENSSL_malloc(BN_num_bytes(v) * 2)) == NULL)) + vfsize = BN_num_bytes(v) * 2; + if (((vf = OPENSSL_malloc(vfsize)) == NULL)) goto err; t_tob64(vf, tmp, BN_num_bytes(v)); - *verifier = vf; if (*salt == NULL) { char *tmp_salt; if ((tmp_salt = OPENSSL_malloc(SRP_RANDOM_SALT_LEN * 2)) == NULL) { - OPENSSL_free(vf); goto err; } t_tob64(tmp_salt, tmp2, SRP_RANDOM_SALT_LEN); *salt = tmp_salt; } + *verifier = vf; + vf = NULL; result = defgNid; err: @@ -587,11 +588,21 @@ char *SRP_create_verifier(const char *user, const char *pass, char **salt, BN_free(N_bn); BN_free(g_bn); } + OPENSSL_cleanse(vf, vfsize); + OPENSSL_free(vf); + BN_clear_free(s); + BN_clear_free(v); return result; } /* - * create a verifier (*salt,*verifier,g and N are BIGNUMs) + * create a verifier (*salt,*verifier,g and N are BIGNUMs). If *salt != NULL + * then the provided salt will be used. On successful exit *verifier will point + * to a newly allocated BIGNUM containing the verifier and (if a salt was not + * provided) *salt will be populated with a newly allocated BIGNUM containing a + * random salt. + * The caller is responsible for freeing the allocated *salt and *verifier + * BIGNUMS. */ int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, BIGNUM **verifier, BIGNUM *N, BIGNUM *g) @@ -600,6 +611,7 @@ int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, BIGNUM *x = NULL; BN_CTX *bn_ctx = BN_CTX_new(); unsigned char tmp2[MAX_LEN]; + BIGNUM *salttmp = NULL; if ((user == NULL) || (pass == NULL) || @@ -614,10 +626,12 @@ int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, if (RAND_pseudo_bytes(tmp2, SRP_RANDOM_SALT_LEN) < 0) goto err; - *salt = BN_bin2bn(tmp2, SRP_RANDOM_SALT_LEN, NULL); + salttmp = BN_bin2bn(tmp2, SRP_RANDOM_SALT_LEN, NULL); + } else { + salttmp = *salt; } - x = SRP_Calc_x(*salt, user, pass); + x = SRP_Calc_x(salttmp, user, pass); *verifier = BN_new(); if (*verifier == NULL) @@ -631,9 +645,11 @@ int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, srp_bn_print(*verifier); result = 1; + *salt = salttmp; err: - + if (*salt != salttmp) + BN_clear_free(salttmp); BN_clear_free(x); BN_CTX_free(bn_ctx); return result; diff --git a/deps/openssl/openssl/crypto/ts/ts_rsp_verify.c b/deps/openssl/openssl/crypto/ts/ts_rsp_verify.c index 32b4d9923f46c0..1a3a7c5248c864 100644 --- a/deps/openssl/openssl/crypto/ts/ts_rsp_verify.c +++ b/deps/openssl/openssl/crypto/ts/ts_rsp_verify.c @@ -522,7 +522,7 @@ static int TS_check_status_info(TS_RESP *response) if (ASN1_BIT_STRING_get_bit(info->failure_info, TS_failure_info[i].code)) { if (!first) - strcpy(failure_text, ","); + strcat(failure_text, ","); else first = 0; strcat(failure_text, TS_failure_info[i].text); diff --git a/deps/openssl/openssl/crypto/whrlpool/asm/wp-mmx.pl b/deps/openssl/openssl/crypto/whrlpool/asm/wp-mmx.pl index cb2381c22ba12a..90c2eca53b8ae7 100644 --- a/deps/openssl/openssl/crypto/whrlpool/asm/wp-mmx.pl +++ b/deps/openssl/openssl/crypto/whrlpool/asm/wp-mmx.pl @@ -16,7 +16,7 @@ # table]. I stick to value of 2 for two reasons: 1. smaller table # minimizes cache trashing and thus mitigates the hazard of side- # channel leakage similar to AES cache-timing one; 2. performance -# gap among different -archs is smaller. +# gap among different µ-archs is smaller. # # Performance table lists rounded amounts of CPU cycles spent by # whirlpool_block_mmx routine on single 64 byte input block, i.e. diff --git a/deps/openssl/openssl/crypto/x509/x509_cmp.c b/deps/openssl/openssl/crypto/x509/x509_cmp.c index 3c5b717c15a355..5792e7f51dd244 100644 --- a/deps/openssl/openssl/crypto/x509/x509_cmp.c +++ b/deps/openssl/openssl/crypto/x509/x509_cmp.c @@ -179,11 +179,24 @@ unsigned long X509_subject_name_hash_old(X509 *x) */ int X509_cmp(const X509 *a, const X509 *b) { + int rv; + /* ensure hash is valid */ X509_check_purpose((X509 *)a, -1, 0); X509_check_purpose((X509 *)b, -1, 0); - return memcmp(a->sha1_hash, b->sha1_hash, SHA_DIGEST_LENGTH); + rv = memcmp(a->sha1_hash, b->sha1_hash, SHA_DIGEST_LENGTH); + if (rv) + return rv; + /* Check for match against stored encoding too */ + if (!a->cert_info->enc.modified && !b->cert_info->enc.modified) { + rv = (int)(a->cert_info->enc.len - b->cert_info->enc.len); + if (rv) + return rv; + return memcmp(a->cert_info->enc.enc, b->cert_info->enc.enc, + a->cert_info->enc.len); + } + return rv; } #endif diff --git a/deps/openssl/openssl/crypto/x509/x509_lu.c b/deps/openssl/openssl/crypto/x509/x509_lu.c index 8415d1d8b35321..8084c4a4747d3c 100644 --- a/deps/openssl/openssl/crypto/x509/x509_lu.c +++ b/deps/openssl/openssl/crypto/x509/x509_lu.c @@ -523,8 +523,6 @@ STACK_OF(X509_CRL) *X509_STORE_get1_crls(X509_STORE_CTX *ctx, X509_NAME *nm) X509_OBJECT *obj, xobj; sk = sk_X509_CRL_new_null(); CRYPTO_w_lock(CRYPTO_LOCK_X509_STORE); - /* Check cache first */ - idx = x509_object_idx_cnt(ctx->ctx->objs, X509_LU_CRL, nm, &cnt); /* * Always do lookup to possibly add new CRLs to cache diff --git a/deps/openssl/openssl/crypto/x509v3/v3_cpols.c b/deps/openssl/openssl/crypto/x509v3/v3_cpols.c index 0febc1b3edc1cf..d97f6226b9ee01 100644 --- a/deps/openssl/openssl/crypto/x509v3/v3_cpols.c +++ b/deps/openssl/openssl/crypto/x509v3/v3_cpols.c @@ -186,6 +186,10 @@ static STACK_OF(POLICYINFO) *r2i_certpol(X509V3_EXT_METHOD *method, goto err; } pol = POLICYINFO_new(); + if (pol == NULL) { + X509V3err(X509V3_F_R2I_CERTPOL, ERR_R_MALLOC_FAILURE); + goto err; + } pol->policyid = pobj; } if (!sk_POLICYINFO_push(pols, pol)) { diff --git a/deps/openssl/openssl/crypto/x509v3/v3_ncons.c b/deps/openssl/openssl/crypto/x509v3/v3_ncons.c index b97ed271e3e293..2855269668bee8 100644 --- a/deps/openssl/openssl/crypto/x509v3/v3_ncons.c +++ b/deps/openssl/openssl/crypto/x509v3/v3_ncons.c @@ -132,6 +132,8 @@ static void *v2i_NAME_CONSTRAINTS(const X509V3_EXT_METHOD *method, } tval.value = val->value; sub = GENERAL_SUBTREE_new(); + if (sub == NULL) + goto memerr; if (!v2i_GENERAL_NAME_ex(sub->base, method, ctx, &tval, 1)) goto err; if (!*ptree) diff --git a/deps/openssl/openssl/crypto/x509v3/v3_pci.c b/deps/openssl/openssl/crypto/x509v3/v3_pci.c index fe0d8063d1f108..48ac0959cb10a3 100644 --- a/deps/openssl/openssl/crypto/x509v3/v3_pci.c +++ b/deps/openssl/openssl/crypto/x509v3/v3_pci.c @@ -3,7 +3,7 @@ * Contributed to the OpenSSL Project 2004 by Richard Levitte * (richard@levitte.org) */ -/* Copyright (c) 2004 Kungliga Tekniska Hgskolan +/* Copyright (c) 2004 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * diff --git a/deps/openssl/openssl/crypto/x509v3/v3_pcia.c b/deps/openssl/openssl/crypto/x509v3/v3_pcia.c index 350b39889fcc3e..43fd362aeda04e 100644 --- a/deps/openssl/openssl/crypto/x509v3/v3_pcia.c +++ b/deps/openssl/openssl/crypto/x509v3/v3_pcia.c @@ -3,7 +3,7 @@ * Contributed to the OpenSSL Project 2004 by Richard Levitte * (richard@levitte.org) */ -/* Copyright (c) 2004 Kungliga Tekniska Hgskolan +/* Copyright (c) 2004 Kungliga Tekniska Högskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * diff --git a/deps/openssl/openssl/doc/apps/ciphers.pod b/deps/openssl/openssl/doc/apps/ciphers.pod index 0aa1bad111c5d0..0afe80d97d5498 100644 --- a/deps/openssl/openssl/doc/apps/ciphers.pod +++ b/deps/openssl/openssl/doc/apps/ciphers.pod @@ -205,7 +205,7 @@ keys or either respectively. cipher suites using ephemeral ECDH key agreement, including anonymous cipher suites. -=item B +=item B cipher suites using authenticated ephemeral ECDH key agreement. diff --git a/deps/openssl/openssl/doc/apps/dgst.pod b/deps/openssl/openssl/doc/apps/dgst.pod index 9e15798d8279d1..b27bb946b1b2e3 100644 --- a/deps/openssl/openssl/doc/apps/dgst.pod +++ b/deps/openssl/openssl/doc/apps/dgst.pod @@ -13,7 +13,6 @@ B B [B<-hex>] [B<-binary>] [B<-r>] -[B<-hmac arg>] [B<-non-fips-allow>] [B<-out filename>] [B<-sign filename>] @@ -64,10 +63,6 @@ output the digest or signature in binary form. output the digest in the "coreutils" format used by programs like B. -=item B<-hmac arg> - -set the HMAC key to "arg". - =item B<-non-fips-allow> Allow use of non FIPS digest when in FIPS mode. This has no effect when not in diff --git a/deps/openssl/openssl/doc/apps/genrsa.pod b/deps/openssl/openssl/doc/apps/genrsa.pod index cb03d09b95eb64..3dc9870f34b96a 100644 --- a/deps/openssl/openssl/doc/apps/genrsa.pod +++ b/deps/openssl/openssl/doc/apps/genrsa.pod @@ -10,12 +10,6 @@ B B [B<-out filename>] [B<-passout arg>] [B<-aes128>] -[B<-aes128>] -[B<-aes192>] -[B<-aes256>] -[B<-camellia128>] -[B<-camellia192>] -[B<-camellia256>] [B<-aes192>] [B<-aes256>] [B<-camellia128>] diff --git a/deps/openssl/openssl/doc/apps/req.pod b/deps/openssl/openssl/doc/apps/req.pod index 0730d117b39cb3..37ed377c7a4717 100644 --- a/deps/openssl/openssl/doc/apps/req.pod +++ b/deps/openssl/openssl/doc/apps/req.pod @@ -490,7 +490,7 @@ be input by calling it "1.organizationName". The actual permitted field names are any object identifier short or long names. These are compiled into OpenSSL and include the usual values such as commonName, countryName, localityName, organizationName, -organizationUnitName, stateOrProvinceName. Additionally emailAddress +organizationalUnitName, stateOrProvinceName. Additionally emailAddress is include as well as name, surname, givenName initials and dnQualifier. Additional object identifiers can be defined with the B or diff --git a/deps/openssl/openssl/doc/apps/x509.pod b/deps/openssl/openssl/doc/apps/x509.pod index 6109389e0bb7cc..1bb055023b2e5d 100644 --- a/deps/openssl/openssl/doc/apps/x509.pod +++ b/deps/openssl/openssl/doc/apps/x509.pod @@ -529,7 +529,8 @@ very rare and their use is discouraged). The options ending in "space" additionally place a space after the separator to make it more readable. The B uses a linefeed character for the RDN separator and a spaced B<+> for the AVA separator. It also -indents the fields by four characters. +indents the fields by four characters. If no field separator is specified +then B is used by default. =item B diff --git a/deps/openssl/openssl/doc/crypto/BIO_read.pod b/deps/openssl/openssl/doc/crypto/BIO_read.pod index b34528104ddf24..2c177f0b6d86d5 100644 --- a/deps/openssl/openssl/doc/crypto/BIO_read.pod +++ b/deps/openssl/openssl/doc/crypto/BIO_read.pod @@ -9,9 +9,9 @@ BIO_read, BIO_write, BIO_gets, BIO_puts - BIO I/O functions #include int BIO_read(BIO *b, void *buf, int len); - int BIO_gets(BIO *b,char *buf, int size); + int BIO_gets(BIO *b, char *buf, int size); int BIO_write(BIO *b, const void *buf, int len); - int BIO_puts(BIO *b,const char *buf); + int BIO_puts(BIO *b, const char *buf); =head1 DESCRIPTION @@ -26,7 +26,7 @@ return the digest and other BIOs may not support BIO_gets() at all. BIO_write() attempts to write B bytes from B to BIO B. -BIO_puts() attempts to write a null terminated string B to BIO B +BIO_puts() attempts to write a null terminated string B to BIO B. =head1 RETURN VALUES diff --git a/deps/openssl/openssl/doc/crypto/BN_rand.pod b/deps/openssl/openssl/doc/crypto/BN_rand.pod index 3b2796c5df4152..fde5f72636b797 100644 --- a/deps/openssl/openssl/doc/crypto/BN_rand.pod +++ b/deps/openssl/openssl/doc/crypto/BN_rand.pod @@ -19,7 +19,7 @@ BN_rand, BN_pseudo_rand - generate pseudo-random number =head1 DESCRIPTION BN_rand() generates a cryptographically strong pseudo-random number of -B bits in length and stores it in B. If B is -1, the +B in length and stores it in B. If B is -1, the most significant bit of the random number can be zero. If B is 0, it is set to 1, and if B is 1, the two most significant bits of the number will be set to 1, so that the product of two such random @@ -33,7 +33,7 @@ non-cryptographic purposes and for certain purposes in cryptographic protocols, but usually not for key generation etc. BN_rand_range() generates a cryptographically strong pseudo-random -number B in the range 0 = B E B. +number B in the range 0 E= B E B. BN_pseudo_rand_range() does the same, but is based on BN_pseudo_rand(), and hence numbers generated by it are not necessarily unpredictable. diff --git a/deps/openssl/openssl/doc/crypto/DSA_generate_parameters.pod b/deps/openssl/openssl/doc/crypto/DSA_generate_parameters.pod index be7c924ff8f971..f24c9c7d447d53 100644 --- a/deps/openssl/openssl/doc/crypto/DSA_generate_parameters.pod +++ b/deps/openssl/openssl/doc/crypto/DSA_generate_parameters.pod @@ -23,7 +23,7 @@ maximum of 1024 bits. If B is B or B E 20, the primes will be generated at random. Otherwise, the seed is used to generate them. If the given seed does not yield a prime q, a new random -seed is chosen and placed at B. +seed is chosen. DSA_generate_parameters() places the iteration count in *B and a counter used for finding a generator in diff --git a/deps/openssl/openssl/doc/crypto/EVP_DigestVerifyInit.pod b/deps/openssl/openssl/doc/crypto/EVP_DigestVerifyInit.pod index cfeccd96effcfb..54cad92e6fd172 100644 --- a/deps/openssl/openssl/doc/crypto/EVP_DigestVerifyInit.pod +++ b/deps/openssl/openssl/doc/crypto/EVP_DigestVerifyInit.pod @@ -37,10 +37,11 @@ EVP_DigestVerifyInit() and EVP_DigestVerifyUpdate() return 1 for success and 0 or a negative value for failure. In particular a return value of -2 indicates the operation is not supported by the public key algorithm. -Unlike other functions the return value 0 from EVP_DigestVerifyFinal() only -indicates that the signature did not verify successfully (that is tbs did -not match the original data or the signature was of invalid form) it is not an -indication of a more serious error. +EVP_DigestVerifyFinal() returns 1 for success; any other value indicates +failure. A return value of zero indicates that the signature did not verify +successfully (that is, tbs did not match the original data or the signature had +an invalid form), while other values indicate a more serious error (and +sometimes also indicate an invalid signature form). The error codes can be obtained from L. diff --git a/deps/openssl/openssl/doc/crypto/EVP_SignInit.pod b/deps/openssl/openssl/doc/crypto/EVP_SignInit.pod index 14ecc775af6a7e..c63d6b339318cb 100644 --- a/deps/openssl/openssl/doc/crypto/EVP_SignInit.pod +++ b/deps/openssl/openssl/doc/crypto/EVP_SignInit.pod @@ -2,7 +2,8 @@ =head1 NAME -EVP_SignInit, EVP_SignUpdate, EVP_SignFinal - EVP signing functions +EVP_SignInit, EVP_SignInit_ex, EVP_SignUpdate, EVP_SignFinal - EVP signing +functions =head1 SYNOPSIS diff --git a/deps/openssl/openssl/doc/crypto/buffer.pod b/deps/openssl/openssl/doc/crypto/buffer.pod index 781f5b11ee546e..9d6de53e8e4657 100644 --- a/deps/openssl/openssl/doc/crypto/buffer.pod +++ b/deps/openssl/openssl/doc/crypto/buffer.pod @@ -2,8 +2,11 @@ =head1 NAME -BUF_MEM_new, BUF_MEM_free, BUF_MEM_grow, BUF_strdup - simple -character arrays structure +BUF_MEM_new, BUF_MEM_new_ex, BUF_MEM_free, BUF_MEM_grow - simple +character array structure + +BUF_strdup, BUF_strndup, BUF_memdup, BUF_strlcpy, BUF_strlcat - +standard C library equivalents =head1 SYNOPSIS @@ -15,25 +18,20 @@ character arrays structure int BUF_MEM_grow(BUF_MEM *str, int len); - char * BUF_strdup(const char *str); + char *BUF_strdup(const char *str); -=head1 DESCRIPTION + char *BUF_strndup(const char *str, size_t siz); -The buffer library handles simple character arrays. Buffers are used for -various purposes in the library, most notably memory BIOs. + void *BUF_memdup(const void *data, size_t siz); -The library uses the BUF_MEM structure defined in buffer.h: + size_t BUF_strlcpy(char *dst, const char *src, size_t size); - typedef struct buf_mem_st - { - int length; /* current number of bytes */ - char *data; - int max; /* size of buffer */ - } BUF_MEM; + size_t BUF_strlcat(char *dst, const char *src, size_t size); -B is the current size of the buffer in bytes, B is the amount of -memory allocated to the buffer. There are three functions which handle these -and one "miscellaneous" function. +=head1 DESCRIPTION + +The buffer library handles simple character arrays. Buffers are used for +various purposes in the library, most notably memory BIOs. BUF_MEM_new() allocates a new buffer of zero size. @@ -44,14 +42,17 @@ BUF_MEM_grow() changes the size of an already existing buffer to B. Any data already in the buffer is preserved if it increases in size. -BUF_strdup() copies a null terminated string into a block of allocated -memory and returns a pointer to the allocated block. -Unlike the standard C library strdup() this function uses OPENSSL_malloc() and so -should be used in preference to the standard library strdup() because it can -be used for memory leak checking or replacing the malloc() function. +BUF_strdup(), BUF_strndup(), BUF_memdup(), BUF_strlcpy() and +BUF_strlcat() are equivalents of the standard C library functions. The +dup() functions use OPENSSL_malloc() underneath and so should be used +in preference to the standard library for memory leak checking or +replacing the malloc() function. + +Memory allocated from these functions should be freed up using the +OPENSSL_free() function. -The memory allocated from BUF_strdup() should be freed up using the OPENSSL_free() -function. +BUF_strndup makes the explicit guarantee that it will never read past +the first B bytes of B. =head1 RETURN VALUES diff --git a/deps/openssl/openssl/doc/crypto/d2i_X509_NAME.pod b/deps/openssl/openssl/doc/crypto/d2i_X509_NAME.pod index 343ffe1519148b..b025de7b2ff630 100644 --- a/deps/openssl/openssl/doc/crypto/d2i_X509_NAME.pod +++ b/deps/openssl/openssl/doc/crypto/d2i_X509_NAME.pod @@ -14,7 +14,7 @@ d2i_X509_NAME, i2d_X509_NAME - X509_NAME encoding functions =head1 DESCRIPTION These functions decode and encode an B structure which is the -the same as the B type defined in RFC2459 (and elsewhere) and used +same as the B type defined in RFC2459 (and elsewhere) and used for example in certificate subject and issuer names. Othewise the functions behave in a similar way to d2i_X509() and i2d_X509() diff --git a/deps/openssl/openssl/doc/ssl/SSL_CTX_add_extra_chain_cert.pod b/deps/openssl/openssl/doc/ssl/SSL_CTX_add_extra_chain_cert.pod index 5955ee1cb41535..18fb2e2d2dbf15 100644 --- a/deps/openssl/openssl/doc/ssl/SSL_CTX_add_extra_chain_cert.pod +++ b/deps/openssl/openssl/doc/ssl/SSL_CTX_add_extra_chain_cert.pod @@ -2,29 +2,39 @@ =head1 NAME -SSL_CTX_add_extra_chain_cert - add certificate to chain +SSL_CTX_add_extra_chain_cert, SSL_CTX_clear_extra_chain_certs - add or clear +extra chain certificates =head1 SYNOPSIS #include - long SSL_CTX_add_extra_chain_cert(SSL_CTX ctx, X509 *x509) + long SSL_CTX_add_extra_chain_cert(SSL_CTX *ctx, X509 *x509); + long SSL_CTX_clear_extra_chain_certs(SSL_CTX *ctx); =head1 DESCRIPTION -SSL_CTX_add_extra_chain_cert() adds the certificate B to the certificate -chain presented together with the certificate. Several certificates -can be added one after the other. +SSL_CTX_add_extra_chain_cert() adds the certificate B to the extra chain +certificates associated with B. Several certificates can be added one +after another. + +SSL_CTX_clear_extra_chain_certs() clears all extra chain certificates +associated with B. + +These functions are implemented as macros. =head1 NOTES -When constructing the certificate chain, the chain will be formed from -these certificates explicitly specified. If no chain is specified, -the library will try to complete the chain from the available CA -certificates in the trusted CA storage, see +When sending a certificate chain, extra chain certificates are sent in order +following the end entity certificate. + +If no chain is specified, the library will try to complete the chain from the +available CA certificates in the trusted CA storage, see L. -The B certificate provided to SSL_CTX_add_extra_chain_cert() will be freed by the library when the B is destroyed. An application B free the B object. +The B certificate provided to SSL_CTX_add_extra_chain_cert() will be +freed by the library when the B is destroyed. An application +B free the B object. =head1 RESTRICTIONS @@ -36,8 +46,9 @@ function. =head1 RETURN VALUES -SSL_CTX_add_extra_chain_cert() returns 1 on success. Check out the -error stack to find out the reason for failure otherwise. +SSL_CTX_add_extra_chain_cert() and SSL_CTX_clear_extra_chain_certs() return +1 on success and 0 for failure. Check out the error stack to find out the +reason for failure. =head1 SEE ALSO diff --git a/deps/openssl/openssl/include/openssl/buffer.h b/deps/openssl/openssl/include/openssl/buffer.h index 632df93c657ca7..89183adb4a8e1e 100644 --- a/deps/openssl/openssl/include/openssl/buffer.h +++ b/deps/openssl/openssl/include/openssl/buffer.h @@ -85,7 +85,13 @@ void BUF_MEM_free(BUF_MEM *a); int BUF_MEM_grow(BUF_MEM *str, size_t len); int BUF_MEM_grow_clean(BUF_MEM *str, size_t len); char *BUF_strdup(const char *str); + +/* + * Like strndup, but in addition, explicitly guarantees to never read past the + * first |siz| bytes of |str|. + */ char *BUF_strndup(const char *str, size_t siz); + void *BUF_memdup(const void *data, size_t siz); void BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz); diff --git a/deps/openssl/openssl/include/openssl/ec.h b/deps/openssl/openssl/include/openssl/ec.h index c4e7aea938c23f..2a935fdb57c380 100644 --- a/deps/openssl/openssl/include/openssl/ec.h +++ b/deps/openssl/openssl/include/openssl/ec.h @@ -106,7 +106,7 @@ typedef enum { /** the point is encoded as z||x, where the octet z specifies * which solution of the quadratic equation y is */ POINT_CONVERSION_COMPRESSED = 2, - /** the point is encoded as z||x||y, where z is the octet 0x02 */ + /** the point is encoded as z||x||y, where z is the octet 0x04 */ POINT_CONVERSION_UNCOMPRESSED = 4, /** the point is encoded as z||x||y, where the octet z specifies * which solution of the quadratic equation y is */ diff --git a/deps/openssl/openssl/include/openssl/opensslv.h b/deps/openssl/openssl/include/openssl/opensslv.h index bd66999c1c6b80..9b1afc5af7222b 100644 --- a/deps/openssl/openssl/include/openssl/opensslv.h +++ b/deps/openssl/openssl/include/openssl/opensslv.h @@ -30,11 +30,11 @@ extern "C" { * (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for * major minor fix final patch/beta) */ -# define OPENSSL_VERSION_NUMBER 0x1000110fL +# define OPENSSL_VERSION_NUMBER 0x1000111fL # ifdef OPENSSL_FIPS -# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1p-fips 9 Jul 2015" +# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1q-fips 3 Dec 2015" # else -# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1p 9 Jul 2015" +# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1q 3 Dec 2015" # endif # define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT diff --git a/deps/openssl/openssl/include/openssl/ssl.h b/deps/openssl/openssl/include/openssl/ssl.h index d2ab0c074c9982..b8456c692bd946 100644 --- a/deps/openssl/openssl/include/openssl/ssl.h +++ b/deps/openssl/openssl/include/openssl/ssl.h @@ -2313,6 +2313,7 @@ void ERR_load_SSL_strings(void); # define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC 292 # define SSL_F_SSL3_ENC 134 # define SSL_F_SSL3_GENERATE_KEY_BLOCK 238 +# define SSL_F_SSL3_GENERATE_MASTER_SECRET 388 # define SSL_F_SSL3_GET_CERTIFICATE_REQUEST 135 # define SSL_F_SSL3_GET_CERT_STATUS 289 # define SSL_F_SSL3_GET_CERT_VERIFY 136 @@ -2465,8 +2466,11 @@ void ERR_load_SSL_strings(void); # define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK 106 # define SSL_R_BAD_DECOMPRESSION 107 # define SSL_R_BAD_DH_G_LENGTH 108 +# define SSL_R_BAD_DH_G_VALUE 375 # define SSL_R_BAD_DH_PUB_KEY_LENGTH 109 +# define SSL_R_BAD_DH_PUB_KEY_VALUE 393 # define SSL_R_BAD_DH_P_LENGTH 110 +# define SSL_R_BAD_DH_P_VALUE 395 # define SSL_R_BAD_DIGEST_LENGTH 111 # define SSL_R_BAD_DSA_SIGNATURE 112 # define SSL_R_BAD_ECC_CERT 304 diff --git a/deps/openssl/openssl/include/openssl/ssl3.h b/deps/openssl/openssl/include/openssl/ssl3.h index 2dd54626588a24..e9b1170d7b0e0b 100644 --- a/deps/openssl/openssl/include/openssl/ssl3.h +++ b/deps/openssl/openssl/include/openssl/ssl3.h @@ -263,6 +263,8 @@ extern "C" { # define SSL3_SESSION_ID_SIZE 32 # define SSL3_RT_HEADER_LENGTH 5 +# define SSL3_HM_HEADER_LENGTH 4 + # ifndef SSL3_ALIGN_PAYLOAD /* * Some will argue that this increases memory footprint, but it's not diff --git a/deps/openssl/openssl/include/openssl/tls1.h b/deps/openssl/openssl/include/openssl/tls1.h index 69d8186a4e2441..91504b17e8965d 100644 --- a/deps/openssl/openssl/include/openssl/tls1.h +++ b/deps/openssl/openssl/include/openssl/tls1.h @@ -235,8 +235,7 @@ extern "C" { /* * ExtensionType value for TLS padding extension. - * http://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml - * http://tools.ietf.org/html/draft-agl-tls-padding-03 + * http://tools.ietf.org/html/draft-agl-tls-padding */ # define TLSEXT_TYPE_padding 21 @@ -261,20 +260,19 @@ extern "C" { # define TLSEXT_TYPE_next_proto_neg 13172 # endif -/* NameType value from RFC 3546 */ +/* NameType value from RFC3546 */ # define TLSEXT_NAMETYPE_host_name 0 -/* status request value from RFC 3546 */ +/* status request value from RFC3546 */ # define TLSEXT_STATUSTYPE_ocsp 1 -/* ECPointFormat values from draft-ietf-tls-ecc-12 */ +/* ECPointFormat values from RFC4492 */ # define TLSEXT_ECPOINTFORMAT_first 0 # define TLSEXT_ECPOINTFORMAT_uncompressed 0 # define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime 1 # define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2 2 # define TLSEXT_ECPOINTFORMAT_last 2 -/* Signature and hash algorithms from RFC 5246 */ - +/* Signature and hash algorithms from RFC5246 */ # define TLSEXT_signature_anonymous 0 # define TLSEXT_signature_rsa 1 # define TLSEXT_signature_dsa 2 @@ -404,7 +402,6 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) # define TLS1_CK_DHE_DSS_WITH_RC4_128_SHA 0x03000066 /* AES ciphersuites from RFC3268 */ - # define TLS1_CK_RSA_WITH_AES_128_SHA 0x0300002F # define TLS1_CK_DH_DSS_WITH_AES_128_SHA 0x03000030 # define TLS1_CK_DH_RSA_WITH_AES_128_SHA 0x03000031 @@ -570,7 +567,7 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) # define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA "DHE-RSA-AES256-SHA" # define TLS1_TXT_ADH_WITH_AES_256_SHA "ADH-AES256-SHA" -/* ECC ciphersuites from draft-ietf-tls-ecc-01.txt (Mar 15, 2001) */ +/* ECC ciphersuites from RFC4492 */ # define TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA "ECDH-ECDSA-NULL-SHA" # define TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA "ECDH-ECDSA-RC4-SHA" # define TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA "ECDH-ECDSA-DES-CBC3-SHA" diff --git a/deps/openssl/openssl/ssl/Makefile b/deps/openssl/openssl/ssl/Makefile index 29d9e4528fc5dc..ad14abb0b3817e 100644 --- a/deps/openssl/openssl/ssl/Makefile +++ b/deps/openssl/openssl/ssl/Makefile @@ -15,7 +15,7 @@ KRB5_INCLUDES= CFLAGS= $(INCLUDES) $(CFLAG) GENERAL=Makefile README ssl-lib.com install.com -TEST=ssltest.c heartbeat_test.c +TEST=ssltest.c heartbeat_test.c clienthellotest.c APPS= LIB=$(TOP)/libssl.a diff --git a/deps/openssl/openssl/ssl/bio_ssl.c b/deps/openssl/openssl/ssl/bio_ssl.c index a0c583e34215b8..d2d4d2ea2d2dbb 100644 --- a/deps/openssl/openssl/ssl/bio_ssl.c +++ b/deps/openssl/openssl/ssl/bio_ssl.c @@ -419,6 +419,10 @@ static long ssl_ctrl(BIO *b, int cmd, long num, void *ptr) BIO_set_flags(b, BIO_FLAGS_IO_SPECIAL | BIO_FLAGS_SHOULD_RETRY); b->retry_reason = b->next_bio->retry_reason; break; + case SSL_ERROR_WANT_X509_LOOKUP: + BIO_set_retry_special(b); + b->retry_reason = BIO_RR_SSL_X509_LOOKUP; + break; default: break; } diff --git a/deps/openssl/openssl/ssl/clienthellotest.c b/deps/openssl/openssl/ssl/clienthellotest.c new file mode 100644 index 00000000000000..a00a7ea02d6b9a --- /dev/null +++ b/deps/openssl/openssl/ssl/clienthellotest.c @@ -0,0 +1,218 @@ +/* Written by Matt Caswell for the OpenSSL Project */ +/* ==================================================================== + * Copyright (c) 1998-2015 The OpenSSL Project. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. All advertising materials mentioning features or use of this + * software must display the following acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" + * + * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to + * endorse or promote products derived from this software without + * prior written permission. For written permission, please contact + * openssl-core@openssl.org. + * + * 5. Products derived from this software may not be called "OpenSSL" + * nor may "OpenSSL" appear in their names without prior written + * permission of the OpenSSL Project. + * + * 6. Redistributions of any form whatsoever must retain the following + * acknowledgment: + * "This product includes software developed by the OpenSSL Project + * for use in the OpenSSL Toolkit (http://www.openssl.org/)" + * + * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY + * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + * OF THE POSSIBILITY OF SUCH DAMAGE. + * ==================================================================== + * + * This product includes cryptographic software written by Eric Young + * (eay@cryptsoft.com). This product includes software written by Tim + * Hudson (tjh@cryptsoft.com). + * + */ + +#include + +#include +#include +#include +#include +#include + + +#define CLIENT_VERSION_LEN 2 +#define SESSION_ID_LEN_LEN 1 +#define CIPHERS_LEN_LEN 2 +#define COMPRESSION_LEN_LEN 1 +#define EXTENSIONS_LEN_LEN 2 +#define EXTENSION_TYPE_LEN 2 +#define EXTENSION_SIZE_LEN 2 + + +#define TOTAL_NUM_TESTS 2 + +/* + * Test that explicitly setting ticket data results in it appearing in the + * ClientHello for TLS1.2 + */ +#define TEST_SET_SESSION_TICK_DATA_TLS_1_2 0 + +/* + * Test that explicitly setting ticket data results in it appearing in the + * ClientHello for a negotiated SSL/TLS version + */ +#define TEST_SET_SESSION_TICK_DATA_VER_NEG 1 + +int main(int argc, char *argv[]) +{ + SSL_CTX *ctx; + SSL *con; + BIO *rbio; + BIO *wbio; + BIO *err; + long len; + unsigned char *data; + unsigned char *dataend; + char *dummytick = "Hello World!"; + unsigned int tmplen; + unsigned int type; + unsigned int size; + int testresult = 0; + int currtest = 0; + + SSL_library_init(); + SSL_load_error_strings(); + + err = BIO_new_fp(stderr, BIO_NOCLOSE | BIO_FP_TEXT); + + CRYPTO_malloc_debug_init(); + CRYPTO_set_mem_debug_options(V_CRYPTO_MDEBUG_ALL); + CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON); + + /* + * For each test set up an SSL_CTX and SSL and see what ClientHello gets + * produced when we try to connect + */ + for (; currtest < TOTAL_NUM_TESTS; currtest++) { + testresult = 0; + if (currtest == TEST_SET_SESSION_TICK_DATA_TLS_1_2) { + ctx = SSL_CTX_new(TLSv1_2_method()); + } else { + ctx = SSL_CTX_new(SSLv23_method()); + } + con = SSL_new(ctx); + + rbio = BIO_new(BIO_s_mem()); + wbio = BIO_new(BIO_s_mem()); + SSL_set_bio(con, rbio, wbio); + SSL_set_connect_state(con); + + if (currtest == TEST_SET_SESSION_TICK_DATA_TLS_1_2 + || currtest == TEST_SET_SESSION_TICK_DATA_VER_NEG) { + if (!SSL_set_session_ticket_ext(con, dummytick, strlen(dummytick))) + goto end; + } + + if (SSL_connect(con) > 0) { + /* This shouldn't succeed because we don't have a server! */ + goto end; + } + + len = BIO_get_mem_data(wbio, (char **)&data); + dataend = data + len; + + /* Skip the record header */ + data += SSL3_RT_HEADER_LENGTH; + /* Skip the handshake message header */ + data += SSL3_HM_HEADER_LENGTH; + /* Skip client version and random */ + data += CLIENT_VERSION_LEN + SSL3_RANDOM_SIZE; + if (data + SESSION_ID_LEN_LEN > dataend) + goto end; + /* Skip session id */ + tmplen = *data; + data += SESSION_ID_LEN_LEN + tmplen; + if (data + CIPHERS_LEN_LEN > dataend) + goto end; + /* Skip ciphers */ + tmplen = ((*data) << 8) | *(data + 1); + data += CIPHERS_LEN_LEN + tmplen; + if (data + COMPRESSION_LEN_LEN > dataend) + goto end; + /* Skip compression */ + tmplen = *data; + data += COMPRESSION_LEN_LEN + tmplen; + if (data + EXTENSIONS_LEN_LEN > dataend) + goto end; + /* Extensions len */ + tmplen = ((*data) << 8) | *(data + 1); + data += EXTENSIONS_LEN_LEN; + if (data + tmplen > dataend) + goto end; + + /* Loop through all extensions */ + while (tmplen > EXTENSION_TYPE_LEN + EXTENSION_SIZE_LEN) { + type = ((*data) << 8) | *(data + 1); + data += EXTENSION_TYPE_LEN; + size = ((*data) << 8) | *(data + 1); + data += EXTENSION_SIZE_LEN; + if (data + size > dataend) + goto end; + + if (type == TLSEXT_TYPE_session_ticket) { + if (currtest == TEST_SET_SESSION_TICK_DATA_TLS_1_2 + || currtest == TEST_SET_SESSION_TICK_DATA_VER_NEG) { + if (size == strlen(dummytick) + && memcmp(data, dummytick, size) == 0) { + /* Ticket data is as we expected */ + testresult = 1; + } else { + printf("Received session ticket is not as expected\n"); + } + break; + } + } + + tmplen -= EXTENSION_TYPE_LEN + EXTENSION_SIZE_LEN + size; + data += size; + } + + end: + SSL_free(con); + SSL_CTX_free(ctx); + if (!testresult) { + printf("ClientHello test: FAILED (Test %d)\n", currtest); + break; + } + } + + ERR_free_strings(); + ERR_remove_thread_state(NULL); + EVP_cleanup(); + CRYPTO_cleanup_all_ex_data(); + CRYPTO_mem_leaks(err); + + return testresult?0:1; +} diff --git a/deps/openssl/openssl/ssl/d1_both.c b/deps/openssl/openssl/ssl/d1_both.c index 8dd8ea33ca79cd..d453c07c8e69ab 100644 --- a/deps/openssl/openssl/ssl/d1_both.c +++ b/deps/openssl/openssl/ssl/d1_both.c @@ -1490,9 +1490,12 @@ int dtls1_shutdown(SSL *s) { int ret; #ifndef OPENSSL_NO_SCTP - if (BIO_dgram_is_sctp(SSL_get_wbio(s)) && + BIO *wbio; + + wbio = SSL_get_wbio(s); + if (wbio != NULL && BIO_dgram_is_sctp(wbio) && !(s->shutdown & SSL_SENT_SHUTDOWN)) { - ret = BIO_dgram_sctp_wait_for_dry(SSL_get_wbio(s)); + ret = BIO_dgram_sctp_wait_for_dry(wbio); if (ret < 0) return -1; diff --git a/deps/openssl/openssl/ssl/d1_clnt.c b/deps/openssl/openssl/ssl/d1_clnt.c index 377c1e61f75ced..eb371a255f89bf 100644 --- a/deps/openssl/openssl/ssl/d1_clnt.c +++ b/deps/openssl/openssl/ssl/d1_clnt.c @@ -299,13 +299,12 @@ int dtls1_connect(SSL *s) #endif case SSL3_ST_CW_CLNT_HELLO_A: - case SSL3_ST_CW_CLNT_HELLO_B: - s->shutdown = 0; /* every DTLS ClientHello resets Finished MAC */ ssl3_init_finished_mac(s); + case SSL3_ST_CW_CLNT_HELLO_B: dtls1_start_timer(s); ret = dtls1_client_hello(s); if (ret <= 0) @@ -350,11 +349,15 @@ int dtls1_connect(SSL *s) sizeof(DTLS1_SCTP_AUTH_LABEL), DTLS1_SCTP_AUTH_LABEL); - SSL_export_keying_material(s, sctpauthkey, + if (SSL_export_keying_material(s, sctpauthkey, sizeof(sctpauthkey), labelbuffer, sizeof(labelbuffer), NULL, 0, - 0); + 0) <= 0) { + ret = -1; + s->state = SSL_ST_ERR; + goto end; + } BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY, @@ -362,6 +365,10 @@ int dtls1_connect(SSL *s) #endif s->state = SSL3_ST_CR_FINISHED_A; + if (s->tlsext_ticket_expected) { + /* receive renewed session ticket */ + s->state = SSL3_ST_CR_SESSION_TICKET_A; + } } else s->state = DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A; } @@ -484,9 +491,13 @@ int dtls1_connect(SSL *s) snprintf((char *)labelbuffer, sizeof(DTLS1_SCTP_AUTH_LABEL), DTLS1_SCTP_AUTH_LABEL); - SSL_export_keying_material(s, sctpauthkey, + if (SSL_export_keying_material(s, sctpauthkey, sizeof(sctpauthkey), labelbuffer, - sizeof(labelbuffer), NULL, 0, 0); + sizeof(labelbuffer), NULL, 0, 0) <= 0) { + ret = -1; + s->state = SSL_ST_ERR; + goto end; + } BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY, sizeof(sctpauthkey), sctpauthkey); diff --git a/deps/openssl/openssl/ssl/d1_srvr.c b/deps/openssl/openssl/ssl/d1_srvr.c index 41c7dc519f1b76..f01b8a693f4e0b 100644 --- a/deps/openssl/openssl/ssl/d1_srvr.c +++ b/deps/openssl/openssl/ssl/d1_srvr.c @@ -267,6 +267,19 @@ int dtls1_accept(SSL *s) ssl3_init_finished_mac(s); s->state = SSL3_ST_SR_CLNT_HELLO_A; s->ctx->stats.sess_accept++; + } else if (!s->s3->send_connection_binding && + !(s->options & + SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)) { + /* + * Server attempting to renegotiate with client that doesn't + * support secure renegotiation. + */ + SSLerr(SSL_F_DTLS1_ACCEPT, + SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED); + ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE); + ret = -1; + s->state = SSL_ST_ERR; + goto end; } else { /* * s->state == SSL_ST_RENEGOTIATE, we will just send a @@ -405,9 +418,13 @@ int dtls1_accept(SSL *s) snprintf((char *)labelbuffer, sizeof(DTLS1_SCTP_AUTH_LABEL), DTLS1_SCTP_AUTH_LABEL); - SSL_export_keying_material(s, sctpauthkey, - sizeof(sctpauthkey), labelbuffer, - sizeof(labelbuffer), NULL, 0, 0); + if (SSL_export_keying_material(s, sctpauthkey, + sizeof(sctpauthkey), labelbuffer, + sizeof(labelbuffer), NULL, 0, 0) <= 0) { + ret = -1; + s->state = SSL_ST_ERR; + goto end; + } BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY, sizeof(sctpauthkey), sctpauthkey); @@ -628,9 +645,13 @@ int dtls1_accept(SSL *s) snprintf((char *)labelbuffer, sizeof(DTLS1_SCTP_AUTH_LABEL), DTLS1_SCTP_AUTH_LABEL); - SSL_export_keying_material(s, sctpauthkey, + if (SSL_export_keying_material(s, sctpauthkey, sizeof(sctpauthkey), labelbuffer, - sizeof(labelbuffer), NULL, 0, 0); + sizeof(labelbuffer), NULL, 0, 0) <= 0) { + ret = -1; + s->state = SSL_ST_ERR; + goto end; + } BIO_ctrl(SSL_get_wbio(s), BIO_CTRL_DGRAM_SCTP_ADD_AUTH_KEY, sizeof(sctpauthkey), sctpauthkey); diff --git a/deps/openssl/openssl/ssl/s23_clnt.c b/deps/openssl/openssl/ssl/s23_clnt.c index 3766567c8f80a0..2b2855dee4a989 100644 --- a/deps/openssl/openssl/ssl/s23_clnt.c +++ b/deps/openssl/openssl/ssl/s23_clnt.c @@ -373,12 +373,13 @@ static int ssl23_client_hello(SSL *s) buf = (unsigned char *)s->init_buf->data; if (s->state == SSL23_ST_CW_CLNT_HELLO_A) { -#if 0 - /* don't reuse session-id's */ + /* + * Since we're sending s23 client hello, we're not reusing a session, as + * we'd be using the method from the saved session instead + */ if (!ssl_get_new_session(s, 0)) { - return (-1); + return -1; } -#endif p = s->s3->client_random; if (ssl_fill_hello_random(s, 0, p, SSL3_RANDOM_SIZE) <= 0) @@ -439,9 +440,6 @@ static int ssl23_client_hello(SSL *s) /* * put in the session-id length (zero since there is no reuse) */ -#if 0 - s->session->session_id_length = 0; -#endif s2n(0, d); if (s->options & SSL_OP_NETSCAPE_CHALLENGE_BUG) @@ -729,6 +727,8 @@ static int ssl23_get_server_hello(SSL *s) goto err; } + s->session->ssl_version = s->version; + /* ensure that TLS_MAX_VERSION is up-to-date */ OPENSSL_assert(s->version <= TLS_MAX_VERSION); @@ -784,13 +784,6 @@ static int ssl23_get_server_hello(SSL *s) } s->init_num = 0; - /* - * Since, if we are sending a ssl23 client hello, we are not reusing a - * session-id - */ - if (!ssl_get_new_session(s, 0)) - goto err; - return (SSL_connect(s)); err: return (-1); diff --git a/deps/openssl/openssl/ssl/s3_cbc.c b/deps/openssl/openssl/ssl/s3_cbc.c index 2fb71f277e9cfa..b3bff743495ce7 100644 --- a/deps/openssl/openssl/ssl/s3_cbc.c +++ b/deps/openssl/openssl/ssl/s3_cbc.c @@ -411,8 +411,9 @@ char ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx) * functions, above, we know that data_plus_mac_size is large enough to contain * a padding byte and MAC. (If the padding was invalid, it might contain the * padding too. ) + * Returns 1 on success or 0 on error */ -void ssl3_cbc_digest_record(const EVP_MD_CTX *ctx, +int ssl3_cbc_digest_record(const EVP_MD_CTX *ctx, unsigned char *md_out, size_t *md_out_size, const unsigned char header[13], @@ -455,7 +456,8 @@ void ssl3_cbc_digest_record(const EVP_MD_CTX *ctx, switch (EVP_MD_CTX_type(ctx)) { case NID_md5: - MD5_Init((MD5_CTX *)md_state.c); + if (MD5_Init((MD5_CTX *)md_state.c) <= 0) + return 0; md_final_raw = tls1_md5_final_raw; md_transform = (void (*)(void *ctx, const unsigned char *block))MD5_Transform; @@ -464,7 +466,8 @@ void ssl3_cbc_digest_record(const EVP_MD_CTX *ctx, length_is_big_endian = 0; break; case NID_sha1: - SHA1_Init((SHA_CTX *)md_state.c); + if (SHA1_Init((SHA_CTX *)md_state.c) <= 0) + return 0; md_final_raw = tls1_sha1_final_raw; md_transform = (void (*)(void *ctx, const unsigned char *block))SHA1_Transform; @@ -472,14 +475,16 @@ void ssl3_cbc_digest_record(const EVP_MD_CTX *ctx, break; #ifndef OPENSSL_NO_SHA256 case NID_sha224: - SHA224_Init((SHA256_CTX *)md_state.c); + if (SHA224_Init((SHA256_CTX *)md_state.c) <= 0) + return 0; md_final_raw = tls1_sha256_final_raw; md_transform = (void (*)(void *ctx, const unsigned char *block))SHA256_Transform; md_size = 224 / 8; break; case NID_sha256: - SHA256_Init((SHA256_CTX *)md_state.c); + if (SHA256_Init((SHA256_CTX *)md_state.c) <= 0) + return 0; md_final_raw = tls1_sha256_final_raw; md_transform = (void (*)(void *ctx, const unsigned char *block))SHA256_Transform; @@ -488,7 +493,8 @@ void ssl3_cbc_digest_record(const EVP_MD_CTX *ctx, #endif #ifndef OPENSSL_NO_SHA512 case NID_sha384: - SHA384_Init((SHA512_CTX *)md_state.c); + if (SHA384_Init((SHA512_CTX *)md_state.c) <= 0) + return 0; md_final_raw = tls1_sha512_final_raw; md_transform = (void (*)(void *ctx, const unsigned char *block))SHA512_Transform; @@ -497,7 +503,8 @@ void ssl3_cbc_digest_record(const EVP_MD_CTX *ctx, md_length_size = 16; break; case NID_sha512: - SHA512_Init((SHA512_CTX *)md_state.c); + if (SHA512_Init((SHA512_CTX *)md_state.c) <= 0) + return 0; md_final_raw = tls1_sha512_final_raw; md_transform = (void (*)(void *ctx, const unsigned char *block))SHA512_Transform; @@ -514,7 +521,7 @@ void ssl3_cbc_digest_record(const EVP_MD_CTX *ctx, OPENSSL_assert(0); if (md_out_size) *md_out_size = -1; - return; + return 0; } OPENSSL_assert(md_length_size <= MAX_HASH_BIT_COUNT_BYTES); @@ -652,7 +659,7 @@ void ssl3_cbc_digest_record(const EVP_MD_CTX *ctx, */ if (header_length <= md_block_size) { /* Should never happen */ - return; + return 0; } overhang = header_length - md_block_size; md_transform(md_state.c, header); @@ -733,26 +740,34 @@ void ssl3_cbc_digest_record(const EVP_MD_CTX *ctx, } EVP_MD_CTX_init(&md_ctx); - EVP_DigestInit_ex(&md_ctx, ctx->digest, NULL /* engine */ ); + if (EVP_DigestInit_ex(&md_ctx, ctx->digest, NULL /* engine */ ) <= 0) + goto err; if (is_sslv3) { /* We repurpose |hmac_pad| to contain the SSLv3 pad2 block. */ memset(hmac_pad, 0x5c, sslv3_pad_length); - EVP_DigestUpdate(&md_ctx, mac_secret, mac_secret_length); - EVP_DigestUpdate(&md_ctx, hmac_pad, sslv3_pad_length); - EVP_DigestUpdate(&md_ctx, mac_out, md_size); + if (EVP_DigestUpdate(&md_ctx, mac_secret, mac_secret_length) <= 0 + || EVP_DigestUpdate(&md_ctx, hmac_pad, sslv3_pad_length) <= 0 + || EVP_DigestUpdate(&md_ctx, mac_out, md_size) <= 0) + goto err; } else { /* Complete the HMAC in the standard manner. */ for (i = 0; i < md_block_size; i++) hmac_pad[i] ^= 0x6a; - EVP_DigestUpdate(&md_ctx, hmac_pad, md_block_size); - EVP_DigestUpdate(&md_ctx, mac_out, md_size); + if (EVP_DigestUpdate(&md_ctx, hmac_pad, md_block_size) <= 0 + || EVP_DigestUpdate(&md_ctx, mac_out, md_size) <= 0) + goto err; } EVP_DigestFinal(&md_ctx, md_out, &md_out_size_u); if (md_out_size) *md_out_size = md_out_size_u; EVP_MD_CTX_cleanup(&md_ctx); + + return 1; +err: + EVP_MD_CTX_cleanup(&md_ctx); + return 0; } #ifdef OPENSSL_FIPS diff --git a/deps/openssl/openssl/ssl/s3_clnt.c b/deps/openssl/openssl/ssl/s3_clnt.c index 35ad1217a65578..0578a9c4e5645e 100644 --- a/deps/openssl/openssl/ssl/s3_clnt.c +++ b/deps/openssl/openssl/ssl/s3_clnt.c @@ -1624,6 +1624,12 @@ int ssl3_get_key_exchange(SSL *s) } p += i; + if (BN_is_zero(dh->p)) { + SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, SSL_R_BAD_DH_P_VALUE); + goto f_err; + } + + if (2 > n - param_len) { SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, SSL_R_LENGTH_TOO_SHORT); goto f_err; @@ -1644,6 +1650,11 @@ int ssl3_get_key_exchange(SSL *s) } p += i; + if (BN_is_zero(dh->g)) { + SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, SSL_R_BAD_DH_G_VALUE); + goto f_err; + } + if (2 > n - param_len) { SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, SSL_R_LENGTH_TOO_SHORT); goto f_err; @@ -1665,6 +1676,11 @@ int ssl3_get_key_exchange(SSL *s) p += i; n -= param_len; + if (BN_is_zero(dh->pub_key)) { + SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, SSL_R_BAD_DH_PUB_KEY_VALUE); + goto f_err; + } + # ifndef OPENSSL_NO_RSA if (alg_a & SSL_aRSA) pkey = @@ -1867,14 +1883,20 @@ int ssl3_get_key_exchange(SSL *s) q = md_buf; for (num = 2; num > 0; num--) { EVP_MD_CTX_set_flags(&md_ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW); - EVP_DigestInit_ex(&md_ctx, (num == 2) - ? s->ctx->md5 : s->ctx->sha1, NULL); - EVP_DigestUpdate(&md_ctx, &(s->s3->client_random[0]), - SSL3_RANDOM_SIZE); - EVP_DigestUpdate(&md_ctx, &(s->s3->server_random[0]), - SSL3_RANDOM_SIZE); - EVP_DigestUpdate(&md_ctx, param, param_len); - EVP_DigestFinal_ex(&md_ctx, q, &size); + if (EVP_DigestInit_ex(&md_ctx, + (num == 2) ? s->ctx->md5 : s->ctx->sha1, + NULL) <= 0 + || EVP_DigestUpdate(&md_ctx, &(s->s3->client_random[0]), + SSL3_RANDOM_SIZE) <= 0 + || EVP_DigestUpdate(&md_ctx, &(s->s3->server_random[0]), + SSL3_RANDOM_SIZE) <= 0 + || EVP_DigestUpdate(&md_ctx, param, param_len) <= 0 + || EVP_DigestFinal_ex(&md_ctx, q, &size) <= 0) { + SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, + ERR_R_INTERNAL_ERROR); + al = SSL_AD_INTERNAL_ERROR; + goto f_err; + } q += size; j += size; } @@ -1893,12 +1915,16 @@ int ssl3_get_key_exchange(SSL *s) } else #endif { - EVP_VerifyInit_ex(&md_ctx, md, NULL); - EVP_VerifyUpdate(&md_ctx, &(s->s3->client_random[0]), - SSL3_RANDOM_SIZE); - EVP_VerifyUpdate(&md_ctx, &(s->s3->server_random[0]), - SSL3_RANDOM_SIZE); - EVP_VerifyUpdate(&md_ctx, param, param_len); + if (EVP_VerifyInit_ex(&md_ctx, md, NULL) <= 0 + || EVP_VerifyUpdate(&md_ctx, &(s->s3->client_random[0]), + SSL3_RANDOM_SIZE) <= 0 + || EVP_VerifyUpdate(&md_ctx, &(s->s3->server_random[0]), + SSL3_RANDOM_SIZE) <= 0 + || EVP_VerifyUpdate(&md_ctx, param, param_len) <= 0) { + al = SSL_AD_INTERNAL_ERROR; + SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, ERR_R_EVP_LIB); + goto f_err; + } if (EVP_VerifyFinal(&md_ctx, p, (int)n, pkey) <= 0) { /* bad signature */ al = SSL_AD_DECRYPT_ERROR; @@ -2118,6 +2144,7 @@ int ssl3_get_new_session_ticket(SSL *s) long n; const unsigned char *p; unsigned char *d; + unsigned long ticket_lifetime_hint; n = s->method->ssl_get_message(s, SSL3_ST_CR_SESSION_TICKET_A, @@ -2136,6 +2163,19 @@ int ssl3_get_new_session_ticket(SSL *s) p = d = (unsigned char *)s->init_msg; + n2l(p, ticket_lifetime_hint); + n2s(p, ticklen); + /* ticket_lifetime_hint + ticket_length + ticket */ + if (ticklen + 6 != n) { + al = SSL_AD_DECODE_ERROR; + SSLerr(SSL_F_SSL3_GET_NEW_SESSION_TICKET, SSL_R_LENGTH_MISMATCH); + goto f_err; + } + + /* Server is allowed to change its mind and send an empty ticket. */ + if (ticklen == 0) + return 1; + if (s->session->session_id_length > 0) { int i = s->session_ctx->session_cache_mode; SSL_SESSION *new_sess; @@ -2167,14 +2207,6 @@ int ssl3_get_new_session_ticket(SSL *s) s->session = new_sess; } - n2l(p, s->session->tlsext_tick_lifetime_hint); - n2s(p, ticklen); - /* ticket_lifetime_hint + ticket_length + ticket */ - if (ticklen + 6 != n) { - al = SSL_AD_DECODE_ERROR; - SSLerr(SSL_F_SSL3_GET_NEW_SESSION_TICKET, SSL_R_LENGTH_MISMATCH); - goto f_err; - } if (s->session->tlsext_tick) { OPENSSL_free(s->session->tlsext_tick); s->session->tlsext_ticklen = 0; @@ -2185,6 +2217,7 @@ int ssl3_get_new_session_ticket(SSL *s) goto err; } memcpy(s->session->tlsext_tick, p, ticklen); + s->session->tlsext_tick_lifetime_hint = ticket_lifetime_hint; s->session->tlsext_ticklen = ticklen; /* * There are two ways to detect a resumed ticket session. One is to set @@ -2354,6 +2387,7 @@ int ssl3_send_client_key_exchange(SSL *s) || (pkey->pkey.rsa == NULL)) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR); + EVP_PKEY_free(pkey); goto err; } rsa = pkey->pkey.rsa; @@ -2801,6 +2835,11 @@ int ssl3_send_client_key_exchange(SSL *s) pkey_ctx = EVP_PKEY_CTX_new(pub_key = X509_get_pubkey(peer_cert), NULL); + if (pkey_ctx == NULL) { + SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, + ERR_R_MALLOC_FAILURE); + goto err; + } /* * If we have send a certificate, and certificate key * @@ -2810,10 +2849,13 @@ int ssl3_send_client_key_exchange(SSL *s) /* Otherwise, generate ephemeral key pair */ - EVP_PKEY_encrypt_init(pkey_ctx); - /* Generate session key */ - if (RAND_bytes(premaster_secret, 32) <= 0) { + if (pkey_ctx == NULL + || EVP_PKEY_encrypt_init(pkey_ctx) <= 0 + /* Generate session key */ + || RAND_bytes(premaster_secret, 32) <= 0) { EVP_PKEY_CTX_free(pkey_ctx); + SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, + ERR_R_INTERNAL_ERROR); goto err; } /* @@ -2834,13 +2876,18 @@ int ssl3_send_client_key_exchange(SSL *s) * data */ ukm_hash = EVP_MD_CTX_create(); - EVP_DigestInit(ukm_hash, - EVP_get_digestbynid(NID_id_GostR3411_94)); - EVP_DigestUpdate(ukm_hash, s->s3->client_random, - SSL3_RANDOM_SIZE); - EVP_DigestUpdate(ukm_hash, s->s3->server_random, - SSL3_RANDOM_SIZE); - EVP_DigestFinal_ex(ukm_hash, shared_ukm, &md_len); + if (EVP_DigestInit(ukm_hash, + EVP_get_digestbynid(NID_id_GostR3411_94)) <= 0 + || EVP_DigestUpdate(ukm_hash, s->s3->client_random, + SSL3_RANDOM_SIZE) <= 0 + || EVP_DigestUpdate(ukm_hash, s->s3->server_random, + SSL3_RANDOM_SIZE) <= 0 + || EVP_DigestFinal_ex(ukm_hash, shared_ukm, &md_len) <= 0) { + EVP_MD_CTX_destroy(ukm_hash); + SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, + ERR_R_INTERNAL_ERROR); + goto err; + } EVP_MD_CTX_destroy(ukm_hash); if (EVP_PKEY_CTX_ctrl (pkey_ctx, -1, EVP_PKEY_OP_ENCRYPT, EVP_PKEY_CTRL_SET_IV, 8, @@ -2856,7 +2903,7 @@ int ssl3_send_client_key_exchange(SSL *s) *(p++) = V_ASN1_SEQUENCE | V_ASN1_CONSTRUCTED; msglen = 255; if (EVP_PKEY_encrypt(pkey_ctx, tmp, &msglen, premaster_secret, 32) - < 0) { + <= 0) { SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, SSL_R_LIBRARY_BUG); goto err; @@ -3057,7 +3104,10 @@ int ssl3_send_client_verify(SSL *s) pkey = s->cert->key->privatekey; /* Create context from key and test if sha1 is allowed as digest */ pctx = EVP_PKEY_CTX_new(pkey, NULL); - EVP_PKEY_sign_init(pctx); + if (pctx == NULL || EVP_PKEY_sign_init(pctx) <= 0) { + SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY, ERR_R_INTERNAL_ERROR); + goto err; + } if (EVP_PKEY_CTX_set_signature_md(pctx, EVP_sha1()) > 0) { if (TLS1_get_version(s) < TLS1_2_VERSION) s->method->ssl3_enc->cert_verify_mac(s, @@ -3194,7 +3244,6 @@ int ssl3_send_client_certificate(SSL *s) * If we get an error, we need to ssl->rwstate=SSL_X509_LOOKUP; * return(-1); We then get retied later */ - i = 0; i = ssl_do_client_cert_cb(s, &x509, &pkey); if (i < 0) { s->rwstate = SSL_X509_LOOKUP; diff --git a/deps/openssl/openssl/ssl/s3_enc.c b/deps/openssl/openssl/ssl/s3_enc.c index 152f40db582b8b..85ebac8d849a09 100644 --- a/deps/openssl/openssl/ssl/s3_enc.c +++ b/deps/openssl/openssl/ssl/s3_enc.c @@ -253,7 +253,10 @@ int ssl3_change_cipher_state(SSL *s, int which) EVP_CIPHER_CTX_init(s->enc_read_ctx); dd = s->enc_read_ctx; - ssl_replace_hash(&s->read_hash, m); + if (ssl_replace_hash(&s->read_hash, m) == NULL) { + SSLerr(SSL_F_SSL3_CHANGE_CIPHER_STATE, ERR_R_INTERNAL_ERROR); + goto err2; + } #ifndef OPENSSL_NO_COMP /* COMPRESS */ if (s->expand != NULL) { @@ -288,7 +291,10 @@ int ssl3_change_cipher_state(SSL *s, int which) */ EVP_CIPHER_CTX_init(s->enc_write_ctx); dd = s->enc_write_ctx; - ssl_replace_hash(&s->write_hash, m); + if (ssl_replace_hash(&s->write_hash, m) == NULL) { + SSLerr(SSL_F_SSL3_CHANGE_CIPHER_STATE, ERR_R_INTERNAL_ERROR); + goto err2; + } #ifndef OPENSSL_NO_COMP /* COMPRESS */ if (s->compress != NULL) { @@ -674,19 +680,21 @@ static int ssl3_handshake_mac(SSL *s, int md_nid, return 0; npad = (48 / n) * n; - if (sender != NULL) - EVP_DigestUpdate(&ctx, sender, len); - EVP_DigestUpdate(&ctx, s->session->master_key, - s->session->master_key_length); - EVP_DigestUpdate(&ctx, ssl3_pad_1, npad); - EVP_DigestFinal_ex(&ctx, md_buf, &i); - - EVP_DigestInit_ex(&ctx, EVP_MD_CTX_md(&ctx), NULL); - EVP_DigestUpdate(&ctx, s->session->master_key, - s->session->master_key_length); - EVP_DigestUpdate(&ctx, ssl3_pad_2, npad); - EVP_DigestUpdate(&ctx, md_buf, i); - EVP_DigestFinal_ex(&ctx, p, &ret); + if ((sender != NULL && EVP_DigestUpdate(&ctx, sender, len) <= 0) + || EVP_DigestUpdate(&ctx, s->session->master_key, + s->session->master_key_length) <= 0 + || EVP_DigestUpdate(&ctx, ssl3_pad_1, npad) <= 0 + || EVP_DigestFinal_ex(&ctx, md_buf, &i) <= 0 + + || EVP_DigestInit_ex(&ctx, EVP_MD_CTX_md(&ctx), NULL) <= 0 + || EVP_DigestUpdate(&ctx, s->session->master_key, + s->session->master_key_length) <= 0 + || EVP_DigestUpdate(&ctx, ssl3_pad_2, npad) <= 0 + || EVP_DigestUpdate(&ctx, md_buf, i) <= 0 + || EVP_DigestFinal_ex(&ctx, p, &ret) <= 0) { + SSLerr(SSL_F_SSL3_HANDSHAKE_MAC, ERR_R_INTERNAL_ERROR); + ret = 0; + } EVP_MD_CTX_cleanup(&ctx); @@ -758,33 +766,36 @@ int n_ssl3_mac(SSL *ssl, unsigned char *md, int send) header[j++] = rec->length & 0xff; /* Final param == is SSLv3 */ - ssl3_cbc_digest_record(hash, - md, &md_size, - header, rec->input, - rec->length + md_size, orig_len, - mac_sec, md_size, 1); + if (ssl3_cbc_digest_record(hash, + md, &md_size, + header, rec->input, + rec->length + md_size, orig_len, + mac_sec, md_size, 1) <= 0) + return -1; } else { unsigned int md_size_u; /* Chop the digest off the end :-) */ EVP_MD_CTX_init(&md_ctx); - EVP_MD_CTX_copy_ex(&md_ctx, hash); - EVP_DigestUpdate(&md_ctx, mac_sec, md_size); - EVP_DigestUpdate(&md_ctx, ssl3_pad_1, npad); - EVP_DigestUpdate(&md_ctx, seq, 8); rec_char = rec->type; - EVP_DigestUpdate(&md_ctx, &rec_char, 1); p = md; s2n(rec->length, p); - EVP_DigestUpdate(&md_ctx, md, 2); - EVP_DigestUpdate(&md_ctx, rec->input, rec->length); - EVP_DigestFinal_ex(&md_ctx, md, NULL); - - EVP_MD_CTX_copy_ex(&md_ctx, hash); - EVP_DigestUpdate(&md_ctx, mac_sec, md_size); - EVP_DigestUpdate(&md_ctx, ssl3_pad_2, npad); - EVP_DigestUpdate(&md_ctx, md, md_size); - EVP_DigestFinal_ex(&md_ctx, md, &md_size_u); + if (EVP_MD_CTX_copy_ex(&md_ctx, hash) <= 0 + || EVP_DigestUpdate(&md_ctx, mac_sec, md_size) <= 0 + || EVP_DigestUpdate(&md_ctx, ssl3_pad_1, npad) <= 0 + || EVP_DigestUpdate(&md_ctx, seq, 8) <= 0 + || EVP_DigestUpdate(&md_ctx, &rec_char, 1) <= 0 + || EVP_DigestUpdate(&md_ctx, md, 2) <= 0 + || EVP_DigestUpdate(&md_ctx, rec->input, rec->length) <= 0 + || EVP_DigestFinal_ex(&md_ctx, md, NULL) <= 0 + || EVP_MD_CTX_copy_ex(&md_ctx, hash) <= 0 + || EVP_DigestUpdate(&md_ctx, mac_sec, md_size) <= 0 + || EVP_DigestUpdate(&md_ctx, ssl3_pad_2, npad) <= 0 + || EVP_DigestUpdate(&md_ctx, md, md_size) <= 0 + || EVP_DigestFinal_ex(&md_ctx, md, &md_size_u) <= 0) { + EVP_MD_CTX_cleanup(&md_ctx); + return -1; + } md_size = md_size_u; EVP_MD_CTX_cleanup(&md_ctx); @@ -826,17 +837,24 @@ int ssl3_generate_master_secret(SSL *s, unsigned char *out, unsigned char *p, EVP_MD_CTX_init(&ctx); for (i = 0; i < 3; i++) { - EVP_DigestInit_ex(&ctx, s->ctx->sha1, NULL); - EVP_DigestUpdate(&ctx, salt[i], strlen((const char *)salt[i])); - EVP_DigestUpdate(&ctx, p, len); - EVP_DigestUpdate(&ctx, &(s->s3->client_random[0]), SSL3_RANDOM_SIZE); - EVP_DigestUpdate(&ctx, &(s->s3->server_random[0]), SSL3_RANDOM_SIZE); - EVP_DigestFinal_ex(&ctx, buf, &n); - - EVP_DigestInit_ex(&ctx, s->ctx->md5, NULL); - EVP_DigestUpdate(&ctx, p, len); - EVP_DigestUpdate(&ctx, buf, n); - EVP_DigestFinal_ex(&ctx, out, &n); + if (EVP_DigestInit_ex(&ctx, s->ctx->sha1, NULL) <= 0 + || EVP_DigestUpdate(&ctx, salt[i], + strlen((const char *)salt[i])) <= 0 + || EVP_DigestUpdate(&ctx, p, len) <= 0 + || EVP_DigestUpdate(&ctx, &(s->s3->client_random[0]), + SSL3_RANDOM_SIZE) <= 0 + || EVP_DigestUpdate(&ctx, &(s->s3->server_random[0]), + SSL3_RANDOM_SIZE) <= 0 + || EVP_DigestFinal_ex(&ctx, buf, &n) <= 0 + + || EVP_DigestInit_ex(&ctx, s->ctx->md5, NULL) <= 0 + || EVP_DigestUpdate(&ctx, p, len) <= 0 + || EVP_DigestUpdate(&ctx, buf, n) <= 0 + || EVP_DigestFinal_ex(&ctx, out, &n) <= 0) { + SSLerr(SSL_F_SSL3_GENERATE_MASTER_SECRET, ERR_R_INTERNAL_ERROR); + ret = 0; + break; + } out += n; ret += n; } diff --git a/deps/openssl/openssl/ssl/s3_lib.c b/deps/openssl/openssl/ssl/s3_lib.c index de917d3f836ff2..f716d77c812b76 100644 --- a/deps/openssl/openssl/ssl/s3_lib.c +++ b/deps/openssl/openssl/ssl/s3_lib.c @@ -2955,7 +2955,7 @@ int ssl3_new(SSL *s) void ssl3_free(SSL *s) { - if (s == NULL) + if (s == NULL || s->s3 == NULL) return; #ifdef TLSEXT_TYPE_opaque_prf_input diff --git a/deps/openssl/openssl/ssl/s3_srvr.c b/deps/openssl/openssl/ssl/s3_srvr.c index 3a5f71d745fafd..fcfc2fb9698f48 100644 --- a/deps/openssl/openssl/ssl/s3_srvr.c +++ b/deps/openssl/openssl/ssl/s3_srvr.c @@ -383,7 +383,6 @@ int ssl3_accept(SSL *s) */ if (al != TLS1_AD_UNKNOWN_PSK_IDENTITY) SSLerr(SSL_F_SSL3_ACCEPT, SSL_R_CLIENTHELLO_TLSEXT); - ret = SSL_TLSEXT_ERR_ALERT_FATAL; ret = -1; s->state = SSL_ST_ERR; goto end; @@ -967,7 +966,7 @@ int ssl3_check_client_hello(SSL *s) int ssl3_get_client_hello(SSL *s) { - int i, j, ok, al, ret = -1; + int i, j, ok, al, ret = -1, cookie_valid = 0; unsigned int cookie_len; long n; unsigned long id; @@ -1155,8 +1154,7 @@ int ssl3_get_client_hello(SSL *s) SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_COOKIE_MISMATCH); goto f_err; } - - ret = 2; + cookie_valid = 1; } p += cookie_len; @@ -1264,7 +1262,7 @@ int ssl3_get_client_hello(SSL *s) #ifndef OPENSSL_NO_TLSEXT /* TLS extensions */ if (s->version >= SSL3_VERSION) { - if (!ssl_parse_clienthello_tlsext(s, &p, d, n, &al)) { + if (!ssl_parse_clienthello_tlsext(s, &p, d + n, &al)) { /* 'al' set by ssl_parse_clienthello_tlsext */ SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_PARSE_TLSEXT); goto f_err; @@ -1492,8 +1490,7 @@ int ssl3_get_client_hello(SSL *s) } } - if (ret < 0) - ret = 1; + ret = cookie_valid ? 2 : 1; if (0) { f_err: ssl3_send_alert(s, SSL3_AL_FATAL, al); @@ -1503,7 +1500,7 @@ int ssl3_get_client_hello(SSL *s) if (ciphers != NULL) sk_SSL_CIPHER_free(ciphers); - return (ret); + return ret; } int ssl3_send_server_hello(SSL *s) @@ -1987,14 +1984,22 @@ int ssl3_send_server_key_exchange(SSL *s) for (num = 2; num > 0; num--) { EVP_MD_CTX_set_flags(&md_ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW); - EVP_DigestInit_ex(&md_ctx, (num == 2) - ? s->ctx->md5 : s->ctx->sha1, NULL); - EVP_DigestUpdate(&md_ctx, &(s->s3->client_random[0]), - SSL3_RANDOM_SIZE); - EVP_DigestUpdate(&md_ctx, &(s->s3->server_random[0]), - SSL3_RANDOM_SIZE); - EVP_DigestUpdate(&md_ctx, &(d[4]), n); - EVP_DigestFinal_ex(&md_ctx, q, (unsigned int *)&i); + if (EVP_DigestInit_ex(&md_ctx, + (num == 2) ? s->ctx->md5 + : s->ctx->sha1, + NULL) <= 0 + || EVP_DigestUpdate(&md_ctx, &(s->s3->client_random[0]), + SSL3_RANDOM_SIZE) <= 0 + || EVP_DigestUpdate(&md_ctx, &(s->s3->server_random[0]), + SSL3_RANDOM_SIZE) <= 0 + || EVP_DigestUpdate(&md_ctx, &(d[4]), n) <= 0 + || EVP_DigestFinal_ex(&md_ctx, q, + (unsigned int *)&i) <= 0) { + SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE, + ERR_LIB_EVP); + al = SSL_AD_INTERNAL_ERROR; + goto f_err; + } q += i; j += i; } @@ -2024,16 +2029,17 @@ int ssl3_send_server_key_exchange(SSL *s) #ifdef SSL_DEBUG fprintf(stderr, "Using hash %s\n", EVP_MD_name(md)); #endif - EVP_SignInit_ex(&md_ctx, md, NULL); - EVP_SignUpdate(&md_ctx, &(s->s3->client_random[0]), - SSL3_RANDOM_SIZE); - EVP_SignUpdate(&md_ctx, &(s->s3->server_random[0]), - SSL3_RANDOM_SIZE); - EVP_SignUpdate(&md_ctx, &(d[4]), n); - if (!EVP_SignFinal(&md_ctx, &(p[2]), - (unsigned int *)&i, pkey)) { + if (EVP_SignInit_ex(&md_ctx, md, NULL) <= 0 + || EVP_SignUpdate(&md_ctx, &(s->s3->client_random[0]), + SSL3_RANDOM_SIZE) <= 0 + || EVP_SignUpdate(&md_ctx, &(s->s3->server_random[0]), + SSL3_RANDOM_SIZE) <= 0 + || EVP_SignUpdate(&md_ctx, &(d[4]), n) <= 0 + || EVP_SignFinal(&md_ctx, &(p[2]), + (unsigned int *)&i, pkey) <= 0) { SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE, ERR_LIB_EVP); - goto err; + al = SSL_AD_INTERNAL_ERROR; + goto f_err; } s2n(i, p); n += i + 2; @@ -2879,7 +2885,15 @@ int ssl3_get_client_key_exchange(SSL *s) pk = s->cert->pkeys[SSL_PKEY_GOST01].privatekey; pkey_ctx = EVP_PKEY_CTX_new(pk, NULL); - EVP_PKEY_decrypt_init(pkey_ctx); + if (pkey_ctx == NULL) { + al = SSL_AD_INTERNAL_ERROR; + SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, ERR_R_MALLOC_FAILURE); + goto f_err; + } + if (EVP_PKEY_decrypt_init(pkey_ctx) <= 0) { + SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR); + goto gerr; + } /* * If client certificate is present and is of the same type, maybe * use it for key exchange. Don't mind errors from @@ -3123,7 +3137,17 @@ int ssl3_get_cert_verify(SSL *s) unsigned char signature[64]; int idx; EVP_PKEY_CTX *pctx = EVP_PKEY_CTX_new(pkey, NULL); - EVP_PKEY_verify_init(pctx); + if (pctx == NULL) { + al = SSL_AD_INTERNAL_ERROR; + SSLerr(SSL_F_SSL3_GET_CERT_VERIFY, ERR_R_MALLOC_FAILURE); + goto f_err; + } + if (EVP_PKEY_verify_init(pctx) <= 0) { + EVP_PKEY_CTX_free(pctx); + al = SSL_AD_INTERNAL_ERROR; + SSLerr(SSL_F_SSL3_GET_CERT_VERIFY, ERR_R_INTERNAL_ERROR); + goto f_err; + } if (i != 64) { fprintf(stderr, "GOST signature length is %d", i); } diff --git a/deps/openssl/openssl/ssl/ssl.h b/deps/openssl/openssl/ssl/ssl.h index d2ab0c074c9982..b8456c692bd946 100644 --- a/deps/openssl/openssl/ssl/ssl.h +++ b/deps/openssl/openssl/ssl/ssl.h @@ -2313,6 +2313,7 @@ void ERR_load_SSL_strings(void); # define SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC 292 # define SSL_F_SSL3_ENC 134 # define SSL_F_SSL3_GENERATE_KEY_BLOCK 238 +# define SSL_F_SSL3_GENERATE_MASTER_SECRET 388 # define SSL_F_SSL3_GET_CERTIFICATE_REQUEST 135 # define SSL_F_SSL3_GET_CERT_STATUS 289 # define SSL_F_SSL3_GET_CERT_VERIFY 136 @@ -2465,8 +2466,11 @@ void ERR_load_SSL_strings(void); # define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK 106 # define SSL_R_BAD_DECOMPRESSION 107 # define SSL_R_BAD_DH_G_LENGTH 108 +# define SSL_R_BAD_DH_G_VALUE 375 # define SSL_R_BAD_DH_PUB_KEY_LENGTH 109 +# define SSL_R_BAD_DH_PUB_KEY_VALUE 393 # define SSL_R_BAD_DH_P_LENGTH 110 +# define SSL_R_BAD_DH_P_VALUE 395 # define SSL_R_BAD_DIGEST_LENGTH 111 # define SSL_R_BAD_DSA_SIGNATURE 112 # define SSL_R_BAD_ECC_CERT 304 diff --git a/deps/openssl/openssl/ssl/ssl3.h b/deps/openssl/openssl/ssl/ssl3.h index 2dd54626588a24..e9b1170d7b0e0b 100644 --- a/deps/openssl/openssl/ssl/ssl3.h +++ b/deps/openssl/openssl/ssl/ssl3.h @@ -263,6 +263,8 @@ extern "C" { # define SSL3_SESSION_ID_SIZE 32 # define SSL3_RT_HEADER_LENGTH 5 +# define SSL3_HM_HEADER_LENGTH 4 + # ifndef SSL3_ALIGN_PAYLOAD /* * Some will argue that this increases memory footprint, but it's not diff --git a/deps/openssl/openssl/ssl/ssl_asn1.c b/deps/openssl/openssl/ssl/ssl_asn1.c index 39d48eabf03b95..35cc27c5e9855e 100644 --- a/deps/openssl/openssl/ssl/ssl_asn1.c +++ b/deps/openssl/openssl/ssl/ssl_asn1.c @@ -121,13 +121,16 @@ typedef struct ssl_session_asn1_st { int i2d_SSL_SESSION(SSL_SESSION *in, unsigned char **pp) { #define LSIZE2 (sizeof(long)*2) - int v1 = 0, v2 = 0, v3 = 0, v4 = 0, v5 = 0, v7 = 0, v8 = 0; + int v1 = 0, v2 = 0, v3 = 0, v4 = 0, v5 = 0; unsigned char buf[4], ibuf1[LSIZE2], ibuf2[LSIZE2]; unsigned char ibuf3[LSIZE2], ibuf4[LSIZE2], ibuf5[LSIZE2]; #ifndef OPENSSL_NO_TLSEXT int v6 = 0, v9 = 0, v10 = 0; unsigned char ibuf6[LSIZE2]; #endif +#ifndef OPENSSL_NO_PSK + int v7 = 0, v8 = 0; +#endif #ifndef OPENSSL_NO_COMP unsigned char cbuf; int v11 = 0; diff --git a/deps/openssl/openssl/ssl/ssl_cert.c b/deps/openssl/openssl/ssl/ssl_cert.c index 5df2413f719080..9a4e10414967eb 100644 --- a/deps/openssl/openssl/ssl/ssl_cert.c +++ b/deps/openssl/openssl/ssl/ssl_cert.c @@ -206,6 +206,7 @@ CERT *ssl_cert_dup(CERT *cert) memset(ret, 0, sizeof(CERT)); + ret->references = 1; ret->key = &ret->pkeys[cert->key - &cert->pkeys[0]]; /* * or ret->key = ret->pkeys + (cert->key - cert->pkeys), if you find that @@ -282,7 +283,6 @@ CERT *ssl_cert_dup(CERT *cert) * chain is held inside SSL_CTX */ - ret->references = 1; /* * Set digests to defaults. NB: we don't copy existing values as they * will be set during handshake. diff --git a/deps/openssl/openssl/ssl/ssl_ciph.c b/deps/openssl/openssl/ssl/ssl_ciph.c index cac525e86009c7..cb559d987f60fc 100644 --- a/deps/openssl/openssl/ssl/ssl_ciph.c +++ b/deps/openssl/openssl/ssl/ssl_ciph.c @@ -356,10 +356,11 @@ static int get_optional_pkey_id(const char *pkey_name) const EVP_PKEY_ASN1_METHOD *ameth; int pkey_id = 0; ameth = EVP_PKEY_asn1_find_str(NULL, pkey_name, -1); - if (ameth) { - EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth); + if (ameth && EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, + ameth) > 0) { + return pkey_id; } - return pkey_id; + return 0; } #else @@ -371,7 +372,9 @@ static int get_optional_pkey_id(const char *pkey_name) int pkey_id = 0; ameth = EVP_PKEY_asn1_find_str(&tmpeng, pkey_name, -1); if (ameth) { - EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, ameth); + if (EVP_PKEY_asn1_get0_info(&pkey_id, NULL, NULL, NULL, NULL, + ameth) <= 0) + pkey_id = 0; } if (tmpeng) ENGINE_finish(tmpeng); diff --git a/deps/openssl/openssl/ssl/ssl_err.c b/deps/openssl/openssl/ssl/ssl_err.c index 88621b72500ff6..caa671a27078f6 100644 --- a/deps/openssl/openssl/ssl/ssl_err.c +++ b/deps/openssl/openssl/ssl/ssl_err.c @@ -162,6 +162,8 @@ static ERR_STRING_DATA SSL_str_functs[] = { {ERR_FUNC(SSL_F_SSL3_ENC), "SSL3_ENC"}, {ERR_FUNC(SSL_F_SSL3_CHECK_FINISHED), "SSL3_CHECK_FINISHED"}, {ERR_FUNC(SSL_F_SSL3_GENERATE_KEY_BLOCK), "SSL3_GENERATE_KEY_BLOCK"}, + {ERR_FUNC(SSL_F_SSL3_GENERATE_MASTER_SECRET), + "ssl3_generate_master_secret"}, {ERR_FUNC(SSL_F_SSL3_GET_CERTIFICATE_REQUEST), "SSL3_GET_CERTIFICATE_REQUEST"}, {ERR_FUNC(SSL_F_SSL3_GET_CERT_STATUS), "SSL3_GET_CERT_STATUS"}, @@ -369,8 +371,11 @@ static ERR_STRING_DATA SSL_str_reasons[] = { "bad data returned by callback"}, {ERR_REASON(SSL_R_BAD_DECOMPRESSION), "bad decompression"}, {ERR_REASON(SSL_R_BAD_DH_G_LENGTH), "bad dh g length"}, + {ERR_REASON(SSL_R_BAD_DH_G_VALUE), "bad dh g value"}, {ERR_REASON(SSL_R_BAD_DH_PUB_KEY_LENGTH), "bad dh pub key length"}, + {ERR_REASON(SSL_R_BAD_DH_PUB_KEY_VALUE), "bad dh pub key value"}, {ERR_REASON(SSL_R_BAD_DH_P_LENGTH), "bad dh p length"}, + {ERR_REASON(SSL_R_BAD_DH_P_VALUE), "bad dh p value"}, {ERR_REASON(SSL_R_BAD_DIGEST_LENGTH), "bad digest length"}, {ERR_REASON(SSL_R_BAD_DSA_SIGNATURE), "bad dsa signature"}, {ERR_REASON(SSL_R_BAD_ECC_CERT), "bad ecc cert"}, diff --git a/deps/openssl/openssl/ssl/ssl_lib.c b/deps/openssl/openssl/ssl/ssl_lib.c index e11746a6950890..93d1cbe438e443 100644 --- a/deps/openssl/openssl/ssl/ssl_lib.c +++ b/deps/openssl/openssl/ssl/ssl_lib.c @@ -307,6 +307,7 @@ SSL *SSL_new(SSL_CTX *ctx) s->options = ctx->options; s->mode = ctx->mode; s->max_cert_list = ctx->max_cert_list; + s->references = 1; if (ctx->cert != NULL) { /* @@ -375,7 +376,6 @@ SSL *SSL_new(SSL_CTX *ctx) if (!s->method->ssl_new(s)) goto err; - s->references = 1; s->server = (ctx->method->ssl_accept == ssl_undefined_function) ? 0 : 1; SSL_clear(s); @@ -3283,8 +3283,11 @@ EVP_MD_CTX *ssl_replace_hash(EVP_MD_CTX **hash, const EVP_MD *md) { ssl_clear_hash_ctx(hash); *hash = EVP_MD_CTX_create(); - if (md) - EVP_DigestInit_ex(*hash, md, NULL); + if (*hash == NULL || (md && EVP_DigestInit_ex(*hash, md, NULL) <= 0)) { + EVP_MD_CTX_destroy(*hash); + *hash = NULL; + return NULL; + } return *hash; } diff --git a/deps/openssl/openssl/ssl/ssl_locl.h b/deps/openssl/openssl/ssl/ssl_locl.h index a7f3f8dad4aa12..f5d9df6bc0e6d4 100644 --- a/deps/openssl/openssl/ssl/ssl_locl.h +++ b/deps/openssl/openssl/ssl/ssl_locl.h @@ -1154,7 +1154,7 @@ unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *buf, unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *buf, unsigned char *limit); int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **data, - unsigned char *d, int n, int *al); + unsigned char *limit, int *al); int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **data, unsigned char *d, int n, int *al); int ssl_prepare_clienthello_tlsext(SSL *s); @@ -1218,15 +1218,15 @@ int tls1_cbc_remove_padding(const SSL *s, SSL3_RECORD *rec, unsigned block_size, unsigned mac_size); char ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx); -void ssl3_cbc_digest_record(const EVP_MD_CTX *ctx, - unsigned char *md_out, - size_t *md_out_size, - const unsigned char header[13], - const unsigned char *data, - size_t data_plus_mac_size, - size_t data_plus_mac_plus_padding_size, - const unsigned char *mac_secret, - unsigned mac_secret_length, char is_sslv3); +int ssl3_cbc_digest_record(const EVP_MD_CTX *ctx, + unsigned char *md_out, + size_t *md_out_size, + const unsigned char header[13], + const unsigned char *data, + size_t data_plus_mac_size, + size_t data_plus_mac_plus_padding_size, + const unsigned char *mac_secret, + unsigned mac_secret_length, char is_sslv3); void tls_fips_digest_extra(const EVP_CIPHER_CTX *cipher_ctx, EVP_MD_CTX *mac_ctx, const unsigned char *data, diff --git a/deps/openssl/openssl/ssl/ssl_rsa.c b/deps/openssl/openssl/ssl/ssl_rsa.c index daf15dd97e1cf1..c91a998185b16f 100644 --- a/deps/openssl/openssl/ssl/ssl_rsa.c +++ b/deps/openssl/openssl/ssl/ssl_rsa.c @@ -160,7 +160,10 @@ int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa) } RSA_up_ref(rsa); - EVP_PKEY_assign_RSA(pkey, rsa); + if (EVP_PKEY_assign_RSA(pkey, rsa) <= 0) { + RSA_free(rsa); + return 0; + } ret = ssl_set_pkey(ssl->cert, pkey); EVP_PKEY_free(pkey); @@ -181,6 +184,15 @@ static int ssl_set_pkey(CERT *c, EVP_PKEY *pkey) if (c->pkeys[i].x509 != NULL) { EVP_PKEY *pktmp; pktmp = X509_get_pubkey(c->pkeys[i].x509); + if (pktmp == NULL) { + SSLerr(SSL_F_SSL_SET_PKEY, ERR_R_MALLOC_FAILURE); + EVP_PKEY_free(pktmp); + return 0; + } + /* + * The return code from EVP_PKEY_copy_parameters is deliberately + * ignored. Some EVP_PKEY types cannot do this. + */ EVP_PKEY_copy_parameters(pktmp, pkey); EVP_PKEY_free(pktmp); ERR_clear_error(); @@ -382,6 +394,10 @@ static int ssl_set_cert(CERT *c, X509 *x) } if (c->pkeys[i].privatekey != NULL) { + /* + * The return code from EVP_PKEY_copy_parameters is deliberately + * ignored. Some EVP_PKEY types cannot do this. + */ EVP_PKEY_copy_parameters(pkey, c->pkeys[i].privatekey); ERR_clear_error(); @@ -502,7 +518,10 @@ int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa) } RSA_up_ref(rsa); - EVP_PKEY_assign_RSA(pkey, rsa); + if (EVP_PKEY_assign_RSA(pkey, rsa) <= 0) { + RSA_free(rsa); + return 0; + } ret = ssl_set_pkey(ctx->cert, pkey); EVP_PKEY_free(pkey); diff --git a/deps/openssl/openssl/ssl/ssl_sess.c b/deps/openssl/openssl/ssl/ssl_sess.c index 1ad9dc79493c44..de4c59e21fecb6 100644 --- a/deps/openssl/openssl/ssl/ssl_sess.c +++ b/deps/openssl/openssl/ssl/ssl_sess.c @@ -256,8 +256,8 @@ SSL_SESSION *ssl_session_dup(SSL_SESSION *src, int ticket) dest->tlsext_ecpointformatlist = NULL; dest->tlsext_ellipticcurvelist = NULL; # endif -#endif dest->tlsext_tick = NULL; +#endif #ifndef OPENSSL_NO_SRP dest->srp_username = NULL; #endif @@ -324,7 +324,6 @@ SSL_SESSION *ssl_session_dup(SSL_SESSION *src, int ticket) goto err; } # endif -#endif if (ticket != 0) { dest->tlsext_tick = BUF_memdup(src->tlsext_tick, src->tlsext_ticklen); @@ -334,6 +333,7 @@ SSL_SESSION *ssl_session_dup(SSL_SESSION *src, int ticket) dest->tlsext_tick_lifetime_hint = 0; dest->tlsext_ticklen = 0; } +#endif #ifndef OPENSSL_NO_SRP if (src->srp_username) { diff --git a/deps/openssl/openssl/ssl/ssltest.c b/deps/openssl/openssl/ssl/ssltest.c index 6a0c293aa5ae8f..349ee1e03e86c6 100644 --- a/deps/openssl/openssl/ssl/ssltest.c +++ b/deps/openssl/openssl/ssl/ssltest.c @@ -142,6 +142,7 @@ /* Or gethostname won't be declared properly on Linux and GNU platforms. */ #define _BSD_SOURCE 1 +#define _DEFAULT_SOURCE 1 #include #include diff --git a/deps/openssl/openssl/ssl/t1_enc.c b/deps/openssl/openssl/ssl/t1_enc.c index 8f45294e5579a5..985356d74b2a47 100644 --- a/deps/openssl/openssl/ssl/t1_enc.c +++ b/deps/openssl/openssl/ssl/t1_enc.c @@ -385,6 +385,8 @@ int tls1_change_cipher_state(SSL *s, int which) EVP_CIPHER_CTX_init(s->enc_read_ctx); dd = s->enc_read_ctx; mac_ctx = ssl_replace_hash(&s->read_hash, NULL); + if (mac_ctx == NULL) + goto err; #ifndef OPENSSL_NO_COMP if (s->expand != NULL) { COMP_CTX_free(s->expand); @@ -423,11 +425,14 @@ int tls1_change_cipher_state(SSL *s, int which) dd = s->enc_write_ctx; if (SSL_IS_DTLS(s)) { mac_ctx = EVP_MD_CTX_create(); - if (!mac_ctx) + if (mac_ctx == NULL) goto err; s->write_hash = mac_ctx; - } else + } else { mac_ctx = ssl_replace_hash(&s->write_hash, NULL); + if (mac_ctx == NULL) + goto err; + } #ifndef OPENSSL_NO_COMP if (s->compress != NULL) { COMP_CTX_free(s->compress); @@ -500,7 +505,12 @@ int tls1_change_cipher_state(SSL *s, int which) if (!(EVP_CIPHER_flags(c) & EVP_CIPH_FLAG_AEAD_CIPHER)) { mac_key = EVP_PKEY_new_mac_key(mac_type, NULL, mac_secret, *mac_secret_size); - EVP_DigestSignInit(mac_ctx, NULL, m, NULL, mac_key); + if (mac_key == NULL + || EVP_DigestSignInit(mac_ctx, NULL, m, NULL, mac_key) <= 0) { + EVP_PKEY_free(mac_key); + SSLerr(SSL_F_TLS1_CHANGE_CIPHER_STATE, ERR_R_INTERNAL_ERROR); + goto err2; + } EVP_PKEY_free(mac_key); } #ifdef TLS_DEBUG @@ -913,8 +923,9 @@ int tls1_cert_verify_mac(SSL *s, int md_nid, unsigned char *out) } EVP_MD_CTX_init(&ctx); - EVP_MD_CTX_copy_ex(&ctx, d); - EVP_DigestFinal_ex(&ctx, out, &ret); + if (EVP_MD_CTX_copy_ex(&ctx, d) <=0 + || EVP_DigestFinal_ex(&ctx, out, &ret) <= 0) + ret = 0; EVP_MD_CTX_cleanup(&ctx); return ((int)ret); } @@ -1041,17 +1052,24 @@ int tls1_mac(SSL *ssl, unsigned char *md, int send) * are hashing because that gives an attacker a timing-oracle. */ /* Final param == not SSLv3 */ - ssl3_cbc_digest_record(mac_ctx, - md, &md_size, - header, rec->input, - rec->length + md_size, orig_len, - ssl->s3->read_mac_secret, - ssl->s3->read_mac_secret_size, 0); + if (ssl3_cbc_digest_record(mac_ctx, + md, &md_size, + header, rec->input, + rec->length + md_size, orig_len, + ssl->s3->read_mac_secret, + ssl->s3->read_mac_secret_size, 0) <= 0) { + if (!stream_mac) + EVP_MD_CTX_cleanup(&hmac); + return -1; + } } else { - EVP_DigestSignUpdate(mac_ctx, header, sizeof(header)); - EVP_DigestSignUpdate(mac_ctx, rec->input, rec->length); - t = EVP_DigestSignFinal(mac_ctx, md, &md_size); - OPENSSL_assert(t > 0); + if (EVP_DigestSignUpdate(mac_ctx, header, sizeof(header)) <= 0 + || EVP_DigestSignUpdate(mac_ctx, rec->input, rec->length) <= 0 + || EVP_DigestSignFinal(mac_ctx, md, &md_size) <= 0) { + if (!stream_mac) + EVP_MD_CTX_cleanup(&hmac); + return -1; + } #ifdef OPENSSL_FIPS if (!send && FIPS_mode()) tls_fips_digest_extra(ssl->enc_read_ctx, diff --git a/deps/openssl/openssl/ssl/t1_lib.c b/deps/openssl/openssl/ssl/t1_lib.c index d70b93feadf0bd..27f1216c5761bf 100644 --- a/deps/openssl/openssl/ssl/t1_lib.c +++ b/deps/openssl/openssl/ssl/t1_lib.c @@ -913,7 +913,7 @@ unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *buf, * 10.8..10.8.3 (which don't work). */ static void ssl_check_for_safari(SSL *s, const unsigned char *data, - const unsigned char *d, int n) + const unsigned char *limit) { unsigned short type, size; static const unsigned char kSafariExtensionsBlock[] = { @@ -942,11 +942,11 @@ static void ssl_check_for_safari(SSL *s, const unsigned char *data, 0x02, 0x03, /* SHA-1/ECDSA */ }; - if (data >= (d + n - 2)) + if (data >= (limit - 2)) return; data += 2; - if (data > (d + n - 4)) + if (data > (limit - 4)) return; n2s(data, type); n2s(data, size); @@ -954,7 +954,7 @@ static void ssl_check_for_safari(SSL *s, const unsigned char *data, if (type != TLSEXT_TYPE_server_name) return; - if (data + size > d + n) + if (data + size > limit) return; data += size; @@ -962,7 +962,7 @@ static void ssl_check_for_safari(SSL *s, const unsigned char *data, const size_t len1 = sizeof(kSafariExtensionsBlock); const size_t len2 = sizeof(kSafariTLS12ExtensionsBlock); - if (data + len1 + len2 != d + n) + if (data + len1 + len2 != limit) return; if (memcmp(data, kSafariExtensionsBlock, len1) != 0) return; @@ -971,7 +971,7 @@ static void ssl_check_for_safari(SSL *s, const unsigned char *data, } else { const size_t len = sizeof(kSafariExtensionsBlock); - if (data + len != d + n) + if (data + len != limit) return; if (memcmp(data, kSafariExtensionsBlock, len) != 0) return; @@ -981,8 +981,8 @@ static void ssl_check_for_safari(SSL *s, const unsigned char *data, } # endif /* !OPENSSL_NO_EC */ -int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, - int n, int *al) +int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, + unsigned char *limit, int *al) { unsigned short type; unsigned short size; @@ -1004,7 +1004,7 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, # ifndef OPENSSL_NO_EC if (s->options & SSL_OP_SAFARI_ECDHE_ECDSA_BUG) - ssl_check_for_safari(s, data, d, n); + ssl_check_for_safari(s, data, limit); # endif /* !OPENSSL_NO_EC */ # ifndef OPENSSL_NO_SRP @@ -1016,22 +1016,22 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, s->srtp_profile = NULL; - if (data == d + n) + if (data == limit) goto ri_check; - if (data > (d + n - 2)) + if (data > (limit - 2)) goto err; n2s(data, len); - if (data > (d + n - len)) + if (data + len != limit) goto err; - while (data <= (d + n - 4)) { + while (data <= (limit - 4)) { n2s(data, type); n2s(data, size); - if (data + size > (d + n)) + if (data + size > (limit)) goto err; # if 0 fprintf(stderr, "Received extension type %d size %d\n", type, size); @@ -1396,7 +1396,7 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d, } /* Spurious data on the end */ - if (data != d + n) + if (data != limit) goto err; *p = data; @@ -2291,10 +2291,13 @@ static int tls_decrypt_ticket(SSL *s, const unsigned char *etick, /* Check key name matches */ if (memcmp(etick, tctx->tlsext_tick_key_name, 16)) return 2; - HMAC_Init_ex(&hctx, tctx->tlsext_tick_hmac_key, 16, - tlsext_tick_md(), NULL); - EVP_DecryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL, - tctx->tlsext_tick_aes_key, etick + 16); + if (HMAC_Init_ex(&hctx, tctx->tlsext_tick_hmac_key, 16, + tlsext_tick_md(), NULL) <= 0 + || EVP_DecryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL, + tctx->tlsext_tick_aes_key, + etick + 16) <= 0) { + goto err; + } } /* * Attempt to process session ticket, first conduct sanity and integrity @@ -2302,13 +2305,14 @@ static int tls_decrypt_ticket(SSL *s, const unsigned char *etick, */ mlen = HMAC_size(&hctx); if (mlen < 0) { - EVP_CIPHER_CTX_cleanup(&ctx); - return -1; + goto err; } eticklen -= mlen; /* Check HMAC of encrypted ticket */ - HMAC_Update(&hctx, etick, eticklen); - HMAC_Final(&hctx, tick_hmac, NULL); + if (HMAC_Update(&hctx, etick, eticklen) <= 0 + || HMAC_Final(&hctx, tick_hmac, NULL) <= 0) { + goto err; + } HMAC_CTX_cleanup(&hctx); if (CRYPTO_memcmp(tick_hmac, etick + eticklen, mlen)) { EVP_CIPHER_CTX_cleanup(&ctx); @@ -2319,11 +2323,10 @@ static int tls_decrypt_ticket(SSL *s, const unsigned char *etick, p = etick + 16 + EVP_CIPHER_CTX_iv_length(&ctx); eticklen -= 16 + EVP_CIPHER_CTX_iv_length(&ctx); sdec = OPENSSL_malloc(eticklen); - if (!sdec) { + if (!sdec || EVP_DecryptUpdate(&ctx, sdec, &slen, p, eticklen) <= 0) { EVP_CIPHER_CTX_cleanup(&ctx); return -1; } - EVP_DecryptUpdate(&ctx, sdec, &slen, p, eticklen); if (EVP_DecryptFinal(&ctx, sdec + slen, &mlen) <= 0) { EVP_CIPHER_CTX_cleanup(&ctx); OPENSSL_free(sdec); @@ -2356,6 +2359,10 @@ static int tls_decrypt_ticket(SSL *s, const unsigned char *etick, * For session parse failure, indicate that we need to send a new ticket. */ return 2; +err: + EVP_CIPHER_CTX_cleanup(&ctx); + HMAC_CTX_cleanup(&hctx); + return -1; } /* Tables to translate from NIDs to TLS v1.2 ids */ diff --git a/deps/openssl/openssl/ssl/tls1.h b/deps/openssl/openssl/ssl/tls1.h index 69d8186a4e2441..91504b17e8965d 100644 --- a/deps/openssl/openssl/ssl/tls1.h +++ b/deps/openssl/openssl/ssl/tls1.h @@ -235,8 +235,7 @@ extern "C" { /* * ExtensionType value for TLS padding extension. - * http://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml - * http://tools.ietf.org/html/draft-agl-tls-padding-03 + * http://tools.ietf.org/html/draft-agl-tls-padding */ # define TLSEXT_TYPE_padding 21 @@ -261,20 +260,19 @@ extern "C" { # define TLSEXT_TYPE_next_proto_neg 13172 # endif -/* NameType value from RFC 3546 */ +/* NameType value from RFC3546 */ # define TLSEXT_NAMETYPE_host_name 0 -/* status request value from RFC 3546 */ +/* status request value from RFC3546 */ # define TLSEXT_STATUSTYPE_ocsp 1 -/* ECPointFormat values from draft-ietf-tls-ecc-12 */ +/* ECPointFormat values from RFC4492 */ # define TLSEXT_ECPOINTFORMAT_first 0 # define TLSEXT_ECPOINTFORMAT_uncompressed 0 # define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime 1 # define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2 2 # define TLSEXT_ECPOINTFORMAT_last 2 -/* Signature and hash algorithms from RFC 5246 */ - +/* Signature and hash algorithms from RFC5246 */ # define TLSEXT_signature_anonymous 0 # define TLSEXT_signature_rsa 1 # define TLSEXT_signature_dsa 2 @@ -404,7 +402,6 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) # define TLS1_CK_DHE_DSS_WITH_RC4_128_SHA 0x03000066 /* AES ciphersuites from RFC3268 */ - # define TLS1_CK_RSA_WITH_AES_128_SHA 0x0300002F # define TLS1_CK_DH_DSS_WITH_AES_128_SHA 0x03000030 # define TLS1_CK_DH_RSA_WITH_AES_128_SHA 0x03000031 @@ -570,7 +567,7 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb) # define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA "DHE-RSA-AES256-SHA" # define TLS1_TXT_ADH_WITH_AES_256_SHA "ADH-AES256-SHA" -/* ECC ciphersuites from draft-ietf-tls-ecc-01.txt (Mar 15, 2001) */ +/* ECC ciphersuites from RFC4492 */ # define TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA "ECDH-ECDSA-NULL-SHA" # define TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA "ECDH-ECDSA-RC4-SHA" # define TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA "ECDH-ECDSA-DES-CBC3-SHA" From 268d2b463775612b831da1180d9dfda450eeda61 Mon Sep 17 00:00:00 2001 From: Rod Vagg Date: Tue, 3 Nov 2015 21:06:35 +1100 Subject: [PATCH 3/7] build: backport config for new CI infrastructure MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/3965 Reviewed-By: Alexis Campailla Reviewed-By: Johan Bergström --- Makefile | 174 ++++++++++++++++++++++++++------- configure | 5 +- src/node_version.h | 26 +++-- tools/msvs/msi/nodemsi.wixproj | 18 ++-- tools/msvs/msi/product.wxs | 4 +- tools/osx-codesign.sh | 2 +- tools/osx-productsign.sh | 2 +- vcbuild.bat | 124 ++++++++++++++++------- 8 files changed, 262 insertions(+), 93 deletions(-) diff --git a/Makefile b/Makefile index af86a3c20f372a..414e0ad07f9708 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,11 @@ NINJA ?= ninja DESTDIR ?= SIGN ?= FLAKY_TESTS ?= run +STAGINGSERVER ?= node-www +OSTYPE := $(shell uname -s | tr '[A-Z]' '[a-z]') + +# Flags for packaging. NODE ?= ./node # Default to verbose builds. @@ -206,9 +210,45 @@ run-ci: RAWVER=$(shell $(PYTHON) tools/getnodeversion.py) VERSION=v$(RAWVER) + +# For nightly builds, you must set DISTTYPE to "nightly", "next-nightly" or +# "custom". For the nightly and next-nightly case, you need to set DATESTRING +# and COMMIT in order to properly name the build. +# For the rc case you need to set CUSTOMTAG to an appropriate CUSTOMTAG number + +ifndef DISTTYPE +DISTTYPE=release +endif +ifeq ($(DISTTYPE),release) +FULLVERSION=$(VERSION) +else # ifeq ($(DISTTYPE),release) +ifeq ($(DISTTYPE),custom) +ifndef CUSTOMTAG +$(error CUSTOMTAG is not set for DISTTYPE=custom) +endif # ifndef CUSTOMTAG +TAG=$(CUSTOMTAG) +else # ifeq ($(DISTTYPE),custom) +ifndef DATESTRING +$(error DATESTRING is not set for nightly) +endif # ifndef DATESTRING +ifndef COMMIT +$(error COMMIT is not set for nightly) +endif # ifndef COMMIT +ifneq ($(DISTTYPE),nightly) +ifneq ($(DISTTYPE),next-nightly) +$(error DISTTYPE is not release, custom, nightly or next-nightly) +endif # ifneq ($(DISTTYPE),next-nightly) +endif # ifneq ($(DISTTYPE),nightly) +TAG=$(DISTTYPE)$(DATESTRING)$(COMMIT) +endif # ifeq ($(DISTTYPE),custom) +FULLVERSION=$(VERSION)-$(TAG) +endif # ifeq ($(DISTTYPE),release) + +DISTTYPEDIR ?= $(DISTTYPE) +RELEASE=$(shell sed -ne 's/\#define NODE_VERSION_IS_RELEASE \([01]\)/\1/p' src/node_version.h) NODE_DOC_VERSION=$(VERSION) -RELEASE=$(shell $(PYTHON) tools/getnodeisrelease.py) -PLATFORM=$(shell uname | tr '[:upper:]' '[:lower:]') +NPMVERSION=v$(shell cat deps/npm/package.json | grep '"version"' | sed 's/^[^:]*: "\([^"]*\)",.*/\1/') + ifeq ($(findstring x86_64,$(shell uname -m)),x86_64) DESTCPU ?= x64 else @@ -223,31 +263,28 @@ else ARCH=x86 endif endif -TARNAME=node-$(VERSION) -ifdef NIGHTLY -TAG = nightly-$(NIGHTLY) -TARNAME=node-$(VERSION)-$(TAG) -endif -TARBALL=$(TARNAME).tar.gz -BINARYNAME=$(TARNAME)-$(PLATFORM)-$(ARCH) -BINARYTAR=$(BINARYNAME).tar.gz -PKG=out/$(TARNAME).pkg -PACKAGEMAKER ?= /Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker -PKGSRC=nodejs-$(DESTCPU)-$(RAWVER).tgz -ifdef NIGHTLY -PKGSRC=nodejs-$(DESTCPU)-$(RAWVER)-$(TAG).tgz +# enforce "x86" over "ia32" as the generally accepted way of referring to 32-bit intel +ifeq ($(ARCH),ia32) +override ARCH=x86 +endif +ifeq ($(DESTCPU),ia32) +override DESTCPU=x86 endif -dist: doc $(TARBALL) $(PKG) - +TARNAME=node-$(FULLVERSION) +TARBALL=$(TARNAME).tar +BINARYNAME=$(TARNAME)-$(OSTYPE)-$(ARCH) +BINARYTAR=$(BINARYNAME).tar +PKG=$(TARNAME).pkg +PACKAGEMAKER ?= /Developer/Applications/Utilities/PackageMaker.app/Contents/MacOS/PackageMaker PKGDIR=out/dist-osx release-only: @if [ "$(shell git status --porcelain | egrep -v '^\?\? ')" = "" ]; then \ exit 0 ; \ else \ - echo "" >&2 ; \ + echo "" >&2 ; \ echo "The git repository is not clean." >&2 ; \ echo "Please commit changes before building release tarball." >&2 ; \ echo "" >&2 ; \ @@ -255,27 +292,33 @@ release-only: echo "" >&2 ; \ exit 1 ; \ fi - @if [ "$(NIGHTLY)" != "" -o "$(RELEASE)" = "1" ]; then \ + @if [ "$(DISTTYPE)" != "release" -o "$(RELEASE)" = "1" ]; then \ exit 0; \ else \ - echo "" >&2 ; \ + echo "" >&2 ; \ echo "#NODE_VERSION_IS_RELEASE is set to $(RELEASE)." >&2 ; \ - echo "Did you remember to update src/node_version.cc?" >&2 ; \ - echo "" >&2 ; \ + echo "Did you remember to update src/node_version.h?" >&2 ; \ + echo "" >&2 ; \ exit 1 ; \ fi -pkg: $(PKG) - $(PKG): release-only rm -rf $(PKGDIR) rm -rf out/deps out/Release - $(PYTHON) ./configure --without-snapshot --dest-cpu=ia32 --tag=$(TAG) + $(PYTHON) ./configure \ + --dest-cpu=ia32 \ + --tag=$(TAG) \ + --without-snapshot \ + $(CONFIG_FLAGS) $(MAKE) install V=$(V) DESTDIR=$(PKGDIR)/32 rm -rf out/deps out/Release - $(PYTHON) ./configure --without-snapshot --dest-cpu=x64 --tag=$(TAG) + $(PYTHON) ./configure \ + --dest-cpu=x64 \ + --tag=$(TAG) \ + --without-snapshot \ + $(CONFIG_FLAGS) $(MAKE) install V=$(V) DESTDIR=$(PKGDIR) - SIGN="$(APP_SIGN)" PKGDIR="$(PKGDIR)" bash tools/osx-codesign.sh + SIGN="$(CODESIGN_CERT)" PKGDIR="$(PKGDIR)" bash tools/osx-codesign.sh lipo $(PKGDIR)/32/usr/local/bin/node \ $(PKGDIR)/usr/local/bin/node \ -output $(PKGDIR)/usr/local/bin/node-universal \ @@ -286,7 +329,15 @@ $(PKG): release-only --id "org.nodejs.Node" \ --doc tools/osx-pkg.pmdoc \ --out $(PKG) - SIGN="$(INT_SIGN)" PKG="$(PKG)" bash tools/osx-productsign.sh + SIGN="$(PRODUCTSIGN_CERT)" PKG="$(PKG)" bash tools/osx-productsign.sh + +pkg: $(PKG) + +pkg-upload: pkg + ssh $(STAGINGSERVER) "mkdir -p nodejs/$(DISTTYPEDIR)/$(FULLVERSION)" + chmod 664 node-$(FULLVERSION).pkg + scp -p node-$(FULLVERSION).pkg $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/node-$(FULLVERSION).pkg + ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/node-$(FULLVERSION).pkg.done" $(TARBALL): release-only node doc git archive --format=tar --prefix=$(TARNAME)/ HEAD | tar xf - @@ -302,6 +353,39 @@ $(TARBALL): release-only node doc tar: $(TARBALL) +tar-upload: tar + ssh $(STAGINGSERVER) "mkdir -p nodejs/$(DISTTYPEDIR)/$(FULLVERSION)" + chmod 664 node-$(FULLVERSION).tar.gz + scp -p node-$(FULLVERSION).tar.gz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/node-$(FULLVERSION).tar.gz + ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/node-$(FULLVERSION).tar.gz.done" + +doc-upload: tar + ssh $(STAGINGSERVER) "mkdir -p nodejs/$(DISTTYPEDIR)/$(FULLVERSION)" + chmod -R ug=rw-x+X,o=r+X out/doc/ + scp -pr out/doc/ $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/docs/ + ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/docs.done" + +$(TARBALL)-headers: config.gypi release-only + $(PYTHON) ./configure \ + --prefix=/ \ + --dest-cpu=$(DESTCPU) \ + --tag=$(TAG) \ + $(CONFIG_FLAGS) + HEADERS_ONLY=1 $(PYTHON) tools/install.py install '$(TARNAME)' '/' + find $(TARNAME)/ -type l | xargs rm # annoying on windows + tar -cf $(TARNAME)-headers.tar $(TARNAME) + rm -rf $(TARNAME) + gzip -c -f -9 $(TARNAME)-headers.tar > $(TARNAME)-headers.tar.gz + rm $(TARNAME)-headers.tar + +tar-headers: $(TARBALL)-headers + +tar-headers-upload: tar-headers + ssh $(STAGINGSERVER) "mkdir -p nodejs/$(DISTTYPEDIR)/$(FULLVERSION)" + chmod 664 $(TARNAME)-headers.tar.gz + scp -p $(TARNAME)-headers.tar.gz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-headers.tar.gz + ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/$(TARNAME)-headers.tar.gz.done" + $(BINARYTAR): release-only rm -rf $(BINARYNAME) rm -rf out/deps out/Release @@ -316,6 +400,35 @@ $(BINARYTAR): release-only binary: $(BINARYTAR) +binary-upload-arch: binary + ssh $(STAGINGSERVER) "mkdir -p nodejs/$(DISTTYPEDIR)/$(FULLVERSION)" + chmod 664 node-$(FULLVERSION)-$(OSTYPE)-$(ARCH).tar.gz + scp -p node-$(FULLVERSION)-$(OSTYPE)-$(ARCH).tar.gz $(STAGINGSERVER):nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/node-$(FULLVERSION)-$(OSTYPE)-$(ARCH).tar.gz + ssh $(STAGINGSERVER) "touch nodejs/$(DISTTYPEDIR)/$(FULLVERSION)/node-$(FULLVERSION)-$(OSTYPE)-$(ARCH).tar.gz.done" + +ifeq ($(OSTYPE),darwin) +binary-upload: + $(MAKE) binary-upload-arch \ + DESTCPU=ia32 \ + ARCH=x86 \ + DISTTYPE=$(DISTTYPE) \ + DATESTRING=$(DATESTRING) \ + COMMIT=$(COMMIT) \ + CUSTOMTAG=$(CUSTOMTAG) \ + CONFIG_FLAGS=$(CONFIG_FLAGS) + $(MAKE) binary-upload-arch \ + DESTCPU=x64 \ + ARCH=x64 \ + DISTTYPE=$(DISTTYPE) \ + DATESTRING=$(DATESTRING) \ + COMMIT=$(COMMIT) \ + CUSTOMTAG=$(CUSTOMTAG) \ + CONFIG_FLAGS=$(CONFIG_FLAGS) +else +binary-upload: binary-upload-arch +endif + + $(PKGSRC): release-only rm -rf dist out $(PYTHON) configure --prefix=/ --without-snapshot \ @@ -329,11 +442,6 @@ $(PKGSRC): release-only pkgsrc: $(PKGSRC) -dist-upload: $(TARBALL) $(PKG) - ssh node@nodejs.org mkdir -p web/nodejs.org/dist/$(VERSION) - scp $(TARBALL) node@nodejs.org:~/web/nodejs.org/dist/$(VERSION)/$(TARBALL) - scp $(PKG) node@nodejs.org:~/web/nodejs.org/dist/$(VERSION)/$(TARNAME).pkg - wrkclean: $(MAKE) -C tools/wrk/ clean rm tools/wrk/wrk diff --git a/configure b/configure index 19b0fe15f09aea..2dc664406f1d8b 100755 --- a/configure +++ b/configure @@ -478,6 +478,10 @@ def configure_node(o): host_arch = host_arch_win() if os.name == 'nt' else host_arch_cc() target_arch = options.dest_cpu or host_arch + # ia32 is preferred by the build tools (GYP) over x86 even if we prefer the latter + # the Makefile resets this to x86 afterward + if target_arch == 'x86': + target_arch = 'ia32' o['variables']['host_arch'] = host_arch o['variables']['target_arch'] = target_arch @@ -665,7 +669,6 @@ def configure_winsdk(o): print "ctrpp not found in WinSDK path--using pre-gen files from tools/msvs/genfiles." - # determine the "flavor" (operating system) we're building for, # leveraging gyp's GetFlavor function flavor_params = {}; diff --git a/src/node_version.h b/src/node_version.h index 90b4f4222e835a..40312df15189df 100644 --- a/src/node_version.h +++ b/src/node_version.h @@ -28,25 +28,31 @@ #define NODE_VERSION_IS_RELEASE 0 -#ifndef NODE_TAG -# define NODE_TAG "" -#endif - #ifndef NODE_STRINGIFY #define NODE_STRINGIFY(n) NODE_STRINGIFY_HELPER(n) #define NODE_STRINGIFY_HELPER(n) #n #endif -#if NODE_VERSION_IS_RELEASE -# define NODE_VERSION_STRING NODE_STRINGIFY(NODE_MAJOR_VERSION) "." \ - NODE_STRINGIFY(NODE_MINOR_VERSION) "." \ - NODE_STRINGIFY(NODE_PATCH_VERSION) \ - NODE_TAG +#ifndef NODE_TAG +# if NODE_VERSION_IS_RELEASE +# define NODE_TAG "" +# else +# define NODE_TAG "-pre" +# endif #else +// NODE_TAG is passed without quotes when rc.exe is run from msbuild +# define NODE_EXE_VERSION NODE_STRINGIFY(NODE_MAJOR_VERSION) "." \ + NODE_STRINGIFY(NODE_MINOR_VERSION) "." \ + NODE_STRINGIFY(NODE_PATCH_VERSION) \ + NODE_STRINGIFY(NODE_TAG) +#endif + # define NODE_VERSION_STRING NODE_STRINGIFY(NODE_MAJOR_VERSION) "." \ NODE_STRINGIFY(NODE_MINOR_VERSION) "." \ NODE_STRINGIFY(NODE_PATCH_VERSION) \ - NODE_TAG "-pre" + NODE_TAG +#ifndef NODE_EXE_VERSION +# define NODE_EXE_VERSION NODE_VERSION_STRING #endif #define NODE_VERSION "v" NODE_VERSION_STRING diff --git a/tools/msvs/msi/nodemsi.wixproj b/tools/msvs/msi/nodemsi.wixproj index 8d17a6cfb4a76c..fabd34d8a964ad 100644 --- a/tools/msvs/msi/nodemsi.wixproj +++ b/tools/msvs/msi/nodemsi.wixproj @@ -6,7 +6,7 @@ 3.5 {1d808ff0-b5a9-4be9-859d-b334b6f48be2} 2.0 - node-v$(NodeVersion)-$(Platform) + node-v$(FullVersion)-$(Platform) Package True $(MSBuildExtensionsPath32)\Microsoft\WiX\v3.x\Wix.targets @@ -14,25 +14,25 @@ 0.0.0.0 - ..\..\..\$(Configuration)\ + ..\..\..\ obj\$(Configuration)\ - Debug;ProductVersion=$(NodeVersion);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFilesFolder + Debug;ProductVersion=$(NodeVersion);FullVersion=$(FullVersion);DistTypeDir=$(DistTypeDir);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFilesFolder - ..\..\..\$(Configuration)\ + ..\..\..\ obj\$(Configuration)\ - Debug;ProductVersion=$(NodeVersion);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFilesFolder + Debug;ProductVersion=$(NodeVersion);FullVersion=$(FullVersion);DistTypeDir=$(DistTypeDir);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFilesFolder - ..\..\..\$(Configuration)\ + ..\..\..\ obj\$(Configuration)\ - Debug;ProductVersion=$(NodeVersion);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFiles64Folder + Debug;ProductVersion=$(NodeVersion);FullVersion=$(FullVersion);DistTypeDir=$(DistTypeDir);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFiles64Folder en-US - ..\..\..\$(Configuration)\ + ..\..\..\ obj\$(Configuration)\ - Debug;ProductVersion=$(NodeVersion);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFiles64Folder + Debug;ProductVersion=$(NodeVersion);FullVersion=$(FullVersion);DistTypeDir=$(DistTypeDir);NoETW=$(NoETW);NoPerfCtr=$(NoPerfCtr);NpmSourceDir=..\..\..\deps\npm\;ProgramFilesFolderId=ProgramFiles64Folder True diff --git a/tools/msvs/msi/product.wxs b/tools/msvs/msi/product.wxs index 6ff0d4b149b679..72a64d908d0f07 100755 --- a/tools/msvs/msi/product.wxs +++ b/tools/msvs/msi/product.wxs @@ -4,7 +4,7 @@ - + @@ -23,7 +23,7 @@ + DowngradeErrorMessage="A later version of Node.js is already installed. Setup will now exit."/> diff --git a/tools/osx-codesign.sh b/tools/osx-codesign.sh index 65a8d48b8ab2a5..d5f276624deff4 100644 --- a/tools/osx-codesign.sh +++ b/tools/osx-codesign.sh @@ -3,7 +3,7 @@ set -x set -e -if ! [ -n "$SIGN" ] && [ $STEP -eq 1 ]; then +if [ "X$SIGN" == "X" ]; then echo "No SIGN environment var. Skipping codesign." >&2 exit 0 fi diff --git a/tools/osx-productsign.sh b/tools/osx-productsign.sh index 4834c9bbb8769c..491e3fde62f0b4 100644 --- a/tools/osx-productsign.sh +++ b/tools/osx-productsign.sh @@ -3,7 +3,7 @@ set -x set -e -if ! [ -n "$SIGN" ]; then +if [ "X$SIGN" == "X" ]; then echo "No SIGN environment var. Skipping codesign." >&2 exit 0 fi diff --git a/vcbuild.bat b/vcbuild.bat index 9d462c9e74b793..21b5d361151c3a 100644 --- a/vcbuild.bat +++ b/vcbuild.bat @@ -13,11 +13,8 @@ if /i "%1"=="/?" goto help @rem Process arguments. set config=Release -set msiplatform=x86 set target=Build -set target_arch=ia32 -set debug_arg= -set nosnapshot_arg= +set target_arch=x86 set noprojgen= set nobuild= set nosign= @@ -30,20 +27,19 @@ set upload= set jslint= set buildnodeweak= set noetw= -set noetw_arg= set noetw_msi_arg= set noperfctr= -set noperfctr_arg= set noperfctr_msi_arg= set flaky_tests_arg= +set configure_flags= :next-arg if "%1"=="" goto args-done if /i "%1"=="debug" set config=Debug&goto arg-ok if /i "%1"=="release" set config=Release&goto arg-ok if /i "%1"=="clean" set target=Clean&goto arg-ok -if /i "%1"=="ia32" set target_arch=ia32&goto arg-ok -if /i "%1"=="x86" set target_arch=ia32&goto arg-ok +if /i "%1"=="ia32" set target_arch=x86&goto arg-ok +if /i "%1"=="x86" set target_arch=x86&goto arg-ok if /i "%1"=="x64" set target_arch=x64&goto arg-ok if /i "%1"=="noprojgen" set noprojgen=1&goto arg-ok if /i "%1"=="nobuild" set nobuild=1&goto arg-ok @@ -75,13 +71,17 @@ shift goto next-arg :args-done -if defined upload goto upload -if "%config%"=="Debug" set debug_arg=--debug -if "%target_arch%"=="x64" set msiplatform=x64 -if defined nosnapshot set nosnapshot_arg=--without-snapshot -if defined noetw set noetw_arg=--without-etw& set noetw_msi_arg=/p:NoETW=1 -if defined noperfctr set noperfctr_arg=--without-perfctr& set noperfctr_msi_arg=/p:NoPerfCtr=1 +if "%config%"=="Debug" set configure_flags=%configure_flags% --debug +if defined nosnapshot set configure_flags=%configure_flags% --without-snapshot +if defined noetw set configure_flags=%configure_flags% --without-etw& set noetw_msi_arg=/p:NoETW=1 +if defined noperfctr set configure_flags=%configure_flags% --without-perfctr& set noperfctr_msi_arg=/p:NoPerfCtr=1 + +if defined config_flags set configure_flags=%configure_flags% %config_flags% + +call :getnodeversion || exit /b 1 + +@rem Set environment for msbuild @rem Look for Visual Studio 2015 echo Looking for Visual Studio 2015 @@ -176,7 +176,8 @@ if defined noprojgen goto msbuild if defined NIGHTLY set TAG=nightly-%NIGHTLY% @rem Generate the VS project. -python configure %debug_arg% %nosnapshot_arg% %noetw_arg% %noperfctr_arg% --dest-cpu=%target_arch% --tag=%TAG% +echo configure %configure_flags% --dest-cpu=%target_arch% --tag=%TAG% +python configure %configure_flags% --dest-cpu=%target_arch% --tag=%TAG% if errorlevel 1 goto create-msvs-files-failed if not exist node.sln goto create-msvs-files-failed echo Project files generated. @@ -193,7 +194,7 @@ if errorlevel 1 goto exit @rem Skip signing if the `nosign` option was specified. if defined nosign goto licensertf -signtool sign /a /d "Node.js" /t http://timestamp.globalsign.com/scripts/timestamp.dll Release\node.exe +signtool sign /a /d "node" /t http://timestamp.globalsign.com/scripts/timestamp.dll Release\node.exe if errorlevel 1 echo Failed to sign exe&goto exit :licensertf @@ -206,20 +207,42 @@ if errorlevel 1 echo Failed to generate license.rtf&goto exit :msi @rem Skip msi generation if not requested if not defined msi goto run -call :getnodeversion - -if not defined NIGHTLY goto msibuild -set NODE_VERSION=%NODE_VERSION%.%NIGHTLY% :msibuild -echo Building node-%NODE_VERSION% -msbuild "%~dp0tools\msvs\msi\nodemsi.sln" /m /t:Clean,Build /p:PlatformToolset=%PLATFORM_TOOLSET% /p:GypMsvsVersion=%GYP_MSVS_VERSION% /p:Configuration=%config% /p:Platform=%msiplatform% /p:NodeVersion=%NODE_VERSION% %noetw_msi_arg% %noperfctr_msi_arg% /clp:NoSummary;NoItemAndPropertyList;Verbosity=minimal /nologo +echo Building node-v%FULLVERSION%-%target_arch%.msi +msbuild "%~dp0tools\msvs\msi\nodemsi.sln" /m /t:Clean,Build /p:PlatformToolset=%PLATFORM_TOOLSET% /p:GypMsvsVersion=%GYP_MSVS_VERSION% /p:Configuration=%config% /p:Platform=%target_arch% /p:NodeVersion=%NODE_VERSION% /p:FullVersion=%FULLVERSION% /p:DistTypeDir=%DISTTYPEDIR% %noetw_msi_arg% %noperfctr_msi_arg% /clp:NoSummary;NoItemAndPropertyList;Verbosity=minimal /nologo if errorlevel 1 goto exit -if defined nosign goto run -signtool sign /a /d "Node.js" /t http://timestamp.globalsign.com/scripts/timestamp.dll Release\node-v%NODE_VERSION%-%msiplatform%.msi +if defined nosign goto upload +signtool sign /a /d "node" /t http://timestamp.globalsign.com/scripts/timestamp.dll node-v%FULLVERSION%-%target_arch%.msi if errorlevel 1 echo Failed to sign msi&goto exit +:upload +@rem Skip upload if not requested +if not defined upload goto run +if not defined SSHCONFIG ( + echo SSHCONFIG is not set for upload + exit /b 1 +) +if not defined STAGINGSERVER set STAGINGSERVER=node-www +if "%target_arch%"=="x64" set staging_dir=nodejs/%DISTTYPEDIR%/v%FULLVERSION%/x64 +if "%target_arch%"=="x86" set staging_dir=nodejs/%DISTTYPEDIR%/v%FULLVERSION%/ +echo Uploading to %STAGINGSERVER%:%staging_dir% +ssh -F %SSHCONFIG% %STAGINGSERVER% "mkdir -p %staging_dir%" +scp -F %SSHCONFIG% Release\node.exe %STAGINGSERVER%:%staging_dir%/node.exe +scp -F %SSHCONFIG% Release\node.lib %STAGINGSERVER%:%staging_dir%/node.lib +scp -F %SSHCONFIG% Release\node.pdb %STAGINGSERVER%:%staging_dir%/node.pdb +scp -F %SSHCONFIG% Release\node.exp %STAGINGSERVER%:%staging_dir%/node.exp +scp -F %SSHCONFIG% Release\openssl-cli.exe %STAGINGSERVER%:%staging_dir%/openssl-cli.exe +scp -F %SSHCONFIG% Release\openssl-cli.pdb %STAGINGSERVER%:%staging_dir%/openssl-cli.pdb +scp -F %SSHCONFIG% node-v%FULLVERSION%-%target_arch%.msi %STAGINGSERVER%:%staging_dir%/ +if "%target_arch%"=="x64" ( + ssh -F %SSHCONFIG% %STAGINGSERVER% "touch %staging_dir%.done && chmod -R ug=rw-x+X,o=r+X %staging_dir%*" +) +if "%target_arch%"=="x86" ( + ssh -F %SSHCONFIG% %STAGINGSERVER% "touch %staging_dir%/node-v%FULLVERSION%-%target_arch%.msi.done %staging_dir%/node.exe.done %staging_dir%/node.lib.done %staging_dir%/node.pdb.done %staging_dir%/node.exp.done %staging_dir%/openssl-cli.exe.done %staging_dir%/openssl-cli.pdb.done && chmod -R ug=rw-x+X,o=r+X %staging_dir%/node.* %staging_dir%/openssl-cli.* %staging_dir%/node-v%FULLVERSION%-%target_arch%.msi* && chmod -R ug=rw-x+X,o=r+X %staging_dir%" +) + :run @rem Run tests if requested. if "%test%"=="" goto jslint @@ -258,17 +281,6 @@ goto jslint echo Failed to create vc project files. goto exit -:upload -echo uploading .exe .msi .pdb to nodejs.org -call :getnodeversion -@echo on -ssh node@nodejs.org mkdir -p web/nodejs.org/dist/v%NODE_VERSION% -scp Release\node.msi node@nodejs.org:~/web/nodejs.org/dist/v%NODE_VERSION%/node-v%NODE_VERSION%.msi -scp Release\node.exe node@nodejs.org:~/web/nodejs.org/dist/v%NODE_VERSION%/node.exe -scp Release\node.pdb node@nodejs.org:~/web/nodejs.org/dist/v%NODE_VERSION%/node.pdb -@echo off -goto exit - :jslint if not defined jslint goto exit echo running jslint @@ -295,6 +307,46 @@ rem *************** :getnodeversion set NODE_VERSION= +set TAG= +set FULLVERSION= + for /F "usebackq tokens=*" %%i in (`python "%~dp0tools\getnodeversion.py"`) do set NODE_VERSION=%%i -if not defined NODE_VERSION echo Cannot determine current version of node.js & exit /b 1 +if not defined NODE_VERSION ( + echo Cannot determine current version of Node.js + exit /b 1 +) + +if not defined DISTTYPE set DISTTYPE=release +if "%DISTTYPE%"=="release" ( + set FULLVERSION=%NODE_VERSION% + goto exit +) +if "%DISTTYPE%"=="custom" ( + if not defined CUSTOMTAG ( + echo "CUSTOMTAG is not set for DISTTYPE=custom" + exit /b 1 + ) + set TAG=%CUSTOMTAG% +) +if not "%DISTTYPE%"=="custom" ( + if not defined DATESTRING ( + echo "DATESTRING is not set for nightly" + exit /b 1 + ) + if not defined COMMIT ( + echo "COMMIT is not set for nightly" + exit /b 1 + ) + if not "%DISTTYPE%"=="nightly" ( + if not "%DISTTYPE%"=="next-nightly" ( + echo "DISTTYPE is not release, custom, nightly or next-nightly" + exit /b 1 + ) + ) + set TAG=%DISTTYPE%%DATESTRING%%COMMIT% +) +set FULLVERSION=%NODE_VERSION%-%TAG% + +:exit +if not defined DISTTYPEDIR set DISTTYPEDIR=%DISTTYPE% goto :EOF From c559c7911de35421609acb355365f8685746473b Mon Sep 17 00:00:00 2001 From: Rod Vagg Date: Thu, 19 Nov 2015 13:45:00 +1100 Subject: [PATCH 4/7] build: backport tools/release.sh MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/3965 Reviewed-By: Alexis Campailla Reviewed-By: Johan Bergström --- tools/release.sh | 196 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100755 tools/release.sh diff --git a/tools/release.sh b/tools/release.sh new file mode 100755 index 00000000000000..6d0af2a541f4c2 --- /dev/null +++ b/tools/release.sh @@ -0,0 +1,196 @@ +#!/usr/bin/env bash + +# To promote and sign a release that has been prepared by the build slaves, use: +# release.sh + +# To _only_ sign an existing release, use: +# release.sh -s vx.y.z + +set -e + +webhost=direct.nodejs.org +webuser=dist +promotablecmd=dist-promotable +promotecmd=dist-promote +signcmd=dist-sign + + +################################################################################ +## Select a GPG key to use + +echo "# Selecting GPG key ..." + +gpgkey=$(gpg --list-secret-keys | grep '^sec' | awk -F'( +|/)' '{print $3}') +keycount=$(echo $gpgkey | wc -w) + +if [ $keycount -eq 0 ]; then + echo 'Need at least one GPG key, please make one with `gpg --gen-key`' + echo 'You will also need to submit your key to a public keyserver, e.g.' + echo ' https://sks-keyservers.net/i/#submit' + exit 1 +elif [ $keycount -ne 1 ]; then + echo -e 'You have multiple GPG keys:\n' + + gpg --list-secret-keys + + while true; do + echo $gpgkey | awk '{ for(i = 1; i <= NF; i++) { print i ") " $i; } }' + echo -n 'Select a key: ' + read keynum + + if $(test "$keynum" -eq "$keynum" > /dev/null 2>&1); then + _gpgkey=$(echo $gpgkey | awk '{ print $'${keynum}'}') + keycount=$(echo $_gpgkey | wc -w) + if [ $keycount -eq 1 ]; then + echo "" + gpgkey=$_gpgkey + break + fi + fi + done +fi + +gpgfing=$(gpg --fingerprint $gpgkey | grep 'Key fingerprint =' | awk -F' = ' '{print $2}' | tr -d ' ') + +if ! test "$(grep $gpgfing README.md)"; then + echo 'Error: this GPG key fingerprint is not listed in ./README.md' + exit 1 +fi + +echo "Using GPG key: $gpgkey" +echo " Fingerprint: $gpgfing" + + +################################################################################ +## Create and sign checksums file for a given version + +function sign { + echo -e "\n# Creating SHASUMS256.txt ..." + + local version=$1 + + gpgtagkey=$(git tag -v $version 2>&1 | grep 'key ID' | awk '{print $NF}') + + if [ "X${gpgtagkey}" == "X" ]; then + echo "Could not find signed tag for \"${version}\"" + exit 1 + fi + + if [ "${gpgtagkey}" != "${gpgkey}" ]; then + echo "GPG key for \"${version}\" tag is not yours, cannot sign" + fi + + shapath=$(ssh ${webuser}@${webhost} $signcmd nodejs $version) + + if ! [[ ${shapath} =~ ^/.+/SHASUMS256.txt$ ]]; then + echo 'Error: No SHASUMS file returned by sign!' + exit 1 + fi + + echo -e "\n# Signing SHASUMS for ${version}..." + + shadir=$(dirname $shapath) + tmpdir="/tmp/_node_release.$$" + + mkdir -p $tmpdir + + scp ${webuser}@${webhost}:${shadir}/SHASUMS*.txt ${tmpdir}/ + + for i in $(ls ${tmpdir}/SHASUMS*.txt); do + echo "Signing $i..." + gpg --default-key $gpgkey --clearsign ${i} + if [[ $version =~ ^v[0] ]]; then + echo "Encrpting $i..." + gpg --default-key $gpgkey -s ${i} + fi + done + + echo "Wrote to ${tmpdir}/" + + echo -e "Your signed SHASUMS256.txt.asc:\n" + + cat ${tmpdir}/SHASUMS256.txt.asc + + echo "" + + while true; do + echo -n "Upload files? [y/n] " + yorn="" + read yorn + + if [ "X${yorn}" == "Xn" ]; then + break + fi + + if [ "X${yorn}" == "Xy" ]; then + if [[ $version =~ ^v[0] ]]; then + scp ${tmpdir}/SHASUMS* ${webuser}@${webhost}:${shadir}/ + else + scp ${tmpdir}/SHASUMS256.txt ${tmpdir}/SHASUMS256.txt.asc ${webuser}@${webhost}:${shadir}/ + fi + break + fi + done + + rm -rf $tmpdir +} + + +if [ "X${1}" == "X-s" ]; then + if [ "X${2}" == "X" ]; then + echo "Please supply a version string to sign" + exit 1 + fi + + sign $2 + exit 0 +fi + + +# else: do a normal release & promote + +################################################################################ +## Look for releases to promote + +echo -e "\n# Checking for releases ..." + +promotable=$(ssh ${webuser}@${webhost} $promotablecmd nodejs) + +if [ "X${promotable}" == "X" ]; then + echo "No releases to promote!" + exit 0 +fi + +echo -e "Found the following releases / builds ready to promote:\n" +echo "$promotable" | sed 's/^/ * /' +echo "" + +versions=$(echo "$promotable" | cut -d: -f1) + +################################################################################ +## Promote releases + +for version in $versions; do + while true; do + files=$(echo "$promotable" | grep "^${version}" | sed 's/^'${version}': //') + echo -n "Promote ${version} files (${files})? [y/n] " + yorn="" + read yorn + + if [ "X${yorn}" == "Xn" ]; then + break + fi + + if [ "X${yorn}" != "Xy" ]; then + continue + fi + + echo -e "\n# Promoting ${version}..." + + ssh ${webuser}@${webhost} $promotecmd nodejs $version + + sign $version + + break + done +done From 5d829a63ab468a43b4084e15523ddd7b43f3473b Mon Sep 17 00:00:00 2001 From: Rod Vagg Date: Thu, 19 Nov 2015 13:53:43 +1100 Subject: [PATCH 5/7] doc: backport README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/3965 Reviewed-By: Alexis Campailla Reviewed-By: Johan Bergström --- README.md | 332 ++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 282 insertions(+), 50 deletions(-) diff --git a/README.md b/README.md index 12fd05aa5ff03d..bbcf6014a3587a 100644 --- a/README.md +++ b/README.md @@ -1,74 +1,306 @@ -Evented I/O for V8 javascript. [![Build Status](https://secure.travis-ci.org/joyent/node.png)](http://travis-ci.org/joyent/node) -=== +Node.js +======= -### To build: +[![Gitter](https://badges.gitter.im/Join Chat.svg)](https://gitter.im/nodejs/node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -Prerequisites (Unix only): +The Node.js project is supported by the +[Node.js Foundation](https://nodejs.org/en/foundation/). Contributions, +policies and releases are managed under an +[open governance model](./GOVERNANCE.md). We are also bound by a +[Code of Conduct](./CODE_OF_CONDUCT.md). - * GCC 4.2 or newer - * Python 2.6 or 2.7 - * GNU Make 3.81 or newer - * libexecinfo (FreeBSD and OpenBSD only) +If you need help using or installing Node.js, please use the +[nodejs/help](https://github.com/nodejs/help) issue tracker. -Unix/Macintosh: +## Release Types - ./configure - make - make install +The Node.js project maintains multiple types of releases: -If your python binary is in a non-standard location or has a +* **Stable**: Released from active development branches of this repository, + versioned by [SemVer](http://semver.org/) and signed by a member of the + [Release Team](#release-team). + Code for Stable releases is organized in this repository by major version + number, For example: [v4.x](https://github.com/nodejs/node/tree/v4.x). + The major version number of Stable releases will increment every 6 months + allowing for breaking changes to be introduced. This happens in April and + October every year. Stable release lines beginning in October each year have + a maximum support life of 8 months. Stable release lines beginning in April + each year will convert to LTS (see below) after 6 months and receive further + support for 30 months. +* **LTS**: Releases that receive Long-term Support, with a focus on stability + and security. Every second Stable release line (major version) will become an + LTS line and receive 18 months of _Active LTS_ support and a further 12 + months of _Maintenance_. LTS release lines are given alphabetically + ordered codenames, begining with v4 Argon. LTS releases are less frequent + and will attempt to maintain consistent major and minor version numbers, + only incrementing patch version numbers. There are no breaking changes or + feature additions, except in some special circumstances. More information + can be found in the [LTS README](https://github.com/nodejs/LTS/). +* **Nightly**: Versions of code in this repository on the current Stable + branch, automatically built every 24-hours where changes exist. Use with + caution. + +## Download + +Binaries, installers, and source tarballs are available at +. + +**Stable** and **LTS** releases are available at +, listed under their version strings. +The [latest](https://nodejs.org/download/release/latest/) directory is an +alias for the latest Stable release. The latest LTS release from an LTS +line is available in the form: latest-lts-_codename_. For example: + + +**Nightly** builds are available at +, listed under their version +string which includes their date (in UTC time) and the commit SHA at +the HEAD of the release. + +**API documentation** is available in each release and nightly +directory under _docs_. points to the API +documentation of the latest stable version. + +### Verifying Binaries + +Stable, LTS and Nightly download directories all contain a *SHASUM256.txt* +file that lists the SHA checksums for each file available for +download. To check that a downloaded file matches the checksum, run +it through `sha256sum` with a command such as: + +``` +$ grep node-vx.y.z.tar.gz SHASUMS256.txt | sha256sum -c - +``` + +_(Where "node-vx.y.z.tar.gz" is the name of the file you have +downloaded)_ + +Additionally, Stable and LTS releases (not Nightlies) have GPG signed +copies of SHASUM256.txt files available as SHASUM256.txt.asc. You can use +`gpg` to verify that the file has not been tampered with. + +To verify a SHASUM256.txt.asc, you will first need to import all of +the GPG keys of individuals authorized to create releases. They are +listed at the bottom of this README under [Release Team](#release-team). +Use a command such as this to import the keys: + +``` +$ gpg --keyserver pool.sks-keyservers.net \ + --recv-keys DD8F2338BAE7501E3DD5AC78C273792F7D83545D +``` + +_(See the bottom of this README for a full script to import active +release keys)_ + +You can then use `gpg --verify SHASUMS256.txt.asc` to verify that the +file has been signed by an authorized member of the Node.js team. + +Once verified, use the SHASUMS256.txt.asc file to get the checksum for +the binary verification command above. + +## Build + +### Unix / Macintosh + +Prerequisites: + +* GCC 4.2 or newer +* G++ 4.2 or newer +* Python 2.6 or 2.7 +* GNU Make 3.81 or newer +* libexecinfo (FreeBSD and OpenBSD only) + +```text +$ ./configure +$ make +$ [sudo] make install +``` + +If your Python binary is in a non-standard location or has a non-standard name, run the following instead: - export PYTHON=/path/to/python - $PYTHON ./configure - make - make install +```text +$ export PYTHON=/path/to/python +$ $PYTHON ./configure +$ make +$ [sudo] make install +``` + +To run the tests: + +```text +$ make test +``` + +To build the documentation: + +```text +$ make doc +``` + +To read the documentation: + +```text +$ man doc/node.1 +``` + +To test if Node.js was built correctly: + +``` +$ node -e "console.log('Hello from node.js ' + process.version)" +``` + +### Windows + +Prerequisites: + +* [Python 2.6 or 2.7](https://www.python.org/downloads/) +* Visual Studio 2010 or 2012; or +* Visual Studio 2013 for Windows Desktop; or +* Visual Studio Express 2013 for Windows Desktop +* Basic Unix tools required for some tests, + [Git for Windows](http://git-scm.com/download/win) includes Git Bash + and tools which can be included in the global `PATH`. + +```text +> vcbuild nosign +``` + +To run the tests: + +```text +> vcbuild test +``` + +To test if Node.js was built correctly: + +``` +$ node -e "console.log('Hello from node.js ' + process.version)" +``` + +### Android / Android based devices, aka. Firefox OS + +Be sure you have downloaded and extracted [Android NDK] +(https://developer.android.com/tools/sdk/ndk/index.html) +before in a folder. Then run: + +``` +$ ./android-configure /path/to/your/android-ndk +$ make +``` + +## Resources for Newcomers + +* [CODE_OF_CONDUCT.md](./CODE_OF_CONDUCT.md) +* [CONTRIBUTING.md](./CONTRIBUTING.md) +* [GOVERNANCE.md](./GOVERNANCE.md) +* IRC: + [#io.js on Freenode.net](http://webchat.freenode.net?channels=io.js&uio=d4) +* [nodejs/node on Gitter](https://gitter.im/nodejs/node) + +## Security + +All security bugs in node.js are taken seriously and should be reported by +emailing security@nodejs.org. This will be delivered to a subset of the project +team who handle security issues. Please don't disclose security bugs +public until they have been handled by the security team. -Windows: +Your email will be acknowledged within 24 hours, and you’ll receive a more +detailed response to your email within 48 hours indicating the next steps in +handling your report. - vcbuild.bat +## Current Project Team Members -You can download pre-built binaries for various operating systems from -[http://nodejs.org/download/](http://nodejs.org/download/). The Windows -and OS X installers will prompt you for the location to install to. -The tarballs are self-contained; you can extract them to a local directory -with: +The Node.js project team comprises a group of core collaborators and a sub-group +that forms the _Technical Steering Committee_ (TSC) which governs the project. For more +information about the governance of the Node.js project, see +[GOVERNANCE.md](./GOVERNANCE.md). - tar xzf /path/to/node---.tar.gz +### TSC (Technical Steering Committee) -Or system-wide with: +* [bnoordhuis](https://github.com/bnoordhuis) - **Ben Noordhuis** <info@bnoordhuis.nl> +* [chrisdickinson](https://github.com/chrisdickinson) - **Chris Dickinson** <christopher.s.dickinson@gmail.com> +* [cjihrig](https://github.com/cjihrig) - **Colin Ihrig** <cjihrig@gmail.com> +* [fishrock123](https://github.com/fishrock123) - **Jeremiah Senkpiel** <fishrock123@rocketmail.com> +* [indutny](https://github.com/indutny) - **Fedor Indutny** <fedor.indutny@gmail.com> +* [jasnell](https://github.com/jasnell) - **James M Snell** <jasnell@gmail.com> +* [misterdjules](https://github.com/misterdjules) - **Julien Gilli** <jgilli@nodejs.org> +* [mscdex](https://github.com/mscdex) - **Brian White** <mscdex@mscdex.net> +* [orangemocha](https://github.com/orangemocha) - **Alexis Campailla** <orangemocha@nodejs.org> +* [piscisaureus](https://github.com/piscisaureus) - **Bert Belder** <bertbelder@gmail.com> +* [rvagg](https://github.com/rvagg) - **Rod Vagg** <rod@vagg.org> +* [shigeki](https://github.com/shigeki) - **Shigeki Ohtsu** <ohtsu@iij.ad.jp> +* [trevnorris](https://github.com/trevnorris) - **Trevor Norris** <trev.norris@gmail.com> - cd /usr/local && tar --strip-components 1 -xzf \ - /path/to/node---.tar.gz +### Collaborators -### To run the tests: +* [brendanashworth](https://github.com/brendanashworth) - **Brendan Ashworth** <brendan.ashworth@me.com> +* [ChALkeR](https://github.com/ChALkeR) - **Сковорода Никита Андреевич** <chalkerx@gmail.com> +* [domenic](https://github.com/domenic) - **Domenic Denicola** <d@domenic.me> +* [evanlucas](https://github.com/evanlucas) - **Evan Lucas** <evanlucas@me.com> +* [geek](https://github.com/geek) - **Wyatt Preul** <wpreul@gmail.com> +* [isaacs](https://github.com/isaacs) - **Isaac Z. Schlueter** <i@izs.me> +* [jbergstroem](https://github.com/jbergstroem) - **Johan Bergström** <bugs@bergstroem.nu> +* [joaocgreis](https://github.com/joaocgreis) - **João Reis** <reis@janeasystems.com> +* [julianduque](https://github.com/julianduque) - **Julian Duque** <julianduquej@gmail.com> +* [lxe](https://github.com/lxe) - **Aleksey Smolenchuk** <lxe@lxe.co> +* [mhdawson](https://github.com/mhdawson) - **Michael Dawson** <michael_dawson@ca.ibm.com> +* [micnic](https://github.com/micnic) - **Nicu Micleușanu** <micnic90@gmail.com> +* [mikeal](https://github.com/mikeal) - **Mikeal Rogers** <mikeal.rogers@gmail.com> +* [monsanto](https://github.com/monsanto) - **Christopher Monsanto** <chris@monsan.to> +* [ofrobots](https://github.com/ofrobots) - **Ali Ijaz Sheikh** <ofrobots@google.com> +* [Olegas](https://github.com/Olegas) - **Oleg Elifantiev** <oleg@elifantiev.ru> +* [petkaantonov](https://github.com/petkaantonov) - **Petka Antonov** <petka_antonov@hotmail.com> +* [qard](https://github.com/qard) - **Stephen Belanger** <admin@stephenbelanger.com> +* [rlidwka](https://github.com/rlidwka) - **Alex Kocharin** <alex@kocharin.ru> +* [robertkowalski](https://github.com/robertkowalski) - **Robert Kowalski** <rok@kowalski.gd> +* [romankl](https://github.com/romankl) - **Roman Klauke** <romaaan.git@gmail.com> +* [saghul](https://github.com/saghul) - **Saúl Ibarra Corretgé** <saghul@gmail.com> +* [sam-github](https://github.com/sam-github) - **Sam Roberts** <vieuxtech@gmail.com> +* [seishun](https://github.com/seishun) - **Nikolai Vavilov** <vvnicholas@gmail.com> +* [silverwind](https://github.com/silverwind) - **Roman Reiss** <me@silverwind.io> +* [srl295](https://github.com/srl295) - **Steven R Loomis** <srloomis@us.ibm.com> +* [targos](https://github.com/targos) - **Michaël Zasso** <mic.besace@gmail.com> +* [tellnes](https://github.com/tellnes) - **Christian Tellnes** <christian@tellnes.no> +* [thealphanerd](http://github.com/thealphanerd) - **Myles Borins** <myles.borins@gmail.com> +* [thefourtheye](https://github.com/thefourtheye) - **Sakthipriyan Vairamani** <thechargingvolcano@gmail.com> +* [thlorenz](https://github.com/thlorenz) - **Thorsten Lorenz** <thlorenz@gmx.de> +* [Trott](https://github.com/Trott) - **Rich Trott** <rtrott@gmail.com> +* [tunniclm](https://github.com/tunniclm) - **Mike Tunnicliffe** <m.j.tunnicliffe@gmail.com> +* [vkurchatkin](https://github.com/vkurchatkin) - **Vladimir Kurchatkin** <vladimir.kurchatkin@gmail.com> +* [yosuke-furukawa](https://github.com/yosuke-furukawa) - **Yosuke Furukawa** <yosuke.furukawa@gmail.com> -Unix/Macintosh: +Collaborators & TSC members follow the [COLLABORATOR_GUIDE.md](./COLLABORATOR_GUIDE.md) in +maintaining the Node.js project. - make test +### Release Team -Windows: +Releases of Node.js and io.js will be signed with one of the following GPG keys: - vcbuild.bat test +* **Chris Dickinson** <christopher.s.dickinson@gmail.com> `9554F04D7259F04124DE6B476D5A82AC7E37093B` +* **Colin Ihrig** <cjihrig@gmail.com> `94AE36675C464D64BAFA68DD7434390BDBE9B9C5` +* **Sam Roberts** <octetcloud@keybase.io> `0034A06D9D9B0064CE8ADF6BF1747F4AD2306D93` +* **Jeremiah Senkpiel** <fishrock@keybase.io> `FD3A5288F042B6850C66B31F09FE44734EB7990E` +* **James M Snell** <jasnell@keybase.io> `71DCFD284A79C3B38668286BC97EC7A07EDE3FC1` +* **Rod Vagg** <rod@vagg.org> `DD8F2338BAE7501E3DD5AC78C273792F7D83545D` -### To build the documentation: +The full set of trusted release keys can be imported by running: - make doc +``` +gpg --keyserver pool.sks-keyservers.net --recv-keys 9554F04D7259F04124DE6B476D5A82AC7E37093B +gpg --keyserver pool.sks-keyservers.net --recv-keys 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 +gpg --keyserver pool.sks-keyservers.net --recv-keys 0034A06D9D9B0064CE8ADF6BF1747F4AD2306D93 +gpg --keyserver pool.sks-keyservers.net --recv-keys FD3A5288F042B6850C66B31F09FE44734EB7990E +gpg --keyserver pool.sks-keyservers.net --recv-keys 71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 +gpg --keyserver pool.sks-keyservers.net --recv-keys DD8F2338BAE7501E3DD5AC78C273792F7D83545D +``` -### To read the documentation: +See the section above on [Verifying Binaries](#verifying-binaries) for +details on what to do with these keys to verify that a downloaded file is official. - man doc/node.1 +Previous releases of Node.js have been signed with one of the following GPG +keys: -Resources for Newcomers ---- - - [The Wiki](https://github.com/joyent/node/wiki) - - [nodejs.org](http://nodejs.org/) - - [how to install node.js and npm (node package manager)](http://www.joyent.com/blog/installing-node-and-npm/) - - [list of modules](https://github.com/joyent/node/wiki/modules) - - [searching the npm registry](http://npmjs.org/) - - [list of companies and projects using node](https://github.com/joyent/node/wiki/Projects,-Applications,-and-Companies-Using-Node) - - [node.js mailing list](http://groups.google.com/group/nodejs) - - irc chatroom, [#node.js on freenode.net](http://webchat.freenode.net?channels=node.js&uio=d4) - - [community](https://github.com/joyent/node/wiki/Community) - - [contributing](https://github.com/joyent/node/wiki/Contributing) - - [big list of all the helpful wiki pages](https://github.com/joyent/node/wiki/_pages) +* Julien Gilli <jgilli@fastmail.fm> `114F43EE0176B71C7BC219DD50A3051F888C628D` +* Timothy J Fontaine <tjfontaine@gmail.com> `7937DFD2AB06298B2293C3187D33FF9D0246406D` +* Isaac Z. Schlueter <i@izs.me> `93C7E9E91B49E432C2F75674B0A78B0A6C481CF6` From d7ae79a452ca31b63946149eeb03f99fa7a351c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Reis?= Date: Wed, 23 Sep 2015 13:33:09 +0100 Subject: [PATCH 6/7] build,win: fix node.exe resource version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When MSBuild invokes rc.exe, it passes NODE_TAG unstringified, but passes it correctly to cl.exe. Hence, this workaround was made to apply only to the resource file. Fixes: https://github.com/nodejs/node/issues/2963 PR-URL: https://github.com/nodejs/node/pull/3053 Reviewed-By: Alexis Campailla Reviewed-By: Johan Bergström --- src/res/node.rc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/res/node.rc b/src/res/node.rc index 0bdb2a0dc74f90..bc2c58a185e061 100644 --- a/src/res/node.rc +++ b/src/res/node.rc @@ -53,8 +53,8 @@ BEGIN VALUE "CompanyName", "Joyent, Inc" VALUE "ProductName", "Node.js" VALUE "FileDescription", "Evented I/O for V8 JavaScript" - VALUE "FileVersion", NODE_VERSION_STRING - VALUE "ProductVersion", NODE_VERSION_STRING + VALUE "FileVersion", NODE_EXE_VERSION + VALUE "ProductVersion", NODE_EXE_VERSION VALUE "OriginalFilename", "node.exe" VALUE "InternalName", "node" VALUE "LegalCopyright", "Copyright Joyent, Inc. and other Node contributors. MIT license." From 2f947e966588d46f85a49e387b8b107e575dff1d Mon Sep 17 00:00:00 2001 From: Rod Vagg Date: Thu, 3 Dec 2015 23:13:33 +1100 Subject: [PATCH 7/7] 2015-12-04, Version 0.10.41 (Maintenance) Security Update Notable items: * build: Add support for Microsoft Visual Studio 2015 * npm: Upgrade to v1.4.29 from v1.4.28. A special one-off release as part of the strategy to get a version of npm into Node.js v0.10.x that works with the current registry (https://github.com/nodejs/LTS/issues/37). This version of npm prints out a banner each time it is run. The banner warns that the next standard release of Node.js v0.10.x will ship with a version of npm v2. * openssl: Upgrade to 1.0.1q, containing fixes CVE-2015-3194 "Certificate verify crash with missing PSS parameter", a potential denial-of-service vector for Node.js TLS servers; TLS clients are also impacted. Details are available at . (Ben Noordhuis) #4133 PR-URL: https://github.com/nodejs/node-private/pull/15 --- ChangeLog | 52 ++++++++++++++++++++++++++++++++++++++++++++++ src/node_version.h | 2 +- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 83ea5105016d0e..686dd24a311621 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,55 @@ +2015-12-04, Version 0.10.41 (Maintenance), @rvagg + +Security Update + +Notable items: + +* build: Add support for Microsoft Visual Studio 2015 +* npm: Upgrade to v1.4.29 from v1.4.28. A special one-off release as part of the strategy to get a version of npm into Node.js v0.10.x that works with the current registry (https://github.com/nodejs/LTS/issues/37). This version of npm prints out a banner each time it is run. The banner warns that the next standard release of Node.js v0.10.x will ship with a version of npm v2. +* openssl: Upgrade to 1.0.1q, containing fixes CVE-2015-3194 "Certificate verify crash with missing PSS parameter", a potential denial-of-service vector for Node.js TLS servers; TLS clients are also impacted. Details are available at . (Ben Noordhuis) https://github.com/nodejs/node/pull/4133 + +Commits: + +* [16ca0779f5] - src/node.cc: fix build error without OpenSSL support (Jörg Krause) https://github.com/nodejs/node-v0.x-archive/pull/25862 +* [c559c7911d] - build: backport tools/release.sh (Rod Vagg) https://github.com/nodejs/node/pull/3965 +* [268d2b4637] - build: backport config for new CI infrastructure (Rod Vagg) https://github.com/nodejs/node/pull/3965 +* [c88a0b26da] - build: update manifest to include Windows 10 (Lucien Greathouse) https://github.com/nodejs/node/pull/2838 +* [8564a9f5f7] - build: gcc version detection on openSUSE Tumbleweed (Henrique Aparecido Lavezzo) https://github.com/nodejs/node-v0.x-archive/pull/25671 +* [9c7bd6de56] - build: run-ci makefile rule (Alexis Campailla) https://github.com/nodejs/node-v0.x-archive/pull/25686 +* [ffa1e1f31d] - build: support flaky tests in test-ci (Alexis Campailla) https://github.com/nodejs/node-v0.x-archive/pull/25686 +* [100dd19e61] - build: support Jenkins via test-ci (Alexis Campailla) https://github.com/nodejs/node-v0.x-archive/pull/25686 +* [ec861f6f90] - build: make release process easier for multi users (Julien Gilli) https://github.com/nodejs/node-v0.x-archive/pull/25638 +* [d7ae79a452] - build,win: fix node.exe resource version (João Reis) https://github.com/nodejs/node/pull/3053 +* [6ac47aa9f5] - build,win: try next MSVS version on failure (João Reis) https://github.com/nodejs/node/pull/2910 +* [e669b27740] - crypto: replace rwlocks with simple mutexes (Ben Noordhuis) https://github.com/nodejs/node/pull/2723 +* [ce0a48826e] - deps: upgrade to openssl 1.0.1q (Ben Noordhuis) https://github.com/nodejs/node/pull/4132 +* [b68781e500] - deps: upgrade npm to 1.4.29 (Forrest L Norvell) https://github.com/nodejs/node/pull/3639 +* [7cf0d9c1d9] - deps: fix openssl for MSVS 2015 (Andy Polyakov) https://github.com/nodejs/node-v0.x-archive/pull/25857 +* [9ee8a14f9e] - deps: fix gyp to work on MacOSX without XCode (Shigeki Ohtsu) https://github.com/nodejs/node-v0.x-archive/pull/25857 +* [a525c7244e] - deps: update gyp to 25ed9ac (João Reis) https://github.com/nodejs/node-v0.x-archive/pull/25857 +* [6502160294] - dns: allow v8 to optimize lookup() (Brian White) https://github.com/nodejs/node-v0.x-archive/pull/8942 +* [5d829a63ab] - doc: backport README.md (Rod Vagg) https://github.com/nodejs/node/pull/3965 +* [62c8948109] - doc: fix Folders as Modules omission of index.json (Elan Shanker) https://github.com/nodejs/node-v0.x-archive/pull/8868 +* [572663f303] - https: don't overwrite servername option (skenqbx) https://github.com/nodejs/node-v0.x-archive/pull/9368 +* [75c84b2439] - test: add test for https agent servername option (skenqbx) https://github.com/nodejs/node-v0.x-archive/pull/9368 +* [841a6dd264] - test: mark more tests as flaky (Alexis Campailla) https://github.com/nodejs/node-v0.x-archive/pull/25807 +* [a7fee30da1] - test: mark test-tls-securepair-server as flaky (Alexis Campailla) https://github.com/nodejs/node-v0.x-archive/pull/25807 +* [7df57703dd] - test: mark test-net-error-twice flaky on SmartOS (Julien Gilli) https://github.com/nodejs/node-v0.x-archive/pull/25760 +* [e10892cccc] - test: make test-abort-fatal-error non flaky (Julien Gilli) https://github.com/nodejs/node-v0.x-archive/pull/25755 +* [a2f879f197] - test: mark recently failing tests as flaky (Alexis Campailla) https://github.com/nodejs/node-v0.x-archive/pull/25686 +* [e7010bdf92] - test: runner should return 0 on flaky tests (Alexis Campailla) https://github.com/nodejs/node-v0.x-archive/pull/25686 +* [c283c9bbb3] - test: support writing test output to file (Alexis Campailla) https://github.com/nodejs/node-v0.x-archive/pull/25686 +* [eeaed586bb] - test: runner support for flaky tests (Alexis Campailla) https://github.com/nodejs/node-v0.x-archive/pull/25686 +* [3bb8174b94] - test: refactor to use common testcfg (Timothy J Fontaine) https://github.com/nodejs/node-v0.x-archive/pull/25686 +* [df59d43586] - tools: pass constant to logger instead of string (Johan Bergström) https://github.com/nodejs/node-v0.x-archive/pull/25686 +* [d103d4ed9a] - tools: fix test.py after v8 upgrade (Ben Noordhuis) https://github.com/nodejs/node-v0.x-archive/pull/25686 +* [8002192b4e] - win: manifest node.exe for Windows 8.1 (Alexis Campailla) https://github.com/nodejs/node/pull/2838 +* [66ec1dae8f] - win: add MSVS 2015 support (Rod Vagg) https://github.com/nodejs/node-v0.x-archive/pull/25857 +* [e192f61514] - win: fix custom actions for WiX older than 3.9 (João Reis) https://github.com/nodejs/node-v0.x-archive/pull/25569 +* [16bcd68dc5] - win: fix custom actions on Visual Studio != 2013 (Julien Gilli) https://github.com/nodejs/node-v0.x-archive/pull/25569 +* [517986c2f4] - win: backport bringing back xp/2k3 support (Bert Belder) https://github.com/nodejs/node-v0.x-archive/pull/25569 +* [10f251e8dd] - win: backport set env before generating projects (Alexis Campailla) https://github.com/nodejs/node-v0.x-archive/pull/25569 + 2015.07.09, Version 0.10.40 (Maintenance) * openssl: upgrade to 1.0.1p diff --git a/src/node_version.h b/src/node_version.h index 40312df15189df..c6bab1e51cbee1 100644 --- a/src/node_version.h +++ b/src/node_version.h @@ -26,7 +26,7 @@ #define NODE_MINOR_VERSION 10 #define NODE_PATCH_VERSION 41 -#define NODE_VERSION_IS_RELEASE 0 +#define NODE_VERSION_IS_RELEASE 1 #ifndef NODE_STRINGIFY #define NODE_STRINGIFY(n) NODE_STRINGIFY_HELPER(n)