Index: enterprise/generate_group_policy_template.py |
diff --git a/enterprise/generate_group_policy_template.py b/enterprise/generate_group_policy_template.py |
deleted file mode 100644 |
index a6906093f5cef97658a1c63e41970c81bdb2702a..0000000000000000000000000000000000000000 |
--- a/enterprise/generate_group_policy_template.py |
+++ /dev/null |
@@ -1,432 +0,0 @@ |
-#!/usr/bin/python2.4 |
-# |
-# Copyright 2009 Google Inc. |
-# |
-# Licensed under the Apache License, Version 2.0 (the "License"); |
-# you may not use this file except in compliance with the License. |
-# You may obtain a copy of the License at |
-# |
-# http://www.apache.org/licenses/LICENSE-2.0 |
-# |
-# Unless required by applicable law or agreed to in writing, software |
-# distributed under the License is distributed on an "AS IS" BASIS, |
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-# See the License for the specific language governing permissions and |
-# limitations under the License. |
-# ======================================================================== |
- |
-"""Generates a Group Policy template file for Google Update policies. |
- |
-The resulting strings and files use CRLF as required by gpedit.msc. |
- |
-To unit test this module, just run the file from the command line. |
-""" |
- |
-import codecs |
-import filecmp |
-import os |
-import sys |
- |
- |
-HORIZONTAL_RULE = ';%s\n' % ('-' * 78) |
-MAIN_POLICY_KEY = 'Software\Policies\Google\Update' |
- |
-# pylint: disable-msg=C6004 |
-HEADER = """\ |
-CLASS MACHINE |
- CATEGORY !!Cat_Google |
- CATEGORY !!Cat_GoogleUpdate |
- KEYNAME \"""" + MAIN_POLICY_KEY + """\" |
- EXPLAIN !!Explain_GoogleUpdate |
-""" |
- |
-PREFERENCES = """ |
- CATEGORY !!Cat_Preferences |
- KEYNAME \"""" + MAIN_POLICY_KEY + """\" |
- EXPLAIN !!Explain_Preferences |
- |
- POLICY !!Pol_AutoUpdateCheckPeriod |
- #if version >= 4 |
- SUPPORTED !!Sup_GoogleUpdate1_2_145_5 |
- #endif |
- EXPLAIN !!Explain_AutoUpdateCheckPeriod |
- PART !!Part_AutoUpdateCheckPeriod NUMERIC |
- VALUENAME AutoUpdateCheckPeriodMinutes |
- DEFAULT 1400 ; 23 hours 20 minutes. |
- MIN 60 |
- MAX 43200 ; 30 days. |
- SPIN 60 ; Increment in hour chunks. |
- END PART |
- PART !!Part_DisableAllAutoUpdateChecks CHECKBOX |
- VALUENAME DisableAutoUpdateChecksCheckboxValue ; Required, unused. |
- ACTIONLISTON |
- ; Writes over Part_AutoUpdateCheckPeriod. Assumes this runs last. |
- VALUENAME AutoUpdateCheckPeriodMinutes VALUE NUMERIC 0 |
- END ACTIONLISTON |
- ACTIONLISTOFF |
- ; Do nothing. Let Part_AutoUpdateCheckPeriod take effect. |
- END ACTIONLISTOFF |
- VALUEOFF NUMERIC 0 |
- VALUEON NUMERIC 1 |
- END PART |
- END POLICY |
- |
- END CATEGORY ; Preferences |
-""" |
- |
-APPLICATIONS_HEADER = """ |
- CATEGORY !!Cat_Applications |
- KEYNAME \"""" + MAIN_POLICY_KEY + """\" |
- EXPLAIN !!Explain_Applications |
-""" |
- |
-UPDATE_POLICY_ITEMLIST = """\ |
- ITEMLIST |
- NAME !!Name_AutomaticUpdates |
- VALUE NUMERIC 1 |
- NAME !!Name_ManualUpdates |
- VALUE NUMERIC 2 |
- NAME !!Name_UpdatesDisabled |
- VALUE NUMERIC 0 |
- END ITEMLIST |
- REQUIRED""" |
- |
-APPLICATION_DEFAULTS = (""" |
- POLICY !!Pol_DefaultAllowInstallation |
- #if version >= 4 |
- SUPPORTED !!Sup_GoogleUpdate1_2_145_5 |
- #endif |
- EXPLAIN !!Explain_DefaultAllowInstallation |
- VALUENAME InstallDefault |
- VALUEOFF NUMERIC 0 |
- VALUEON NUMERIC 1 |
- END POLICY |
- |
- POLICY !!Pol_DefaultUpdatePolicy |
- #if version >= 4 |
- SUPPORTED !!Sup_GoogleUpdate1_2_145_5 |
- #endif |
- EXPLAIN !!Explain_DefaultUpdatePolicy |
- PART !!Part_UpdatePolicy DROPDOWNLIST |
- VALUENAME UpdateDefault |
-""" + |
-UPDATE_POLICY_ITEMLIST + """ |
- END PART |
- END POLICY |
-""") |
- |
-APP_POLICIES_TEMPLATE = (""" |
- CATEGORY !!Cat_$AppLegalId$ |
- KEYNAME \"""" + MAIN_POLICY_KEY + """\" |
- |
- POLICY !!Pol_AllowInstallation |
- #if version >= 4 |
- SUPPORTED !!Sup_GoogleUpdate1_2_145_5 |
- #endif |
- EXPLAIN !!Explain_Install$AppLegalId$ |
- VALUENAME Install$AppGuid$ |
- VALUEOFF NUMERIC 0 |
- VALUEON NUMERIC 1 |
- END POLICY |
- |
- POLICY !!Pol_UpdatePolicy |
- #if version >= 4 |
- SUPPORTED !!Sup_GoogleUpdate1_2_145_5 |
- #endif |
- EXPLAIN !!Explain_AutoUpdate$AppLegalId$ |
- PART !!Part_UpdatePolicy DROPDOWNLIST |
- VALUENAME Update$AppGuid$ |
-""" + |
-UPDATE_POLICY_ITEMLIST.replace(' ', ' ') + """ |
- END PART |
- END POLICY |
- |
- END CATEGORY ; $AppName$ |
-""") |
- |
-APPLICATIONS_FOOTER = """ |
- END CATEGORY ; Applications |
- |
- END CATEGORY ; GoogleUpdate |
- |
- END CATEGORY ; Google |
-""" |
- |
-# Policy names that are used in multiple locations. |
-ALLOW_INSTALLATION_POLICY = 'Allow installation' |
-DEFAULT_ALLOW_INSTALLATION_POLICY = ALLOW_INSTALLATION_POLICY + ' default' |
-UPDATE_POLICY = 'Update policy override' |
-DEFAULT_UPDATE_POLICY = UPDATE_POLICY + ' default' |
- |
-# Update policy options that are used in multiple locations. |
-AUTOMATIC_UPDATES = 'Automatic silent updates' |
-MANUAL_UPDATES = 'Manual updates only' |
-UPDATES_DISABLED = 'Updates disabled' |
- |
-# Category names that are used in multiple locations. |
-PREFERENCES_CATEGORY = 'Preferences' |
-APPLICATIONS_CATEGORY = 'Applications' |
- |
-# The captions for update policy were selected such that they appear in order of |
-# decreasing preference when organized alphabetically in gpedit. |
-STRINGS_HEADER_AND_COMMON = ('\n' + |
-HORIZONTAL_RULE + |
-""" |
-[strings] |
-Sup_GoogleUpdate1_2_145_5=At least Google Update 1.2.145.5 |
- |
-Cat_Google=Google |
-Cat_GoogleUpdate=Google Update |
-Cat_Preferences=""" + PREFERENCES_CATEGORY + """ |
-Cat_Applications=""" + APPLICATIONS_CATEGORY + """ |
- |
-Pol_AutoUpdateCheckPeriod=Auto-update check period override |
-Pol_DefaultAllowInstallation=""" + DEFAULT_ALLOW_INSTALLATION_POLICY + """ |
-Pol_AllowInstallation=""" + ALLOW_INSTALLATION_POLICY + """ |
-Pol_DefaultUpdatePolicy=""" + DEFAULT_UPDATE_POLICY + """ |
-Pol_UpdatePolicy=""" + UPDATE_POLICY + """ |
- |
-Part_AutoUpdateCheckPeriod=Minutes between update checks |
-Part_DisableAllAutoUpdateChecks=Disable all auto-update checks (not recommended) |
-Part_UpdatePolicy=Policy |
- |
-Name_AutomaticUpdates=""" + AUTOMATIC_UPDATES + """ (recommended) |
-Name_ManualUpdates=""" + MANUAL_UPDATES + """ |
-Name_UpdatesDisabled=""" + UPDATES_DISABLED + """ |
- |
-""") |
- |
-STRINGS_APP_NAME_TEMPLATE = """\ |
-Cat_$AppLegalId$=$AppName$ |
-""" |
- |
-# pylint: disable-msg=C6310 |
-# pylint: disable-msg=C6013 |
- |
-# "application's" should be preceeded by a different word in different contexts. |
-# The word is specified by replacing the $PreApplicationWord$ token. |
-STRINGS_UPDATE_POLICY_OPTIONS = """\ |
- \\n\\nOptions:\\ |
- \\n - """ + AUTOMATIC_UPDATES + """: Updates are automatically applied when they are found via the periodic update check.\\ |
- \\n - """ + MANUAL_UPDATES + """: Updates are only applied when the user does a manual update check. (Not all apps provide an interface for this.)\\ |
- \\n - """ + UPDATES_DISABLED + """: Never apply updates.\\ |
- \\n\\nIf you select manual updates, you should periodically check for updates using $PreApplicationWord$ application's manual update mechanism if available. If you disable updates, you should periodically check for updates and distribute them to users.""" |
- |
-STRINGS_COMMON_EXPLANATIONS = (""" |
-Explain_GoogleUpdate=Policies to control the installation and updating of Google applications that use Google Update/Google Installer. |
- |
-""" + |
-HORIZONTAL_RULE + |
-'; ' + PREFERENCES_CATEGORY + '\n' + |
-HORIZONTAL_RULE + """ |
-Explain_Preferences=General policies for Google Update. |
- |
-Explain_AutoUpdateCheckPeriod=Minimum number of minutes between automatic update checks. |
- |
-""" + |
-HORIZONTAL_RULE + |
-'; ' + APPLICATIONS_CATEGORY + '\n' + |
-HORIZONTAL_RULE + """ |
-Explain_Applications=Policies for individual applications.\\ |
- \\n\\nAn updated ADM template will be required to support Google applications released in the future. |
- |
-Explain_DefaultAllowInstallation=Specifies the default behavior for whether Google software can be installed using Google Update/Google Installer.\\ |
- \\n\\nCan be overridden by the \"""" + ALLOW_INSTALLATION_POLICY + """\" for individual applications.\\ |
- \\n\\nOnly affects installation of Google software using Google Update/Google Installer. Cannot prevent running the application installer directly or installation of Google software that does not use Google Update/Google Installer for installation. |
- |
-Explain_DefaultUpdatePolicy=Specifies the default policy for software updates from Google.\\ |
- \\n\\nCan be overridden by the \"""" + UPDATE_POLICY + """\" for individual applications.\\ |
-""" + |
-STRINGS_UPDATE_POLICY_OPTIONS.replace('$PreApplicationWord$', 'each') + """\\ |
- \\n\\nOnly affects updates for Google software that uses Google Update for updates. Does not prevent auto-updates of Google software that does not use Google Update for updates.\\ |
- \\n\\nUpdates for Google Update are not affected by this setting; Google Update will continue to update itself while it is installed.\\ |
- \\n\\nWARNING: Disabing updates will also prevent updates of any new Google applications released in the future, possibly including dependencies for future versions of installed applications. |
- |
-""" + |
-HORIZONTAL_RULE + |
-'; Individual Applications\n' + |
-HORIZONTAL_RULE) |
- |
-STRINGS_APP_POLICY_EXPLANATIONS_TEMPLATE = (""" |
-; $AppName$ |
-Explain_Install$AppLegalId$=Specifies whether $AppName$ can be installed using Google Update/Google Installer.\\ |
- \\n\\nIf this policy is not configured, $AppName$ can be installed as specified by \"""" + DEFAULT_ALLOW_INSTALLATION_POLICY + """\". |
- |
-Explain_AutoUpdate$AppLegalId$=Specifies how Google Update handles available $AppName$ updates from Google.\\ |
- \\n\\nIf this policy is not configured, Google Update handles available updates as specified by \"""" + DEFAULT_UPDATE_POLICY + """\".\\ |
-""" + |
-STRINGS_UPDATE_POLICY_OPTIONS.replace('$PreApplicationWord$', 'the') + '$AppUpdateExplainExtra$\n') |
- |
-# pylint: enable-msg=C6013 |
-# pylint: enable-msg=C6310 |
-# pylint: enable-msg=C6004 |
- |
- |
-def GenerateGroupPolicyTemplate(apps): |
- # pylint: disable-msg=C6114 |
- """Generates a Group Policy template (ADM format)for the specified apps. |
- |
- Replaces LF in strings above with CRLF as required by gpedit.msc. |
- When writing the resulting contents to a file, use binary mode to ensure the |
- CRLFs are preserved. |
- |
- Args: |
- apps: A list of tuples containing information about each app. |
- Each element of the list is a tuple of: |
- * app name |
- * app ID |
- * optional string to append to the auto-update explanation |
- - Should start with a space or double new line (\n\n). |
- |
- Returns: |
- String containing the contents of the .ADM file. |
- """ |
- # pylint: enable-msg=C6114 |
- |
- def _CreateLegalIdentifier(input_string): |
- """Converts input_string to a legal identifier for ADM files. |
- |
- Changes some characters that do not necessarily cause problems and may not |
- handle all cases. |
- |
- Args: |
- input_string: Text to convert to a legal identifier. |
- |
- Returns: |
- String containing a legal identifier based on input_string. |
- """ |
- |
- # pylint: disable-msg=C6004 |
- return (input_string.replace(' ', '') |
- .replace('&', '') |
- .replace('=', '') |
- .replace(';', '') |
- .replace(',', '') |
- .replace('.', '') |
- .replace('?', '') |
- .replace('=', '') |
- .replace(';', '') |
- .replace("'", '') |
- .replace('"', '') |
- .replace('\\', '') |
- .replace('/', '') |
- .replace('(', '') |
- .replace(')', '') |
- .replace('[', '') |
- .replace(']', '') |
- .replace('{', '') |
- .replace('}', '') |
- .replace('-', '') |
- .replace('!', '') |
- .replace('@', '') |
- .replace('#', '') |
- .replace('$', '') |
- .replace('%', '') |
- .replace('^', '') |
- .replace('*', '') |
- .replace('+', '') |
- .replace(u'\u00a9', '') # Copyright (C). |
- .replace(u'\u00ae', '') # Registered Trademark (R). |
- .replace(u'\u2122', '')) # Trademark (TM). |
- |
- # pylint: enable-msg=C6004 |
- |
- def _WriteTemplateForApp(template, app): |
- """Writes the text for the specified app based on the template. |
- |
- Replaces $AppName$, $AppLegalId$, $AppGuid$, and $AppUpdateExplainExtra$. |
- |
- Args: |
- template: text to process and write. |
- app: tuple containing information about the app. |
- |
- Returns: |
- String containing a copy of the template populated with app-specific |
- strings. |
- """ |
- |
- (app_name, app_guid, update_explain_extra) = app |
- # pylint: disable-msg=C6004 |
- return (template.replace('$AppName$', app_name) |
- .replace('$AppLegalId$', _CreateLegalIdentifier(app_name)) |
- .replace('$AppGuid$', app_guid) |
- .replace('$AppUpdateExplainExtra$', update_explain_extra) |
- ) |
- # pylint: enable-msg=C6004 |
- |
- def _WriteTemplateForAllApps(template, apps): |
- """Writes a copy of the template for each of the specified apps. |
- |
- Args: |
- template: text to process and write. |
- apps: list of tuples containing information about the apps. |
- |
- Returns: |
- String containing concatenated copies of the template for each app in |
- apps, each populated with the appropriate app-specific strings. |
- """ |
- |
- content = [_WriteTemplateForApp(template, app) for app in apps] |
- return ''.join(content) |
- |
- target_contents = [ |
- HEADER, |
- PREFERENCES, |
- APPLICATIONS_HEADER, |
- APPLICATION_DEFAULTS, |
- _WriteTemplateForAllApps(APP_POLICIES_TEMPLATE, apps), |
- APPLICATIONS_FOOTER, |
- STRINGS_HEADER_AND_COMMON, |
- _WriteTemplateForAllApps(STRINGS_APP_NAME_TEMPLATE, apps), |
- STRINGS_COMMON_EXPLANATIONS, |
- _WriteTemplateForAllApps(STRINGS_APP_POLICY_EXPLANATIONS_TEMPLATE, apps), |
- ] |
- |
- # Join the sections of content then replace LF with CRLF. |
- return ''.join(target_contents).replace('\n', '\r\n') |
- |
- |
-def WriteGroupPolicyTemplate(target_path, apps): |
- """Writes a Group Policy template (ADM format)for the specified apps. |
- |
- The file is UTF-16 and contains CRLF on all platforms. |
- |
- Args: |
- target_path: Output path of the .ADM template file. |
- apps: A list of tuples containing information about each app. |
- Each element of the list is a tuple of: |
- * app name |
- * app ID |
- * optional string to append to the auto-update explanation |
- - Should start with a space or double new line (\n\n). |
- """ # pylint: disable-msg=C6114 |
- |
- contents = GenerateGroupPolicyTemplate(apps) |
- f = codecs.open(target_path, 'wb', 'utf-16') |
- f.write(contents) |
- f.close() |
- |
-# Run a unit test when the module is run directly. |
-if __name__ == '__main__': |
- TEST_APPS = [ |
- ('Google Test Foo', |
- '{D6B08267-B440-4c85-9F79-E195E80D9937}', |
- ' Check http://www.google.com/test_foo/.'), |
- (u'Google User Test Foo\u00a9\u00ae\u2122', |
- '{104844D6-7DDA-460b-89F0-FBF8AFDD0A67}', |
- ' Check http://www.google.com/user_test_foo/.'), |
- ] |
- TEST_GOLD_FILENAME = 'test_gold.adm' |
- TEST_OUTPUT_FILENAME = 'test_out.adm' |
- |
- module_dir = os.path.abspath(os.path.dirname(__file__)) |
- gold_path = os.path.join(module_dir, TEST_GOLD_FILENAME) |
- output_path = os.path.join(module_dir, TEST_OUTPUT_FILENAME) |
- |
- WriteGroupPolicyTemplate(output_path, TEST_APPS) |
- |
- if filecmp.cmp(gold_path, output_path, shallow=False): |
- print 'PASS: Contents equal.' |
- else: |
- print 'FAIL: Contents not equal.' |
- sys.exit(-1) |