2 years agokeeping the profs at Cambridge happy... master
Sitaram Chamarty [Wed, 25 Oct 2017 13:49:44 +0000 (19:19 +0530)]
keeping the profs at Cambridge happy...

What?  That isn't a good enough commit message?  Well then, go look up
the thread on the mailing list (subject: "gitolite setup vs


PS: Thanks to Tony Finch for the discussion!

2 years agocompile-1 no longer needs existing repo of existing gl-conf
Sitaram Chamarty [Fri, 13 Oct 2017 10:48:04 +0000 (16:18 +0530)]
compile-1 no longer needs existing repo of existing gl-conf

2 years agoallow orphan gl-conf files (see below for details)
Sitaram Chamarty [Fri, 13 Oct 2017 10:21:58 +0000 (15:51 +0530)]
allow orphan gl-conf files (see below for details)


    For explicitly named repos in gitolite.conf ("repo foo bar" as
    opposed to "repo @group-name" or "repo [a-z].*"), the compiled rules
    are placed in a file called "gl-conf" in the repo's directory.

    In addition, an entry is made in a hash called "split_conf" in the
    main compiled conf file (~/.gitolite/conf/

    The crucial bit is this: if a repo does not have an entry in the
    split_conf hash, its gl-conf file will not be honored.

    Why is this?  Because there are situations where that file may be
    out of date, and the rules within should not be in effect.  For a
    simple example, consider this conf

        repo seven
            RW+ =   u1
            RW  =   u2

    Now, management decides that "seven" needs to be assimilated into a
    large group called "borg":

        # add seven to borg
        @borg = seven

        # seven's rules are now deleted

    When you make this change and push, users u1 and u2 should not get
    access (unless the rules for @borg happened to allow them).  That
    is, the gl-conf in the repo-dir is considered an orphan, and must
    not be included in rule processing.

    Since there is now no "seven" entry in split_conf, this is exactly
    what happens -- gl-conf is ignored.

    (Note: one might argue that gitolite compile should go and delete
    these orphaned gl-conf files, but that's yet another "full disk
    scan" overhead.)

What this patch does:

    This patch allows an admin to override this safety feature, and say,
    in effect, "include orphaned gl-conf files in the rule processing; I
    know what I am doing".  The admin enables that by adding an rc
    variable called ALLOW_ORPHAN_GL_CONF and setting it to "1".

How does this help:

    This wouldn't be useful without some way of updating an individual
    repo's rules directly into its gl-conf file.

    contrib/commands/compile-1 does exactly that (see notes within that
    file for information, assumptions, warnings, etc.)

2 years agovim syntax and indent files...
Sitaram Chamarty [Mon, 2 Oct 2017 04:14:34 +0000 (09:44 +0530)]
vim syntax and indent files...

with the new "template-data" section, it becomes important to be able to
visually know if you're entering something in the wrong section
(template stuff outside the begin/end markers, or normal stuff inside).

(unfortunately I only know vim; maybe others can help with other
editors' setups?)

2 years ago"these are not the droids you are looking for"
Sitaram Chamarty [Fri, 29 Sep 2017 14:45:51 +0000 (20:15 +0530)]
"these are not the droids you are looking for"

2 years agotemplates, template data, and compiling template data
Sitaram Chamarty [Mon, 25 Sep 2017 05:26:42 +0000 (10:56 +0530)]
templates, template data, and compiling template data

3 years agoset a repo's group membership(s) in 'gl-repo-groups'...
Sitaram Chamarty [Wed, 20 Sep 2017 12:17:59 +0000 (17:47 +0530)]
set a repo's group membership(s) in 'gl-repo-groups'...

...a la 'gl-perms' for role memberships

3 years agooptimise the single-repo POST_CREATE cases a bit...
Sitaram Chamarty [Mon, 25 Sep 2017 10:27:47 +0000 (15:57 +0530)]
optimise the single-repo POST_CREATE cases a bit...

...I was lazily letting them run over ALL repos.  (And I am still lazy
because I did not do one of them yet; see comments in that file).

3 years agoremove unneeded POST_CREATE scripts when running compile/setup
Sitaram Chamarty [Tue, 19 Sep 2017 05:08:38 +0000 (10:38 +0530)]
remove unneeded POST_CREATE scripts when running compile/setup

3 years agosome optimisations in compile step...
Sitaram Chamarty [Sun, 24 Sep 2017 01:34:49 +0000 (07:04 +0530)]
some optimisations in compile step...

...these were found when the caching code was being developed.  We have
reverted the caching, but these optimisations are not related to caching
so we keep them.

3 years agoRevert "reduce stat() and other calls for huge installs"
Sitaram Chamarty [Mon, 18 Sep 2017 16:24:04 +0000 (21:54 +0530)]
Revert "reduce stat() and other calls for huge installs"

This reverts commit 41b7885b77cfe992ad3c96d0b021ece51ce1b3e3.

Some parts of this change may come back later, but the caching logic
will not.

3 years ago(test suite) fixes for new git in fedora 26...
Sitaram Chamarty [Sun, 20 Aug 2017 09:03:16 +0000 (14:33 +0530)]
(test suite) fixes for new git in fedora 26...

3 years agoreduce stat() and other calls for huge installs
Sitaram Chamarty [Fri, 11 Aug 2017 13:31:11 +0000 (19:01 +0530)]
reduce stat() and other calls for huge installs

Fedora has 42000 or so repos, and a 'gitolite compile' was taking too

This set of changes reduces the number of stat() and other calls from 9
to 2 per unchanged, existing repo.  (The expectation is that only a few
repos' rules are being changed each time, so this helps somewhat
optimise the others not to take the same amount of time).

3 years agoremove a couple of redundant/useless lines
Sitaram Chamarty [Mon, 7 Aug 2017 10:02:12 +0000 (15:32 +0530)]
remove a couple of redundant/useless lines

3 years agoUse https:// instead of insecure git:// protocol
Till Maas [Fri, 4 Aug 2017 10:56:27 +0000 (12:56 +0200)]
Use https:// instead of insecure git:// protocol

Signed-off-by: Till Maas <>
(with minor whitespace changes by

3 years agov3.6.7 v3.6.7
Sitaram Chamarty [Sun, 2 Jul 2017 14:01:25 +0000 (19:31 +0530)]

3 years agoadd example PRE_GIT code for blocking access (IP-check)
Sitaram Chamarty [Sat, 10 Jun 2017 01:12:09 +0000 (06:42 +0530)]
add example PRE_GIT code for blocking access (IP-check)

3 years agoallow repo-specific hooks to be organised into subdirectories
Sitaram Chamarty [Tue, 30 May 2017 05:00:48 +0000 (10:30 +0530)]
allow repo-specific hooks to be organised into subdirectories

(thanks to Mathieu Arnold for catching this, and for an initial patch)

3 years agofix inefficiency in repo-specific hooks
Sitaram Chamarty [Tue, 30 May 2017 04:13:37 +0000 (09:43 +0530)]
fix inefficiency in repo-specific hooks

normally I don't care too much about inefficiencies that show up during
a push to the gitolite-admin repo, but this one shows up even when a
normal user creates a single wild-card repo -- it runs the repo-specific
hooks trigger on ALL existing repos!

no one noticed or complained, so perhaps it *actually* wasn't that
visible a problem, but it's an easy fix anyway.

(TBH, there's still a slight inefficiency.  When a new (non-wild) repo
is added to gitolite.conf, that particular one gets processed twice --
once in POST_CREATE, and once in POST_COMPILE...  but *shrug*.  If no
one noticed the much bigger O(n) inefficiency we just fixed, this O(1)
inefficiency hardly matters.)

3 years agoallow the multi hook driver to be placed elsewhere
Sitaram Chamarty [Wed, 10 May 2017 03:59:53 +0000 (09:29 +0530)]
allow the multi hook driver to be placed elsewhere

see!topic/gitolite/-PvYRleGKHQ for

3 years agoFix SHA256 fingerprinting to match the full character set
Alex Vandiver [Wed, 10 May 2017 00:54:21 +0000 (17:54 -0700)]
Fix SHA256 fingerprinting to match the full character set

Because of a one-bit typo, this only matched the fingerprint up until
the first upper-case letter; this led to false-positive messages about
hash collisions.

3 years agonew 'skip_block' sugar, and 'testconf' feature using it
Sitaram Chamarty [Fri, 14 Apr 2017 09:35:51 +0000 (15:05 +0530)]
new 'skip_block' sugar, and 'testconf' feature using it

3 years agoallow syslog facility to be changed
Sitaram Chamarty [Tue, 4 Apr 2017 23:52:19 +0000 (05:22 +0530)]
allow syslog facility to be changed

3 years ago(minor) fix noise in ssh-authkeys-split (thanks to Tony Finch)
Sitaram Chamarty [Mon, 27 Mar 2017 00:40:09 +0000 (06:10 +0530)]
(minor) fix noise in ssh-authkeys-split (thanks to Tony Finch)

3 years agoeliminate race (loaded systems only?) that makes gl-conf look empty
Sitaram Chamarty [Mon, 16 Jan 2017 15:06:30 +0000 (20:36 +0530)]
eliminate race (loaded systems only?) that makes gl-conf look empty

3 years agominor oopsie in checking return code of "do"
Sitaram Chamarty [Mon, 16 Jan 2017 13:06:09 +0000 (18:36 +0530)]
minor oopsie in checking return code of "do"

3 years agoallow @group names in config values to be expanded...
Sitaram Chamarty [Sat, 14 Jan 2017 06:28:46 +0000 (11:58 +0530)]
allow @group names in config values to be expanded...

The string "@group" is replaced with a space separated list of member
names if it is a valid group.  Otherwise it is left alone.

3 years agofix shebang in repo-specific-hooks
Sitaram Chamarty [Fri, 25 Nov 2016 12:46:33 +0000 (18:16 +0530)]
fix shebang in repo-specific-hooks

(thanks to Dieter on the mailing list for catching this!)

3 years agofix up command help for 'list-users' and 'list-members'
Sitaram Chamarty [Fri, 30 Sep 2016 00:15:25 +0000 (05:45 +0530)]
fix up command help for 'list-users' and 'list-members'

...was incomplete/ambiguous

4 years ago(minor) patch typo in default .rc
kwadronaut [Thu, 8 Sep 2016 16:35:51 +0000 (18:35 +0200)]
(minor) patch typo in default .rc

4 years agov3.6.6 v3.6.6
Sitaram Chamarty [Thu, 8 Sep 2016 16:11:40 +0000 (21:41 +0530)]

4 years agodon't 'fatal' when a non-bare repo is thrown in!
Sitaram Chamarty [Thu, 8 Sep 2016 15:11:44 +0000 (20:41 +0530)]
don't 'fatal' when a non-bare repo is thrown in!


4 years agofix 'access' command behaviour for 'C' and 'D' perms
Sitaram Chamarty [Thu, 8 Sep 2016 14:43:40 +0000 (20:13 +0530)]
fix 'access' command behaviour for 'C' and 'D' perms

Thanks to Alexander Groß for catching this.  Basically, the access command was
ignoring the presence or absence

4 years agominor README change
Sitaram Chamarty [Mon, 5 Sep 2016 08:21:19 +0000 (13:51 +0530)]
minor README change

See mailing list thread, subject line "Readme-extensions"

4 years agoprep for perl 5.26 removing "." from @INC
Sitaram Chamarty [Mon, 5 Sep 2016 02:01:51 +0000 (07:31 +0530)]
prep for perl 5.26 removing "." from @INC

Someone on irc found that debian -- per [1] -- has already implemented it, so
gitolite fails.

This fix is useful even on older perls; I should have done it long ago.  (It
prevents perl searching all over @INC for the file when we *know* it's right
here under $PWD).


4 years agossh-authkeys-split: do not zap keys without trailing newlines
Tony Finch [Wed, 31 Aug 2016 11:10:12 +0000 (12:10 +0100)]
ssh-authkeys-split: do not zap keys without trailing newlines

The normal ssh-authkeys script handles key files without trailing newlines
OK. However ssh-authkeys-split does not, because it tries to treat a
zero-newline file as a multi-line file, and the shell `read` builtin will
not read a line that ends with eof rather than a newline. So it ends up
discarding zero-newline keys.

4 years agosuppress warnings when trying to clean repo hook
Scott Lipcon [Thu, 16 Jun 2016 20:16:17 +0000 (16:16 -0400)]
suppress warnings when trying to clean repo hook

suppress warning when setting the repo-specific hooks to an empty
string, e.g. removing an existing hook.

Specifically, we default repositories to use a repo-specific hook:

repo @all
    option = jenkins

this causes gitolite to output a warning that it is ignoring the attempt
to set a post-update hook on the admin repository.    I'd like to be
able to do:

repo gitolite-admin
    option = ""

but the warning is printed before it realizes that the argument is empty.
This patch just changes the order of the checks so that the warning is
only printed if the hooks are actually defined.

4 years agoperms: make '-c' required for batch mode
Sitaram Chamarty [Tue, 7 Jun 2016 03:46:17 +0000 (09:16 +0530)]
perms: make '-c' required for batch mode

quoth Tony:

>   Typing ^C at a command to make it stop without doing anything is a natural
>   reaction, regardless of any imprecations to type "cancel"

He asked for a '-b' option; i.e., don't allow a bare "ssh git@... perms repo"
to be interpreted as batch mode.

Meanwhile, '-c' is acceptable for existing repos too (as you can see from the
mirroring code at least).

So, just think of '-c' as a moral eqvt of '-b' that already exists.

4 years agorewrite create command
Sebastian Koslowski [Tue, 12 Apr 2016 08:32:20 +0000 (10:32 +0200)]
rewrite create command

create no longer calls the perms command, but creates the repo itself.
There is some code duplication, but less dependencies between the commands.

(With minor modifications by committer)

4 years agodon't run postupdate unless master has been pushed
gitolite tester [Fri, 6 May 2016 04:35:21 +0000 (10:05 +0530)]
don't run postupdate unless master has been pushed

thanks to Joseph Huttner for the idea

4 years agogitolite setup: use '-m' to supply a custom commit message
Raphael Medaer [Fri, 8 Apr 2016 13:14:20 +0000 (15:14 +0200)]
gitolite setup: use '-m' to supply a custom commit message

4 years agominor fixup to selinux detection
Sitaram Chamarty [Fri, 25 Mar 2016 04:40:10 +0000 (10:10 +0530)]
minor fixup to selinux detection

4 years agominor install/test suite change
Sitaram Chamarty [Fri, 25 Mar 2016 04:38:11 +0000 (10:08 +0530)]
minor install/test suite change

perl no longer likes it when you increment a string (where you only care about
the number at the start).  It does it anyway, but it produces a warning, and
gitolite's install script does not like that.

4 years agooops; minor bug in tproxy
Sitaram Chamarty [Mon, 21 Mar 2016 04:20:20 +0000 (09:50 +0530)]
oops; minor bug in tproxy

thanks to Robin Johnson for catching this.

Note it only happens in one very very specific case: when no command is sent
by the user at all (i.e., "ssh git@host", so even if you don't have this
patch, the workaround is "ssh git@host info");

4 years agooops! perl version need not be that high; remove 'use' line
Sitaram Chamarty [Mon, 22 Feb 2016 23:02:59 +0000 (04:32 +0530)]
oops!  perl version need not be that high; remove 'use' line

(thanks for Johnson Earls for catching this!)

4 years agov3.6.5 v3.6.5
Sitaram Chamarty [Sat, 20 Feb 2016 12:48:57 +0000 (18:18 +0530)]

4 years agoAdd support for Github's new TEMPLATE features
Eugene E. Kashpureff Jr [Thu, 18 Feb 2016 01:08:35 +0000 (01:08 +0000)]
Add support for Github's new TEMPLATE features

Github recently added support for TEMPLATEs for certain Github-specific
activities, including creating Issues and Pull Requests. This patch
creates these files as symlinks to the CONTRIBUTING document, which
explains the process that should be used.

Signed-off-by: Eugene E. Kashpureff Jr <>
Committer's note: I still refuse to use pull requests that *require me to go
to the website and do stuff there*.  But it seems it's easy enough if the
requestor gives you a number.  In this case, it was

    git fetch github refs/pull/78/head
    git merge FETCH_HEAD

4 years agoban repo name ending in ".git"
Paul Sokolovsky [Sat, 13 Feb 2016 18:48:38 +0000 (20:48 +0200)]
ban repo name ending in ".git"

'user.html' says:

    The ".git" at the end is optional for git commands (i.e., you can use
    "testing.git" instead of "testing" for clone, fetch, push, etc., if you
    like) but gitolite commands in general will not like the additional ".git"
    at the end.

Until now, we've been catching this trailing ".git" in various commands and
such, but there are so many programs, it's hard to make sure they all do this

This patch catches it deep inside gitolite core.

(based on patch sent by Paul Sokolovsky)

4 years agoallow creator check to be bypassed during mirroring...
Sitaram Chamarty [Sat, 6 Feb 2016 03:24:37 +0000 (08:54 +0530)]
allow creator check to be bypassed during mirroring...

The original, intended, purpose of wild repos is that they belong to the user,
and if the user is gone, so should his wild repos.

However, it seems people are using the wild repos thing as a convenience to
avoid creating actual repo stanzas in the conf file.  For them, the actual
creator of a repo is more like the gitolite "admin" - his *authority* is being
to used to create something, but the thing that is created is not tied to his

Oh well... so be it!

To use, just add

    option bypass-creator-check = 1

to the rules for the repo.

4 years agowho-pushed: avoid undefined variable warnings before printing usage
Tony Finch [Thu, 21 Jan 2016 10:59:05 +0000 (10:59 +0000)]
who-pushed: avoid undefined variable warnings before printing usage

4 years ago(minor) make sure <user> was passed in access command
Sebastian Koslowski [Thu, 21 Jan 2016 09:05:04 +0000 (10:05 +0100)]
(minor) make sure <user> was passed in access command

4 years agosshkeys-lint: remove a couple of subs...
Sitaram Chamarty [Wed, 20 Jan 2016 04:27:40 +0000 (09:57 +0530)]
sshkeys-lint: remove a couple of subs...

a couple of subs are now re-defined following 285c4b5 ("sshkeys-lint: use new
ssh fingerprint functions") because that commit pulls in  One (dbg)
was subtly different but was not being used anyway, while the other (usage)
was genuinely redundant.  Got rid of both.

4 years agoukm: use new ssh fingerprint functions.
Robin H. Johnson [Wed, 13 Jan 2016 07:43:24 +0000 (23:43 -0800)]
ukm: use new ssh fingerprint functions.

UKM was never updated for new-style fingerprints at all.

Signed-off-by: Robin H. Johnson <>
4 years agosskm: use new ssh fingerprint functions.
Robin H. Johnson [Wed, 13 Jan 2016 07:43:23 +0000 (23:43 -0800)]
sskm: use new ssh fingerprint functions.

SSKM was never updated for new-style fingerprints at all.

Signed-off-by: Robin H. Johnson <>
4 years agosshkeys-lint: use new ssh fingerprint functions.
Robin H. Johnson [Wed, 13 Jan 2016 07:43:22 +0000 (23:43 -0800)]
sshkeys-lint: use new ssh fingerprint functions.

Signed-off-by: Robin H. Johnson <>
4 years agossh-authkeys: use new ssh fingerprint functions.
Robin H. Johnson [Wed, 13 Jan 2016 07:43:21 +0000 (23:43 -0800)]
ssh-authkeys: use new ssh fingerprint functions.

Signed-off-by: Robin H. Johnson <>
4 years agoAdd helper functions for SSH fingerprints.
Robin H. Johnson [Wed, 13 Jan 2016 07:43:20 +0000 (23:43 -0800)]
Add helper functions for SSH fingerprints.

New Gitolite::Common functions:

The existing code for new-style fingerprint did not correctly match on
some inputs, as it was not strict enough about the MD5-format
fingerprint. Additionally, some places in the codebase had not been
updated for new-style fingerprints at all.

Two fingerprints both starting with 'SHA256:34' were matched by the old
regex as '56:34', instead of a full MD5 fingerprint, and gitolite
mistakenly thought they were identical. This held for ANY new form
fingerprint where both the hashname ended with AND the hash content
started with [0-9a-f]{2}.

Be stricter about the form of the fingerprints instead:
- MD5 can have a 'MD5:' prefix (new OpenSSH versions only).
- MD5 has a known length (16 octets of hex digits, with colons)
- Other hashes are more than just SHA256, but all follow the form

This commit introduces the new functions only.

Signed-off-by: Robin H. Johnson <>
4 years agoallow pre-auto-gc also when adding repo specific hooks
Sitaram Chamarty [Wed, 13 Jan 2016 16:11:14 +0000 (21:41 +0530)]
allow pre-auto-gc also when adding repo specific hooks

4 years agossh-authkeys-split: avoid creating invalid keyfiles
Tony Finch [Thu, 7 Jan 2016 17:03:08 +0000 (17:03 +0000)]
ssh-authkeys-split: avoid creating invalid keyfiles

Verify that each line from a multiline keyfile is plausible using
`ssh-keygen -l` to generate a fingerprint. This is similar to the
check performed by the main ssh-authkeys script, except we don't
bother checking the fingerprint format in ssh-authkeys-split.

This should reduce the damage due to problems such as stray blank
lines or unexpected key formats (e.g. PuTTY keys).

4 years agotesting mirror push "one plus one" mode... (read below)
Sitaram Chamarty [Tue, 15 Dec 2015 05:49:12 +0000 (11:19 +0530)]
testing mirror push "one plus one" mode... (read below)

Currently, every time someone does a push to a master server, a slave push
(one for each slave) is triggered.

This is not only wasteful, it also causes too much load.  First of all, pushes
should be serialised -- there is no point running TWO 'git push --mirror' from
one server to another.  This means when one push is running, any more pushes
of the same repo to the same slave must be queued.

But more importantly, it does not make sense to queue more than one!

Hence the "one(running) plus one(queued)" name of the helper script.

4 years agotesting mirror push "one plus one" mode... (read below)
gitolite tester [Fri, 11 Dec 2015 06:43:51 +0000 (12:13 +0530)]
testing mirror push "one plus one" mode... (read below)

Currently, every time someone does a push to a master server, a slave push
(one for each slave) is triggered.

This is not only wasteful, it also causes too much load.  First of all, pushes
should be serialised -- there is no point running TWO 'git push --mirror' from
one server to another.  This means when one push is running, any more pushes
of the same repo to the same slave must be queued.

But more importantly, it does not make sense to queue more than one!

Hence the "one(running) plus one(queued)" name of the helper script.

4 years agoEnter trigger create-with-reference
milki [Fri, 25 Jul 2014 18:07:02 +0000 (11:07 -0700)]
Enter trigger create-with-reference

On repo creation, setup objects/info/alternates for a server side
alternate object store. The value is configured via `option

Intended to use with forks and mirrors to save network bandwidth.

4 years agonew mirror function: 'status all all'
Sitaram Chamarty [Tue, 24 Nov 2015 23:27:47 +0000 (04:57 +0530)]
new mirror function: 'status all all'

We used to say if you need the status of all slaves for all repos you have to
roll it yourself, maybe like this:

    gitolite list-phy-repos | while read r
        echo ---- $r
        gitolite mirror list slaves $r

This isn't great for automation.

The new feature simply prints a list of repos that have *some* error, which is
arguably more useful for further action/processing.

4 years agoadd repo name to mirror status output
Sitaram Chamarty [Mon, 23 Nov 2015 23:25:58 +0000 (04:55 +0530)]
add repo name to mirror status output

4 years agoadd line about ^C to usage message of access command
Sitaram Chamarty [Mon, 23 Nov 2015 22:41:34 +0000 (04:11 +0530)]
add line about ^C to usage message of access command

4 years agoskip self in slave list...
Sitaram Chamarty [Sun, 15 Nov 2015 12:47:11 +0000 (18:17 +0530)]
skip self in slave list...

makes creating slave lists a lot more convenient for some cases; see!topic/gitolite/_jL--PR0AXM

4 years agorepo specific hooks:
Sitaram Chamarty [Sun, 15 Nov 2015 12:21:16 +0000 (17:51 +0530)]
repo specific hooks:

-   allow incrementally adding more repo-specific hooks


-   allow gitolite-admin repo also to be "hooked" (but not post-update of


4 years agoadd security warning to 'config' command
Sitaram Chamarty [Wed, 11 Nov 2015 01:05:50 +0000 (06:35 +0530)]
add security warning to 'config' command

4 years agov3.6.4 v3.6.4
Sitaram Chamarty [Sun, 1 Nov 2015 12:01:20 +0000 (17:31 +0530)]

4 years agoaccess -s: better error message for ^C on existing repo...
Sitaram Chamarty [Sun, 18 Oct 2015 01:17:18 +0000 (06:47 +0530)]
access -s: better error message for ^C on existing repo...

because "this should not happen"... happened!

(thanks to hseg on irc for catching this)

4 years agofix ref-create permission bug on wild repos
gitolite tester [Fri, 16 Oct 2015 10:52:05 +0000 (16:22 +0530)]
fix ref-create permission bug on wild repos

TLDR: users are able to *create* new refs that they are not supposed to.
Upgrading gitolite is not mandatory; there is a workaround within the conf
syntax itself (see below).

The bug shows up if the following four conditions are satisfied:

    repo foo/..*                    # 1 (see below)
        C       =   @all            # 2
        RW+CD   =   CREATOR         # 3
        RW      =   special_user    # 4

1.  must be a wild repo
2.  the create-repo line must allow "special_user(s)"
3.  there is at least one rule containing RW.*C in the repo
4.  the intent is that special user(s) can ff-push but cannot *create* refs
    since they have only RW; for a refresher on this, see

In such cases, the restriction on creating a ref is ignored.  (Only creation
is affected; the bug does not affect delete, rewind permissions).

In general, this is a relatively minor bug.  No data is destroyed, and no data
is leaked.  Some cleanup of useless refs may be required if someone has
(ab)used this.  At worst this could be a potential DOS, but I have never
considered DOS to be a valid concern when it requires *authorised* users.

If you have such a conf, and cannot immediately upgrade, there is a

    repo foo/..*
        RW+CD   =   CREATOR
        RW      =   special_user

        -       =   special_user    # add a deny rule for the special user(s)
        C       =   @all            # move the repo-create perm to the end,
                                    # *after* the deny rule above

(Thanks to hseg on #gitolite for catching this and being tenacious about it!
At first, I was arrogant enough to reject the idea that such a bug could
exist; it took me a bit to get the right conditions in place and see the

4 years agominor fixups to 'perms' command:
gitolite tester [Fri, 16 Oct 2015 05:15:11 +0000 (10:45 +0530)]
minor fixups to 'perms' command:

-   when list_roles is invoked as part of the error reporting for an invalid
    role (as opposed to being explicitly asked for by option '-lr'), the
    output should go to STDERR, just like the error message.

-   the Ctrl-C stuff doesn't work when the user is sharing multiple ssh
    sessions over a single connection (see, ControlMaster, ControlPersist,
    etc., in 'man ssh_config').  Replaced it with a more explicit means to
    allow a user who inadvertently walked into this mode of operation to
    gracefully get out.

Thanks to Stephane Chazelas on the mailing list[1] for reporting the issues,
subsequent discussion, and patches which I was able to modify as needed.


4 years agoAdd script to pull and sanitize Active Directory user groups
Jonathan Gray [Wed, 16 Sep 2015 20:56:01 +0000 (15:56 -0500)]
Add script to pull and sanitize Active Directory user groups

4 years agoAdd documentation for using Active Directory authentication via Apache
Jonathan Gray [Wed, 16 Sep 2015 20:55:05 +0000 (15:55 -0500)]
Add documentation for using Active Directory authentication via Apache

5 years agominor typo in pattern...
Sitaram Chamarty [Fri, 14 Aug 2015 11:54:17 +0000 (17:24 +0530)]
minor typo in pattern...

note that this does not affect anything, since the 6 extra characters that
would be matched are not part of the base64 character set anyway, so they
should not be *produced* by your ssh-keygen.

thanks to 'ayekat' on irc pointing me to a comment on the commit on github.
(Please don't put stuff on github and expect me to find it; I prefer plain old
email because -- among other things -- I don't want to insist that you have a
github account in order to discuss gitolite).

5 years agocontrib: redmine user alias
gitolite tester [Sat, 6 Jun 2015 00:54:06 +0000 (06:24 +0530)]
contrib: redmine user alias

5 years learns a few more tricks...
Sitaram Chamarty [Sat, 30 May 2015 10:28:54 +0000 (15:58 +0530)] learns a few more tricks...

(thanks to Nicholas Clark for the first requirement)

-   allow replacement by "prefix"
-   allow customised warning message (to better warn users of the new repo
-   allow "inform and abort" -- forces users to switch to the new name

5 years agocreate command: remove race condition...
Sitaram Chamarty [Sat, 23 May 2015 03:29:20 +0000 (08:59 +0530)]
create command: remove race condition...

Because of the pipe in the create command, 'gitolite git-config' and 'perms
-c' would run simultaneously.  The problem was, if git-config ran between
these two statements in new_wild_repo() in

        # 'gitolite git-config' runs here
    _print( "$repo.git/gl-creator", $user );

*and* the repo pattern had CREATOR in it, it would not return the correct
values for the default.roles options, since the repo pattern would not be
deemed to match the actual repo (between creator() and generic_name()).

Thanks to Ronald Wirth for catching this; see [1] for details.



...and while we're about it, I changed it to use /bin/sh and smoke tested it
using "dash", which I believe is close enough.

5 years agomake single quotes around reponame optional...
Sitaram Chamarty [Tue, 26 May 2015 23:59:59 +0000 (05:29 +0530)]
make single quotes around reponame optional...

apparently the git client, when using ext:: transports, does not send those

5 years ago'who-pushed' learns super-efficient 'tip search'
Sitaram Chamarty [Mon, 18 May 2015 23:54:07 +0000 (05:24 +0530)]
'who-pushed' learns super-efficient 'tip search'

5 years agoDon't overwrite gl-log on each flush in who-pushed
milki [Thu, 14 May 2015 23:04:09 +0000 (16:04 -0700)]
Don't overwrite gl-log on each flush in who-pushed

_print always overwrites the target file. Empty the file at the
beginning of the migrate run but subsequently append new entries.

5 years agomake who-pushed more efficient...
Sitaram Chamarty [Sun, 10 May 2015 13:42:51 +0000 (19:12 +0530)]
make who-pushed more efficient...

-   add (commented out) values to LOG_DEST in the default rc file to allow
    'repo-log' as a destination
-   make gl_log() respect this and append update log records to a file called
    'gl-log' within the bare repo dir.  (This is only the update log records,
    not everything.)
-   let 'who-pushed' use gl-log if found, and the normal ones (much slower)
    only if not
-   add more help to who-pushed
-   help admin migrate log records (or rather, generate the new ones from the
    normal gitolite logs)

5 years agochange the usage() semantics slightly...
Sitaram Chamarty [Mon, 11 May 2015 06:07:19 +0000 (11:37 +0530)]
change the usage() semantics slightly...

to better accommodate additional custom help messages

5 years agogitolite query-rc --dump (or -d)
Sitaram Chamarty [Mon, 11 May 2015 08:16:40 +0000 (13:46 +0530)]
gitolite query-rc --dump (or -d)

5 years ago(minor) fix typo
Tony Xue [Sun, 3 May 2015 13:53:35 +0000 (21:53 +0800)]
(minor) fix typo

5 years agov3.6.3 v3.6.3
Sitaram Chamarty [Sun, 26 Apr 2015 09:38:49 +0000 (15:08 +0530)]

5 years agoallow limited remote use of 'git config'
gitolite tester [Thu, 9 Apr 2015 06:20:40 +0000 (11:50 +0530)]
allow limited remote use of 'git config'

5 years agogit-annex-shell: accept repo paths without '~/'
Benoît Knecht [Wed, 22 Apr 2015 09:27:03 +0000 (11:27 +0200)]
git-annex-shell: accept repo paths without '~/'

It seems that (some versions of) git-annex use repository paths that simply
start with '/' instead of '/~/', so make the '~/' part optional.

5 years agoopenssh 6.8 again... forgot sshkeys-lint the last time!
Sitaram Chamarty [Tue, 21 Apr 2015 23:47:05 +0000 (05:17 +0530)]
openssh 6.8 again... forgot sshkeys-lint the last time!

5 years agofix minor bugly in perms
Sitaram Chamarty [Mon, 30 Mar 2015 16:10:14 +0000 (21:40 +0530)]
fix minor bugly in perms

reminder: bugly = bug that makes something look ugly :)

5 years agoopenssh 6.8 compat
Sitaram Chamarty [Wed, 18 Mar 2015 23:47:59 +0000 (05:17 +0530)]
openssh 6.8 compat

5 years agoallow repo symlinks while still being paranoid...
Sitaram Chamarty [Fri, 13 Mar 2015 14:31:38 +0000 (20:01 +0530)]
allow repo symlinks while still being paranoid...

I don't like "find -L" in a security program.  Period.  If you MUST keep some
of your repos somewhere else, you'll need to do it this way.

Let's say all the repos under foo/bar and baz are actually on a different
disk.  That is, ~/repositories/foo/bar is a symlink to some other disk, as is

Then add this to the rc file somewhere in the "rc variables used by various
features" section:

    REPO_SYMLINKS   =>  "foo/bar/ baz/",

DON'T forget the trailing slash at the end of each name, and the comma

5 years agolineup the info display fields
Sitaram Chamarty [Fri, 13 Mar 2015 07:57:37 +0000 (13:27 +0530)]
lineup the info display fields

5 years agoperms: list available roles, plus several other changes...
Sitaram Chamarty [Wed, 11 Mar 2015 16:56:05 +0000 (22:26 +0530)]
perms: list available roles, plus several other changes...

(much thanks to Tony Finch!)

-   show valid roles and their access rights, for the given repo ("-lr")
-   check a role not just against the rc, but against the roles that this
    specific repo actually uses, which may be a smaller subset.  (This is the
    most important improvement in this patch; the rest is just fluff!)
-   fixup usage message

WARNING: minor backward compat breakage: 'ssh ... perms -l repo' no longer
works; the '-l' goes *after* the repo name now.

5 years agoprevent info leak when gitolite-shell is used as $SHELL...
Sitaram Chamarty [Wed, 4 Mar 2015 00:09:37 +0000 (05:39 +0530)]
prevent info leak when gitolite-shell is used as $SHELL...

The error message is explicitly the same as you get when you do send in an
invalid git/gitolite command; this is by design.

5 years agoauthkeys file need not be 0700...
Sitaram Chamarty [Sat, 21 Feb 2015 13:24:47 +0000 (18:54 +0530)]
authkeys file need not be 0700...

0600 is sufficient.

Caught by Christoph.  I don't actually think there is any possibility of this
being used to attack gitolite but it's just a 1-bit change :)


5 years agoallow gitolite-shell to be used as "$SHELL"...
Sitaram Chamarty [Fri, 20 Feb 2015 08:58:53 +0000 (14:28 +0530)]
allow gitolite-shell to be used as "$SHELL"...

Experts only; no support and no docs.

Idea courtesy "calestyo"; see mails on Feb 20 or so in this:!msg/gitolite/eLTiK8hvijo/9dKI8YfTSecJ

5 years agotest suite: write user.* settings to ~/.gitconfig.local...
Sitaram Chamarty [Sun, 8 Feb 2015 00:38:58 +0000 (06:08 +0530)]
test suite: write user.* settings to ~/.gitconfig.local...

...instead of ~/.gitconfig, and add an include.path in it

5 years agosshkeys-lint: refactor keytype and accept ed25519
Robin H. Johnson [Tue, 3 Feb 2015 17:53:20 +0000 (09:53 -0800)]
sshkeys-lint: refactor keytype and accept ed25519

sshkeys-lint was rejecting Ed25519 type keys, and also not detecting
ecdsa keys for shell users; refactor the key type detection code to use
a single variable and introduce Ed25519 into the new variable.

Also explicitly matches the ECDSA key types now, rather than leaving it

Signed-off-by: Robin H. Johnson <>
5 years agofix ugliness in http output when only base URL is given
Sitaram Chamarty [Sat, 7 Feb 2015 06:44:06 +0000 (12:14 +0530)]
fix ugliness in http output when only base URL is given