home *** CD-ROM | disk | FTP | other *** search
/ Internet Magazine 2003 October / INTERNET108.ISO / pc / software / windows / utils / tiny_firewall / tpf5.exe / Tiny Personal Firewall 5.0.msi / ws_misc.js < prev    next >
Encoding:
JavaScript  |  2003-07-01  |  31.0 KB  |  1,206 lines

  1. //ws_misc.js
  2. var    ERR_GET_MODULE_PARSER = "Error: Cannot get Parser object for Sandbox",
  3.     ERR_GET_RULELIST = "Error: Cannot get rule list from parser",
  4.     THIS_DIV = "misc",
  5.     HTML_THIS_DIV_HEADER = '<DIV id=' + THIS_DIV + '>',
  6.     HTML_THIS_DIV_TRAILER = "</DIV>",
  7.      HTML_TABLE_HEADER = '<table border="1" align="center" bgcolor="#D7DDF2">',
  8.     HTML_TABLE_TRAILER = "</table>",
  9.     HTML_TABLE_LABEL_HEADER1 = "<table width=100% border=0 cellspacing=0 cellpadding=0><tr bgcolor=",
  10.     HTML_TABLE_LABEL_HEADER2 = "><td height=25 align=middle><font color=white><B>",
  11.     HTML_TABLE_LABEL_TRAILER = "</B></font></td></tr></table>",
  12.     HTML_TABLES_SEPARATOR = "<BR/><BR/>"
  13.     HTML_ROW_HEADER = "<TR>",
  14.     HTML_ROW_TRAILER = "</TR>",
  15.     HTML_HEADER_HEADER = '<TH style="font-face:bold;font-size:8pt;">',
  16.     HTML_HEADER_TRAILER = "</TH>",
  17.     HTML_CELL_HEADER = "<TD align=center>",
  18.     HTML_CELL_TRAILER = "</TD>",
  19.     HTML_ID_EDIT_HEADER = '<INPUT type=edit size=3 ',
  20.     HTML_ID_EDIT_TRAILER = '></INPUT>',
  21.     HTML_ID_LINK_HEADER = '<A href=# onclick=',
  22.     HTML_ID_LINK_TRAILER = '</A>',
  23.     HTML_INSERT_RULE = '<IMG src="ico-plus.gif" align=absMiddle alt = "Insert rule"/>  Insert rule',
  24.     HTML_ICO_MINUS = '<IMG src="ico-minus.gif" alt="Delete rule"/>',
  25.     HTML_SELECT_HEADER = '<SELECT ',
  26.     HTML_SELECT_TRAILER = '></SELECT>',
  27.     HTML_OPTION_HEADER = '<OPTION value="',
  28.     HTML_OPTION_TRAILER = '</OPTION>';
  29.  
  30.  
  31. var    NO_COLUMNS = 10;
  32.  
  33. var    TXT_PRO_HIGH_MASTER = "High Priority List - Common rules",
  34.     TXT_CLIENT = "Medium Priority List - Non-Privileged User Defined",
  35.     TXT_PRO_LOW_MASTER = "Low Priority List - Common rules",
  36.     TXT_DELETING = "Deleting rule",
  37.     TXT_QST_REALLYDELETE1 = 'Do you really want to delete ',
  38.     TXT_QST_REALLYDELETE2 = ' from the list of rules?',
  39.     TXT_NEW_EXC_APP = 'Enter app./group',
  40.     
  41. // columns
  42.     TXT_ID_CAPTION = "Rule #",
  43.     TXT_APP_CAPTION = "Application to trigger the rule",
  44.     TXT_VBA_MACR = "VBA Macro",
  45.     TXT_VBA_AUTO = "VBA Auto Macro",
  46.     TXT_SYS_FPTT = "Forced proc./thread term.",
  47.     TXT_SYS_SSHD = "System shutdown",
  48.     TXT_SYS_SLLA = "System low level api",
  49.     TXT_SYS_CBAC = "Clipboard access",
  50.     TXT_DEV_DANG = "Dangerous device access",
  51.     TXT_ASGNMT = "Assignment";
  52.  
  53. var    arrAccessResultStrings = new Array("Prevent", "Allow", "Ask User");
  54. var    arrAuditLevelStrings = new Array("Ignore", "Monitor", "Alert");
  55. var    arrVBAOptions = new Array("Inherit from parent", "Use custom VBA settings",
  56.                     "Do not run macro");
  57. var    arrGuardIds = new Array('V'.charCodeAt(0), 'Y'.charCodeAt(0), 'G'.charCodeAt(0));
  58.  
  59. var    AR_ALLOW = 0x0001,
  60.     AR_PREVENT = 0x0000,
  61.     AR_ASKUSER = 0x0002;
  62.  
  63. var    AL_IGNORE = 0x0000,
  64.     AL_MONITOR = 0x0001,
  65.     AL_ALERT = 0x0002;
  66.  
  67. var    OT_VBAMACRO =     0x00000020,
  68.     OT_SYSTEMPRIV =    0x00000080,
  69.     OT_DEVICEPRIV =    0x00000100;
  70.  
  71. var     PRIOR_LOW = 0,
  72.     PRIOR_NORMAL = 1,
  73.     PRIOR_HIGH = 2;
  74.  
  75. var    RT_DIRECT    = 0,
  76.     RT_DEFINITION    = RT_DIRECT + 1;
  77.  
  78. var    AT_VBA_MACRO_RUN_IN_ORIG = 0x00000001,
  79.     AT_VBA_MACRO_RUN_IN_SPECIAL = 0x00000002,
  80.     AT_VBA_AUTO_RUN_IN_ORIG = 0x00000004,
  81.     AT_VBA_AUTO_RUN_IN_SPECIAL = 0x00000008,
  82.     AT_VBA_FULL = 0x00000005,
  83.  
  84.     AT_SYSPRIV_FORCED_PROC_THREAD_TERM = 0x00002000,
  85.     AT_SYSPRIV_SYSTEMSHUTDOWN = 0x00000100,
  86.     AT_SYSPRIV_SYSTEMLOWLEVELAPI = 0x00001000,
  87.     AT_SYSPRIV_CLIPBOARDACCESS = 0x00004000,
  88.     AT_SYSPRIV_ALL = 0x00007100,
  89.  
  90.     AT_DEVPRIV_DANGEROUSDEVICEACCESS = 0x00000002;
  91.  
  92.  
  93. var    VbaAccessTypes = new Array(4);
  94. VbaAccessTypes[0] = AT_VBA_MACRO_RUN_IN_ORIG;
  95. VbaAccessTypes[1] = AT_VBA_MACRO_RUN_IN_SPECIAL;
  96. VbaAccessTypes[2] = AT_VBA_AUTO_RUN_IN_ORIG;
  97. VbaAccessTypes[3] = AT_VBA_AUTO_RUN_IN_SPECIAL;
  98.  
  99. var    SysprivAccessTypes = new Array(4);
  100. SysprivAccessTypes[0] = AT_SYSPRIV_FORCED_PROC_THREAD_TERM;
  101. SysprivAccessTypes[1] = AT_SYSPRIV_SYSTEMSHUTDOWN;
  102. SysprivAccessTypes[2] = AT_SYSPRIV_SYSTEMLOWLEVELAPI;
  103. SysprivAccessTypes[3] = AT_SYSPRIV_CLIPBOARDACCESS;
  104.  
  105. var strHeaders = new Array(NO_COLUMNS);
  106. strHeaders[0] = TXT_ID_CAPTION;
  107. strHeaders[1] = TXT_APP_CAPTION;
  108. strHeaders[2] = TXT_VBA_MACR;
  109. strHeaders[3] = TXT_VBA_AUTO;
  110. strHeaders[4] = TXT_SYS_FPTT;
  111. strHeaders[5] = TXT_SYS_SSHD;
  112. strHeaders[6] = TXT_SYS_SLLA;
  113. strHeaders[7] = TXT_SYS_CBAC;
  114. strHeaders[8] = TXT_DEV_DANG;
  115. strHeaders[9] = TXT_ASGNMT;
  116.  
  117.  
  118. var     arrAllClientRules = null,    // all VBA, SysPrio, DevPrio rules from Client db
  119.     arrAllServerRules = null,        // dtto. from server db
  120.     arrRuleTriples;            // rule triples from both dbs grouped by app/group 
  121.  
  122. var ServerParser = null, ClientParser = null, ServerAppParser = null, ClientAppParser = null, ClientRuleList = null, 
  123.     ServerRuleList = null;
  124.  
  125. var     firstLabel = new Array(),
  126.     arrLabelTypes = new Array();
  127.  
  128. var iMaxServerId = 0, iMaxClientId = 0;
  129.  
  130. var iContext = 0;
  131. var ctrlAsgnmt = null;  
  132. var strAsgnmt = "";
  133.  
  134. function SetAssignment(str)
  135. {
  136.     strAsgnmt = str;
  137.     try
  138.     {
  139.         if (window.external.Context == 1)
  140.         {
  141.             ctrlAsgnmt = new ActiveXObject("cfgasgnmt.cfgasgnmtCtrl");
  142.             ctrlAsgnmt.SetAssignment(str);
  143.         }
  144.     } catch (e)
  145.     {
  146.         // this is home edition - ctrlAsgnmt does not exist
  147.     }
  148.     _ruleList.innerHTML = GetRuleList();
  149. }
  150.  
  151. function RuleTriple(r1, r2, r3)
  152. {
  153.     this[0] = r1;
  154.     this[1] = r2;
  155.     this[2] = r3;
  156. }
  157.  
  158. function LoadAllRules(ruleList, arrRulesToStore)
  159. {
  160.     var i, j, maxId = 0;
  161.     ruleListEnum = new Enumerator(ruleList);
  162.     ruleListEnum.moveFirst();
  163.     j = arrRulesToStore.length;
  164.        while (!ruleListEnum.atEnd())
  165.        {
  166.         //add option to array
  167.         var rule = ruleListEnum.item();
  168.  
  169.         var id;
  170.         var curOT = rule.ObjectType;
  171.         if (curOT == OT_VBAMACRO || curOT == OT_SYSTEMPRIV || curOT == OT_DEVICEPRIV)
  172.         {
  173.             id = GetRuleID(rule);
  174.             if (id > maxId)
  175.                 maxId = id;
  176.  
  177. // find 'full' access type, convert it into specific access types
  178.             var adList = rule.AccessDescriptorList;
  179.             var adEnum = new Enumerator(adList);
  180.             adEnum.moveFirst();
  181.             var accessDescriptor = null;
  182.             if (!adEnum.atEnd())
  183.             {
  184.                 var acCur = adEnum.item();
  185.                 switch(curOT)
  186.                 {
  187.                 case OT_VBAMACRO:
  188.                     if (acCur.AccessType == AT_VBA_FULL)
  189.                     {
  190.                         adList.Clear();
  191.                         for (i = 0; i < 4; i++)
  192.                         {
  193.                             var ad = adList.CreateAccessDescriptor();
  194.                             ad.AccessType = VbaAccessTypes[i];
  195.                             ad.AccessResult = acCur.AccessResult;
  196.                             ad.AuditLevel = acCur.AuditLevel;
  197.                             adList.Insert(ad);
  198.                         }
  199.                     }
  200.                     break;
  201.                 case OT_SYSTEMPRIV:
  202.                     if (acCur.AccessType == AT_SYSPRIV_ALL)
  203.                     {
  204.                         adList.Clear();
  205.                         for (i = 0; i < 4; i++)
  206.                         {
  207.                             var ad = adList.CreateAccessDescriptor();
  208.                             ad.AccessType = SysprivAccessTypes[i];
  209.                             ad.AccessResult = acCur.AccessResult;
  210.                             ad.AuditLevel = acCur.AuditLevel;
  211.                             adList.Insert(ad);
  212.                         }
  213.                     }
  214.                     break;
  215.                 }
  216.             }
  217.  
  218.             arrRulesToStore[j++] = rule;
  219.         }
  220.           ruleListEnum.moveNext();                 //Get next rule
  221.        }
  222.     return maxId;
  223. }
  224.  
  225. function GetRuleList()
  226. {
  227.     var Option, OptList, strRules = HTML_THIS_DIV_HEADER;
  228.     iContext = window.external.Context;
  229.     
  230.     if (iContext == 0)
  231.         strAsgnmt = window.external.LoggedUser;
  232.  
  233.     try
  234.     {
  235.         ServerParser = window.external.ServerParser(1) ;
  236.         ClientParser = window.external.ClientParser(1) ;
  237.         ServerAppParser = window.external.ServerParser(64) ;
  238.         ClientAppParser = window.external.ClientParser(64) ;
  239.     } catch(e)
  240.     {
  241.         alert(ERR_GET_MODULE_PARSER);
  242.         return;
  243.     }
  244.  
  245.     try
  246.     {
  247.         if (ServerParser != null)
  248.             ServerRuleList = ServerParser.RuleList;
  249.         if (ClientParser != null)
  250.             ClientRuleList = ClientParser.RuleList;
  251.     } catch(e)
  252.     {
  253.         alert(ERR_GET_RULELIST);
  254.         return;
  255.     }
  256.  
  257.     arrAllClientRules = new Array();
  258.     arrAllServerRules = new Array();
  259.     arrRuleTriples = new Array();
  260.  
  261.     if (ClientRuleList != null)
  262.         iMaxClientId = LoadAllRules(ClientRuleList, arrAllClientRules);
  263.     if (ServerRuleList != null)
  264.         iMaxServerId = LoadAllRules(ServerRuleList, arrAllServerRules);
  265.     
  266.     iShowObjects = cmbShowObjects.options[cmbShowObjects.selectedIndex].value;
  267.     if (ServerRuleList != null && (iShowObjects == 0 || iShowObjects == 2 || iShowObjects == 3))
  268.     {
  269.         strRules = HTML_TABLE_LABEL_HEADER1 + "#01088b" + HTML_TABLE_LABEL_HEADER2 + TXT_PRO_HIGH_MASTER + HTML_TABLE_LABEL_TRAILER;
  270.         strRules += GetRuleListByPriority(arrAllServerRules, PRIOR_HIGH, "Server")
  271.                 + HTML_TABLES_SEPARATOR;
  272.     }
  273.  
  274.     if (ClientRuleList != null && (iShowObjects == 0 || iShowObjects == 1))
  275.     {
  276.         strRules += HTML_TABLE_LABEL_HEADER1 + "#7aa1e6" + HTML_TABLE_LABEL_HEADER2 + TXT_CLIENT + HTML_TABLE_LABEL_TRAILER;
  277.         strRules += GetRuleListByPriority(arrAllClientRules, PRIOR_NORMAL, "Client")
  278.             + HTML_TABLES_SEPARATOR;
  279.     }
  280.  
  281.     if (ServerRuleList != null && (iShowObjects == 0 || iShowObjects == 2 || iShowObjects == 4))
  282.     {
  283.         strRules += HTML_TABLE_LABEL_HEADER1 + "#01088b" + HTML_TABLE_LABEL_HEADER2 + TXT_PRO_LOW_MASTER + HTML_TABLE_LABEL_TRAILER;
  284.         strRules += GetRuleListByPriority(arrAllServerRules, PRIOR_LOW, "Server")
  285.     }
  286.  
  287.     strRules += HTML_THIS_DIV_TRAILER;
  288.     return strRules;
  289. }
  290.  
  291. function GetRuleListByPriority(arrAllRules, prio, ParserName)
  292. {
  293.     var strRetVal = '<table width="100%" border="0" bgcolor="#DBDBDB"><tr><td><A href="#" style="color: Black; text-decoration: none;" onclick="OnAdd(' + prio + ')">' + HTML_INSERT_RULE + '</A></td></tr></table>';
  294.     var i;
  295.  
  296.     strRetVal += HTML_TABLE_HEADER;
  297.  
  298.     strRetVal += HTML_ROW_HEADER;
  299.     for (i = 0; i < NO_COLUMNS; i++) {
  300.         strRetVal += HTML_HEADER_HEADER + strHeaders[i] + HTML_HEADER_TRAILER;
  301.     }
  302.     strRetVal += HTML_ROW_TRAILER;
  303.  
  304.     j = arrRuleTriples.length;
  305.     for (i = 0; i < arrAllRules.length; i++)
  306.     {
  307.         var rule = arrAllRules[i];
  308.         var ot = rule.ObjectType
  309.         if (!RuleTripleExists(rule) && 
  310.             (ot == OT_VBAMACRO || ot == OT_SYSTEMPRIV || ot == OT_DEVICEPRIV)
  311.             && rule.Priority == prio)
  312.         {
  313.             var ruleTriple;
  314.             switch (ot)
  315.             {
  316.             case OT_VBAMACRO:
  317.                 ruleTriple = new RuleTriple(rule, 
  318.                             GetSysPrioRule(rule, arrAllRules),
  319.                             GetDevPrioRule(rule, arrAllRules)
  320.                             );
  321.                 break;
  322.             case OT_SYSTEMPRIV:
  323.                 ruleTriple = new RuleTriple(GetVBARule(rule, arrAllRules),
  324.                             rule, 
  325.                             GetDevPrioRule(rule, arrAllRules)
  326.                             );
  327.                 break;
  328.             case OT_DEVICEPRIV:
  329.                 ruleTriple = new RuleTriple(GetVBARule(rule, arrAllRules),
  330.                             GetSysPrioRule(rule, arrAllRules),
  331.                             rule
  332.                             );
  333.                 break;
  334.             }
  335.             if (RuleTripleContainsRule(ruleTriple))
  336.             {
  337.                 arrRuleTriples[j++] = ruleTriple;
  338.                 strRetVal += GetRuleHtmlStr(ruleTriple, prio, arrRuleTriples.length - 1);
  339.             }
  340.         }
  341.        }
  342.     strRetVal += HTML_TABLE_TRAILER;
  343.     return strRetVal;
  344. }
  345.  
  346. function RuleTripleContainsRule(ruleTriple)
  347. {
  348.     var i;
  349.     for (i = 0; i < 3; i++)
  350.         if (ruleTriple[i] != null)
  351.             return 1;
  352.     return 0;
  353. }
  354.  
  355. function GetApplication(ruleTriple)
  356. {
  357.     var i;
  358.     for (i = 0; i < 3; i++)
  359.         if (ruleTriple[i] != null)
  360.             return ruleTriple[i].Application;
  361. }
  362.  
  363. function GetPriority(ruleTriple)
  364. {
  365.     var i;
  366.     for (i = 0; i < 3; i++)
  367.         if (ruleTriple[i] != null)
  368.             return ruleTriple[i].Priority;
  369. }
  370.  
  371. function GetRuleID(rule)
  372. {
  373.     return rule.RuleID & 0x0000ffff;
  374. }
  375.  
  376. function GetRuleTripleID(ruleTriple)
  377. {
  378.     var i;
  379.     for (i = 0; i < 3; i++)
  380.         if (ruleTriple[i] != null)
  381.         {
  382.             return ruleTriple[i].RuleID & 0x0000ffff;
  383.         }
  384. }
  385.  
  386. function GetAssignment(ruleTriple)
  387. {
  388.     var i;
  389.     for (i = 0; i < 3; i++)
  390.         if (ruleTriple[i] != null)
  391.         {
  392.             return ruleTriple[i].Assignment;
  393.         }
  394. }
  395.  
  396. function GetRuleHtmlStr(ruleTriple, prio, index)
  397. {
  398.     var strRule = HTML_ROW_HEADER;
  399.     if (!RuleTripleContainsRule(ruleTriple))
  400.         return "";
  401.  
  402.     var ruleAsgnmt = GetAssignment(ruleTriple);
  403.  
  404.     switch (iContext)
  405.     {
  406.     case 0:
  407.         ruleAsgnmt = ruleAsgnmt.toLowerCase( );
  408.         if (ruleAsgnmt != "*" && strAsgnmt != "All@" && 
  409.                 ruleAsgnmt.indexOf(strAsgnmt.toLowerCase( )) == -1)
  410.         {
  411.             return "";
  412.         }
  413.         break;
  414.     case 1:
  415.         if (!ctrlAsgnmt.CheckRule(ruleAsgnmt))
  416.         {
  417.             return "";
  418.         }
  419.         break;
  420.     }
  421.  
  422.     var strID = GetRuleTripleID(ruleTriple);
  423.     strRule += HTML_CELL_HEADER + strID + HTML_CELL_TRAILER;
  424.  
  425.     var strAppName = GetApplication(ruleTriple);
  426.     var i;
  427.  
  428.     if (strAppName == '')
  429.     {
  430.         ChangeApplication(ruleTriple, '*');
  431.         strRule += HTML_CELL_HEADER + 
  432.             GetLabelListHtmlStr('SELECT_' + index, '*', index) +
  433.             HTML_CELL_TRAILER;
  434.     } else
  435.     {
  436.         strRule += HTML_CELL_HEADER + HTML_ID_LINK_HEADER + 
  437.                 '\'this.outerHTML=GetLabelListHtmlStr("SELECT_' + index + 
  438.                 '","' + strAppName + '",' + index +');\'>' + 
  439.                 strAppName + HTML_ID_LINK_TRAILER + HTML_CELL_TRAILER;
  440.     }
  441.  
  442.     for (i = 0; i < 3; i++)
  443.     {
  444.         var AccessType, j;
  445.         switch (i)
  446.         {
  447.         case 0:        // VBA_macro:
  448.             strRule += 
  449.               HTML_CELL_HEADER + GenerateVBAAccessResult(ruleTriple[i], 1,
  450.               '"OnVBAAccessResultChange(' + index + ',1,parseInt(this.value),' + prio +')"');
  451.                 strRule += "<BR/>" +
  452.               GenerateVBAAuditLevel(ruleTriple[i], 1,
  453.               '"OnVBAAuditLevelChange(' + index + ',1,parseInt(this.value),' + prio +')"') + HTML_CELL_TRAILER;
  454.             strRule += 
  455.               HTML_CELL_HEADER + GenerateVBAAccessResult(ruleTriple[i], 0,
  456.               '"OnVBAAccessResultChange(' + index + ',0,parseInt(this.value),' + prio +')"');
  457.                 strRule += "<BR/>" +
  458.               GenerateVBAAuditLevel(ruleTriple[i], 0,
  459.               '"OnVBAAuditLevelChange(' + index + ',0,parseInt(this.value),' + prio +')"') + HTML_CELL_TRAILER;
  460.             break;
  461.         case 1:        // System privileges
  462.             for (j = 0; j < 4; j++)
  463.             {
  464.                 strRule += 
  465.               HTML_CELL_HEADER + GenerateAccessResult(ruleTriple[i], SysprivAccessTypes[j],
  466.               '"OnAccessResultChange(' + index + ',' + i + ',' + SysprivAccessTypes[j] + ',' + 
  467.               'parseInt(this.value),' + prio + ')"');
  468.                 strRule += "<BR/>" + 
  469.               GenerateAuditLevel(ruleTriple[i], SysprivAccessTypes[j],
  470.               '"OnAuditLevelChange(' + index + ',' + i + ',' + SysprivAccessTypes[j] + ',' + 
  471.               'parseInt(this.value),' + prio + ')"') + HTML_CELL_TRAILER;
  472.             }
  473.             break;
  474.         case 2:        // Device privilege
  475.             strRule += 
  476.               HTML_CELL_HEADER + GenerateAccessResult(ruleTriple[i], AT_DEVPRIV_DANGEROUSDEVICEACCESS, 
  477.               '"OnAccessResultChange(' + index + ',' + i + ',' + AT_DEVPRIV_DANGEROUSDEVICEACCESS + ',' + 
  478.               'parseInt(this.value),' + prio + ')"');
  479.             strRule += "<BR/>" + 
  480.               GenerateAuditLevel(ruleTriple[i], AT_DEVPRIV_DANGEROUSDEVICEACCESS, 
  481.               '"OnAuditLevelChange(' + index + ',' + i + ',' + AT_DEVPRIV_DANGEROUSDEVICEACCESS + ',' + 
  482.               'parseInt(this.value),' + prio + ')"') + HTML_CELL_TRAILER;
  483.             break;
  484.         }
  485.     }
  486.  
  487.     strRule += HTML_CELL_HEADER + HTML_ID_EDIT_HEADER + ' value="' + GetAssignment(ruleTriple) + '"' + 
  488.     ' onchange="OnAsgnmtChange(' + index + ',this.value);" ' + HTML_ID_EDIT_TRAILER + HTML_CELL_TRAILER;
  489.     strRule += HTML_CELL_HEADER + 
  490.         '<A href="#" onclick="OnDelete(' + prio + ',' + index + ')">' + HTML_ICO_MINUS + 
  491.         HTML_CELL_TRAILER;
  492.     "Delete</A>"
  493.  
  494.     strRule += HTML_ROW_TRAILER;
  495.     return strRule;
  496. }
  497.  
  498.  
  499. function RuleTripleExists(rule)
  500. {
  501.     var appRule = rule.Application;
  502.     var rulePrio = rule.Priority;
  503.     var ruleOT = rule.ObjectType;
  504.     var asgnmtRule = rule.Assignment;
  505.     var indIntoTriple;
  506.     switch (ruleOT)
  507.     {
  508.     case OT_VBAMACRO:
  509.         indIntoTriple = 0;
  510.         break;
  511.     case OT_SYSTEMPRIV:
  512.         indIntoTriple = 1;
  513.         break;
  514.     case OT_DEVICEPRIV:
  515.         indIntoTriple = 2;
  516.         break;
  517.     }
  518.     for (i = 0; i < arrRuleTriples.length; i++)
  519.     {
  520.         if (    GetPriority(arrRuleTriples[i]) == rulePrio &&
  521.             GetApplication(arrRuleTriples[i]) == appRule &&
  522.             GetAssignment(arrRuleTriples[i]) == asgnmtRule &&
  523.             arrRuleTriples[i][indIntoTriple] == rule)
  524.             return 1;
  525.     }
  526.     return 0;
  527. }
  528.  
  529.  
  530. function GetVBARule(rule, arrAllRules)
  531. {
  532.     var strApplication = rule.Application;
  533.     var ruleFound = null;
  534.     var i;
  535.  
  536.     for (i = 0; i < arrAllRules.length; i++)
  537.     {
  538.         var ruleCur = arrAllRules[i];
  539.         if (ruleCur.ObjectType == OT_VBAMACRO &&
  540.             ruleCur.Application == strApplication)
  541.         {
  542.             ruleFound = ruleCur;
  543.             break;
  544.         }
  545.     }
  546.     return ruleFound;    
  547. }
  548.  
  549. function GetSysPrioRule(rule, arrAllRules)
  550. {
  551.     var strApplication = rule.Application;
  552.     var ruleFound = null;
  553.     var i;
  554.  
  555.     for (i = 0; i < arrAllRules.length; i++)
  556.     {
  557.         var ruleCur = arrAllRules[i];
  558.         if (ruleCur.ObjectType == OT_SYSTEMPRIV &&
  559.             ruleCur.Application == strApplication)
  560.         {
  561.             ruleFound = ruleCur;
  562.             break;
  563.         }
  564.     }
  565.     return ruleFound;    
  566. }
  567.  
  568. function GetDevPrioRule(rule, arrAllRules)
  569. {
  570.     var strApplication = rule.Application;
  571.     var ruleFound = null;
  572.     var i;
  573.  
  574.     for (i = 0; i < arrAllRules.length; i++)
  575.     {
  576.         var ruleCur = arrAllRules[i];
  577.         if (ruleCur.ObjectType == OT_DEVICEPRIV &&
  578.             ruleCur.Application == strApplication)
  579.         {
  580.             ruleFound = ruleCur;
  581.             break;
  582.         }
  583.     }
  584.     return ruleFound;    
  585. }
  586.  
  587. function OnAdd(priority)
  588. {
  589.     var ruleList;
  590.     switch (priority)
  591.     {
  592.     case PRIOR_HIGH:
  593.     case PRIOR_LOW:
  594.         ruleList = ServerRuleList;
  595.         break;
  596.     case PRIOR_NORMAL:
  597.         ruleList = ClientRuleList;
  598.     }
  599.  
  600.     var newRule = ruleList.CreateRule();
  601.     switch (priority)
  602.     {
  603.     case PRIOR_HIGH:
  604.     case PRIOR_LOW:
  605.         SetRuleID(newRule, 0, ++iMaxServerId, 1);
  606.         break;
  607.     case PRIOR_NORMAL:
  608.         SetRuleID(newRule, 0, ++iMaxClientId, 0);
  609.     }
  610.     newRule.Application = '';
  611.     newRule.Priority = priority;
  612.     newRule.ObjectType = OT_VBAMACRO;
  613.     newRule.Path = "*";
  614.     newRule.PathType = RT_DEFINITION;
  615.     ruleList.Insert(newRule, newRule);
  616.     _ruleList.innerHTML = GetRuleList();
  617. }
  618.  
  619. function OnDelete(priority, index)
  620. {
  621.     var arg = new Array(2);
  622.     var i;
  623.     arg[0] = TXT_QST_REALLYDELETE1 + '"' + GetApplication(arrRuleTriples[index]) + '"' +
  624.         TXT_QST_REALLYDELETE2;
  625.     arg[1] = TXT_DELETING;
  626.     var answer=showModalDialog('question.html', arg, 'dialogWidth=300pt;dialogHeight=100pt;');
  627.     if (answer == 0)
  628.         return;
  629.  
  630.     var Parser;
  631.     switch (priority)
  632.     {
  633.     case PRIOR_HIGH:
  634.     case PRIOR_LOW:
  635.         ruleList = ServerRuleList;
  636.         break;
  637.     case PRIOR_NORMAL:
  638.         ruleList = ClientRuleList;
  639.         break;
  640.     }
  641.  
  642.     try 
  643.     {
  644.         ruleTriple = arrRuleTriples[index];
  645.         for (i = 0; i < 3; i++)
  646.             if (ruleTriple[i] != null)
  647.                 ruleList.Remove(ruleTriple[i]);
  648.     } catch (e)
  649.     {
  650.         alert("Access violation");
  651.     }
  652.     _ruleList.innerHTML = GetRuleList();
  653. }
  654.  
  655. function OnAppChange(id, index, value)
  656. {
  657.     var i;
  658.     try
  659.     {
  660.         ruleTriple = arrRuleTriples[index];
  661.         for (i = 0; i < 3; i++)
  662.         {
  663.             if (ruleTriple[i] != null)
  664.             {
  665.                 arrRuleTriples[index][i].Application = value;
  666.                 arrRuleTriples[index][i].AppType = arrLabelTypes[id.selectedIndex];
  667.             }
  668.         }
  669.     } catch (e)
  670.     {
  671.         alert("Access violation");
  672.     }
  673. }
  674.  
  675. function OnIDChange(index, value, priority)
  676. {
  677.     try
  678.     {
  679.         SetRuleTripleID(arrRuleTriples[index], parseInt(value), (priority==PRIOR_HIGH || priority==PRIOR_LOW) ? 1 : 0);
  680.     } catch (e)
  681.     {
  682.         alert("ID already exists");
  683.     }
  684. }
  685.  
  686. function OnAccessResultChange(index, subindex, accessType, value, prio)
  687. {
  688.     try
  689.     {
  690.         var rule = arrRuleTriples[index][subindex];
  691.         var adList;
  692.         if (rule == null)
  693.         {
  694.             rule = CreateRule(index, subindex, prio);
  695.         }
  696.         adList = rule.AccessDescriptorList;
  697.         var adEnum = new Enumerator(adList);
  698.         adEnum.moveFirst();
  699.         var accessDescriptor = null;
  700.         while (!adEnum.atEnd())
  701.         {
  702.             var acCur = adEnum.item();
  703.             if (acCur.AccessType == accessType)
  704.             {
  705.                 accessDescriptor = acCur;
  706.                 break;
  707.             }
  708.             adEnum.moveNext();
  709.         }
  710.         if (accessDescriptor == null)
  711.         {
  712.             accessDescriptor = adList.CreateAccessDescriptor();
  713.             accessDescriptor.AccessType = accessType;
  714.             accessDescriptor.AuditLevel = AL_IGNORE;
  715.             adList.Insert(accessDescriptor);
  716.         }
  717.         accessDescriptor.AccessResult = value;
  718.     } catch (e)
  719.     {
  720.         alert("Access violation");
  721.     }
  722. }
  723.  
  724. function OnVBAAccessResultChange(index, macroNotAuto, value, prio)
  725. {
  726.     try
  727.     {
  728.         var rule = arrRuleTriples[index][0];
  729.         if (rule == null)
  730.         {
  731.             rule = CreateRule(index, subindex, prio);
  732.         }
  733.         var adList = rule.AccessDescriptorList;
  734.         var adEnum = new Enumerator(adList);
  735.         adEnum.moveFirst();
  736.         var accessDescriptor = null, accessDescriptor2 = null;
  737.         while (!adEnum.atEnd())
  738. // find VBA access descriptors
  739.         {
  740.             var acCur = adEnum.item();
  741.             var atCur = acCur.AccessType;
  742.             if (macroNotAuto && (    atCur == AT_VBA_MACRO_RUN_IN_ORIG ||
  743.                         atCur == AT_VBA_MACRO_RUN_IN_SPECIAL)
  744.             || !macroNotAuto && (    atCur == AT_VBA_AUTO_RUN_IN_ORIG ||
  745.                         atCur == AT_VBA_AUTO_RUN_IN_SPECIAL)
  746.             )
  747.             {
  748.                 accessDescriptor = acCur;
  749.  
  750.                 switch(value)
  751.                 {
  752.                 case 0:
  753.                     acCur.AccessResult = AR_ALLOW;
  754.                     break;
  755.                 case 2:
  756.                     acCur.AccessResult = AR_PREVENT;
  757.                     break;
  758.                 case 1:
  759.                     if (    atCur == AT_VBA_MACRO_RUN_IN_ORIG ||
  760.                         atCur == AT_VBA_AUTO_RUN_IN_ORIG
  761.                        )
  762.                         acCur.AccessResult = AR_PREVENT;
  763.                     else 
  764.                         acCur.AccessResult = AR_ALLOW;
  765.                     break;
  766.                 }
  767.             }
  768.             adEnum.moveNext();
  769.         }
  770.         if (accessDescriptor == null)
  771. // access descriptors for this access type do not exist yet
  772.         {
  773.             accessDescriptor = adList.CreateAccessDescriptor();
  774.             accessDescriptor2 = adList.CreateAccessDescriptor();
  775.             accessDescriptor.AuditLevel = AL_IGNORE;
  776.             accessDescriptor2.AuditLevel = AL_IGNORE;
  777.             if (macroNotAuto)
  778.             {
  779.                 accessDescriptor.AccessType = AT_VBA_MACRO_RUN_IN_ORIG;
  780.                 accessDescriptor2.AccessType = AT_VBA_MACRO_RUN_IN_SPECIAL;
  781.             } else
  782.             {
  783.                 accessDescriptor.AccessType = AT_VBA_AUTO_RUN_IN_ORIG;
  784.                 accessDescriptor2.AccessType = AT_VBA_AUTO_RUN_IN_SPECIAL;
  785.             }
  786.             switch(value)
  787.             {
  788.             case 0:
  789.                 accessDescriptor.AccessResult = AR_ALLOW;
  790.                 accessDescriptor2.AccessResult = AR_ALLOW;
  791.                 break;
  792.             case 1:
  793.                 accessDescriptor.AccessResult = AR_PREVENT;
  794.                 accessDescriptor2.AccessResult = AR_ALLOW;
  795.                 break;
  796.             case 2:
  797.                 accessDescriptor.AccessResult = AR_PREVENT;
  798.                 accessDescriptor2.AccessResult = AR_PREVENT;
  799.                 break;
  800.             }
  801.             adList.Insert(accessDescriptor);
  802.             adList.Insert(accessDescriptor2);
  803.         }
  804.     } catch (e)
  805.     {
  806.         alert("Access violation");
  807.     }
  808. }
  809.  
  810. function OnAuditLevelChange(index, subindex, accessType, value, prio)
  811. {
  812.     try
  813.     {
  814.         var rule = arrRuleTriples[index][subindex];
  815.         if (rule == null)
  816.         {
  817.             rule = CreateRule(index, subindex, prio);
  818.         }
  819.         var adList = rule.AccessDescriptorList;
  820.         var adEnum = new Enumerator(adList);
  821.         adEnum.moveFirst();
  822.         var accessDescriptor = null;
  823.         while (!adEnum.atEnd())
  824.         {
  825.             var acCur = adEnum.item();
  826.             if (acCur.AccessType == accessType)
  827.             {
  828.                 accessDescriptor = acCur;
  829.                 break;
  830.             }
  831.             adEnum.moveNext();
  832.         }
  833.         if (accessDescriptor == null)
  834.         {
  835.             accessDescriptor = adList.CreateAccessDescriptor();
  836.             accessDescriptor.AccessType = accessType;
  837.             accessDescriptor.AccessResult = AR_ALLOW;
  838.             adList.Insert(accessDescriptor);
  839.         }
  840.         accessDescriptor.AuditLevel = value;
  841.     } catch (e)
  842.     {
  843.         alert("Access violation");
  844.     }
  845. }
  846.  
  847. function OnVBAAuditLevelChange(index, macroNotAuto, value, prio)
  848. {
  849.     try
  850.     {
  851.         var rule = arrRuleTriples[index][0];
  852.         if (rule == null)
  853.         {
  854.             rule = CreateRule(index, subindex, prio);
  855.         }
  856.         var adList = rule.AccessDescriptorList;
  857.         var adEnum = new Enumerator(adList);
  858.         adEnum.moveFirst();
  859.         var accessDescriptor = null, accessDescriptor2 = null;
  860.         while (!adEnum.atEnd())
  861. // find VBA access descriptors
  862.         {
  863.             var acCur = adEnum.item();
  864.             var atCur = acCur.AccessType;
  865.             if (macroNotAuto && (    atCur == AT_VBA_MACRO_RUN_IN_ORIG ||
  866.                         atCur == AT_VBA_MACRO_RUN_IN_SPECIAL)
  867.             || !macroNotAuto && (    atCur == AT_VBA_AUTO_RUN_IN_ORIG ||
  868.                         atCur == AT_VBA_AUTO_RUN_IN_SPECIAL)
  869.             )
  870.             {
  871.                 accessDescriptor = acCur;
  872.                 acCur.AuditLevel = value;
  873.             }
  874.             adEnum.moveNext();
  875.         }
  876.         if (accessDescriptor == null)
  877. // access descriptors for this access type do not exist yet
  878.         {
  879.             accessDescriptor = adList.CreateAccessDescriptor();
  880.             accessDescriptor2 = adList.CreateAccessDescriptor();
  881.             accessDescriptor.AccessResult = AR_ALLOW;
  882.             accessDescriptor2.AccessResult = AR_ALLOW;
  883.             accessDescriptor.AuditLevel = value;
  884.             accessDescriptor2.AuditLevel = value;
  885.  
  886.             if (macroNotAuto)
  887.             {
  888.                 accessDescriptor.AccessType = AT_VBA_MACRO_RUN_IN_ORIG;
  889.                 adList.Insert(accessDescriptor);
  890.                 accessDescriptor2.AccessType = AT_VBA_MACRO_RUN_IN_SPECIAL;
  891.                 adList.Insert(accessDescriptor2);
  892.             } else
  893.             {
  894.                 accessDescriptor.AccessType = atCur == AT_VBA_AUTO_RUN_IN_ORIG;
  895.                 adList.Insert(accessDescriptor);
  896.                 accessDescriptor2.AccessType = AT_VBA_AUTO_RUN_IN_SPECIAL;
  897.                 adList.Insert(accessDescriptor2);
  898.             }
  899.         }
  900.     } catch (e)
  901.     {
  902.         alert("Access violation");
  903.     }
  904. }
  905.  
  906. function OnAsgnmtChange(index, newVal)
  907. {
  908.     try
  909.     {
  910.         var ruleTriple = arrRuleTriples[index];
  911.         var i;
  912.         for (i = 0; i < 3; i++)
  913.             if (ruleTriple[i] != null)
  914.                 ruleTriple[i].Assignment = newVal;
  915.         _ruleList.innerHTML = GetRuleList();
  916.     } catch (e)
  917.     {
  918.         alert("Access violation");
  919.     }
  920. }
  921.  
  922. function GenerateAccessResult(rule, accessType, strOnChange)
  923. {
  924.     var strARList = HTML_SELECT_HEADER + ' onchange=' + strOnChange + '>';
  925.     var i, iCurAR;    // access result set for this rule and access type
  926.     if (rule != null)
  927.     {
  928.         var enumARDesc = new Enumerator(rule.AccessDescriptorList);
  929.  
  930. // find access descriptor for this access type
  931.         var adList = rule.AccessDescriptorList;
  932.         var adEnum = new Enumerator(adList);
  933.         adEnum.moveFirst();
  934.         var accessDescriptor = null;
  935.         while (!adEnum.atEnd())
  936.         {
  937.             var acCur = adEnum.item();
  938.             if (acCur.AccessType == accessType)
  939.             {
  940.                 accessDescriptor = acCur;
  941.                 break;
  942.             }
  943.             adEnum.moveNext();
  944.         }
  945.         if (accessDescriptor == null)
  946.             iCurAR = AR_ALLOW;
  947.         else
  948.             iCurAR = accessDescriptor.AccessResult;
  949.     } else
  950.         iCurAR = AR_ALLOW;
  951.  
  952.     for (i = AR_PREVENT; i <= AR_ASKUSER; i++)
  953.     {
  954.         strARList += '<OPTION value="' + i + '"';
  955.         if (i == iCurAR)
  956.         {
  957.             strARList += ' selected ';
  958.         }
  959.         strARList += '>' + arrAccessResultStrings[i] + '</OPTION>';
  960.     }
  961.     strARList += HTML_SELECT_TRAILER;
  962.     return strARList;
  963. }
  964.  
  965. function GenerateVBAAccessResult(rule, macroOrAuto, strOnChange)
  966. {
  967.     var strARList = HTML_SELECT_HEADER + ' onchange=' + strOnChange + '>';
  968.     var i, iCurOption;
  969.     if (rule != null)
  970.     {
  971.         var enumARDesc = new Enumerator(rule.AccessDescriptorList);
  972.  
  973. // find access descriptor for this access type
  974.         var adList = rule.AccessDescriptorList;
  975.         var adEnum = new Enumerator(adList);
  976.         adEnum.moveFirst();
  977.         var accessDescriptor = null;
  978.         iCurOption = 2;
  979.         while (!adEnum.atEnd())
  980.         {
  981.             var acCur = adEnum.item();
  982.             var atCur = acCur.AccessType;
  983.             if (    macroOrAuto &&     (atCur == AT_VBA_MACRO_RUN_IN_ORIG ||
  984.                         atCur == AT_VBA_MACRO_RUN_IN_SPECIAL) ||
  985.                 !macroOrAuto && (atCur == AT_VBA_AUTO_RUN_IN_ORIG ||
  986.                         atCur == AT_VBA_AUTO_RUN_IN_SPECIAL) )
  987.             {
  988.                 accessDescriptor = acCur;
  989.                 if (    atCur == AT_VBA_MACRO_RUN_IN_ORIG ||
  990.                     atCur == AT_VBA_AUTO_RUN_IN_ORIG )
  991.                 {
  992.                     if (acCur.AccessResult == AR_ALLOW)
  993.                     {
  994.                         iCurOption = 0;
  995.                         break;
  996.                     }
  997.  
  998.                 }
  999.                 if (    atCur == AT_VBA_MACRO_RUN_IN_SPECIAL ||
  1000.                     atCur == AT_VBA_AUTO_RUN_IN_SPECIAL )
  1001.                 {
  1002.                     if (acCur.AccessResult == AR_ALLOW)
  1003.                     {
  1004.                         iCurOption = 1;
  1005.                         break;
  1006.                     }
  1007.                 }
  1008.             }
  1009.             adEnum.moveNext();
  1010.         }
  1011.         if (accessDescriptor == null)
  1012.             iCurOption = 0;
  1013.     } else
  1014.         iCurOption = 0;
  1015.  
  1016.     for (i = 0; i <= 2; i++)
  1017.     {
  1018.         strARList += '<OPTION value="' + i + '"';
  1019.         if (i == iCurOption)
  1020.         {
  1021.             strARList += ' selected ';
  1022.         }
  1023.         strARList += '>' + arrVBAOptions[i] + '</OPTION>';
  1024.     }
  1025.     strARList += HTML_SELECT_TRAILER;
  1026.     return strARList;
  1027. }
  1028.  
  1029. function GenerateAuditLevel(rule, accessType, strOnChange)
  1030. {
  1031.     var strALList = HTML_SELECT_HEADER + ' onchange=' + strOnChange + '>';
  1032.     var i, iCurAL;    // access result set for this rule and access type
  1033.     if (rule != null)
  1034.     {
  1035.         var enumARDesc = new Enumerator(rule.AccessDescriptorList);
  1036.  
  1037. // find access descriptor for this access type
  1038.         var adList = rule.AccessDescriptorList;
  1039.         var adEnum = new Enumerator(adList);
  1040.         adEnum.moveFirst();
  1041.         var accessDescriptor = null;
  1042.         while (!adEnum.atEnd())
  1043.         {
  1044.             var acCur = adEnum.item();
  1045.             if (acCur.AccessType == accessType)
  1046.             {
  1047.                 accessDescriptor = acCur;
  1048.                 break;
  1049.             }
  1050.             adEnum.moveNext();
  1051.         }
  1052.         if (accessDescriptor == null)
  1053.             iCurAL = AL_IGNORE;
  1054.         else
  1055.             iCurAL = accessDescriptor.AuditLevel;
  1056.     } else
  1057.         iCurAL = AL_IGNORE;
  1058.  
  1059.     for (i = AL_IGNORE; i <= AL_ALERT; i++)
  1060.     {
  1061.         strALList += '<OPTION value="' + i + '"';
  1062.         if (i == iCurAL)
  1063.         {
  1064.             strALList += ' selected ';
  1065.         }
  1066.         strALList += '>' + arrAuditLevelStrings[i] + '</OPTION>';
  1067.     }
  1068.     strALList += HTML_SELECT_TRAILER;
  1069.     return strALList;
  1070. }
  1071.  
  1072. function GenerateVBAAuditLevel(rule, macroOrAuto, strOnChange)
  1073. {
  1074.     var strALList = HTML_SELECT_HEADER + ' onchange=' + strOnChange + '>';
  1075.     var i, iCurAL;    // access result set for this rule and access type
  1076.     if (rule != null)
  1077.     {
  1078.         var enumARDesc = new Enumerator(rule.AccessDescriptorList);
  1079.  
  1080. // find access descriptor for this access type
  1081.         var adList = rule.AccessDescriptorList;
  1082.         var adEnum = new Enumerator(adList);
  1083.         adEnum.moveFirst();
  1084.         var accessDescriptor = null;
  1085.         while (!adEnum.atEnd())
  1086.         {
  1087.             var acCur = adEnum.item();
  1088.             var atCur = acCur.AccessType;
  1089.             if (macroOrAuto &&     (acCur.AccessType == AT_VBA_MACRO_RUN_IN_ORIG ||
  1090.                         acCur.AccessType == AT_VBA_MACRO_RUN_IN_SPECIAL) ||
  1091.                 !macroOrAuto &&     (acCur.AccessType == AT_VBA_AUTO_RUN_IN_ORIG ||
  1092.                         acCur.AccessType == AT_VBA_AUTO_RUN_IN_SPECIAL) )
  1093.             {
  1094.                 accessDescriptor = acCur;
  1095.                 break;
  1096.             }
  1097.             adEnum.moveNext();
  1098.         }
  1099.         if (accessDescriptor == null)
  1100.             iCurAL = AL_IGNORE;
  1101.         else
  1102.             iCurAL = accessDescriptor.AuditLevel;
  1103.     } else
  1104.         iCurAL = AL_IGNORE;
  1105.  
  1106.     for (i = AL_IGNORE; i <= AL_MONITOR; i++)
  1107.     {
  1108.         strALList += '<OPTION value="' + i + '"';
  1109.         if (i == iCurAL)
  1110.         {
  1111.             strALList += ' selected ';
  1112.         }
  1113.         strALList += '>' + arrAuditLevelStrings[i] + '</OPTION>';
  1114.     }
  1115.     strALList += HTML_SELECT_TRAILER;
  1116.     return strALList;
  1117. }
  1118.  
  1119. function ChangeApplication(ruleTriple, appNew)
  1120. {
  1121.     var i;
  1122.     for (i = 0; i < 3; i++)
  1123.     {
  1124.         if (ruleTriple[i] != null)
  1125.             ruleTriple[i].Application = appNew;
  1126.     }
  1127. }
  1128.  
  1129. function SetRuleID(rule, type, value, bIsServer)
  1130. {
  1131.     var ruleId = value | bIsServer<<16 | arrGuardIds[type]<<24;
  1132.     rule.RuleID = ruleId;
  1133. }
  1134.  
  1135. function SetRuleIDFromTriple(subindex, ruleTriple, bIsServer)
  1136. {
  1137.     var i, id = 0;
  1138.     for (i = 0; i < 3; i++)
  1139.         if (subindex != i  &&  ruleTriple[i] != null)
  1140.         {
  1141.             id = ruleTriple[i].RuleID & 0x0000ffff;
  1142.             break;
  1143.         }
  1144.     var ruleId = id | bIsServer<<16 | arrGuardIds[subindex]<<24;
  1145.     ruleTriple[subindex].RuleID = ruleId;
  1146. }
  1147.  
  1148. function SetRuleTripleID(ruleTriple, id, bIsServer)
  1149. {
  1150.     var i;
  1151.     for (i = 0; i < 3; i++)
  1152.     {
  1153.         var ruleId = arrGuardIds[i]<<24 | bIsServer<<16 | id;
  1154.         if (ruleTriple[i] != null)
  1155.             ruleTriple[i].RuleID = ruleId;
  1156.     }
  1157. }
  1158.  
  1159. function CreateRule(index, subindex, priority)
  1160. {
  1161.     var ruleList, ruleTriple = arrRuleTriples[index];
  1162.     var strApp = "";
  1163.     var i;
  1164.     switch(priority)
  1165.     {
  1166.     case PRIOR_LOW:
  1167.     case PRIOR_HIGH:
  1168.         ruleList = ServerRuleList;
  1169.         break;
  1170.     case PRIOR_NORMAL:
  1171.         ruleList = ClientRuleList;
  1172.         break;
  1173.     }
  1174.  
  1175.     for (i = 0; i < 3; i++)
  1176.         if (ruleTriple[i] != null)
  1177.             strApp = ruleTriple[i].Application;
  1178.     var ruleNew = ruleList.CreateRule();
  1179.     ruleNew.Application = strApp;
  1180.     switch (subindex)
  1181.     {
  1182.     case 0:
  1183.         ruleNew.ObjectType = OT_VBAMACRO;
  1184.         break;
  1185.     case 1:
  1186.         ruleNew.ObjectType = OT_SYSTEMPRIV;
  1187.         break;
  1188.     case 2:
  1189.         ruleNew.ObjectType = OT_DEVICEPRIV;
  1190.         break;
  1191.     }
  1192.     ruleNew.Priority = priority;
  1193.     ruleNew.Path = "*";
  1194.     ruleNew.PathType = RT_DEFINITION;
  1195.     ruleList.Insert(ruleNew, ruleNew);
  1196.     ruleTriple[subindex] = ruleNew;
  1197.     SetRuleIDFromTriple(subindex, ruleTriple, (priority == PRIOR_HIGH || priority == PRIOR_LOW) ? 1 : 0);
  1198.     return ruleNew;
  1199. }
  1200.  
  1201. function AddToAssignment()
  1202. {
  1203.     ctrlAsgnmt.AddFromSBXList(OT_VBAMACRO, ClientParser, ServerParser, ClientAppParser, ServerAppParser );
  1204.     _ruleList.innerHTML = GetRuleList();
  1205. }
  1206.