From f718437a3d438096ae38f2614d4a63c0c87c4883 Mon Sep 17 00:00:00 2001 From: Petr Baudis Date: Tue, 10 Oct 2006 02:14:32 +0200 Subject: [PATCH] Use does_exist() and available() static methods to determine existence of project/user --- cgi/Git/RepoCGI.pm | 24 ++++++++++++++++++++++++ cgi/p/editproj.cgi | 12 +++++++++++- cgi/regproj.cgi | 2 +- cgi/reguser.cgi | 2 +- 4 files changed, 37 insertions(+), 3 deletions(-) diff --git a/cgi/Git/RepoCGI.pm b/cgi/Git/RepoCGI.pm index 8c12534..d92700f 100644 --- a/cgi/Git/RepoCGI.pm +++ b/cgi/Git/RepoCGI.pm @@ -412,6 +412,20 @@ sub update { $self->_group_update; } +# static method +sub does_exist { + my ($name) = @_; + valid_name($name) or die "tried to query for project with invalid name $name!"; + (available($name) + or -d "/home/repo/repodata/cloning/$name" + or -d "/home/repo/repodata/to-clone/$name"); +} +sub available { + my ($name) = @_; + valid_name($name) or die "tried to query for project with invalid name $name!"; + (-d "/srv/git/$name.git"); +} + ### User object @@ -484,5 +498,15 @@ sub conjure { $self->_sshkey_save; } +# static method +sub does_exist { + my ($name) = @_; + valid_name($name) or die "tried to query for user with invalid name $name!"; + (-e jailed_file("/etc/sshkeys/$name")); +} +sub available { + does_exist(@_); +} + 1; diff --git a/cgi/p/editproj.cgi b/cgi/p/editproj.cgi index b8303aa..adab14a 100755 --- a/cgi/p/editproj.cgi +++ b/cgi/p/editproj.cgi @@ -13,7 +13,17 @@ my $cgi = $repo->cgi; my $name = $cgi->remote_user(); -if (! -d "/srv/git/$name.git") { +if (!valid_name($name)) { + print "

Invalid project name. Go away, sorcerer.

\n"; + exit; +} + +if (!Git::RepoCGI::Project::does_exist($name)) { + print "

Sorry but this project does not exist. Now, how did you get here?!

\n"; + exit; +} + +if (!Git::RepoCGI::Project::available($name)) { print "

Sorry but your project has not finished mirroring yet. If it takes inordinate amount of time, please tell the administrator.

\n"; exit; } diff --git a/cgi/regproj.cgi b/cgi/regproj.cgi index 138c579..0ccbcda 100755 --- a/cgi/regproj.cgi +++ b/cgi/regproj.cgi @@ -16,7 +16,7 @@ if ($cgi->param('name')) { # FIXME: racy, do a lock my $name = $repo->wparam('name'); valid_name($name) - and (-d "/srv/git/$name.git" or -d "/home/repo/repodata/cloning/$name" or -d "/home/repo/repodata/to-clone/$name") + and Git::RepoCGI::Project::does_exist($name) and $repo->err "Project with that name already exists."; my $mirror = $cgi->param('mode') eq 'mirror'; diff --git a/cgi/reguser.cgi b/cgi/reguser.cgi index fa5e68b..be3b550 100755 --- a/cgi/reguser.cgi +++ b/cgi/reguser.cgi @@ -15,7 +15,7 @@ if ($cgi->param('name')) { # submitted, let's see # FIXME: racy, do a lock valid_name($name) - and (-e jailed_file("/etc/sshkeys/$name")) + and Git::RepoCGI::User::does_exist($name) and $repo->err "User with that name already exists."; my $user = Git::RepoCGI::User->ghost($name); -- 2.11.4.GIT