inst.js
上传用户:lyxiangda
上传日期:2007-01-12
资源大小:3042k
文件大小:12k
源码类别:

CA认证

开发平台:

WINDOWS

  1. //
  2. // The contents of this file are subject to the Mozilla Public
  3. // License Version 1.1 (the "License"); you may not use this file
  4. // except in compliance with the License. You may obtain a copy of
  5. // the License at http://www.mozilla.org/MPL/
  6. // 
  7. // Software distributed under the License is distributed on an "AS
  8. // IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  9. // implied. See the License for the specific language governing
  10. // rights and limitations under the License.
  11. // 
  12. // The Original Code is the Netscape security libraries.
  13. // 
  14. // The Initial Developer of the Original Code is Netscape
  15. // Communications Corporation.  Portions created by Netscape are 
  16. // Copyright (C) 1994-2000 Netscape Communications Corporation.  All
  17. // Rights Reserved.
  18. // 
  19. // Contributor(s):
  20. // 
  21. // Alternatively, the contents of this file may be used under the
  22. // terms of the GNU General Public License Version 2 or later (the
  23. // "GPL"), in which case the provisions of the GPL are applicable 
  24. // instead of those above.  If you wish to allow use of your 
  25. // version of this file only under the terms of the GPL and not to
  26. // allow others to use your version of this file under the MPL,
  27. // indicate your decision by deleting the provisions above and
  28. // replace them with the notice and other provisions required by
  29. // the GPL.  If you do not delete the provisions above, a recipient
  30. // may use your version of this file under either the MPL or the
  31. // GPL.
  32. //
  33. ////////////////////////////////////////////////////////////////////////////////////////
  34. // Crypto Mechanism Flags
  35. PKCS11_MECH_RSA_FLAG           =  0x1<<0; 
  36. PKCS11_MECH_DSA_FLAG           =  0x1<<1; 
  37. PKCS11_MECH_RC2_FLAG           =  0x1<<2; 
  38. PKCS11_MECH_RC4_FLAG           =  0x1<<3; 
  39. PKCS11_MECH_DES_FLAG           =  0x1<<4; 
  40. PKCS11_MECH_DH_FLAG            =  0x1<<5; //Diffie-Hellman 
  41. PKCS11_MECH_SKIPJACK_FLAG      =  0x1<<6; //SKIPJACK algorithm as in Fortezza cards 
  42. PKCS11_MECH_RC5_FLAG           =  0x1<<7; 
  43. PKCS11_MECH_SHA1_FLAG          =  0x1<<8; 
  44. PKCS11_MECH_MD5_FLAG           =  0x1<<9; 
  45. PKCS11_MECH_MD2_FLAG           =  0x1<<10; 
  46. PKCS11_MECH_RANDOM_FLAG        =  0x1<<27; //Random number generator 
  47. PKCS11_PUB_READABLE_CERT_FLAG  =  0x1<<28; //Stored certs can be read off the token w/o logging in 
  48. PKCS11_DISABLE_FLAG            =  0x1<<30; //tell Navigator to disable this slot by default 
  49. // Important: 
  50. // 0x1<<11, 0x1<<12, ... , 0x1<<26, 0x1<<29, and 0x1<<31 are reserved 
  51. // for internal use in Navigator. 
  52. // Therefore, these bits should always be set to 0; otherwise,
  53. // Navigator might exhibit unpredictable behavior. 
  54. // These flags indicate which mechanisms should be turned on by 
  55. var pkcs11MechanismFlags = PKCS11_MECH_RANDOM_FLAG; 
  56.   
  57. ////////////////////////////////////////////////////////////////////////////////////////
  58. // Ciphers that support SSL or S/MIME 
  59. PKCS11_CIPHER_FORTEZZA_FLAG    = 0x1<<0; 
  60. // Important: 
  61. // 0x1<<1, 0x1<<2, ... , 0x1<<31 are reserved 
  62. // for internal use in Navigator. 
  63. // Therefore, these bits should ALWAYS be set to 0; otherwise, 
  64. // Navigator might exhibit unpredictable behavior. 
  65. // These flags indicate which SSL ciphers are supported 
  66. var pkcs11CipherFlags = PKCS11_CIPHER_FORTEZZA_FLAG; 
  67.   
  68. ////////////////////////////////////////////////////////////////////////////////////////
  69. // Return values of pkcs11.addmodule() & pkcs11.delmodule() 
  70. // success codes 
  71. JS_OK_ADD_MODULE                 = 3; // Successfully added a module 
  72. JS_OK_DEL_EXTERNAL_MODULE        = 2; // Successfully deleted ext. module 
  73. JS_OK_DEL_INTERNAL_MODULE        = 1; // Successfully deleted int. module 
  74. // failure codes 
  75. JS_ERR_OTHER                     = -1; // Other errors than the followings 
  76. JS_ERR_USER_CANCEL_ACTION        = -2; // User abort an action 
  77. JS_ERR_INCORRECT_NUM_OF_ARGUMENTS= -3; // Calling a method w/ incorrect # of arguments 
  78. JS_ERR_DEL_MODULE                = -4; // Error deleting a module 
  79. JS_ERR_ADD_MODULE                = -5; // Error adding a module 
  80. JS_ERR_BAD_MODULE_NAME           = -6; // The module name is invalid 
  81. JS_ERR_BAD_DLL_NAME              = -7; // The DLL name is bad 
  82. JS_ERR_BAD_MECHANISM_FLAGS       = -8; // The mechanism flags are invalid 
  83. JS_ERR_BAD_CIPHER_ENABLE_FLAGS   = -9; // The SSL, S/MIME cipher flags are invalid 
  84. JS_ERR_ADD_MODULE_DULICATE       =-10; // Module with the same name already installed
  85. ////////////////////////////////////////////////////////////////////////////////////////
  86. // Find out which library is to be installed depending on the platform
  87. // pathname seperator is platform specific
  88. var sep = "/";
  89. var vendor = "netscape";
  90. var moduleName = "not_supported";
  91. var plat = navigator.platform;
  92.  
  93. var dir = "pkcs11/" + vendor + "/" + plat + "/";
  94. if (plat == "Win16") {
  95.     dir = "pkcs11/";
  96. }
  97. bAbort = false;
  98. if (plat == "Win32") {
  99.     moduleName = "fort32.dll";
  100.     sep = "\";
  101. } else if (plat == "Win16") {
  102.     moduleName = "FORT16.DLL";
  103.     sep = "\";
  104. } else if (plat == "MacPPC") {
  105.     moduleName = "FortPK11Lib";
  106.     sep = ":";
  107. } else if (plat == "AIX4.1") {
  108.     moduleName = "libfort_shr.a";
  109. } else if (plat == "SunOS4.1.3_U1") {
  110.     moduleName = "libfort.so.1.0";        
  111. } else if ((plat == "SunOS5.4") || (plat == "SunOS5.5.1")){
  112.     moduleName = "libfort.so";
  113. } else if ((plat == "HP-UXA.09") || (plat == "HP-UXB.10")){
  114.     moduleName = "libfort.sl";
  115. } else if (plat == "IRIX6.2"){
  116.     // The module only works on 6.3, but Communicator returns 6.2 even when
  117.     // running 6.3.  So in order to prevent the user from thinking
  118.     // the module actually works on 6.2, we will force the name to 
  119.     // say 6.3 instead of 6.2.  In the even the user tries to install
  120.     // on 6.2, the user will see 6.3 instead.  If they don't get it that
  121.     // it's not going to work at this point in time, then the entire install
  122.     // process wil just fail miserably, and that is OK.
  123.     plat = "IRIX6.3";
  124.     moduleName = "libfort.so";
  125. } else {
  126.     window.alert("Sorry, platform "+plat+" is not supported.");
  127.     bAbort = true;
  128. }
  129. ////////////////////////////////////////////////////////////////////////////////////////
  130. // Installation Begins...
  131. if (!bAbort) {
  132. if (confirm("This script will install a security module. nIt may over-write older files having the same name. nDo you want to continue?")) { 
  133.  // Step 1. Create a version object and a software update object 
  134.  vi = new netscape.softupdate.VersionInfo(1, 6, 0, 0); 
  135.  su = new netscape.softupdate.SoftwareUpdate(this, "Fortezza Card PKCS#11 Module"); 
  136.                  // "Fortezza ... Module" is the logical name of the bundle 
  137.  ////////////////////////////////////////
  138.  // Step 2. Start the install process 
  139.  bAbort = false; 
  140.  err = su.StartInstall("NSfortezza", // NSfortezza is the component folder (logical) 
  141.                        vi, 
  142.                        netscape.softupdate.SoftwareUpdate.FULL_INSTALL); 
  143.                             
  144.  bAbort = (err!=0); 
  145.  if (err == 0) { 
  146.      ////////////////////////////////////////
  147.     // Step 3. Find out the physical location of the Program dir 
  148.     Folder = su.GetFolder("Program"); 
  149.      ////////////////////////////////////////
  150.     // Step 4. Install the files. Unpack them and list where they go 
  151.     err = su.AddSubcomponent("FortezzaLibrary_"+plat, //component name (logical) 
  152.                                     vi, // version info 
  153.                                     moduleName, // source file in JAR (physical) 
  154.                                     Folder, // target folder (physical) 
  155.                                     dir + moduleName, // target path & filename (physical) 
  156.                                     true); // forces update 
  157.     if (err != 0) {
  158.         if (err == -200) {
  159.              errmsg = "Bad Package Name.";
  160.         } else if (err == -201) {
  161.              errmsg = "Unexpected error.";
  162.         } else if (err == -203) {
  163.              errmsg = "Installation script was signed by more than one certificate.";
  164.         } else if (err == -204) {
  165.              errmsg = "Installation script was not signed."
  166.         } else if (err == -205) {
  167.              errmsg = "The file to be installed is not signed."
  168.         } else if (err == -206) {
  169.              errmsg = "The file to be installed is not present, or it was signed with a different certificate than the one used to sign the install script.";
  170.         } else if (err == -207) {
  171.              errmsg = "JAR archive has not been opened."
  172.         } else if (err == -208) {
  173.              errmsg = "Bad arguments to AddSubcomponent( )."
  174.         } else if (err == -209) {
  175.              errmsg = "Illegal relative path( )."
  176.         } else if (err == -210) {
  177.              errmsg = "User cancelled installation."
  178.         } else if (err == -211) {
  179.              errmsg = "A problem occurred with the StartInstall( )."
  180.         } else {
  181.              errmsg = "Unknown error";
  182.         }
  183.         window.alert("Error adding sub-component: "+"("+err+")"+errmsg); 
  184.         //window.alert("Aborting, Folder="+Folder+" module="+dir+moduleName);
  185.         bAbort = true;
  186.     }
  187.  } 
  188.  ////////////////////////////////////////
  189.  // Step 5. Unless there was a problem, move files to final location 
  190.  // and update the Client Version Registry 
  191.  if (bAbort) { 
  192.     su.AbortInstall(); 
  193.  } else { 
  194.     err = su.FinalizeInstall(); 
  195.     if (err != 0) {
  196.         if (err == -900) {
  197.              errmsg = "Restart the computer, and install again.";
  198.         } else if (err == -201) {
  199.              errmsg = "Unexpected error.";
  200.         } else if (err == -202) {
  201.              errmsg = "Access denied. Make sure you have the permissions to write to the disk.";    
  202.         } else if (err == -203) {
  203.              errmsg = "Installation script was signed by more than one certificate.";
  204.         } else if (err == -204) {
  205.              errmsg = "Installation script was not signed."
  206.         } else if (err == -205) {
  207.              errmsg = "The file to be installed is not signed."
  208.         } else if (err == -206) {
  209.              errmsg = "The file to be installed is not present, or it was signed with a different certificate than the one used to sign the install script." 
  210.         } else if (err == -207) {
  211.              errmsg = "JAR archive has not been opened."
  212.         } else if (err == -208) {
  213.              errmsg = "Bad arguments to AddSubcomponent( )."
  214.         } else if (err == -209) {
  215.              errmsg = "Illegal relative path( )."
  216.         } else if (err == -210) {
  217.              errmsg = "User cancelled installation."
  218.         } else if (err == -211) {
  219.              errmsg = "A problem occurred with the StartInstall( )."
  220.         } else {
  221.              errmsg = "nIf you have FORTEZZA module already installed, try deleting it first.";
  222.         }
  223.         window.alert("Error Finalizing Install: "+"("+err+")"+errmsg); 
  224.         //window.alert("Aborting, Folder="+Folder+" module="+dir+moduleName);
  225.     } else {
  226.         // Platform specific full path 
  227.         if (plat=="Win16") { 
  228.             fullpath = Folder +  "pkcs11" + sep + moduleName; 
  229.         } else { 
  230.             fullpath = Folder +  "pkcs11" + sep + vendor + sep + plat + sep + moduleName; 
  231.         } 
  232.  
  233.          ////////////////////////////////////////
  234.         // Step 6: Call pkcs11.addmodule() to register the newly downloaded module
  235.         moduleCommonName = "Netscape FORTEZZA Module " + plat;
  236.         result = pkcs11.addmodule(moduleCommonName, 
  237.                               fullpath, 
  238.                               pkcs11MechanismFlags, 
  239.                               pkcs11CipherFlags); 
  240.        if (result == -10) {
  241.            window.alert("New module was copied to destination, nbut setup failed because a module "
  242.                    +"with the same name has been installed. nTry deleting the module "
  243.                    + moduleCommonName +" first.")
  244.        } else if (result < 0) {
  245.            window.alert("New module was copied to destination, but setup failed.  Error code: " + result); 
  246.        }           
  247.     } 
  248.  } 
  249. }
  250. }