|
RazmjenaVjestina
LinuxDistribucijaRazmjeneVjestina: Revision 5
evo trivijalno male verzije template file systema koja koristi fuse i empy libraryje import em import os import mmap import sys import thread from fuse import Fuse active_module='__main__' #hack!! def transform(file): tf = os.tmpfile() i = em.Interpreter(output=tf) i.include(file, sys.modules[active_module].__dict__) tf.flush() mm = mmap.mmap(tf.fileno(), os.fstat(tf.fileno()).st_size) return mm class TmpltFS(Fuse): def __init__(self, *args, **kw): Fuse.__init__(self, *args, **kw) self.mountpoint = '/tmp/etc' self.multithreaded = 1 self.template_dir='/tmp/template' def getdir(self, path): return map(lambda x: (x,0), os.listdir(self.template_dir + path)) def getattr(self, path): return os.lstat(self.template_dir + path) def open(self, path, flags): os.close(os.open(self.template_dir + path, flags)) return 0 def read(self, path, len, offset): f = transform(self.template_dir + path) f.seek(offset) return f.read(len) def release(self, path, flags): # print path + ' >> close\n' return 0 #if __name__ == '__main__': # t() def t(): server = TmpltFS() server.main() def run(): thread.start_new_thread(t, ()) a koristi se ovako: primjer Makefilea
import os
def gcc_mm(file):
i,o,e = os.popen3(cc + ' -MM ' + file)
ret = o.readline()
return ret
def mkf_entry(_file):
return gcc_mm(_file) + "\t" + cc + " -c " + _file + "\n\n"
def mk_head(flist):
ret = "all: "
for f in flist:
ret += f[:-1] + 'o '
return ret + "\n\t" + cc + " -o $@ $^\n\n"
def make_make(flist):
lst = mk_head(flist)
for f in flist:
lst += mkf_entry(f)
return lst
cc = 'gcc'
def get_cc():
return cc
l = ['f1.c', 'f2.c']
i
CC=@make.cc
@{print make.make_make(make.l)}
ili (konfiguracija proftpd-a)
class ProFtpd:
def __init__(self):
self.name = 'Konferencija open source 2006'
self.default_server = True
self.require_valid_shell = False
self.port = 8021
self.umask = '022'
self.max_instances = 10
self.user = 'aka'
self.group = 'users'
self.allow_overwrite = True
def on_off(arg):
if arg:
return 'on'
return 'off'
proftpd = ProFtpd()
i
# proftpd.conf template
#
ServerName "@proftpd.name"
ServerType standalone
DefaultServer @(on_off(proftpd.default_server))
RequireValidShell @(on_off(proftpd.require_valid_shell))
AuthPAM off
AuthPAMConfig ftp
Port @proftpd.port
Umask @proftpd.umask
MaxInstances @proftpd.max_instances
User @proftpd.user
Group @proftpd.group
<Directory />
AllowOverwrite @(on_off(proftpd.allow_overwrite))
</Directory>
<Anonymous ~ftp>
User ftp
Group ftp
# We want clients to be able to login with "anonymous" as well as "ftp"
UserAlias anonymous ftp
# Limit the maximum number of anonymous logins
MaxClients 10
# We want 'welcome.msg' displayed at login, and '.message' displayed
# in each newly chdired directory.
DisplayLogin welcome.msg
DisplayFirstChdir .message
# Limit WRITE everywhere in the anonymous chroot
<Limit WRITE>
DenyAll
</Limit>
</Anonymous>
... detalji o teoretskom djelu sljede uskoro ... original Jun 17 10:04am |