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
## 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 op, ftochk in [('log', self.config['log']['logfile']),
+ ('pidfile', self.config['daemon']['pidfile']),]:
+ if not ftochk:
+ continue
+ 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}" ({1})'.format(filedir, op))
+ ok = False
+ else:
+ if not access(ftochk, W_OK):
+ self.log.critical('no write access to "{0}" ({1}))'.format(ftochk, op))
+ ok = False
+ if not ok:
+ sys.exit(2)
+
def control_mod(self):
"""
Controls conf file permissions.
chmod(conf_dir, 0o700)
self.conf_file = join(conf_dir, CONF_FILE)
else:
- self.log.error('Can\'t find a suitable location for config folder (XDG_CONFIG_HOME)')
- self.log.error('Please use "--config" to locate the conf file')
+ self.log.critical('Can\'t find a suitable location for config folder (XDG_CONFIG_HOME)')
+ self.log.critical('Please use "--config" to locate the conf file')
sys.exit(1)
## Sima sqlite DB