The License File
The license file contains information which configures the license servers and describes all the licenses granted from the ISV to your customer. There are 4 basic license types:
counted
uncounted
token
metered
Everything else in the license file is a modification of one of these 4 basic license types. For example, if a counted license has a hostid associated with it, it becomes a nodelocked, counted license. If the counted license has no hostid, it is a floating license. The various attributes modify the basic license types. For example, if a counted license has a share= attribute, then multiple application instances can use a single license. If the license file has counted or metered licenses, it requires a license server, so a HOST and ISV line must be present. If the license file has only uncounted licenses, the HOST and ISV lines are not required.
License Files have 6 types of lines:
Line |
Description |
---|---|
HOST |
Specify the license server host (SERVER is an alias for HOST – see HOST Line) |
ISV |
Specify the ISV’s license server information (DAEMON is an alias for ISV – see ISV Line) |
LICENSE |
Describe license grants from the ISV to your customer (FEATURE is an alias for LICENSE – see LICENSE Line) |
UPGRADE |
Upgrade the version number of some or all LICENSEs, (see UPGRADE Line) |
CUSTOMER |
RLM Cloud only - See: CUSTOMER line |
Comment |
(see next section) |
Applications, License Servers, and License Administration Tools locate the license file using The License Environment.
Note
RLM does not support byte order markers (BOMs) in license files. If a BOM is present in a license file, RLM will not recognize the content.
Order of lines in the license file
In general, the order of lines in the license file does not matter, with the following exceptions:
For an ISV/DAEMON line which specifies a password, all LICENSE/FEATURE lines following the ISV/DAEMON line which do not specify a password will use the password of the ISV/DAEMON line which precedes it. If the ISV/DAEMON line follows the LICENSE/FEATURE line, the password will not apply to that LICENSE/FEATURE.
LICENSE/FEATURE lines are processed in the order they appear in the license file. This means that you can bias the selection of licenses by the order they appear in the license file. For example, if you have licenses for product ABC versions 1.0 and 2.0, and your software requests version 1.0, the license you receive will depend on the order: if the 2.0 license appears first in the license file, and it is available, your application will receive a v2.0 license. If the v1.0 license appears first and it is available, you will receive a v1.0 license.
HOST Line
HOST hostname hostid [tcp/ip port #]
The HOST line specifies which computer the license server is to run on. There is only one HOST line per license file. Note that if a license file contains only nodelocked-uncounted licenses, a HOST line is not required.
The hostname is the standard TCP/IP hostname for the system. This name is not an input to the license key signature algorithm, and thus can be changed at any time.
The hostid is RLM’s idea of the computer’s identification. The hostid is an input to the license key signature algorithm, so it cannot be changed. All licenses in the license file have this hostid as input to their license signatures, so it is important to avoid moving LICENSE lines from one license file to another, as this invalidates them.
The tcp/ip port number is the port which RLM attempts to use for communications. This number can be changed to any available port.
For a description of the various hostids that RLM supports, see RLM Host IDs.
Example:
HOST melody 80b918aa 2700
In this example, the license servers run on host “melody” at TCP/IP port # 2700.
Note
The keyword “SERVER” can be used instead of “HOST”.
ISV Line
Format:
ISV isvname [isv-binary-pathname [options-file-filename [port-number]]] [binary=isv-binarypathname]
[options=options-file-filename] [port=port-number] [password=password-text]
The ISV line specifies an ISV’s license server. There is one ISV line in the license file for every isvname which has licenses in that file. Note that if a license file contains only nodelocked-uncounted licenses for a particular ISV, an ISV line is not required for that ISV.
Parameter |
Required |
Description |
---|---|---|
|
Yes |
The name assigned to the ISV - does not change. |
|
Yes* |
Location of the ISVs license server binary. Can be any accessible location. Not an input to license key signature algorithm so can be changed any time. * Can be omitted if ISV server is in same location as the RLM binary. |
|
No |
Specifies whether an options file will be used (see: The ISV Options File). Specify options file location here, or name the ISV options file isvname.opt and place in same directory as license file. |
|
No |
Specifies port ISV server will use. If omitted, port is allocated dynamically. |
|
No |
Specifies license password applied to all LICENSE or FEATURE lines which follow the ISV line in the license file. If individual LICENSE/FEATURE line has a password, password from LICENSE/FEATURE line is used. |
Any of the optional parameters can be specified by themselves. Also note that any number of the positional parameters can be specified, and optional parameters can be added after the positional parameters.
Note
If you specify the same parameter both as a positional parameter and as a keyword=value parameter, the value of the keyword=value parameter will be used.
Examples:
License server for ISV reprise is located at /home/reprise/reprise, options file is located at /home/reprise/reprise.opt:
ISV reprise options=/home/reprise/reprise.opt binary=/home/reprise/reprise
License server for ISV reprise located at /home/reprise/reprise and ISV server port # specified:
ISV reprise /home/reprise/reprise port=8765
License server for ISV reprise located at /home/reprise/reprise and ISV server binary name /a/b/reprise used instead of /home/reprise/reprise:
ISV reprise /home/reprise/reprise binary=/a/b/reprise
Note
The keyword “VENDOR” can be used instead of “ISV”.
LICENSE Line
Format:
LICENSE isv product version exp-date count [sig=]license-key [optional parameters]
The LICENSE line defines the usage rights to a product. All fields in the license line are case-insensitive (with the exception of short, i.e., less than 62-character, license keys), and none may be modified by the license administrator, with the exception of the parameters whose names begin with the underscore (“_”) character.
Note
The license file parser will reject unknown keywords.
Fixed (positional) parameters
The first 6 parameters are required on every license and are present in the order shown above.
isv
The name of the ISV granting the rights.
product
The name of the product for which license rights are being granted.
version
The highest-numbered product version supported by this license, in the form “N.M”. For example, 1.0, 2.37, or 2006.12. Each RLM license has a version number, of the form “major.minor”. The version in the rlm_checkout() call must be less than or equal to the version in the license for the checkout to succeed. (Note: This comparison is done in the “normal” way, ie, 1.2 is greater than 1.10).
The version can be used in a number of ways:
You could make all your software ask for version 1.0 with all your licenses issued for version 1.0, and the version would never be an issue, unless and until you wanted to obsolete all the old licenses on a new release.
You could put your product’s version number in the rlm_checkout() call, then licenses for an older version of your product will not work with a newer version of the product.
You can use a date-based version. To do this, you might put the year and month of release into the rlm_checkout() call in your application, then when you issue licenses, issue them either for this year and month when your customer’s maintenance period ends.
This allows your customer to use products released on or before the date in the license. Bear in mind that you would need to use the leading 0 in the month, since 2006.2 is greater than 2006.11, which might not be what you intend.
exp-date
The date the license expires, in the form dd-mmm-yyyy, for example, 1-jul-2007. All licenses have an expiration date. If you prefer for your licenses to not expire, you can use the special expiration date of permanent, which never expires (any date with a year of 0 is also non-expiring, e.g. 1-jan-0). The license expires at midnight on the date specified, in other words, it is valid for the entire day of the expiration date.
You can also specify an expiration time, using the Expiration time keyword.
The license expiration date can be either dd-mmm-yyyy (e.g., 01-jan-2023), or it can be formatted entirely numerically as yyyy-mm-dd (e.g., 2023-01-01).
RLM uses a proprietary algorithm to check for clock windback. This algorithm does not access any other computers and has been used in RLM since version 1.0. It is fast but sometimes returns false positives.
count
The number of licenses granted. The count field defines the license type. See the License Models for a discussion of license types and modifiers. The license type is one of:
A positive integer indicates a counted license.
0 or “uncounted” indicates an uncounted license.
“single” means a node-locked, single-use license. single is a special case of a counted license, but it is different from “1”. A license with a count of 1 is a regular counted license and requires a license server. A license with the keyword “single” is a single-use, nodelocked license. This license does not require a license server, and in fact license servers will not process this license. single licenses are a convenient way to issue single-use licenses without the license administrator having to configure a license server.
token, token_bound, and token_unlocked are used to specify a Token-Based License; this license must also have the token=… optional parameter (see Token-Based Licenses). The only optional parameter on a token-based license which is used by RLM is the start date. All other optional parameters are ignored.
Meter indicates a metered license. See Metered Licenses for a complete description of metered licenses.
license-key
This is a digital signature of all the license data, along with the hostid on the HOST line, if present. If a license has a non-zero count, it always requires a HOST line. An uncounted license does not require a HOST line, and even if there is a HOST line, the hostid of the license server is not used in computation of its license-key. The license-key will have “sig=” prepended after the license has been signed by the rlmsign utility.
Note
If the license-key is preceded by sig=, it can be present after any or all of the optional parameters.
Licenses can also have the following optional license modifier attributes:
Locking: Node-locked, Username-locked, or Floating licenses.
RLM can lock a license in a variety of ways:
node-locked (counted or uncounted)
A node-locked license can only be used on a single node, as specified by the hostid of the license. For a description of the available hostids in RLM, see RLM Host IDs.
The hostid in a license can be a hostid list, which means that the license is usable on any of the specified hostids.
A node-locked license can be either counted, uncounted, or “single”. If it is uncounted or single, then the software need only verify that it is executing on the correct computer, and no license server is required. If it is counted, however, a license server is required to maintain a count of licenses currently in use.
Note
While uncounted nodelocked licenses can be served by a license server, single licenses cannot.)
To create a node-locked license, add the keyword hostid=.. at the end of the license line.
username-locked (counted or uncounted)
A license can be locked to a user. This is a special case of a node-locked license, and is accomplished using the hostid user=….
Note
Any white space in a username is converted to the underscore (‘_’) character. Also note that usernames are case-insensitive.
floating
A license can be floating. This license will work anywhere on the network that can communicate with the license server. To specify a floating license, do not put a hostid= keyword on the license.
hostid=hostid-string (used for license locking)
The optional hostid at the end of the line specifies that the licenses can only be used on the specified host. Uncounted licenses always require a hostid. Counted licenses generally do not have a hostid, but it could be present, in which case we would call this license a “node-locked, counted” license. (For a description of the various hostids that RLM supports, see RLM Host IDs.
The hostid on a LICENSE line can be a hostid list. The hostid list is a space-separated list of valid hostids, enclosed in double-quotes. The license can be used on any of the hostids in the list.
The list can contain at most 25 hostids, and can be no longer than 200 characters.
For example, this hostid list would allow the license to be used in any of the 4 specified environments:
hostid="ip=172.16.7.200 12345678 rlmid1=83561095 user=joe"
Other optional license parameters
Activation Key used to create this license
akey=activation-key
When requested in RLM Activation Pro, the license generator will include the akey= keyword with the activation key used to fulfill the license. The maximum length of the activation key is 40 characters, including the “akey=” part.
Caching Licenses on the Client Node
client_cache=seconds
When specified, the license will be held by the license server for “seconds” seconds, in exactly the same way as a “minimum_checkout” attribute would. However, on the client side, license data will be cached which can be used by subsequent checkout requests. The maximum cache time is one hour (3600 seconds). Note that the client-side caching will be ineffective if not enabled with rlm_isv_cfg_enable_client_cache() in rlm_isv_config.c, however the server will still hold the license checked-out in this case.
You can think of this as a very short-term, automatic, roam.
You should note that only licenses which have a sharing attribute will be usable as cached licenses. In other words, if the license has a “share=u” attribute, and the same user attempts a checkout, the cached license can be used. If the “share=” attribute is missing, no checkouts of the cached license will be possible. Also note that the host attribute is matched automatically, by definition, since the license is being used on the same computer.
Your customer can modify the value of client_cache between 0 and 2x the value you specify with the license administration CLIENT_CACHE option. See CLIENT_CACHE in the License Administration manual for more details.
Disable Computing Environments
disable=”computing-environment-list”
disable= specifies that clients running in the appropriate computing environment cannot use this license.
computing-environment-list is a list of different computing environment descriptions; if the application is running in any of these environments, the license will not be usable.
computing-environment-list is a space-separated list of the following environments. Put the list in quotes if more than one item is specified.
Environment |
Description |
---|---|
TerminalServer |
Disable use on Windows Terminal Server and Remote Desktop. |
TerminalServerAllowRD |
Disable use on Windows Terminal Server but allow use via Remote Desktop. |
VM |
Disable use on Virtual Machines. |
Disabling TerminalServer is most useful for node-locked, uncounted licenses, if you do not want to allow multiple network users running remote sessions to make use of a single license. Note that you can’t disable both TerminalServer and TerminalServerAllowRD – they are mutually exclusive.
Disabling Virtual Machines is useful for node-locked, uncounted licenses in order to prevent these licenses from being used on multiple virtual machines with the same hostid.
Example:
disable=TerminalServer
Expiration time
exptime=hh:mm
Beginning in RLM v14.1, a license can be set to expire at a particular time on the expiration day. If the license includes an “exptime” keyword, the license will expire at this time on the expiration date rather than at midnight. If the exptime keyword isn’t present, the license expires at midnight, as it has always done in previous versions of RLM. The expiration time, like the expiration date, is in local time either for the client (for nodelocked licenses) or on the server (for floating licenses).
Hold time and Minimum Checkout
hold=N and min_checkout=n
By specifying hold=N in the license, the license will be held for N seconds after the application exits or checks the license back in via rlm_checkin(). hold is typically used in the case of licenses that have a very short duty-cycle, in order to provide a “fairer” measure of concurrent usage.
min_checkout specifies that a license is to be “held” checked-out by the license server after the application performs a check-in call or exits, only if the license did not remain checked out for the minimum interval specified by n. n must be a positive integer, greater than 0. The license will remain checked-out such that the total checkout time is n seconds. min_checkout is typically used in the case of licenses that have a very short duty-cycle, in order to provide a “fairer” measure of concurrent usage.
hold and min_checkout both perform this function in slightly different ways. hold always keeps the license checked out for the specified amount of time, whereas min_checkout keeps the license checked out for an additional time only if the license was checked back in by the application before the specified minimum time.
Note
Both hold and min_checkout time specifications are ignored for any license which is roaming. Also note that hold time is processed by the license server, so it has no effect on unserved nodelocked licenses.
License ID
_id=nnn
Any License Administrator can add _id=nnn to a license. “nnn” is a positive integer, less than 231, which is used to identify the license. If no _id= keyword is present, the id of the license is 0. The id of a license can affect license pooling as follows: A license that doesn’t specify an id (or specifies 0), will pool with any other license that it would normally pool with. However, a non-zero id will only pool with the same ID# (assuming all the other attributes make it eligible to pool).
In addition, beginning in RLM v12.0 licenses are sorted (within a license file) in the order of the _id keyword. Licenses without _id keywords will remain unsorted (in their original order) at the end of all the licenses with _id keywords, which are sorted in increasing numerical order. This sort is done prior to REPLACE processing.
Other than license pooling and sorting, the id can be used to select which licenses to apply an option (such as RESERVE). The id is not used in the computation of the license signature, and as such can be added or changed by the License Administrator.
License Issue Date
issued=dd-mmm-yyyy
If issued=dd-mmm-yyyy is specified in the license, this license issue date will be used in the computation of license replacement. If no issue date is present, the license start date is used. If neither is present, then this license will be replaced by any license specifying a replace= keyword with this license’s product name.
Maximum Roam Count
max_roam_count=num
A Roaming license is a license that is checked out from the license server and used on a disconnected system. During this time, the license server holds the license checked-out just as if the system were still connected to the license server. Roaming licenses are only allowed if you issue your customer an rlm_roam license that is valid on the disconnected system.
If you do not specify max_roam_count in an individual license, RLM allows the total number of licenses to be roamed. Setting max_roam_count to a number less than the total number of licenses will cause the server to only allow that number of licenses to roam. To disable roaming on a particular license, set max_roam_count=0 for that license.
Note
The ISV-supplied max_roam_count attribute is equivalent to the license administrator MAX_ROAM_COUNT option, except that max_roam_count in the license is always enforced, rather than being optional.
Maximum Roam Days
max_roam=days
If you do not specify max_roam in an individual license, RLM limits the maximum number of days that a license can roam to 30 days. To disable roaming on a particular license, set max_roam=-1 for that license.
Specifying max_roam on the rlm_roam license itself will potentially lower the max_roam of all products. The effective max_roam is the minimum of the value specified in the license itself (or the default value) and the value in the rlm_roam license. So, for example, if you set max_roam=20 on the rlm_roam license, then all licenses without a max_roam will be limited to 20 days. If you set max_roam=40 on the rlm_roam license, then only individual licenses with max_roam set to greater than 40 days will be affected.
Metered licenses
Metered licenses are described in detail in Metered Licenses. Metered licenses use the following 4 keywords:
meter_counter=counter#
meter_dec=decrement_amount
meter_period=period_in_minutes
meter_period_dec=periodic_decrement_amount
Named User licenses
named_user[=num] or named_user=”num min_hours”
Named User Licenses allow the ISV to require that a list of users be created who can use the license(s). The number of users in the list can be less than, equal to, or greater than the number of licenses available. Once a user is added to the list, they can be deleted, but once deleted, they must remain off the list for a minimum number of hours (24 hours by default).
To create a named user license, add the named_user keyword to the LICENSE:
named_user |
Require the same # of users as there are licenses. |
named_user=n |
Require n users to be named. |
named_user=”n min_hours” |
Require n users, and specify the minimum number of hours. |
With a named_user license, the license server can construct the list of users automatically as license checkouts occur, or the list can be entered via the RLM web interface by the license administrator. If entered manually, either individual users or GROUP names (as defined in the ISV server options file) can be used.
named_user licenses utilize the INCLUDE functionality of the license server, and do not need the entire list of num users specified before the licenses can be used. In fact, no users need to be specified since the license server will add users who do not appear on the list if the current list size is less than the number of allowed named users.
Once a user is added to the list, they can be removed at any time. However, once removed, a user cannot be placed back on the list until they have been off the list for min_hours hours (default: 24 hours).
Note
Different named_user licenses will never be combined into one license pool, even if all other license parameters match.
named_user utilizes the INCLUDE list in the server, so any INCLUDE specification for this license will be ignored.
named_user is processed by the license server, so it has no effect on unserved nodelocked licenses.
usernames are case-insensitive, so user “Joe” is the same as user “joe”.
License Options
options = options_list
The options specification is used to encode options for the product license. The options field is a string (up to 64 characters in length) which is completely defined by the ISV. The options are used to calculate the license signature, but otherwise are unused by RLM. You can retrieve the options from a license with either the rlm_product_options() or the rlm_license_options() call.
Note
If the string contains embedded white space, it must be enclosed within double quotes.
You can specify a required substring in the options field with the rlm_set_attr_req_opt() call. See rlm_set_attr_req_opt() for more information.
License Password
_password = password-string
A license password restricts access to this license to requests which have specified the same password-string. The password-string is specified either with the rlm_set_attr_password() call, or (for the command-line utilities) with the RLM_LICENSE_PASSWORD environment variable, or in the RLM web interface. The password string must be <= 32 characters.
Note
The license password does not factor into the license signature, and hence can be changed at any time after the license is signed. Also note that license passwords only work with served licenses, not nodelocked, uncounted or single licenses in local license files.
If a request (checkout or status) is made for a license which contains a password, and the request does not specify a matching password, the license server will return RLM_EL_NO_SERV_SUPP (for a checkout request) or no data (for a status request). This prevents a user from knowing that a license exists and attempting to guess the password.
The license password can be specified on the ISV line with the password=password-text optional field. If specified on the ISV line, the password applies to all LICENSE or FEATURE lines which follow the ISV line in the license file. If any individual LICENSE/FEATURE line specifies a password, the password from the LICENSE/FEATURE line is used.
Platform Restrictions
platforms=platform_list
RLM allows you to specify one or more platforms on which the application must be running. If a platforms=platform-list specification is contained in the license, the computer on which the application is running must be one of the specified platforms.
To specify one or more platforms, create a list of platform names. The platform-list consists of a list of RLM-defined platform names, which consist of a machine architecture and an operating system version/revision. Specify platforms= as a space-separated list of platform names with the trailing OS revision removed, as shown in the following table.
Note
If you specify more than one platform, enclose the entire string in double quotes (e.g., platforms=”sun_s x86_w sun64_s”).
Also note that while you can include the trailing revision number, it will not be used by RLM in any comparisons, so including it may lead to confusion.
Platform |
RLM Platform name |
string to use in platforms= |
---|---|---|
HP//UX on PA-Risc, 32-bit |
hp_h1 |
hp_h |
HP//UX Itanium, 64-bit |
ia64_h1 |
ia64_h |
IBM AIX, 32-bit |
ibm_a1 |
ibm_a |
IBM AIX, 64-bit |
ibm64_a1 |
ibm64_a |
IBM Power Linux, 64-bit |
p64_l1 |
p64_l |
Linux Intel, 64-bit |
x64_l1 |
x64_l |
Linux ARM, 64-bit |
arm64_l1 |
arm64_l |
Linux, 32-bit |
x86_l2 |
x86_l |
Linux, 64-bit |
x64_l1 |
x64_l |
Linux Itanium, 64-bit |
ia64_l2 |
ia64_l |
Linux PPC, 64-bit |
ppc64_l1 |
ppc64_l |
Mac Arm, 64-bit |
arm64_m2 |
arm64_m |
Mac Intel, 32-bit |
x86_m1 |
x86_m |
Mac Intel, 64-bit |
x64_m2 |
x64_m |
Mac PPC, 64-bit |
ppc_m1 |
ppc_m |
NetBSD, 32-bit |
x86_n1 |
x86_n |
Solaris Sparc , 32-bit |
sun_s1 |
sun_s |
Solaris Sparc, 64-bit |
sun64_s1 |
sun64_s |
Solaris, 64-bit |
x64_s1 |
x64_s |
Windows Intel, 32-bit |
x86_w3, x86_w4 |
x86_w |
Windows Intel, 64-bit |
x64_w3, x64_w4 |
x64_w |
Replacement Licenses
replace[=product_list]
In order to render ineffective one or more licenses which you have already issued, use the replace[=product-list] option in the new license. replace= causes RLM to ignore the “replaced” license(s). If product_list is the single character ‘*’, all licenses will be replaced.
Note
If you specify replace, you must also specify either start= or issued=.
replace operates as follows:
Licenses from the product_list will be replaced (all licenses if product_list is ‘*’). If product-list is not specified, then the product name of the license containing the replace keyword will be the only product to be replaced.
If the license with the replace keyword specifies an issued= date, then this is the “replacement date”.
If the license with the replace keyword does not have an issued date, then the “replacement date” is the start date of the license.
If the license contains neither an issued date nor a start date, no licenses will be replaced.
Any license in the list of products with an issued date prior to the replacement date will be replaced.
Any license in the list of products which does not have an issued date, but which has a start date prior to the replacement date will be replaced.
Finally, any license in the list of products with neither an issued nor a start date will be replaced.
EXAMPLE: To replace products “a” and “b”, use: replace=”a b” in the license.
Warning
If two replace licenses have the same issued/start date, they will both be active after the replace determination has been made.
Effective Start Date
start=dd-mmm-yyyy
If start=dd-mmm-yyyy is specified in the license, the license cannot be used before the specified date.
License Soft Limits.
soft_limit=n
A license can have a soft_limit that is lower than its count of available licenses. Once usage exceeds the soft_limit, checkout requests will return the RLM_EL_OVERSOFT status instead of a 0 status.
Note
When the license server pools separate licenses into a single license pool, the soft_limit of each license is added to obtain the pool’s soft_limit. Licenses which do not specify a soft_limit use the license count as their soft_limit.
Soft limits are processed by the license server, so they have no effect on unserved nodelocked licenses.
User, Host-based or Personal licenses.
user_based[=n] host_based[=n] personal (RLM Cloud only)
User-based licenses allow the ISV to require that the specified number of licenses (or all licenses) must be reserved to users (with RESERVE lines) in the options file. Note that the special user ‘*’ does not count as being reserved. If fewer than the required number of licenses are reserved, the license server will log an error and discard the license. Also note that licenses reserved to a GROUP are not counted, otherwise the license administrator could simply bypass the intent of this license by creating a GROUP consisting of all their users. Thus, all reservations must be to individual users.
Similarly, host-based licenses allow the ISV to require that the specified number of licenses (or all licenses) must be reserved to hosts (with RESERVE lines) in the options file. Note that the special host ‘*’ does not count as being reserved. If fewer than the required number of licenses are reserved, the license server will log an error and discard the license. Also note that licenses reserved to a HOST_GROUP are not counted, otherwise the license administrator could simply bypass the intent of this license by creating a HOST_GROUP consisting of all their hosts. Thus, all reservations must be to individual hosts.
Personal licenses (which are only available on RLM Cloud servers) allow the ISV to require that the authorized users be preassigned with the RLM Cloud portal GUI.
To create either user-based, host-based, or personal licenses, add the appropriate keyword to the LICENSE:
user_based[=nnn] |
For user-based licenses. |
host_based[=nnn] |
For host-based licenses. |
personal |
For personal licenses. |
If the optional “=nnn” is specified, only “nnn” of the total number of licenses need to be reserved, otherwise all licenses must be reserved.
For personal licenses, no count is specified, the personal user count is the license count.
Note
user_based and host_based are processed by the license server, so they have no effect on unserved nodelocked licenses.
Timezone Restrictions
timezone=timezone-spec
RLM allows you to specify one or more timezones in which the applications must be running. If a timezones=timezone-spec specification is contained in the license, the computer on which the application is running must be set to one of the specified timezones.
To specify one or more timezones, create a bitmask of the desired timezones, expressed as hours west of GMT:
Bit 0 - GMT Bit 1 - 1 hour west of GMT Bit 2 - 2 hours west of GMT … Bit 23 - 23 hours west of GMT (or 1 hour east of GMT)
This bitmask should be represented as a hex number. So, for example, to allow your application to run in the GMT timezone only:
timezone=1
To allow your application to run in timezone 8 (PST):
timezone=100
To allow your application to run in timezones 5-8 (continental USA):
timezone=1E0
Minimum rlmremove interval
min_remove=n
min_remove specifies the lowest value, in seconds, a License Administrator can set the MINREMOVE value for a license.
If not specified in the license, the RLM default of 120 seconds (2 minutes) is used.
If min_remove is set to -1, then rlmremove (and the Remove button in the RLM web interface) is disabled on this license.
Note
min_remove is processed by the license server, so it has no effect on unserved nodelocked licenses.
Minimum Timeout specification
min_timeout=n
A license administrator can specify a TIMEOUT value for any idle license. If the license remains idle (i.e.. does not communicate with the license server) for this amount of time, the license server performs an automatic check-in of the license and informs the application (if it is still running).
min_timeout=n specifies the lowest value a license administrator can set for the timeout value for a license. If not specified in the license, the RLM default minimum of 3600 seconds (1 hour) is used.
Note
Timeout is processed by the license server, so it has no effect on unserved nodelocked licenses.
Additional Fields
The following fields are not used by RLM, but are present to identify licenses, or can be used in your application to present to the user:
contract=contract-info
contract= is meant to hold the customer’s purchase order or software agreement number. This can be used to display to the user to validate a support contract, etc. It is not used by RLM. Maximum of 64 characters.
customer=who
customer is to identify the customer of the software. This can be an added incentive to keep honest users honest, as it is unlikely that Mega South-East Airlines would want to use a license that was issued to Main St. Bank., for example. customer is not used by RLM. Maximum of 64 characters.
issuer=who
issuer= is used to identify the organization which issued the license. It is not used by RLM. Maximum of 64 characters.
_line_item=”descriptive_text”
The _line_item field is used to map a particular product to the item purchased. This field will be logged into the report log at the start when all products supported are logged, so that a report writer can generate reports based on purchased products, as opposed to product names used for licensing purposes. If the descriptive text contains spaces, it should be enclosed in double-quote (”) characters. The contents of the _line_item field can be modified (or the field can be added) without invalidating the license signature. Maximum of 64 characters.
type=type-spec
type= is used to identify the type of license. type-spec is a string containing one or more of the values:
“beta”
“demo”
“eval”
“subscription”
(For example, type=”beta eval” or type=”eval”. The contents of the license type field are retrieved by the rlm_license_type() call (see rlm_license_XXXX()). type is not used by RLM.)
Field |
Type |
max data length (excluding keyword=) or value range |
---|---|---|
isv |
string |
10 characters |
product |
string |
40 characters |
version |
string, in the form nnn.mmm |
10 characters |
exp-date |
string of the form dd-mmm-yyyy |
11 characters |
count |
positive integer |
231 - 1 |
hold |
positive integer - seconds |
231 - 1 |
host_based |
int |
231 - 1 |
hostid (single) |
string |
75 characters |
hostid (list) |
space-separated, quoted string |
200 characters, max of 25 hostids |
hostname |
string |
64 characters |
issued |
string of the form dd-mmm-yyyy |
11 characters |
_line_item |
string – license administrator defined |
64 characters |
max_roam |
non-negative integer - days |
231 - 1 |
max_roam_count |
non-negative integer - count |
231 - 1 |
min_checkout |
positive integer - seconds |
231 - 1 |
min_remove |
integer - seconds (-1 for no remove available) |
231 |
min_timeout |
positive integer - seconds |
231 - 1 |
options |
string |
64 characters |
password |
string |
32 characters |
personal |
int |
231 - 1 |
platform |
string |
80 characters |
share |
enumerated |
3 (“uhi”) + :integer |
soft_limit |
int |
231 - 1 |
start |
string of the form dd-mmm-yyyy |
11 characters |
timezone |
int |
bitmap with bits 0-23 set |
user_based |
int |
231 - 1 |
contract |
string – unused by RLM |
64 characters |
customer |
string – unused by RLM |
64 characters |
issuer |
string – unused by RLM |
64 characters |
type |
string - consisting of “demo” “eval” “beta” and/or “subscription” |
14 characters |
Valid LICENSE Option Configurations
Only certain combinations of license types and options are valid. The following table indicates which options are valid for various license types. An X in a cell indicates that the attribute on the left is valid with the main license type in the column; empty cells indicate unsupported option configurations. All license administrator editable options (beginning with “_”) can be added to any license type.
License Type → |
Floating |
Nodelocked |
Single |
Uncounted |
Token |
Metered |
---|---|---|---|---|---|---|
Attributes ↓ |
||||||
HOST/ISV line |
required |
required |
ignored |
X |
X |
required |
UPGRADE-able |
X |
X |
X |
X |
||
contract |
X |
X |
X |
X |
X |
X |
customer |
X |
X |
X |
X |
X |
X |
disable |
X |
X |
X |
X |
X |
X |
hold |
X |
X |
when served |
|||
host_based |
X |
|||||
hostid |
required |
required |
required |
X |
X |
|
issued |
X |
X |
X |
X |
X |
X |
issuer |
X |
X |
X |
X |
X |
X |
max_roam |
X |
|||||
max_roam_count |
X |
|||||
min_checkout |
X |
X |
||||
min_timeout |
X |
X |
X |
X |
||
named_user |
X |
X |
||||
options |
X |
X |
X |
X |
X |
X |
platforms |
X |
X |
X |
X |
X |
X |
replace |
X |
X |
X |
X |
X |
X |
start |
X |
X |
X |
X |
X |
X |
soft_limit |
X |
X |
||||
share |
X |
X |
||||
timezone |
X |
X |
X |
X |
X |
X |
type |
X |
X |
X |
X |
X |
X |
user_based |
X |
X |
Examples
LICENSE reprise write 1.0 permanent uncounted 987435978345973457349875397345
hostid=IP=172.16.7.3
LICENSE reprise calc 1.0 1-aug-2008 5 987435978345973457349875398749587345987345
In the first example, the write product is licensed to a host with an IP address of 172.16.7.3. This is a non-expiring, node-locked, uncounted license. The second example is for 5 licenses of product calc which expire on the first of August 2008. The first license would not require a HOST line, whereas the second one would.
Note
The keyword “FEATURE” can be used in place of “LICENSE”.
Note
Licenses are always additive, in other words, the counts on 2 license lines of the same product/isv/version/hostid would be added together by the license server and the total number of licenses would be available.
UPGRADE Line
Format:
UPGRADE isv product from-version to-version exp-date count [sig=]upgrade-key [optional
parameters]
The UPGRADE line defines an upgrade from an older version (from-version or higher) to a newer version (to-version) of an existing product. All fields in the upgrade line are case-insensitive (with the exception of short, i.e., less than 62-character, license keys), and none may be modified by the license administrator with the exception of the parameters whose names begin with an “_” character.
We refer to the license specified by the UPGRADE line as the upgrade license, and the license it operates on as the base license.
An UPGRADE license will convert count licenses of product of version from-version or higher into to-version.
Note
An UPGRADE license will never operate on a base license that is >= to-version.
In order for the upgrade to be performed, certain parameters of the upgrade license must match the parameters of a base license in order for that license to be eligible to be upgraded.
Certain licenses can never be upgraded. In particular, token-based licenses (the token definitions themselves) will never be upgraded. Also, named-user and metered licenses are not eligible for upgrades.
In order for a license to be upgraded, the following parameters must match on the base license and the upgrade license:
License Disable specification
License Options
License Sharing specification (share and max_share)
License Timezone specification
License Platform list
Both licenses must have the same counting type: counted, uncounted, or single
License node-locked hostid
Both licenses must be user-based or host-based (or neither)
Note
This list is the same as the criteria for a license server combining multiple licenses into a license pool.
If the license is eligible for an upgrade, count licenses of the base license will be transformed into to-version licenses. An upgrade can be performed on multiple base licenses, until the count on the upgrade license is exhausted.
Note
License “replace” processing is done (both in client and server) before upgrade processing. This means that an upgrade license should not specify replacement of the base license which it is going to upgrade, because the base license will no longer exist when the upgrade is done.
There are 3 upgrade cases:
Fewer base licenses than upgrade licenses - in this case, the extra upgrade licenses are “wasted”, and the license server issues a warning. All base licenses are upgraded.
Same number of base licenses and upgrade licenses - all base licenses are upgraded.
Fewer upgrade licenses than base licenses - in this case, count licenses are upgraded, and the remaining base licenses remain at their old version.
The 3rd case above is the most useful - if you are upgrading all instances of an existing license, a replace option on a new license will do this just as well. The only advantage to the upgrade license in the first two cases is that the base license is required, i.e., the upgrade license, by itself, grants no rights.
When a license is upgraded by the license server, the new licenses will have their parameters modified as follows. All other license parameters will be the same as the base license:
Field |
Result for Served counted (or uncounted) licenses |
Result for Unserved single or uncounted licenses |
---|---|---|
exp-date |
earlier date is used |
earlier date is used |
hold |
maximum of the 2 values |
|
max_roam |
minimum of the 2 values |
|
min_checkout |
maximum of the 2 values |
|
min_remove |
maximum of the 2 values |
|
min_timeout |
maximum of the 2 values |
|
soft_limit (upgrading all) |
Larger of 2 deltas from license count is used. |
|
soft_limit (partial upgrade) |
Upgrade soft limit is preserved for the new version, base license soft limit delta is preserved (minimum value 0) for the old version. |
|
user_based, host_based (upgrading all) |
If licenses have a specification, the value closest to the license count is used . |
|
user_based, host_based (partial upgrade) |
If licenses have a specification, upgrade spec is preserved for the new version; base license spec delta (countuser_based) is preserved (minimum value 1) for the old version. |
|
contract |
If base license is empty, use upgrade license. On partial upgrade, if upgrade license is empty, use value from base license for the new version. |
If base license is empty, use upgrade license. |
customer |
If base license is empty, use upgrade license. On partial upgrade, if upgrade license is empty, use value from base license for the new version. |
If base license is empty, use upgrade license. |
issuer |
If base license is empty, use upgrade license. On partial upgrade, if upgrade license is empty, use value from base license for the new version. |
If base license is empty, use upgrade license. |
type |
If base license is empty, use upgrade license. On partial upgrade, if upgrade license is empty, use value from base license for the new version. |
If base license is empty, use upgrade license. |
Fixed (positional) parameters
The first 7 parameters are required on every upgrade line and are present in the order shown above.
isv
The name of the ISV granting the rights.
product
The name of the product for which license rights are being upgraded.
from-version
The lowest-numbered product version which is eligible for an upgrade, in the form “N.M”.
For example, 1.0, 2.37, or 2006.12
to-version
The highest-numbered product version supported by the license once it is upgraded, in the form “N.M”.
For example, 1.0, 2.37, or 2006.12
exp-date
The date the upgrade expires, in the form dd-mmm-yyyy, for example, 1-jul-2007. A non-expiring upgrade can be specified with either a year of “0” (i.e., “1-jan-0”), or simply the word “permanent”.
count
The number of licenses to be upgraded. 0 or uncounted means an uncounted, node-locked license is to be upgraded. uncounted and 0 are 100% equivalent.
single means a node-locked, single-use license is to be upgraded. single is different from 1. See LICENSE Line above for more information.
token, token_locked, token_bound and token_unlocked are not allowed in an UPGRADE license. All other optional parameters are ignored.
Warning
The keyword token_locked was deprecated in v12.4 and replaced with token_bound. Licenses with token_locked keywords will continue to operate, but they will not be locked to the server’s hostid).
upgrade-key
A digital signature of all the upgrade data, along with the hostid on the HOST line, if present. If an upgrade license has a non-zero count, it always requires a HOST line. An upgrade to an uncounted license does not require a HOST line, and even if there is a HOST line, the hostid of the license server is not used in computation of its upgrade-key. The upgrade-key will have “sig=” prepended after the license has been signed by the rlmsign utility.
Note
If the upgrade-key is preceded by sig=, it can be present after any or all of the optional parameters.
Optional Parameters
Optional parameters are sometimes present in a license and can be present in any order. Optional parameters are allowed only once in an UPGRADE line. The syntax and meaning of optional parameters for the UPGRADE line are identical to the same parameters for the LICENSE line. Note that token and named_user are not allowed on an UPGRADE line. See LICENSE Line for information on the optional parameters.
Example:
LICENSE reprise write 1.0 permanent 5 sig=.....
UPGRADE reprise write 1.0 2.0 1-aug-2015 5 sig=.....
In this example, the 5 licenses of the write product have been upgraded from v1.0 to v2.0.
Note
This license file would require a HOST line, since the licenses are counted.
CUSTOMER line
CUSTOMER customer-name isv=isvname server=server-name port=port# password=yourpw
The CUSTOMER line, used for the client side of RLM Cloud-served licenses only, is used to identify the correct license server for a particular customer.
customer-name
Your customer’s assigned Customer name.
isvname
Your ISV name.
server-name
The fully qualified hostname of the RLM Cloud license server machine.
port#
Either 5053 for normal RLM communications, or for HTTPS transport, 443).
yourpw
Your assigned password for this server.
Note
HTTPS support must be enabled by your ISV to be effective. Please consult with your ISV to see if HTTPS support is available.
Example:
CUSTOMER yourco isv=reprise server=ls423.rlmcloud.com port=5053 password=xyz
isvname
Your ISV name.
The License Environment
All software that uses RLM attempts to read a license file or communicate with a license server. The specification of the license file or the license server is done with the license environment.
If the software is ISV-specific (e.g., an application program), the first place that is checked is any license file or port@host specified in the environment variable ISV_LICENSE (if it is defined), where ISV is name of the ISV (e.g., REPRISE_LICENSE).
If ISV_LICENSE is not defined (in the case of ISV software), or for generic software (RLM utilities, the RLM server) the path specified by the environment variable RLM_LICENSE is checked, if RLM_LICENSE is defined.
If neither environment variable is defined, the program’s default location for the license is checked next. In the case of the RLM utilities and the RLM server, this is any file ending in .lic in the current directory. Note that the RLM utilities will substitute the path specification from a -c option in place of the current directory.
Finally, any .lic file in the directory containing the binary will be checked.
The format of the environment variable (RLM_LICENSE or ISV_LICENSE) is:
license_spec1
or
license_spec1:license_spec2:license_spec3: .... :license_specN
license_spec1;license_spec2;license_spec3; .... ;license_specN
where:
license_spec is a license specification of the form:
port@host - or -
license_file_pathname - or -
directory pathname (containing license files, all of which are added to the list) - or -
<actual text of license>
Note
The separator character is ‘:’ for Unix systems and ‘;’ for Windows systems.
Note
The license file cannot be placed in a path where any component of the pathname contains the ‘@’ character.
Example
On Unix/Mac:
% setenv RLM_LICENSE 1700@myhost:/home/reprise/reprise.lic
On Windows:
C:\ set RLM_LICENSE=1700@myhost:/home/reprise/reprise.lic
In this example, the server at port 1700 on host “myhost” is checked first, then if the request is not satisfied, the license file at /home/reprise/reprise.lic is used. Note that this search order may be modified if the environment variable RLM_PATH_RANDOMIZE is set.
Example 2
% setenv RLM_LICENSE 1700@myhost:<LICENSE isv prod1 1.0 1-jan-09 uncounted hostid=any
key="1234...">
This example specifies the license for “prod1” directly in the environment variable, in addition to using the server at port 1700 at host “myhost”.
On Windows, you can also set the environment variable via the control panel using these steps:
Go to Control Panel->System (or Control Panel->System and Security)
Click on “Advanced System Settings”
Click on “Environment Variables”
Enter RLM_LICENSE as the environment variable name and the license file directory as the value
Note
Beginning in RLM v14.2, white space is trimmed from the start and end of the license environment variable value.
Note
Beginning in RLM v15.1, uppercase ISV_LICENSE can be used as well as isv_LICENSE on case-sensitive file systems. In the case that both are defined, the uppercase ISV_LICENSE will be used.
Comments in license files
Lines beginning with ‘#’ are treated as comments and not interpreted by RLM. Comments may be added to a license file without invalidating the signatures of licenses, but should not be added between the lines of a multiple-line license. Here is an example:
Note
Prior to RLM v9.3, the comment character was not strictly required on comment lines. With improved error checking in 9.3 however, the comment character is required.
Special License Names
Any product name beginning with “rlm_” is reserved to Reprise Software.
The product name rlm_roam is treated specially by RLM. rlm_roam indicates that roaming has been enabled by an ISV. If an ISV issues an rlm_roam license, then roaming is enabled on any computer which is able to check out the rlm_roam license while in a disconnected state.
Legal characters in the license file
In general, all license file fields are white-space delimited, meaning that no data item can contain embedded spaces, tabs, newlines or carriage returns. In addition, the following six characters are illegal in data items in the license (and options) file except as noted below: “<”, “>”, “&”, single quote (‘), back-quote (`) and double-quote (“).
As of RLM v12.2, “<”, “>”, “&”, single quote (’) and back quote (`) are legal characters in the customer field.
ISV license names cannot begin with the characters “rlm_”.
Note
All lines in license files as well as option files (RLM or ISV) must be shorter than 1024 characters. Anything over 1024 characters will be truncated.
Everything in the license file is case-insensitive, with the following three exceptions:
isv-binary-pathname on ISV lines [Case-sensitive on Unix systems only]
options-file-filename on ISV lines [Case-sensitive on Unix systems only]
Short (~62-character) license keys (keys with bits/character of 6 - see Creating Licenses)
Note
Any time RLM processes a username, it will replace any white space in the name with the underscore ‘_’ character. This is true for usernames used as hostids, in server option files, or passed between client and server. Also note that usernames are case-insensitive – they are converted to all lowercase in the license server.
The following sections describe each of the three types of license file lines (HOST Line, ISV Line, LICENSE Line).