mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Merge branch '2019.2.1' into ami_window_cloud
This commit is contained in:
commit
d15c8f2db1
4 changed files with 61 additions and 5 deletions
|
@ -69,9 +69,10 @@ HAS_WINDOWS_MODULES = False
|
|||
try:
|
||||
if salt.utils.platform.is_windows():
|
||||
import win32api
|
||||
import win32file
|
||||
import win32con
|
||||
from pywintypes import error as pywinerror
|
||||
import win32file
|
||||
import win32security
|
||||
import salt.platform.win
|
||||
HAS_WINDOWS_MODULES = True
|
||||
except ImportError:
|
||||
HAS_WINDOWS_MODULES = False
|
||||
|
@ -1147,10 +1148,19 @@ def symlink(src, link):
|
|||
|
||||
is_dir = os.path.isdir(src)
|
||||
|
||||
# Elevate the token from the current process
|
||||
desired_access = (
|
||||
win32security.TOKEN_QUERY |
|
||||
win32security.TOKEN_ADJUST_PRIVILEGES
|
||||
)
|
||||
th = win32security.OpenProcessToken(win32api.GetCurrentProcess(),
|
||||
desired_access)
|
||||
salt.platform.win.elevate_token(th)
|
||||
|
||||
try:
|
||||
win32file.CreateSymbolicLink(link, src, int(is_dir))
|
||||
return True
|
||||
except pywinerror as exc:
|
||||
except win32file.error as exc:
|
||||
raise CommandExecutionError(
|
||||
'Could not create \'{0}\' - [{1}] {2}'.format(
|
||||
link,
|
||||
|
|
|
@ -1146,7 +1146,7 @@ def dup_token(th):
|
|||
|
||||
def elevate_token(th):
|
||||
'''
|
||||
Set all token priviledges to enabled
|
||||
Set all token privileges to enabled
|
||||
'''
|
||||
# Get list of privileges this token contains
|
||||
privileges = win32security.GetTokenInformation(
|
||||
|
|
|
@ -25,6 +25,7 @@ except ImportError:
|
|||
|
||||
try:
|
||||
# Windows does not have the crypt module
|
||||
# consider using passlib.hash instead
|
||||
import crypt
|
||||
HAS_CRYPT = True
|
||||
except ImportError:
|
||||
|
@ -54,7 +55,7 @@ def secure_password(length=20, use_random=True):
|
|||
except UnicodeDecodeError:
|
||||
continue
|
||||
pw += re.sub(
|
||||
salt.utils.stringutils.to_str(r'\W'),
|
||||
salt.utils.stringutils.to_str(r'[\W_]'),
|
||||
str(), # future lint: disable=blacklisted-function
|
||||
char
|
||||
)
|
||||
|
|
45
tests/unit/utils/test_pycrypto.py
Normal file
45
tests/unit/utils/test_pycrypto.py
Normal file
|
@ -0,0 +1,45 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Import python libs
|
||||
from __future__ import absolute_import, print_function, unicode_literals
|
||||
import logging
|
||||
import re
|
||||
|
||||
# Import Salt Libs
|
||||
import salt.utils.pycrypto
|
||||
import salt.utils.platform
|
||||
|
||||
# Import Salt Testing Libs
|
||||
from tests.support.unit import TestCase, skipIf
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class PycryptoTestCase(TestCase):
|
||||
'''
|
||||
TestCase for salt.utils.pycrypto module
|
||||
'''
|
||||
|
||||
@skipIf(salt.utils.platform.is_windows(), 'No crypto module for Windows')
|
||||
def test_gen_hash(self):
|
||||
'''
|
||||
Test gen_hash
|
||||
'''
|
||||
passwd = 'test_password'
|
||||
ret = salt.utils.pycrypto.gen_hash(password=passwd)
|
||||
self.assertTrue(ret.startswith('$6$'))
|
||||
|
||||
ret = salt.utils.pycrypto.gen_hash(password=passwd, algorithm='md5')
|
||||
self.assertTrue(ret.startswith('$1$'))
|
||||
|
||||
ret = salt.utils.pycrypto.gen_hash(password=passwd, algorithm='sha256')
|
||||
self.assertTrue(ret.startswith('$5$'))
|
||||
|
||||
def test_secure_password(self):
|
||||
'''
|
||||
test secure_password
|
||||
'''
|
||||
ret = salt.utils.pycrypto.secure_password()
|
||||
check = re.compile(r'[!@#$%^&*()_=+]')
|
||||
assert check.search(ret) is None
|
||||
assert ret
|
Loading…
Add table
Reference in a new issue