Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

806 lines
19 KiB

<%@ LANGUAGE = VBScript %>
<% 'Option Explicit %>
<!-- #include file="directives.inc" -->
<%
' This script is the main container for the admin..
' It holds the client-cached tree list, stored in cachedList
' in addition to a variety of global functions & customization
' flags. This script gets loaded once for the admin and is
' persistant throughout.
'$
Const STR_SUPPORT_MULTI_SELECT = "hasDHTML"
%>
<!--#include file="iihd.str"-->
<!--#include file="iisetfnt.inc"-->
<!--#include file="iiaspstr.inc"-->
<html>
<head>
<title><%= L_ISM_TEXT %></title>
<script language="JavaScript">
// Create an instance of our Global Variables for reference by other frames...
Global=new globalVars();
// Create the nodeList array
nodeList=new Array();
nodeList[0]="";
<!--#include file="iijsfuncs.inc"-->
function unload_popwindow()
{
if(Global.popwindow != null)
Global.popwindow.close();
}
function helpBox()
{
if (Global.helpFileName==null)
{
alert("<%= L_NOHELP_ERRORMESSAGE %>");
}
else
{
helpfile = Global.helpDir + Global.helpFileName+".htm";
thefile="iihelp.asp?pg=" + helpfile;
<% if Session("hasDHTML") then %>
window.showHelp("http://" + helpfile);
<% else %>
window.open(thefile ,"Help","toolbar=no,scrollbars=yes,directories=no,menubar=yes,width=375,height=500");
<% end if %>
}
}
function aboutBox() {
popbox=window.open("iiabout.asp","about","toolbar=no,scrollbars=yes,directories=no,menubar=no,width="+525+",height="+300);
if(popbox !=null){
if (popbox.opener==null){
popbox.opener=self;
}
}
}
function globalVars(){
// Sets the global variables for the script.
// These may be changed to quickly customize the tree's apperance
// Fonts
this.face="Helv,Arial";
this.fSize=1;
// Spacing
this.vSpace=2;
this.hSpace=4;
this.tblWidth=500;
this.selTColor="#FFCC00";
this.selFColor="#000000";
this.selUColor="<%= Session("BGCOLOR") %>";
// Images
this.imagedir="images/";
this.appIcon = "app";
this.spaceImg=this.imagedir + "space.gif";
this.lineImg=this.imagedir + "line.gif";
this.plusImg=this.imagedir + "plus.gif";
this.minusImg=this.imagedir + "minus.gif";
this.emptyImg=this.imagedir + "blank.gif";
this.plusImgLast=this.imagedir + "plusl.gif";
this.minusImgLast=this.imagedir + "minusl.gif";
this.emptyImgLast=this.imagedir + "blankl.gif";
this.stateImg=new Array();
this.stateImg[0]=this.imagedir + "stop.gif";
this.stateImg[1]=this.imagedir + "go.gif";
this.stateImg[2]=this.imagedir + "pause.gif";
// Instant State
this.displaystate=new Array();
this.displaystate[0]="";
this.displaystate[2]="";
this.displaystate[4]="<%= L_STOPPEDDISP_TEXT %>";
this.displaystate[6]="<%= L_PAUSEDDISP_TEXT %>";
this.state=new Array();
this.state[4]="<%= L_STOPPED_TEXT %>";
this.state[2]="<%= L_STARTED_TEXT %>";
this.state[1]="<%= L_STARTING_TEXT %>";
this.state[3]="<%= L_STOPPING_TEXT %>";
// ID of selected item
this.selId=0;
this.selName="";
this.selSType="";
this.selVType="";
//$ Multi-select
this.selCount = 1;
<% if Session(STR_SUPPORT_MULTI_SELECT) then %>
this.bSupportMultiSelect = true;
this.selList = new Array();
this.selList[0] = 0;
<% else %>
this.bSupportMultiSelect = false;
<% end if %>
//Help
this.helpFileName="iipxmain.htm";
this.helpDir="<%= Request.ServerVariables("SERVER_NAME") %>/iishelp/iis/htm/core/"
// Other Flags
this.showState=false;
this.dontAsk=false;
this.updated=false;
this.homeurl=top.location.href;
this.siteProperties = false;
this.working = false;
//Global var to hold the window object, so we can refer to the current window from a parent frame.
this.popwindow = null;
}
function nodeListInterfaceDef()
{
this.selectItem = selectItem;
<% if Session(STR_SUPPORT_MULTI_SELECT) then %>
this.selectMulti = selectMulti;
<% end if %>
}
var nodeListInterface = new nodeListInterfaceDef();
<% if Session(STR_SUPPORT_MULTI_SELECT) then %>
function selectMulti( index )
{
if( nodeList[index].selected == true )
{
selectRemove( index );
}
else
{
selectAdd( index );
}
Global.selId = Global.selList[0];
}
function selectAdd( index )
{
nodeList[index].selected = true;
Global.selList[Global.selCount++] = index;
}
function selectRemove( index )
{
if( Global.selCount > 0 )
{
var i, j;
for( i = 0; i < Global.selCount; i++ )
{
if( Global.selList[i] == index )
{
break;
}
}
if( i < Global.selCount )
{
nodeList[Global.selList[i]].selected = false;
for( j = i + 1; j < Global.selCount; j++ )
{
Global.selList[j-1] = Global.selList[j];
}
Global.selCount--;
}
}
}
function selectItem( item )
{
// Deselect all currently selected items
for( var i = 0; i < Global.selCount; i++ )
{
nodeList[Global.selList[i]].selected = false;
}
// Select the new item
nodeList[item].selected = true;
Global.selId = Global.selList[0] = item;
Global.selCount = 1;
}
<% else %>
function selectItem(item)
{
nodeList[Global.selId].selected=false;
Global.selId=item;
nodeList[item].selected=true;
}
<% end if %>
function openLocation(){
//opens the property sheet for the selected node,
//regardless of service type or node type. this
//script calls iiset.asp which sets the appropriate
//session variables for server side persistance throughout
//the property sheet
var path;
var sel=Global.selId;
Global.selName=nodeList[sel].title;
Global.selSType=nodeList[sel].stype;
Global.selVType=nodeList[sel].vtype;
top.body.iisstatus.location.href=("iistat.asp?thisState=Loading");
path="stype=" + Global.selSType;
path=path + "&vtype=" + Global.selVType;
path=path + "&title=" +escape(nodeList[sel].title);
if (nodeList[sel].vtype=="server"){
path=path + "&spath=" + escape(nodeList[sel].path);
path=path + "&dpath=" + escape(nodeList[sel].path) + "/Root";
}
else{
path=path + "&spath=";
path=path + "&dpath=" + escape(nodeList[sel].path);
}
page="iiset.asp?"+path;
//iiset.asp sets the serverside session variables...
top.connect.location.href=(page);
}
function sortOrder(a,b){
x=a.id - b.id
return x
}
function sortList(){
nodeList.sort(sortOrder);
}
function insertNode(title,caption,parent,vtype,stype, fIsApp){
//add a new node to the client-cached list
var nodepath;
var indexnum=nodeList.length;
var Nextid=parent+1;
// Clear the current selection before we start monkeying with
// the list.
selectItem( 0 );
if (nodeList[parent].vtype=="server"){
nodepath=nodeList[parent].path + "/Root/" + title;
}
else{
if (nodeList[parent].vtype=="comp"){
if (stype == "www"){
nodepath=nodeList[parent].path + "/W3SVC/" + title;
}
else{
nodepath=nodeList[parent].path + "/MSFTPSVC/" + title;
}
}
else{
nodepath=nodeList[parent].path + "/" + title;
}
}
title=title;
while ((nodeList.length > Nextid) && (nodeList[Nextid].parent >=parent)) {
if(nodeList[Nextid].parent==parent){
if(nodeList[Nextid].title > title){
break;
}
}
Nextid=Nextid +1;
}
if (nodeList.length <=Nextid){
var newid=nodeList.length;
}
else{
var newid=nodeList[Nextid].id;
}
nodeList[indexnum]=nodeList[parent].addNode(new listObj(indexnum,caption,nodepath,vtype,4));
nodeList[indexnum].isCached=false;
nodeList[indexnum].id=newid;
if( fIsApp != 0 )
{
nodeList[indexnum].icon = Global.imagedir + "app";
nodeList[indexnum].isApp = true;
}
for (var i=newid; i < indexnum; i++) {
nodeList[i].id=nodeList[i].id + 1;
if (nodeList[i].parent >=nodeList[indexnum].id){
nodeList[i].parent=nodeList[i].parent +1;
}
}
nodeList[parent].open=true;
nodeList[0].sortList();
nodeList[0].markTerms();
selectItem(newid);
top.body.list.location.href="iisrvls.asp";
}
function browseItem() {
popBox('Browse',640,480, nodeList[Global.selId].loc);
}
function deleteItem() {
// marks items in the client cached list as deleted...
nodeList[Global.selId].deleted=true;
if (Global.selId+1 !=listLength){
deleteChildren(Global.selId);
}
markTerms();
top.body.list.location="iisrvls.asp";
}
function deleteChildren(item){
var z=item+1;
while (nodeList[z].parent >=item) {
nodeList[z].deleted=true;
z=z+1;
if(z >=nodeList.length){
break;
}
}
}
function deCache(){
//marks a node as uncached (forcing a recache when expanded)
//and marks all child nodes as deleted
sel=Global.selId;
nodeList[sel].isCached=false;
nodeList[sel].open=false;
if (sel+1 !=listLength){
deleteChildren(sel);
}
markTerms();
}
function markTerms(){
//marks cached list items as being a terminater (ie, having no siblings)
//this forces an "end" gif in the tree view...
var i
listLength=nodeList.length;
for (i=0; i < listLength; i++) {
nodeList[i].lastChild=isLast(i);
}
}
function isLast(item){
var i;
last=false;
if (item+1==listLength){
last=true;
}
else{
if (nodeList[item].parent==null){
last=true;
for (i=item+1; i < listLength; i++) {
if (nodeList[i].parent==null){
last=false;
break;
}
}
}
else{
last=true;
var y=item+1;
while(nodeList[y].parent >=nodeList[item].parent){
if(nodeList[y].parent==nodeList[item].parent){
if(!nodeList[y].deleted){
last=false;
break;
}
}
y=y+1;
if ((y)==listLength){
break;
}
}
}
}
return last;
}
function addNode(childNode){
//adds a new node to the tree, setting some default parameters
childNode.parent=this.id;
childNode.level=this.level +1;
dir="images/"
if (childNode.vtype=="vdir"){
childNode.loc=nodeList[this.id].loc + childNode.title+"/";
childNode.icon=dir+ "vdir";
}
else{
if (childNode.vtype=="dir"){
childNode.loc=nodeList[this.id].loc + childNode.title+"/";
childNode.icon=dir + "dir";
}
else{
if (childNode.stype=="www"){
childNode.loc="http://"+childNode.title+"/";
childNode.icon=dir +"www";
}
if (childNode.stype=="ftp"){
childNode.loc="ftp://"+childNode.title+"/";
childNode.icon=dir +"ftp";
}
}
}
return childNode;
}
function connect(){
serverurl=prompt("Please enter the URL of the server you wish to connect to:", "http://<%= Request.ServerVariables("SERVER_NAME") %>/iisadmin/")
if (serverurl !=""){
page="iicnct.asp";
top.body.iisstatus.location="iistat.asp?thisState=Loading";
top.connect.location=page;
}
}
function cache(item){
// perftest
// The two lines below call different tree caching scripts. To change between them
// simply uncomment one and comment out the other.
// page="iicache.asp?sname="+escape(nodeList[item].path)+"&Nextid="+nodeList.length+"&currentid="+item;
page="iicache2.asp?sname=" + escape(nodeList[item].path) + "&fspath=" + escape(nodeList[item].fspath);
<% if (browser<>"ns") then %>
top.body.iisstatus.location.href="iistat.asp?thisState=Loading";
<% end if %>
top.connect.location.href=page;
}
function loadPage(){
top.body.location.href='iibody.asp';
}
function inheritenceItem(property, path){
this.property = property;
this.path = path;
}
function iListsortOrder(a,b){
x=((a.property + a.path) - (b.property + b.path));
return x
}
function listObj(id, title, path,vtype,state){
// This is the object that represents each line item
// In the tree structure.
// ID is the id refered to by the parent property
// title is the text string that appears In the list
// parent is the ID of the parent list item
// level is the depth of the list item, 0 being the furthest left on the tree
// href is the location to open when selected
// open is a flag that determines whether children are displayed
// state is a flag to determine the state (4=stopped, 2=running)
// selected is an interenal flag
// openLocation is the function that opens the href file In a frame
//sortby will change to reflect the new sort order when a new item is added to the list.
this.id=id;
this.title=title;
this.path=path;
this.keytype="";
this.fspath="";
this.err="";
this.stype="";
if (path.indexOf("W3SVC") !=-1){
this.stype="www";
}
if (path.indexOf("FTPSVC") !=-1){
this.stype="ftp";
}
this.vtype=vtype;
this.open=false;
this.state=state;
this.displaystate = Global.displaystate[state];
this.isApp = false;
this.isCached=false;
this.isWorkingServer=false;
this.parent=null;
this.level=1;
this.loc="http://"+this.title;
dir="images/";
this.icon=dir +"comp";
this.href="blank.htm";
this.deleted=false;
this.selected=false;
this.lastChild=false;
//methods
this.openLocation=openLocation;
this.addNode=addNode;
this.insertNode=insertNode;
this.deleteItem=deleteItem;
this.deCache=deCache;
this.browseItem=browseItem;
this.markTerms=markTerms;
this.cache=cache;
this.connect=connect;
this.sortList=sortList;
this.restricted ="";
}
// Create a blank array for our set data path inheritence list
inheritenceList = new Array();
// Fill the nodeList array with objects.
// The array items will be displayed In the id # order,
// as Jscript has limited array sorting capabilities.
// Children should always follow their parent item.
<%
On Error Resume Next
Dim newid, computer, thisinstance, currentADsObj, FileSystem
Dim thisname
computer="localhost"
thisinstance=Request.ServerVariables("INSTANCE_ID")
if Session("isAdmin") then
%>
//the localhost
nodeList[0]=new listObj(0,"<%= Request.ServerVariables("SERVER_NAME") %>","IIS://<%= computer %>", "comp",1);
nodeList[0].isCached=true;
nodeList[0].open=true;
nodeList[0].selected=true;
<%
newid=1
%>//FTPSVC<%
Set currentADsObj=GetObject("IIS://" & computer & "/MSFTPSVC")
addInstances currentADsObj,0,"server"
%>//W3SVC<%
Set currentADsObj=GetObject("IIS://" & computer & "/W3SVC")
addInstances currentADsObj,0,"server"
else
Set FileSystem=CreateObject("Scripting.FileSystemObject")
Set currentADsObj=GetObject("IIS://" & computer & "/W3SVC/" & thisInstance)
thisname=currentADsObj.ServerComment
if thisname="" then
thisname="[Web Site #" & currentADsObj.Name & "]"
end if
%>
//the instance
nodeList[0]=new listObj(0,"<%= thisname %>","IIS://<%= computer %>/W3SVC/<%= thisinstance %>", "server",2);
nodeList[0].isWorkingServer=false;
nodeList[0].isCached=true;
nodeList[0].open=true;
nodeList[0].icon="images/www";
nodeList[0].loc="http://<%= Request.ServerVariables("SERVER_NAME") %>/";
<%
newid=1
addNodes currentADsObj,0,"vdir"
end if
Sub addInstances(Container, parentid, vtype)
On Error Resume Next
Dim thisname, Child, thisid, thisstate
For Each Child In Container
if Instr(Child.KeyType,"Server") <> 0 then
thisid=newid
thisname=Child.Name
thisstate=""
thisname=Child.ServerComment
if thisname="" then
if Instr(Child.KeyType,"Ftp") <> 0 then
thisname="[FTP Site #" & Child.Name & "]"
else
thisname="[Web Site #" & Child.Name & "]"
end if
end if
thisstate=Child.ServerState
if err=0 then
SetJscriptObj thisname, Child.ADsPath,parentid, vtype, thisstate, false, "",False
if Child.Name=Request.ServerVariables("INSTANCE_ID") then
if InStr(Child.ADsPath,"W3SVC") then
SetWorkingInstance thisid
end if
end if
if Child.ClusterEnabled then
%>
nodeList[<%= thisid %>].restricted="<%= L_CLUSTERSERVERUI_TEXT %>";
<%
end if
else
if err = &H800401E4 or err = 70 then
Response.Status = "401 access denied"
end if
end if
end if
'this child may have err'd but we need to enum the rest anyway, so we clear our error...
err.Clear
Next
End Sub
Sub addNodes(Container, parentid, vtype)
On Error Resume Next
Dim thisname, isApp, thisid, thisstate, thisroot, approot
For Each Child In Container
if Instr(Child.KeyType, "VirtualDir") <> 0 then
thisid=newid
thisname=Child.Name
thisstate=2
isApp = False
approot=LCase(Child.AppRoot)
if len(approot) <> 0 then
thisroot = LCase(Child.ADsPath)
approot = Mid(approot,Instr(approot,"w3svc/")+1)
thisroot = Mid(thisroot,Instr(thisroot,"w3svc/")+1) & "/"
if thisroot=approot then
isApp = True
end if
end if
if UCase(thisname) <> "ROOT" then
SetJscriptObj thisname, Child.ADsPath, parentid, vtype, thisstate, true, Child.Path, isApp
addNodes Child, thisid, "vdir"
'addDirs Child.Path, Child.ADsPath, thisid, "dir"
else
addNodes Child, parentid, "vdir"
'addDirs Child.Path, Child.ADsPath, parentid, "dir"
end if
end if
Next
End Sub
Sub addDirs(path, adspath, parentid, vtype)
On Error Resume Next
Dim thisid,thisname,thisstate,i,f, thispath
if Instr(UCase(adspath),"W3SVC") <> 0 then
if path <> "" then
if Left(path,2) <> "\\" then
If FileSystem.FolderExists(path) Then
Set f=FileSystem.GetFolder(path)
For Each i In f.SubFolders
thisid=newid
thisstate=2
thispath=adspath & "/" & i.Name
SetJscriptObj i.Name,thispath, parentid, vtype, thisstate, true,i, false
if err=0 then
addDirs i, thispath, thisid, "dir"
end if
Next
End If
end if
end if
end if
End Sub
Sub SetJscriptObj(caption, path, parentid, vtype,state, cached,fspath,isApp)
%>
nodeList[<%= newid %>]=nodeList[<%= parentid %>].addNode(new top.title.listObj(<%= newid %>,"<%= sJSLiteral(caption) %>","<%= sJSLiteral(path) %>","<%= vtype %>",<%= state %>));
<% if cached then %>
nodeList[<%= newid %>].isCached=true;
<% else %>
nodeList[<%= newid %>].isCached=false;
<% end if %>
<% if isApp then %>
nodeList[<%= newid %>].icon = Global.imagedir + "app";
nodeList[<%= newid %>].isApp = true;
<% end if %>
nodeList[<%= newid %>].fspath="<%= replace(fspath,"\","\\") %>";
<%
newid=newid +1
End Sub
Sub SetWorkingInstance(thisid)
%>
nodeList[<%= thisid %>].isWorkingServer=true;
<%
End Sub
%>
markTerms();
</script>
</head>
<body Background="images/cube.gif" text="#FFFFFF" topmargin="0" leftmargin="0" onload="loadPage();" onunload="unload_popwindow();">
<table width="100%" cellpadding="0" cellspacing="0" border="0" align="LEFT">
<tr>
<td>
<IMG SRC="images/Ismhd.gif" WIDTH=189 HEIGHT=19 BORDER=0 alt="<%= L_ISM_TEXT %>" HSPACE=0 VSPACE=0>
</td>
<td align="right" valign="middle">
<%= sFont("","","#FFFFFF",True) %>
<a href="http://<%= Request.ServerVariables("SERVER_NAME") %>/iishelp/iis/misc/default.asp" target="window">
<IMG SRC="images/Doc.gif" WIDTH=16 HEIGHT=16 BORDER=0 ALT="<%= L_DOCS_TEXT %>">
</A>
&nbsp;
<a href="javascript:helpBox();">
<IMG SRC="images/help.gif" WIDTH=16 HEIGHT=16 BORDER=0 ALT="<%= L_HELP_TEXT %>">
</A>
</FONT>
</td>
</tr>
</table>
<form name="hiddenform">
<input type="hidden" name="slash" value="\">
</form>
</body>
</html>