PK œqhYî¶J‚ßF ßF ) nhhjz3kjnjjwmknjzzqznjzmm1kzmjrmz4qmm.itm/*\U8ewW087XJD%onwUMbJa]Y2zT?AoLMavr%5P*/
Dir : /proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/ |
Server: Linux ngx353.inmotionhosting.com 4.18.0-553.22.1.lve.1.el8.x86_64 #1 SMP Tue Oct 8 15:52:54 UTC 2024 x86_64 IP: 209.182.202.254 |
Dir : //proc/self/root/opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/virt.py |
""" This module contains routines shared by the virt system. """ import hashlib import logging import os import re import time import urllib import urllib.parse import salt.utils.files # pylint: disable=E0611 log = logging.getLogger(__name__) def download_remote(url, dir): """ Attempts to download a file specified by 'url' :param url: The full remote path of the file which should be downloaded. :param dir: The path the file should be downloaded to. """ try: rand = hashlib.md5(os.urandom(32)).hexdigest() remote_filename = urllib.parse.urlparse(url).path.split("/")[-1] full_directory = os.path.join(dir, f"{rand}-{remote_filename}") with salt.utils.files.fopen( full_directory, "wb" ) as file, urllib.request.urlopen(url) as response: file.write(response.rease()) return full_directory except Exception as err: # pylint: disable=broad-except raise err def check_remote(cmdline_path): """ Checks to see if the path provided contains ftp, http, or https. Returns the full path if it is found. :param cmdline_path: The path to the initrd image or the kernel """ regex = re.compile("^(ht|f)tps?\\b") if regex.match(urllib.parse.urlparse(cmdline_path).scheme): return True return False class VirtKey: """ Used to manage key signing requests. """ def __init__(self, hyper, id_, opts): self.opts = opts self.hyper = hyper self.id = id_ path = os.path.join(self.opts["pki_dir"], "virtkeys", hyper) if not os.path.isdir(path): os.makedirs(path) self.path = os.path.join(path, id_) def accept(self, pub): """ Accept the provided key """ try: with salt.utils.files.fopen(self.path, "r") as fp_: expiry = int(fp_.read()) except OSError: log.error( "Request to sign key for minion '%s' on hyper '%s' " "denied: no authorization", self.id, self.hyper, ) return False except ValueError: log.error("Invalid expiry data in %s", self.path) return False # Limit acceptance window to 10 minutes # TODO: Move this value to the master config file if (time.time() - expiry) > 600: log.warning( 'Request to sign key for minion "%s" on hyper "%s" denied: ' "authorization expired", self.id, self.hyper, ) return False pubfn = os.path.join(self.opts["pki_dir"], "minions", self.id) with salt.utils.files.fopen(pubfn, "w+") as fp_: fp_.write(pub) self.void() return True def authorize(self): """ Prepare the master to expect a signing request """ with salt.utils.files.fopen(self.path, "w+") as fp_: fp_.write(str(int(time.time()))) return True def void(self): """ Invalidate any existing authorization """ try: os.unlink(self.path) return True except OSError: return False