tests/test-abort-checkin.t
author Augie Fackler <augie@google.com>
Wed, 12 Apr 2017 11:23:55 -0700
branchstable
changeset 32050 77eaf9539499
parent 26587 56b2bcea2529
child 36375 f798709eb4b9
permissions -rw-r--r--
dispatch: protect against malicious 'hg serve --stdio' invocations (sec) Some shared-ssh installations assume that 'hg serve --stdio' is a safe command to run for minimally trusted users. Unfortunately, the messy implementation of argument parsing here meant that trying to access a repo named '--debugger' would give the user a pdb prompt, thereby sidestepping any hoped-for sandboxing. Serving repositories over HTTP(S) is unaffected. We're not currently hardening any subcommands other than 'serve'. If your service exposes other commands to users with arbitrary repository names, it is imperative that you defend against repository names of '--debugger' and anything starting with '--config'. The read-only mode of hg-ssh stopped working because it provided its hook configuration to "hg serve --stdio" via --config parameter. This is banned for security reasons now. This patch switches it to directly call ui.setconfig(). If your custom hosting infrastructure relies on passing --config to "hg serve --stdio", you'll need to find a different way to get that configuration into Mercurial, either by using ui.setconfig() as hg-ssh does in this patch, or by placing an hgrc file someplace where Mercurial will read it. mitrandir@fb.com provided some extra fixes for the dispatch code and for hg-ssh in places that I overlooked.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11848
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
     1
  $ cat > abortcommit.py <<EOF
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23172
diff changeset
     2
  > from mercurial import error
11848
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
     3
  > def hook(**args):
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23172
diff changeset
     4
  >     raise error.Abort("no commits allowed")
11848
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
     5
  > def reposetup(ui, repo):
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
     6
  >     repo.ui.setconfig("hooks", "pretxncommit.nocommits", hook)
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
     7
  > EOF
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
     8
  $ abspath=`pwd`/abortcommit.py
4140
193e0f8d9a47 test-abort-checkin: use a hook to abort the commit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2990
diff changeset
     9
23172
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 16913
diff changeset
    10
  $ cat <<EOF >> $HGRCPATH
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 16913
diff changeset
    11
  > [extensions]
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 16913
diff changeset
    12
  > mq =
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 16913
diff changeset
    13
  > abortcommit = $abspath
e955549cd045 tests: write hgrc of more than two lines by using shell heredoc
Yuya Nishihara <yuya@tcha.org>
parents: 16913
diff changeset
    14
  > EOF
4140
193e0f8d9a47 test-abort-checkin: use a hook to abort the commit
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 2990
diff changeset
    15
11848
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
    16
  $ hg init foo
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
    17
  $ cd foo
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
    18
  $ echo foo > foo
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
    19
  $ hg add foo
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
    20
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
    21
mq may keep a reference to the repository so __del__ will not be
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
    22
called and .hg/journal.dirstate will not be deleted:
2726
6bd351194a96 Add test mq keeping a reference to localrepo which can't remove journal on exit.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff changeset
    23
11848
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
    24
  $ hg ci -m foo
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
    25
  error: pretxncommit.nocommits hook failed: no commits allowed
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
    26
  transaction abort!
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
    27
  rollback completed
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
    28
  abort: no commits allowed
12316
4134686b83e1 tests: add exit codes to unified tests
Matt Mackall <mpm@selenic.com>
parents: 11848
diff changeset
    29
  [255]
11848
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
    30
  $ hg ci -m foo
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
    31
  error: pretxncommit.nocommits hook failed: no commits allowed
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
    32
  transaction abort!
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
    33
  rollback completed
f54ff49393fb tests: unify test-abort-checkin
Martin Geisler <mg@lazybytes.net>
parents: 4140
diff changeset
    34
  abort: no commits allowed
12316
4134686b83e1 tests: add exit codes to unified tests
Matt Mackall <mpm@selenic.com>
parents: 11848
diff changeset
    35
  [255]
16913
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 12327
diff changeset
    36
f2719b387380 tests: add missing trailing 'cd ..'
Mads Kiilerich <mads@kiilerich.com>
parents: 12327
diff changeset
    37
  $ cd ..