/usr/share/pyshared/twisted/plugins/epoptesd.py is in epoptes 0.5.6-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | #!/usr/bin/env python
# -*- coding: utf-8 -*-
###########################################################################
# Epoptesd.
#
# Copyright (C) 2010 Fotis Tsamis <ftsamis@gmail.com>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FINESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
# On Debian GNU/Linux systems, the complete text of the GNU General
# Public License can be found in `/usr/share/common-licenses/GPL".
###########################################################################
import os
from zope.interface import implements
from twisted.python import usage
from twisted.plugin import IPlugin
from twisted.application.service import IServiceMaker
from twisted.application import internet, service
from epoptes.daemon import bashplex, guiplex
from epoptes.common import config
import grp
from OpenSSL import SSL
class Options(usage.Options):
optParameters = [
("clientport", "p", 789, "Client Port"),
('pingInterval', 'i', 10),
('pingTimeout', 't', 10),
]
class ServerContextFactory:
def getContext(self):
ctx = SSL.Context(SSL.SSLv23_METHOD)
ctx.use_certificate_file("/etc/epoptes/server.crt")
ctx.use_privatekey_file("/etc/epoptes/server.key")
return ctx
class ServiceMaker(object):
implements(IServiceMaker, IPlugin)
tapname = "epoptes"
description = "Epoptes Daemon"
options = Options
def makeService(self, options):
factory = bashplex.DelimitedBashReceiverFactory()
factory.pingInterval=int(options['pingInterval'])
factory.pingTimeout=int(options['pingTimeout'])
factory.startupCommands = self.filterBash('/usr/share/epoptes/client-functions')
if config.system['ENCRYPTION']:
clientService = internet.SSLServer(int(config.system['PORT']),
factory, ServerContextFactory())
else:
clientService = internet.TCPServer(int(config.system['PORT']),
factory)
gid = grp.getgrnam(config.system['SOCKET_GROUP'])[2]
if not os.path.isdir(config.system['DIR']):
#TODO: for some reason this does 0750 instead
os.makedirs(config.system['DIR'], 02770)
os.chmod(config.system['DIR'], 02770)
os.chown(config.system['DIR'], -1, gid)
guiService = internet.UNIXServer(
"%s/epoptes.socket" % config.system['DIR'],
guiplex.GUIFactory())
topService = service.MultiService()
topService.addService(clientService)
topService.addService(guiService)
return topService
def filterBash(self, script):
f = open(script)
functions = f.readlines()
f.close()
result = ''
for line in functions:
if line.strip() != '' and line.strip()[0] == '#':
continue
result += line
return result
serviceMaker = ServiceMaker()
|