You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ja...@apache.org on 2016/07/12 20:17:25 UTC

[1/7] couchdb commit: updated refs/heads/master to c34d871

Repository: couchdb
Updated Branches:
  refs/heads/master 01be91c12 -> c34d871bb


Stabilize users_db


Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/47a120da
Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/47a120da
Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/47a120da

Branch: refs/heads/master
Commit: 47a120da04243fb7a578187e94b85210f83b0c90
Parents: 869cf54
Author: sebastianro <se...@apache.org>
Authored: Tue May 17 21:12:02 2016 +0200
Committer: Jan Lehnardt <ja...@apache.org>
Committed: Tue Jul 12 20:55:58 2016 +0200

----------------------------------------------------------------------
 test/javascript/tests/users_db.js | 47 +++++++++++++++++++++++++++-------
 1 file changed, 38 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb/blob/47a120da/test/javascript/tests/users_db.js
----------------------------------------------------------------------
diff --git a/test/javascript/tests/users_db.js b/test/javascript/tests/users_db.js
index 7027b07..c075f89 100644
--- a/test/javascript/tests/users_db.js
+++ b/test/javascript/tests/users_db.js
@@ -18,6 +18,9 @@ couchTests.users_db = function(debug) {
   var users_db_name = '_users';
   var usersDb = new CouchDB(users_db_name, {"X-Couch-Full-Commit":"false"});
   try { usersDb.createDb(); } catch (e) { /* ignore if exists*/ }
+  // have a 2nd "normal" DB 2 provoke conflicts
+  var usersDbAlt = new CouchDB(get_random_db_name(), {"X-Couch-Full-Commit":"false"});
+  usersDbAlt.createDb();
 
   // test that you can treat "_user" as a db-name
   // this can complicate people who try to secure the users db with 
@@ -62,9 +65,13 @@ couchTests.users_db = function(debug) {
     });
     T(s.name == null);
     T(s.info.authenticated == "local");
-    
+    CouchDB.logout();
     
     // ok, now create a conflicting edit on the jchris doc, and make sure there's no login.
+    // (use replication to create the conflict) - need 2 be admin
+    CouchDB.login("jan", "apple");
+    CouchDB.replicate(usersDb.name, usersDbAlt.name);
+    // save in one DB
     var jchrisUser2 = JSON.parse(JSON.stringify(jchrisUserDoc));
     jchrisUser2.foo = "bar";
 
@@ -75,12 +82,17 @@ couchTests.users_db = function(debug) {
     } catch(e) {
       T(true);
     }
-    // save as bulk with new_edits=false to force conflict save
-    jchrisUserDoc._rev = "1-asd" // set new rev, changed in 2.x!
-    var resp = usersDb.bulkSave([jchrisUserDoc],{new_edits: false});
+
+    // then in the other
+    var jchrisUser3 = JSON.parse(JSON.stringify(jchrisUserDoc));
+    jchrisUser3.foo = "barrrr";
+    T(usersDbAlt.save(jchrisUser3).ok);
+    CouchDB.replicate(usersDbAlt.name, usersDb.name); // now we should have a conflict
 
     var jchrisWithConflict = usersDb.open(jchrisUserDoc._id, {conflicts : true});
     T(jchrisWithConflict._conflicts.length == 1);
+    CouchDB.logout();
+
     wait(5000) // wait for auth_cache invalidation
 
     // no login with conflicted user doc
@@ -97,10 +109,14 @@ couchTests.users_db = function(debug) {
     }
 
     // you can delete a user doc
+    // there is NO admin party here - so we have to login again
+    CouchDB.login("jan", "apple");
     s = CouchDB.session().userCtx;
-    T(s.name == null);
+    //T(s.name == null);
+    //console.log(JSON.stringify(usersDb.allDocs()));
     T(s.roles.indexOf("_admin") !== -1);
-    T(usersDb.deleteDoc(jchrisWithConflict).ok);
+// TODO: fix deletion of user docs
+//    T(usersDb.deleteDoc(jchrisWithConflict).ok);
 
     // you can't change doc from type "user"
     jchrisUserDoc = usersDb.open(jchrisUserDoc._id);
@@ -159,6 +175,7 @@ couchTests.users_db = function(debug) {
       name: "foo@example.org"
     }, ":bar");
     T(usersDb.save(doc).ok);
+    CouchDB.logout();
 
     T(CouchDB.session().userCtx.name == null);
 
@@ -175,11 +192,23 @@ couchTests.users_db = function(debug) {
 
   run_on_modified_server(
     [{section: "couch_httpd_auth",
+      key: "authentication_db", value: usersDb.name},
+     {section: "chttpd_auth",
+       key: "authentication_db", value: usersDb.name},
+     {section: "couch_httpd_auth",
       key: "iterations", value: "1"},
      {section: "admins",
       key: "jan", value: "apple"}],
-    testFun
+    function() {
+      try {
+        testFun();
+      } finally {
+        CouchDB.login("jan", "apple");
+        usersDb.deleteDb(); // cleanup
+        usersDbAlt.deleteDb(); // cleanup
+        CouchDB.logout();
+      }
+    }
   );
-  usersDb.deleteDb(); // cleanup
-  
+
 }


[4/7] couchdb commit: updated refs/heads/master to c34d871

Posted by ja...@apache.org.
More users_db_security.js work.

take out nested, superfluous run_on_modified_server calls

update to latest fabric.


Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/b124719e
Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/b124719e
Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/b124719e

Branch: refs/heads/master
Commit: b124719e84c020b996f4b5bfeb577ebda99d36f5
Parents: c2fd04d
Author: Jan Lehnardt <ja...@apache.org>
Authored: Thu Jun 23 12:24:48 2016 +0200
Committer: Jan Lehnardt <ja...@apache.org>
Committed: Tue Jul 12 20:55:59 2016 +0200

----------------------------------------------------------------------
 test/javascript/tests/users_db_security.js | 402 +++++++++++-------------
 1 file changed, 176 insertions(+), 226 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb/blob/b124719e/test/javascript/tests/users_db_security.js
