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.
import os
import re
import sys
import pwd
import grp
import json
import time
import copy
......@@ -250,8 +252,8 @@ class ZenDaemon(pyzenkit.baseapp.BaseApp):
CONFIG_PID_FILE = 'pid_file'
CONFIG_STATE_FILE = 'state_file'
CONFIG_UMASK = 'umask'
CONFIG_UID = 'uid'
CONFIG_GID = 'gid'
CONFIG_USER = 'user'
CONFIG_GROUP = 'group'
CONFIG_STATS_INTERVAL = 'stats_interval'
CONFIG_PARALEL = 'paralel'
......@@ -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_STATE_FILE, os.path.join(self.paths.get(self.PATH_RUN), "{}.state".format(self.name))),
(self.CONFIG_UMASK, None),
(self.CONFIG_UID, None),
(self.CONFIG_GID, None),
(self.CONFIG_USER, None),
(self.CONFIG_GROUP, None),
(self.CONFIG_STATS_INTERVAL, 300),
(self.CONFIG_PARALEL, False),
)
......@@ -317,10 +319,10 @@ class ZenDaemon(pyzenkit.baseapp.BaseApp):
argparser.add_argument('--umask', help = 'default file umask')
# 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.
argparser.add_argument('--gid', help = 'process GID')
argparser.add_argument('--group', help = 'process GID or group name')
# Option for defining processing statistics display interval.
argparser.add_argument('--stats-interval', help = 'define processing statistics display interval')
......@@ -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_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):
......@@ -705,8 +742,8 @@ class ZenDaemon(pyzenkit.baseapp.BaseApp):
work_dir = self.c(self.CONFIG_WORK_DIR),
pidfile = self.get_fn_pidfile(),
umask = self.c(self.CONFIG_UMASK),
uid = self.c(self.CONFIG_UID),
gid = self.c(self.CONFIG_GID),
uid = self.c(self.CONFIG_USER),
gid = self.c(self.CONFIG_GROUP),
files_preserve = logs,
signals = {
signal.SIGHUP: self._hnd_signal_hup,
......@@ -728,8 +765,8 @@ class ZenDaemon(pyzenkit.baseapp.BaseApp):
work_dir = self.c(self.CONFIG_WORK_DIR),
pidfile = self.get_fn_pidfile(),
umask = self.c(self.CONFIG_UMASK),
uid = self.c(self.CONFIG_UID),
gid = self.c(self.CONFIG_GID),
uid = self.c(self.CONFIG_USER),
gid = self.c(self.CONFIG_GROUP),
signals = {
signal.SIGHUP: self._hnd_signal_hup,
signal.SIGUSR1: self._hnd_signal_usr1,
......
......@@ -23,7 +23,7 @@ with open(path.join(here, 'README.rst'), encoding='utf-8') as f:
setup(
name = 'pyzenkit',
version = '0.12',
version = '0.13',
description = 'Python 3 script and daemon toolkit',
long_description = long_description,
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