# # # add_file "tests/serve_pull_with_--exclude/read-permissions" # content [af0e0c9d5eb1a4f33c4802f9db20335a60bd2456] # # patch "ChangeLog" # from [09e04edc1d9acf5a39c15f5b6d5d905ed8731d4c] # to [8a14e62bcbc83773fbb48157909474f20f75291e] # # patch "cmd_netsync.cc" # from [32269e67f1a25f2f83643c80f28f8c4359d97aa9] # to [3ffc6ac821fa437265a771fb8596a81bdd833948] # # patch "monotone.texi" # from [fa297db6b3cbe419bee200bc26ff1e3ac6d9e29f] # to [4b8427a2d6a9ab30660bbd68618ae575e63c5c79] # # patch "netsync.cc" # from [6d01eb6b2af474d8bae80a5bd9b4b3ba539cb670] # to [0e7bb42de8a3547884df880f79a4fa60b0351175] # # patch "std_hooks.lua" # from [76099a6bd6ac95f36965f58c63d65af4659bb417] # to [51c2c0ca061f8c0ec2ccfaf4b30ead7e8026cc49] # # patch "tests/(imp)_persistent_netsync_server_-_keys_2/__driver__.lua" # from [c1d97d0eb0076014df8ff5035970c98d6974df40] # to [ced4ffc5130603ac1b82c144554a67f73308dbec] # # patch "tests/checking_that_certain_commands_ignores_the_contents_of__MTN_options/__driver__.lua" # from [3a257af1220ae308c17fde97812de135b92c3d32] # to [c3fd58c552a59d37fb32775239223e4cdcead142] # # patch "tests/common/netsync-hooks.lua" # from [ac4d58f0fe321f1873f737156b28a42e54746581] # to [c3dc6289586df28142be5e124beb50bfcad159ff] # # patch "tests/common/netsync-hooks_with_notes.lua" # from [7f3c021a933500a16ac5f2c1ec6c486962aa55ca] # to [3f41c5f99a2252ec2d0e9773ef1833cd2a96ba7b] # # patch "tests/common/netsync.lua" # from [5cd9be1cf66abf1111a71418811f8360bb4f8f10] # to [7b1f4b9805594eca3b037055833df798942e725d] # # patch "tests/db_data_format_checking/__driver__.lua" # from [9bbbea7784cf69025a7d442144b612c9613da144] # to [e3f5be2451252d0c52a609f638c402ac8a9cf302] # # patch "tests/get_netsync_read_permitted/__driver__.lua" # from [08bf20b752af7ac64845b4eb57975675e84f06a5] # to [d1e7461bdceab19034a9c20eb033249693d7a903] # # patch "tests/mtn_execute_attr_respects_umask/__driver__.lua" # from [6e90db48ddc768b25e87c7c12d9fdfd6c8f8be3f] # to [14a16f30798020243f72cdcc9c0eb87706fb8068] # # patch "tests/netsync,--exclude,defaults/__driver__.lua" # from [af272762b9ba75768308bd021b2992bee7599531] # to [5e3641b14d78b3762b5311d8c96a6d5b573410de] # # patch "tests/netsync,--set-default/__driver__.lua" # from [4c5eb0ab9568e85c306b57953b89f4c2b8830ab8] # to [f1b758e020bccd96da24fdf9015bb06d5c4e0725] # # patch "tests/netsync_client_absorbs_and_checks_epochs/__driver__.lua" # from [051a9845b19373c494e6b992a81b3e6ba9588217] # to [c9ca91058a28985d1e07fba47cc85181580f2a41] # # patch "tests/netsync_client_absorbs_server_key/__driver__.lua" # from [179a061d8eb5a4d5d2d3fb32d770fcf24b11c424] # to [604f76a83044fc89a53a219c8162c014456b586a] # # patch "tests/netsync_default_server_pattern/__driver__.lua" # from [ce953484cd6f63ad5b44f054d10c4b3a6ad23c4a] # to [ba0af28a5b60f2de3d837003b468f7597b383d4f] # # patch "tests/netsync_default_server_pattern_setting/__driver__.lua" # from [476829800bd76624f072ca5d00c113ffd290a94a] # to [a959e5ea6e4412ee00d5ceff640ec45f384f6b36] # # patch "tests/netsync_hook_errcodes/__driver__.lua" # from [505fb36ee5b0fc9fe2db1f39412eeb95e4b5d4e0] # to [1e4504885124bfa64eeb91ce357c3a8f4820a94b] # # patch "tests/netsync_is_not_interrupted_by_SIGPIPE/__driver__.lua" # from [0a03a6aa0020c42cfb947a1eec7d1b9f41cfc148] # to [10c1772a19c48a2c039276840ecaf8fe2c9af0fa] # # patch "tests/netsync_largish_file/__driver__.lua" # from [e72e457f2d00207b90cfc8bf11d4c1e476a3bf5b] # to [135d2f4626dbb41d145e1f271bd165f91bd7839f] # # patch "tests/netsync_permissions/__driver__.lua" # from [c3b3610c002a1806abf45de46fbe6ce01af87bed] # to [9206b414713e9b678316304d3ce071543cc5433b] # # patch "tests/netsync_permissions/closed/read-permissions" # from [b9bae8e35f085049ddfa0cfe92308a79998ad6d0] # to [2164855b160ba5bfa19257d29dc4e820becc5459] # # patch "tests/netsync_server_absorbs_and_checks_epochs/__driver__.lua" # from [aa78fe9e8da0888ade6012e92b85de9b8cb493c4] # to [cc83b2b114c4065c65f166c731e7b9090892bf83] # # patch "tests/netsync_transfers_public_keys/__driver__.lua" # from [468ddf2bf0cfe020d24c7314c18464ace4a1ba23] # to [7c33043f7bea601ceb114aa57853ca0ecdbbdcca] # # patch "tests/netsync_verifies_server_keys/__driver__.lua" # from [dddf09d532cd2f277364b4ff71fa763a976ce34e] # to [13305be95a16b088e491e320e7d6a53a5fe6aa4a] # # patch "tests/netsync_with_globs/__driver__.lua" # from [5008a811543f23ef8fa4e5cd54a411204ee93e9e] # to [9e790fb1196c3ee5cb391cbdcbae847e721e4044] # # patch "tests/one-way_netsync_where_the_sink_has_more_epochs/__driver__.lua" # from [a1568c8d83ddc35101ce36a75babe23cb9597884] # to [bb8e382b933199a1949323f0d4005db68b6d17bf] # # patch "tests/persistent_netsync_server_-_keys/__driver__.lua" # from [d69890ecb57963ff920dd98e05de85771d28db3f] # to [d9a6a5c55dc85ad55f06cb316dc4231ada807e93] # # patch "tests/persistent_netsync_server_-_revs_&_certs/__driver__.lua" # from [efb2a05ac574eb9d9a6b59b965c4b8beb589a050] # to [1ab3a65b825dfaaaba49b2dc363141fd10b6a0c7] # # patch "tests/pid_file_and_log_handles_open_failures/__driver__.lua" # from [3efad657fe70fa93eb9d23de7a82164e54752b0c] # to [1da5c1056509a1fa78b7492e9e9100228b8661f6] # # patch "tests/pid_file_cleanup/__driver__.lua" # from [76cfad28c2ee03cfaf2c0b6f227d2e98f88f1797] # to [1454e1b40ac70ac3e3cd8f5b69aa5ffacacece2c] # # patch "tests/quiet_turns_off_tickers_but_not_warnings/__driver__.lua" # from [71014ee89d9c0bb2e0da4fdcac979691488dccab] # to [581d68e2a1f364bf5c74cefc7a3e8da4cf9fdc81] # # patch "tests/reallyquiet_turns_off_tickers_and_warnings/__driver__.lua" # from [460f28ce4b648802659aae6be44412ed20b52c8b] # to [cb891df2dd67048b2d8af853e11cdab8cdf50e3f] # # patch "tests/serve_pull_with_--exclude/__driver__.lua" # from [7b542291fc5d2565cc1f5d7ba2c828e205fa43d2] # to [9c87166a5f1834bccd2ff5c15c80b3fbb7a5872b] # # patch "tests/test_hooks.lua" # from [858d6bfc517923a0a8d006180ac95080599ac1f6] # to [731fd61c7d9490548d9eed744629a6950748890b] # # patch "testsuite.lua" # from [69e0a1f973ae6482df199669e0fc61d724e05c43] # to [c04fe5dcd9219201e0d8884c1d78adaf22f45636] # ============================================================ --- tests/serve_pull_with_--exclude/read-permissions af0e0c9d5eb1a4f33c4802f9db20335a60bd2456 +++ tests/serve_pull_with_--exclude/read-permissions af0e0c9d5eb1a4f33c4802f9db20335a60bd2456 @@ -0,0 +1,8 @@ +pattern "branch2" +deny "*" + +pattern "branch4" +deny "*" + +pattern "branch*" +allow "*" ============================================================ --- ChangeLog 09e04edc1d9acf5a39c15f5b6d5d905ed8731d4c +++ ChangeLog 8a14e62bcbc83773fbb48157909474f20f75291e @@ -1,3 +1,14 @@ +2006-11-18 Timtohy Brownawell + + Make 'serve' always serve everything, and no longer take + include/exclude patterns on the command line. + + Make the testsuite not use --nostd, so it can use the standard + permissions hooks for tests that need restricted serve. + + Un-xfail the mtn:execute / umask test, since not having the + standard hooks available was what made it not work. + 2006-11-17 Timothy Brownawell Make spawn_redirected work with blank filenames to not redirect ============================================================ --- cmd_netsync.cc 32269e67f1a25f2f83643c80f28f8c4359d97aa9 +++ cmd_netsync.cc 3ffc6ac821fa437265a771fb8596a81bdd833948 @@ -21,44 +21,33 @@ static void var_name("default-exclude-pattern")); static void -process_netsync_args(string const & name, - vector const & args, - utf8 & addr, - utf8 & include_pattern, utf8 & exclude_pattern, - bool use_defaults, - bool serve_mode, - bool needs_key, - app_state & app) +extract_address(vector const & args, + utf8 & addr, + app_state & app) { - // handle host argument - if (!serve_mode) + if (args.size() >= 1) { - if (args.size() >= 1) + addr = idx(args, 0); + if (!app.db.var_exists(default_server_key) || app.opts.set_default) { - addr = idx(args, 0); - if (use_defaults - && (!app.db.var_exists(default_server_key) - || app.opts.set_default)) - { - P(F("setting default server to %s") % addr); - app.db.set_var(default_server_key, var_value(addr())); - } + P(F("setting default server to %s") % addr); + app.db.set_var(default_server_key, var_value(addr())); } - else - { - N(use_defaults, F("no hostname given")); - N(app.db.var_exists(default_server_key), - F("no server given and no default server set")); - var_value addr_value; - app.db.get_var(default_server_key, addr_value); - addr = utf8(addr_value()); - L(FL("using default server address: %s") % addr); - } } + else + { + N(app.db.var_exists(default_server_key), + F("no server given and no default server set")); + var_value addr_value; + app.db.get_var(default_server_key, addr_value); + addr = utf8(addr_value()); + L(FL("using default server address: %s") % addr); + } +} - // if a key is required and one isn't specified, we should fail. - if (needs_key) - { +static void +find_key_if_needed(utf8 & addr, app_state & app) +{ uri u; bool transport_requires_auth(true); if (parse_uri(addr(), u)) @@ -71,26 +60,28 @@ process_netsync_args(string const & name get_user_key(key, app); app.opts.signing_key = key; } - } +} - // handle include/exclude args - if (serve_mode || (args.size() >= 2 || app.opts.exclude_given)) +static void +extract_patterns(vector const & args, + utf8 & include_pattern, utf8 & exclude_pattern, + app_state & app) +{ + if (args.size() >= 2 || app.opts.exclude_given) { - E(serve_mode || args.size() >= 2, F("no branch pattern given")); - int pattern_offset = (serve_mode ? 0 : 1); + E(args.size() >= 2, F("no branch pattern given")); + int pattern_offset = 1; vector patterns(args.begin() + pattern_offset, args.end()); combine_and_check_globish(patterns, include_pattern); combine_and_check_globish(app.opts.exclude_patterns, exclude_pattern); - if (use_defaults && - (!app.db.var_exists(default_include_pattern_key) - || app.opts.set_default)) + if (!app.db.var_exists(default_include_pattern_key) + || app.opts.set_default) { P(F("setting default branch include pattern to '%s'") % include_pattern); app.db.set_var(default_include_pattern_key, var_value(include_pattern())); } - if (use_defaults && - (!app.db.var_exists(default_exclude_pattern_key) - || app.opts.set_default)) + if (!app.db.var_exists(default_exclude_pattern_key) + || app.opts.set_default) { P(F("setting default branch exclude pattern to '%s'") % exclude_pattern); app.db.set_var(default_exclude_pattern_key, var_value(exclude_pattern())); @@ -98,7 +89,6 @@ process_netsync_args(string const & name } else { - N(use_defaults, F("no branch pattern given")); N(app.db.var_exists(default_include_pattern_key), F("no branch pattern given and no default pattern set")); var_value pattern_value; @@ -118,13 +108,14 @@ CMD(push, N_("network"), N_("[ADDRESS[:P CMD(push, N_("network"), N_("[ADDRESS[:PORTNUMBER] [PATTERN]]"), N_("push branches matching PATTERN to netsync server at ADDRESS"), - options::opts::set_default | options::opts::exclude | options::opts::key_to_push) + options::opts::set_default | options::opts::exclude | + options::opts::key_to_push) { utf8 addr, include_pattern, exclude_pattern; - process_netsync_args(name, args, addr, include_pattern, exclude_pattern, - true, false, true, app); + extract_address(args, addr, app); + find_key_if_needed(addr, app); + extract_patterns(args, include_pattern, exclude_pattern, app); - run_netsync_protocol(client_voice, source_role, addr, include_pattern, exclude_pattern, app); } @@ -134,8 +125,8 @@ CMD(pull, N_("network"), N_("[ADDRESS[:P options::opts::set_default | options::opts::exclude) { utf8 addr, include_pattern, exclude_pattern; - process_netsync_args(name, args, addr, include_pattern, exclude_pattern, - true, false, false, app); + extract_address(args, addr, app); + extract_patterns(args, include_pattern, exclude_pattern, app); if (app.opts.signing_key() == "") P(F("doing anonymous pull; use -kKEYNAME if you need authentication")); @@ -146,11 +137,13 @@ CMD(sync, N_("network"), N_("[ADDRESS[:P CMD(sync, N_("network"), N_("[ADDRESS[:PORTNUMBER] [PATTERN]]"), N_("sync branches matching PATTERN with netsync server at ADDRESS"), - options::opts::set_default | options::opts::exclude | options::opts::key_to_push) + options::opts::set_default | options::opts::exclude | + options::opts::key_to_push) { utf8 addr, include_pattern, exclude_pattern; - process_netsync_args(name, args, addr, include_pattern, exclude_pattern, - true, false, true, app); + extract_address(args, addr, app); + find_key_if_needed(addr, app); + extract_patterns(args, include_pattern, exclude_pattern, app); run_netsync_protocol(client_voice, source_and_sink_role, addr, include_pattern, exclude_pattern, app); @@ -188,12 +181,12 @@ private: system_path path; }; -CMD_NO_WORKSPACE(serve, N_("network"), N_("PATTERN ..."), - N_("serve the branches specified by PATTERNs to connecting clients"), - options::opts::bind | options::opts::pidfile | options::opts::exclude | +CMD_NO_WORKSPACE(serve, N_("network"), "", + N_("serve the database to connecting clients"), + options::opts::bind | options::opts::pidfile | options::opts::bind_stdio | options::opts::no_transport_auth) { - if (args.size() < 1) + if (!args.empty()) throw usage(name); pid_file pid(app.opts.pidfile); @@ -216,11 +209,8 @@ CMD_NO_WORKSPACE(serve, N_("network"), N app.db.ensure_open(); - utf8 dummy_addr, include_pattern, exclude_pattern; - process_netsync_args(name, args, dummy_addr, include_pattern, exclude_pattern, - false, true, false, app); run_netsync_protocol(server_voice, source_and_sink_role, app.opts.bind_address, - include_pattern, exclude_pattern, app); + utf8("*"), utf8(""), app); } // Local Variables: ============================================================ --- monotone.texi fa297db6b3cbe419bee200bc26ff1e3ac6d9e29f +++ monotone.texi 4b8427a2d6a9ab30660bbd68618ae575e63c5c79 @@ -1699,16 +1699,12 @@ @section Basic Network Service @smallexample @group -$ mtn --db=jim.mtn serve "jp.co.juicebot.jb7*" +$ mtn --db=jim.mtn serve @end group @end smallexample This command starts monotone listening on all network interfaces of -his laptop on the default port 4691, serving any branch matching address@hidden This will naturally include the address@hidden branch, and any sub-branches. The quotes -around @code{"jp.co.juicebot.jb7*"} are there to protect the @code{*} -from expansion by the shell; they have no meaning to monotone. +his laptop on the default port 4691, serving everything in his database. @page @node Synchronising Databases @@ -2426,7 +2422,7 @@ @section Network Service Revisited @smallexample @group -$ mtn --db=server.mtn --bind=www.juicebot.co.jp serve "jp.co.juicebot.jb7*" +$ mtn --db=server.mtn --bind=www.juicebot.co.jp serve @end group @end smallexample @@ -4450,8 +4446,8 @@ @section Network @section Network @ftable @command address@hidden mtn serve address@hidden:@var{port}]] @var{glob} [...] address@hidden address@hidden mtn serve --stdio [--no-transport-auth] @var{glob} [...] address@hidden address@hidden mtn serve address@hidden:@var{port}]] address@hidden mtn serve --stdio [--no-transport-auth] @itemx mtn pull [--set-default] address@hidden address@hidden [...] address@hidden @itemx mtn push [--set-default] address@hidden address@hidden [...] address@hidden @itemx mtn sync [--set-default] address@hidden address@hidden [...] address@hidden @@ -4501,7 +4497,7 @@ @section Network @smallexample @group -$ mtn --bind=alice.someisp.com serve "net.venge.monotone*" +$ mtn --bind=alice.someisp.com serve @end group @end smallexample ============================================================ --- netsync.cc 6d01eb6b2af474d8bae80a5bd9b4b3ba539cb670 +++ netsync.cc 0e7bb42de8a3547884df880f79a4fa60b0351175 @@ -1445,15 +1445,10 @@ session::process_anonymous_cmd(protocol_ i != branchnames.end(); i++) { if (their_matcher(*i)) - if (!our_matcher(*i)) + if (app.opts.use_transport_auth && + !app.lua.hook_get_netsync_read_permitted(*i)) { error(not_permitted, - (F("not serving branch '%s'") % *i).str()); - } - else if (app.opts.use_transport_auth && - !app.lua.hook_get_netsync_read_permitted(*i)) - { - error(not_permitted, (F("anonymous access to branch '%s' denied by server") % *i).str()); } else @@ -1583,13 +1578,8 @@ session::process_auth_cmd(protocol_role { if (their_matcher(*i)) { - if (!our_matcher(*i)) + if (!app.lua.hook_get_netsync_read_permitted(*i, their_id)) { - error(not_permitted, (F("not serving branch '%s'") % *i).str()); - - } - else if (!app.lua.hook_get_netsync_read_permitted(*i, their_id)) - { error(not_permitted, (F("denied '%s' read permission for '%s' excluding '%s' because of branch '%s'") % their_id % their_include_pattern % their_exclude_pattern % *i).str()); ============================================================ --- std_hooks.lua 76099a6bd6ac95f36965f58c63d65af4659bb417 +++ std_hooks.lua 51c2c0ca061f8c0ec2ccfaf4b30ead7e8026cc49 @@ -874,7 +874,6 @@ function get_netsync_connect_command(uri function get_netsync_connect_command(uri, args) local argv = nil - local quote_patterns = false if uri["scheme"] == "ssh" and uri["host"] @@ -897,7 +896,6 @@ function get_netsync_connect_command(uri end table.insert(argv, uri["host"]) - quote_patterns = true end if uri["scheme"] == "file" and uri["path"] then @@ -920,23 +918,6 @@ function get_netsync_connect_command(uri table.insert(argv, "--stdio") table.insert(argv, "--no-transport-auth") - -- patterns must be quoted to avoid a remote shell expanding them - if args["include"] then - local include = args["include"] - if quote_patterns then - include = "'" .. args["include"] .. "'" - end - table.insert(argv, include) - end - - if args["exclude"] then - table.insert(argv, "--exclude") - local exclude = args["exclude"] - if quote_patterns then - exclude = "'" .. args["exclude"] .. "'" - end - table.insert(argv, exclude) - end end return argv end ============================================================ --- tests/(imp)_persistent_netsync_server_-_keys_2/__driver__.lua c1d97d0eb0076014df8ff5035970c98d6974df40 +++ tests/(imp)_persistent_netsync_server_-_keys_2/__driver__.lua ced4ffc5130603ac1b82c144554a67f73308dbec @@ -23,7 +23,7 @@ check(mtn2("commit", "address@hidden", "- check(mtn2("status"), 0, false, false) check(mtn2("commit", "address@hidden", "--branch=testbranch", "-m", 'commit foo'), 0, false, false) -srv = netsync.start("testbranch") +srv = netsync.start() srv:push("testbranch", 2) srv:pull("testbranch", 3) srv:finish() ============================================================ --- tests/checking_that_certain_commands_ignores_the_contents_of__MTN_options/__driver__.lua 3a257af1220ae308c17fde97812de135b92c3d32 +++ tests/checking_that_certain_commands_ignores_the_contents_of__MTN_options/__driver__.lua c3fd58c552a59d37fb32775239223e4cdcead142 @@ -15,6 +15,6 @@ check(qgrep('key "address@hidden"', " check(not qgrep('key "address@hidden"', "_MTN/options")) check(qgrep('key "address@hidden"', "_MTN/options")) -srv = netsync.start("testbranch") +srv = netsync.start() srv:push({"testbranch", "address@hidden"}) srv:stop() ============================================================ --- tests/common/netsync-hooks.lua ac4d58f0fe321f1873f737156b28a42e54746581 +++ tests/common/netsync-hooks.lua c3dc6289586df28142be5e124beb50bfcad159ff @@ -1,7 +1,24 @@ -function get_netsync_read_permitted(pattern, identity) - return true + +do + local old = get_netsync_read_permitted + function get_netsync_read_permitted(pattern, identity) + local permfile = io.open(get_confdir() .. "/read-permissions", "r") + if (permfile == nil) then + return true + end + io.close(permfile) + return old(pattern, identity) + end end -function get_netsync_write_permitted(identity) - return true +do + local old = get_netsync_write_permitted + function get_netsync_write_permitted(identity) + local permfile = io.open(get_confdir() .. "/write-permissions", "r") + if (permfile == nil) then + return true + end + io.close(permfile) + return old(identity) + end end ============================================================ --- tests/common/netsync-hooks_with_notes.lua 7f3c021a933500a16ac5f2c1ec6c486962aa55ca +++ tests/common/netsync-hooks_with_notes.lua 3f41c5f99a2252ec2d0e9773ef1833cd2a96ba7b @@ -48,10 +48,26 @@ end logfile:close() end -function get_netsync_read_permitted(pattern, identity) - return true +do + local old = get_netsync_read_permitted + function get_netsync_read_permitted(pattern, identity) + local permfile = io.open(get_confdir() .. "/read-permissions", "r") + if (permfile == nil) then + return true + end + io.close(permfile) + return old(pattern, identity) + end end -function get_netsync_write_permitted(identity) - return true +do + local old = get_netsync_write_permitted + function get_netsync_write_permitted(identity) + local permfile = io.open(get_confdir() .. "/write-permissions", "r") + if (permfile == nil) then + return true + end + io.close(permfile) + return old(identity) + end end ============================================================ --- tests/common/netsync.lua 5cd9be1cf66abf1111a71418811f8360bb4f8f10 +++ tests/common/netsync.lua 7b1f4b9805594eca3b037055833df798942e725d @@ -43,8 +43,12 @@ function netsync.internal.sync(srv, pat, function netsync.internal.push(srv, pat, n, res) srv:client("push", pat, n, res) end function netsync.internal.sync(srv, pat, n, res) srv:client("sync", pat, n, res) end -function netsync.start(pat, n, min) - if pat == "" or pat == nil then pat = "{*}" end +function netsync.start(opts, n, min) + if type(opts) == "number" then + min = n + n = opts + opts = nil + end local args = {} local fn = mtn local addr = "localhost:" .. math.random(20000, 50000) @@ -60,14 +64,12 @@ function netsync.start(pat, n, min) table.insert(args, "--db=test"..n..".db") end table.insert(args, "serve") - if type(pat) == "string" then - table.insert(args, pat) - elseif type(pat) == "table" then - for k, v in pairs(pat) do + if type(opts) == "table" then + for k, v in pairs(opts) do table.insert(args, v) end - else - err("Bad pattern type "..type(pat)) + elseif type(opts) ~= "nil" then + err("netsync.start wants a table, not a "..type(opts).." as a first argument") end local out = bg(fn(unpack(args)), false, false, false) out.address = addr @@ -88,11 +90,19 @@ end return out end -function netsync.internal.run(oper, pat) - local srv = netsync.start(pat) +function netsync.internal.run(oper, pat, opts) + local srv = netsync.start(opts) + if type(opts) == "table" then + for k, v in pairs(opts) do + table.insert(pat, v) + end + elseif type(opts) ~= "nil" then + err("second argument to netsync."..oper.." should be a table") + end srv:client(oper, pat) srv:finish() end + +function netsync.pull(pat, opts) netsync.internal.run("pull", pat, opts) end +function netsync.push(pat, opts) netsync.internal.run("push", pat, opts) end +function netsync.sync(pat, opts) netsync.internal.run("sync", pat, opts) end -function netsync.pull(pat) netsync.internal.run("pull", pat) end -function netsync.push(pat) netsync.internal.run("push", pat) end -function netsync.sync(pat) netsync.internal.run("sync", pat) end ============================================================ --- tests/db_data_format_checking/__driver__.lua 9bbbea7784cf69025a7d442144b612c9613da144 +++ tests/db_data_format_checking/__driver__.lua e3f5be2451252d0c52a609f638c402ac8a9cf302 @@ -13,7 +13,7 @@ check(mtn("-d", "cs-modern.db", "ls", "k check(mtn("-d", "cs-modern.db", "db", "migrate"), 0, false, false) check(mtn("-d", "cs-modern.db", "ls", "keys"), 1, false, false) -check(mtn("-d", "cs-modern.db", "serve", "--bind=127.0.0.1:63219", '*'), 1, false, false) +check(mtn("-d", "cs-modern.db", "serve", "--bind=127.0.0.1:63219"), 1, false, false) check(get("rosterify.db.dumped", "stdin")) @@ -21,7 +21,7 @@ check(mtn("-d", "ro-modern.db", "ls", "k check(mtn("-d", "ro-modern.db", "db", "migrate"), 0, false, false) check(mtn("-d", "ro-modern.db", "ls", "keys"), 1, false, false) -check(mtn("-d", "ro-modern.db", "serve", "--bind=127.0.0.1:63219", '*'), 1, false, false) +check(mtn("-d", "ro-modern.db", "serve", "--bind=127.0.0.1:63219"), 1, false, false) -- arguably "db regenerate_caches" should go here too -- it's treated -- similarly. But the test "schema_migration" tests for its behavior in this ============================================================ --- tests/get_netsync_read_permitted/__driver__.lua 08bf20b752af7ac64845b4eb57975675e84f06a5 +++ tests/get_netsync_read_permitted/__driver__.lua d1e7461bdceab19034a9c20eb033249693d7a903 @@ -26,7 +26,7 @@ check(get("read-permissions", "perm/read mkdir("perm") check(get("read-permissions", "perm/read-permissions")) -srv = netsync.start({"--confdir=perm", "branch*"}, nil, true) +srv = netsync.start({"--confdir=perm"}, nil, true) srv:pull("branch*", nil, 1) check(mtn2("automate", "get_revision", B1), 1, false, false) ============================================================ --- tests/mtn_execute_attr_respects_umask/__driver__.lua 6e90db48ddc768b25e87c7c12d9fdfd6c8f8be3f +++ tests/mtn_execute_attr_respects_umask/__driver__.lua 14a16f30798020243f72cdcc9c0eb87706fb8068 @@ -1,11 +1,8 @@ skip_if(ostype == "Windows") skip_if(ostype == "Windows") +skip_if(not existsonpath("stat")) mtn_setup() --- I don't know why this fails! When I set umask 077 and check out --- this tree by hand, it works fine; when I run this test, though, then --- for some reason the foo file is checked out with permission 600! - addfile("foo", "blah blah") addfile("bar", "blah blah") check(mtn("attr", "set", "foo", "mtn:execute", "true")) @@ -17,20 +14,21 @@ check(mtn("co", "-r", R, "077-co"), 0, f -- log L(posix_umask(077), "\n") check(mtn("co", "-r", R, "077-co"), 0, false, false) -xfail_if(true, is_executable("077-co/foo")) +check(is_executable("077-co/foo")) check(not is_executable("077-co/bar")) ---check(stat -c '%a' 077-co/foo, 0, [700 ---]) ---check(stat -c '%a' 077-co/bar, 0, [600 ---]) +check({"stat", "-c", "%a", "077-co/foo"}, 0, "700\n", false) -posix_umask(577) +-- Don't do this one; it makes the directories also 200, which +-- kinda breaks things. + +--posix_umask(577) + -- log -L(posix_umask(577), "\n") -check(mtn("co", "-r", R, "577-co"), 0, false, false) -check(not is_executable("577-co/foo")) -check(not is_executable("577-co/bar")) +--L(posix_umask(577), "\n") +--xfail(mtn("co", "-r", R, "577-co"), 0, false, false) +--check(not is_executable("577-co/foo")) +--check(not is_executable("577-co/bar")) --check(stat -c '%a' 577-co/foo, 0, [200 --]) --check(stat -c '%a' 577-co/bar, 0, [200 ============================================================ --- tests/netsync,--exclude,defaults/__driver__.lua af272762b9ba75768308bd021b2992bee7599531 +++ tests/netsync,--exclude,defaults/__driver__.lua 5e3641b14d78b3762b5311d8c96a6d5b573410de @@ -62,7 +62,7 @@ check(mtn2("automate", "get_revision", B -- but --set-default overrides -srv = netsync.start("branch*") +srv = netsync.start() srv:pull({"--set-default", 'branch*'}) srv:stop() check(mtn2("automate", "get_revision", B11), 0, false, false) ============================================================ --- tests/netsync,--set-default/__driver__.lua 4c5eb0ab9568e85c306b57953b89f4c2b8830ab8 +++ tests/netsync,--set-default/__driver__.lua f1b758e020bccd96da24fdf9015bb06d5c4e0725 @@ -19,14 +19,14 @@ math.randomseed(rseed) -- make sure the defaults really were set to 'testbranch' math.randomseed(rseed) -srv = netsync.start("testbranch") +srv = netsync.start() check(mtn2("pull"), 0, false, false) srv:stop() check(mtn2("automate", "get_revision", t2), 0, false, false) -- do a --set-default pull of another branch math.randomseed(rseed) -srv = netsync.start("otherbranch") +srv = netsync.start() srv:pull({"otherbranch", "--set-default"}) srv:stop() @@ -37,7 +37,7 @@ math.randomseed(rseed) -- and make sure that our default is now it math.randomseed(rseed) -srv = netsync.start("otherbranch") +srv = netsync.start() check(mtn2("pull"), 0, false, false) srv:stop() ============================================================ --- tests/netsync_client_absorbs_and_checks_epochs/__driver__.lua 051a9845b19373c494e6b992a81b3e6ba9588217 +++ tests/netsync_client_absorbs_and_checks_epochs/__driver__.lua c9ca91058a28985d1e07fba47cc85181580f2a41 @@ -19,11 +19,11 @@ commit("otherbranch") addfile("testfile2", "other data") commit("otherbranch") -- Run an irrelevant netsync, just to force epochs to be regenerated -srv = netsync.start("otherbranch") +srv = netsync.start() srv:sync("otherbranch", 3) srv:finish() -- Run the real netsync -netsync.pull("testbranch") +netsync.pull() check(mtn2("list", "epochs"), 0, true, false) rename("stdout", "new-epochs") check(samefile("orig-epochs", "new-epochs")) @@ -39,7 +39,7 @@ check(mtn("db", "set_epoch", "otherbranc check(mtn("db", "set_epoch", "otherbranch", string.rep("a", 40)), 0, false, false) -- this should *fail* to sync -srv = netsync.start("testbranch") +srv = netsync.start() -- This should probably expect an exit value of 1, but ATM the netsync -- client doesn't report errors in its exit value. -- srv:pull("testbranch", 2, 1) ============================================================ --- tests/netsync_client_absorbs_server_key/__driver__.lua 179a061d8eb5a4d5d2d3fb32d770fcf24b11c424 +++ tests/netsync_client_absorbs_server_key/__driver__.lua 604f76a83044fc89a53a219c8162c014456b586a @@ -11,7 +11,7 @@ copy("stdout", "foo_public") canonicalize("stdout") copy("stdout", "foo_public") -srv = netsync.start({"address@hidden", "testbranch"}) +srv = netsync.start({"address@hidden"}) srv:pull("testbranch") srv:stop() ============================================================ --- tests/netsync_default_server_pattern/__driver__.lua ce953484cd6f63ad5b44f054d10c4b3a6ad23c4a +++ tests/netsync_default_server_pattern/__driver__.lua ba0af28a5b60f2de3d837003b468f7597b383d4f @@ -16,7 +16,7 @@ revs.thirdbranch = base_revision() commit("thirdbranch") revs.thirdbranch = base_revision() -srv = netsync.start({"testbranch", "otherbranch", "thirdbranch"}) +srv = netsync.start() -- First make sure netsync with explicit server/pattern override defaults check(mtn2("set", "database", "default-server", "nonsense"), 0, false, false) ============================================================ --- tests/netsync_default_server_pattern_setting/__driver__.lua 476829800bd76624f072ca5d00c113ffd290a94a +++ tests/netsync_default_server_pattern_setting/__driver__.lua a959e5ea6e4412ee00d5ceff640ec45f384f6b36 @@ -6,7 +6,7 @@ commit() addfile("testfile", "blah blah") commit() -srv = netsync.start("testbranch") +srv = netsync.start() srv:pull("testbranch") writefile("testfile", "other stuff") ============================================================ --- tests/netsync_hook_errcodes/__driver__.lua 505fb36ee5b0fc9fe2db1f39412eeb95e4b5d4e0 +++ tests/netsync_hook_errcodes/__driver__.lua 1e4504885124bfa64eeb91ce357c3a8f4820a94b @@ -47,14 +47,15 @@ clearnotes() chk_errcode_is(200) clearnotes() -srv = netsync.start("testbranch") +writefile("denyread", "function get_netsync_read_permitted() return false end") +srv = netsync.start({"--rcfile=denyread"}) srv:sync({"otherbranch"}, 2, 1) srv:stop() chk_errcode_is(412) clearnotes() check(mtn2("genkey", "address@hidden"), 0, false, false, string.rep("address@hidden", 2)) -srv = netsync.start("testbranch") +srv = netsync.start() srv:sync({"testbranch", "address@hidden"}, 2, 1) srv:stop() chk_errcode_is(422) @@ -62,7 +63,7 @@ check(mtn2("db", "set_epoch", "testbranc check(mtn("db", "set_epoch", "testbranch", string.rep("0", 40))) check(mtn2("db", "set_epoch", "testbranch", string.rep("1", 40))) -srv = netsync.start("testbranch") +srv = netsync.start() srv:push({"testbranch"}, 2, 1) srv:stop() chk_errcode_is(432) ============================================================ --- tests/netsync_is_not_interrupted_by_SIGPIPE/__driver__.lua 0a03a6aa0020c42cfb947a1eec7d1b9f41cfc148 +++ tests/netsync_is_not_interrupted_by_SIGPIPE/__driver__.lua 10c1772a19c48a2c039276840ecaf8fe2c9af0fa @@ -15,7 +15,7 @@ commit() writefile("testfile", "version 1 of test file") commit() -srv = netsync.start("testbranch") +srv = netsync.start() -- send the server a SIGPIPE signal (it should survive) netsync_killpipe(srv) ============================================================ --- tests/netsync_largish_file/__driver__.lua e72e457f2d00207b90cfc8bf11d4c1e476a3bf5b +++ tests/netsync_largish_file/__driver__.lua 135d2f4626dbb41d145e1f271bd165f91bd7839f @@ -11,7 +11,7 @@ file = sha1("largish") commit() file = sha1("largish") -srv = netsync.start("testbranch") +srv = netsync.start() srv:pull("testbranch") ============================================================ --- tests/netsync_permissions/__driver__.lua c3b3610c002a1806abf45de46fbe6ce01af87bed +++ tests/netsync_permissions/__driver__.lua 9206b414713e9b678316304d3ce071543cc5433b @@ -34,7 +34,7 @@ revs.base = base_revision() commit("testbranch", "testfile") revs.base = base_revision() -srv = netsync.start({"testbranch", "--confdir=open"}, nil, true) +srv = netsync.start({"--confdir=open"}, nil, true) -- anonymous pull @@ -114,7 +114,7 @@ revs.base = base_revision() commit("testbranch", "testfile") revs.base = base_revision() -srv = netsync.start({"testbranch", "--confdir=closed"}, nil, true) +srv = netsync.start({"--confdir=closed"}, nil, true) -- anonymous pull fails ============================================================ --- tests/netsync_permissions/closed/read-permissions b9bae8e35f085049ddfa0cfe92308a79998ad6d0 +++ tests/netsync_permissions/closed/read-permissions 2164855b160ba5bfa19257d29dc4e820becc5459 @@ -1,2 +1,5 @@ +pattern "badbranch" +deny "*" + pattern "*" allow "address@hidden" ============================================================ --- tests/netsync_server_absorbs_and_checks_epochs/__driver__.lua aa78fe9e8da0888ade6012e92b85de9b8cb493c4 +++ tests/netsync_server_absorbs_and_checks_epochs/__driver__.lua cc83b2b114c4065c65f166c731e7b9090892bf83 @@ -21,7 +21,7 @@ check(mtn2("commit", "--message=foo", "- check(mtn2("add", "otherfile"), 0, false, false) check(mtn2("commit", "--message=foo", "--branch=otherbranch"), 0, false, false) -- Run an irrelevant netsync, just to force epochs to be regenerated -srv = netsync.start("otherbranch", 2) +srv = netsync.start(2) srv:sync("otherbranch", 3) srv:finish() -- Run the real netsync @@ -40,7 +40,7 @@ check(mtn("db", "set_epoch", "otherbranc check(mtn("db", "set_epoch", "otherbranch", string.rep("a", 40)), 0, false, false) -- this should *fail* to sync -srv = netsync.start("testbranch") +srv = netsync.start() -- This should probably expect an exit value of 1, but ATM the netsync -- client doesn't report errors in its exit value. -- srv:pull("testbranch", 2, 1) ============================================================ --- tests/netsync_transfers_public_keys/__driver__.lua 468ddf2bf0cfe020d24c7314c18464ace4a1ba23 +++ tests/netsync_transfers_public_keys/__driver__.lua 7c33043f7bea601ceb114aa57853ca0ecdbbdcca @@ -21,7 +21,7 @@ check(not qgrep(privkey, "stdout")) check(not qgrep(privkey, "stdout")) -- Now check that --key-to-push works. -srv = netsync.start("testbranch", 2) +srv = netsync.start(2) check(mtn("--rcfile=netsync.lua", "push", srv.address, "testbranch", "address@hidden"), 0, false, false) ============================================================ --- tests/netsync_verifies_server_keys/__driver__.lua dddf09d532cd2f277364b4ff71fa763a976ce34e +++ tests/netsync_verifies_server_keys/__driver__.lua 13305be95a16b088e491e320e7d6a53a5fe6aa4a @@ -14,7 +14,7 @@ math.randomseed(seed) -- Then again with a different key; should fail. math.randomseed(seed) -srv = netsync.start{"address@hidden", "testbranch"} +srv = netsync.start{"address@hidden"} srv:pull("testbranch", nil, 1) -- It shouldn't have absorbed the key, either. ============================================================ --- tests/netsync_with_globs/__driver__.lua 5008a811543f23ef8fa4e5cd54a411204ee93e9e +++ tests/netsync_with_globs/__driver__.lua 9e790fb1196c3ee5cb391cbdcbae847e721e4044 @@ -20,7 +20,7 @@ revs[21] = base_revision() commit("2branch1") revs[21] = base_revision() -srv = netsync.start("*branch*") +srv = netsync.start() -- check a glob srv:pull("*anch2") ============================================================ --- tests/one-way_netsync_where_the_sink_has_more_epochs/__driver__.lua a1568c8d83ddc35101ce36a75babe23cb9597884 +++ tests/one-way_netsync_where_the_sink_has_more_epochs/__driver__.lua bb8e382b933199a1949323f0d4005db68b6d17bf @@ -19,7 +19,7 @@ check(mtn2("commit", "-m", "blah-blah"), check(mtn2("add", "bar"), 0, false, false) check(mtn2("commit", "-m", "blah-blah"), 0, false, false) -srv = netsync.start("*branch") +srv = netsync.start() -- We don't want the standard function, because we don't want to hang if it hangs. -- srv.push("*branch") ============================================================ --- tests/persistent_netsync_server_-_keys/__driver__.lua d69890ecb57963ff920dd98e05de85771d28db3f +++ tests/persistent_netsync_server_-_keys/__driver__.lua d9a6a5c55dc85ad55f06cb316dc4231ada807e93 @@ -9,7 +9,7 @@ check(mtn2("genkey", "address@hidden"), 0, fals check(mtn2("genkey", "address@hidden"), 0, false, false, string.rep("address@hidden",2)) -srv = netsync.start("testbranch") +srv = netsync.start() srv:push("testbranch", 2) srv:pull("testbranch", 3) ============================================================ --- tests/persistent_netsync_server_-_revs_&_certs/__driver__.lua efb2a05ac574eb9d9a6b59b965c4b8beb589a050 +++ tests/persistent_netsync_server_-_revs_&_certs/__driver__.lua 1ab3a65b825dfaaaba49b2dc363141fd10b6a0c7 @@ -17,7 +17,7 @@ revs[2] = base_revision() check(mtn3("commit", "--branch=testbranch", "--message=foo"), 0, false, false) revs[2] = base_revision() -srv = netsync.start("testbranch") +srv = netsync.start() srv:sync("testbranch", 2) srv:sync("testbranch", 3) ============================================================ --- tests/pid_file_and_log_handles_open_failures/__driver__.lua 3efad657fe70fa93eb9d23de7a82164e54752b0c +++ tests/pid_file_and_log_handles_open_failures/__driver__.lua 1da5c1056509a1fa78b7492e9e9100228b8661f6 @@ -22,7 +22,7 @@ else check({"chmod", "100", "noaccess"}) check(mtn("--log=noaccess/my.log", "status"), 1, false, false) - srv = bg(mtn("serve", "--bind=127.0.0.2:55597", "testbranch", "--pid-file=noaccess/my.pid"), 1, false, false) + srv = bg(mtn("serve", "--bind=127.0.0.2:55597", "--pid-file=noaccess/my.pid"), 1, false, false) check(srv:wait(5)) end ============================================================ --- tests/pid_file_cleanup/__driver__.lua 76cfad28c2ee03cfaf2c0b6f227d2e98f88f1797 +++ tests/pid_file_cleanup/__driver__.lua 1454e1b40ac70ac3e3cd8f5b69aa5ffacacece2c @@ -18,7 +18,7 @@ netsync.setup() -- -- -- Matthew Nicholson -srv = netsync.start({"{*}", "--pid-file=mtn.pid"}) +srv = netsync.start({"--pid-file=mtn.pid"}) check(exists("mtn.pid")) srv:finish(0) xfail_if(true, not exists("mtn.pid")) ============================================================ --- tests/quiet_turns_off_tickers_but_not_warnings/__driver__.lua 71014ee89d9c0bb2e0da4fdcac979691488dccab +++ tests/quiet_turns_off_tickers_but_not_warnings/__driver__.lua 581d68e2a1f364bf5c74cefc7a3e8da4cf9fdc81 @@ -7,7 +7,7 @@ commit() commit() -- check that tickers are quiet -srv = netsync.start("testbranch") +srv = netsync.start() check(mtn2("--rcfile=netsync.lua", "pull", srv.address, "testbranch", "--quiet"), 0, nil, true) check(qgrep(': warning: ', "stderr")) ============================================================ --- tests/reallyquiet_turns_off_tickers_and_warnings/__driver__.lua 460f28ce4b648802659aae6be44412ed20b52c8b +++ tests/reallyquiet_turns_off_tickers_and_warnings/__driver__.lua cb891df2dd67048b2d8af853e11cdab8cdf50e3f @@ -7,7 +7,7 @@ commit() commit() -- check that tickers are quiet -srv = netsync.start("testbranch") +srv = netsync.start() check(mtn2("--rcfile=netsync.lua", "pull", srv.address, "testbranch", "--reallyquiet")) ============================================================ --- tests/serve_pull_with_--exclude/__driver__.lua 7b542291fc5d2565cc1f5d7ba2c828e205fa43d2 +++ tests/serve_pull_with_--exclude/__driver__.lua 9c87166a5f1834bccd2ff5c15c80b3fbb7a5872b @@ -23,8 +23,9 @@ B4=base_revision() -- attempting to pull them should fail -- pulling everything but them should give revs B1, B2, B3; and only -- give branch certs on B1, B3. +get("read-permissions") -srv = netsync.start({'branch*', "--exclude=branch2", "--exclude=branch4"}) +srv = netsync.start() -- it is apparently a permissions error to pull a branch that is not served -- i.e. 'received network error: access to branch 'branch2' denied by server' ============================================================ --- tests/test_hooks.lua 858d6bfc517923a0a8d006180ac95080599ac1f6 +++ tests/test_hooks.lua 731fd61c7d9490548d9eed744629a6950748890b @@ -60,8 +60,11 @@ function merge2(left_path, right_path, m function merge2(left_path, right_path, merged_path, left, right) io.write("running merge2 hook\n") return left -end + end +merge3 = nil +edit_comment = nil + if (attr_functions == nil) then attr_functions = {} end @@ -70,68 +73,10 @@ attr_functions["test:test_attr"] = io.write(string.format("test:test_attr:%s:%s\n", filename, value)) end -function get_netsync_connect_command(uri, args) - - local argv = nil - - if uri["scheme"] == "ssh" - and uri["host"] - and uri["path"] then - - argv = { "ssh" } - if uri["user"] then - table.insert(argv, "-l") - table.insert(argv, uri["user"]) - end - if uri["port"] then - table.insert(argv, "-p") - table.insert(argv, uri["port"]) - end - - table.insert(argv, uri["host"]) - end - - if uri["scheme"] == "file" and uri["path"] then - argv = { } - end - - if argv then - - table.insert(argv, os.getenv("mtn")) - - if args["debug"] then - table.insert(argv, "--debug") - else - table.insert(argv, "--quiet") - end - - table.insert(argv, "--db") - table.insert(argv, uri["path"]) - table.insert(argv, "serve") - table.insert(argv, "--stdio") - table.insert(argv, "--no-transport-auth") - - if args["include"] then - table.insert(argv, args["include"]) - end - - if args["exclude"] then - table.insert(argv, "--exclude") - table.insert(argv, args["exclude"]) - end - end - return argv +function get_mtn_command(host) + return os.getenv("mtn") end -function use_transport_auth(uri) - if uri["scheme"] == "ssh" - or uri["scheme"] == "file" then - return false - else - return true - end -end - function get_encloser_pattern(name) return "^[[:alnum:]$_]" end ============================================================ --- testsuite.lua 69e0a1f973ae6482df199669e0fc61d724e05c43 +++ testsuite.lua c04fe5dcd9219201e0d8884c1d78adaf22f45636 @@ -92,8 +92,8 @@ function mtn(...) end function mtn(...) - return raw_mtn("--rcfile", test.root .. "/test_hooks.lua", - "--nostd", "--db=" .. test.root .. "/test.db", + return raw_mtn("--rcfile", test.root .. "/test_hooks.lua", -- "--nostd", + "--db=" .. test.root .. "/test.db", "--keydir", test.root .. "/keys", "address@hidden", unpack(arg)) end