@rem = ' PERL for Windows NT -- ccperl must be in search path @echo off @ccperl -S ccperlpp.pl %0.bat %1 %2 %3 %4 %5 %6 %7 %8 %9 goto endofperl @rem '; # # ------------------------------------------------------------------ # | Copyright Unpublished, Atria Software, Inc. All Rights | # | Reserved. This software contains proprietary and confidential | # | information of Atria and its suppliers. Use, disclosure or | # | reproduction is prohibited without the prior express written | # | consent of Atria. Subject to RESTRICTED RIGHTS for US | # | Government users. | # ------------------------------------------------------------------ # # following is from nt.ph sub HKEY_CURRENT_USER {( 0x80000001 );} sub HKEY_LOCAL_MACHINE {( 0x80000002 );} # registry data types sub REG_NONE {( 0 );} sub REG_SZ {( 1 );} sub REG_EXPAND_SZ {( 2 );} sub REG_BINARY {( 3 );} sub REG_DWORD {( 4 );} sub REG_DWORD_LITTLE_ENDIAN {( 4 );} sub REG_DWORD_BIG_ENDIAN {( 5 );} sub REG_LINK {( 6 );} sub REG_MULTI_SZ {( 7 );} sub REG_RESOURCE_LIST {( 8 );} sub REG_FULL_RESOURCE_DESCRIPTOR {( 9 );} sub REG_RESOURCE_REQUIREMENTS_LIST {( 10 );} # registry key access modes. sub DELETE {(0x00010000);} sub READ_CONTROL {(0x00020000);} sub WRITE_DAC {(0x00040000);} sub WRITE_OWNER {(0x00080000);} sub SYNCHRONIZE {(0x00100000);} sub STANDARD_RIGHTS_REQUIRED {(0x000F0000);} sub STANDARD_RIGHTS_READ {( &READ_CONTROL);} sub STANDARD_RIGHTS_WRITE {( &READ_CONTROL);} sub STANDARD_RIGHTS_EXECUTE {( &READ_CONTROL);} sub STANDARD_RIGHTS_ALL {(0x001F0000);} sub SPECIFIC_RIGHTS_ALL {(0x0000FFFF);} sub ACCESS_SYSTEM_SECURITY {(0x01000000);} sub MAXIMUM_ALLOWED {(0x02000000);} sub GENERIC_READ {(0x80000000);} sub GENERIC_WRITE {(0x40000000);} sub GENERIC_EXECUTE {(0x20000000);} sub GENERIC_ALL {(0x10000000);} sub KEY_QUERY_VALUE {(0x0001);} sub KEY_SET_VALUE {(0x0002);} sub KEY_CREATE_SUB_KEY {(0x0004);} sub KEY_ENUMERATE_SUB_KEYS {(0x0008);} sub KEY_NOTIFY {(0x0010);} sub KEY_CREATE_LINK {(0x0020);} sub KEY_READ {(( &STANDARD_RIGHTS_READ | &KEY_QUERY_VALUE | &KEY_ENUMERATE_SUB_KEYS | &KEY_NOTIFY) & (~ &SYNCHRONIZE));} sub KEY_WRITE {(( &STANDARD_RIGHTS_WRITE | &KEY_SET_VALUE | &KEY_CREATE_SUB_KEY) & (~ &SYNCHRONIZE));} sub KEY_EXECUTE {(( &KEY_READ) & (~ &SYNCHRONIZE));} sub KEY_ALL_ACCESS {(( &STANDARD_RIGHTS_ALL | &KEY_QUERY_VALUE | &KEY_SET_VALUE | &KEY_CREATE_SUB_KEY | &KEY_ENUMERATE_SUB_KEYS | &KEY_NOTIFY | &KEY_CREATE_LINK) & (~ &SYNCHRONIZE));} sub log_truncate { $numruns_to_keep = 32; open(LOGFILE_READ, "<$logfilename"); while() { $numlines++; if (/^\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+/) { $numstarlines++; } } close(LOGFILE_READ); $numruns = $numstarlines / 2; #print STDOUT "numlines: $numlines starlines $numstarlines runs $numruns\n"; if ($numruns > $numruns_to_keep) { $numtotruncate = $numruns - $numruns_to_keep; #print STDOUT "truncating $numtotruncate runs\n"; open(TEMP_LOGFILE, ">>$logfilename.tmp"); truncate(TEMP_LOGFILE, 0); print TEMP_LOGFILE "truncated runs at $ltime\n\n"; open(LOGFILE_READ, "<$logfilename"); while() { $numlines++; if (/^\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+\+/) { $numstarlines2++; } if ($numstarlines2 > ($numtotruncate * 2)) { print TEMP_LOGFILE $_; } } close(LOGFILE_READ); close(TEMP_LOGFILE); unlink("$logfilename") || die("error in unlink"); rename("$logfilename.tmp", "$logfilename"); } } open(STDERR, ">&STDOUT"); select(STDERR); $|=1; select(STDIN); $|=1; select(STDOUT); $|=1; # get %ATRIAHOME% # $atriaregy = "Software\\Atria\\ClearCase\\CurrentVersion"; &::NTRegOpenKeyEx ( HKEY_LOCAL_MACHINE(), "$atriaregy", 0, KEY_READ(), $hkey); $rgyval1 = ""; &::NTRegQueryValueEx ( $hkey, "ProductHome", 0, $type, $rgyval1); $atriahome = $rgyval1; &::NTRegCloseKey($hkey); if (! -d "$atriahome") { print STDOUT "logfile for this job is at %ATRIAHOME%\\var\\log\\iisfix_log\n\n"; print(STDOUT "HKLM\\Software\\Atria\\ClearCase\\CurrentVersion\\ProductHome\nis missing or not a directory. exiting.\n"); exit(1); } # they can override fpse install with this key $atriaregy = "Software\\Atria\\ClearCase\\CurrentVersion\\SSAPI"; &::NTRegOpenKeyEx ( HKEY_LOCAL_MACHINE(), "$atriaregy", 0, KEY_READ(), $hkey); $rgyval1 = ""; &::NTRegQueryValueEx ( $hkey, "SkipFPSEInstall", 0, $type, $rgyval1); $skip_fpse = $rgyval1; &::NTRegCloseKey($hkey); $time = time(); $ltime = localtime($time); # set up log file # $logfilename = "$atriahome\\var\\log\\iisfix_log"; $ccifylogfilename = "$atriahome\\var\\log\\ccify_log"; log_truncate(); open(LOGFILE, ">>$logfilename"); print(LOGFILE "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n"); print(LOGFILE "\n%ATRIAHOME%\\bin\\iisfix.bat started at $ltime\n\n"); print(STDOUT "\n%ATRIAHOME%\\bin\\iisfix.bat started at $ltime\n\n"); $serverhost = $ENV{"COMPUTERNAME"}; print STDOUT "your credentials on web server $serverhost\n\n"; print LOGFILE "your credentials on web server $serverhost\n\n"; open(CREDS, "\"$atriahome\\etc\\utils\\creds.exe\" 2>&1 |"); while() { print STDOUT $_; print LOGFILE $_; } print STDOUT "\n\n"; print LOGFILE "\n\n"; # get / IIS alias $regy = "System\\CurrentControlSet\\Services\\w3svc\\parameters\\Virtual Roots"; &::NTRegOpenKeyEx ( HKEY_LOCAL_MACHINE(), "$regy", 0, KEY_READ(), $hkey); $rgyval1 = ""; &::NTRegQueryValueEx ( $hkey, "/", 0, $type, $rgyval1); $iisrootalias = $rgyval1; &::NTRegCloseKey($hkey); $iisrootalias =~ s/\,\,.*$//; print(STDOUT "IIS root alias is \"$iisrootalias\"\n"); print(LOGFILE "IIS root alias is \"$iisrootalias\"\n"); if (! -d "$iisrootalias") { print STDOUT "IIS root alias is not a directory.\n"; print LOGFILE "IIS root alias is not a directory.\n"; exit; } # verify this is a snapshot view, look in each directory up until view.dat file is found $p = $iisrootalias; my $nomore = 0; do { if (-f "$p\\view\.dat") { #print (LOGFILE "found view.dat in $p\n"); #print (STDOUT "found view.dat in $p\n"); $nomore = 1; } else { $pos = rindex($p, "\\"); if ($pos == -1) { print(LOGFILE "$wroot is not in a snapshot view\n"); print(STDOUT "$wroot is not in a snapshot view\n"); exit(); } $temp = substr($p, 0, $pos); $save = $p; $p = $temp; } } until $nomore == 1; $viewroot = $p; $vobroot = $save; print (LOGFILE "snapshot view root is at $viewroot\n"); print (STDOUT "snapshot view root is at $viewroot\n"); print (LOGFILE "vob root is at $vobroot\n"); print (STDOUT "vob root is at $vobroot\n"); # get services from service.cnf file open(SERVICES, "type $vobroot\\_vti_pvt\\services.cnf 2>&1 |"); while() { chop; if (/^\/$/) {next;} $services{$_} = 1; #print "service: $_\n"; } close(SERVICES); # get path to fpsrvadm # first try FPSE4 (OSE) location $sysdrive = $ENV{"SystemDrive"}; #print "\$sysdrive is $sysdrive\n"; $fpsrvadm5 = ""; $fpsrvadm5 = "$sysdrive\\Program Files\\Common Files\\Microsoft Shared\\Web Server Extensions\\50\\bin\\owsadm.exe"; $fpsrvadm4 = ""; $fpsrvadm4 = "$sysdrive\\Program Files\\Common Files\\Microsoft Shared\\Web Server Extensions\\40\\bin\\fpsrvadm.exe"; $fpsrvadm3 = ""; $regy = "Software\\Microsoft\\FrontPage\\3.0"; &::NTRegOpenKeyEx ( HKEY_LOCAL_MACHINE(), "$regy", 0, KEY_READ(), $hkey); $rgyval1 = ""; ::NTRegQueryValueEx ( $hkey, "FrontPageRoot", 0, $type, $rgyval1); $fproot = $rgyval1; &::NTRegCloseKey($hkey); #print STDOUT "FrontPage3 root is $fproot\n"; #print (LOGFILE "FrontPage3 root is $fproot\n"); $fpsrvadm3 = $fproot; $fpsrvadm3 =~ s/$/\\version3.0\\bin\\fpsrvadm.exe/; # query extender version for root web and use 3/4 as specified there $fpse_ver_file = $vobroot . "\\_vti_pvt\\service.cnf"; open(FPSE_VER_FILE, "<$fpse_ver_file"); while() { if (/vti_extenderversion\:SR\|5\./) { chop; print STDOUT "web has FPSE 5 installed ($_)\n"; print LOGFILE "web has FPSE 5 installed ($_)\n"; $fpsrvadm = $fpsrvadm5; } if (/vti_extenderversion\:SR\|4\./) { chop; print STDOUT "web has FPSE 4 installed ($_)\n"; print LOGFILE "web has FPSE 4 installed ($_)\n"; $fpsrvadm = $fpsrvadm4; } if (/vti_extenderversion\:SR\|3\./) { chop; print STDOUT "web has FPSE 3 installed ($_)\n"; print LOGFILE "web has FPSE 3 installed ($_)\n"; $fpsrvadm = $fpsrvadm3; } } close(FPSE_VER_FILE); if (! -f "$fpsrvadm") { print STDOUT "FPSE administration program missing (\"$fpsrvadm\")! trying SSAPI\\FpSrvAdmProgram reg key.\n"; print LOGFILE "FPSE administration program missing (\"$fpsrvadm\")! trying SSAPI\\FpSrvAdmProgram reg key.\n"; # they can provide a pathname in this reg. key in case we can't find it # through the heuristics above. $atriaregy = "Software\\Atria\\ClearCase\\CurrentVersion\\SSAPI"; &::NTRegOpenKeyEx ( HKEY_LOCAL_MACHINE(), "$atriaregy", 0, KEY_READ(), $hkey); $rgyval1 = ""; &::NTRegQueryValueEx ( $hkey, "FpSrvAdmProgram", 0, $type, $rgyval1); $fpsrvadm = $rgyval1; &::NTRegCloseKey($hkey); if (! -f "$fpsrvadm") { print STDOUT "FPSE administration program missing.\n"; print LOGFILE "FPSE administration program missing.\n"; exit; } } print STDOUT "fpsrvadm.exe is at $fpsrvadm\n"; print (LOGFILE "fpsrvadm.exe is at $fpsrvadm\n"); # get tcp port for IIS $regy = "SYSTEM\\CurrentControlSet\\Control\\ServiceProvider\\ServiceTypes\\W3SVC"; &::NTRegOpenKeyEx ( HKEY_LOCAL_MACHINE(), "$regy", 0, KEY_READ(), $hkey); #print "\$hkey: $hkey\n"; $err = 0; $err++ unless &::NTRegQueryValueEx ( $hkey, "TcpPort", 0, $type, $packval); $iisport = ord($packval); print(STDOUT "IIS TCP port is $iisport\n"); printf(LOGFILE "IIS TCP port is $iisport\n"); print(STDOUT "Updating IIS view: $vobroot\n"); print(LOGFILE "Updating IIS view: $vobroot\n"); print(STDOUT "cleartool update $vobroot\n"); print(LOGFILE "cleartool update $vobroot\n"); open(CCUPDATE, "cleartool update \"$vobroot\" 2>&1 |"); while() { print STDOUT $_; print LOGFILE $_; } close(CCUPATE); # get directory versions from the iis server view $did_dirs = "no"; $marker = 0; open(CCWEBS, "cleartool ls -sho -vob_only -nxname -visible $vobroot 2>&1 |"); while() { chop; $ccweb = $_; if ("$did_dirs" eq "no") { $did_dirs = "yes"; # check for checked-out directories print STDOUT "listing checked-out directories in shared view...\n"; print LOGFILE "listing checked-out directories in shared view...\n"; open(LSCO, "cleartool lsco -cview -rec -short $vobroot 2>&1 |"); while() { chop; if (-d "$_") { print STDOUT "\"$_\"\n"; print LOGFILE "\"$_\"\n"; } } close(LSCO); open(LSCO1, "cleartool lsco -cview -dir -short $vobroot 2>&1 |"); while() { chop; if (-d "$_") { print STDOUT "\"$_\"\n"; print LOGFILE "\"$_\"\n"; } } print STDOUT "end checked-out directories\n"; print LOGFILE "end checked-out directories\n"; } if (-d "$ccweb") { print STDOUT "\nprocessing VOB Directory $ccweb\n"; print LOGFILE "\nprocessing VOB Directory $ccweb\n"; if ($ccweb =~ /lost\+found/) { print STDOUT "filtered out \"$ccweb\"\n"; print LOGFILE "filtered out \"$ccweb\"\n"; next; } if ($ccweb =~ /\\_vti_/) { print STDOUT "filtered out \"$ccweb\"\n"; print LOGFILE "filtered out \"$ccweb\"\n"; next; } $svcname = $ccweb; $vobrootr = $vobroot; $vobrootr =~ s/\\/\\\\/g; $svcname =~ s/$vobrootr\\//; $svcname =~ s/^/\//; $ccwebs{$svcname} = 1; #print "ccweb: $ccweb service name: $svcname\n"; if ($services{$svcname}) { print STDOUT "ClearCase directory $ccweb is a service. Performing maintainance.\n"; print LOGFILE "ClearCase directory $ccweb is a service. Performing maintainance.\n"; $services{$svcname} = 0; #print(STDOUT "\"$fpsrvadm\" -o install -p $iisport -w $svcname\n"); #print(LOGFILE "\"$fpsrvadm\" -o install -p $iisport -w $svcname\n"); #open(FPSRVADM, "\"$fpsrvadm\" -o install -p $iisport -w $svcname |"); #while() { # print STDOUT $_; # print LOGFILE $_; #} #close(FPSRVADM); #print(STDOUT "\"$fpsrvadm\" -o check -p $iisport -w $svcname\n"); #print(LOGFILE "\"$fpsrvadm\" -o check -p $iisport -w $svcname\n"); #open(FPSRVADM, "\"$fpsrvadm\" -o check -p $iisport -w $svcname |"); #while() { # print STDOUT $_; # print LOGFILE $_; #} #close(FPSRVADM); $ccifyarg = $ccweb; $ccifyarg =~ s/ /\?/g; print(STDOUT "\n\n\"$atriahome\\bin\\ccperl\.exe\" \"$atriahome\\bin\\ccify\.pl\" $ccifyarg\n"); print(LOGFILE "\n\n\"$atriahome\\bin\\ccperl\.exe\" \"$atriahome\\bin\\ccify\.pl\" $ccifyarg\n"); open(CCIFY_LOG, ">>$ccifylogfilename"); print CCIFY_LOG "iisfix.bat marker $marker at $ltime\n"; print LOGFILE "writing marker $marker at $ltime to ccify_log\n"; $marker++; close(CCIFY_LOG); $ccify_status = 0; $ccify_status = system("ccperl \"$atriahome\\bin\\ccify.pl\" $ccifyarg"); $ccify_status = $ccify_status >> 8; print STDOUT "ccify.pl exit status was $ccify_status\n"; print LOGFILE "ccify.pl exit status was $ccify_status\n"; } else { print STDOUT "ClearCase directory $ccweb is NOT a service. Turning it into a service.\n"; print LOGFILE "ClearCase directory $ccweb is NOT a service. Turning it into a service.\n"; if ( ("$skip_fpse" eq "yes") || ("$svcname" =~ /\/ccase_tools/i) || ("$svcname" =~ /\/images/i) || ("$svcname" =~ /\/cgi-bin/i) || ("$svcname" =~ /\/_borders/i) || ("$svcname" =~ /\/_derived/i) || ("$svcname" =~ /\/_fpclass/i) || ("$svcname" =~ /\/_layouts/i) || ("$svcname" =~ /\/_overlay/i) || ("$svcname" =~ /\/_private/i) || ("$svcname" =~ /\/_ScriptLibrary/i) || ("$svcname" =~ /\/_themes/i) ) { print STDOUT "skipping FPSE install for service $svcname\n"; print LOGFILE "skipping FPSE install for service $svcname\n"; } else { open(SERVICES, ">>$vobroot\\_vti_pvt\\services.cnf"); print(SERVICES "$svcname\n"); close(SERVICES); # now install extensions print(STDOUT "\"$fpsrvadm\" -o install -p $iisport -w $svcname\n"); print(LOGFILE "\"$fpsrvadm\" -o install -p $iisport -w $svcname\n"); open(FPSRVADM, "\"$fpsrvadm\" -o install -p $iisport -w $svcname 2>&1 |"); while() { print STDOUT $_; print LOGFILE $_; } close(FPSRVADM); } open(CCIFY_LOG, ">>$ccifylogfilename"); print CCIFY_LOG "iisfix.bat marker $marker at $ltime\n"; $marker++; close(CCIFY_LOG); # now ccify this web $ccifyarg = $ccweb; $ccifyarg =~ s/ /\?/g; print(STDOUT "\n\n\"$atriahome\\bin\\ccperl\.exe\" \"$atriahome\\bin\\ccify\.pl\" $ccifyarg\n"); print(LOGFILE "\n\n\"$atriahome\\bin\\ccperl\.exe\" \"$atriahome\\bin\\ccify\.pl\" $ccifyarg\n"); $ccify_status = 0; $ccify_status = system("ccperl \"$atriahome\\bin\\ccify.pl\" $ccifyarg"); $ccify_status = $ccify_status >> 8; print STDOUT "ccify.pl exit status was $ccify_status\n"; print LOGFILE "ccify.pl exit status was $ccify_status\n"; } } else { if (-f "$ccweb") { print STDOUT "\nprocessing VOB File $ccweb\n"; print LOGFILE "\nprocessing VOB File $ccweb\n"; # now ccify this file $ccifyarg = $ccweb; $ccifyarg =~ s/ /\?/g; print(STDOUT "\n\n\"$atriahome\\bin\\ccperl\.exe\" \"$atriahome\\bin\\ccify\.pl\" $ccifyarg\n"); print(LOGFILE "\n\n\"$atriahome\\bin\\ccperl\.exe\" \"$atriahome\\bin\\ccify\.pl\" $ccifyarg\n"); $ccify_status = 0; $ccify_status = system("ccperl \"$atriahome\\bin\\ccify.pl\" $ccifyarg"); $ccify_status = $ccify_status >> 8; print STDOUT "ccify.pl exit status was $ccify_status\n"; print LOGFILE "ccify.pl exit status was $ccify_status\n"; } } } # any remaining services are not ClearCase directories. Print instructions for # adding such to source control" open(SERVICES, "type $vobroot\\_vti_pvt\\services.cnf 2>&1 |"); while() { chop; if (/^\/$/) {next;} if ($ccwebs{$_}) { #print "service $_ is in ClearCase\n"; } else { print STDOUT "IIS service $_ is NOT a ClearCase directory. Use can use FrontPage/InterDev or the OSE/IIS snapin to add web to source control.\n"; print STDOUT " FrontPage 98: tools->Web Settings->Source Control Project\n"; print STDOUT " FrontPage 2000: ClearCase->Add Web to Version Control\n"; print STDOUT " OSE Snapin: start->Programs->Microsoft Office Server Extensions->Server Extensions Administrator\n"; print STDOUT " -> action->properties->server extensions->version control->use external->OK->apply"); print LOGFILE "\nit is also possible to add through InterDev, data converters, or by hand.\n"; } } close(SERVICES); $etime = time(); $ltime = localtime($etime); $ticks = $etime - $time; print(LOGFILE "\n\n%ATRIAHOME%\\bin\\iisfix.bat completed at $ltime, elapsed seconds: $ticks\n"); print(STDOUT "\n\n%ATRIAHOME%\\bin\\iisfix.bat completed at $ltime, elapsed seconds: $ticks\n\n\n"); print(LOGFILE "\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n"); __END__ :endofperl