xcat-core/xCAT-server/lib/xcat/plugins/activedirectory.pm
2010-02-26 22:15:14 +00:00

92 lines
2.2 KiB
Perl

# IBM(c) 2010 EPL license http://www.eclipse.org/legal/epl-v10.html
package xCAT_plugin::activedirectory;
BEGIN
{
$::XCATROOT = $ENV{'XCATROOT'} ? $ENV{'XCATROOT'} : '/opt/xcat';
}
my $callback;
use lib "$::XCATROOT/lib/perl";
use Getopt::Long;
sub handled_commands {
return {
addclusteruser => 'site:directoryprovider',
addclouduser => 'site:directoryprovider',
};
}
sub process_request {
my $request = shift;
my $command = $request->{command}->[0];
$callback = shift;
my $doreq = shift;
use Data::Dumper;
if ($command =~ /add.*user/) { #user management command, adding
my $homedir;
my $fullname;
my $gid;
my $uid;
@ARGV=@{$request->{arg}};
Getopt::Long::Configure("bundling");
Getopt::Long::Configure("pass_through");
if (!GetOptions(
'd=s' => \$homedir,
'c=s' => \$fullname,
'g=s' => \$gid,
'u=s' => \$uid)) {
die "Not possible";
}
my $username = shift @ARGV;
my %args ( username => $username );
if ($fullname) { $args{fullname} = $fullname };
sendmsg("Full name: ".$fullname);
sendmsg(join(" ",@ARGV));
}
}
sub sendmsg {
my $text = shift;
my $node = shift;
my $descr;
my $rc;
if (ref $text eq 'HASH') {
die "not right now";
} elsif (ref $text eq 'ARRAY') {
$rc = $text->[0];
$text = $text->[1];
}
if ($text =~ /:/) {
($descr,$text) = split /:/,$text,2;
}
$text =~ s/^ *//;
$text =~ s/ *$//;
my $msg;
my $curptr;
if ($node) {
$msg->{node}=[{name => [$node]}];
$curptr=$msg->{node}->[0];
} else {
$msg = {};
$curptr = $msg;
}
if ($rc) {
$curptr->{errorcode}=[$rc];
$curptr->{error}=[$text];
$curptr=$curptr->{error}->[0];
} else {
$curptr->{data}=[{contents=>[$text]}];
$curptr=$curptr->{data}->[0];
if ($descr) { $curptr->{desc}=[$descr]; }
}
# print $outfd freeze([$msg]);
# print $outfd "\nENDOFFREEZE6sK4ci\n";
# yield;
# waitforack($outfd);
$callback->($msg);
}
1;