Adobe CS5 licence management definitions

mintzd01
New Contributor III
New Contributor III

Hi

I am having a few issues trying to manage a site that uses cs5 design standard and design premium.

3 users have premium and the rest have standard.

When entering the licence definitions I run into a problem.

Standard only has photoshop12.0.4, Illustrator and indesign 7.0.4.553
Premium also has photoshop 12.0.4 illustrator and indesign 7.0.4.553

Therefore when licence inventory runs it reports that certain macs run standard and premium.

Is there a way around this? Am I missing something?

Many thanks for any help in advance.

Daniel

11 REPLIES 11

alplatt
New Contributor

Hi Daniel,

there should be pre defined definitions in the JSS. If not you can download and install the pre set .xml templates from the Jamf site.

Regards

Al

talkingmoose
Moderator
Moderator

SWID Tags (Software ID Tags) have gotten very little attention but they have the potential to be a huge boon for managing licensing.

All Adobe CS4 and higher products include SWID Tags. These are simple XML files installed at the same time you install a product such as Design Standard, Design Premium, standalone Photoshop, etc.

They contain information such as a unique number based on your license key (not the key itself), the exact name of the product installed, the version of the product installed, unique creator/developer name and more.

Adobe CS5 and higher products install their SWID Tags in /Library/Application Support/regid.1986-12.com.adobe.

Adobe CS4 products install their SWID Tags in /Users/Shared/Adobe/ISO-19770/.

The file name for Adobe CS5 Design Standard looks like this:

regid.1986-12.com.adobe_DesignSuiteStandard-CS5-Mac-GM-en_US.swidtag

Its contents look like this:

<?xml version="1.0" encoding="utf-8"?>
<swid:software_identification_tag xsi:schemaLocation="http://standards.iso.org/iso/19770/-2/2008/schema.xsd software_identification_tag.xsd" 
     xmlns:swid="http://standards.iso.org/iso/19770/-2/2008/schema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<!--Mandatory Identity elements -->
<swid:entitlement_required_indicator>true</swid:entitlement_required_indicator>
<swid:product_title>Adobe Creative Suite 5 Design Standard</swid:product_title>
<swid:product_version>
    <swid:name>5.0</swid:name>
    <swid:numeric>
        <swid:major>5</swid:major>
        <swid:minor>0</swid:minor>
        <swid:build>0</swid:build>
        <swid:review>0</swid:review>
    </swid:numeric>
</swid:product_version>
<swid:software_creator>
    <swid:name>Adobe Systems Incorporated</swid:name>
    <swid:regid>regid.1986-12.com.adobe</swid:regid>
</swid:software_creator>
<swid:software_licensor>
    <swid:name>Adobe Systems Incorporated</swid:name>
    <swid:regid>regid.1986-12.com.adobe</swid:regid>
</swid:software_licensor>
<swid:software_id>
    <swid:unique_id>DesignSuiteStandard-CS5-Mac-GM-en_US</swid:unique_id>
    <swid:tag_creator_regid>regid.1986-12.com.adobe</swid:tag_creator_regid>
</swid:software_id>

<swid:tag_creator>
    <swid:name>Adobe Systems Incorporated</swid:name>
    <swid:regid>regid.1986-12.com.adobe</swid:regid>
</swid:tag_creator>
<!--Optional Identity elements -->
<swid:license_linkage>
    <swid:activation_status>serialized</swid:activation_status>
    <swid:channel_type>UNKNOWN</swid:channel_type>
    <swid:customer_type>UNKNOWN</swid:customer_type>
</swid:license_linkage>
<swid:serial_number>954793454764480863505611</swid:serial_number>
</swid:software_identification_tag>

I'm not a sed guru but with a bit of searching on Google I found an example that would help me parse the product name from the information in the file:

sed -n -e 's/.*<swid:product_title>(.*)</swid:product_title>.*/1/p' /Library/Application Support/regid.1986-12.com.adobe/regid.1986-12.com.adobe_DesignSuiteStandard-CS5-Mac-GM-en_US.swidtag

and return: Adobe Creative Suite 5 Design Standard

