stta/stta/mvobjs.cgi
2021-10-01 20:35:43 +01:00

257 lines
11 KiB
Perl
Executable File

#!/usr/bin/perl
# mvobjs.cgi
# ... Services with Tarantella.
# STTA Rev. 1.3 Copyright (c) 2001-2004 Jesús Pérez Lorenzo --- license GNU GPL
# stta: (@#) 1.31051043346- [2004_01_29_102036]
require './stta-lib.pl';
do 'app-lib.pl';
if ( $config{'has_ldapusers'} eq "true" || $config{'is_ldapcache'} eq "true") {
do "ldap-lib.pl";
}
&foreign_require("proc", "proc-lib.pl");
&ReadParse();
if ( !$in{objtype} ) { &redirect("index.cgi"); }
if ( $in{task} ne "move" && $in{task} ne "copy" ) { &redirect("index.cgi"); }
$objtype=$in{objtype};
$postform=$in{postform};
$titleform="index_mv".$objtype;
$task=$in{task};
$orgobj=$in{orgobj};
$orgobj=~ s/\r|\n/ /g;
$userdn=$in{userdn} || "";
$userou=$in{userou} || "";
$newobj=$in{newobj};
$newalias=$in{newalias};
$destgrp=$in{destgrp};
$grptype=$objtype;
if ( $objtype =~ /apps/ ) { $grptype="grpapps" };
if ( $objtype =~ /hosts/ ) { $grptype="grphosts" };
if ( $objtype eq "ou" || $objtype eq "users" || $objtype eq "sysusers") { $grptype="ou" };
if ( $objtype eq "sysusers") { $postform="mvusers" ; $titleform="index_mvusers" };
&headerstta($text{$titleform}, "", $postform,undef,1,0,"$text{'headpage_right'}"."$text{'head_logout'}",undef,undef,"$text{head_below}" );
if ( $objtype eq "ou" || $objectype eq "users" ) {
%h_objs=&list_ous();
} else { %h_objs=eval("\&list_$objtype()"); }
$listObjs=$objtype."_list";
if ( $grptype ne $objtype ) {
if ( $grptype eq "ou" ) {
%h_grpobjs=&list_ous();
} else {
%h_grpobjs=eval("\&list_$grptype()");
}
} else { %h_grpobjs=%h_objs }
print "<p>\n";
print "<table width=100% border>\n";
print "<tr $tb> <td><font color='$revtext'><b>".eval("\$text{'titidx_$postform'}")."</b></td> </tr>\n" ;
print "<tr $cb> <td><table width=100%>\n";
print "<center>\n";
$dn_grpobj="";
$name_grpobj="";
$ens_grpobj="";
if ( $h_grpobjs{$destgrp}->{'alias'} ne $destgrp ) {
$err_msg="$destgrp: ".$text{'list_errno'};
&footHere;
exit;
}
$dn_grpobj=$h_grpobjs{$destgrp}->{'obj'};
$name_grpobj=$h_grpobjs{$destgrp}->{'name'};
$ens_grpobj=$h_grpobjs{$destgrp}->{'ens'};
$ens_org= "";
$cn_org="";
if ( $dn_obj ne "" ) {
$ens_org= $ens_obj;
@line=split(/\//,$ens_org);
$cn_org=$line[$#line];
}
$dn_grporg = "";
$ens_grporg= "";
if ( $dn_grpobj ne "" ) {
$dn_grporg= $dn_grpobj;
$ens_grporg= $ens_grpobj;
}
$nitems=0;
foreach $item (split(/ /, $orgobj)) {
next if ( $item eq "" );
$dn_obj="";
$name_obj="";
$ens_obj="";
next if ( $userdn eq "-" );
if ( $userdn ne "" ) {
$dn_obj=$userdn;
$dn_obj=~ s/,$config{ldap_base}//g;
$name_obj=$item;
$ens_obj=$h_grpobjs{$userou}->{'ens'}."/cn=$item";
} else {
if ( $h_objs{$item}->{'alias'} ne $item ) {
$errmsg="$orgobj: ".$text{'list_errno'};
print "<tr><td> $errmsg </td></tr>";
next;
}
$dn_obj=$h_objs{$item}->{'obj'};
$name_obj=$h_objs{$item}->{'name'};
$ens_obj=$h_objs{$item}->{'ens'};
}
$nitems++;
$ens_org= "";
$cn_org="";
if ( $dn_obj ne "" ) {
$ens_org= $ens_obj;
@line=split(/\//,$ens_org);
$cn_org=$line[$#line];
}
if ( $userdn ne "" ) {
$newdn_obj = "cn=$name_obj";
} else {
$newdn_obj = "ou=$name_obj";
}
if ( $dn_grporg ne "" ) { $newdn_obj .= ",$dn_grporg"; }
if ( $newobj ne "" ) {
$cn_org= "cn=$newobj";
if ( $nitems gt 1 ) { $cn_org .=$nitems; }
if ( $objtype eq "ou" || $objtype eq "grpapps" ) { $cn_org= "ou=$newobj"; }
$newdn_obj = "ou=$newobj";
if ( $nitems gt 1 ) { $newdn_obj .=$nitems; }
$newdn_obj .= ",$dn_grporg";
}
$newens_org = "";
if ( $ens_grporg ne "" ) { $newens_org = $ens_grporg; }
if ( $cn_org ne "" ) {
if ( $newens_org ne "" ) { $newens_org .= "/"; }
$newens_org .= $cn_org;
}
$newens_obj = "\"".$config{tta_base}."/$newens_org"."\"";
$ens_obj = "\"".$config{tta_base};
if ( $ens_org ne "" ) { $ens_obj .= "/".$ens_org; }
$ens_obj .= "\"";
# First try to make TTA changes
if ( $task eq "copy" ) {
# loading object attributes ...
$type_cmd="attributes";
if ( !&run_tta_cmd($type_cmd,$ens_obj) ) {
$errmsg="$orgobj: ($ens_obj) - ".$text{'tta_noobject'};
print "<tr><td> $errmsg </td></tr>";
next;
}
%h_ttaobj=&load_ttaobj();
}
$| = 1;
$temp = &tempname();
open(TEMP, ">$temp");
print TEMP "#!/bin/sh\n";
print TEMP $env;
print TEMP "export $export\n" if ($export);
print TEMP "$str\n";
$temp_f = &tempname();
open(TEMPF, ">$temp_f");
if ( $task eq "move" ) {
$type_cmd="rename";
print TEMPF " --name $ens_obj\\\n";
print TEMPF " --newname $newens_obj\\\n";
} elsif ( $task eq "copy" ) {
print TEMPF " --name $newens_obj\\\n";
if ( $h_ttaobj{objectclass}{value} =~ /ttacharacterapplication/ ) {
$tta_ObjType="charapp";
} elsif ( $h_ttaobj{objectclass}{value} =~ /ttawindowsapplication/ ) {
$tta_ObjType="windowsapp";
} elsif ( $h_ttaobj{objectclass}{value} =~ /ttaxapplication/ ) {
$tta_ObjType="xapp";
} elsif ( $h_ttaobj{objectclass}{value} =~ /scottaauxhost/ ) {
$tta_ObjType="host";
} elsif ( $h_ttaobj{objectclass}{value} =~ /scottagroupofnames/ ) {
$tta_ObjType="group";
} elsif ( $h_ttaobj{objectclass}{value} =~ /container/ ) {
$tta_ObjType="container";
} elsif ( $h_ttaobj{objectclass}{value} =~ /organizationalunit/ ) {
$tta_ObjType="orgunit";
} elsif ( $h_ttaobj{objectclass}{value} =~ /person/ ) {
$tta_ObjType="person";
}
if ( $tta_ObjType =~ /app$/ ) {
@appdef=&get_tta_appdef($tta_ObjType);
%h_appdef=();
foreach $appDefData (@appdef) {
$attrName=$appDefData->{att};
if ( $attrName eq "appserv" ) {
$hosts_list ="";
foreach $h (split(/,/, $h_ttaobj{$attrName}{value})) {
if ( $hosts_list ne "" ) { $hosts_list .= '" "' }
$hosts_list .=$h;
}
$h_ttaobj{$attrName}{value}=$hosts_list;
}
$h_appdef{$attrName}->{'att'} = $appDefData->{att};
}
}
$type_cmd="new_".$tta_ObjType;
foreach $attr (keys (%h_ttaobj)) {
next if ( $h_ttaobj{$attr}{property} eq "Name" );
next if ( $h_ttaobj{$attr}{property} eq "objectclass" );
next if ( $h_ttaobj{$attr}{property} eq "scottaWebtopContents" );
next if ( $h_ttaobj{$attr}{property} eq "Organizational Unit" );
if ( $tta_ObjType =~ /app$/ ) {
$attrName=$h_ttaobj{$attr}{property};
next if ($h_appdef{$attrName}->{att} ne $attrName );
}
print TEMPF " --".$h_ttaobj{$attr}{property}.
" \"$h_ttaobj{$attr}{value}\"\\\n";
}
}
print TEMPF "\n";
close(TEMPF);
if (&run_tta_cmd($type_cmd,$ens_obj,$temp_f)) {
print "</pre>\n";
} else { &html_errshow("tta")};
# system("cat $temp_f >> /opt/save/ttamvobjs.scr");
if ( $debug lt 2 ) { unlink($temp_f); }
if ( $objtype eq "ou" || $grptype eq "ou" ) {
if ( $config{'has_ldapusers'} eq "true" ) {
# LDAP changes ....
$ldap_server=$in{ldapserver} || "1";
&connect();
&mvcp_ldap_obj($task,$dn_obj,$newdn_obj,$objtype);
if ( $config{ldap2_server}.length gt 0 ) {
$ldap_server=2;
&connect();
if ( &mvcp_ldap_obj($task,$dn_obj,$newdn_obj,$objtype) ne 0 ) { &err_replication() }
}
}
if ( $config{'has_systemusers'} ne "true" && $userdn eq "-" ) {
$sysuser="";
}
}
if ( $config{'is_ldapcache'} eq "true" ) {
# LDAPCACHE changes ....
$ldapcache_server=$in{ldapcacheserver} || "1";
&connect_cache();
if ( &mvcp_cache_obj($task,$dn_obj,$newdn_obj,$objtype) eq 0 ) {
if ( $config{ldapcache2_server}.length gt 0 ) {
$ldapcache_server=2;
&connect_cache ();
if ( &mvcp_cache_obj($task,$dn_obj,$newdn_obj,$objtype) ne 0 ) { &err_replication() }
}
}
}
# STTA changes ....
if ( $objtype ne "users" ) {
if ( $task eq "copy" && $newalias eq "" ) { $newalias="copy_$item"; }
$lin_obj=$item."::".$destgrp."::".$newdn_obj."::".$newens_org."::".$newalias;
# if ( $task eq "copy" && $nitems gt 1 ) { $lin_obj .=$nitems; }
$lin_obj .="::";
&out_objslist( "modify", "mvobjs.cgi", $objtype, $listObjs, $item, $lin_obj, \%h_objs );
&webmin_log($h_objs{$item}->{'ens'},"$objtype","$task",$lin_obj);
}
print "<tr><td valign=top> ".$text{$task}." <b>".$h_objs{$item}->{name}."</b> --><b> $name_grpobj </b> (<i>$cn_org</i>) </td></tr>\n";
}
print "<tr><tr></table></table><hr><p>\n";
&footer($config{'back_return'},$text{'index'});
print "<p><p><p>\n";
do "footer.pl";
exit;