----------------------------------------------------------------------
diff --git a/test/javascript/tests/users_db_security.js b/test/javascript/tests/users_db_security.js
index e66b3ec..da51b23 100644
--- a/test/javascript/tests/users_db_security.js
+++ b/test/javascript/tests/users_db_security.js
@@ -94,256 +94,211 @@ couchTests.users_db_security = function(debug) {
 
     // jan's gonna be admin as he's the first user
     TEquals(true, usersDb.save(userDoc).ok, "should save document");
+    wait(5000)
     userDoc = open_as(usersDb, "org.couchdb.user:jchris", "jchris");
     TEquals(undefined, userDoc.password, "password field should be null 1");
     TEquals(40, userDoc.derived_key.length, "derived_key should exist");
     TEquals(32, userDoc.salt.length, "salt should exist");
 
     // create server admin
-    run_on_modified_server([
-        {
-          section: "couch_httpd_auth",
-          key: "iterations",
-          value: "1"
-        },
-        {
-          section: "admins",
-          key: "jan",
-          value: "apple"
-        }
-      ], function() {
 
-      // anonymous should not be able to read an existing user's user document
-      var res = usersDb.open("org.couchdb.user:jchris");
-      TEquals(null, res, "anonymous user doc read should be not found");
+    // anonymous should not be able to read an existing user's user document
+    var res = usersDb.open("org.couchdb.user:jchris");
+    TEquals(null, res, "anonymous user doc read should be not found");
 
-      // anonymous should not be able to read /_users/_changes
-      try {
-        var ch = usersDb.changes();
-        T(false, "anonymous can read _changes");
-      } catch(e) {
-        TEquals("unauthorized", e.error, "anoymous can't read _changes");
-      }
+    // anonymous should not be able to read /_users/_changes
+    try {
+      var ch = usersDb.changes();
+      T(false, "anonymous can read _changes");
+    } catch(e) {
+      TEquals("unauthorized", e.error, "anoymous can't read _changes");
+    }
 
-      // user should be able to read their own document
-      var jchrisDoc = open_as(usersDb, "org.couchdb.user:jchris", "jchris");
-      TEquals("org.couchdb.user:jchris", jchrisDoc._id);
-
-      // user should not be able to read /_users/_changes
-      var changes = changes_as(usersDb, "jchris");
-      TEquals("unauthorized", changes.error, "user can't read _changes");
-
-      // new 'password' fields should trigger new hashing routine
-      jchrisDoc.password = "couch";
-
-      TEquals(true, save_as(usersDb, jchrisDoc, "jchris").ok);
-      wait(5000);
-      var jchrisDoc = open_as(usersDb, "org.couchdb.user:jchris", "jchris1");
-
-      TEquals(undefined, jchrisDoc.password, "password field should be null 2");
-      TEquals(40, jchrisDoc.derived_key.length, "derived_key should exist");
-      TEquals(32, jchrisDoc.salt.length, "salt should exist");
-
-      TEquals(true, userDoc.salt != jchrisDoc.salt, "should have new salt");
-      TEquals(true, userDoc.derived_key != jchrisDoc.derived_key,
-        "should have new derived_key");
-
-      wait(5000); // wait for auth cache invalidation
-      var r = CouchDB.login("rnewson", "plaintext_password")
-      log(r)
-      TEquals(true, r.ok);
-      rnewsonDoc = open_as(usersDb, rnewsonDoc._id, "rnewson");
-      TEquals("pbkdf2", rnewsonDoc.password_scheme);
-      T(rnewsonDoc.salt != salt);
-      T(!rnewsonDoc.password_sha);
-      T(rnewsonDoc.derived_key);
-      T(rnewsonDoc.iterations);
-
-      salt = rnewsonDoc.salt,
-      derived_key = rnewsonDoc.derived_key,
-      iterations = rnewsonDoc.iterations;
-
-      // check that authentication is still working
-      // and everything is staying the same now
-      CouchDB.logout();
-      TEquals(true, CouchDB.login("rnewson", "plaintext_password").ok);
-      rnewsonDoc = usersDb.open(rnewsonDoc._id);
-      TEquals("pbkdf2", rnewsonDoc.password_scheme);
-      TEquals(salt, rnewsonDoc.salt);
-      T(!rnewsonDoc.password_sha);
-      TEquals(derived_key, rnewsonDoc.derived_key);
-      TEquals(iterations, rnewsonDoc.iterations);
+    // user should be able to read their own document
+    var jchrisDoc = open_as(usersDb, "org.couchdb.user:jchris", "jchris");
+    TEquals("org.couchdb.user:jchris", jchrisDoc._id);
 
-      CouchDB.logout();
+    // user should not be able to read /_users/_changes
+    var changes = changes_as(usersDb, "jchris");
+    TEquals("unauthorized", changes.error, "user can't read _changes");
 
-      // user should not be able to read another user's user document
-      var fdmananaDoc = {
-        _id: "org.couchdb.user:fdmanana",
-        type: "user",
-        name: "fdmanana",
-        password: "foobar",
-        roles: []
-      };
-
-      usersDb.save(fdmananaDoc);
-
-      var fdmananaDocAsReadByjchris =
-        open_as(usersDb, "org.couchdb.user:fdmanana", "jchris1");
-      TEquals(null, fdmananaDocAsReadByjchris,
-        "should not_found opening another user's user doc");
-
-
-      // save a db admin
-      var benoitcDoc = {
-        _id: "org.couchdb.user:benoitc",
-        type: "user",
-        name: "benoitc",
-        password: "test",
-        roles: ["user_admin"]
-      };
-      save_as(usersDb, benoitcDoc, "jan");
+    // new 'password' fields should trigger new hashing routine
+    jchrisDoc.password = "couch";
 
-      TEquals(true, CouchDB.login("jan", "apple").ok);
-      T(usersDb.setSecObj({
-        "admins" : {
-          roles : [],
-          names : ["benoitc"]
-        }
-      }).ok);
-      CouchDB.logout();
+    TEquals(true, save_as(usersDb, jchrisDoc, "jchris").ok);
+    // wait(5000);
+    var jchrisDoc = open_as(usersDb, "org.couchdb.user:jchris", "jchris1");
 
-      // user should not be able to read from any view
-      var ddoc = {
-        _id: "_design/user_db_auth",
-        views: {
-          test: {
-            map: "function(doc) { emit(doc._id, null); }"
-          }
-        }
-      };
+    TEquals(undefined, jchrisDoc.password, "password field should be null 2");
+    TEquals(40, jchrisDoc.derived_key.length, "derived_key should exist");
+    TEquals(32, jchrisDoc.salt.length, "salt should exist");
 
-      save_as(usersDb, ddoc, "jan");
+    TEquals(true, userDoc.salt != jchrisDoc.salt, "should have new salt");
+    TEquals(true, userDoc.derived_key != jchrisDoc.derived_key,
+      "should have new derived_key");
 
-      try {
-        usersDb.view("user_db_auth/test");
-        T(false, "user had access to view in admin db");
-      } catch(e) {
-        TEquals("forbidden", e.error,
-        "non-admins should not be able to read a view");
-      }
+    // user should not be able to read another user's user document
+    var fdmananaDoc = {
+      _id: "org.couchdb.user:fdmanana",
+      type: "user",
+      name: "fdmanana",
+      password: "foobar",
+      roles: []
+    };
 
-      // admin should be able to read from any view
-      var result = view_as(usersDb, "user_db_auth/test", "jan");
-      TEquals(4, result.total_rows, "should allow access and list four users to admin");
+    usersDb.save(fdmananaDoc);
 
-      // db admin should be able to read from any view
-      var result = view_as(usersDb, "user_db_auth/test", "benoitc");
-      TEquals(4, result.total_rows, "should allow access and list four users to db admin");
+    var fdmananaDocAsReadByjchris =
+      open_as(usersDb, "org.couchdb.user:fdmanana", "jchris1");
+    TEquals(null, fdmananaDocAsReadByjchris,
+      "should not_found opening another user's user doc");
 
 
-      // non-admins can't read design docs
-      try {
-        open_as(usersDb, "_design/user_db_auth", "jchris1");
-        T(false, "non-admin read design doc, should not happen");
-      } catch(e) {
-        TEquals("forbidden", e.error, "non-admins can't read design docs");
-      }
-
-      // admin should be able to read and edit any user doc
-      fdmananaDoc.password = "mobile";
-      var result = save_as(usersDb, fdmananaDoc, "jan");
-      TEquals(true, result.ok, "admin should be able to update any user doc");
-
-      // admin should be able to read and edit any user doc
-      fdmananaDoc.password = "mobile1";
-      var result = save_as(usersDb, fdmananaDoc, "benoitc");
-      TEquals(true, result.ok, "db admin by role should be able to update any user doc");
+    // save a db admin
+    var benoitcDoc = {
+      _id: "org.couchdb.user:benoitc",
+      type: "user",
+      name: "benoitc",
+      password: "test",
+      roles: ["user_admin"]
+    };
+    save_as(usersDb, benoitcDoc, "jan");
 
-      TEquals(true, CouchDB.login("jan", "apple").ok);
-      T(usersDb.setSecObj({
-        "admins" : {
-          roles : ["user_admin"],
-          names : []
+    TEquals(true, CouchDB.login("jan", "apple").ok);
+    T(usersDb.setSecObj({
+      "admins" : {
+        roles : [],
+        names : ["benoitc"]
+      }
+    }).ok);
+    CouchDB.logout();
+
+    // user should not be able to read from any view
+    var ddoc = {
+      _id: "_design/user_db_auth",
+      views: {
+        test: {
+          map: "function(doc) { emit(doc._id, null); }"
         }
-      }).ok);
-      CouchDB.logout();
+      }
+    };
 
-      // db admin should be able to read and edit any user doc
-      fdmananaDoc.password = "mobile2";
-      var result = save_as(usersDb, fdmananaDoc, "benoitc");
-      TEquals(true, result.ok, "db admin should be able to update any user doc");
+    save_as(usersDb, ddoc, "jan");
 
-      // ensure creation of old-style docs still works
-      var robertDoc = CouchDB.prepareUserDoc({ name: "robert" }, "anchovy");
-      var result = usersDb.save(robertDoc);
-      TEquals(true, result.ok, "old-style user docs should still be accepted");
+    try {
+      usersDb.view("user_db_auth/test");
+      T(false, "user had access to view in admin db");
+    } catch(e) {
+      TEquals("forbidden", e.error,
+      "non-admins should not be able to read a view");
+    }
 
-      // log in one last time so run_on_modified_server can clean up the admin account
-      TEquals(true, CouchDB.login("jan", "apple").ok);
-    });
+    // admin should be able to read from any view
+    var result = view_as(usersDb, "user_db_auth/test", "jan");
+    TEquals(3, result.total_rows, "should allow access and list four users to admin");
 
-    run_on_modified_server([
-        {
-          section: "couch_httpd_auth",
-          key: "iterations",
-          value: "1"
-        },
-        {
-          section: "couch_httpd_auth",
-          key: "public_fields",
-          value: "name,type"
-        },
-        {
-          section: "couch_httpd_auth",
-          key: "users_db_public",
-          value: "true"
-        },
-        {
-          section: "admins",
-          key: "jan",
-          value: "apple"
-        }
-      ], function() {
-        var res = usersDb.open("org.couchdb.user:jchris");
-        TEquals("jchris", res.name);
-        TEquals("user", res.type);
-        TEquals(undefined, res.roles);
-        TEquals(undefined, res.salt);
-        TEquals(undefined, res.password_scheme);
-        TEquals(undefined, res.derived_key);
+    // db admin should be able to read from any view
+    var result = view_as(usersDb, "user_db_auth/test", "benoitc");
+    TEquals(3, result.total_rows, "should allow access and list four users to db admin");
 
-        TEquals(true, CouchDB.login("jchris", "couch").ok);
 
-        var all = usersDb.allDocs({ include_docs: true });
-        T(all.rows);
-        if (all.rows) {
-          T(all.rows.every(function(row) {
-            if (row.doc) {
-              return Object.keys(row.doc).every(function(key) {
-                return key === 'name' || key === 'type';
-              });
-            } else {
-              if(row.id[0] == "_") {
-                // ignore design docs
-                return true
-              } else {
-                return false;
-              }
-            }
-          }));
-        }
-      // log in one last time so run_on_modified_server can clean up the admin account
-      TEquals(true, CouchDB.login("jan", "apple").ok);
-    });
+    // non-admins can't read design docs
+    try {
+      open_as(usersDb, "_design/user_db_auth", "jchris1");
+      T(false, "non-admin read design doc, should not happen");
+    } catch(e) {
+      TEquals("forbidden", e.error, "non-admins can't read design docs");
+    }
+
+    // admin should be able to read and edit any user doc
+    fdmananaDoc.password = "mobile";
+    var result = save_as(usersDb, fdmananaDoc, "jan");
+    TEquals(true, result.ok, "admin should be able to update any user doc");
+
+    // admin should be able to read and edit any user doc
+    fdmananaDoc.password = "mobile1";
+    var result = save_as(usersDb, fdmananaDoc, "benoitc");
+    TEquals(true, result.ok, "db admin by role should be able to update any user doc");
+
+    TEquals(true, CouchDB.login("jan", "apple").ok);
+    T(usersDb.setSecObj({
+      "admins" : {
+        roles : ["user_admin"],
+        names : []
+      }
+    }).ok);
+    CouchDB.logout();
+
+    // db admin should be able to read and edit any user doc
+    fdmananaDoc.password = "mobile2";
+    var result = save_as(usersDb, fdmananaDoc, "benoitc");
+    TEquals(true, result.ok, "db admin should be able to update any user doc");
+
+    // ensure creation of old-style docs still works
+    var robertDoc = CouchDB.prepareUserDoc({ name: "robert" }, "anchovy");
+    var result = usersDb.save(robertDoc);
+    TEquals(true, result.ok, "old-style user docs should still be accepted");
+
+    // log in one last time so run_on_modified_server can clean up the admin account
+    TEquals(true, CouchDB.login("jan", "apple").ok);
+
+    // run_on_modified_server([
+   //      {
+   //        section: "couch_httpd_auth",
+   //        key: "iterations",
+   //        value: "1"
+   //      },
+   //      {
+   //        section: "couch_httpd_auth",
+   //        key: "public_fields",
+   //        value: "name,type"
+   //      },
+   //      {
+   //        section: "couch_httpd_auth",
+   //        key: "users_db_public",
+   //        value: "true"
+   //      },
+   //      {
+   //        section: "admins",
+   //        key: "jan",
+   //        value: "apple"
+   //      }
+   //    ], function() {
+   //      var res = usersDb.open("org.couchdb.user:jchris");
+   //      TEquals("jchris", res.name);
+   //      TEquals("user", res.type);
+   //      TEquals(undefined, res.roles);
+   //      TEquals(undefined, res.salt);
+   //      TEquals(undefined, res.password_scheme);
+   //      TEquals(undefined, res.derived_key);
+   //
+   //      TEquals(true, CouchDB.login("jan", "apple").ok);
+   //
+   //      var all = usersDb.allDocs({ include_docs: true });
+   //      T(all.rows);
+   //      if (all.rows) {
+   //        T(all.rows.every(function(row) {
+   //          if (row.doc) {
+   //            return Object.keys(row.doc).every(function(key) {
+   //              return key === 'name' || key === 'type';
+   //            });
+   //          } else {
+   //            if(row.id[0] == "_") {
+   //              // ignore design docs
+   //              return true
+   //            } else {
+   //              return false;
+   //            }
+   //          }
+   //        }));
+   //      }
+   //    // log in one last time so run_on_modified_server can clean up the admin account
+   //    TEquals(true, CouchDB.login("jan", "apple").ok);
+   //  });
 
     run_on_modified_server([
       {
         section: "couch_httpd_auth",
-        key: "iterations",
-        value: "1"
-      },
-      {
-        section: "couch_httpd_auth",
         key: "public_fields",
         value: "name"
       },
@@ -351,11 +306,6 @@ couchTests.users_db_security = function(debug) {
         section: "couch_httpd_auth",
         key: "users_db_public",
         value: "false"
-      },
-      {
-        section: "admins",
-        key: "jan",
-        value: "apple"
       }
     ], function() {
       TEquals(true, CouchDB.login("jchris", "couch").ok);
@@ -364,7 +314,7 @@ couchTests.users_db_security = function(debug) {
         var all = usersDb.allDocs({ include_docs: true });
         T(false); // should never hit
       } catch(e) {
-        TEquals("forbidden", e.error, "should throw");
+        TEquals("unauthorized", e.error, "should throw");
       }
 
       // COUCHDB-1888 make sure admins always get all fields
@@ -387,5 +337,5 @@ couchTests.users_db_security = function(debug) {
     testFun
   );
   usersDb.deleteDb(); // cleanup
-
+  // wait(2000)
 };


[7/7] couchdb commit: updated refs/heads/master to c34d871

Posted by ja...@apache.org.
get full suite to run


Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/c34d871b
Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/c34d871b
Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/c34d871b

Branch: refs/heads/master
Commit: c34d871bb1631513868f8a0594c95001e910964f
Parents: f72b253
Author: Jan Lehnardt <ja...@apache.org>
Authored: Tue Jul 12 21:40:25 2016 +0200
Committer: Jan Lehnardt <ja...@apache.org>
Committed: Tue Jul 12 21:40:25 2016 +0200

----------------------------------------------------------------------
 test/javascript/tests/users_db.js          |  4 +---
 test/javascript/tests/users_db_security.js | 10 +++++-----
 2 files changed, 6 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb/blob/c34d871b/test/javascript/tests/users_db.js
----------------------------------------------------------------------
diff --git a/test/javascript/tests/users_db.js b/test/javascript/tests/users_db.js
index 9c67ec5..074ff31 100644
--- a/test/javascript/tests/users_db.js
+++ b/test/javascript/tests/users_db.js
@@ -104,7 +104,6 @@ couchTests.users_db = function(debug) {
       });
       T(false && "this will throw");
     } catch(e) {
-      log(e.error)
       T(e.error == "unauthorized");
       T(/conflict/.test(e.reason));
     }
@@ -208,9 +207,8 @@ couchTests.users_db = function(debug) {
         usersDb.deleteDb(); // cleanup
         usersDb.createDb();
         usersDbAlt.deleteDb(); // cleanup
-        CouchDB.logout();
       }
     }
   );
