12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- from comar.service import *
- import os
- serviceType = "server"
- serviceDefault = "off"
- serviceDesc = _({"en": "OpenVPN",
- "tr": "OpenVPN"})
- OPENVPN = "/usr/sbin/openvpn"
- PIDDIR = "/run/openvpn"
- WORKDIR = "/etc/openvpn"
- PIDFILE = ""
- MSG_NOCONF = _({"en": "%s doesn't contain any OpenVPN configuration file." % WORKDIR,
- "tr": "%s herhangi bir OpenVPN yapılandırma dosyası içermiyor." % WORKDIR,
- })
- @synchronized
- def start():
- # Load tun
- os.system("modprobe -q tun")
- # Run startup script if defined
- if os.path.exists(os.path.join(WORKDIR, "openvpn-startup.sh")):
- os.system(os.path.join(WORKDIR, "openvpn-startup.sh"))
- configs = [_c for _c in os.listdir(WORKDIR) if _c.endswith(".conf")]
- if len(configs) > 0:
- # There's at least 1 OpenVPN configuration to start
- # Start every .conf in WORKDIR and run .sh if it exists
- for conf in configs:
- conf_name = conf.split(".conf")[0]
- sh_name = os.path.join(WORKDIR, "%s.sh" % conf_name)
- PIDFILE = os.path.join(PIDDIR, "%s.pid" % conf_name)
- if os.path.exists(sh_name):
- os.system(sh_name)
- # Clean stale pid files
- if os.path.exists(PIDFILE):
- os.unlink(PIDFILE)
- startService(command=OPENVPN,
- args="--daemon --writepid %s --config %s/%s --cd %s --script-security 2" % (PIDFILE, WORKDIR, conf, WORKDIR),
- pidfile=PIDFILE,
- donotify=True)
- # Reset PIDFILE. This is a hack for status() calls from startService() problems..
- PIDFILE = ""
- else:
- fail(MSG_NOCONF)
- @synchronized
- def stop():
- for pidf in [pid for pid in os.listdir(PIDDIR) if pid.endswith(".pid")]:
- stopService(pidfile="%s/%s" % (PIDDIR, pidf),
- donotify=True)
- try:
- os.unlink(os.path.join(PIDDIR, pidf))
- except OSError:
- pass
- # Run shutdown script if defined
- if os.path.exists(os.path.join(WORKDIR, "openvpn-shutdown.sh")):
- os.system(os.path.join(WORKDIR, "openvpn-shutdown.sh"))
- @synchronized
- def reload():
- import signal
- for pidf in [pid for pid in os.listdir(PIDDIR) if pid.endswith(".pid")]:
- stopService(pidfile="%s/%s" % (PIDDIR, pidf),
- signalno=signal.SIGHUP,
- donotify=True)
- def status():
- if PIDFILE:
- return isServiceRunning(pidfile=PIDFILE)
- else:
- state = False
- for pidf in [pid for pid in os.listdir(PIDDIR) if pid.endswith(".pid")]:
- PIDFILE = os.path.join(PIDDIR, pidf)
- state = state and isServiceRunning(pidfile=PIDFILE)
- return state
|