Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
    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())
Exemplo n.º 5
0
    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()
        )
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
    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())
Exemplo n.º 9
0
    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())
Exemplo n.º 10
0
    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)
Exemplo n.º 11
0
    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())
Exemplo n.º 12
0
    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()
        )
Exemplo n.º 13
0
    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)
Exemplo n.º 14
0
    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)
Exemplo n.º 15
0
    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
Exemplo n.º 16
0
    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
Exemplo n.º 17
0
    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
Exemplo n.º 18
0
    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
Exemplo n.º 19
0
    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
Exemplo n.º 20
0
    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())
Exemplo n.º 21
0
    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())
Exemplo n.º 22
0
    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())
Exemplo n.º 23
0
    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())