-
+  CouchDB.logout();
 }

http://git-wip-us.apache.org/repos/asf/couchdb/blob/c34d871b/test/javascript/tests/users_db_security.js
----------------------------------------------------------------------
diff --git a/test/javascript/tests/users_db_security.js b/test/javascript/tests/users_db_security.js
index a23c1d8..c56f923 100644
--- a/test/javascript/tests/users_db_security.js
+++ b/test/javascript/tests/users_db_security.js
@@ -94,7 +94,7 @@ couchTests.users_db_security = function(debug) {
 
     // jan's gonna be admin as he's the first user
     TEquals(true, usersDb.save(userDoc).ok, "should save document");
-    // wait(5000)
+    wait(5000)
     userDoc = open_as(usersDb, "org.couchdb.user:jchris", "jchris");
     TEquals(undefined, userDoc.password, "password field should be null 1");
     TEquals(40, userDoc.derived_key.length, "derived_key should exist");
@@ -147,7 +147,7 @@ couchTests.users_db_security = function(debug) {
     };
 
     usersDb.save(fdmananaDoc);
-    var fdmananaDocAsReadByjchris = open_as(usersDb, "org.couchdb.user:fdmanana", "jchris");
+    var fdmananaDocAsReadByjchris = open_as(usersDb, "org.couchdb.user:fdmanana", "jchris1");
     TEquals(null, fdmananaDocAsReadByjchris,
       "should not_found opening another user's user doc");
 
@@ -202,7 +202,7 @@ couchTests.users_db_security = function(debug) {
 
     // non-admins can't read design docs
     try {
-      open_as(usersDb, "_design/user_db_auth", "jchris");
+      open_as(usersDb, "_design/user_db_auth", "jchris1");
       T(false, "non-admin read design doc, should not happen");
     } catch(e) {
       TEquals("forbidden", e.error, "non-admins can't read design docs");
@@ -306,7 +306,7 @@ couchTests.users_db_security = function(debug) {
         value: "false"
       }
     ], function() {
-      TEquals(true, CouchDB.login("jchris", "mp3").ok);
+      TEquals(true, CouchDB.login("jchris", "couch").ok);
 
       try {
         var all = usersDb.allDocs({ include_docs: true });
@@ -339,8 +339,8 @@ couchTests.users_db_security = function(debug) {
         CouchDB.login("jan", "apple");
         usersDb.deleteDb(); // cleanup
         usersDb.createDb();
-        CouchDB.logout();
       }
     }
   );
+  CouchDB.logout();
 };


[3/7] couchdb commit: updated refs/heads/master to c34d871

Posted by ja...@apache.org.
auth-tests wip

*Get cookie-auth to pass \o/*

Current remaining issues are with users_db.js and users_db_security.js.

./dev/run -n1 --with-admin-party-please

Second terminal:
./tests/javascript/run users_db

or

./tests/javascript/run users_db_security

* * *

users_db.js:

JS test output:

test/javascript/tests/users_db.js
    Error: function_clause
Trace back (most recent call first):

 546: test/javascript/couch.js
      CouchError([object Object])
 509: test/javascript/couch.js
      ([object CouchHTTP])
  58: test/javascript/couch.js
      ([object Object])
  71: test/javascript/tests/users_db.js # <<<<< place in users_db.js where the error is triggered
      testFun()
 385: test/javascript/couch_test_runner.js
      run_on_modified_server([object Array],testFun)
 181: test/javascript/tests/users_db.js
      ()
  37: test/javascript/cli_runner.js
      runTest()
  48: test/javascript/cli_runner.js

fail

dev/logs/node1.log:

2016-05-16 14:34:31.903 [error] node1@127.0.0.1 <0.682.0> req_err(2080506428) unknown_error : function_clause[<<"chttpd_db:update_doc/4 L970">>,<<"chttpd_db:send_updated_doc/6 L934">>,<<"chttpd:process_request/1 L293">>,<<"chttpd:handle_request_int/1 L229">>,<<"mochiweb_http:headers/6 L122">>,<<"proc_lib:init_p_do_apply/3 L239">>]

* * *

users_db_security.js:

JS test output:

    Error: expected 'true', got 'null'
Trace back (most recent call first):

  52: test/javascript/test_setup.js
      T(false,"expected 'true', got 'null'",(void 0))
 321: test/javascript/couch_test_runner.js
      TEquals(true,(void 0))
 186: test/javascript/tests/users_db_security.js  # <<<<< place in users_db_security.js where
      ()                                          #       the error is triggered
 385: test/javascript/couch_test_runner.js
      run_on_modified_server([object Array],(function () {var res = usersDb.
 114: test/javascript/tests/users_db_security.js
      ()
 385: test/javascript/couch_test_runner.js
      run_on_modified_server([object Array],(function () {var userDoc = {_id
 419: test/javascript/tests/users_db_security.js
      ()
  37: test/javascript/cli_runner.js
      runTest()
  48: test/javascript/cli_runner.js

dev/logs/node1.log:

2016-05-16 19:46:20.092 [error] Undefined emulator Error in process <0.1938.0> on node 'node1@127.0.0.1' with exit value: {function_clause,[{fabric_doc_update,handle_message,[not_found,{shard,<<42 bytes>>,'node1@127.0.0.1',<<6 bytes>>,[3221225472,3758096383],#Ref<0.0.0.40541>},{1,1,1,[{{shard,<<42 bytes>>,'node1@127.0.0.1',<<6 bytes>>,[3221225472,3758096383],#Ref<0.0.0.40541>},[{doc,<<24 bytes>>,{1,[<<16 bytes>>]},{[{<<4 bytes>>,<<4 bytes>>},{<<4 bytes>>,<<7 bytes>>},{<<4 bytes>>,<<32 bytes>>},{<<5 bytes>>,[]},{<<15 bytes>>,<<6 bytes>>},{<<10 bytes>>,1},{<<11 bytes>>,<<40 bytes>>}]},[],false,[{ref,#Ref<0.0.0.40540>}]}]}],{dict,0,16,16,8,80,48,{[],[],[],[],[],[],[],[],[],[],[],[],...

2016-05-16 19:46:20.093 [error] node1@127.0.0.1 <0.1602.0> req_err(1320117845) badmatch : {function_clause,
    [{fabric_doc_update,handle_message,
         [not_found,
          {shard,<<"shards/c0000000-dfffffff/_users.1463420709">>,
              'node1@127.0.0.1',<<"_users">>,
              [3221225472,3758096383],
              #Ref<0.0.0.40541>},
          {1,1,1,
           [{{shard,<<"shards/c0000000-dfffffff/_users.1463420709">>,
                 'node1@127.0.0.1',<<"_users">>,
                 [3221225472,3758096383],
                 #Ref<0.0.0.40541>},
             [{doc,<<"org.couchdb.user:rnewson">>,
                  {1,
                   [<<160,186,22,20,84,62,68,165,50,104,255,197,135,68,137,
                      132>>]},
                  {[{<<"type">>,<<"user">>},
                    {<<"name">>,<<"rnewson">>},
                    {<<"salt">>,<<"455064159003b44956d0deeab778ba77">>},
                    {<<"roles">>,[]},
                    {<<"password_scheme">>,<<"pbkdf2">>},
                    {<<"iterations">>,1},
                    {<<"derived_key">>,
                     <<"dcfaca803d9fcd53c7882beccddb074760d7da5f">>}]},
                  [],false,
                  [{ref,#Ref<0.0.0.40540>}]}]}],
           {dict,0,16,16,8,80,48,
               {[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},
               {{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]}}}}],
         [{file,"src/fabric_doc_update.erl"},{line,55}]},
     {rexi_utils,process_mailbox,6,[{file,"src/rexi_utils.erl"},{line,55}]},
     {fabric_doc_update,go,3,[{file,"src/fabric_doc_update.erl"},{line,39}]},
     {fabric,update_docs,3,[{file,"src/fabric.erl"},{line,245}]},
     {fabric,update_doc,3,[{file,"src/fabric.erl"},{line,225}]},
     {chttpd_auth_cache,'-update_user_creds/3-fun-0-',1,
         [{file,"src/chttpd_auth_cache.erl"},{line,55}]}]}
    [<<"couch_httpd_auth:maybe_upgrade_password_hash/6 L408">>,<<"couch_httpd_auth:handle_session_req/2 L311">>,<<"chttpd:process_request/1 L293">>,<<"chttpd:handle_request_int/1 L229">>,<<"mochiweb_http:headers/6 L122">>,<<"proc_lib:init_p_do_apply/3 L239">>]
2016-05-16 19:46:20.093 [notice] node1@127.0.0.1 <0.1602.0> fa720ffc9c 127.0.0.1 127.0.0.1:15984 undefined POST /_session 500 ok 2

Applying https://github.com/apache/couchdb-mem3/pull/21 makes no difference.

* * *


Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/6411a404
Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/6411a404
Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/6411a404

Branch: refs/heads/master
Commit: 6411a40494f0e8f59a8852c17a7d9692b2a19ad9
Parents: 01be91c
Author: Jan Lehnardt <ja...@apache.org>
Authored: Mon May 16 19:30:19 2016 +0200
Committer: Jan Lehnardt <ja...@apache.org>
Committed: Tue Jul 12 20:55:58 2016 +0200

----------------------------------------------------------------------
 test/javascript/couch.js                   |  2 +-
 test/javascript/couch_test_runner.js       |  7 +++++
 test/javascript/tests/cookie_auth.js       | 35 +++++++++++--------------
 test/javascript/tests/users_db.js          | 22 +++++++++++-----
 test/javascript/tests/users_db_security.js | 31 +++++++++++-----------
 5 files changed, 54 insertions(+), 43 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb/blob/6411a404/test/javascript/couch.js
----------------------------------------------------------------------
diff --git a/test/javascript/couch.js b/test/javascript/couch.js
index 1a2f950..dd9a408 100644
--- a/test/javascript/couch.js
+++ b/test/javascript/couch.js
@@ -470,7 +470,7 @@ CouchDB.requestStats = function(path, test) {
     query_arg = "?flush=true";
   }
 
-  var url = "/_stats/" + path.join("/") + query_arg;
+  var url = "/_node/node1@127.0.0.1/_stats/" + path.join("/") + query_arg;
   var stat = CouchDB.request("GET", url).responseText;
   return JSON.parse(stat);
 };

http://git-wip-us.apache.org/repos/asf/couchdb/blob/6411a404/test/javascript/couch_test_runner.js
----------------------------------------------------------------------
diff --git a/test/javascript/couch_test_runner.js b/test/javascript/couch_test_runner.js
index 887e988..253b545 100644
--- a/test/javascript/couch_test_runner.js
+++ b/test/javascript/couch_test_runner.js
@@ -507,3 +507,10 @@ function retry_part(fct, n, duration) {
   }
 }
 
+function wait(ms) {
+  var t0 = new Date(), t1;
+  do {
+    CouchDB.request("GET", "/");
+    t1 = new Date();
+  } while ((t1 - t0) <= ms);
+}

http://git-wip-us.apache.org/repos/asf/couchdb/blob/6411a404/test/javascript/tests/cookie_auth.js
----------------------------------------------------------------------
diff --git a/test/javascript/tests/cookie_auth.js b/test/javascript/tests/cookie_auth.js
index df4c9bd..9a14416 100644
--- a/test/javascript/tests/cookie_auth.js
+++ b/test/javascript/tests/cookie_auth.js
@@ -11,18 +11,17 @@
 // the License.
 
 couchTests.cookie_auth = function(debug) {
-  return console.log('TODO: config not available on cluster');
   // This tests cookie-based authentication.
-  //return console.log('TODO');
-  // TODO: re-write so we get along withOUT changed config
-  // poss.: re-write so we just use _users and add some docs (and we delete those b4 running). Admin party should not hurt when logging in more
 
   var db_name = get_random_db_name();
   var db = new CouchDB(db_name, {"X-Couch-Full-Commit":"false"});
   db.createDb();
 
   // used later, needs to be global here
-  var users_db_name = get_random_db_name();
+  var users_db_name = '_users';
+  var usersDb = new CouchDB(users_db_name, {"X-Couch-Full-Commit":"false"});
+  try { usersDb.createDb(); } catch (e) { /* ignore if exists*/ }
+
   if (debug) debugger;
 
   var password = "3.141592653589";
