New submission from Ed Schouten:

CloudABI is a sandboxed UNIX-like environment 
(https://mail.python.org/pipermail/python-dev/2016-July/145708.html). As it 
implements a security framework similar to FreeBSD's Capsicum, file system 
access is only permitted by using POSIX-2008-style directory file descriptors. 
To explain it simply, the API is as follows:

- Take POSIX 2008
- Remove all the non-*at() functions
- Remove AT_FDCWD

It would be nice if Python could support CloudABI out of the box, but in my 
opinion this should be done in a way that's as unintrusive as possible. We 
shouldn't make a mess out of Python, just to support CloudABI. I've been 
looking at Python's posixmodule and I think there's some low-hanging fruit. We 
can make changes that significantly reduce the size of our patchset for 
CloudABI, while also making the existing code easier to understand:

- When support for *at() functions was added, they didn't replace the calls to 
the non-*at() functions. The non-*at() functions are still invoked when dir_fd 
== AT_FDCWD. This can be changed to invoke the *at() functions unconditionally. 
The advantage of this approach is that AT_FDCWD then only needs to be used in 
dir_fd_converter() and a small number of other places. It also means that the 
code builds on systems that don't prove the non-*at() functions.

- The *_DIR_FD_CONVERTER macros aren't used in a small number of places, 
requiring us to do additional checks against AT_FDCWD in os_*_impl(). In 
os.link(), os.rename() and os.replace(), we call into dir_fd_converter() 
unconditionally, only to let the respective implementation functions perform 
additional checks. If dir_fd_unavailable() would be used instead, the 
implementations would be cleaner.

The attached patch does this refactoring, also making some minor cleanups along 
the way.

----------
components: Extension Modules
files: posixmodule-refactoring.diff
keywords: patch
messages: 272114
nosy: EdSchouten
priority: normal
severity: normal
status: open
title: [posixmodule] [Refactoring patch] Simply call into *at() functions 
unconditionally when present
versions: Python 3.6
Added file: http://bugs.python.org/file44033/posixmodule-refactoring.diff

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue27701>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to