SHA256
1
0
forked from pool/salt
salt/use-adler32-algorithm-to-compute-string-checksums.patch

152 lines
4.8 KiB
Diff
Raw Normal View History

Accepting request 636187 from home:mdinca:branches:systemsmanagement:saltstack - Prepend current directory when path is just filename (bsc#1095942) - Integration of MSI authentication for azurearm - Adds fix for SUSE Expanded Support os grain detection - Fixes 509x remote signing - Fix for StringIO import in Python2 - Use Adler32 algorithm to compute string checksums (bsc#1102819) - Only do reverse DNS lookup on IPs for salt-ssh (bsc#1104154) - Add support for Python 3.7 - Fix license macro to build on SLE12SP2 - Decode file contents for python2 (bsc#1102013) - Fix for sorting of multi-version packages (bsc#1097174 and bsc#1097413) - Fix mine.get not returning data - workaround for #48020 (bsc#1100142) - Added: * change-stringio-import-in-python2-to-import-the-clas.patch * integration-of-msi-authentication-with-azurearm-clou.patch * x509-fixes-for-remote-signing-106.patch * fix-for-suse-expanded-support-detection.patch * only-do-reverse-dns-lookup-on-ips-for-salt-ssh.patch * prepend-current-directory-when-path-is-just-filename.patch * add-support-for-python-3.7.patch * decode-file-contents-for-python2-bsc-1102013.patch * fix-mine.get-not-returning-data-workaround-for-48020.patch * x509-fixes-111.patch * use-adler32-algorithm-to-compute-string-checksums.patch - Modified: * fix-for-sorting-of-multi-version-packages-bsc-109717.patch OBS-URL: https://build.opensuse.org/request/show/636187 OBS-URL: https://build.opensuse.org/package/show/systemsmanagement:saltstack/salt?expand=0&rev=129
2018-09-17 16:18:45 +02:00
From 1cb2d2bc6c1cf1a39e735120c184d6ade9e64c34 Mon Sep 17 00:00:00 2001
From: Bo Maryniuk <bo@suse.de>
Date: Sat, 28 Jul 2018 22:59:04 +0200
Subject: [PATCH] Use Adler32 algorithm to compute string checksums
Generate the same numeric value across all Python versions and platforms
Re-add getting hash by Python shell-out method
Add an option to choose between default hashing, Adler32 or CRC32 algorithms
Set default config option for server_id hashing to False on minion
Choose CRC method, default to faster but less reliable "adler32", if crc is in use
Add warning for Sodium.
---
salt/config/__init__.py | 13 +++++++++-
salt/grains/core.py | 54 +++++++++++++++++++++++++++--------------
2 files changed, 48 insertions(+), 19 deletions(-)
diff --git a/salt/config/__init__.py b/salt/config/__init__.py
index feda0abac1..59df7e1cba 100644
--- a/salt/config/__init__.py
+++ b/salt/config/__init__.py
@@ -1186,6 +1186,16 @@ VALID_OPTS = {
# Enable calling ssh minions from the salt master
'enable_ssh_minions': bool,
+
+ # Thorium saltenv
+ 'thoriumenv': (type(None), six.string_types),
+
+ # Thorium top file location
+ 'thorium_top': six.string_types,
+
+ # Use Adler32 hashing algorithm for server_id (default False until Sodium, "adler32" after)
+ # Possible values are: False, adler32, crc32
+ 'server_id_use_crc': (bool, six.string_types),
}
# default configurations
@@ -1486,7 +1496,8 @@ DEFAULT_MINION_OPTS = {
},
'discovery': False,
'schedule': {},
- 'ssh_merge_pillar': True
+ 'ssh_merge_pillar': True,
+ 'server_id_use_crc': False,
}
DEFAULT_MASTER_OPTS = {
diff --git a/salt/grains/core.py b/salt/grains/core.py
index a5c3a6a8cf..6aaf38096d 100644
--- a/salt/grains/core.py
+++ b/salt/grains/core.py
@@ -20,6 +20,7 @@ import platform
import logging
import locale
import uuid
+import zlib
from errno import EACCES, EPERM
import datetime
@@ -46,6 +47,8 @@ import salt.utils.files
import salt.utils.network
import salt.utils.path
import salt.utils.platform
+import salt.utils.stringutils
+import salt.utils.versions
from salt.ext import six
from salt.ext.six.moves import range
@@ -2420,40 +2423,55 @@ def _hw_data(osdata):
return grains
-def get_server_id():
+def _get_hash_by_shell():
'''
- Provides an integer based on the FQDN of a machine.
- Useful as server-id in MySQL replication or anywhere else you'll need an ID
- like this.
+ Shell-out Python 3 for compute reliable hash
+ :return:
'''
- # Provides:
- # server_id
-
- if salt.utils.platform.is_proxy():
- return {}
id_ = __opts__.get('id', '')
id_hash = None
py_ver = sys.version_info[:2]
if py_ver >= (3, 3):
# Python 3.3 enabled hash randomization, so we need to shell out to get
# a reliable hash.
- id_hash = __salt__['cmd.run'](
- [sys.executable, '-c', 'print(hash("{0}"))'.format(id_)],
- env={'PYTHONHASHSEED': '0'}
- )
+ id_hash = __salt__['cmd.run']([sys.executable, '-c', 'print(hash("{0}"))'.format(id_)],
+ env={'PYTHONHASHSEED': '0'})
try:
id_hash = int(id_hash)
except (TypeError, ValueError):
- log.debug(
- 'Failed to hash the ID to get the server_id grain. Result of '
- 'hash command: %s', id_hash
- )
+ log.debug('Failed to hash the ID to get the server_id grain. Result of hash command: %s', id_hash)
id_hash = None
if id_hash is None:
# Python < 3.3 or error encountered above
id_hash = hash(id_)
- return {'server_id': abs(id_hash % (2 ** 31))}
+ return abs(id_hash % (2 ** 31))
+
+
+def get_server_id():
+ '''
+ Provides an integer based on the FQDN of a machine.
+ Useful as server-id in MySQL replication or anywhere else you'll need an ID
+ like this.
+ '''
+ # Provides:
+ # server_id
+
+ if salt.utils.platform.is_proxy():
+ server_id = {}
+ else:
+ use_crc = __opts__.get('server_id_use_crc')
+ if bool(use_crc):
+ id_hash = getattr(zlib, use_crc, zlib.adler32)(__opts__.get('id', '').encode()) & 0xffffffff
+ else:
+ salt.utils.versions.warn_until('Sodium', 'This server_id is computed nor by Adler32 neither by CRC32. '
+ 'Please use "server_id_use_crc" option and define algorithm you'
+ 'prefer (default "Adler32"). The server_id will be computed with'
+ 'Adler32 by default.')
+ id_hash = _get_hash_by_shell()
+ server_id = {'server_id': id_hash}
+
+ return server_id
def get_master():
--
2.19.0