aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xclip10
1 files changed, 8 insertions, 2 deletions
diff --git a/clip b/clip
index f61b751..0bdc35f 100755
--- a/clip
+++ b/clip
@@ -37,12 +37,18 @@ def fileno(filelike):
@contextlib.contextmanager
-def secure_open(path, *l, **kw):
+def secure_open(path, mode='r', *l, **kw):
if os.path.islink(path):
raise SecurityError("The clipboard file can not be a symlink")
- with open(path, *l, **kw) as fo:
+ real_mode = mode
+ if 'w' in real_mode:
+ real_mode = real_mode.replace('w', 'a')
+ with open(path, real_mode, *l, **kw) as fo:
if os.fstat(fileno(fo)) != os.stat(path):
raise SecurityError("Intrusion might have been done on %s" % path)
+ if 'w' in mode:
+ os.lseek(fileno(fo), 0, os.SEEK_SET)
+ os.ftruncate(fileno(fo), 0)
os.fchmod(fileno(fo), 0o600)
yield fo