Don Seiler's add user
script
Download, Add a comment, Back to main page
#!/usr/bin/perl
# jabberadduser.pl
# Don Seiler, don@seiler.us
# Based on Js Op de Beeck's script.
# Allows for those servers hosting multiple domains
# Intended to be run as root to do chown. Alternatively
# you could run as jabber user and comment out chown line.
use strict;
my $spooldir = "/var/spool/jabber";
my $jabberuser = "jabber";
my $jabbergroup = "jabber";
my $jabberconf = "/etc/jabber/multiple.xml";
my $newdomain = 0;
my ($spoolpath,$userfile);
print "\n\nJabber User Creation Script\n\n";
# Get username@domain.tld
my ($username,$domain);
while($username eq "") {
my $account = &getInput("New Account (user\@domain.tld)");
if($account ne "") {
($username,$domain) = split(/\@/,$account);
if($domain eq "") {
print "ERROR: You must provide an account (user\@domain.tld)\n";
$username = "";
} else {
$spoolpath = "$spooldir/$domain";
if( ! -d $spoolpath ) {
mkdir("$spoolpath");
$newdomain = 1;
}
$userfile = "$spoolpath/$username.xml";
if( -e $userfile ) {
print "ERROR: User $account already exists!\n";
$username = "";
}
}
} else {
print "ERROR: You must provide an account (user\@domain.tld)\n";
}
}
# Get password
my $password;
while($password eq "") {
$password = &getInput("Password");
if($password eq "") {
print "ERROR: You must provide a password.\n";
}
}
# Specify text to write
my $line = qq/
<xdb>
<password xmlns='jabber:iq:auth' xdbns='jabber:iq:auth'>$password<\/password>
<query xmlns='jabber:iq:register' xdbns='jabber:iq:register'>
<username>$username<\/username>
<password xmlns='jabber:iq:auth'>$password<\/password>
<\/query>
<query xmlns='jabber:iq:last' last='0' xdbns='jabber:iq:last'>
Disconnected
<\/query>
<\/xdb>
/;
# Write user file
open (USERFILE, ">$userfile")
|| die "Cannot open user XML file: $!\n";
print USERFILE $line;
close USERFILE;
# Change owner to jabber:jabber
system("chown -R $jabberuser:$jabbergroup $spoolpath");
print "\n\nUser $username created with password $password in $spoolpath.\n";
if($newdomain) {
print "\n";
print " *\n";
print " * This looks like a new domain for this server, be sure to add\n";
print " * a host line in $jabberconf for it\n";
print " *\n";
}
print "\n";
# SCRIPT DONE
sub getInput
{
my ($prompt,$default,$input,$return);
($prompt, $default) = ($_[0],$_[1]);
print $prompt;
if($default ne "") {
print " [$default]";
}
print ": ";
chomp($input = <STDIN>);
$return = $default unless $input;
} #END sub getInput