def _load_proxy_settings(self, url): # read the proxy configuration in /etc/rhn/rhn.conf comp = CFG.getComponent() initCFG('server.satellite') # Get the global HTTP Proxy settings from DB or per-repo # settings on /etc/rhn/spacewalk-repo-sync/zypper.conf if CFG.http_proxy: self.proxy_url, self.proxy_user, self.proxy_pass = get_proxy(url) self.proxy_hostname = self.proxy_url elif os.path.isfile(REPOSYNC_ZYPPER_CONF): zypper_cfg = configparser.ConfigParser() zypper_cfg.read_file(open(REPOSYNC_ZYPPER_CONF)) section_name = None if zypper_cfg.has_section(self.name): section_name = self.name elif zypper_cfg.has_section(channel_label): section_name = channel_label elif zypper_cfg.has_section('main'): section_name = 'main' if section_name: if zypper_cfg.has_option(section_name, option='proxy'): self.proxy_hostname = zypper_cfg.get(section_name, option='proxy') self.proxy_url = "http://%s" % self.proxy_hostname if zypper_cfg.has_option(section_name, 'proxy_username'): self.proxy_user = zypper_cfg.get(section_name, 'proxy_username') if zypper_cfg.has_option(section_name, 'proxy_password'): self.proxy_pass = zypper_cfg.get(section_name, 'proxy_password') # set config component back to original initCFG(comp)
def authenticate(self, url): """ Get ULN token. :raises RhnSyncException: if configuration does not contain required sections. :returns: ULN token """ err_msg = '' if self._uln_token is None: try: usr, pwd = self.get_credentials() self._uln_url, label = self.get_hostname(url) px_url, px_usr, px_pwd = get_proxy(self._uln_url) server_list = ServerList([self._uln_url + "/rpc/api"]) retry_server = RetryServer(server_list.server(), refreshCallback=None, proxy=px_url, username=px_usr, password=px_pwd, timeout=5) retry_server.addServerList(server_list) self._uln_token = retry_server.auth.login(usr, pwd) except Exception as exc: err_msg = exc if not self.token or err_msg: raise ULNTokenException( "Authentication failure: token was not obtained. {}".format( err_msg)) return self.token
def __init__(self, url, name, insecure=False, interactive=True, yumsrc_conf=None, org="1", channel_label="", no_mirrors=False, ca_cert_file=None, client_cert_file=None, client_key_file=None): # pylint: disable=W0613 self.url = url self.name = name if org: self.org = org else: self.org = "NULL" # read the proxy configuration in /etc/rhn/rhn.conf initCFG('server.satellite') self.proxy_addr, self.proxy_user, self.proxy_pass = get_proxy(self.url) self.authtoken = None self.repo = DebRepo(url, os.path.join(CACHE_DIR, self.org, name), os.path.join(CFG.MOUNT_POINT, CFG.PREPENDED_DIR, self.org, 'stage'), self.proxy_addr, self.proxy_user, self.proxy_pass) self.num_packages = 0 self.num_excluded = 0 # keep authtokens for mirroring (_scheme, _netloc, _path, query, _fragid) = urlparse.urlsplit(url) if query: self.authtoken = query
def test_get_proxy_rhn_conf_creds(self, mocked_CFG): mocked_CFG.http_proxy = PROXY_ADDR mocked_CFG.http_proxy_username = PROXY_USER mocked_CFG.http_proxy_password = PROXY_PASS self.assertEqual((HTTP_PROXY, PROXY_USER, PROXY_PASS), suseLib.get_proxy())
def test_get_proxy_rhn_conf_creds(self, mocked_CFG): mocked_CFG.http_proxy = PROXY_ADDR mocked_CFG.http_proxy_username = PROXY_USER mocked_CFG.http_proxy_password = PROXY_PASS self.assertEqual( (HTTP_PROXY, PROXY_USER, PROXY_PASS), suseLib.get_proxy() )
def _set_connection(self, url): "Instantiates a connection object" proxy, puser, ppass = get_proxy(url) serverObj = connection.StreamConnection(url, proxy=proxy, username=puser, password=ppass, xml_dump_version=self.xml_dump_version, timeout=CFG.timeout) BaseWireSource.serverObj = serverObj return serverObj
def test_get_proxy_from_yast_no_creds(self, mocked_open, mocked_CFG): mocked_CFG.http_proxy = None mocked_CFG.http_proxy_username = None mocked_CFG.http_proxy_password = None mocked_file = mock.MagicMock() mocked_file.read.return_value = ' --proxy "%s"' % HTTPS_PROXY mocked_file.close.return_value = True mocked_open.return_value = mocked_file self.assertEqual((HTTPS_PROXY, None, None), suseLib.get_proxy())
def __init__(self, url, name, insecure=False, interactive=True, yumsrc_conf=None, org="1", channel_label="", no_mirrors=False, ca_cert_file=None, client_cert_file=None, client_key_file=None): # pylint: disable=W0613 self.url = url self.name = name if org: self.org = org else: self.org = "NULL" comp = CFG.getComponent() # read the proxy configuration in /etc/rhn/rhn.conf initCFG('server.satellite') self.proxy_addr, self.proxy_user, self.proxy_pass = get_proxy(self.url) self.authtoken = None # Replace non-valid characters from reponame (only alphanumeric chars allowed) self.reponame = "".join([x if x.isalnum() else "_" for x in self.name]) self.channel_label = channel_label # SUSE vendor repositories belongs to org = NULL # The repository cache root will be "/var/cache/rhn/reposync/REPOSITORY_LABEL/" root = os.path.join(CACHE_DIR, str(org or "NULL"), self.reponame) self.repo = DebRepo(url, root, os.path.join(CFG.MOUNT_POINT, CFG.PREPENDED_DIR, self.org, 'stage'), self.proxy_addr, self.proxy_user, self.proxy_pass, gpg_verify=not (insecure)) self.repo.verify() self.num_packages = 0 self.num_excluded = 0 # keep authtokens for mirroring (_scheme, _netloc, _path, query, _fragid) = urlparse.urlsplit(url) if query: self.authtoken = query initCFG(comp)
def test_get_proxy_from_yast(self, mocked_open, mocked_CFG): mocked_CFG.http_proxy = None mocked_CFG.http_proxy_username = None mocked_CFG.http_proxy_password = None mocked_file = mock.MagicMock() mocked_file.read.return_value = ' --proxy "%s"\n --proxy-user "%s:%s"' % ( HTTPS_PROXY, PROXY_USER, PROXY_PASS) mocked_file.close.return_value = True mocked_open.return_value = mocked_file self.assertEqual((HTTPS_PROXY, PROXY_USER, PROXY_PASS), suseLib.get_proxy())
def test_get_proxy_from_yast(self, mocked_open, mocked_CFG): mocked_CFG.http_proxy = None mocked_CFG.http_proxy_username = None mocked_CFG.http_proxy_password = None mocked_file = mock.MagicMock() mocked_file.read.return_value = ' --proxy "%s"\n --proxy-user "%s:%s"' % (HTTPS_PROXY, PROXY_USER, PROXY_PASS) mocked_file.close.return_value = True mocked_open.return_value = mocked_file self.assertEqual( (HTTPS_PROXY, PROXY_USER, PROXY_PASS), suseLib.get_proxy() )
def test_get_proxy_none(self, mocked_open, mocked_log_debug, mocked_CFG): mocked_CFG.http_proxy = None mocked_CFG.http_proxy_username = None mocked_CFG.http_proxy_password = None mocked_file = mock.MagicMock() mocked_file.read.return_value = "" mocked_file.close.return_value = True mocked_open.return_value = mocked_file self.assertEqual((None, None, None), suseLib.get_proxy()) self.assertIn('Could not read proxy URL from rhn config', mocked_log_debug.call_args_list[0][0][1]) self.assertEqual('Could not read proxy URL from /root/.curlrc', mocked_log_debug.call_args_list[1][0][1]) self.assertEqual(2, mocked_log_debug.call_count)
def test_get_proxy_none(self, mocked_open, mocked_log_debug, mocked_CFG): mocked_CFG.http_proxy = None mocked_CFG.http_proxy_username = None mocked_CFG.http_proxy_password = None mocked_file = mock.MagicMock() mocked_file.read.return_value = "" mocked_file.close.return_value = True mocked_open.return_value = mocked_file self.assertEqual((None, None, None), suseLib.get_proxy()) self.assertIn('Could not read proxy URL from rhn config', mocked_log_debug.call_args_list[0][0][1]) self.assertEqual( 'Could not read proxy URL from /root/.curlrc', mocked_log_debug.call_args_list[1][0][1] ) self.assertEqual(2, mocked_log_debug.call_count)
def login(self, force=0): "Perform a login, return a GET Server instance" if force: # Invalidate it self._set_login_token(None) if self.login_token: # Return cached one return self.get_server_obj # Force a login otherwise self._set_login_token(self._login()) url = self.url + self.handler proxy, puser, ppass = get_proxy(url) get_server_obj = connection.GETServer(url, proxy=proxy, username=puser, password=ppass, headers=self.login_token, timeout=CFG.timeout) # Add SSL trusted cert self._set_ssl_trusted_certs(get_server_obj) self._set_rpc_server(get_server_obj) return self.get_server_obj
def __init__(self, url, name, insecure=False, interactive=True, yumsrc_conf=None, org="1", channel_label="", no_mirrors=False, ca_cert_file=None, client_cert_file=None, client_key_file=None): """ Plugin constructor. """ # pylint: disable=W0613 if urlsplit(url).scheme: self.url = url else: self.url = "file://%s" % url self.name = name self.insecure = insecure self.interactive = interactive self.org = org if org else "NULL" self.proxy_hostname = None self.proxy_url = None self.proxy_user = None self.proxy_pass = None self.authtoken = None self.sslcacert = ca_cert_file self.sslclientcert = client_cert_file self.sslclientkey = client_key_file self.http_headers = {} # read the proxy configuration in /etc/rhn/rhn.conf initCFG('server.satellite') # keep authtokens for mirroring (_scheme, _netloc, _path, query, _fragid) = urlsplit(url) if query: self.authtoken = query # Get the global HTTP Proxy settings from DB or per-repo # settings on /etc/rhn/spacewalk-repo-sync/zypper.conf if CFG.http_proxy: self.proxy_url, self.proxy_user, self.proxy_pass = get_proxy( self.url) self.proxy_hostname = self.proxy_url elif os.path.isfile(REPOSYNC_ZYPPER_CONF): zypper_cfg = configparser.ConfigParser() zypper_cfg.read_file(open(REPOSYNC_ZYPPER_CONF)) section_name = None if zypper_cfg.has_section(self.name): section_name = self.name elif zypper_cfg.has_section(channel_label): section_name = channel_label elif zypper_cfg.has_section('main'): section_name = 'main' if section_name: if zypper_cfg.has_option(section_name, option='proxy'): self.proxy_hostname = zypper_cfg.get(section_name, option='proxy') self.proxy_url = "http://%s" % self.proxy_hostname if zypper_cfg.has_option(section_name, 'proxy_username'): self.proxy_user = zypper_cfg.get(section_name, 'proxy_username') if zypper_cfg.has_option(section_name, 'proxy_password'): self.proxy_pass = zypper_cfg.get(section_name, 'proxy_password') self._authenticate(url) # Make sure baseurl ends with / and urljoin will work correctly self.urls = [url] if self.urls[0][-1] != '/': self.urls[0] += '/' # Exclude non-valid characters from reponame self.reponame = self.name for chr in ["$", " ", ".", ";"]: self.reponame = self.reponame.replace(chr, "_") self.channel_label = channel_label # SUSE vendor repositories belongs to org = NULL root = os.path.join(CACHE_DIR, str(org or "NULL"), self.channel_label or self.reponame) self.repo = ZypperRepo(root=root, url=self.url, org=self.org) self.num_packages = 0 self.num_excluded = 0 self.gpgkey_autotrust = None self.groupsfile = None
def __init__(self, url, name, insecure=False, interactive=True, yumsrc_conf=YUMSRC_CONF, org="1", channel_label="", no_mirrors=False, ca_cert_file=None, client_cert_file=None, client_key_file=None): # pylint can't see inside the SplitResult class # pylint: disable=E1103 if urlparse.urlsplit(url).scheme: self.url = url else: self.url = "file://%s" % url self.name = name self.insecure = insecure self.interactive = interactive self.yumbase = yum.YumBase() self.yumbase.preconf.fn = yumsrc_conf if not os.path.exists(yumsrc_conf): self.yumbase.preconf.fn = '/dev/null' self.configparser = ConfigParser() if org: self.org = org else: self.org = "NULL" self.proxy_url = None self.proxy_user = None self.proxy_pass = None self.authtoken = None # read the proxy configuration # /etc/rhn/rhn.conf has more priority than yum.conf initCFG('server.satellite') # keep authtokens for mirroring (_scheme, _netloc, _path, query, _fragid) = urlparse.urlsplit(url) if query: self.authtoken = query if CFG.http_proxy: self.proxy_url, self.proxy_user, self.proxy_pass = get_proxy(self.url) else: yb_cfg = self.yumbase.conf.cfg section_name = None if yb_cfg.has_section(self.name): section_name = self.name elif yb_cfg.has_section('main'): section_name = 'main' if section_name: if yb_cfg.has_option(section_name, option='proxy'): self.proxy_url = "http://%s" % yb_cfg.get(section_name, option='proxy') if yb_cfg.has_option(section_name, 'proxy_username'): self.proxy_user = yb_cfg.get(section_name, 'proxy_username') if yb_cfg.has_option(section_name, 'proxy_password'): self.proxy_pass = yb_cfg.get(section_name, 'proxy_password') self._authenticate(url) # Check for settings in yum configuration files (for custom repos/channels only) if org: repos = self.yumbase.repos.repos else: repos = None if repos and name in repos: repo = repos[name] elif repos and channel_label in repos: repo = repos[channel_label] # In case we are using Repo object based on channel config, override it's id to name of the repo # To not create channel directories in cache directory repo.id = name else: # Not using values from config files repo = yum.yumRepo.YumRepository(name) repo.populate(self.configparser, name, self.yumbase.conf) self.repo = repo self.setup_repo(repo, no_mirrors, ca_cert_file, client_cert_file, client_key_file) self.num_packages = 0 self.num_excluded = 0 self.gpgkey_autotrust = None # if '?' not in url: # real_urls.append(url) #self.repo.urls = real_urls self.groupsfile = None
def __init__(self, url, name, insecure=False, interactive=True, yumsrc_conf=YUMSRC_CONF, org="1", channel_label="", no_mirrors=False, ca_cert_file=None, client_cert_file=None, client_key_file=None): # pylint can't see inside the SplitResult class # pylint: disable=E1103 if urlparse.urlsplit(url).scheme: self.url = url else: self.url = "file://%s" % url self.name = name self.insecure = insecure self.interactive = interactive self.yumbase = yum.YumBase() self.yumbase.preconf.fn = yumsrc_conf if not os.path.exists(yumsrc_conf): self.yumbase.preconf.fn = '/dev/null' self.configparser = ConfigParser() if org: self.org = org else: self.org = "NULL" self.proxy_url = None self.proxy_user = None self.proxy_pass = None self.authtoken = None # read the proxy configuration # /etc/rhn/rhn.conf has more priority than yum.conf initCFG('server.satellite') # keep authtokens for mirroring (_scheme, _netloc, _path, query, _fragid) = urlparse.urlsplit(url) if query: self.authtoken = query if CFG.http_proxy: self.proxy_url, self.proxy_user, self.proxy_pass = get_proxy( self.url) else: yb_cfg = self.yumbase.conf.cfg section_name = None if yb_cfg.has_section(self.name): section_name = self.name elif yb_cfg.has_section(channel_label): section_name = channel_label elif yb_cfg.has_section('main'): section_name = 'main' if section_name: if yb_cfg.has_option(section_name, option='proxy'): self.proxy_url = "http://%s" % yb_cfg.get(section_name, option='proxy') if yb_cfg.has_option(section_name, 'proxy_username'): self.proxy_user = yb_cfg.get(section_name, 'proxy_username') if yb_cfg.has_option(section_name, 'proxy_password'): self.proxy_pass = yb_cfg.get(section_name, 'proxy_password') self._authenticate(url) # Check for settings in yum configuration files (for custom repos/channels only) if org: repos = self.yumbase.repos.repos else: repos = None if repos and name in repos: repo = repos[name] elif repos and channel_label in repos: repo = repos[channel_label] # In case we are using Repo object based on channel config, override it's id to name of the repo # To not create channel directories in cache directory repo.id = name else: # Not using values from config files repo = yum.yumRepo.YumRepository(name) repo.populate(self.configparser, name, self.yumbase.conf) self.repo = repo self.setup_repo(repo, no_mirrors, ca_cert_file, client_cert_file, client_key_file) self.num_packages = 0 self.num_excluded = 0 self.gpgkey_autotrust = None # if '?' not in url: # real_urls.append(url) #self.repo.urls = real_urls self.groupsfile = None
def test_get_proxy_rhn_only_username(self, mocked_CFG): mocked_CFG.http_proxy = PROXY_ADDR mocked_CFG.http_proxy_username = '******' mocked_CFG.http_proxy_password = None self.assertEqual((HTTP_PROXY, 'user', None), suseLib.get_proxy())
def test_get_proxy_rhn_conf_no_creds(self, mocked_CFG): mocked_CFG.http_proxy = PROXY_ADDR mocked_CFG.http_proxy_username = None mocked_CFG.http_proxy_password = None self.assertEqual((HTTP_PROXY, None, None), suseLib.get_proxy())