forked from Georg/pyacl
Basics
Signed-off-by: Georg Pfuetzenreuter <mail@georg-pfuetzenreuter.net>
This commit is contained in:
parent
00cd5f9c94
commit
191c0fac6a
3
.gitignore
vendored
Normal file
3
.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
dist
|
||||
venv
|
||||
__pycache__
|
9
pyacl/__init__.py
Normal file
9
pyacl/__init__.py
Normal file
@ -0,0 +1,9 @@
|
||||
"""
|
||||
pyacl - high level abstractions over pylibacl
|
||||
Copyright 2024, Georg Pfuetzenreuter <mail@georg-pfuetzenreuter.net>
|
||||
|
||||
Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence").
|
||||
You may not use this work except in compliance with the Licence.
|
||||
An English copy of the Licence is shipped in a file called LICENSE along with this applications source code.
|
||||
You may obtain copies of the Licence in any of the official languages at https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12.
|
||||
"""
|
98
pyacl/acl.py
Normal file
98
pyacl/acl.py
Normal file
@ -0,0 +1,98 @@
|
||||
#!/usr/bin/python3
|
||||
"""
|
||||
pyacl - high level abstractions over pylibacl
|
||||
Copyright 2024, Georg Pfuetzenreuter <mail@georg-pfuetzenreuter.net>
|
||||
|
||||
Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence").
|
||||
You may not use this work except in compliance with the Licence.
|
||||
An English copy of the Licence is shipped in a file called LICENSE along with this applications source code.
|
||||
You may obtain copies of the Licence in any of the official languages at https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12.
|
||||
"""
|
||||
|
||||
import posix1e
|
||||
|
||||
myacl = posix1e.ACL(file='/tmp/testacl')
|
||||
print(myacl)
|
||||
|
||||
myentries = list(myacl)
|
||||
|
||||
DEFAULT_ENTRIES = [
|
||||
'u::rw-',
|
||||
'g::r--',
|
||||
'm::r--',
|
||||
'o::r--',
|
||||
]
|
||||
|
||||
DEFAULT_PERMISSIONS = {
|
||||
'read': None,
|
||||
'write': None,
|
||||
'execute': None,
|
||||
}
|
||||
|
||||
DEFAULT_ENTRYTYPES = [
|
||||
'user',
|
||||
'group',
|
||||
'mask',
|
||||
'other'
|
||||
]
|
||||
|
||||
def acl_reduce_entries(acl):
|
||||
entries = acl.to_any_text().decode().split()
|
||||
entries = [entry for entry in entries if entry not in DEFAULT_ENTRIES]
|
||||
return entries
|
||||
|
||||
def acl_parse_permission(strpermission):
|
||||
if len(strpermission) != 3:
|
||||
return ValueError('Invalid permission')
|
||||
|
||||
permap = {
|
||||
0: 'read',
|
||||
1: 'write',
|
||||
2: 'execute',
|
||||
}
|
||||
|
||||
outmap = DEFAULT_PERMISSIONS.copy()
|
||||
|
||||
for i, perm in permap.items():
|
||||
permval = strpermission[i]
|
||||
if permval in ['r', 'w', 'x']:
|
||||
outmap[perm] = True
|
||||
elif permval == '-':
|
||||
outmap[perm] = False
|
||||
else:
|
||||
return ValueError('Invalid permission flag')
|
||||
|
||||
return outmap
|
||||
|
||||
def acl_parse_entry(strentry):
|
||||
if not strentry:
|
||||
raise ValueError('Got empty string')
|
||||
|
||||
entrytype, entryvalue, permissions = strentry.split(':')
|
||||
|
||||
if entrytype not in DEFAULT_ENTRYTYPES:
|
||||
raise ValueError('Invalid entry')
|
||||
|
||||
if entryvalue == '':
|
||||
entryvalue = None
|
||||
elif not entryvalue:
|
||||
return ValueError('Invalid entry value')
|
||||
|
||||
if len(permissions) != 3:
|
||||
raise ValueError('Unsupported amount of permissions')
|
||||
|
||||
return {
|
||||
entrytype: {
|
||||
entryvalue: acl_parse_permission(permissions)
|
||||
}
|
||||
}
|
||||
|
||||
def acl_parse_entries(acl):
|
||||
outmap = {
|
||||
group: DEFAULT_PERMISSIONS for group in DEFAULT_ENTRYTYPES
|
||||
}
|
||||
|
||||
for entry in acl:
|
||||
outmap.update(acl_parse_entry(entry))
|
||||
|
||||
return outmap
|
20
pyproject.toml
Normal file
20
pyproject.toml
Normal file
@ -0,0 +1,20 @@
|
||||
[build-system]
|
||||
requires = [
|
||||
'hatchling',
|
||||
]
|
||||
build-backend = 'hatchling.build'
|
||||
|
||||
[project]
|
||||
name = 'pyacl'
|
||||
description = 'High level abstractions over pylibacl'
|
||||
version = '0.0.1'
|
||||
authors = [
|
||||
{ name='Georg Pfuetzenreuter', email='georg+python@lysergic.dev' },
|
||||
]
|
||||
readme = 'README.txt'
|
||||
requires-python = '>=3.6'
|
||||
|
||||
[tool.hatch.build.targets.pyacl]
|
||||
dependencies = [
|
||||
'pylibacl',
|
||||
]
|
Loading…
Reference in New Issue
Block a user