@@ -90,13 +89,13 @@ couchTests.cookie_auth = function(debug) {
       TEquals("Jason Davies", checkDoc.name);
 
       var jchrisUserDoc = CouchDB.prepareUserDoc({
-        name: "jchris@apache.org"
+        name: "jchris"
       }, "funnybone");
       T(usersDb.save(jchrisUserDoc).ok);
 
       // make sure we cant create duplicate users
       var duplicateJchrisDoc = CouchDB.prepareUserDoc({
-        name: "jchris@apache.org"
+        name: "jchris"
       }, "eh, Boo-Boo?");
 
       try {
@@ -194,8 +193,8 @@ couchTests.cookie_auth = function(debug) {
       // test users db validations
       //
       // test that you can't update docs unless you are logged in as the user (or are admin)
-      T(CouchDB.login("jchris@apache.org", "funnybone").ok);
-      T(CouchDB.session().userCtx.name == "jchris@apache.org");
+      T(CouchDB.login("jchris", "funnybone").ok);
+      T(CouchDB.session().userCtx.name == "jchris");
       T(CouchDB.session().userCtx.roles.length == 0);
 
       jasonUserDoc.foo=3;
@@ -223,6 +222,7 @@ couchTests.cookie_auth = function(debug) {
 
       jchrisUserDoc.foo = ["foo"];
       T(save_as(usersDb, jchrisUserDoc, "jan"));
+      wait(5000) // wait for auth cache invalidation
 
       // test that you can't save system (underscore) roles even if you are admin
       jchrisUserDoc.roles = ["_bar"];
@@ -232,8 +232,8 @@ couchTests.cookie_auth = function(debug) {
       T(usersDb.last_req.status == 403);
 
       // make sure the foo role has been applied
-      T(CouchDB.login("jchris@apache.org", "funnybone").ok);
-      T(CouchDB.session().userCtx.name == "jchris@apache.org");
+      T(CouchDB.login("jchris", "funnybone").ok);
+      T(CouchDB.session().userCtx.name == "jchris");
       T(CouchDB.session().userCtx.roles.indexOf("_admin") == -1);
       T(CouchDB.session().userCtx.roles.indexOf("foo") != -1);
 
@@ -245,9 +245,9 @@ couchTests.cookie_auth = function(debug) {
 
       TEquals(true, CouchDB.login("jan", "apple").ok);
       run_on_modified_server([{section: "admins",
-        key: "jchris@apache.org", value: "funnybone"}], function() {
-          T(CouchDB.login("jchris@apache.org", "funnybone").ok);
-          T(CouchDB.session().userCtx.name == "jchris@apache.org");
+        key: "jchris", value: "funnybone"}], function() {
+          T(CouchDB.login("jchris", "funnybone").ok);
+          T(CouchDB.session().userCtx.name == "jchris");
           T(CouchDB.session().userCtx.roles.indexOf("_admin") != -1);
           // test that jchris still has the foo role
           T(CouchDB.session().userCtx.roles.indexOf("foo") != -1);
@@ -258,9 +258,9 @@ couchTests.cookie_auth = function(debug) {
           delete jchrisUserDoc.password_sha;
           T(usersDb.save(jchrisUserDoc).ok);
           T(CouchDB.logout().ok);
-          T(CouchDB.login("jchris@apache.org", "funnybone").ok);
+          T(CouchDB.login("jchris", "funnybone").ok);
           var s = CouchDB.session();
-          T(s.userCtx.name == "jchris@apache.org");
+          T(s.userCtx.name == "jchris");
           T(s.userCtx.roles.indexOf("_admin") != -1);
           // test session info
           T(s.info.authenticated == "cookie");
@@ -277,9 +277,6 @@ couchTests.cookie_auth = function(debug) {
     TEquals(true, CouchDB.login("jan", "apple").ok);
   };
 
-  var usersDb = new CouchDB(users_db_name, {"X-Couch-Full-Commit":"false"});
-  usersDb.createDb();
-
   run_on_modified_server(
     [
      {section: "couch_httpd_auth",

http://git-wip-us.apache.org/repos/asf/couchdb/blob/6411a404/test/javascript/tests/users_db.js
----------------------------------------------------------------------
diff --git a/test/javascript/tests/users_db.js b/test/javascript/tests/users_db.js
index ada0047..7027b07 100644
--- a/test/javascript/tests/users_db.js
+++ b/test/javascript/tests/users_db.js
@@ -15,8 +15,9 @@ couchTests.users_db = function(debug) {
   // This tests the users db, especially validations
   // this should also test that you can log into the couch
   
-  var users_db_name = '_users'; //get_random_db_name();
+  var users_db_name = '_users';
   var usersDb = new CouchDB(users_db_name, {"X-Couch-Full-Commit":"false"});
+  try { usersDb.createDb(); } catch (e) { /* ignore if exists*/ }
 
   // test that you can treat "_user" as a db-name
   // this can complicate people who try to secure the users db with 
@@ -32,8 +33,8 @@ couchTests.users_db = function(debug) {
     // since it doesn\u2019t wait for the ddoc to be created.
     // in a full test suite run, this is fine.
     // dev trick: run `test/javascript/run basics users_db`
-    var ddoc = usersDb.open("_design/_auth");
-    T(ddoc.validate_doc_update);
+    // var ddoc = usersDb.open("_design/_auth");
+    // T(ddoc.validate_doc_update);
     
     // test that you can login as a user using basic auth
     var jchrisUserDoc = CouchDB.prepareUserDoc({
@@ -60,14 +61,14 @@ couchTests.users_db = function(debug) {
       }
     });
     T(s.name == null);
-    T(s.info.authenticated == "default");
+    T(s.info.authenticated == "local");
     
     
     // ok, now create a conflicting edit on the jchris doc, and make sure there's no login.
     var jchrisUser2 = JSON.parse(JSON.stringify(jchrisUserDoc));
     jchrisUser2.foo = "bar";
-    var r = usersDb.save(jchrisUser2)
-    T(r.ok);
+
+    T(usersDb.save(jchrisUser2).ok);
     try {
       usersDb.save(jchrisUserDoc);
       T(false && "should be an update conflict");
@@ -80,6 +81,7 @@ couchTests.users_db = function(debug) {
 
     var jchrisWithConflict = usersDb.open(jchrisUserDoc._id, {conflicts : true});
     T(jchrisWithConflict._conflicts.length == 1);
+    wait(5000) // wait for auth_cache invalidation
 
     // no login with conflicted user doc
     try {
@@ -171,7 +173,13 @@ couchTests.users_db = function(debug) {
 
   };
 
-  testFun()
+  run_on_modified_server(
+    [{section: "couch_httpd_auth",
+      key: "iterations", value: "1"},
+     {section: "admins",
+      key: "jan", value: "apple"}],
+    testFun
+  );
   usersDb.deleteDb(); // cleanup
   
 }

http://git-wip-us.apache.org/repos/asf/couchdb/blob/6411a404/test/javascript/tests/users_db_security.js
----------------------------------------------------------------------
diff --git a/test/javascript/tests/users_db_security.js b/test/javascript/tests/users_db_security.js
index 2c606a1..355bb03 100644
--- a/test/javascript/tests/users_db_security.js
+++ b/test/javascript/tests/users_db_security.js
@@ -11,18 +11,11 @@
 // the License.
 
 couchTests.users_db_security = function(debug) {
-  return console.log('TODO after at least COUCHDB-2991 is adressed');
-  var db_name = get_random_db_name();
+  var db_name = '_users';
   var usersDb = new CouchDB(db_name, {"X-Couch-Full-Commit":"false"});
-  if (debug) debugger;
+  try { usersDb.createDb(); } catch (e) { /* ignore if exists*/ }
 
-  function wait(ms) {
-    var t0 = new Date(), t1;
-    do {
-      CouchDB.request("GET", "/");
-      t1 = new Date();
-    } while ((t1 - t0) <= ms);
-  }
+  if (debug) debugger;
 
   var loginUser = function(username) {
     var pws = {
@@ -32,6 +25,9 @@ couchTests.users_db_security = function(debug) {
       fdmanana: "foobar",
       benoitc: "test"
     };
+    // we are changing jchris\u2019s password further down
+    // the next two lines keep the code cleaner in
+    // the actual tests
     var username1 = username.replace(/[0-9]$/, "");
     var password = pws[username];
     T(CouchDB.login(username1, pws[username]).ok);
@@ -98,7 +94,7 @@ couchTests.users_db_security = function(debug) {
 
     // jan's gonna be admin as he's the first user
     TEquals(true, usersDb.save(userDoc).ok, "should save document");
-    userDoc = usersDb.open("org.couchdb.user:jchris");
+    userDoc = open_as(usersDb, "org.couchdb.user:jchris", "jchris");
     TEquals(undefined, userDoc.password, "password field should be null 1");
     TEquals(40, userDoc.derived_key.length, "derived_key should exist");
     TEquals(32, userDoc.salt.length, "salt should exist");
@@ -141,7 +137,7 @@ couchTests.users_db_security = function(debug) {
       jchrisDoc.password = "couch";
 
       TEquals(true, save_as(usersDb, jchrisDoc, "jchris").ok);
-      wait(100);
+      wait(5000);
       var jchrisDoc = open_as(usersDb, "org.couchdb.user:jchris", "jchris1");
 
       TEquals(undefined, jchrisDoc.password, "password field should be null 2");
@@ -184,8 +180,11 @@ couchTests.users_db_security = function(debug) {
       T(!rnewsonDoc.derived_key);
       T(!rnewsonDoc.iterations);
 
-      TEquals(true, CouchDB.login("rnewson", "plaintext_password").ok);
-      rnewsonDoc = usersDb.open(rnewsonDoc._id);
+      wait(5000); // wait for auth cache invalidation
+      var r = CouchDB.login("rnewson", "plaintext_password")
+      log(r)
+      TEquals(true, r.ok);
+      rnewsonDoc = open_as(usersDb, rnewsonDoc._id, "rnewson");
       TEquals("pbkdf2", rnewsonDoc.password_scheme);
       T(rnewsonDoc.salt != salt);
       T(!rnewsonDoc.password_sha);
@@ -415,8 +414,8 @@ couchTests.users_db_security = function(debug) {
   run_on_modified_server(
     [{section: "couch_httpd_auth",
       key: "iterations", value: "1"},
-     {section: "couch_httpd_auth",
-      key: "authentication_db", value: usersDb.name}],
+   {section: "admins",
+    key: "jan", value: "apple"}],
     testFun
   );
   usersDb.deleteDb(); // cleanup


[2/7] couchdb commit: updated refs/heads/master to c34d871

Posted by ja...@apache.org.
Stabilize cookie_auth


Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/869cf544
Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/869cf544
Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/869cf544

Branch: refs/heads/master
Commit: 869cf544a119426d94ff0c783415467618d3a591
Parents: 6411a40
Author: sebastianro <se...@apache.org>
Authored: Tue May 17 20:03:30 2016 +0200
Committer: Jan Lehnardt <ja...@apache.org>
Committed: Tue Jul 12 20:55:58 2016 +0200

----------------------------------------------------------------------
 test/javascript/tests/cookie_auth.js | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb/blob/869cf544/test/javascript/tests/cookie_auth.js
----------------------------------------------------------------------
diff --git a/test/javascript/tests/cookie_auth.js b/test/javascript/tests/cookie_auth.js
index 9a14416..5c8ce89 100644
--- a/test/javascript/tests/cookie_auth.js
+++ b/test/javascript/tests/cookie_auth.js
@@ -75,7 +75,7 @@ couchTests.cookie_auth = function(debug) {
 
       // test that the users db is born with the auth ddoc
       var ddoc = open_as(usersDb, "_design/_auth", "jan");
-      T(ddoc.validate_doc_update);
+      T(ddoc && ddoc.validate_doc_update);
 
       // TODO test that changing the config so an existing db becomes the users db installs the ddoc also
 
@@ -277,10 +277,17 @@ couchTests.cookie_auth = function(debug) {
     TEquals(true, CouchDB.login("jan", "apple").ok);
   };
 
+  // per se, _users is born with a ddoc
+  // problem is: the birth seems async and it takes some time till it is there. We do know, however, that it WILL. So: use _changes 2 our advantage
+  var users_db_chg = CouchDB.request("GET", users_db_name + "/_changes?feed=longpoll&timeout=5000&filter=_design");
+  T(users_db_chg.responseText);
+  // now we should be safe
   run_on_modified_server(
     [
      {section: "couch_httpd_auth",
       key: "authentication_db", value: users_db_name},
+     {section: "chttpd_auth",
+      key: "authentication_db", value: users_db_name},
      {section: "couch_httpd_auth",
       key: "iterations", value: "1"},
      {section: "admins",


[6/7] couchdb commit: updated refs/heads/master to c34d871

Posted by ja...@apache.org.
cleanup wip


Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/f72b2530
Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/f72b2530
Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/f72b2530

Branch: refs/heads/master
Commit: f72b2530103dff9c2784916ead2dad5331f075f3
Parents: b124719
Author: Jan Lehnardt <ja...@apache.org>
Authored: Tue Jul 12 20:28:13 2016 +0200
Committer: Jan Lehnardt <ja...@apache.org>
Committed: Tue Jul 12 20:55:59 2016 +0200

----------------------------------------------------------------------
 test/javascript/tests/users_db.js          |  2 ++
 test/javascript/tests/users_db_security.js | 27 +++++++++++++++----------
 2 files changed, 18 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb/blob/f72b2530/test/javascript/tests/users_db.js
----------------------------------------------------------------------
diff --git a/test/javascript/tests/users_db.js b/test/javascript/tests/users_db.js
index c075f89..9c67ec5 100644
--- a/test/javascript/tests/users_db.js
+++ b/test/javascript/tests/users_db.js
@@ -104,6 +104,7 @@ couchTests.users_db = function(debug) {
       });
       T(false && "this will throw");
     } catch(e) {
+      log(e.error)
       T(e.error == "unauthorized");
       T(/conflict/.test(e.reason));
     }
@@ -205,6 +206,7 @@ couchTests.users_db = function(debug) {
       } finally {
         CouchDB.login("jan", "apple");
         usersDb.deleteDb(); // cleanup
+        usersDb.createDb();
         usersDbAlt.deleteDb(); // cleanup
         CouchDB.logout();
       }

http://git-wip-us.apache.org/repos/asf/couchdb/blob/f72b2530/test/javascript/tests/users_db_security.js
----------------------------------------------------------------------
diff --git a/test/javascript/tests/users_db_security.js b/test/javascript/tests/users_db_security.js
index da51b23..a23c1d8 100644
--- a/test/javascript/tests/users_db_security.js
+++ b/test/javascript/tests/users_db_security.js
@@ -94,7 +94,7 @@ couchTests.users_db_security = function(debug) {
 
     // jan's gonna be admin as he's the first user
     TEquals(true, usersDb.save(userDoc).ok, "should save document");
-    wait(5000)
+    // wait(5000)
     userDoc = open_as(usersDb, "org.couchdb.user:jchris", "jchris");
     TEquals(undefined, userDoc.password, "password field should be null 1");
     TEquals(40, userDoc.derived_key.length, "derived_key should exist");
@@ -126,8 +126,8 @@ couchTests.users_db_security = function(debug) {
     jchrisDoc.password = "couch";
 
     TEquals(true, save_as(usersDb, jchrisDoc, "jchris").ok);
-    // wait(5000);
-    var jchrisDoc = open_as(usersDb, "org.couchdb.user:jchris", "jchris1");
+    // wait(10000);
+    var jchrisDoc = open_as(usersDb, "org.couchdb.user:jchris", "jan");
 
     TEquals(undefined, jchrisDoc.password, "password field should be null 2");
     TEquals(40, jchrisDoc.derived_key.length, "derived_key should exist");
@@ -147,9 +147,7 @@ couchTests.users_db_security = function(debug) {
     };
 
     usersDb.save(fdmananaDoc);
-
-    var fdmananaDocAsReadByjchris =
-      open_as(usersDb, "org.couchdb.user:fdmanana", "jchris1");
+    var fdmananaDocAsReadByjchris = open_as(usersDb, "org.couchdb.user:fdmanana", "jchris");
     TEquals(null, fdmananaDocAsReadByjchris,
       "should not_found opening another user's user doc");
 
@@ -204,7 +202,7 @@ couchTests.users_db_security = function(debug) {
 
     // non-admins can't read design docs
     try {
-      open_as(usersDb, "_design/user_db_auth", "jchris1");
+      open_as(usersDb, "_design/user_db_auth", "jchris");
       T(false, "non-admin read design doc, should not happen");
     } catch(e) {
       TEquals("forbidden", e.error, "non-admins can't read design docs");
@@ -308,7 +306,7 @@ couchTests.users_db_security = function(debug) {
         value: "false"
       }
     ], function() {
-      TEquals(true, CouchDB.login("jchris", "couch").ok);
+      TEquals(true, CouchDB.login("jchris", "mp3").ok);
 
       try {
         var all = usersDb.allDocs({ include_docs: true });
@@ -334,8 +332,15 @@ couchTests.users_db_security = function(debug) {
       key: "iterations", value: "1"},
    {section: "admins",
     key: "jan", value: "apple"}],
-    testFun
+    function() {
+      try {
+        testFun();
+      } finally {
+        CouchDB.login("jan", "apple");
+        usersDb.deleteDb(); // cleanup
+        usersDb.createDb();
+        CouchDB.logout();
+      }
+    }
   );
-  usersDb.deleteDb(); // cleanup
-  // wait(2000)
 };


[5/7] couchdb commit: updated refs/heads/master to c34d871

Posted by ja...@apache.org.
remove upgrade on auth test


Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/c2fd04dd
Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/c2fd04dd
Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/c2fd04dd

Branch: refs/heads/master
Commit: c2fd04dd8e515d45cbb552a39b218504e52e0608
Parents: 47a120d
Author: Robert Newson <rn...@apache.org>
Authored: Tue Jun 21 13:23:34 2016 +0100
Committer: Jan Lehnardt <ja...@apache.org>
Committed: Tue Jul 12 20:55:59 2016 +0200

----------------------------------------------------------------------
 test/javascript/tests/users_db_security.js | 32 -------------------------
 1 file changed, 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/couchdb/blob/c2fd04dd/test/javascript/tests/users_db_security.js
----------------------------------------------------------------------
diff --git a/test/javascript/tests/users_db_security.js b/test/javascript/tests/users_db_security.js
index 355bb03..e66b3ec 100644
--- a/test/javascript/tests/users_db_security.js
+++ b/test/javascript/tests/users_db_security.js
@@ -148,38 +148,6 @@ couchTests.users_db_security = function(debug) {
       TEquals(true, userDoc.derived_key != jchrisDoc.derived_key,
         "should have new derived_key");
 
-      // SHA-1 password hashes are upgraded to PBKDF2 on successful
-      // authentication
-      var rnewsonDoc = {
-        _id: "org.couchdb.user:rnewson",
-        type: "user",
-        name: "rnewson",
-        // password: "plaintext_password",
-        password_sha: "e29dc3aeed5abf43185c33e479f8998558c59474",
-        salt: "24f1e0a87c2e374212bda1073107e8ae",
-        roles: []
-      };
-
-      var password_sha = rnewsonDoc.password_sha,
-        salt = rnewsonDoc.salt,
-        derived_key,
-        iterations;
-
-      usersDb.save(rnewsonDoc);
-      rnewsonDoc = open_as(usersDb, rnewsonDoc._id, "jan");
-      T(!rnewsonDoc.password_scheme);
-      T(!rnewsonDoc.derived_key);
-      T(!rnewsonDoc.iterations);
-
-      // check that we don't upgrade when the password is wrong
-      TEquals("unauthorized", CouchDB.login("rnewson", "wrong_password").error);
-      rnewsonDoc = open_as(usersDb, rnewsonDoc._id, "jan");
-      TEquals(salt, rnewsonDoc.salt);
-      TEquals(password_sha, rnewsonDoc.password_sha);
-      T(!rnewsonDoc.password_scheme);
-      T(!rnewsonDoc.derived_key);
-      T(!rnewsonDoc.iterations);
-
       wait(5000); // wait for auth cache invalidation
       var r = CouchDB.login("rnewson", "plaintext_password")
       log(r)