From d62b8c3db5a87accb40a49d0347255bfe467911b Mon Sep 17 00:00:00 2001
From: kaliko <kaliko@azylum.org>
Date: Thu, 26 Jun 2014 23:03:06 +0200
Subject: [PATCH] Controls file access for config provided path

---
 setup.py             |  1 +
 sima/utils/config.py | 26 ++++++++++++++++++++++++--
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/setup.py b/setup.py
index 036f85e..acae874 100755
--- a/setup.py
+++ b/setup.py
@@ -47,6 +47,7 @@ setup(name='MPD_sima',
       entry_points={
           'console_scripts': ['mpd-sima = sima.launch:main',]
           },
+       test_suite="tests",
 )
 
 # VIM MODLINE
diff --git a/sima/utils/config.py b/sima/utils/config.py
index b3a8d46..cd16a14 100644
--- a/sima/utils/config.py
+++ b/sima/utils/config.py
@@ -29,8 +29,8 @@ import logging
 import sys
 
 from configparser import Error
-from os import (makedirs, environ, stat, chmod)
-from os.path import (join, isdir, isfile)
+from os import (access, makedirs, environ, stat, chmod, W_OK, R_OK)
+from os.path import (join, isdir, isfile, dirname, exists)
 from stat import (S_IMODE, ST_MODE, S_IRWXO, S_IRWXG)
 
 from . import utils
@@ -120,9 +120,31 @@ class ConfMan(object):  # CONFIG MANAGER CLASS
         ## INIT CALLS
         self.init_config()
         self.supersedes_config_with_cmd_line_options()
+        # Controls files access
+        self.control_facc()
         # generate dbfile
         self.config['sima']['db_file'] = join(self.config['sima']['var_dir'], 'sima.db')
 
+    def control_facc(self):
+        """TODO: redundant with startopt cli args controls
+        """
+        ok = True
+        for ftochk in [self.config['log']['logfile'],
+                self.config['daemon']['pidfile'],]:
+            if not exists(ftochk):
+                # Is parent directory writable then
+                filedir = dirname(ftochk)
+                if not access(filedir, W_OK):
+                    self.log.critical('no write access to "{0}"'.format(filedir))
+                    ok = False
+            else:
+                if not access(ftochk, W_OK):
+                    self.log.critical('no write access to "{0}"'.format(ftochk))
+                    ok = False
+        if not ok:
+            sys.exit(2)
+
+
     def control_mod(self):
         """
         Controls conf file permissions.
-- 
2.39.5