diff options
-rw-r--r-- | docs/architecture/data.mdwn | 2 | ||||
-rw-r--r-- | docs/issues/cgi_gateway.mdwn | 2 | ||||
-rw-r--r-- | docs/issues/repo_name_limit.mdwn | 2 | ||||
-rw-r--r-- | libpiny/lib/Piny/Repo.pm | 16 | ||||
-rw-r--r-- | libpiny/lib/Piny/User.pm | 4 | ||||
-rw-r--r-- | libpiny/lib/Piny/User/IkiWiki.pm | 2 | ||||
-rwxr-xr-x | pinyadmin/sbin/newuser | 6 | ||||
-rw-r--r-- | pinyweb/suid/piny-suid.c | 2 |
8 files changed, 18 insertions, 18 deletions
diff --git a/docs/architecture/data.mdwn b/docs/architecture/data.mdwn index a81a268..c86ec15 100644 --- a/docs/architecture/data.mdwn +++ b/docs/architecture/data.mdwn @@ -4,7 +4,7 @@ Dynamic data lookup should opportunisticly cache any associated cheap data. For [[!table format=dsv delimiter=# data=""" datum #stored location #constraint -username #usually $ENV{SUDO_USER} # !~ /^git-|^ikiwiki-/ and =~ /^[a-zA-Z0-9_.][a-zA-Z0-9_.-]+$/ +username #usually $ENV{SUDO_USER} # !~ /^git-|^iki-/ and =~ /^[a-zA-Z0-9_.][a-zA-Z0-9_.-]+$/ uid #/etc/passwd # None email #/etc/passwd GECOS #Email::Valid::Loose->new("-fqdn" => 1, "-fudge" => 0, "-local_rules" => 0, "-mxcheck" => 1, "-tldcheck" => 0 ); repoaccess #/etc/group git-$reponame entry # None diff --git a/docs/issues/cgi_gateway.mdwn b/docs/issues/cgi_gateway.mdwn index 8ac5c1b..b930665 100644 --- a/docs/issues/cgi_gateway.mdwn +++ b/docs/issues/cgi_gateway.mdwn @@ -20,7 +20,7 @@ Requirements: * pinyadmin command arguments * exits if username's uid < 1000 * exits if username violates piny username constraints (specifically git- and - ikiwiki- are not allowed) + iki- are not allowed) * executes with the appropriate uid/gid the specified pinyadmin command and the specified arguments diff --git a/docs/issues/repo_name_limit.mdwn b/docs/issues/repo_name_limit.mdwn index a7725c8..68a77f5 100644 --- a/docs/issues/repo_name_limit.mdwn +++ b/docs/issues/repo_name_limit.mdwn @@ -4,6 +4,6 @@ * Opened by: jrayhawk ### Discussion -Problem: Repository names are restricted to 24 characters by the groupname limit in libc6 plus our use of the ikiwiki- prefix. +Problem: Repository names are restricted to 24 characters by the groupname limit in libc6 plus our use of the iki- prefix. Possible solution: optional use of truncated md5 (the first character needing to be a letter) hash of reponame as groupnames, restriction of usernames to 31 characters to keep namespaces isolated, check in newrepo for hash collision before actions are taken diff --git a/libpiny/lib/Piny/Repo.pm b/libpiny/lib/Piny/Repo.pm index cfa73bd..335843e 100644 --- a/libpiny/lib/Piny/Repo.pm +++ b/libpiny/lib/Piny/Repo.pm @@ -206,15 +206,15 @@ sub rebuild { unless( getgrnam("git-" . $s->name ) ) { system( "/usr/sbin/addgroup", "--quiet", "git-" . $s->name ) and die "Could not create repo group!"; system( "/usr/sbin/adduser", "--quiet", $s->owner->name, "git-" . $s->name ) and die "Could not add you to the repo group!"; - system( "/usr/sbin/adduser", "--quiet", "ikiwiki-" . $s->name, "git-" . $s->name ) and print "...But that's probably okay.\n"; + system( "/usr/sbin/adduser", "--quiet", "iki-" . $s->name, "git-" . $s->name ) and print "...But that's probably okay.\n"; }; - unless( getpwnam("ikiwiki-" . $s->name ) ) { - system( "/usr/sbin/adduser", "--quiet", "--system", "--group", "--gecos", $s->name, "ikiwiki-" . $s->name ) and die "Could not create ikiwiki user!"; - system( "/usr/sbin/adduser", "--quiet", "ikiwiki-" . $s->name, "git-" . $s->name ) and die "Could not add ikiwiki user to the repo group!"; + unless( getpwnam("iki-" . $s->name ) ) { + system( "/usr/sbin/adduser", "--quiet", "--system", "--group", "--gecos", $s->name, "iki-" . $s->name ) and die "Could not create ikiwiki user!"; + system( "/usr/sbin/adduser", "--quiet", "iki-" . $s->name, "git-" . $s->name ) and die "Could not add ikiwiki user to the repo group!"; }; - my $ikiuser = Piny::User::IkiWiki->new( "name" => "ikiwiki-" . $s->name ); + my $ikiuser = Piny::User::IkiWiki->new( "name" => "iki-" . $s->name ); foreach( "git-daemon-export-ok", "packed-refs" ) { open( TOUCH, ">", $s->path . "/" . $_ ) or die "Could not touch $_ for repo: $!"; @@ -314,7 +314,7 @@ sub destroy { system( "rm", "-rf", $s->secure_path, $s->ikiwiki_destdir, $s->ikiwiki_srcdir, "/etc/ikiwiki/piny/" . $s->name . ".setup", $s->path ); - my $ikiuser = Piny::User::IkiWiki->new( "name" => "ikiwiki-" . $s->name ); + my $ikiuser = Piny::User::IkiWiki->new( "name" => "iki-" . $s->name ); system( "deluser", "--remove-home", $ikiuser->name ); system( "delgroup", $ikiuser->name ); @@ -392,9 +392,9 @@ sub create { mkdir( $repo->path ) or die "The repo $name appears to already exist! ($!)"; - system( "/usr/sbin/adduser", "--quiet", "--system", "--group", "--gecos", $name, "ikiwiki-$name" ) and die "Could not create ikiwiki user!"; + system( "/usr/sbin/adduser", "--quiet", "--system", "--group", "--gecos", $name, "iki-$name" ) and die "Could not create ikiwiki user!"; - my $ikiuser = Piny::User::IkiWiki->new( "name" => "ikiwiki-$name" ); + my $ikiuser = Piny::User::IkiWiki->new( "name" => "iki-$name" ); system( "/usr/sbin/addgroup", "--quiet", "git-$name" ) and die "Could not create repo group!"; diff --git a/libpiny/lib/Piny/User.pm b/libpiny/lib/Piny/User.pm index 780a698..f742f87 100644 --- a/libpiny/lib/Piny/User.pm +++ b/libpiny/lib/Piny/User.pm @@ -18,8 +18,8 @@ use Piny::Group; subtype 'Username' => as 'Str' - => where { $_ =~ /^(?!(git|ikiwiki)-)[a-zA-Z][a-zA-Z0-9_.-]*$/ } - => message { if ( /^((?:git|ikiwiki)-|[^a-zA-Z])/ ) { "Usernames are not allowed to begin with $1" } elsif ( /([^a-zA-Z0-9_.-])/ ) { "Usernames are not allowed to contain $1" } else { "Invalid username" } } + => where { $_ =~ /^(?!(git|iki)-)[a-zA-Z][a-zA-Z0-9_.-]*$/ } + => message { if ( /^((?:git|iki)-|[^a-zA-Z])/ ) { "Usernames are not allowed to begin with $1" } elsif ( /([^a-zA-Z0-9_.-])/ ) { "Usernames are not allowed to contain $1" } else { "Invalid username" } } ; # Attributes diff --git a/libpiny/lib/Piny/User/IkiWiki.pm b/libpiny/lib/Piny/User/IkiWiki.pm index 8585e90..3838f38 100644 --- a/libpiny/lib/Piny/User/IkiWiki.pm +++ b/libpiny/lib/Piny/User/IkiWiki.pm @@ -18,7 +18,7 @@ extends "Piny::User"; subtype 'IkiWikiUsername' => as 'Str' - => where { $_ =~ /^ikiwiki-[a-zA-Z][a-zA-Z0-9_.-]*$/ } + => where { $_ =~ /^iki-[a-zA-Z][a-zA-Z0-9_.-]*$/ } => message { 'That username is not in the correct format for an ikiwiki user.' } ; diff --git a/pinyadmin/sbin/newuser b/pinyadmin/sbin/newuser index 22c73ef..7b864b7 100755 --- a/pinyadmin/sbin/newuser +++ b/pinyadmin/sbin/newuser @@ -75,8 +75,8 @@ if ( scalar @ARGV == 3 and $ARGV[0] eq "--batch" ) { next; }; - if ( $username =~ /^(git|ikiwiki)-/ ) { - print "Your username cannot start with git- or ikiwiki-!\n"; + if ( $username =~ /^(git|iki)-/ ) { + print "Your username cannot start with git- or iki-!\n"; next; }; @@ -119,7 +119,7 @@ if ( scalar @ARGV == 3 and $ARGV[0] eq "--batch" ) { # pathways to get to this point, but only a single path from here on down. if ( not defined $email or $email eq "" ) { print "Email address is undefined!\n"; exit 3; }; if ( not defined $username or $username eq "" ) { print "Username is undefined!\n"; exit 3; }; -if ( $username =~ /^(git|ikiwiki)-/ ) { print "Username must not begin with git- or ikiwiki-!\n"; exit 3; }; +if ( $username =~ /^(git|iki)-/ ) { print "Username must not begin with git- or iki-!\n"; exit 3; }; if ( $username !~ /^[a-zA-Z0-9_.][a-zA-Z0-9_.-]+$/ ) { print "Usernames must consist only of letters, digits, underscores, periods, and dashes, and not start with a dash. Usernames are case sensitive.\n" }; if ( not defined $password or $password eq "" ) { print "Password is undefined!\n"; exit 3; }; diff --git a/pinyweb/suid/piny-suid.c b/pinyweb/suid/piny-suid.c index 5c5b4d3..0fbaddb 100644 --- a/pinyweb/suid/piny-suid.c +++ b/pinyweb/suid/piny-suid.c @@ -39,7 +39,7 @@ int main( int argc, char *argv[] ) { regfree( &user_reg ); - if ( ( err = regcomp( &user_reg, "^(git|ikiwiki)-", REG_EXTENDED | REG_NOSUB ) ) != 0 ) { + if ( ( err = regcomp( &user_reg, "^(git|iki)-", REG_EXTENDED | REG_NOSUB ) ) != 0 ) { size_t sz = regerror( err, &user_reg, NULL, 0 ); char buf[sz]; regerror( err, &user_reg, buf, sz ); |