From 88d4cb67c361bf7d46be9d9b2ab63895889f84b3 Mon Sep 17 00:00:00 2001 From: Mariusz Mazur Date: Sun, 16 Jan 2005 01:42:38 +0000 Subject: [PATCH] - full multiuser support Changed files: modules/cmds.py -> 1.6 modules/common.py -> 1.7 modules/ftpio.py -> 1.5 --- modules/cmds.py | 60 ++++++++++++++++++++++++++++++++++++++++------- modules/common.py | 8 +++---- modules/ftpio.py | 2 +- 3 files changed, 57 insertions(+), 13 deletions(-) diff --git a/modules/cmds.py b/modules/cmds.py index c4966bf..424cc3e 100644 --- a/modules/cmds.py +++ b/modules/cmds.py @@ -2,8 +2,10 @@ import os import time +import config +import common +import md5 -BailOut="BailOut" def parse(con): if '\0' not in con.data: @@ -32,7 +34,6 @@ def parse(con): raise BailOut # TODO: log this -locks={} def lock(con, arg, hard): if arg not in locks: @@ -54,7 +55,6 @@ def cmd_lock_soft(con, arg): def cmd_lock_hard(con, arg): lock(con, arg, True) -logfile=open(os.environ['HOME']+'/pld-ftp-admin/var/log', 'a') def cmd_log(con, msg): logfile.write('%s [%s] -- %s\n' % (time.strftime('%Y-%m-%d %H:%M:%S'), @@ -64,28 +64,66 @@ def cmd_log(con, msg): def cmd_name(con, name): con.name=name + +def load_creds(): + global users, cookies + users={} + cookies={} + if not common.fileexists(common.ftpadmdir+'var/passwd'): + return + else: + f=open(common.ftpadmdir+'var/passwd', 'r') + for line in f.xreadlines(): + x=line.strip().split(':') + if len(x)>=2: + users[x[0]]=x[1] + f.close() + if not common.fileexists(common.ftpadmdir+'var/cookies'): + return + else: + f=open(common.ftpadmdir+'var/cookies', 'r') + for line in f.xreadlines(): + x=line.strip().split(':') + if len(x)>=2: + users[x[0]]=x[1] + f.close() + +def write_cookies(): + f=open(common.ftpadmdir+'var/cookies', 'w') + for key in cookies.keys(): + f.write('%s:%s\n' % (key, cookies[key])) + f.close() + def cmd_login_passwd(con, data): tmp=data.split('\n') if len(tmp)!=2: raise BailOut login=tmp[0] passwd=tmp[1] - if login=='mmazur' and passwd=='ziew': - con.sock.send('OK ciasteczko') + if login in users and users[login]==md5.new(passwd).hexdigest(): + cookie=md5.new(login+passwd+`time.time()`).hexdigest() + cookies[cookie]=login + write_cookies() + con.authorized=True + con.sock.send('OK '+cookie) else: # TODO: log this con.sock.send('FAIL') raise BailOut def cmd_login_cookie(con, cookie): - if cookie=='ciasteczko': - con.sock.send('OK mmazur') + if cookie in cookies: + con.cookie=cookie + con.authorized=True + con.sock.send('OK '+cookies[cookie]) else: # TODO: log this (or not) con.sock.send('FAIL') def cmd_logout(con): - # TODO: remove cookie + if con.cookie in cookies: + del cookies[con.cookie] + write_cookies() pass cmdlist_args={'lcks':cmd_lock_soft, 'lckh':cmd_lock_hard, 'ulck':cmd_unlock, @@ -94,4 +132,10 @@ cmdlist_args={'lcks':cmd_lock_soft, 'lckh':cmd_lock_hard, 'ulck':cmd_unlock, cmdlist_noargs={'lout':cmd_logout} +# Global stuff and initializations + +BailOut="BailOut" +locks={} +logfile=open(common.ftpadmdir+'var/log', 'a') +load_creds() diff --git a/modules/common.py b/modules/common.py index 7fafb22..87162df 100644 --- a/modules/common.py +++ b/modules/common.py @@ -15,9 +15,9 @@ def checkdir(dir): sys.exit(1) if 'HOME' in os.environ: - pldftpadmdir=os.environ['HOME']+'/pld-ftp-admin/' + ftpadmdir=os.environ['HOME']+'/pld-ftp-admin/' else: - pldftpadmdir='../' -noarchcachedir=pldftpadmdir+'var/noarch-cache/' -tmpdir=pldftpadmdir+'var/tmp' + ftpadmdir='../' +noarchcachedir=ftpadmdir+'var/noarch-cache/' +tmpdir=ftpadmdir+'var/tmp/' diff --git a/modules/ftpio.py b/modules/ftpio.py index 929b22b..35dc1b0 100644 --- a/modules/ftpio.py +++ b/modules/ftpio.py @@ -39,7 +39,7 @@ def login_cookie(cookie): return retval[3:] def logout(): - sock.send('lout') + sock.send('lout\0') def lock(path, hard=False): def dolock(): -- 2.44.0