home *** CD-ROM | disk | FTP | other *** search
- package netscape.softupdate;
-
- import java.util.Enumeration;
- import java.util.Vector;
- import netscape.javascript.JSObject;
- import netscape.security.AppletSecurity;
- import netscape.security.ForbiddenTargetException;
- import netscape.security.Principal;
- import netscape.security.PrivilegeManager;
- import netscape.security.Target;
- import netscape.security.UserDialogHelper;
- import netscape.security.UserTarget;
-
- public final class SoftwareUpdate {
- static final int nTargets = 3;
- static String[] targetNames = new String[]{"LimitedInstall", "FullInstall", "SilentInstall"};
- public static final int LIMITED_INSTALL = 0;
- public static final int FULL_INSTALL = 1;
- public static final int SILENT_INSTALL = 2;
- protected static final String IMPERSONATOR = "Impersonator";
- public static final int BAD_PACKAGE_NAME = -200;
- public static final int UNEXPECTED_ERROR = -201;
- public static final int ACCESS_DENIED = -202;
- public static final int TOO_MANY_CERTIFICATES = -203;
- public static final int NO_INSTALLER_CERTIFICATE = -204;
- public static final int NO_CERTIFICATE = -205;
- public static final int NO_MATCHING_CERTIFICATE = -206;
- public static final int UNKNOWN_JAR_FILE = -207;
- public static final int INVALID_ARGUMENTS = -208;
- public static final int ILLEGAL_RELATIVE_PATH = -209;
- public static final int USER_CANCELLED = -210;
- public static final int INSTALL_NOT_STARTED = -211;
- public static final int SILENT_MODE_DENIED = -212;
- public static final int SUCCESS = 0;
- public static final int REBOOT_NEEDED = 999;
- protected String packageName;
- protected Vector installedFiles;
- protected VersionInfo versionInfo;
- protected String userPackageName;
- private ProgressMediator progress;
- private int userChoice;
- private boolean silent;
- private int lastError;
- private String installerJarName;
- private String jarName;
- private int zigPtr;
- private Principal installPrincipal;
-
- public SoftwareUpdate(JSObject var1, String var2) {
- this.userPackageName = var2;
- this.installPrincipal = null;
- this.packageName = null;
- this.progress = null;
- this.zigPtr = 0;
- this.userChoice = -1;
- this.lastError = 0;
- this.VerifyJSObject(var1);
- this.jarName = (String)var1.getMember("src");
- this.silent = false;
-
- try {
- var1.getMember("silent");
- this.silent = (Boolean)var1.getMember("silent");
- } catch (Throwable var3) {
- System.out.println("Unexpected throw on silent");
- this.silent = false;
- }
- }
-
- protected void finalize() throws Throwable {
- super.finalize();
- this.CleanUp();
- }
-
- private native void VerifyJSObject(JSObject var1);
-
- private void InitializeInstallerCertificate() throws SoftUpdateException {
- Object var1 = null;
- var1 = this.getCertificates(this.zigPtr, this.installerJarName);
- if (var1 != null && ((Object[])var1).length != 0) {
- if (((Object[])var1).length > 1) {
- throw new SoftUpdateException(Strings.error_TooManyCertificates(), -203);
- } else {
- this.installPrincipal = new Principal(14, (byte[])((Object[])var1)[0]);
- }
- } else {
- throw new SoftUpdateException(Strings.error_NoCertificate(), -204);
- }
- }
-
- private void CheckSilentPrivileges() {
- if (this.silent) {
- try {
- PrivilegeManager var1 = AppletSecurity.getPrivilegeManager();
- Target var2 = Target.findTarget("Impersonator");
- var1.enablePrivilege(var2);
- Target var3 = Target.findTarget(targetNames[2]);
- var1.enablePrivilege(var3, this.GetPrincipal());
- } catch (Throwable var4) {
- System.out.println(Strings.error_SilentModeDenied());
- this.silent = false;
- }
- }
- }
-
- private void RequestSecurityPrivileges(int var1) {
- if (var1 != 0 && var1 != 1) {
- var1 = 1;
- }
-
- PrivilegeManager var2 = AppletSecurity.getPrivilegeManager();
- Target var3 = Target.findTarget("Impersonator");
- var2.enablePrivilege(var3);
- Target var4 = Target.findTarget(targetNames[var1]);
- var2.enablePrivilege(var4, this.GetPrincipal());
- }
-
- protected final Principal GetPrincipal() {
- return this.installPrincipal;
- }
-
- protected final String GetUserPackageName() {
- return this.userPackageName;
- }
-
- protected final boolean GetSilent() {
- return this.silent;
- }
-
- protected final Enumeration GetInstallQueue() {
- return this.installedFiles != null ? this.installedFiles.elements() : null;
- }
-
- public int GetLastError() {
- return this.lastError;
- }
-
- public void ResetError() {
- this.lastError = 0;
- }
-
- private int saveError(int var1) {
- if (var1 != 0) {
- this.lastError = var1;
- }
-
- return var1;
- }
-
- public Object GetFolder(String var1) {
- FolderSpec var2 = null;
-
- try {
- if (var1.compareTo("Installed") != 0) {
- var2 = new FolderSpec(var1, this.packageName, this.userPackageName);
- if (var1 == "User Pick") {
- var2.GetDirectoryPath();
- }
- }
-
- return var2;
- } catch (Throwable var3) {
- return null;
- }
- }
-
- public Object GetComponentFolder(String var1) {
- FolderSpec var3 = null;
- String var2 = VersionRegistry.getDefaultDirectory(var1);
- if (var2 == null) {
- var2 = VersionRegistry.componentPath(var1);
- int var4;
- if (var2 != null && (var4 = var2.lastIndexOf(System.getProperty("file.separator"))) > 0) {
- char[] var5 = new char[var4];
- var2.getChars(0, var4, var5, 0);
- var2 = new String(var5);
- }
- }
-
- if (var2 != null) {
- var3 = new FolderSpec("Installed", var2, this.userPackageName);
- }
-
- return var3;
- }
-
- public Object GetWinProfile(Object var1, String var2) {
- WinProfile var3 = null;
- String var4 = System.getProperty("os.name");
-
- try {
- if (this.packageName == null) {
- throw new SoftUpdateException(Strings.error_WinProfileMustCallStart(), -211);
- }
-
- if (var4.indexOf("Windows") >= 0 || var4.equals("Win32s")) {
- var3 = new WinProfile(this, (FolderSpec)var1, var2);
- }
- } catch (SoftUpdateException var5) {
- var3 = null;
- }
-
- return var3;
- }
-
- public Object GetWinRegistry() {
- WinReg var1 = null;
- String var2 = System.getProperty("os.name");
-
- try {
- if (this.packageName == null) {
- throw new SoftUpdateException(Strings.error_WinProfileMustCallStart(), -211);
- }
-
- if (var2.indexOf("Windows") >= 0 || var2.equals("Win32s")) {
- var1 = new WinReg(this);
- }
- } catch (Throwable var3) {
- var1 = null;
- }
-
- return var1;
- }
-
- private native void OpenJARFile() throws SoftUpdateException;
-
- private native void CloseJARFile();
-
- private native Object[] getCertificates(int var1, String var2);
-
- protected String ExtractJARFile(String var1, String var2) throws SoftUpdateException {
- if (this.zigPtr == 0) {
- throw new SoftUpdateException("JAR file\thas\tnot\tbeen opened", -207);
- } else {
- PrivilegeManager var4 = AppletSecurity.getPrivilegeManager();
- Target var3 = Target.findTarget(targetNames[0]);
- var4.checkPrivilegeEnabled(var3);
- boolean var6 = false;
- Object var7 = null;
- var7 = this.getCertificates(this.zigPtr, var1);
- if (var7 != null && ((Object[])var7).length != 0) {
- for(int var5 = 0; var5 < ((Object[])var7).length; ++var5) {
- Principal var8 = new Principal(14, (byte[])((Object[])var7)[var5]);
- if (this.installPrincipal.equals(var8)) {
- var6 = true;
- break;
- }
- }
-
- if (!var6) {
- throw new SoftUpdateException(Strings.error_MismatchedCertificate() + var1, -206);
- } else {
- String var10 = this.NativeExtractJARFile(var1, var2);
- return var10;
- }
- } else {
- throw new SoftUpdateException("Missing certificate for " + var1, -205);
- }
- }
- }
-
- private native String NativeExtractJARFile(String var1, String var2) throws SoftUpdateException;
-
- public int StartInstall(String var1, VersionInfo var2, int var3) {
- int var4 = 0;
- this.ResetError();
-
- try {
- if (var1 == null) {
- throw new SoftUpdateException(Strings.error_BadPackageName(), -208);
- }
-
- char[] var5;
- for(this.packageName = var1; this.packageName.endsWith("/"); this.packageName = new String(var5)) {
- var5 = new char[this.packageName.length() - 1];
- this.packageName.getChars(0, this.packageName.length() - 1, var5, 0);
- }
-
- this.versionInfo = var2;
- this.installedFiles = new Vector();
- this.OpenJARFile();
- this.InitializeInstallerCertificate();
- this.CheckSilentPrivileges();
- this.RequestSecurityPrivileges(var3);
- this.progress = new ProgressMediator(this);
- this.progress.StartInstall();
- } catch (SoftUpdateException var6) {
- var4 = var6.GetError();
- } catch (ForbiddenTargetException var7) {
- var4 = -202;
- } catch (Exception var8) {
- ((Throwable)var8).printStackTrace();
- var4 = -201;
- }
-
- this.saveError(var4);
- return var4;
- }
-
- protected void UserCancelled() {
- this.userChoice = 0;
- this.AbortInstall();
- }
-
- protected void UserApproved() {
- this.userChoice = 1;
- }
-
- public int FinalizeInstall() {
- boolean var1 = false;
- int var2 = 0;
-
- try {
- if (this.packageName == null) {
- throw new SoftUpdateException(Strings.error_WinProfileMustCallStart(), -211);
- }
-
- this.progress.ConfirmWithUser();
-
- while(this.userChoice == -1) {
- Thread.sleep(10L);
- }
-
- if (this.userChoice != 1) {
- this.AbortInstall();
- this.lastError = -210;
- short var3 = -210;
- return var3;
- }
-
- Enumeration var6 = this.GetInstallQueue();
- InstallObject var7 = null;
-
- try {
- while(var6.hasMoreElements()) {
- var7 = (InstallObject)var6.nextElement();
-
- try {
- var7.Complete();
- } catch (SoftUpdateException var17) {
- if ((short)var17.GetError() != 999) {
- throw var17;
- }
-
- var1 = true;
- }
- }
- } catch (Throwable var18) {
- if (var7 != null) {
- var7.Abort();
- }
-
- while(var6.hasMoreElements()) {
- try {
- var7 = (InstallObject)var6.nextElement();
- var7.Abort();
- } catch (Throwable var16) {
- }
- }
-
- throw var18;
- }
-
- if (this.versionInfo != null) {
- var2 = VersionRegistry.installComponent(this.packageName, (String)null, this.versionInfo);
- }
- } catch (SoftUpdateException var19) {
- var2 = var19.GetError();
- } catch (ForbiddenTargetException var20) {
- var2 = -202;
- } catch (Throwable var21) {
- var21.printStackTrace();
- System.out.println(Strings.error_Unexpected() + " FinalizeInstall");
- var2 = -201;
- } finally {
- if (this.installedFiles != null) {
- this.installedFiles.removeAllElements();
- }
-
- this.CleanUp();
- }
-
- if (var2 == 0 && var1) {
- var2 = 999;
- }
-
- this.saveError(var2);
- return var2;
- }
-
- public synchronized void AbortInstall() {
- try {
- if (this.installedFiles != null) {
- Enumeration var3 = this.GetInstallQueue();
-
- while(var3.hasMoreElements()) {
- InstallObject var4 = (InstallObject)var3.nextElement();
-
- try {
- var4.Abort();
- } catch (Throwable var11) {
- }
- }
-
- this.installedFiles.removeAllElements();
- this.installedFiles = null;
- }
-
- this.CloseJARFile();
- } catch (Throwable var12) {
- System.out.println(Strings.error_Unexpected() + " AbortInstall");
- var12.printStackTrace();
- } finally {
- try {
- this.CleanUp();
- } catch (Throwable var10) {
- var10.printStackTrace();
- }
-
- }
-
- }
-
- private synchronized void CleanUp() {
- if (this.progress != null) {
- this.progress.Complete();
- }
-
- this.CloseJARFile();
- this.progress = null;
- this.zigPtr = 0;
- if (this.installedFiles != null) {
- Enumeration var1 = this.GetInstallQueue();
-
- while(var1.hasMoreElements()) {
- InstallObject var2 = (InstallObject)var1.nextElement();
- var2.Abort();
- }
-
- this.installedFiles.removeAllElements();
- }
-
- this.installedFiles = null;
- this.packageName = null;
- }
-
- protected void ScheduleForInstall(InstallObject var1) {
- if (this.progress != null) {
- this.progress.ScheduleForInstall(var1);
- }
-
- this.installedFiles.addElement(var1);
- }
-
- private String GetQualifiedRegName(String var1) {
- String var2 = this.packageName.length() == 0 ? "" : this.packageName + "/";
- if (var1.toUpperCase().startsWith("=COMM=/")) {
- var1 = (var1.substring(7) + "===").substring(0, var1.length() - 7);
- } else if (var1.charAt(0) != '/') {
- var1 = var2 + var1;
- }
-
- return var1;
- }
-
- public int AddSubcomponent(String var1, VersionInfo var2, String var3, Object var4, String var5, boolean var6) {
- int var8 = 0;
-
- try {
- if (var3 == null || var3.length() == 0 || var4 == null) {
- throw new SoftUpdateException("", -208);
- }
-
- if (this.packageName == null) {
- throw new SoftUpdateException(Strings.error_BadPackageNameAS(), -200);
- }
-
- this.packageName.length();
- if (var1 != null && var1.length() != 0) {
- var1 = this.GetQualifiedRegName(var1);
- } else {
- var1 = this.GetQualifiedRegName(var3);
- }
-
- if (var5 == null || var5.length() == 0) {
- var5 = var3;
- }
-
- boolean var9 = false;
- if (!var6 && var2 != null && VersionRegistry.validateComponent(var1) == 0) {
- VersionInfo var10 = VersionRegistry.componentVersion(var1);
- if (var2.compareTo(var10) > 0) {
- var9 = true;
- }
- } else {
- var9 = true;
- }
-
- if (var9) {
- InstallFile var7 = new InstallFile(this, var1, var2, var3, (FolderSpec)var4, var5, var6);
- var7.ExtractFile();
- this.ScheduleForInstall(var7);
- }
- } catch (SoftUpdateException var11) {
- var8 = var11.GetError();
- } catch (ForbiddenTargetException var12) {
- var8 = -202;
- } catch (Throwable var13) {
- System.out.println(Strings.error_Unexpected() + "AddSubcomponent");
- var8 = -201;
- }
-
- this.saveError(var8);
- return var8;
- }
-
- public int Execute(String var1) {
- int var2 = 0;
-
- try {
- InstallExecute var3 = new InstallExecute(this, var1);
- var3.ExtractFile();
- this.ScheduleForInstall(var3);
- } catch (SoftUpdateException var4) {
- var2 = var4.GetError();
- } catch (ForbiddenTargetException var5) {
- var2 = -202;
- } catch (Throwable var6) {
- var6.printStackTrace();
- System.out.println(Strings.error_Unexpected() + "Execute");
- var2 = -201;
- }
-
- this.saveError(var2);
- return var2;
- }
-
- public int[] Gestalt(String var1) {
- int[] var2 = new int[]{0, 0};
-
- try {
- var2[1] = this.NativeGestalt(var1);
- } catch (SoftUpdateException var4) {
- var2[0] = var4.GetError();
- } catch (Throwable var5) {
- var2[0] = -1;
- System.out.println(Strings.error_Unexpected() + "Gestalt");
- }
-
- return var2;
- }
-
- private native int NativeGestalt(String var1) throws SoftUpdateException;
-
- private native String[] ExtractDirEntries(String var1);
-
- public int AddDirectory(String var1, VersionInfo var2, String var3, FolderSpec var4, String var5, boolean var6) {
- int var8 = 0;
-
- try {
- if (var3 == null || var3.length() == 0 || var4 == null) {
- throw new SoftUpdateException("", -208);
- }
-
- if (this.packageName == null) {
- throw new SoftUpdateException(Strings.error_BadPackageNameAS(), -200);
- }
-
- if (var1 != null && var1.length() != 0) {
- var1 = this.GetQualifiedRegName(var1);
- } else {
- var1 = this.GetQualifiedRegName(var3);
- }
-
- if (var5 == null) {
- var5 = "";
- } else if (var5.length() != 0) {
- var5 = var5 + "/";
- }
-
- System.out.println("AddDirectory " + var1 + " from " + var3 + " into " + var4.MakeFullPath(var5));
- String[] var9 = this.ExtractDirEntries(var3);
-
- for(int var10 = 0; var10 < var9.length; ++var10) {
- String var13 = var1 + "/" + var9[var10];
- boolean var11;
- if (!var6 && var2 != null && VersionRegistry.validateComponent(var13) == 0) {
- VersionInfo var12 = VersionRegistry.componentVersion(var13);
- var11 = var2.compareTo(var12) > 0;
- } else {
- var11 = true;
- }
-
- if (var11) {
- InstallFile var7 = new InstallFile(this, var13, var2, var3 + "/" + var9[var10], var4, var5 + var9[var10], var6);
- var7.ExtractFile();
- this.ScheduleForInstall(var7);
- }
- }
- } catch (SoftUpdateException var14) {
- var8 = var14.GetError();
- } catch (ForbiddenTargetException var15) {
- var8 = -202;
- } catch (Throwable var16) {
- System.out.println(Strings.error_Unexpected() + "AddDirectory");
- var8 = -201;
- }
-
- this.saveError(var8);
- return var8;
- }
-
- static {
- Principal var3 = PrivilegeManager.getSystemPrincipal();
- UserTarget var0 = new UserTarget(targetNames[0], var3, UserDialogHelper.targetRiskMedium(), UserDialogHelper.targetRiskColorMedium(), Strings.targetDesc_LimitedInstall(), Strings.getString("s37"), Strings.targetUrl_LimitedInstall());
- var0 = (UserTarget)((Target)var0).registerTarget();
- Target[] var4 = new Target[]{var0};
- UserTarget var1 = new UserTarget(targetNames[1], var3, UserDialogHelper.targetRiskHigh(), UserDialogHelper.targetRiskColorHigh(), Strings.targetDesc_FullInstall(), Strings.getString("s38"), Strings.targetUrl_FullInstall(), var4);
- var1 = (UserTarget)((Target)var1).registerTarget();
- var4[0] = var1;
- UserTarget var2 = new UserTarget(targetNames[2], var3, UserDialogHelper.targetRiskHigh(), UserDialogHelper.targetRiskColorHigh(), Strings.targetDesc_SilentInstall(), Strings.getString("s39"), Strings.targetUrl_SilentInstall(), var4);
- var2 = (UserTarget)((Target)var2).registerTarget();
- }
- }
-