chiark
/
gitweb
/
~ijackson
/
d.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
899c6da
)
break out generate_local_part and prepare_create
author
Ian Jackson
<ijackson@chiark.greenend.org.uk>
Wed, 4 Sep 2013 20:50:32 +0000
(21:50 +0100)
committer
Ian Jackson
<ijackson@chiark.greenend.org.uk>
Wed, 4 Sep 2013 20:50:32 +0000
(21:50 +0100)
service
patch
|
blob
|
history
diff --git
a/service
b/service
index f160aaca213322281950353128a1e54613f9728e..d9ca7e3bf5ae26867088d42b9dab1cf35c7283ba 100755
(executable)
--- a/
service
+++ b/
service
@@
-141,16
+141,9
@@
sub rhsargs ($) {
return $row;
}
return $row;
}
-sub action_create {
- my $newrow = rhsargs({'redirect'=>$user, 'comment'=>''});
- open R, "/dev/urandom" or die $!;
- binmode R;
- my $countq = $dbh->prepare("SELECT count(*) FROM addrs WHERE user=?");
- $countq->execute($user);
- my ($count) = $countq->fetchrow_array();
- die unless defined $count;
- die "too many aliases for this user\n" if $count >= $maxperuser;
- my $q = $dbh->prepare("SELECT localpart FROM addrs WHERE localpart=?");
+sub generate_local_part () {
+ our $checkexist_q ||=
+ $dbh->prepare("SELECT localpart FROM addrs WHERE localpart=?");
my $s;
for (;;) {
$s = chr(ord('a')+goodrand(26));
my $s;
for (;;) {
$s = chr(ord('a')+goodrand(26));
@@
-161,13
+154,28
@@
sub action_create {
: ord('0')+($v-26));
}
# print STDERR "$s\n";
: ord('0')+($v-26));
}
# print STDERR "$s\n";
- $q->execute($s);
- my $row = $q->fetchrow_arrayref();
+ $
checkexist_
q->execute($s);
+ my $row = $
checkexist_
q->fetchrow_arrayref();
last if !$row;
last if !$row;
- $dbh->abort();
}
}
+ return $s;
+}
+
+sub prepare_create () {
+ my $countq = $dbh->prepare("SELECT count(*) FROM addrs WHERE user=?");
+ $countq->execute($user);
+ my ($count) = $countq->fetchrow_array();
+ die unless defined $count;
+ die "too many aliases for this user\n" if $count >= $maxperuser;
+ open R, "/dev/urandom" or die $!;
+ binmode R;
+}
+
+sub action_create {
+ my $newrow = rhsargs({'redirect'=>$user, 'comment'=>''});
+ prepare_create();
$newrow->{'user'} = $user;
$newrow->{'user'} = $user;
- $newrow->{'localpart'} =
$s
;
+ $newrow->{'localpart'} =
generate_local_part()
;
insertrow($newrow);
$dbh->commit();
prow($newrow);
insertrow($newrow);
$dbh->commit();
prow($newrow);