Create extension attributes for both CS5 Design Standard and CS5 Design Premium and you'll know the exact products that are installed on your machines. With a bit of creative scripting you could probably get more detailed.

talkingmoose
Moderator
Moderator

This actually turned out to be a good exercise for my own use.

The following extension attribute gathers Adobe CS4 or higher products that are installed on a Mac. A "product" may be a suite or an individual application. Even if you've installed a single application from a suite this EA will still report the suite as being the product installed.

The distinction is important when determining which licenses you're actually using compared to which applications may be installed.

#!/bin/sh

# List any CS5 or higher products.

if [ -d /Library/Application Support/regid.1986-12.com.adobe/ ] ; then

    # Read each each found file and add its product to a list

    for AFILE in /Library/Application Support/regid.1986-12.com.adobe/*

    do
        PRODUCT=$( sed -n -e 's/.*<swid:product_title>(.*)</swid:product_title>.*/1/p' "$AFILE" )
        PRODUCTLIST="$PRODUCTLIST$PRODUCT"$'
'

    done

fi

# List any CS4 products.

if [ -d /Users/Shared/Adobe/ISO-19770/ ] ; then

    # Read each found file add its product to the list

    for AFILE in /Users/Shared/Adobe/ISO-19770/*

    do
        PRODUCT=$( sed -n -e 's/.*<sat:product_title>(.*)</sat:product_title>.*/1/p' "$AFILE" )

        # Some products use a different version of SWID Tag where "sat:product_title" isn't valid.
        # If "sat:product_title" isn't found in the tag then assume "product".

        if [ "$PRODUCT" = "" ] ; then
            PRODUCT=$( sed -n -e 's/.*<product>(.*)</product>.*/1/p' "$AFILE" )
            SUITE=$( sed -n -e 's/.*<part_of_suite>(.*)</part_of_suite>.*/1/p' "$AFILE" )

            # Some products such as Acrobat Pro may exist but this older version
            # of SWID Tag will only indicate that it was part of a suite or standalone.
            # Report if the product is part of a suite.

            if [ "$SUITE" = "true" ] ; then
                PRODUCT="$PRODUCT is part of an unknown CS4 suite"
            fi
        fi

        PRODUCTLIST="$PRODUCTLIST$PRODUCT"$'
'
    done

fi

# Reports the list to the JSS.

echo -n "<result>$PRODUCTLIST</result>"

I've tested with standalone Acrobat 9 and X products, CS4, CS5, CS 5.5 and CS6. Acrobat 9 may be installed as standalone, part of CS4 or as a standalone application licensed with CS5. SWID Tags don't contain enough information to clearly indicate its licensing.

Andrina
Contributor
Contributor

Ok, so now how are you building your smart folders around this? I was playing with this also, but found that creating accurate smart lists was troublesome due to the similar nomenclature being used in product versions. I've ended up with individual extension attributes using a couple more grep's for each version of suite we have installed here...

talkingmoose
Moderator
Moderator

I wrote that EA so that all Adobe products on a machine flow into one field. You could have one EA per product as well such as:

#!/bin/sh

# List any CS5 or higher products.

PRODUCTFILE="/Library/Application Support/regid.1986-12.com.adobe/regid.1986-12.com.adobe_DesignSuiteStandard-CS5-Mac-GM-en_US.swidtag"

if [ -f "$PRODUCTFILE" ] ; then
    PRODUCT=$( sed -n -e 's/.*<swid:product_title>(.*)</swid:product_title>.*/1/p' "$PRODUCTFILE" )
fi

echo -n "<result>$PRODUCT</result>"

This returns: Adobe Creative Suite 5 Design Standard. That should give you the ability to create a smart group for just that one product.

Of course, you could check just for the existence of that file:

#!/bin/sh

PRODUCTFILE="/Library/Application Support/regid.1986-12.com.adobe/regid.1986-12.com.adobe_DesignSuiteStandard-CS5-Mac-GM-en_US.swidtag"

if [ -f "$PRODUCTFILE" ] ; then
    INSTALLED="Yes"
else
    PRODUCT="No"
fi

echo -n "<result>$INSTALLED</result>"

This returns: Yes or No.

talkingmoose
Moderator
Moderator

