home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1999 April / PCO0499.ISO / browser / ns405lyc / nav40.z / java40.jar / netscape / security / PrivilegeManager.class (.txt) < prev    next >
Encoding:
Java Class File  |  1998-03-24  |  17.8 KB  |  1,281 lines

  1. package netscape.security;
  2.  
  3. import java.io.FileInputStream;
  4. import java.io.FileNotFoundException;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.io.OutputStream;
  9. import netscape.util.Archive;
  10. import netscape.util.Archiver;
  11. import netscape.util.CodingException;
  12. import netscape.util.Enumeration;
  13. import netscape.util.Hashtable;
  14. import netscape.util.Unarchiver;
  15.  
  16. public final class PrivilegeManager {
  17.    public static final int PROPER_SUBSET = -1;
  18.    public static final int EQUAL = 0;
  19.    public static final int NO_SUBSET = 1;
  20.    public static final int SIGNED_APPLET_DBNAME = 1;
  21.    public static final int TEMP_FILENAME = 2;
  22.    private Hashtable itsPrinToPrivTable = new Hashtable();
  23.    private Hashtable itsPrinToMacroTargetPrivTable = new Hashtable();
  24.    private static Principal theSystemPrincipal;
  25.    private static Principal[] theSystemPrincipalAry;
  26.    private static Target theSystemTarget;
  27.    private static boolean theSecurityInited;
  28.    private static Principal theUnsignedPrincipal;
  29.    private static Principal[] theUnsignedPrincipalAry;
  30.    private static Principal theUnknownPrincipal;
  31.    private static Principal[] theUnknownPrincipalAry;
  32.    static Object UpdateLock = new Object();
  33.    private static String SignedAppletDBName = null;
  34.  
  35.    private static native void initClass();
  36.  
  37.    private static void init() {
  38.       try {
  39.          theSystemPrincipal = Principal.createSystemPrincipal();
  40.       } catch (IllegalArgumentException var0) {
  41.          theSystemPrincipal = new Principal(12, "52:54:45:4e:4e:45:54:49");
  42.       }
  43.  
  44.       theSystemPrincipalAry = new Principal[1];
  45.       theSystemPrincipalAry[0] = theSystemPrincipal;
  46.       theSystemTarget = Target.findTarget("SuperUser", theSystemPrincipal);
  47.       theUnsignedPrincipal = new Principal(12, "4a:52:4f:53:4b:49:4e:44");
  48.       theUnsignedPrincipalAry = new Principal[1];
  49.       theUnsignedPrincipalAry[0] = theUnsignedPrincipal;
  50.       theUnknownPrincipal = new Principal(12, "52:4f:53:4b:49:4e:44:4a");
  51.       theUnknownPrincipalAry = new Principal[1];
  52.       theUnknownPrincipalAry[0] = theUnknownPrincipal;
  53.    }
  54.  
  55.    public PrivilegeManager() {
  56.       this.itsPrinToPrivTable.put(getSystemPrincipal(), new SystemPrivilegeTable());
  57.       this.itsPrinToMacroTargetPrivTable.put(getSystemPrincipal(), new SystemPrivilegeTable());
  58.       initClass();
  59.       this.load();
  60.       if (this.isJavaSecurityDefaultTo30Enabled()) {
  61.          Target var1 = Target.findTarget("30Capabilities", getSystemPrincipal());
  62.          Privilege var2 = Privilege.findPrivilege(1, 1);
  63.          this.registerPrincipalAndSetPrivileges(theUnsignedPrincipal, var1, var2);
  64.       }
  65.  
  66.    }
  67.  
  68.    private void registerPrincipal(Principal var1) {
  69.       Hashtable var2 = this.itsPrinToPrivTable;
  70.       synchronized(var2){}
  71.  
  72.       try {
  73.          if (this.itsPrinToPrivTable.get(var1) == null) {
  74.             this.itsPrinToPrivTable.put(var1, new PrivilegeTable());
  75.          }
  76.       } catch (Throwable var8) {
  77.          throw var8;
  78.       }
  79.  
  80.       var2 = this.itsPrinToMacroTargetPrivTable;
  81.       synchronized(var2){}
  82.  
  83.       try {
  84.          if (this.itsPrinToMacroTargetPrivTable.get(var1) == null) {
  85.             this.itsPrinToMacroTargetPrivTable.put(var1, new PrivilegeTable());
  86.          }
  87.       } catch (Throwable var7) {
  88.          throw var7;
  89.       }
  90.  
  91.    }
  92.  
  93.    private void unregisterPrincipal(Principal var1) {
  94.       if (getSystemPrincipal().equals(var1)) {
  95.          throw new ForbiddenTargetException("Can not delete system principal");
  96.       } else {
  97.          Hashtable var3 = this.itsPrinToPrivTable;
  98.          synchronized(var3){}
  99.  
  100.          try {
  101.             Object var2 = this.itsPrinToPrivTable.remove(var1);
  102.             if (var2 == null) {
  103.                throw new ForbiddenTargetException("Couldn't delete principal");
  104.             }
  105.          } catch (Throwable var9) {
  106.             throw var9;
  107.          }
  108.  
  109.          var3 = this.itsPrinToMacroTargetPrivTable;
  110.          synchronized(var3){}
  111.  
  112.          try {
  113.             Object var10 = this.itsPrinToMacroTargetPrivTable.remove(var1);
  114.             if (var10 == null) {
  115.                throw new ForbiddenTargetException("Couldn't delete principal");
  116.             }
  117.          } catch (Throwable var8) {
  118.             throw var8;
  119.          }
  120.  
  121.       }
  122.    }
  123.  
  124.    private native boolean checkPrivilegeEnabled(Target[] var1, int var2, Object var3, boolean var4);
  125.  
  126.    public void checkPrivilegeEnabled(Target var1) {
  127.       Target[] var2 = new Target[]{var1};
  128.       this.checkPrivilegeEnabled(var2, 1, (Object)null, true);
  129.    }
  130.  
  131.    public void checkPrivilegeEnabled(Target var1, Object var2) {
  132.       Target[] var3 = new Target[]{var1};
  133.       this.checkPrivilegeEnabled(var3, 1, var2, true);
  134.    }
  135.  
  136.    public static void checkPrivilegeEnabled(String var0) {
  137.       PrivilegeManager var1 = getPrivilegeManager();
  138.       if (var1 == null) {
  139.          throw new ForbiddenTargetException("access to target denied");
  140.       } else {
  141.          Target[] var2 = new Target[]{Target.findTarget(var0)};
  142.          if (var2[0] == null) {
  143.             throw new ForbiddenTargetException(var0 + " target not found");
  144.          } else {
  145.             var1.checkPrivilegeEnabled(var2, 1, (Object)null, true);
  146.          }
  147.       }
  148.    }
  149.  
  150.    boolean isPrivilegeEnabled(Target var1, int var2) {
  151.       Target[] var3 = new Target[]{var1};
  152.       return this.isPrivilegeEnabled(var3, var2 + 1, (Object)null);
  153.    }
  154.  
  155.    boolean isPrivilegeEnabled(Target[] var1, int var2, Object var3) {
  156.       int var4 = var1.length;
  157.  
  158.       while(var4-- > 0) {
  159.          if (var1[var4] == null) {
  160.             throw new ForbiddenTargetException("Null target is passed.");
  161.          }
  162.       }
  163.  
  164.       return this.checkPrivilegeEnabled(var1, var2 + 1, var3, false);
  165.    }
  166.  
  167.    private static void enablePrivilegePrivate(String var0, int var1) {
  168.       PrivilegeManager var2 = getPrivilegeManager();
  169.       if (var2 == null) {
  170.          throw new ForbiddenTargetException("access to target denied");
  171.       } else {
  172.          Target var3 = Target.findTarget(var0);
  173.          if (var3 == null) {
  174.             throw new ForbiddenTargetException(var0 + " target not found");
  175.          } else {
  176.             var2.enablePrincipalPrivilegeHelper(var3, var1 + 1, (Principal)null, (Object)null);
  177.             var2.enableScopePrivilegeHelper(var3, var1 + 1, (Object)null, false, (Principal)null);
  178.          }
  179.       }
  180.    }
  181.  
  182.    public static void enablePrivilege(String var0) {
  183.       enablePrivilegePrivate((String)var0, 1);
  184.    }
  185.  
  186.    public static Object enableTarget(String var0) {
  187.       enablePrivilegePrivate((String)var0, 1);
  188.       return null;
  189.    }
  190.  
  191.    private void enablePrivilegePrivate(Target var1, int var2) {
  192.       this.enablePrincipalPrivilegeHelper(var1, var2 + 1, (Principal)null, (Object)null);
  193.       this.enableScopePrivilegeHelper(var1, var2 + 1, (Object)null, false, (Principal)null);
  194.    }
  195.  
  196.    public void enablePrivilege(Target var1) {
  197.       this.enablePrivilegePrivate((Target)var1, 1);
  198.    }
  199.  
  200.    public Object enableTarget(Target var1) {
  201.       this.enablePrivilegePrivate((Target)var1, 1);
  202.       return null;
  203.    }
  204.  
  205.    private void enablePrivilegePrivate(Target var1, Principal var2, int var3) {
  206.       this.enablePrincipalPrivilegeHelper(var1, var3 + 1, var2, (Object)null);
  207.       this.enableScopePrivilegeHelper(var1, var3 + 1, (Object)null, false, var2);
  208.    }
  209.  
  210.    public void enablePrivilege(Target var1, Principal var2) {
  211.       this.enablePrivilegePrivate(var1, var2, 1);
  212.    }
  213.  
  214.    public Object enableTarget(Target var1, Principal var2) {
  215.       this.enablePrivilegePrivate(var1, var2, 1);
  216.       return null;
  217.    }
  218.  
  219.    private void enablePrivilegePrivate(Target var1, Principal var2, Object var3, int var4) {
  220.       this.enablePrincipalPrivilegeHelper(var1, var4 + 1, var2, var3);
  221.       this.enableScopePrivilegeHelper(var1, var4 + 1, var3, false, var2);
  222.    }
  223.  
  224.    public void enablePrivilege(Target var1, Principal var2, Object var3) {
  225.       this.enablePrivilegePrivate(var1, var2, var3, 1);
  226.    }
  227.  
  228.    public Object enableTarget(Target var1, Principal var2, Object var3) {
  229.       this.enablePrivilegePrivate(var1, var2, var3, 1);
  230.       return null;
  231.    }
  232.  
  233.    void enablePrivilege(String var1, int var2) {
  234.       Target var3 = Target.findTarget(var1);
  235.       if (var3 == null) {
  236.          throw new ForbiddenTargetException(var1 + " target not found");
  237.       } else {
  238.          this.enablePrincipalPrivilegeHelper(var3, var2 + 1, (Principal)null, (Object)null);
  239.          this.enableScopePrivilegeHelper(var3, var2 + 1, (Object)null, false, (Principal)null);
  240.       }
  241.    }
  242.  
  243.    Object setScopePrivilegeAssistant(int var1) {
  244.       return this.enableScopePrivilegeHelper(theSystemTarget, var1 + 1, (Object)null, true, (Principal)null);
  245.    }
  246.  
  247.    Object setScopePrivilegeAssistant(int var1, String var2) {
  248.       Target var3 = Target.findTarget(var2);
  249.       if (var3 == null) {
  250.          throw new ForbiddenTargetException(var2 + " target not found");
  251.       } else {
  252.          this.enablePrincipalPrivilegeHelper(var3, var1 + 1, (Principal)null, (Object)null);
  253.          return this.enableScopePrivilegeHelper(var3, var1 + 1, (Object)null, true, (Principal)null);
  254.       }
  255.    }
  256.  
  257.    private void enablePrincipalPrivilegeHelper(Target var1, int var2, Principal var3, Object var4) {
  258.       Principal var6 = null;
  259.       Principal[] var5 = this.getClassPrincipalsFromStackUnsafeJava(var2 + 1);
  260.       if (var3 != null) {
  261.          int var7 = var5.length;
  262.  
  263.          while(var7-- > 0) {
  264.             if (var5[var7].equals(var3) && (var5[var7].isCert() || var5[var7].isCertFingerprint())) {
  265.                var6 = var5[var7];
  266.                break;
  267.             }
  268.          }
  269.  
  270.          if (var6 == null) {
  271.             Target var8 = Target.findTarget("Impersonator");
  272.             this.checkPrivilegeEnabled(var8);
  273.             var6 = var3;
  274.             var5 = new Principal[]{var3};
  275.          }
  276.       }
  277.  
  278.       if (!this.isPermissionGranted(var1, var5, var4)) {
  279.          if (var6 == null) {
  280.             if (var5.length == 0) {
  281.                throw new ForbiddenTargetException("request's caller has no principal!");
  282.             }
  283.  
  284.             var6 = var5[0];
  285.          }
  286.  
  287.          Object var13 = UpdateLock;
  288.          synchronized(var13){}
  289.  
  290.          try {
  291.             if (!this.isPermissionGranted(var1, var5, var4)) {
  292.                Privilege var12 = var1.enablePrivilege(var6, var4);
  293.                if (!var12.isAllowed() && var12.getDuration() == 1) {
  294.                   throw new ForbiddenTargetException("User didn't grant the " + var1.getName() + " privilege.");
  295.                }
  296.  
  297.                this.registerPrincipalAndSetPrivileges(var6, var1, var12);
  298.                if (var6.savePrincipalPermanently() && var12.getDuration() == 2 && !var6.equals(theUnsignedPrincipal)) {
  299.                   this.save();
  300.                }
  301.  
  302.                if (!var12.isForbidden()) {
  303.                   return;
  304.                }
  305.  
  306.                throw new ForbiddenTargetException("User didn't grant the " + var1.getName() + " privilege.");
  307.             }
  308.          } catch (Throwable var11) {
  309.             throw var11;
  310.          }
  311.  
  312.       }
  313.    }
  314.  
  315.    private boolean isPermissionGranted(Target var1, Principal[] var2, Object var3) {
  316.       int var4 = this.getPrincipalPrivilege(var1, var2, var3);
  317.       switch (var4) {
  318.          case 0:
  319.          default:
  320.             throw new ForbiddenTargetException("access to target denied");
  321.          case 1:
  322.             return true;
  323.          case 2:
  324.             return false;
  325.       }
  326.    }
  327.  
  328.    private Object enableScopePrivilegeHelper(Target var1, int var2, Object var3, boolean var4, Principal var5) {
  329.       if (var5 != null) {
  330.          this.checkPrivilegeGranted(var1, var5, var3);
  331.       } else {
  332.          this.checkPrivilegeGranted(var1, var2 + 1, var3);
  333.       }
  334.  
  335.       PrivilegeTable var6 = this.getPrivilegeTableFromStackUnsafe(var2 + 1, !var4);
  336.       if (var4) {
  337.          if (var6 != null) {
  338.             var6 = (PrivilegeTable)var6.clone();
  339.          } else {
  340.             var6 = new PrivilegeTable();
  341.          }
  342.       }
  343.  
  344.       Privilege var7 = Privilege.findPrivilege(1, 0);
  345.       this.updatePrivilegeTable(var1, var6, var7);
  346.       return var6;
  347.    }
  348.  
  349.    private void registerPrincipalAndSetPrivileges(Principal var1, Target var2, Privilege var3) {
  350.       this.registerPrincipal(var1);
  351.       PrivilegeTable var4 = (PrivilegeTable)this.itsPrinToMacroTargetPrivTable.get(var1);
  352.       var4.put(var2, var3);
  353.       var4 = (PrivilegeTable)this.itsPrinToPrivTable.get(var1);
  354.       this.updatePrivilegeTable(var2, var4, var3);
  355.    }
  356.  
  357.    private void updatePrivilegeTable(Target var1, PrivilegeTable var2, Privilege var3) {
  358.       Target[] var4 = var1.getFlattenedTargetAryUnsafe();
  359.       synchronized(var2){}
  360.  
  361.       try {
  362.          for(int var8 = var4.length; var8-- > 0; var2.put(var4[var8], var3)) {
  363.             Privilege var5 = var2.get(var4[var8]);
  364.             if (var5 != null) {
  365.                var3 = Privilege.add(var5, var3);
  366.             }
  367.          }
  368.       } catch (Throwable var10) {
  369.          throw var10;
  370.       }
  371.  
  372.    }
  373.  
  374.    public void revertPrivilege(Target var1) {
  375.       this.revertPrivilege(var1, 1);
  376.    }
  377.  
  378.    public static void revertPrivilege(String var0) {
  379.       PrivilegeManager var1 = getPrivilegeManager();
  380.       if (var1 == null) {
  381.          throw new ForbiddenTargetException("access to target denied");
  382.       } else {
  383.          Target var2 = Target.findTarget(var0);
  384.          if (var2 == null) {
  385.             throw new ForbiddenTargetException(var0 + " target not found");
  386.          } else {
  387.             var1.revertPrivilege(var2, 1);
  388.          }
  389.       }
  390.    }
  391.  
  392.    void revertPrivilege() {
  393.       PrivilegeTable var1 = this.getPrivilegeTableFromStackUnsafe(1, true);
  394.       synchronized(var1){}
  395.  
  396.       try {
  397.          var1.clear();
  398.       } catch (Throwable var4) {
  399.          throw var4;
  400.       }
  401.  
  402.    }
  403.  
  404.    private void revertPrivilege(Target var1, int var2) {
  405.       PrivilegeTable var3 = this.getPrivilegeTableFromStackUnsafe(var2 + 1, true);
  406.       synchronized(var3){}
  407.  
  408.       try {
  409.          var3.put(var1, Privilege.findPrivilege(2, 0));
  410.       } catch (Throwable var6) {
  411.          throw var6;
  412.       }
  413.  
  414.    }
  415.  
  416.    public void disablePrivilege(Target var1) {
  417.       this.disablePrivilege(var1, 1);
  418.    }
  419.  
  420.    public static void disablePrivilege(String var0) {
  421.       PrivilegeManager var1 = getPrivilegeManager();
  422.       if (var1 == null) {
  423.          throw new ForbiddenTargetException("access to target denied");
  424.       } else {
  425.          Target var2 = Target.findTarget(var0);
  426.          if (var2 == null) {
  427.             throw new ForbiddenTargetException(var0 + " target not found");
  428.          } else {
  429.             var1.disablePrivilege(var2, 1);
  430.          }
  431.       }
  432.    }
  433.  
  434.    private void disablePrivilege(Target var1, int var2) {
  435.       PrivilegeTable var3 = this.getPrivilegeTableFromStackUnsafe(var2 + 1, true);
  436.       var3.put(var1, Privilege.findPrivilege(0, 0));
  437.    }
  438.  
  439.    private int getPrincipalPrivilege(Target var1, int var2) {
  440.       return this.getPrincipalPrivilege(var1, var2 + 1, (Object)null);
  441.    }
  442.  
  443.    private int getPrincipalPrivilege(Target var1, Principal[] var2) {
  444.       return this.getPrincipalPrivilege(var1, (Principal[])var2, (Object)null);
  445.    }
  446.  
  447.    private int getPrincipalPrivilege(Target var1, int var2, Object var3) {
  448.       Principal[] var4 = this.getClassPrincipalsFromStackUnsafeJava(var2 + 1);
  449.       return this.getPrincipalPrivilege(var1, var4, var3);
  450.    }
  451.  
  452.    private int getPrincipalPrivilege(Target var1, Principal[] var2, Object var3) {
  453.       boolean var5 = false;
  454.       int var6 = var2.length;
  455.  
  456.       while(var6-- > 0) {
  457.          Privilege var4 = this.getPrincipalPrivilege(var1, var2[var6], var3);
  458.          if (var4 != null) {
  459.             switch (var4.getPermission()) {
  460.                case 0:
  461.                default:
  462.                   return 0;
  463.                case 1:
  464.                   var5 = true;
  465.                case 2:
  466.             }
  467.          }
  468.       }
  469.  
  470.       if (var5) {
  471.          return 1;
  472.       } else {
  473.          return 2;
  474.       }
  475.    }
  476.  
  477.    Privilege getPrincipalPrivilege(Target var1, Principal var2, Object var3) {
  478.       PrivilegeTable var4 = (PrivilegeTable)this.itsPrinToPrivTable.get(var2);
  479.       if (var4 == null) {
  480.          return null;
  481.       } else {
  482.          Privilege var5;
  483.          if (var1 instanceof ParameterizedTarget) {
  484.             ParameterizedTarget var6 = (ParameterizedTarget)var1;
  485.             var5 = var6.getPrincipalPrivilege(var2, var3);
  486.          } else {
  487.             var5 = var4.get(var1);
  488.          }
  489.  
  490.          return var5;
  491.       }
  492.    }
  493.  
  494.    public static void checkPrivilegeGranted(String var0) {
  495.       PrivilegeManager var1 = getPrivilegeManager();
  496.       if (var1 == null) {
  497.          throw new ForbiddenTargetException("access to target denied");
  498.       } else {
  499.          Target var2 = Target.findTarget(var0);
  500.          if (var2 == null) {
  501.             throw new ForbiddenTargetException(var0 + " target not found");
  502.          } else {
  503.             var1.checkPrivilegeGranted(var2, 1, (Object)null);
  504.          }
  505.       }
  506.    }
  507.  
  508.    public void checkPrivilegeGranted(Target var1) {
  509.       this.checkPrivilegeGranted(var1, 1, (Object)null);
  510.    }
  511.  
  512.    private void checkPrivilegeGranted(Target var1, int var2) {
  513.       this.checkPrivilegeGranted(var1, var2 + 1, (Object)null);
  514.    }
  515.  
  516.    public void checkPrivilegeGranted(Target var1, Object var2) {
  517.       this.checkPrivilegeGranted(var1, 1, var2);
  518.    }
  519.  
  520.    private void checkPrivilegeGranted(Target var1, int var2, Object var3) {
  521.       int var4 = this.getPrincipalPrivilege(var1, var2 + 1, var3);
  522.       if (var4 != 1) {
  523.          throw new ForbiddenTargetException("access to target denied");
  524.       }
  525.    }
  526.  
  527.    public void checkPrivilegeGranted(Target var1, Principal var2, Object var3) {
  528.       Principal[] var4 = new Principal[]{var2};
  529.       int var5 = this.getPrincipalPrivilege(var1, var4, var3);
  530.       if (var5 != 1) {
  531.          throw new ForbiddenTargetException("access to target denied");
  532.       }
  533.    }
  534.  
  535.    public boolean isCalledByPrincipal(Principal var1, int var2) {
  536.       Principal[] var3 = this.getClassPrincipalsFromStackUnsafeJava(var2 + 1);
  537.       int var4 = var3.length;
  538.  
  539.       while(var4-- > 0) {
  540.          if (var3[var4].equals(var1)) {
  541.             return true;
  542.          }
  543.       }
  544.  
  545.       return false;
  546.    }
  547.  
  548.    public boolean isCalledByPrincipal(Principal var1) {
  549.       return this.isCalledByPrincipal(var1, 2);
  550.    }
  551.  
  552.    public static Principal getSystemPrincipal() {
  553.       if (theSystemPrincipal == null) {
  554.          init();
  555.       }
  556.  
  557.       return theSystemPrincipal;
  558.    }
  559.  
  560.    public static PrivilegeManager getPrivilegeManager() {
  561.       return AppletSecurity.getPrivilegeManager();
  562.    }
  563.  
  564.    private static Principal[] getSystemPrincipals() {
  565.       try {
  566.          return (Principal[])theSystemPrincipalAry.clone();
  567.       } catch (CloneNotSupportedException var0) {
  568.          throw new ForbiddenTargetException("internal error: unable to clone System Principal");
  569.       }
  570.    }
  571.  
  572.    private static Principal[] getSystemPrincipalsUnsafe() {
  573.       return theSystemPrincipalAry;
  574.    }
  575.  
  576.    private static Principal[] getUnsignedPrincipalArray() {
  577.       try {
  578.          return (Principal[])theUnsignedPrincipalAry.clone();
  579.       } catch (CloneNotSupportedException var0) {
  580.          throw new ForbiddenTargetException("internal error: unable to clone Unsigned Principal");
  581.       }
  582.    }
  583.  
  584.    private static Principal[] getUnsignedPrincipalsUnsafe() {
  585.       return theUnsignedPrincipalAry;
  586.    }
  587.  
  588.    static Principal getUnsignedPrincipal() {
  589.       return theUnsignedPrincipal;
  590.    }
  591.  
  592.    private static Principal[] getUnknownPrincipalArrayUnsafe() {
  593.       return theUnknownPrincipalAry;
  594.    }
  595.  
  596.    static Principal[] getUnknownPrincipalArray() {
  597.       try {
  598.          return (Principal[])theUnknownPrincipalAry.clone();
  599.       } catch (CloneNotSupportedException var0) {
  600.          throw new ForbiddenTargetException("internal error: unable to clone Unknown Principal");
  601.       }
  602.    }
  603.  
  604.    static Principal getUnknownPrincipal() {
  605.       return theUnknownPrincipal;
  606.    }
  607.  
  608.    public static Principal[] getMyPrincipals() {
  609.       PrivilegeManager var0 = getPrivilegeManager();
  610.       return var0 == null ? null : var0.getClassPrincipalsFromStack(1);
  611.    }
  612.  
  613.    public Principal[] getClassPrincipals(Class var1) {
  614.       Principal[] var2 = this.getClassPrincipalsUnsafeJava(var1);
  615.  
  616.       try {
  617.          return (Principal[])var2.clone();
  618.       } catch (CloneNotSupportedException var3) {
  619.          throw new ForbiddenTargetException("internal error: unable to clone Principal");
  620.       }
  621.    }
  622.  
  623.    public boolean hasPrincipal(Class var1, Principal var2) {
  624.       Principal[] var3 = this.getClassPrincipalsUnsafeJava(var1);
  625.       int var4 = var3.length;
  626.  
  627.       while(var4-- > 0) {
  628.          if (var3[var4].equals(var2)) {
  629.             return true;
  630.          }
  631.       }
  632.  
  633.       return false;
  634.    }
  635.  
  636.    public int comparePrincipalArray(Principal[] var1, Principal[] var2) {
  637.       Hashtable var3 = new Hashtable();
  638.       Integer var4 = new Integer(1);
  639.       Integer var5 = new Integer(0);
  640.       int var8 = var2.length;
  641.  
  642.       while(var8-- > 0) {
  643.          var3.put(var2[var8], var4);
  644.       }
  645.  
  646.       int var9 = var1.length;
  647.  
  648.       while(var9-- > 0) {
  649.          Principal var7 = var1[var9];
  650.          Integer var6 = (Integer)var3.get(var7);
  651.          if (var6 == null) {
  652.             return 1;
  653.          }
  654.  
  655.          if (var6 == var4) {
  656.             var3.put(var7, var5);
  657.          }
  658.       }
  659.  
  660.       Enumeration var10 = var3.keys();
  661.  
  662.       while(var10.hasMoreElements()) {
  663.          Object var12 = var10.nextElement();
  664.          Integer var11 = (Integer)var3.get(var12);
  665.          if (var11 == var4) {
  666.             return -1;
  667.          }
  668.       }
  669.  
  670.       return 0;
  671.    }
  672.  
  673.    public Principal[] intersectPrincipalArray(Principal[] var1, Principal[] var2) {
  674.       boolean[] var3 = new boolean[var1.length];
  675.       int var4 = 0;
  676.  
  677.       for(int var5 = 0; var5 < var1.length; ++var5) {
  678.          for(int var6 = 0; var6 < var2.length; ++var6) {
  679.             if (var1[var5].equals(var2[var6])) {
  680.                var3[var5] = true;
  681.                ++var4;
  682.                break;
  683.             }
  684.          }
  685.       }
  686.  
  687.       Principal[] var9 = new Principal[var4];
  688.       int var7 = 0;
  689.  
  690.       for(int var8 = 0; var8 < var3.length; ++var8) {
  691.          if (var3[var8]) {
  692.             var9[var7++] = var1[var8];
  693.          }
  694.       }
  695.  
  696.       return var9;
  697.    }
  698.  
  699.    public boolean canExtendTrust(Principal[] var1, Principal[] var2) {
  700.       Principal[] var3 = this.intersectPrincipalArray(var1, var2);
  701.       if (var3.length == var1.length) {
  702.          return true;
  703.       } else if (var3.length != 0 && var3.length == var1.length - 1) {
  704.          for(int var4 = 0; var4 < var3.length; ++var4) {
  705.             if (var3[var4].isCodebase()) {
  706.                return false;
  707.             }
  708.          }
  709.  
  710.          int var5 = 0;
  711.  
  712.          for(int var6 = 0; var6 < var1.length; ++var6) {
  713.             if (var1[var6].isCodebase()) {
  714.                ++var5;
  715.             }
  716.          }
  717.  
  718.          if (var5 != 1) {
  719.             return false;
  720.          } else {
  721.             return true;
  722.          }
  723.       } else {
  724.          return false;
  725.       }
  726.    }
  727.  
  728.    public boolean checkMatchPrincipal(Class var1, int var2) {
  729.       return this.comparePrincipalArray(this.getClassPrincipalsFromStack(var2 + 1), this.getClassPrincipalsUnsafeJava(var1)) != 1;
  730.    }
  731.  
  732.    public boolean checkMatchPrincipal(Principal var1, int var2) {
  733.       Principal[] var3 = new Principal[]{var1};
  734.       return this.comparePrincipalArray(var3, this.getClassPrincipalsFromStack(var2 + 1)) != 1;
  735.    }
  736.  
  737.    public boolean checkMatchPrincipal(Class var1) {
  738.       return this.checkMatchPrincipal((Class)var1, 1);
  739.    }
  740.  
  741.    public boolean checkMatchPrincipalAlways() {
  742.       return SecurityManager.checksMatchPrincipalAlways(1);
  743.    }
  744.  
  745.    public Principal[] getClassPrincipalsFromStack(int var1) {
  746.       Principal[] var2 = this.getClassPrincipalsFromStackUnsafeJava(var1 + 1);
  747.  
  748.       try {
  749.          return (Principal[])var2.clone();
  750.       } catch (CloneNotSupportedException var3) {
  751.          throw new ForbiddenTargetException("internal error: unable to clone Principal");
  752.       }
  753.    }
  754.  
  755.    private Principal[] getClassPrincipalsFromStackUnsafeJava(int var1) {
  756.       Principal[] var2 = this.getClassPrincipalsFromStackUnsafe(var1 + 1);
  757.       if (var2 == null) {
  758.          if (!this.getJavaSecurityEnabled()) {
  759.             System.out.println("Java Navigator Beta internal error message: Defaulting to system principal");
  760.             return getSystemPrincipalsUnsafe();
  761.          } else {
  762.             return getUnknownPrincipalArray();
  763.          }
  764.       } else {
  765.          return var2;
  766.       }
  767.    }
  768.  
  769.    private Principal[] getClassPrincipalsUnsafeJava(Class var1) {
  770.       Principal[] var2 = this.getClassPrincipalsUnsafe(var1);
  771.       if (var2 == null) {
  772.          if (!this.getJavaSecurityEnabled()) {
  773.             System.out.println("Java Navigator Beta internal error message: Defaulting to system principal");
  774.             return getSystemPrincipalsUnsafe();
  775.          } else {
  776.             return getUnknownPrincipalArray();
  777.          }
  778.       } else {
  779.          return var2;
  780.       }
  781.    }
  782.  
  783.    PrivilegeTable getPrivilegeTableFromStack(int var1) {
  784.       PrivilegeTable var2 = this.getPrivilegeTableFromStackUnsafe(var1 + 1, false);
  785.       return var2 == null ? null : (PrivilegeTable)var2.clone();
  786.    }
  787.  
  788.    public PrivilegeTable getPrivilegeTableFromStack() {
  789.       return this.getPrivilegeTableFromStack(2);
  790.    }
  791.  
  792.    private native Principal[] getClassPrincipalsFromStackUnsafe(int var1);
  793.  
  794.    private native Principal[] getClassPrincipalsUnsafe(Class var1);
  795.  
  796.    private native PrivilegeTable getPrivilegeTableFromStackUnsafe(int var1, boolean var2);
  797.  
  798.    native boolean getJavaSecurityEnabled();
  799.  
  800.    synchronized native int getPrivilegeFromUser(String var1, String var2, String var3, boolean var4);
  801.  
  802.    native boolean showDocument(String var1, String var2);
  803.  
  804.    native boolean isJavaSecurityDefaultTo30Enabled();
  805.  
  806.    native boolean getBoolPref(String var1);
  807.  
  808.    private native String getWHFileName(String var1, int var2);
  809.  
  810.    native boolean picsCanUserEnableAdditionalJavaCapabilities();
  811.  
  812.    Principal[] getAllPrincipals() {
  813.       int var1 = 0;
  814.       Hashtable var6 = this.itsPrinToMacroTargetPrivTable;
  815.       synchronized(var6){}
  816.  
  817.       Object var5;
  818.       try {
  819.          int var8 = this.itsPrinToMacroTargetPrivTable.size();
  820.          if (var8 != 0) {
  821.             Principal[] var2 = new Principal[var8];
  822.  
  823.             Principal var4;
  824.             for(Enumeration var3 = this.itsPrinToMacroTargetPrivTable.keys(); var3.hasMoreElements(); var2[var1++] = var4) {
  825.                var4 = (Principal)var3.nextElement();
  826.             }
  827.  
  828.             return var2;
  829.          }
  830.  
  831.          var5 = null;
  832.       } catch (Throwable var10) {
  833.          throw var10;
  834.       }
  835.  
  836.       return (Principal[])var5;
  837.    }
  838.  
  839.    static String getAllPrincipalsString() {
  840.       PrivilegeManager var0 = getPrivilegeManager();
  841.       if (var0 == null) {
  842.          return null;
  843.       } else {
  844.          Principal[] var1 = var0.getAllPrincipals();
  845.          if (var1 == null) {
  846.             return null;
  847.          } else {
  848.             boolean var2 = true;
  849.             StringBuffer var3 = new StringBuffer();
  850.             int var4 = var1.length;
  851.  
  852.             while(var4-- > 0) {
  853.                if (var0.principalHasPrivileges(var1[var4])) {
  854.                   if (var2) {
  855.                      var3.append("\"" + var1[var4].toString() + "\"");
  856.                      var2 = false;
  857.                   } else {
  858.                      var3.append(",\"" + var1[var4].toString() + "\"");
  859.                   }
  860.                }
  861.             }
  862.  
  863.             if (var2) {
  864.                return null;
  865.             } else {
  866.                return var3.toString();
  867.             }
  868.          }
  869.       }
  870.    }
  871.  
  872.    private Principal getPrincipalFromString(String var1) {
  873.       Principal[] var2 = this.getAllPrincipals();
  874.       if (var2 == null) {
  875.          return null;
  876.       } else {
  877.          int var3 = var2.length;
  878.  
  879.          while(var3-- > 0) {
  880.             if (var1.equals(var2[var3].toString())) {
  881.                return var2[var3];
  882.             }
  883.          }
  884.  
  885.          return null;
  886.       }
  887.    }
  888.  
  889.    boolean principalHasPrivileges(Principal var1) {
  890.       Hashtable var3 = this.itsPrinToMacroTargetPrivTable;
  891.       synchronized(var3){}
  892.  
  893.       PrivilegeTable var2;
  894.       try {
  895.          var2 = (PrivilegeTable)this.itsPrinToMacroTargetPrivTable.get(var1);
  896.       } catch (Throwable var5) {
  897.          throw var5;
  898.       }
  899.  
  900.       return var2 != null && var2.size() != 0;
  901.    }
  902.  
  903.    static String[] getTargetsWithPrivileges(String var0) {
  904.       PrivilegeManager var1 = getPrivilegeManager();
  905.       if (var1 == null) {
  906.          return null;
  907.       } else {
  908.          Principal var2 = var1.getPrincipalFromString(var0);
  909.          if (var2 == null) {
  910.             return null;
  911.          } else {
  912.             StringBuffer var8 = new StringBuffer();
  913.             StringBuffer var9 = new StringBuffer();
  914.             StringBuffer var10 = new StringBuffer();
  915.             String[] var11 = new String[3];
  916.             Hashtable var12 = var1.itsPrinToMacroTargetPrivTable;
  917.             synchronized(var12){}
  918.  
  919.             PrivilegeTable var3;
  920.             try {
  921.                var3 = (PrivilegeTable)var1.itsPrinToMacroTargetPrivTable.get(var2);
  922.             } catch (Throwable var14) {
  923.                throw var14;
  924.             }
  925.  
  926.             Enumeration var6 = var3.keys();
  927.  
  928.             while(var6.hasMoreElements()) {
  929.                Target var4 = (Target)var6.nextElement();
  930.                Privilege var5 = var3.get(var4);
  931.                String var7 = var4.getDescription();
  932.                if (var5.isAllowed()) {
  933.                   if (var5.getDuration() == 2) {
  934.                      var8.append("<option>" + var7);
  935.                   } else {
  936.                      var9.append("<option>" + var7);
  937.                   }
  938.                } else if (var5.isForbidden()) {
  939.                   var10.append("<option>" + var7);
  940.                }
  941.             }
  942.  
  943.             var11[0] = var8.toString();
  944.             var11[1] = var9.toString();
  945.             var11[2] = var10.toString();
  946.             return var11;
  947.          }
  948.       }
  949.    }
  950.  
  951.    private Target getTargetFromString(Principal var1, String var2) {
  952.       PrivilegeTable var3 = (PrivilegeTable)this.itsPrinToMacroTargetPrivTable.get(var1);
  953.       Enumeration var5 = var3.keys();
  954.  
  955.       while(var5.hasMoreElements()) {
  956.          Target var4 = (Target)var5.nextElement();
  957.          if (var2.equals(var4.getDescription())) {
  958.             return var4;
  959.          }
  960.       }
  961.  
  962.       return null;
  963.    }
  964.  
  965.    static String[] getTargetDetails(String var0) {
  966.       PrivilegeManager var1 = getPrivilegeManager();
  967.       if (var1 == null) {
  968.          return null;
  969.       } else {
  970.          Target var2 = Target.getTargetFromDescription(var0);
  971.          if (var2 == null) {
  972.             return null;
  973.          } else {
  974.             StringBuffer var3 = new StringBuffer();
  975.             Target[] var4 = var2.getFlattenedTargetAryUnsafe();
  976.             int var5 = var4.length;
  977.  
  978.             while(var5-- > 0) {
  979.                var3.append("<option>" + var4[var5].getDescription() + " (" + var4[var5].getRisk() + ")");
  980.             }
  981.  
  982.             String[] var6 = new String[]{var3.toString(), var2.getRisk()};
  983.             return var6;
  984.          }
  985.       }
  986.    }
  987.  
  988.    static boolean removePrincipal(String var0) {
  989.       PrivilegeManager var1 = getPrivilegeManager();
  990.       if (var1 == null) {
  991.          return false;
  992.       } else {
  993.          Principal var2 = var1.getPrincipalFromString(var0);
  994.          if (var2 == null) {
  995.             return false;
  996.          } else {
  997.             try {
  998.                var1.removeAllParameterizedTargets(var2);
  999.                var1.unregisterPrincipal(var2);
  1000.             } catch (Exception var4) {
  1001.                System.out.println("Unable to delete principal " + var2 + " " + var4);
  1002.                ((Throwable)var4).printStackTrace(System.out);
  1003.                return false;
  1004.             }
  1005.  
  1006.             var1.save();
  1007.             return true;
  1008.          }
  1009.       }
  1010.    }
  1011.  
  1012.    static boolean removePrincipalsPrivilege(String var0, String var1) {
  1013.       PrivilegeManager var2 = getPrivilegeManager();
  1014.       if (var2 == null) {
  1015.          return false;
  1016.       } else {
  1017.          Principal var3 = var2.getPrincipalFromString(var0);
  1018.          if (var3 == null) {
  1019.             return false;
  1020.          } else {
  1021.             Target var4 = var2.getTargetFromString(var3, var1);
  1022.             if (var4 == null) {
  1023.                return false;
  1024.             } else {
  1025.                Hashtable var9 = var2.itsPrinToMacroTargetPrivTable;
  1026.                synchronized(var9){}
  1027.  
  1028.                PrivilegeTable var6;
  1029.                try {
  1030.                   var6 = (PrivilegeTable)var2.itsPrinToMacroTargetPrivTable.get(var3);
  1031.                   if (var4 instanceof ParameterizedTarget) {
  1032.                      ParameterizedTarget var11 = (ParameterizedTarget)var4;
  1033.                      var11.unregisterPrincipal(var3);
  1034.                   }
  1035.  
  1036.                   var6.remove(var4);
  1037.                } catch (Throwable var17) {
  1038.                   throw var17;
  1039.                }
  1040.  
  1041.                var9 = var2.itsPrinToPrivTable;
  1042.                synchronized(var9){}
  1043.  
  1044.                try {
  1045.                   PrivilegeTable var19 = new PrivilegeTable();
  1046.                   var2.itsPrinToPrivTable.put(var3, var19);
  1047.                   Enumeration var5 = var6.keys();
  1048.  
  1049.                   while(var5.hasMoreElements()) {
  1050.                      Target var8 = (Target)var5.nextElement();
  1051.                      Privilege var7 = var6.get(var8);
  1052.                      var2.updatePrivilegeTable(var8, var19, var7);
  1053.                   }
  1054.                } catch (Throwable var16) {
  1055.                   throw var16;
  1056.                }
  1057.  
  1058.                var2.save();
  1059.                return true;
  1060.             }
  1061.          }
  1062.       }
  1063.    }
  1064.  
  1065.    void removeAllParameterizedTargets(Principal var1) {
  1066.       Hashtable var5 = this.itsPrinToPrivTable;
  1067.       synchronized(var5){}
  1068.  
  1069.       try {
  1070.          PrivilegeTable var3 = (PrivilegeTable)this.itsPrinToPrivTable.get(var1);
  1071.          Enumeration var2 = var3.keys();
  1072.  
  1073.          while(var2.hasMoreElements()) {
  1074.             Target var4 = (Target)var2.nextElement();
  1075.             if (var4 instanceof ParameterizedTarget) {
  1076.                ParameterizedTarget var7 = (ParameterizedTarget)var4;
  1077.                var7.unregisterPrincipal(var1);
  1078.             }
  1079.          }
  1080.       } catch (Throwable var9) {
  1081.          throw var9;
  1082.       }
  1083.  
  1084.    }
  1085.  
  1086.    String getArchiveFileName() {
  1087.       if (SignedAppletDBName == null) {
  1088.          SignedAppletDBName = this.getWHFileName("", 1);
  1089.       }
  1090.  
  1091.       return SignedAppletDBName;
  1092.    }
  1093.  
  1094.    String getArchiveFileName(String var1) {
  1095.       return this.getWHFileName(var1, 1);
  1096.    }
  1097.  
  1098.    private synchronized void save() {
  1099.       SecurityManager.enablePrivilege("UniversalFileWrite");
  1100.       String var2 = this.getArchiveFileName();
  1101.  
  1102.       FileOutputStream var1;
  1103.       try {
  1104.          var1 = new FileOutputStream(var2);
  1105.       } catch (FileNotFoundException var6) {
  1106.          System.err.println("Error1: can't open <" + var2 + "> to save java capabilities list");
  1107.          return;
  1108.       } catch (IOException var7) {
  1109.          System.err.println("Error2: can't open <" + var2 + "> to save java capabilities list");
  1110.          return;
  1111.       }
  1112.  
  1113.       try {
  1114.          this.save(var1);
  1115.       } catch (Exception var5) {
  1116.          System.err.println("Error: unable to save java capabilities list into <" + var2 + "> " + var5);
  1117.       }
  1118.  
  1119.       try {
  1120.          var1.close();
  1121.       } catch (IOException var4) {
  1122.          System.err.println("Error while saving java capabilities list into <" + var2 + ">");
  1123.       }
  1124.    }
  1125.  
  1126.    private void save(OutputStream var1) {
  1127.       Hashtable var10 = new Hashtable();
  1128.       Enumeration var4 = this.itsPrinToMacroTargetPrivTable.keys();
  1129.  
  1130.       while(var4.hasMoreElements()) {
  1131.          Principal var7 = (Principal)var4.nextElement();
  1132.          PrivilegeTable var6 = (PrivilegeTable)this.itsPrinToMacroTargetPrivTable.get(var7);
  1133.          synchronized(var6){}
  1134.  
  1135.          try {
  1136.             PrivilegeTable var11 = new PrivilegeTable();
  1137.             Enumeration var5 = var6.keys();
  1138.  
  1139.             while(var5.hasMoreElements()) {
  1140.                Target var9 = (Target)var5.nextElement();
  1141.                Privilege var8 = var6.get(var9);
  1142.                switch (var8.getDuration()) {
  1143.                   case 2:
  1144.                      var11.put(var9, var8);
  1145.                }
  1146.             }
  1147.  
  1148.             if (var11.size() > 0) {
  1149.                var10.put(var7, var11);
  1150.             }
  1151.          } catch (Throwable var18) {
  1152.             throw var18;
  1153.          }
  1154.       }
  1155.  
  1156.       Archive var2 = new Archive();
  1157.       Archiver var3 = new Archiver(var2);
  1158.  
  1159.       try {
  1160.          var3.archiveRootObject(var10);
  1161.       } catch (CodingException var17) {
  1162.          System.err.println("Internal error during archiving of Capabilities");
  1163.          ((Throwable)var17).printStackTrace(System.out);
  1164.          return;
  1165.       }
  1166.  
  1167.       try {
  1168.          var2.write(var1);
  1169.       } catch (Exception var16) {
  1170.          System.err.println("Error during serializing java Capabilities " + var16);
  1171.       }
  1172.    }
  1173.  
  1174.    boolean isSecurityInited() {
  1175.       return theSecurityInited;
  1176.    }
  1177.  
  1178.    private synchronized void load() {
  1179.       if (!theSecurityInited) {
  1180.          Object var1 = null;
  1181.          String var2 = this.getArchiveFileName();
  1182.          SecurityManager.enablePrivilege("UniversalFileRead");
  1183.  
  1184.          try {
  1185.             var6 = new FileInputStream(var2);
  1186.          } catch (Exception var5) {
  1187.             var6 = null;
  1188.          }
  1189.  
  1190.          if (var6 == null) {
  1191.             var2 = this.getArchiveFileName("0");
  1192.  
  1193.             try {
  1194.                var6 = new FileInputStream(var2);
  1195.             } catch (Exception var4) {
  1196.                return;
  1197.             }
  1198.          }
  1199.  
  1200.          this.load(var6);
  1201.  
  1202.          try {
  1203.             var6.close();
  1204.          } catch (IOException var3) {
  1205.             System.err.println("Error while reading java Capabilities file <" + var2 + ">");
  1206.             return;
  1207.          }
  1208.  
  1209.          theSecurityInited = true;
  1210.       }
  1211.    }
  1212.  
  1213.    private void load(InputStream var1) {
  1214.       Object var5 = null;
  1215.       Archive var2 = new Archive();
  1216.  
  1217.       try {
  1218.          var2.read(var1);
  1219.       } catch (Exception var17) {
  1220.          System.err.println("Error: unable to read java Capabilities from archive " + var17);
  1221.          return;
  1222.       }
  1223.  
  1224.       int[] var18 = var2.rootIdentifiers();
  1225.       Unarchiver var3 = new Unarchiver(var2);
  1226.  
  1227.       Object var4;
  1228.       try {
  1229.          var4 = var3.unarchiveIdentifier(var18[0]);
  1230.       } catch (Exception var16) {
  1231.          System.err.println("Error: old java capabilites list was lost " + var16);
  1232.          return;
  1233.       }
  1234.  
  1235.       if (var4 != null) {
  1236.          Hashtable var12 = (Hashtable)var4;
  1237.          Enumeration var6 = var12.keys();
  1238.  
  1239.          while(var6.hasMoreElements()) {
  1240.             Principal var14 = (Principal)var6.nextElement();
  1241.             PrivilegeTable var13 = (PrivilegeTable)var12.get(var14);
  1242.             this.registerPrincipal(var14);
  1243.             PrivilegeTable var8 = (PrivilegeTable)this.itsPrinToMacroTargetPrivTable.get(var14);
  1244.             Enumeration var7 = var13.keys();
  1245.  
  1246.             while(var7.hasMoreElements()) {
  1247.                Target var10 = (Target)var7.nextElement();
  1248.                Privilege var9 = var13.get(var10);
  1249.                Target var11 = Target.findTarget(var10);
  1250.                if (var11 == null) {
  1251.                   var11 = var10.registerTarget();
  1252.                }
  1253.  
  1254.                var9 = Privilege.findPrivilege(var9.getPermission(), var9.getDuration());
  1255.                var8.put(var11, var9);
  1256.             }
  1257.          }
  1258.  
  1259.          this.explodePrivilege();
  1260.       }
  1261.    }
  1262.  
  1263.    private void explodePrivilege() {
  1264.       Enumeration var1 = this.itsPrinToMacroTargetPrivTable.keys();
  1265.  
  1266.       while(var1.hasMoreElements()) {
  1267.          Principal var4 = (Principal)var1.nextElement();
  1268.          PrivilegeTable var3 = (PrivilegeTable)this.itsPrinToMacroTargetPrivTable.get(var4);
  1269.          PrivilegeTable var7 = (PrivilegeTable)this.itsPrinToPrivTable.get(var4);
  1270.          Enumeration var2 = var3.keys();
  1271.  
  1272.          while(var2.hasMoreElements()) {
  1273.             Target var6 = (Target)var2.nextElement();
  1274.             Privilege var5 = var3.get(var6);
  1275.             this.updatePrivilegeTable(var6, var7, var5);
  1276.          }
  1277.       }
  1278.  
  1279.    }
  1280. }
  1281.