Abstract:
The present invention provides to the software application the verification and license check out functions which are normally performed by a license server of a network software license system. The encrypted license information is contained in a license token, and is sorted in the database controlled by the license server. In contrast to the prior art where the license server either grants or denies the request after verifying the user&#39;s credentials, the license server in the preferred embodiment of the present invention finds the correct license token for the software application and transmits the license token to the licensing library. In application specific license access module attached to the application decodes the licensing token. Routines in the licensing library coupled to the software application verify the license information before checking out the license and updating the license token. The application specific license access module then encodes the updated license token before returning it to the license server. Thus, the impact of breaching the encryption/decryption of an application is limited to only one application. As a result, the present invention provides improved network-wide protection against unauthorized use of software applications in a network of computers.

Description:
BACKGROUND OF THE INVENTION 
     1. Field of the Invention 
     The present invention relates to licensing software in a network of computers. More particularly, the present invention relates to an apparatus and method for licensing software applications in a network of computer that further increases network-wide protection against their unauthorized use. 
     2. Art Background 
     A computer network is typically an interconnection of machines or agents over links or cables. The open access characteristics of a computer network presents opportunities for the unauthorized copying of software, thus eroding the licensing revenue potential of software developers. Traditionally, either the entire network must be licensed (commonly referred to as a site license), or each node where the software is run must be licensed (commonly referred to as a node license). A node refers to a single machine, agent or system in a computer network. A license is an authorization given by a software developer to a customer to use a softward application in a specific manner. 
     A site license lets all users at a designated location or network use the software application, regardless of their position on the network. This flat-fee approach is an overkill for a low usage software application. A node license not only ties a software application to a particular machine in a network, but also is not cost effective for the infrequent use of a software application. See, for example, U.S. Pat. No. 4,688,169. Futhermore, if new users of licensed nodes wish to use the software application, they are often required to purchase additional licenses. 
     An alternative to a site license or a node license is the concept of a concurrent usage license. A concurrent usage license restricts the number of users allowed to use a softward application at any given time, regardless of their location on the network. Just as renters check out available copies of a movie video from a video rental store, users on a network check out a software application from an agent on a first-come-first serve basis. Thus, a concurrent usage license charges a fee for the use of a software application proportional to its actual use. 
     Methods of license a software application for concurrent use in a network environment are currently offered by a number of manufacturers including Highland Software, Inc. and Apollo Computer, Inc. See, M. Olson adn P. Levine, &#34;Concurrent Access Licensing&#34;, Unix Review, September 1988, Vol., 6, No.9. A concurrent use license system for a network of computers typically comprises a number of license databases, a number of license servers, a number of application libraries and a set of administration tools. Each license database comprises a set of license information and a set or corresponding current usage information. The set of license information comprises information about a set of vendors, the vendor&#39;s products and the number of licenses purchased for each product. The corresponding current usage information comprises the products in use, the number of license in use for each product, and the users/processes currently licensed to use the product. Each license server manages a license database. It services requests for assignment and release or licenses stored in its license database. It also services requests for addition/deletion of vendors, products, and/or licenses into/from its license database. Each application library manages acquisition of licenses for the applications installed on the application library&#39;s node. The administration tools manages installation of the licenses. 
     To protect against the authorized use, these methods of license concurrent usage rely on secured communications such as public/private key encryption. Under public/private key encryption, each user of the system has two keys, one of which is generally known to the public, and the other which is private. The private transformation using the private key is related to the public one using the public key but the private key cannot be computationally determined from the public key. See Denning D., Cryptography and Data Security, Addison-Wesley, 1982. The private key is hidden in the license server to encrypt the database of licenses. Well designed public/private key encryption schemes are difficult to crack, especially if the license server is located in a trusted environment. A trusted environment is one whose access is limited to users having the proper credentials. However, a license server is more likely to be located at a customer&#39;s site and hence in an hostile environment. It follows that the license server is vulnerable to sophisticated intruders. Once the private key is decrypted, all sensitive information on the license server such as licenses are compromised. 
     It is therefore an object of the present invention to provide a more secure method to protect against the unauthorized use of software in a concurrent use licensing environment. 
     SUMMARY OF THE INVENTION 
     The present invention provides to the software application the verification and license check out functions which are normally performed by a license server. The preferred embodiment of the present invention comprises a computer network including a plurality of agents running at least one license server and at least one software application. The license server controls a database of an agent containing the license information for the software application. The license information is contained in a license token, and is stored in the database controlled by the license server. The license token is a special bit pattern or packet which is encrypted by the software vendor of the application software. The software application communicates with the license server through a licensing library. The licensing library is a collection of library routines that the software application invokes to request or renew a license from the licenser server. Before a software application obtains a license, the license token must be decoded by an application specific license access module. The application specific license access module, which is linked with the software application and the licensing library is a program that decodes the license token from a vendor specific format to a licensing library format. 
     When a user wishes to run a software application, the licensing library invokes a call to request a license token from the license server. In contrast to the prior art which the license server either grants or denies the request after verifying the user&#39;s credentials, the license server in the preferred embodiment of the present invention finds the correct license token for the software application and transmits the license token to the licensing library. The application specific license access module attached to the licensing library decodes the licensing token. Routines in the licensing library coupled to the software application verify the license information before checking out the license and updating the license token. The application specific license access module encodes the updated license token before returning it to the license server. 
     Because the verification and check out function of a license token are performed by a software application, the software application rather than the license server becomes the point of attack by unauthorized users. Reverse engineering the application specific license access module is less rewarding than attacking the license server because the application specific license access module reveals the contents of a database of licenses. By the time most attackers crack the application specific license access module, the software vendors would most likely introduce newer versions of the software application and new application specific license access modules for them. Thus the present invention provides a more secure method for protecting against the unauthorized sue of a software application in a computer network environment without modifying the underlying computer network. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     FIG. 1 illustrates a network environment employing the present invention. 
     FIG. 2 illustrates the preferred embodiment of the apparatus of the present invention. 
     FIG. 3 describes the installation of a license token in the preferred embodiment of the present invention. 
     FIG. 4a illustrates the use of a license token to request a license from a license server in the preferred embodiment of the present invention. 
     FIG. 4b illustrates the use of a license token to renew a license from a license server in the preferred embodiment of the present invention. 
     FIG. 4c illustrates the use of a license token to release a license from a license server in the preferred embodiment of the present invention. 
    
    
     NOTATION AND NOMENCLATURE 
     The detailed description that follows is presented largely in terms of algorithms and symbolic representations of operations on data bits and data structures within a computer memory. These algorithmic descriptions and representatons are the means used by those skilled in the data processing arts to most effectively convey the substance of their work to others skilled in the art. 
     An algorithm is here, and generally, conceived to be a self-consistent sequence of steps leading to a desired result. These steps are those requiring physical manipulation of physical quantities. Usually, though not necessarily, these quantities take the form of electrical or magnetic signals capable of being stored, transferred, combined, compared, and otherwise manipulated. It proves convenient at times, principally for reasons of common usage, to refer to these signals as bit patterns, values, elements, symbols, characters, data packages, or the like. It should be borne in mind, however, that all of these and similar terms are to be associated with the appropriate physical quantities and are merely convenient labels applied to these quantities. 
     Further, the manipulations performed are often referred to in terms, such as adding or comparing, that are commonly associated with mental operations performed by a human operator. No such capability of a human operator is necessary, or desirable in most cases, in any of the operations described herein that form part of the present invention; the operations are machine operations. Useful machines for performing the operations of the present invention include general purpose digital computers or other similar devices. In all cases there should be borne in mind the distinction between the method of operations in operating a computer and the method of computation itself. The present invention relates to method steps for operating a computer in processing electrical or other (e.g. mechanical, chemical) physical signals to generate other desired physical signals. 
     The present invention also relates to an apparatus for performing these operations. This apparatus may be specially constructed for the required purposes, or it may comprise a general purpose computer as selectively activated or reconfigured by a computer program stored in the computer. The algorithms presented herein are not inherently related to any particular computer or other apparatus. In particular, various general purpose machines may be used with programs written in accordance with the teachings herein, or it may prove more convenient to construct a more specialized apparatus to perform the required method steps. The required structure for a variety of these machines will appear from the description given below. 
     DETAILED DESCRIPTION OF THE INVENTION 
     An apparatus and method for licensing an application executing in a computer of a network of computers that further increases network-wide protection against unauthorized use of applications is disclosed, which has particular application to concurrent use licensing or software in a network of computers. In the following description for purposes of explanation, specific applications, numbers, materials and configurations are set forth in order to provide a thorough understanding of the present invention. However, it will be apparent to one skilled in the art that the present invention may be practiced without the specific details. In other instances, well known systems are shown in diagrammatical or block diagram form in order not to obscure the present invention unnecessarily. 
     Referring to FIG. 1, computer network environment comprises a plurality of data processing devices identified generally by numerals 10 through 10 n  (illustrated as 10, 10&#39; and 10 n ). These data processing devices may include terminals, personal computers, workstations, minicomputer, mainframes and even supercomputers. For the purposes of this Specification, all data processing devices which are coupled to the present invention&#39;s network are collectively referred to as &#34;agents&#34;. It should be understood that the agents may be manufactured by different vendors and may also use different operating systems such as MS-DOS, UNIX, OS/2, MAC OS and others. Particular examples of suitable agents include machines manufactured by Sun Microsystems, Inc., Mountain View, Calif. Each of the agents has an input device such as a keyboard 11, 11&#39; and 11 n  or a mouse 12, 12&#39; and 12 n . As shown, agents 10 through 10 n  (illustrated as 10, 10&#39; and 10 n ) are interconnected for data transfer to one another by a common cable 13. It will be appreciated by one skilled in the art that the common cable 13 may comprise any shared media, such as coaxial cable, fiber optics, radio channel and the like. Furthermore, the network resulting from the interconnection of the cable 13 and agents 10 through 10 n  (illustrated as 10, 10&#39; and 10 n ) may asume a variety of topologies, such as ring, star, bus, and may also include a collection of smaller networks linked by gateways or bridges. 
     Referring again to FIG. 1 is a license service 14. The license service 14 is a resource shared by every agent connected to the network. In the preferred embodiment of the present invention, the license service 14 comprises license servers 15 through 15 m  (illustrated as 15, 15&#39; and 15 m ) and databases 17 through 17 m  (illustrated as 17, 17&#39; and 17 m ), where m is less than or equal to n. A license server is a program that runs on an agent with a memory storage capability. Each license server 15 (illustrated as 15, 15&#39; and 15 m ) communicates with a database 17 stored in memory on the agent over an interface 16 (illustrated as 16, 16&#39; and 16 m ). As will be described in detail below, the database 17 stores licensing information for various software applications which are purchased and authorized to run in the computer network environment. Each license server 15 mangages storage and retrieval, including installation and deletion, of license information in its corresponding database 17. The license server is not limited to run on a specific agent, but can operate on any agent including the agent on which the user is to operate the application. Thus, any agent connected to the network may function as a license server as well as a device on which a user may operate application software. 
     FIG. 2 illustrates the preferred embodiment of the apparatus of the present invention. The preferred embodiment of the apparatus of the present invention comprises at least one database 18, at least one database interface 19, at least one license server 20, a licensing library 24, a license access module 27, a license administration tool 22, a license service binder 29, a binding file 32, and a license production tool 34. 
     Each database 18 stores licensing information and application usage data. Preferably the database 18 comprises a plurality of records which contain the following information: 
     
         ______________________________________Database Element  Description______________________________________Unique Key Table  Keys for all other tablesVendor Table      Vendor&#39;s ID and nameProduct Table     Product number and nameVersion Table     Version number and dateLicense Table     License #, exp date, total unitsLicense Token Table             Stores encoded license tokenUnit Group Table  A group&#39;s allocation of licenseGroup List Table  Name of the groupAllowed Users Table             Credentials of allowed usersCurrent License Use Table             Applications using a licenseLock Table        Locked records in databaseAuthorized administrator Table             Login names of administratorsLicense Operation Log Table             Administrator&#39;s log informationLicense Usage Log Table             Request handle plus Client LogLicense Queue Log Table             License wait queueApplication Message Log Table             Application specific messages______________________________________ 
    
     Except for the license token table, the contents of the database 18 are accessible by the license administration tool 21 and an application 26. The license token table comprises encrypted license tokens. Each encrypted license token comprises a number of licenses of a software application purchased for the network of computers. The license token will be discussed in further detail below. 
     Each database interface 19 provides communication between the license server 20 and the database 18 in order to prevent concurrent access to the same database record by multiple users which can cause the data in the record to become corrupted. Thus, only the owner of the lock can read from and write to the locked record during the usage of the application. 
     Each license server 20 operates on an agent and inferfaces the database 18 to license administration tool 21, licensing library 24 and license service binder 29. The license server 20 communicates with the license administration tool 21, licensing library 24 and license service binder 29 via an interface 23. These communications are performed without encryption. Preferably the interface 23 is a remote procedure call mechanism which permits a process operating on one device or agent connected to the network to request a resource or service from a remote device or agent connected to the network. See A. Birrell and B. Nelson, &#34;Implementing Remote Procedure Calls,&#34; ACM Transaction on Computer Systems, Feb. 1984, Vol.2, No. 1. Additionally, if a license server 20 shares an agent with an user, it is preferred that the license server 20 operates in a background mode of the agent such that its operation is transparent to the user of that agent. 
     As will be described below, the license server 20 provides the following functions: 1) servicing the requests from the licensing library 24 for license token; (2) maintaining a wait queue for requests to the database 18 when no licensing units are available; (3) generating a lock file for exclusive access to database 18; and (4) providing access to information in the database 18. These functions may be implemented in a variety of manners well known in the art. 
     The licensing library 24 is a set of library routines which enable the application 26 to request licensing service from the license server 20. Upon receiving the request for service from the licensing library 24, the license server 20 retrieves a license token from the database 18 and transmits it to the licensing library 24. The licensing library 24 is linked with the application 26 and communicates with the license server 20 over a path 28 with, preferably, a remote procedure call mechanism 23. These communications are also performed without encryption. Among the major library calls in the licensing library 24 is the applications&#39;s request for a license from the license server 20. Other important library calls include the request to renew and to release a license. The application is installed and linked to the licensing library using standard operating system utilities of the agent executing the licensing library and the application. The licensing library functions may be implemented in a variety of manners well known in the art. The use of the license token to accomplish the request for the various licensing service will be described in detail below. 
     The license access module (LAM) 27 is application specific. It is prepared by the software vendor and integrated with the application 26. The application 26 uses the application specific license access module (LAM) 27 to decrypt and re-encrypt the license token for the licensing library. The application integrated with the application specific license access module (LAM) 27 may be distributed by the software vendor for installation on one of the computers in the network using any well known distribution medium in the art. The license access module (LAM) 27 is described in further detail below. 
     The license administration tool 21 is utilized by the network administrator to perform administrative functions relevant to the concurrent usage of a software application. The license administration tool 21 may run on any agent connected to the computer network. The license administration tool 21 is primarily used to install the license token into the database 18 through the license server 20. The communications between the license administration tool 21 and the license server 20 are also performed without encryption. The functionality of the license administration tool 21 includes: (1) starting or terminating a license server, (2) accessing a database controlled by a license server; and (3) generating and printing reports on license usage. The functions performed by licensing administration tool may be implemented in a variety of manners well known in the art. 
     Continuing to refer to FIG. 2, a license service binder 29 is shown coupled to the license server 20 over a path 30. The license service binder 29 is invoked by means known in the art, such as a network service program. The license service binder 29 locates all agents that are designated as servers on the network and keeps track of which server is servicing which application. The license service binder 29 contacts each server on its table of available servers and requests a list of products it serves. Finally the license service binder 29 writes the contents of the table of available license servers and the list of products into a binding file 32 over a path 31. In FIG. 2, the binding file 32 is coupled to the licensing library 24 over a path 33. The application 26 queries the binding file 32 to see which license server can service its request for a license. The binding file 32 and the functions performed by the license service binder 29 may be implemented in a variety of manners well known in the art. 
     A license production tool 34 is used by the software vendor to create the encrypted license tokens for distribution to the network administrator. The encrypted license tokens may be distributed in any distribution medium well known in the art. Receiving the license tokens, the network administrator installs with with the license administration tool 21 into the databases 18 through the license servers 20. 
     Referring to FIG. 3, the creation of a license token in a computer network employing the preferred embodiment of the present invention will be described. A computer network 38 is shown coupled with a license administration tool 39 and a single license server 44. The license server 44 communicates with a database 45. Applications 41, 42, and 43 are shown requesting licensing service from the license server 44. When a customer purchases a license for an application, such as a CAD/CAM program for its research and development department, the software vendor creates a license token with a license production tool, and delivers the license token to the customer&#39;s network administrator. 
     A license token is a special bit pattern or packet representing a license to use a software application. The network administrator installs the license token 46 into the database of the license server using the license administration tool 39. Unlike the token used in a token ring which is passed from agent to agent, a license token in the preferred embodiment of the present invention is passed only between a license server and a licensing library for a predetermined amount of time. The predetermined amount of time corresponds to the time the license token is checked out of the license server. Currently, the license token is checked out to an application for no more that ten seconds, and the license token is returned as quickly as possible to the issuing license server. 
     The license token 46 contains information encrypted in the vendor&#39;s format such as, vendor identification, product and version numbers as well as the number of license units purchased for the license token. A license unit corresponds to the license weighing for an agent connected to the computer network. For example, powerful workstations could require more license units to use a software application than an average personal computer . 
     The software vendor produces a license token using a license production tool 40. A path 47 illustrates how a license token 46&#39; makes its way to a license administration tool 39 at the customer&#39;s site. there, the system administrator installs the license token 46&#39; as license token 46 into the license database 45 of the license server 44. A path 48 indicates the transfer of the license token 46&#39; from the license administration tool 39 to the license server 44 and into the database 45 as license token 46. The license server 44 is now ready to entertain requests from application 41, 42, and 43 for a license to use the application corresponding to token 46 as well as other applications represented in its database 45. 
     It should be understood that each network may have a plurality of license servers and each license server may have in its database a plurality of license tokens for a variety of software applications. Referring again to FIG. 3, if application A 41 requests and checks out the license token 46 for less than ten seconds, applications B and C 42, 43 would be unable to check out the license token 46 if their requests were made during the same time application 41 is checking out a license from the license token 46 because of the locking mechanism provided by database interface 19. Thus, to achieve concurrent license usage in network 38, it is preferred that the network administrator installs more than one license server. To minimize the task of recovering from license server crashes, it is also preferred that the system administrator spreads the license servers, the network administrator may want to allocate the twenty license units for any one application among a plurality of strategically located license servers. For instance, if a network has four license units for a particular popular application among four license tokens with five license units for each license token. In the event one license server crashes or the license token is checked out, the other three license servers may provide licensing service to other applications. 
     FIG. 4a illustrates the use of a license token to request for a license. As shown, a network 50 is provided, and is coupled to Applications 52, 54 and 56 respectively. Application 56 succeeded in requesting a license token from the license server 58 through the licensing library (not shown) in step 59. The license token is transmitted to application 56 through the licensing library in step 60. The application 56 decrypts the encrypted license token using the application specific license access module (not shown). Upon decryption, the licensing library verifies the licensing information stored in the decrypted license token against the licensing information stored in the application 56. Upon verification, the licensing library assigns a license to the application 56, and updates the decrypted license token (licensing). Then, the application 56 re-encrypts the updated license token using the application specific license access module. When done, Application 56 returns the license token to the license server 58 through the licensing library in step 61. The license information in the decrypted license token that are compared against the license information maintained in the application comprises: (1) flag (2) maintenance contract date, (3) host name and domain, (4) product name, (5) host id number, (6) license serial number, and (7) expiration date of license. Updating of the license token comprises decrementing the license units in the license token by the number of license units being checked out by the application. 56. 
     Aside from the license request function performed with the license token as shown in FIG. 4a, the license token is also used in other critical stages of the licensing process. For example, an user may wish to run an application beyond the initial allocated time. As shown in FIG. 4b, Application 68 makes a license renewal request 71 from the license server 70 with license token 72 through the licensing library (not shown). Similarly, the encrypted license token is provided to the application 68 through the licensing library. The application 68 decrypts the license token using the application specific license access module (not shown). Upon decryption, the licensing library then verifies the licensing information in the decrypted license token against the licensing information maintained in the application 68. Upon verification, the licensing library renews the license assigned to the application 68, and updates the decrypted token (licensing renewal). Then, the application 68 re-encrypts the updated license token using the application specific license access, module, and returns the re-encrypted license token to the license server 70 through the licensing library. Updating of the license token comprises decrementing the license units in the license token by the number of license units being checked out by the application 68. 
     Similarly, in FIG. 4c the user makes a license release request 83 through the licensing library (not shown) when the application no longer needs the license units. Again, the encrypted license token is provided to the application 80 through the licensing library. The application 80 decrypts the license token using the application specific license access module (not shown). Upon decryption, the licensing library verifies the licensing information in the decrypted license token against the licensing information maintained in the application 80. Upon verification, the licensing library releases the license assigned to the application 80, and updates the decrypted token (unlicensing). Then, the application 80 re-encrypts the updated license token using the application specific license access module, and returns the re-encrypted license token to the license server 82 through the licensing library. Updating of the license token comprises incrementing the license units in the license token by the number of license units released by the application 80. 
     Referring back to FIG. 2, as described earlier, a license access module (LAM) 27 is linked with the application 26 and the licensing library 24 to form the executable code that software vendors ship to the customers. The license access module 27 decodes and encodes the application&#39;s encrypted license token as it is being passed between the server 20 and the licensing library 24. Thus the level of security of an application from unauthorized use depends heavily upon how secure the license access module is. On the other hand, the inpact of breaching an application&#39;s encryption/decryption scheme is limited to one application. 
     In contrast, conventional network licensing schemes use public/private key encryption to encode sensitive information being passed between the license servers 20 and the licensing library 24, and between the license server 20 and the license administration tool 21. Such a scheme is effective if the license servers 20 is in a trusted environment. However, the customer has the same access to any agent in a network, including the license servers 20. The security of the licensing scheme can be compromised by a user who decrypts one of the license server&#39;s private key. Once the unauthorized user determines one of the server&#39;s private key, he can decrypt all sensitive information on the particular license server 20. Should all license servers 20 use the same key, as is frequently done, then all the security of the applications served by all the license servers 20 will be compromised. Thus, it will be appreciated that the present invention provides improved network-wide protection against unauthorized use of software applications over the prior art. 
     The application specific license access module 27 first translates a license token from a vendor specific format to a format usable by the licensing library 24. The application specific license access module accomplishes the translation in two modules. One module translates or decodes a license token from a vendor specific format to a licensing library format. The second module translates or encodes the updated license token from the licensing library format to the vendor specific format. The second module is invoked anytime the licensing library updates the information in a license token. 
     The decoding and encoding modules allow software vendors to implement their own security mechanism to protect their licenses from unauthorized use even through they reside at the customer&#39;s site. 
     
         __________________________________________________________________________#define LIC RENEWAL TIME (60)              /set renewal time for this session/#define EST LIC RENEWAL TIME (LIC RENEWAL TIME × .9)NL.sub.-- vendor.sub.-- id NL.sub.-- Vendor.sub.-- id = 1223;                        /set vendor #/NL.sub.-- prod.sub.-- num NL.sub.-- Prod.sub.-- num = &#34;02&#34;                        /set product #/NL.sub.-- version NL.sub.-- Version = (12/20/88, &#34;1.0&#34;);                        /set version id #/. . .status = NL.sub.-- init (vendor.sub.-- id, NULL, &amp;job.sub.-- id);/initialize license service/if (status != NL.sub.-- NO.sub.-- ERROR) /accept job id if no error/    {    fprintf (stderr, &#34;nl.sub.-- init failed - error =    %d/n&#34;, status);                   /error message if error and                   return/    return;    }units = 3;code.sub.-- funcs.encode.sub.-- p = nl.sub.-- encode;                 /pointer to encode function/code.sub.-- funcs.decode.sub.-- p = nl.sub. -- decode;                 /pointer to decode function/if (signal (SIGALRM), alarm.sub.-- intr) == (void*)-1)                        /set alarm if no                        error/    {    perror (&#34;Cannot set SIGALRMN);/otherwise, error message/    return;    }status = NL.sub.-- request (job.sub.-- id,                   /request a license/NL.sub.-- Prod.sub.-- num, &amp;NL.sub.-- Version,units, LIC.sub.-- RENEWAL.sub.-- TIME, NL.sub.-- L2.sub.-- SRCH,&amp;code.sub.-- funcs, NULL,&amp;req.sub.-- handle, NULL, &amp;app.sub.-- info);if (status != NL.sub.-- NO.sub.-- ERROR)                        /no error, licensechecked    {                   out from licenseserver/    fprintf (stderr, &#34;nl.sub.-- request failed - error=    %d/n&#34;, status);     /otherwise, errormessage/    return;    }/   *    *We got a license        /license requestsuccessful/*/alarm (EST.sub.-- LIC.sub.-- RENEWAL.sub.-- TIME);                 /set alarm for license renewal. . .                 time/    Application Runs                 /runs application/. . .status = NL.sub.-- release (req.sub.-- handle);                 /request to release a license/if (status l= NL.sub.-- NO.sub.-- ERROR)    {    fprintf (stderr, &#34;nl.sub.-- release failed - error=                        /otherwise, error    %d/n&#34;, status);     messages/    return;    }. . .intalarm.sub.-- intr ()    {status = NL.sub.-- confirm (reg.sub.-- handle,                   /renew licensing unit withLIC.sub.-- RENEWAL.sub.-- TIME, NULL);                   licensing server//   *    *Verify vendor private information    */    }If (status!= NL.sub.-- NO.sub.-- ERROR)fprintf (stderr, &#34;nl.sub.-- confirm failed - error =                        /otherwise, error%/n&#34;, status);               message/    {         puts (&#34;license renewed&#34;)                        /successful license    }                   renewal/__________________________________________________________________________ 
    
     The sample application given above is accompanied by self-explanatory annotation to the right margin of the codes. Of particular interest are variables code --  funcs.encode.p and code --  funcs.decode --  p. These variables are pointers to the software vendor&#39;s encode and decode routines, repectively. Taking the pointers in the variables, the licensing library can use the pointers to invoke the decoding and encoding routines in the license access module. The three major licensing library routines, request for a license (NL --  request), release a license (NL 13  release) and renew a license (NL --  confirm) invoke the decoding and encoding routines. As discussed earlier, these licensing library routines may be implemented in a variety of manners well known in the art. For example of a license access module, see Appendix 1. 
     In implementing the license access module, the license server becomes merely a bridge to the repository for license tokens. The licensing library coupled to the application performs the procedure of authenticating the license token prior to granting a license and therefore access to run the application. Because the level of security of the system is dictated by the license access module, the software vendors are free to make the license access module as simple or as complex as they desire. In particular, they are free to adopt any of the encryption schemes as part of their encryption routines. If the security mechanism is broken, and the encryption known to others, then the software vendors can easily remedy the situation by releasing a new version of the product with a new license access module. 
     While the present invention has been particularly described with reference to FIGS. 1-4 as well as Appendix 1, and with emphasis on certain language in implementing a method to protect against the unauthorized use of software application in a computer network environment, it should be understood that they are for illustration only and should not be taken as limitation upon the invention. In addition, it is clear that the apparatus and method of the present invention has utility in any application run in a computer network environment. It is contemplated that many changes and modifications may by made, by one skilled in the art, without departing from the spirit and scope of the invention disclosed above. ##SPC1##