Revision a6eb13e9 pithos/backends/simple.py

b/pithos/backends/simple.py
235 235
        
236 236
        logger.debug("get_object_permissions: %s %s %s", account, container, name)
237 237
        path = self._get_objectinfo(account, container, name)[0]
238
        return self._get_permissions(path)
238
        perm_path, perms = self._get_permissions(path)
239
        if path == perm_path:
240
            return perms
241
        return {}
239 242
    
240 243
    def update_object_permissions(self, user, account, container, name, permissions):
241 244
        """Update the permissions associated with the object."""
......
476 479
        
477 480
        src_version_id, dest_version_id = self._copy_version(path, path, not replace, True)
478 481
        for k, v in meta.iteritems():
479
            sql = 'insert or replace into metadata (version_id, key, value) values (?, ?, ?)'
480
            self.con.execute(sql, (dest_version_id, k, v))
482
            if not replace and v == '':
483
                sql = 'delete from metadata where version_id = ? and key = ?'
484
                self.con.execute(sql, (dest_version_id, k))
485
            else:
486
                sql = 'insert or replace into metadata (version_id, key, value) values (?, ?, ?)'
487
                self.con.execute(sql, (dest_version_id, k, v))
481 488
        self.con.commit()
482 489
    
483 490
    def _can_read(self, user, path):
......
510 517
        return r, w
511 518
    
512 519
    def _get_permissions(self, path):
513
        sql = 'select read, write from permissions where name = ?'
514
        c = self.con.execute(sql, (path,))
520
        # Check for permissions at path or above.
521
        sql = 'select name, read, write from permissions where ? like name || ?'
522
        c = self.con.execute(sql, (path, '%'))
515 523
        row = c.fetchone()
516 524
        if not row:
517
            return {}
525
            return path, {}
518 526
        
519
        r, w = row
527
        name, r, w = row
520 528
        if r == '' and w == '':
521 529
            return {'private': True}
522 530
        ret = {}
......
524 532
            ret['write'] = w.split(',')
525 533
        if r != '':
526 534
            ret['read'] = r.split(',')        
527
        return ret
535
        return name, ret
528 536
    
529 537
    def _put_permissions(self, path, r, w):
530 538
        sql = 'insert or replace into permissions (name, read, write) values (?, ?, ?)'

Also available in: Unified diff