1#!/usr/local/bin/perl
2use strict;
3use warnings;
4
5# this is hardcoded; change it if needed
6use lib "src/lib";
7use Gitolite::Test;
8
9# testing the (separate) authkeys handler
10# ----------------------------------------------------------------------
11
12$ENV{GL_BINDIR} = "$ENV{PWD}/src";
13
14my $ak = "$ENV{HOME}/.ssh/authorized_keys";
15mkdir("$ENV{HOME}/.ssh", 0700) if not -d "$ENV{HOME}/.ssh";
16my $kd = `gitolite query-rc -n GL_ADMIN_BASE` . "/keydir";
17
18try "plan 49";
19
20my $pgm = "gitolite ../triggers/post-compile/ssh-authkeys";
21
22try "
23    # prep
24    rm -rf $ak;                 ok
25
26    $pgm;                       ok
27    mkdir $kd;                  ok
28    cd $kd;                     ok
29    $pgm;                       ok;     /authorized_keys missing/
30                                        /creating/
31    wc < $ak;                   ok;     /2 *6 *32/
32    # some gl keys
33    ssh-keygen -N '' -q -f alice -C alice
34    ssh-keygen -N '' -q -f bob   -C bob
35    ssh-keygen -N '' -q -f carol -C carol
36    ssh-keygen -N '' -q -f dave  -C dave
37    ssh-keygen -N '' -q -f eve   -C eve
38    rm alice bob carol dave eve
39    ls -a;                      ok;     /alice.pub/; /bob.pub/; /carol.pub/; /dave.pub/; /eve.pub/
40    $pgm;                       ok;
41    wc    < $ak;                ok;     /^ *7 .*/;
42    grep gitolite $ak;          ok;     /start/
43                                        /end/
44
45    # some normal keys
46    mv alice.pub $ak;           ok
47    cat carol.pub >> $ak;       ok
48    $pgm;                       ok;     /carol.pub duplicates.*non-gitolite key/
49    wc < $ak;                   ok;     /^ *8 .*/;
50
51    # moving normal keys up
52    mv dave.pub dave
53    $pgm;                       ok
54    cat dave >> $ak;            ok
55    grep -n dave $ak;           ok;     /8:ssh-rsa/
56    mv dave dave.pub
57    $pgm;                       ok;     /carol.pub duplicates.*non-gitolite key/
58                                         /dave.pub duplicates.*non-gitolite key/
59    grep -n dave $ak;           ok;     /3:ssh-rsa/
60
61    # a bad key
62    ls -al > bad.pub
63    $pgm;                       !ok;    /fingerprinting failed for \\'keydir/bad.pub\\'/
64    wc < $ak;                   ok;     /^ *9 .*/;
65    # a good key doesn't get added
66    ssh-keygen -N '' -q -f good
67    $pgm;                       !ok;    /fingerprinting failed for \\'keydir/bad.pub\\'/
68    wc < $ak;                   ok;     /^ *9 .*/;
69    # till the bad key is removed
70    rm bad.pub
71    $pgm;                       ok;
72    wc < $ak;                   ok;     /^ *10 .*/;
73
74    # duplicate gl key
75    cp bob.pub robert.pub
76    $pgm;                       ok;     /robert.pub duplicates.*bob.pub/
77";
78