$username_noperiod
$shellmachine $useradd $usermod $userdel $mydomain
$cyrus_server $cyrus_admin_user $cyrus_admin_pass
+ $icradius_dbh
@saltset @pw_set);
use Carp;
use FS::Conf;
$cyrus_admin_user = '';
$cyrus_admin_pass = '';
}
+ if ( $conf->exists('icradius_secrets') ) {
+ $icradius_dbh = DBI->connect($conf->config('icradius_secrets'))
+ or die $DBI::errstr;
+ } else {
+ $icradius_dbh = '';
+ }
};
@saltset = ( 'a'..'z' , 'A'..'Z' , '0'..'9' , '.' , '/' );
return "queueing job (transaction rolled back): $error";
}
}
+ if ( $icradius_dbh ) {
+ my $queue = new FS::queue { 'job' => 'FS::svc_acct::icradius_rc_insert' };
+ $error = $queue->insert( $self->username,
+ $self->_password,
+ $self->radius_check
+ );
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return "queueing job (transaction rolled back): $error";
+ }
+ }
$dbh->commit or die $dbh->errstr if $oldAutoCommit;
''; #no error
}
sub cyrus_insert {
- my( $username, $quota ) =
+ my( $username, $quota ) = @_;
+ warn "cyrus_insert: starting for user $username, quota $quota\n";
+
+ warn "cyrus_insert: connecting to $cyrus_server\n";
my $client = Cyrus::IMAP::Admin->new($cyrus_server);
+
+ warn "cyrus_insert: authentication as $cyrus_admin_user\n";
$client->authenticate(
-user => $cyrus_admin_user,
-mechanism => "login",
-password => $cyrus_admin_pass
);
+ warn "cyrus_insert: creating user.$username\n";
my $rc = $client->create("user.$username");
my $error = $client->error;
- die $error if $error;
+ die "cyrus_insert: error creating user.$username: $error" if $error;
+ warn "cyrus_insert: setacl user.$username, $username => all\n";
$rc = $client->setacl("user.$username", $username => 'all' );
$error = $client->error;
- die $error if $error;
+ die "cyrus_insert: error setacl user.$username: $error" if $error;
if ( $quota ) {
+ warn "cyrus_insert: setquota user.$username, STORAGE => $quota\n";
$rc = $client->setquota("user.$username", 'STORAGE' => $quota );
$error = $client->error;
- die $error if $error;
+ die "cyrus_insert: error setquota user.$username: $error" if $error;
+ }
+
+ 1;
+}
+
+sub icradius_rc_insert {
+ my( $username, $password, %radcheck ) = @_;
+
+ my $sth = $icradius_dbh->prepare(
+ "INSERT INTO radcheck ( id, UserName, Attribute, Value ) VALUES ( ".
+ join(", ", map { $icradius_dbh->quote($_) } (
+ '',
+ $username,
+ "Password",
+ $password,
+ ) ). " )"
+ );
+ $sth->execute or die "can't insert into radcheck table: ". $sth->errstr;
+
+ foreach my $attribute ( keys %radcheck ) {
+ my $sth = $icradius_dbh->prepare(
+ "INSERT INTO radcheck ( id, UserName, Attribute, Value ) VALUES ( ".
+ join(", ", map { $icradius_dbh->quote($_) } (
+ '',
+ $username,
+ $attribute,
+ $radcheck{$attribute},
+ ) ). " )"
+ );
+ $sth->execute or die "can't insert into radcheck table: ". $sth->errstr;
}
1;
sub delete {
my $self = shift;
- return "Can't delete an account which has (svc_acct_sm) mail aliases!"
- if $self->uid && qsearch( 'svc_acct_sm', { 'domuid' => $self->uid } );
+ if ( defined( $FS::Record::dbdef->table('svc_acct_sm') ) ) {
+ return "Can't delete an account which has (svc_acct_sm) mail aliases!"
+ if $self->uid && qsearch( 'svc_acct_sm', { 'domuid' => $self->uid } );
+ }
return "Can't delete an account which is a (svc_forward) source!"
if qsearch( 'svc_forward', { 'srcsvc' => $self->svcnum } );
return "queueing job (transaction rolled back): $error";
}
}
+ if ( $icradius_dbh ) {
+ my $queue = new FS::queue { 'job' => 'FS::svc_acct::icradius_rc_delete' };
+ $error = $queue->insert( $self->username );
+ if ( $error ) {
+ $dbh->rollback if $oldAutoCommit;
+ return "queueing job (transaction rolled back): $error";
+ }
+ }
$dbh->commit or die $dbh->errstr if $oldAutoCommit;
'';
}
sub cyrus_delete {
- my( $username ) = shift;
+ my $username = shift;
my $client = Cyrus::IMAP::Admin->new($cyrus_server);
$client->authenticate(
1;
}
+sub icradius_rc_delete {
+ my $username = shift;
+
+ my $sth = $icradius_dbh->prepare(
+ 'DELETE FROM radcheck WHERE UserName = ?'
+ );
+ $sth->execute($username)
+ or die "can't delete from radcheck table: ". $sth->errstr;
+
+ 1;
+}
+
=item replace OLD_RECORD
Replaces OLD_RECORD with this one in the database. If there is an error,
=head1 VERSION
-$Id: svc_acct.pm,v 1.35 2001-09-11 04:17:47 ivan Exp $
+$Id: svc_acct.pm,v 1.39 2001-09-14 19:54:22 ivan Exp $
=head1 BUGS