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