]> git.pld-linux.org Git - projects/pld-ftp-admin.git/blobdiff - modules/cmds.py
Send and receive bytes over sockets (python3 compat)
[projects/pld-ftp-admin.git] / modules / cmds.py
index dff6fa9fc99ee3873346e646ff970e7e9265d141..e7dc879a474800700082832dca2810f0e4251982 100644 (file)
@@ -17,7 +17,7 @@ def parse(con):
         con.data=con.data[len(cmd)+1:]
         cmdname=cmd[:4]
         if not con.authorized and cmdname not in ('linp', 'linc', 'name'):
-            raise BailOut
+            raise BailOut()
             # TODO: log unauthorized access
         if cmdname in cmdlist_noargs:
             if len(cmd)==4:
@@ -32,23 +32,24 @@ def parse(con):
                 pass
                 # TODO: log malicious msg
         else:
-            raise BailOut
+            raise BailOut()
             # TODO: log this
 
-
 def lock(con, arg, hard):
     if arg not in locks:
-        locks[arg]=hard
-        con.sock.send("OK")
-    elif locks[arg]:
-        con.sock.send("HARD") # Hard lock - you can go get a cup of tea
+        locks[arg]={'hard': hard, 'name': con.name, 'time': int(time.time())}
+        con.sock.send(bytearray("OK", encoding='utf-8'))
+    elif locks[arg]['hard']:
+        con.sock.send(bytearray("HARD", encoding='utf-8')) # Hard lock - you can go get a cup of tea
     else:
-        con.sock.send("SOFT") # Soft lock - try in a second or two
-        
-    
+        con.sock.send(bytearray("SOFT", encoding='utf-8')) # Soft lock - try in a second or two
+
 def cmd_unlock(con, arg):
     if arg in locks:
         del locks[arg]
+        con.sock.send(bytearray("OK", encoding='utf-8'))
+    else:
+        con.sock.send(bytearray("FAIL", encoding='utf-8'))
 
 def cmd_lock_soft(con, arg):
     lock(con, arg, False)
@@ -56,33 +57,46 @@ def cmd_lock_soft(con, arg):
 def cmd_lock_hard(con, arg):
     lock(con, arg, True)
 
+def cmd_show_locks(con):
+    cmd_log(con, "Dumping locks data:");
+    if len(locks):
+        res = ""
+        for lockdata in locks.items():
+            tree, data = lockdata
+            msg = "Tree: %s, Conn name: %s, Hard Lock: %s, Time: %s" % (
+                    tree, data['name'], data['hard'], time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(data['time'])))
+            cmd_log(con, msg)
+            res = res + msg
+#        con.sock.send(bytearray("BLOB:%d" % len(res), encoding='utf-8')))
+        con.sock.send(bytearray(res, encoding='utf-8'))
+    else:
+        cmd_log(con, "No locks found.")
+        con.sock.send(bytearray("NLCK", encoding='utf-8'))
 
 def cmd_log(con, msg):
-    logfile.write('%s [%s] -- %s\n' % (time.strftime('%Y-%m-%d %H:%M:%S'), 
-                                       con.name, msg))
+    logfile.write('%s [%s] -- %s\n' % (time.strftime('%Y-%m-%d %H:%M:%S'), con.name, msg))
     logfile.flush()
 
 def cmd_name(con, name):
     con.name=name
 
-
 def load_creds():
     global users, cookies
     users={}
     cookies={}
-    if not common.fileexists(common.ftpadmdir+'var/passwd'):
+    if not common.fileexists(common.ftpadmdir+'/var/passwd'):
         return
     else:
-        f=open(common.ftpadmdir+'var/passwd', 'r')
+        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'):
+    if not common.fileexists(common.ftpadmdir+'/var/cookies'):
         return
     else:
-        f=open(common.ftpadmdir+'var/cookies', 'r')
+        f=open(common.ftpadmdir+'/var/cookies', 'r')
         for line in f.xreadlines():
             x=line.strip().split(':')
             if len(x)>=2:
@@ -90,7 +104,7 @@ def load_creds():
         f.close()
 
 def write_cookies():
-    f=open(common.ftpadmdir+'var/cookies', 'w')
+    f=open(common.ftpadmdir+'/var/cookies', 'w')
     for key in cookies.keys():
         f.write('%s:%s\n' % (key, cookies[key]))
     f.close()
@@ -98,7 +112,7 @@ def write_cookies():
 def cmd_login_passwd(con, data):
     tmp=data.split('\n')
     if len(tmp)!=2:
-        raise BailOut
+        raise BailOut()
     login=tmp[0]
     passwd=tmp[1]
     md5pass=md5.new(passwd).hexdigest()
@@ -108,21 +122,21 @@ def cmd_login_passwd(con, data):
         write_cookies()
         con.username=login
         con.authorized=True
-        con.sock.send('OK '+cookie)
+        con.sock.send(bytearray('OK '+cookie, encoding='utf-8'))
     else:
         # TODO: log this
-        con.sock.send('FAIL')
-        raise BailOut
+        con.sock.send(bytearray('FAIL', encoding='utf-8'))
+        raise BailOut()
 
 def cmd_login_cookie(con, cookie):
     if cookie in cookies:
         con.cookie=cookie
         con.authorized=True
         con.username=cookies[cookie]
-        con.sock.send('OK '+cookies[cookie])
+        con.sock.send(bytearray('OK '+cookies[cookie], encoding='utf-8'))
     else:
         # TODO: log this (or not)
-        con.sock.send('FAIL')
+        con.sock.send(bytearray('FAIL'))
 
 def cmd_logout(con):
     if con.cookie in cookies:
@@ -137,11 +151,10 @@ def reloadftptree():
 
 def cmd_gettree(con):
     buf=''
-    for pkgname in pkglist:
+    for pkgnvr in pkglist:
         # TODO: show only user's own pkgs
-        # TODO: show if already marked
-        pkg=srctree[pkgname]
-        line=pkgname
+        pkg=srctree[pkgnvr]
+        line=pkgnvr
         if pkg.marked4moving:
             line=line+'\n1'
         else:
@@ -152,23 +165,23 @@ def cmd_gettree(con):
             line=line+'\n0'
         buf=buf+'\0'+line
     if buf:
-        con.sock.send('%.6d' % (len(buf)-1))
-        con.sock.send(buf[1:])
+        con.sock.send(bytearray('%.6d' % (len(buf)-1), encoding='utf-8'))
+        con.sock.send(bytearray(buf[1:], encoding='utf-8'))
     else:
-        con.sock.send('000000')
+        con.sock.send(bytearray('000000', encoding='utf-8'))
 
 
 cmdlist_args={'lcks':cmd_lock_soft, 'lckh':cmd_lock_hard, 'ulck':cmd_unlock,
          'log1':cmd_log, 'name':cmd_name, 'linp':cmd_login_passwd,
          'linc':cmd_login_cookie}
 
-cmdlist_noargs={'lout':cmd_logout, 'gett':cmd_gettree}
+cmdlist_noargs={'lout':cmd_logout, 'gett':cmd_gettree, 'slck':cmd_show_locks}
 
 # Global stuff and initializations
 
 BailOut="BailOut"
 locks={}
-logfile=open(common.ftpadmdir+'var/log', 'a')
+logfile=open(common.ftpadmdir+'/var/log', 'a')
 load_creds()
 reloadftptree()
 salt=md5.new(`time.time()`).hexdigest()
This page took 0.06302 seconds and 4 git commands to generate.