]> git.pld-linux.org Git - projects/pld-ftp-admin.git/commitdiff
- full multiuser support
authorMariusz Mazur <mmazur@pld-linux.org>
Sun, 16 Jan 2005 01:42:38 +0000 (01:42 +0000)
committerMariusz Mazur <mmazur@pld-linux.org>
Sun, 16 Jan 2005 01:42:38 +0000 (01:42 +0000)
Changed files:
    modules/cmds.py -> 1.6
    modules/common.py -> 1.7
    modules/ftpio.py -> 1.5

modules/cmds.py
modules/common.py
modules/ftpio.py

index c4966bf8f94b29b39a54f9167da4a96a6193421b..424cc3e4da56ed69a9dc2f9ad3763e9a8cb29c98 100644 (file)
@@ -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()
 
index 7fafb22cfe89babf52aeec1f675827177ec18bad..87162df5e00948117c8bf2f6912cfe9278d84045 100644 (file)
@@ -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/'
 
index 929b22b5fdd865fe05a60b74c4b1b88c8bfc00db..35dc1b0753d97cc5460e52ca1a260a96e4a9f91c 100644 (file)
@@ -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():
This page took 0.051054 seconds and 4 git commands to generate.