Skip to content
Snippets Groups Projects
Commit 23c333e2 authored by Honza Mach's avatar Honza Mach
Browse files

Improved the uid/gid daemon options.

Daemon can now take user/group options, which can contain either user/group name as string, or uid/gid as integer. Anything else fails with exception.
parent 1deeec65
No related branches found
No related tags found
No related merge requests found
...@@ -12,6 +12,8 @@ Base implementation of generic daemon. ...@@ -12,6 +12,8 @@ Base implementation of generic daemon.
import os import os
import re import re
import sys import sys
import pwd
import grp
import json import json
import time import time
import copy import copy
...@@ -250,8 +252,8 @@ class ZenDaemon(pyzenkit.baseapp.BaseApp): ...@@ -250,8 +252,8 @@ class ZenDaemon(pyzenkit.baseapp.BaseApp):
CONFIG_PID_FILE = 'pid_file' CONFIG_PID_FILE = 'pid_file'
CONFIG_STATE_FILE = 'state_file' CONFIG_STATE_FILE = 'state_file'
CONFIG_UMASK = 'umask' CONFIG_UMASK = 'umask'
CONFIG_UID = 'uid' CONFIG_USER = 'user'
CONFIG_GID = 'gid' CONFIG_GROUP = 'group'
CONFIG_STATS_INTERVAL = 'stats_interval' CONFIG_STATS_INTERVAL = 'stats_interval'
CONFIG_PARALEL = 'paralel' CONFIG_PARALEL = 'paralel'
...@@ -282,8 +284,8 @@ class ZenDaemon(pyzenkit.baseapp.BaseApp): ...@@ -282,8 +284,8 @@ class ZenDaemon(pyzenkit.baseapp.BaseApp):
(self.CONFIG_PID_FILE, os.path.join(self.paths.get(self.PATH_RUN), "{}.pid".format(self.name))), (self.CONFIG_PID_FILE, os.path.join(self.paths.get(self.PATH_RUN), "{}.pid".format(self.name))),
(self.CONFIG_STATE_FILE, os.path.join(self.paths.get(self.PATH_RUN), "{}.state".format(self.name))), (self.CONFIG_STATE_FILE, os.path.join(self.paths.get(self.PATH_RUN), "{}.state".format(self.name))),
(self.CONFIG_UMASK, None), (self.CONFIG_UMASK, None),
(self.CONFIG_UID, None), (self.CONFIG_USER, None),
(self.CONFIG_GID, None), (self.CONFIG_GROUP, None),
(self.CONFIG_STATS_INTERVAL, 300), (self.CONFIG_STATS_INTERVAL, 300),
(self.CONFIG_PARALEL, False), (self.CONFIG_PARALEL, False),
) )
...@@ -317,10 +319,10 @@ class ZenDaemon(pyzenkit.baseapp.BaseApp): ...@@ -317,10 +319,10 @@ class ZenDaemon(pyzenkit.baseapp.BaseApp):
argparser.add_argument('--umask', help = 'default file umask') argparser.add_argument('--umask', help = 'default file umask')
# Option for overriding the process UID. # Option for overriding the process UID.
argparser.add_argument('--uid', help = 'process UID') argparser.add_argument('--user', help = 'process UID or user name')
# Option for overriding the process GID. # Option for overriding the process GID.
argparser.add_argument('--gid', help = 'process GID') argparser.add_argument('--group', help = 'process GID or group name')
# Option for defining processing statistics display interval. # Option for defining processing statistics display interval.
argparser.add_argument('--stats-interval', help = 'define processing statistics display interval') argparser.add_argument('--stats-interval', help = 'define processing statistics display interval')
...@@ -398,6 +400,41 @@ class ZenDaemon(pyzenkit.baseapp.BaseApp): ...@@ -398,6 +400,41 @@ class ZenDaemon(pyzenkit.baseapp.BaseApp):
self.config[self.CORE][self.CORE_RUNLOG][self.CORE_RUNLOG_SAVE] = True self.config[self.CORE][self.CORE_RUNLOG][self.CORE_RUNLOG_SAVE] = True
self.config[self.CORE][self.CORE_PSTATE][self.CORE_PSTATE_SAVE] = True self.config[self.CORE][self.CORE_PSTATE][self.CORE_PSTATE_SAVE] = True
if self.config[self.CONFIG_USER]:
u = self.config[self.CONFIG_USER]
res = None
if not res:
try:
res = pwd.getpwnam(u)
self.config[self.CONFIG_USER] = res[2]
except:
pass
if not res:
try:
res = pwd.getpwuid(int(u))
self.config[self.CONFIG_USER] = res[2]
except:
pass
if not res:
raise ZenDaemonException("Unknown user '{}'".format(u))
if self.config[self.CONFIG_GROUP]:
g = self.config[self.CONFIG_GROUP]
res = None
if not res:
try:
res = grp.getgrnam(g)
self.config[self.CONFIG_GROUP] = res[2]
except:
pass
if not res:
try:
res = grp.getgruid(int(g))
self.config[self.CONFIG_GROUP] = res[2]
except:
pass
if not res:
raise ZenDaemonException("Unknown group '{}'".format(g))
def _stage_setup_custom(self): def _stage_setup_custom(self):
...@@ -705,8 +742,8 @@ class ZenDaemon(pyzenkit.baseapp.BaseApp): ...@@ -705,8 +742,8 @@ class ZenDaemon(pyzenkit.baseapp.BaseApp):
work_dir = self.c(self.CONFIG_WORK_DIR), work_dir = self.c(self.CONFIG_WORK_DIR),
pidfile = self.get_fn_pidfile(), pidfile = self.get_fn_pidfile(),
umask = self.c(self.CONFIG_UMASK), umask = self.c(self.CONFIG_UMASK),
uid = self.c(self.CONFIG_UID), uid = self.c(self.CONFIG_USER),
gid = self.c(self.CONFIG_GID), gid = self.c(self.CONFIG_GROUP),
files_preserve = logs, files_preserve = logs,
signals = { signals = {
signal.SIGHUP: self._hnd_signal_hup, signal.SIGHUP: self._hnd_signal_hup,
...@@ -728,8 +765,8 @@ class ZenDaemon(pyzenkit.baseapp.BaseApp): ...@@ -728,8 +765,8 @@ class ZenDaemon(pyzenkit.baseapp.BaseApp):
work_dir = self.c(self.CONFIG_WORK_DIR), work_dir = self.c(self.CONFIG_WORK_DIR),
pidfile = self.get_fn_pidfile(), pidfile = self.get_fn_pidfile(),
umask = self.c(self.CONFIG_UMASK), umask = self.c(self.CONFIG_UMASK),
uid = self.c(self.CONFIG_UID), uid = self.c(self.CONFIG_USER),
gid = self.c(self.CONFIG_GID), gid = self.c(self.CONFIG_GROUP),
signals = { signals = {
signal.SIGHUP: self._hnd_signal_hup, signal.SIGHUP: self._hnd_signal_hup,
signal.SIGUSR1: self._hnd_signal_usr1, signal.SIGUSR1: self._hnd_signal_usr1,
......
...@@ -23,7 +23,7 @@ with open(path.join(here, 'README.rst'), encoding='utf-8') as f: ...@@ -23,7 +23,7 @@ with open(path.join(here, 'README.rst'), encoding='utf-8') as f:
setup( setup(
name = 'pyzenkit', name = 'pyzenkit',
version = '0.12', version = '0.13',
description = 'Python 3 script and daemon toolkit', description = 'Python 3 script and daemon toolkit',
long_description = long_description, long_description = long_description,
classifiers = [ classifiers = [
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment