hshaw ecfecf7a81 Free the lizard
git-svn-id: svn://10.0.0.236/trunk@171 18797224-902f-48f8-a5cc-f745e15eee43
1998-04-13 21:07:10 +00:00

142 lines
4.4 KiB
Java

/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
package netscape.softupdate ;
import netscape.softupdate.*;
import netscape.util.*;
import java.lang.*;
import netscape.security.PrivilegeManager;
import netscape.security.Target;
import netscape.security.AppletSecurity;
/* InstallFile
* extracts the file to the temporary directory
* on Complete(), copies it to the final location
*/
final class InstallFile extends InstallObject {
private String vrName; // Name of the component
private VersionInfo versionInfo; // Version
private String jarLocation; // Location in the JAR
private String tempFile; // temporary file location
private String finalFile; // final file destination
private netscape.security.Target target; // security target
private boolean force; // whether install is forced
/* Constructor
inSoftUpdate - softUpdate object we belong to
inComponentName - full path of the registry component
inVInfo - full version info
inJarLocation - location inside the JAR file
inFinalFileSpec - final location on disk
*/
InstallFile(SoftwareUpdate inSoftUpdate,
String inVRName,
VersionInfo inVInfo,
String inJarLocation,
FolderSpec folderSpec,
String inPartialPath,
boolean forceInstall) throws SoftUpdateException
{
super(inSoftUpdate);
tempFile = null;
vrName = inVRName;
versionInfo = inVInfo;
jarLocation = inJarLocation;
force = forceInstall;
finalFile = folderSpec.MakeFullPath( inPartialPath );
/* Request impersonation privileges */
netscape.security.PrivilegeManager privMgr;
Target impersonation;
privMgr = AppletSecurity.getPrivilegeManager();
impersonation = Target.findTarget( SoftwareUpdate.IMPERSONATOR );
privMgr.enablePrivilege( impersonation );
/* check the security permissions */
target = folderSpec.GetSecurityTarget();
/* XXX: we need a way to indicate that a dialog box should appear. */
privMgr.enablePrivilege( target, softUpdate.GetPrincipal() );
}
/* ExtractFile
* Extracts file out of the JAR archive into the temp directory
*/
protected void ExtractFile() throws SoftUpdateException
{
netscape.security.PrivilegeManager privMgr;
Target impersonation;
privMgr = AppletSecurity.getPrivilegeManager();
impersonation = Target.findTarget( SoftwareUpdate.IMPERSONATOR );
privMgr.enablePrivilege( impersonation );
privMgr.enablePrivilege( target, softUpdate.GetPrincipal() );
tempFile = softUpdate.ExtractJARFile( jarLocation, finalFile );
}
/* Complete
* Completes the install:
* - move the downloaded file to the final location
* - updates the registry
*/
protected void Complete() throws SoftUpdateException
{
int err;
/* Check the security for our target */
netscape.security.PrivilegeManager privMgr;
Target impersonation;
privMgr = AppletSecurity.getPrivilegeManager();
impersonation = Target.findTarget( SoftwareUpdate.IMPERSONATOR );
privMgr.enablePrivilege( impersonation );
privMgr.enablePrivilege( target, softUpdate.GetPrincipal() );
err = NativeComplete();
privMgr.revertPrivilege(target);
if ( 0 == err || SoftwareUpdate.REBOOT_NEEDED == err )
{
VersionRegistry.installComponent(vrName, finalFile, versionInfo);
if ( err != 0 )
throw( new SoftUpdateException(finalFile, err));
}
else
throw( new SoftUpdateException(Strings.error_InstallFileUnexpected() + finalFile, err));
// Eventually, put extracted files into proper locations
// System.out.println("File installed: " + finalFile);
}
protected void Abort()
{
NativeAbort();
}
private native void NativeAbort();
private native int NativeComplete();
public String toString()
{
return "Copy file to " + finalFile;
}
}