---
 docs/yum.conf.5 |   13 +++++++++++++
 yum/__init__.py |   12 ++++++++++++
 yum/config.py   |    2 ++
 3 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/docs/yum.conf.5 b/docs/yum.conf.5
index 59bd779..babf66d 100644
--- a/docs/yum.conf.5
+++ b/docs/yum.conf.5
@@ -376,6 +376,15 @@ Path to the SSL client key yum should use to connect to 
repos/remote sites
 Defaults to none.
 
 .IP
+\fBssl_check_cert_permissions \fR
+Boolean - Whether yum should check the permissions on the paths for the
+certificates on the repository (both remote and local). If we can't read any of
+the files then yum will force skip_if_unavailable to be true.
+This is most useful for non-root processes which use yum on repos. that have
+client cert files which are readable only by root.
+Defaults to True.
+
+.IP
 \fBhistory_record \fR
 Boolean - should yum record history entries for transactions. This takes some
 disk space, and some extra time in the transactions. But it allows how to know 
a
@@ -843,6 +852,10 @@ repository.
 Overrides the \fBsslclientkey\fR option from the [main] section for this
 repository.
 
+.IP
+\fBssl_check_cert_permissions \fR
+Overrides the \fBssl_check_cert_permissions\fR option from the [main] section
+for this repository.
 
 .IP
 \fBmetadata_expire \fR
diff --git a/yum/__init__.py b/yum/__init__.py
index 29305d2..1ffdc35 100644
--- a/yum/__init__.py
+++ b/yum/__init__.py
@@ -491,6 +491,18 @@ class YumBase(depsolve.Depsolve):
             if validate and not validate(thisrepo):
                 continue
                     
+            if thisrepo.ssl_check_cert_permissions:
+                for fn in  (thisrepo.sslcacert,
+                            thisrepo.sslclientcert, thisrepo.sslclientkey):
+                    if not fn:
+                        continue
+                    #  If we can't read the SSL certs. we need to skip the 
repo.
+                    # if we don't have all the data.
+                    if not os.access(fn, os.R_OK):
+                        msg="Repo %s forced skip_if_unavailable=True due to: 
%s"
+                        self.logger.warning(msg % (thisrepo.id, fn))
+                        thisrepo.skip_if_unavailable = True
+
             # Got our list of repo objects, add them to the repos
             # collection
             try:
diff --git a/yum/config.py b/yum/config.py
index 3beac89..a683f23 100644
--- a/yum/config.py
+++ b/yum/config.py
@@ -837,6 +837,7 @@ class YumConf(StartupConf):
     sslverify = BoolOption(True)
     sslclientcert = Option()
     sslclientkey = Option()
+    ssl_check_cert_permissions = BoolOption(True)
 
     history_record = BoolOption(True)
     history_record_packages = ListOption(['yum', 'rpm'])
@@ -952,6 +953,7 @@ class RepoConf(BaseConfig):
     sslverify = Inherit(YumConf.sslverify)
     sslclientcert = Inherit(YumConf.sslclientcert)
     sslclientkey = Inherit(YumConf.sslclientkey)
+    ssl_check_cert_permissions = Inherit(YumConf.sslclientkey)
 
     skip_if_unavailable = BoolOption(False)
     
-- 
1.7.6.4

_______________________________________________
Yum-devel mailing list
[email protected]
http://lists.baseurl.org/mailman/listinfo/yum-devel

Reply via email to