Forgot to add that I appear to be able to make multiple smart groups based on the first single EA. If I use the "like" operator and specify a product such as Adobe Creative Suite 5 Design Standard then it returns machines with just that product.

external image link

Cem
Valued Contributor

This is great!
Is there any way to determine the license status as trial?
I am trying to spot the Trial Versions. They are adding head count for the audit reports.
I have a sample of how the trial version shows the license status in xml:

<swid:license_linkage>
    <swid:activation_status>trial</swid:activation_status>
    <swid:channel_type>TRIAL</swid:channel_type>
    <swid:customer_type>TRIAL</swid:customer_type>

Cem
Valued Contributor

This command returns the result "trial"

cat /Library/Application Support/regid.1986-12.com.adobe/regid.1986-12.com.adobe_AfterEffects-CS6-Mac-GM.swidtag | grep wid:activation_status | cut -c 26-30

then I have edited talkingmouse's script and this returns:

Adobe After Effects CS6 trial
Adobe Photoshop CS6 activ

So all had to do is create an Extension Attribute with the script below and then create a smart group looking for like "trial". After that I will have to figure out how to remove the trial software only automagically... BTW see the licensed software marked as "activ"

#!/bin/sh

# List any CS5 or higher products.

if [ -d /Library/Application Support/regid.1986-12.com.adobe/ ] ; then

# Read each each found file and add its product to a list

for AFILE in /Library/Application Support/regid.1986-12.com.adobe/*

do
PRODUCT=$( sed -n -e 's/.*<swid:product_title>(.*)</swid:product_title>.*/1/p' "$AFILE" )
LICENSE=$( cat "$AFILE" | grep swid:activation_status | cut -c 26-30 )
PRODUCTLIST="$PRODUCTLIST$PRODUCT $LICENSE"$'
'
done

fi

# List any CS4 products.

if [ -d /Users/Shared/Adobe/ISO-19770/ ] ; then

# Read each found file add its product to the list

for AFILE in /Users/Shared/Adobe/ISO-19770/*

do
PRODUCT=$( sed -n -e 's/.*<sat:product_title>(.*)</sat:product_title>.*/1/p' "$AFILE" )

# Some products use a different version of SWID Tag where "sat:product_title" isn't valid.
# If "sat:product_title" isn't found in the tag then assume "product".

if [ "$PRODUCT" = "" ] ; then
PRODUCT=$( sed -n -e 's/.*<product>(.*)</product>.*/1/p' "$AFILE" )
SUITE=$( sed -n -e 's/.*<part_of_suite>(.*)</part_of_suite>.*/1/p' "$AFILE" )

# Some products such as Acrobat Pro may exist but this older version
# of SWID Tag will only indicate that it was part of a suite or standalone.
# Report if the product is part of a suite.

if [ "$SUITE" = "true" ] ; then
PRODUCT="$PRODUCT is part of an unknown CS4 suite"
fi
fi
LICENSE=$( cat "$AFILE" | grep swid:activation_status | cut -c 26-30 )
PRODUCTLIST="$PRODUCTLIST$PRODUCT $LICENSE"$'
'
done

fi

# Reports the list to the JSS.

echo -n "<result>$PRODUCTLIST</result>"

Cem
Valued Contributor

Just wanted to edit the end of the script to correct the CS4 license activation status reading:
Because "swid" tag is not been used in CS4. Instead "sat" tag been used.

The line almost at the end of the script. Should be replaced

LICENSE=$( cat "$AFILE" | grep swid:activation_status | cut -c 26-30 )

with this one

LICENSE=$( cat "$AFILE" | grep sat:activation_status | cut -c 25-29 )

(BTW first line at the beginning of the script is OK, only the second one needs changing)

Here is the corrected script:

#!/bin/sh

# List any CS5 or higher products.

if [ -d /Library/Application Support/regid.1986-12.com.adobe/ ] ; then

# Read each each found file and add its product to a list

for AFILE in /Library/Application Support/regid.1986-12.com.adobe/*

do
PRODUCT=$( sed -n -e 's/.*<swid:product_title>(.*)</swid:product_title>.*/1/p' "$AFILE" )
LICENSE=$( cat "$AFILE" | grep swid:activation_status | cut -c 26-30 )
PRODUCTLIST="$PRODUCTLIST$PRODUCT $LICENSE"$'
'
done

