aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/fix_private-bin.py
diff options
context:
space:
mode:
authorLibravatar netblue30 <netblue30@yahoo.com>2017-01-04 08:34:16 -0500
committerLibravatar netblue30 <netblue30@yahoo.com>2017-01-04 08:34:16 -0500
commitceaee7d23c9650ccb4d88e3d07c42a3443b75839 (patch)
tree70a26f27c7c3337ecb71c289ee0847086b5a8048 /contrib/fix_private-bin.py
parentallow non-seccomp setup for OverlayFS sandboxes (diff)
downloadfirejail-ceaee7d23c9650ccb4d88e3d07c42a3443b75839.tar.gz
firejail-ceaee7d23c9650ccb4d88e3d07c42a3443b75839.tar.zst
firejail-ceaee7d23c9650ccb4d88e3d07c42a3443b75839.zip
3 new Python scripts in contrib section
Diffstat (limited to 'contrib/fix_private-bin.py')
-rwxr-xr-xcontrib/fix_private-bin.py68
1 files changed, 68 insertions, 0 deletions
diff --git a/contrib/fix_private-bin.py b/contrib/fix_private-bin.py
new file mode 100755
index 000000000..705e46e46
--- /dev/null
+++ b/contrib/fix_private-bin.py
@@ -0,0 +1,68 @@
1#!/usr/bin/python3
2
3import sys, os, glob, re
4
5privRx=re.compile("^(?:#\s*)?private-bin")
6
7def fixSymlinkedBins(files, replMap):
8 rxs=dict()
9 for (old,new) in replMap.items():
10 rxs[old]=re.compile("\\b"+old+"\\b")
11 rxs[new]=re.compile("\\b"+new+"\\b")
12 print(rxs)
13
14 for filename in files:
15 lines=None
16 with open(filename,"r") as file:
17 lines=file.readlines()
18
19 shouldUpdate=False
20 for (i,line) in enumerate(lines):
21 if privRx.search(line):
22 for (old,new) in replMap.items():
23 if rxs[old].search(line) and not rxs[new].search(line):
24 lines[i]=rxs[old].sub(old+","+new, line)
25 shouldUpdate=True
26 print(lines[i])
27
28 if shouldUpdate:
29 with open(filename,"w") as file:
30 file.writelines(lines)
31 pass
32
33def createListOfBinaries(files):
34 s=set()
35 for filename in files:
36 lines=None
37 with open(filename,"r") as file:
38 for line in file:
39 if privRx.search(line):
40 bins=line.split(",")
41 bins[0]=bins[0].split(" ")[-1]
42 bins = [n.strip() for n in bins]
43 s=s|set(bins)
44 return s
45
46def createSymlinkTable(binDirs, binariesSet):
47 m=dict()
48 for sh in binariesSet:
49 for bD in binDirs:
50 p=bD+os.path.sep+sh
51 if os.path.exists(p):
52 if os.path.islink(p):
53 m[sh]=os.readlink(p)
54 else:
55 pass
56 break
57 return m
58
59
60sh="sh"
61binDirs=["/bin","/usr/bin","/usr/sbin","/usr/local/bin","/usr/local/sbin"]
62profilesPath="."
63files=glob.glob(profilesPath+os.path.sep+"*.profile")
64
65bins=createListOfBinaries(files)
66stbl=createSymlinkTable(binDirs,bins)
67print(stbl)
68fixSymlinkedBins(files,{a[0]:a[1] for a in stbl.items() if a[0].find("/") < 0 and a[1].find("/")<0})