Skip to contentSkip to conversation

git-cvsserver: break the loop after successful hit

PATCH In review Junio C Hamano 2 participants 2 messages Jun 15, 2016 1 message not in the archive

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): -1324832183078898154@unknownmsgid

#1 lore raw

PATCH 4/5 git-cvsserver: break the loop after successful hit

No need to check for more lines of the authentication database after found a matching one.
---
 git-cvsserver.perl |    9 ++++-----

 1 files changed, 4 insertions(+), 5 deletions(-)
git-cvsserver.perl +0 -0
index e842d77..cd461ac 100755
@@ -248,11 +248,10 @@ if ($state->{method} eq 'pserver') {

        my $auth_ok;
        open my $passwd, "<", $authdb or die $!;
        while (<$passwd>) {
-            if (m{^\Q$user\E:(.*)}) {
-                if (crypt($user, $password) eq $1) {
-                    $auth_ok = 1;
-                }
-            };
+            if (m{^\Q$user\E:(.*)} && crypt($user, $password) eq $1) {
+                $auth_ok = 1;
+                last;
+            }
        }
        close $passwd;

--
1.7.0.4

#2 lore raw
Quoted 2 lines · Áshin László

No need to check for more lines of the authentication database after found a matching one.

s/found/finding/;

But I see a bigger issue here. Is it plausible that you might want to allow two entries for one user, with two different passwords, in an authdb file? The current code allows it, but if we want to disallow it, we could instead add your "last", like this, if you do not break the structure of the conditional statements in the original code.

	while (<$passwd>) {
		if (m{^\Q$user\E:(.*)}) {
			if (crypt($user, $password) eq $1) {
				$auth_ok = 1;
			}
			last;
		}
	}

Or have the "last" inside the inner "if" statement to keep that logic.

Either way I think the original nested "if" is much easier to read than your version.