fi

# List any CS4 products.

if [ -d /Users/Shared/Adobe/ISO-19770/ ] ; then

# Read each found file add its product to the list

for AFILE in /Users/Shared/Adobe/ISO-19770/*

do
PRODUCT=$( sed -n -e 's/.*<sat:product_title>(.*)</sat:product_title>.*/1/p' "$AFILE" )

# Some products use a different version of SWID Tag where "sat:product_title" isn't valid.
# If "sat:product_title" isn't found in the tag then assume "product".

if [ "$PRODUCT" = "" ] ; then
PRODUCT=$( sed -n -e 's/.*<product>(.*)</product>.*/1/p' "$AFILE" )
SUITE=$( sed -n -e 's/.*<part_of_suite>(.*)</part_of_suite>.*/1/p' "$AFILE" )

# Some products such as Acrobat Pro may exist but this older version
# of SWID Tag will only indicate that it was part of a suite or standalone.
# Report if the product is part of a suite.

if [ "$SUITE" = "true" ] ; then
PRODUCT="$PRODUCT is part of an unknown CS4 suite"
fi
fi
LICENSE=$( cat "$AFILE" | grep sat:activation_status | cut -c 25-29 )
PRODUCTLIST="$PRODUCTLIST$PRODUCT $LICENSE"$'
'
done

fi

# Reports the list to the JSS.

echo -n "<result>$PRODUCTLIST</result>"

Cem
Valued Contributor

improved version... gives better license status reading. Why didn't I think that before??

#!/bin/sh

# List any CS5 or higher products.

if [ -d /Library/Application Support/regid.1986-12.com.adobe/ ] ; then

# Read each each found file and add its product to a list

for AFILE in /Library/Application Support/regid.1986-12.com.adobe/*

do
PRODUCT=$( sed -n -e 's/.*<swid:product_title>(.*)</swid:product_title>.*/1/p' "$AFILE" )
LICENSE=$( sed -n -e 's/.*<swid:activation_status>(.*)</swid:activation_status>.*/1/p' "$AFILE" )
PRODUCTLIST="$PRODUCTLIST$PRODUCT $LICENSE"$'
'
done

fi

# List any CS4 products.

if [ -d /Users/Shared/Adobe/ISO-19770/ ] ; then

# Read each found file add its product to the list

for AFILE in /Users/Shared/Adobe/ISO-19770/*

do
PRODUCT=$( sed -n -e 's/.*<sat:product_title>(.*)</sat:product_title>.*/1/p' "$AFILE" )

# Some products use a different version of SWID Tag where "sat:product_title" isn't valid.
# If "sat:product_title" isn't found in the tag then assume "product".

if [ "$PRODUCT" = "" ] ; then
PRODUCT=$( sed -n -e 's/.*<product>(.*)</product>.*/1/p' "$AFILE" )
SUITE=$( sed -n -e 's/.*<part_of_suite>(.*)</part_of_suite>.*/1/p' "$AFILE" )

# Some products such as Acrobat Pro may exist but this older version
# of SWID Tag will only indicate that it was part of a suite or standalone.
# Report if the product is part of a suite.

if [ "$SUITE" = "true" ] ; then
PRODUCT="$PRODUCT is part of an unknown CS4 suite"
fi
fi
LICENSE=$( sed -n -e 's/.*<sat:activation_status>(.*)</sat:activation_status>.*/1/p' "$AFILE" )
PRODUCTLIST="$PRODUCTLIST$PRODUCT $LICENSE"$'
'
done

fi

# Reports the list to the JSS.

echo -n "<result>$PRODUCTLIST</result>"

jwojda
Valued Contributor II

thank you for this! It was something our Software Tracking team was looking for. I do have a couple weird entries though..

Acrobat Pro is part of an unknown CS4 suite Acrobat Pro is part of an unknown CS4 suite Creative Suite 4 Design Premium unlicensed Creative Suite 4 Design Premium unlicensed

and

Acrobat Pro

And is there a difference between "activated" and "serialized"?