Linux host2.homegym.sg 4.18.0-553.8.1.el8_10.x86_64 #1 SMP Tue Jul 2 07:26:33 EDT 2024 x86_64
Apache
Server IP : 159.223.38.192 & Your IP : 159.223.38.192
Domains : 20 Domain
User : eachadea
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Lock Shell
Lock File++
Readme
/
usr /
sbin /
Delete
Unzip
Name
Size
Permission
Date
Action
NetworkManager
3.41
MB
-rwxr-xr-x
2025-08-26 09:47
a3mnt
832
B
-rwxr-xr-x
2025-10-16 17:25
aakore
481
B
-rwxr-xr-x
2025-10-16 17:25
accessdb
12.59
KB
-rwxr-xr-x
2021-10-08 13:04
acp-update-controller
820
B
-rwxr-xr-x
2025-10-16 17:25
acrocmd
822
B
-rwxr-xr-x
2025-10-16 17:25
acronis_encrypt
818
B
-rwxr-xr-x
2025-10-16 17:26
acronis_mms
1.29
KB
-rwxr-xr-x
2025-10-16 17:25
acronis_schedinfo
435
B
-rwxr-xr-x
2025-10-16 17:26
acronis_schedule
818
B
-rwxr-xr-x
2025-10-16 17:25
acropsh
804
B
-rwxr-xr-x
2025-10-16 17:25
addgnupghome
3
KB
-rwxr-xr-x
2018-12-11 07:44
addpart
24.86
KB
-rwxr-xr-x
2024-04-06 13:02
adduser
148.17
KB
-rwxr-xr-x
2024-04-06 14:00
agetty
62.38
KB
-rwxr-xr-x
2024-04-06 13:02
alternatives
36.66
KB
-rwxr-xr-x
2023-10-14 22:48
anacron
40.99
KB
-rwxr-xr-x
2024-04-06 11:40
apachectl
4.52
KB
-rwxr-xr-x
2025-10-15 20:35
applygnupgdefaults
2.17
KB
-rwxr-xr-x
2017-12-18 12:28
arp
64.71
KB
-rwxr-xr-x
2020-08-30 17:47
arpd
109.52
KB
-rwxr-xr-x
2024-05-23 08:36
arping
28.74
KB
-rwxr-xr-x
2023-10-14 17:19
atd
32.63
KB
-rwxr-xr-x
2022-10-10 10:23
atrun
67
B
-rwxr-xr-x
2022-10-10 10:23
auditctl
45.04
KB
-rwxr-xr-x
2025-07-15 09:41
auditd
151.73
KB
-rwxr-xr-x
2025-07-15 09:41
augenrules
4.04
KB
-rwxr-xr-x
2025-07-15 09:41
aureport
122.35
KB
-rwxr-xr-x
2025-07-15 09:41
ausearch
130.36
KB
-rwxr-xr-x
2025-07-15 09:41
autrace
16.54
KB
-rwxr-x---
2025-07-15 09:41
avcstat
16.4
KB
-rwxr-xr-x
2025-03-11 12:11
badblocks
32.59
KB
-rwxr-xr-x
2025-10-07 07:08
biosdecode
21.45
KB
-rwxr-xr-x
2024-04-06 13:04
blkdeactivate
15.97
KB
-r-xr-xr-x
2025-07-15 09:03
blkdiscard
29.05
KB
-rwxr-xr-x
2024-04-06 13:02
blkid
98.66
KB
-rwxr-xr-x
2024-04-06 13:02
blkmapd
53.47
KB
-rwxr-xr-x
2025-06-04 10:54
blkzone
49.74
KB
-rwxr-xr-x
2024-04-06 13:02
blockdev
41.3
KB
-rwxr-xr-x
2024-04-06 13:02
bridge
158.25
KB
-rwxr-xr-x
2024-05-23 08:36
capsh
32.44
KB
-rwxr-xr-x
2024-01-10 14:34
cfdisk
98.4
KB
-rwxr-xr-x
2024-04-06 13:02
cgdisk
206.55
KB
-rwxr-xr-x
2022-10-12 10:53
chcpu
28.84
KB
-rwxr-xr-x
2024-04-06 13:02
chgpasswd
69.69
KB
-rwxr-xr-x
2024-04-06 14:00
chkconfig
45.11
KB
-rwxr-xr-x
2023-10-14 22:48
chpasswd
61.42
KB
-rwxr-xr-x
2024-04-06 14:00
chronyd
375.66
KB
-rwxr-xr-x
2024-11-05 07:47
chroot
41.52
KB
-rwxr-xr-x
2023-04-01 08:44
clock
65.22
KB
-rwxr-xr-x
2024-04-06 13:02
clockdiff
20.43
KB
-rwxr-xr-x
2023-10-14 17:19
consoletype
11.85
KB
-rwxr-xr-x
2022-10-08 11:08
convertquota
78.68
KB
-rwxr-xr-x
2021-10-09 07:08
cracklib-check
13.05
KB
-rwxr-xr-x
2019-10-12 00:47
cracklib-format
251
B
-rwxr-xr-x
2019-10-12 00:47
cracklib-packer
13.05
KB
-rwxr-xr-x
2019-10-12 00:47
cracklib-unpacker
9.03
KB
-rwxr-xr-x
2019-10-12 00:47
create-cracklib-dict
990
B
-rwxr-xr-x
2019-10-12 00:47
crond
73.94
KB
-rwxr-xr-x
2024-04-06 11:40
csf
245.1
KB
-rwx------
2025-02-28 14:06
ctrlaltdel
24.79
KB
-rwxr-xr-x
2024-04-06 13:02
ctstat
25.33
KB
-rwxr-xr-x
2024-05-23 08:36
dcb
155.04
KB
-rwxr-xr-x
2024-05-23 08:36
ddns-confgen
20.46
KB
-rwxr-xr-x
2025-02-20 09:05
debugfs
231.63
KB
-rwxr-xr-x
2025-10-07 07:08
delpart
24.86
KB
-rwxr-xr-x
2024-04-06 13:02
depmod
159.95
KB
-rwxr-xr-x
2024-04-08 09:18
devlink
215.87
KB
-rwxr-xr-x
2024-05-23 08:36
dhclient
453.68
KB
-rwxr-xr-x
2024-05-22 17:58
dhclient-script
32.86
KB
-rwxr-xr-x
2024-05-22 16:12
dkms
117.1
KB
-rwxr-xr-x
2025-07-29 05:51
dmfilemapd
24.55
KB
-r-xr-xr-x
2025-07-15 09:03
dmidecode
141.8
KB
-rwxr-xr-x
2024-04-06 13:04
dmsetup
158.64
KB
-r-xr-xr-x
2025-07-15 09:03
dmstats
158.64
KB
-r-xr-xr-x
2025-07-15 09:03
dnssec-checkds
936
B
-rwxr-xr-x
2025-02-20 09:05
dnssec-coverage
938
B
-rwxr-xr-x
2025-02-20 09:05
dnssec-dsfromkey
60.84
KB
-rwxr-xr-x
2025-02-20 09:05
dnssec-importkey
60.84
KB
-rwxr-xr-x
2025-02-20 09:05
dnssec-keyfromlabel
64.76
KB
-rwxr-xr-x
2025-02-20 09:05
dnssec-keygen
72.84
KB
-rwxr-xr-x
2025-02-20 09:05
dnssec-keymgr
934
B
-rwxr-xr-x
2025-02-20 09:05
dnssec-revoke
56.74
KB
-rwxr-xr-x
2025-02-20 09:05
dnssec-settime
60.84
KB
-rwxr-xr-x
2025-02-20 09:05
dnssec-signzone
117.2
KB
-rwxr-xr-x
2025-02-20 09:05
dnssec-verify
52.84
KB
-rwxr-xr-x
2025-02-20 09:05
dovecot
137.48
KB
-rwxr-xr-x
2025-02-25 20:04
dovecot_cpshutdown
3.27
KB
-rwxr-xr-x
2025-02-25 20:00
dpkg-fsys-usrunmess
12.11
KB
-rwxr-xr-x
2021-12-15 12:46
dumpe2fs
32.52
KB
-rwxr-xr-x
2025-10-07 07:08
e2freefrag
16.42
KB
-rwxr-xr-x
2025-10-07 07:08
e2fsck
328.52
KB
-rwxr-xr-x
2025-10-07 07:08
e2image
36.61
KB
-rwxr-xr-x
2025-10-07 07:08
e2label
110.63
KB
-rwxr-xr-x
2025-10-07 07:08
e2mmpstatus
32.52
KB
-rwxr-xr-x
2025-10-07 07:08
e2undo
20.38
KB
-rwxr-xr-x
2025-10-07 07:08
e4crypt
24.55
KB
-rwxr-xr-x
2025-10-07 07:08
e4defrag
28.49
KB
-rwxr-xr-x
2025-10-07 07:08
edquota
91.24
KB
-rwxr-xr-x
2021-10-09 07:08
ether-wake
73.99
KB
-rwxr-xr-x
2020-08-30 17:47
ethtool
557.79
KB
-rwxr-xr-x
2022-10-08 17:27
exicyclog
11.1
KB
-rwxr-xr-x
2025-05-12 17:54
exigrep
10.52
KB
-rwxr-xr-x
2025-05-12 17:54
exim
1.49
MB
-rwsr-xr-x
2025-05-12 17:54
exim_checkaccess
4.83
KB
-rwxr-xr-x
2025-05-12 17:54
exim_dbmbuild
23.23
KB
-rwxr-xr-x
2025-05-12 17:54
exim_dumpdb
38.02
KB
-rwxr-xr-x
2025-05-12 17:54
exim_fixdb
47.56
KB
-rwxr-xr-x
2025-05-12 17:54
exim_lock
26.59
KB
-rwxr-xr-x
2025-05-12 17:54
exim_tidydb
42.35
KB
-rwxr-xr-x
2025-05-12 17:54
eximstats
148.26
KB
-rwxr-xr-x
2025-05-12 17:54
exinext
7.14
KB
-rwxr-xr-x
2025-05-12 17:54
exiqgrep
5.66
KB
-rwxr-xr-x
2025-05-12 17:54
exiqsumm
5.32
KB
-rwxr-xr-x
2025-05-12 17:54
exiwhat
4.42
KB
-rwxr-xr-x
2025-05-12 17:54
exportfs
82.38
KB
-rwxr-xr-x
2025-06-04 10:54
faillock
20.52
KB
-rwxr-xr-x
2025-08-26 08:59
fcgistarter
17.11
KB
-rwxr-xr-x
2025-10-15 20:39
fdformat
33.17
KB
-rwxr-xr-x
2024-04-06 13:02
fdisk
130.92
KB
-rwxr-xr-x
2024-04-06 13:02
filefrag
16.46
KB
-rwxr-xr-x
2025-10-07 07:08
findfs
12.37
KB
-rwxr-xr-x
2024-04-06 13:02
fix-info-dir
7.84
KB
-rwxr-xr-x
2022-04-18 17:09
fixfiles
10.48
KB
-rwxr-xr-x
2024-07-02 21:04
fixparts
74.91
KB
-rwxr-xr-x
2022-10-12 10:53
fsck
53.47
KB
-rwxr-xr-x
2024-04-06 13:02
fsck.cramfs
41.4
KB
-rwxr-xr-x
2024-04-06 13:02
fsck.ext2
328.52
KB
-rwxr-xr-x
2025-10-07 07:08
fsck.ext3
328.52
KB
-rwxr-xr-x
2025-10-07 07:08
fsck.ext4
328.52
KB
-rwxr-xr-x
2025-10-07 07:08
fsck.minix
98.74
KB
-rwxr-xr-x
2024-04-06 13:02
fsck.xfs
1.92
KB
-rwxr-xr-x
2023-10-15 05:10
fsfreeze
16.38
KB
-rwxr-xr-x
2024-04-06 13:02
fstrim
49.6
KB
-rwxr-xr-x
2024-04-06 13:02
fuse2fs
70.39
KB
-rwxr-xr-x
2025-10-07 07:08
fuser
38.14
KB
-rwxr-xr-x
2020-11-06 14:24
g13-syshelp
189.71
KB
-rwxr-xr-x
2022-09-13 10:15
gdisk
214.46
KB
-rwxr-xr-x
2022-10-12 10:53
genhomedircon
29.27
KB
-rwxr-xr-x
2024-07-02 21:04
genhostid
11.85
KB
-rwxr-xr-x
2022-10-08 11:08
genl
121.41
KB
-rwxr-xr-x
2024-05-23 08:36
genrandom
12.38
KB
-rwxr-xr-x
2025-02-20 09:05
getcap
12.34
KB
-rwxr-xr-x
2024-01-10 14:34
getenforce
7.84
KB
-rwxr-xr-x
2025-03-11 12:11
getpcaps
12.27
KB
-rwxr-xr-x
2024-01-10 14:34
getsebool
11.88
KB
-rwxr-xr-x
2025-03-11 12:11
groupadd
95.34
KB
-rwxr-xr-x
2024-04-06 14:00
groupdel
91.09
KB
-rwxr-xr-x
2024-04-06 14:00
groupmems
61.48
KB
-rwxr-xr-x
2024-04-06 14:00
groupmod
99.37
KB
-rwxr-xr-x
2024-04-06 14:00
grpck
61.48
KB
-rwxr-xr-x
2024-04-06 14:00
grpconv
57.26
KB
-rwxr-xr-x
2024-04-06 14:00
grpunconv
57.25
KB
-rwxr-xr-x
2024-04-06 14:00
grub2-bios-setup
1.16
MB
-rwxr-xr-x
2025-10-07 08:06
grub2-get-kernel-settings
2.68
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-install
1.44
MB
-rwxr-xr-x
2025-10-07 08:06
grub2-macbless
1.14
MB
-rwxr-xr-x
2025-10-07 08:06
grub2-mkconfig
8.68
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-ofpathname
242.26
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-probe
1.16
MB
-rwxr-xr-x
2025-10-07 08:06
grub2-reboot
3.99
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-rpm-sort
279.16
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-set-bootflag
16.34
KB
-rwsr-xr-x
2025-10-07 08:06
grub2-set-default
3.45
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-set-password
3.05
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-setpassword
3.05
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-sparc64-setup
1.16
MB
-rwxr-xr-x
2025-10-07 08:06
grub2-switch-to-blscfg
8.6
KB
-rwxr-xr-x
2025-10-07 08:06
grubby
260
B
-rwxr-xr-x
2024-04-06 13:02
gss-server
24.62
KB
-rwxr-xr-x
2025-06-03 02:06
gssproxy
132.08
KB
-rwxr-xr-x
2022-10-08 08:02
halt
218.45
KB
-rwxr-xr-x
2025-04-22 01:58
hardlink
17.09
KB
-rwxr-xr-x
2019-10-15 21:49
hdparm
131.91
KB
-rwxr-xr-x
2021-10-08 19:47
htcacheclean
44.36
KB
-rwxr-xr-x
2025-10-15 20:39
httpd
990.57
KB
-rwxr-xr-x
2025-10-15 20:39
hwclock
65.22
KB
-rwxr-xr-x
2024-04-06 13:02
iconvconfig
33.05
KB
-rwxr-xr-x
2025-08-05 14:12
ifconfig
80.86
KB
-rwxr-xr-x
2020-08-30 17:47
ifdown
2.07
KB
-rwxr-xr-x
2022-08-10 13:03
ifenslave
24.95
KB
-rwxr-xr-x
2023-10-14 17:19
ifstat
117.67
KB
-rwxr-xr-x
2024-05-23 08:36
ifup
5.33
KB
-rwxr-xr-x
2022-08-10 13:03
imunify-notifier
9.82
MB
-rwxr-xr-x
2024-10-25 12:14
init
1.53
MB
-rwxr-xr-x
2025-04-22 01:58
insmod
159.95
KB
-rwxr-xr-x
2024-04-08 09:18
install-info
50.23
KB
-rwxr-xr-x
2022-04-18 17:09
installkernel
323
B
-rwxr-xr-x
2024-04-06 13:02
intel_sdsi
15.62
KB
-rwxr-xr-x
2025-10-27 15:46
ip
693.3
KB
-rwxr-xr-x
2024-05-23 08:36
ip6tables
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
ip6tables-apply
6.89
KB
-rwxr-xr-x
2024-04-02 18:37
ip6tables-restore
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
ip6tables-restore-translate
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
ip6tables-save
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
ip6tables-translate
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
ipmaddr
21
KB
-rwxr-xr-x
2020-08-30 17:47
iptables
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
iptables-apply
6.89
KB
-rwxr-xr-x
2024-04-02 18:37
iptables-restore
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
iptables-restore-translate
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
iptables-save
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
iptables-translate
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
iptunnel
25
KB
-rwxr-xr-x
2020-08-30 17:47
irqbalance
62.28
KB
-rwxr-xr-x
2023-10-14 17:57
irqbalance-ui
41.29
KB
-rwxr-xr-x
2023-10-14 17:57
isc-hmac-fixup
11.85
KB
-rwxr-xr-x
2025-02-20 09:05
kexec
194.98
KB
-rwxr-xr-x
2024-09-24 08:36
key.dns_resolver
24.52
KB
-rwxr-xr-x
2021-10-08 13:50
kpartx
49.05
KB
-rwxr-xr-x
2025-04-22 01:55
lchage
16.41
KB
-rwxr-xr-x
2024-09-24 02:24
ldattach
32.99
KB
-rwxr-xr-x
2024-04-06 13:02
ldconfig
986.02
KB
-rwxr-xr-x
2025-08-05 14:12
lfd
382.45
KB
-rwx------
2025-02-28 14:06
lgroupadd
11.88
KB
-rwxr-xr-x
2024-09-24 02:24
lgroupdel
11.88
KB
-rwxr-xr-x
2024-09-24 02:24
lgroupmod
19.88
KB
-rwxr-xr-x
2024-09-24 02:24
lid
16.27
KB
-rwxr-xr-x
2024-09-24 02:24
lnewusers
19.87
KB
-rwxr-xr-x
2024-09-24 02:24
lnstat
25.33
KB
-rwxr-xr-x
2024-05-23 08:36
load_policy
12.28
KB
-rwxr-xr-x
2024-07-02 21:04
logrotate
93.03
KB
-rwxr-xr-x
2023-04-02 00:29
logsave
16.41
KB
-rwxr-xr-x
2025-10-07 07:08
losetup
90.59
KB
-rwxr-xr-x
2024-04-06 13:02
lpasswd
20.35
KB
-rwxr-xr-x
2024-09-24 02:24
lshw
969.55
KB
-rwxr-xr-x
2025-10-07 08:50
lsmod
159.95
KB
-rwxr-xr-x
2024-04-08 09:18
luseradd
19.88
KB
-rwxr-xr-x
2024-09-24 02:24
luserdel
15.88
KB
-rwxr-xr-x
2024-09-24 02:24
lusermod
19.88
KB
-rwxr-xr-x
2024-09-24 02:24
lwresd
840.86
KB
-rwxr-xr-x
2025-02-20 09:05
makedumpfile
425.19
KB
-rwxr-xr-x
2024-09-24 08:36
matchpathcon
12.37
KB
-rwxr-xr-x
2025-03-11 12:11
mediabuilder
826
B
-rwxr-xr-x
2025-10-16 17:13
mii-diag
25.4
KB
-rwxr-xr-x
2020-08-30 17:47
mii-tool
21.03
KB
-rwxr-xr-x
2020-08-30 17:47
mkdict
251
B
-rwxr-xr-x
2019-10-12 00:47
mkdumprd
12.68
KB
-rwxr-xr-x
2024-09-24 08:36
mke2fs
138.45
KB
-rwxr-xr-x
2025-10-07 07:08
mkfadumprd
2.23
KB
-rwxr-xr-x
2024-09-24 08:36
mkfs
16.47
KB
-rwxr-xr-x
2024-04-06 13:02
mkfs.cramfs
41.26
KB
-rwxr-xr-x
2024-04-06 13:02
mkfs.ext2
138.45
KB
-rwxr-xr-x
2025-10-07 07:08
mkfs.ext3
138.45
KB
-rwxr-xr-x
2025-10-07 07:08
mkfs.ext4
138.45
KB
-rwxr-xr-x
2025-10-07 07:08
mkfs.minix
86.55
KB
-rwxr-xr-x
2024-04-06 13:02
mkfs.xfs
475.98
KB
-rwxr-xr-x
2023-10-15 05:11
mkhomedir_helper
24.43
KB
-rwxr-xr-x
2025-08-26 08:59
mklost+found
11.86
KB
-rwxr-xr-x
2025-10-07 07:08
mksquashfs
186.83
KB
-rwxr-xr-x
2024-04-06 14:17
mkswap
86.47
KB
-rwxr-xr-x
2024-04-06 13:02
modinfo
159.95
KB
-rwxr-xr-x
2024-04-08 09:18
modprobe
159.95
KB
-rwxr-xr-x
2024-04-08 09:18
modsec-sdbm-util
25.83
KB
-rwxr-x---
2025-08-19 20:11
mount.nfs
197.24
KB
-rwsr-xr-x
2025-06-04 10:54
mount.nfs4
197.24
KB
-rwsr-xr-x
2025-06-04 10:54
mountstats
42.22
KB
-rwxr-xr-x
2025-06-04 10:53
mysqld
62.62
MB
-rwxr-xr-x
2024-06-13 12:01
named
840.86
KB
-rwxr-xr-x
2025-02-20 09:05
named-checkconf
36.77
KB
-rwxr-xr-x
2025-02-20 09:05
named-checkzone
36.63
KB
-rwxr-xr-x
2025-02-20 09:05
named-compilezone
36.63
KB
-rwxr-xr-x
2025-02-20 09:05
named-journalprint
11.85
KB
-rwxr-xr-x
2025-02-20 09:05
nameif
16.98
KB
-rwxr-xr-x
2020-08-30 17:47
newusers
107.23
KB
-rwxr-xr-x
2024-04-06 14:00
nfsconf
37.48
KB
-rwxr-xr-x
2025-06-04 10:54
nfsconvert
13.03
KB
-rwxr-xr-x
2025-06-04 10:54
nfsdcld
65.87
KB
-rwxr-xr-x
2025-06-04 10:54
nfsdclddb
10
KB
-rwxr-xr-x
2025-06-04 10:53
nfsdclnts
9.02
KB
-rwxr-xr-x
2025-06-04 10:53
nfsdcltrack
49.78
KB
-rwxr-xr-x
2025-06-04 10:54
nfsidmap
45.36
KB
-rwxr-xr-x
2025-06-04 10:54
nfsiostat
23.36
KB
-rwxr-xr-x
2025-06-04 10:53
nfsref
65.8
KB
-rwxr-xr-x
2025-06-04 10:54
nfsstat
35.52
KB
-rwxr-xr-x
2025-06-04 10:54
nft
24.41
KB
-rwxr-xr-x
2025-01-28 01:24
nologin
11.87
KB
-rwxr-xr-x
2024-04-06 13:02
nscd
160.68
KB
-rwxr-xr-x
2025-08-05 14:12
nsec3hash
12.29
KB
-rwxr-xr-x
2025-02-20 09:05
nstat
113.57
KB
-rwxr-xr-x
2024-05-23 08:36
ownership
12.4
KB
-rwxr-xr-x
2024-04-06 13:04
packer
13.05
KB
-rwxr-xr-x
2019-10-12 00:47
pam_console_apply
45.2
KB
-rwxr-xr-x
2025-08-26 08:59
pam_timestamp_check
11.87
KB
-rwsr-xr-x
2025-08-26 08:59
paperconfig
4.07
KB
-rwxr-xr-x
2019-10-12 20:09
parted
85.6
KB
-rwxr-xr-x
2021-10-08 15:43
partprobe
16.39
KB
-rwxr-xr-x
2021-10-08 15:43
partx
94.5
KB
-rwxr-xr-x
2024-04-06 13:02
pdns_server
6.24
MB
-rwxr-xr-x
2025-05-12 18:42
pidof
16.7
KB
-rwxr-xr-x
2023-10-14 20:31
ping
66.13
KB
-rwxr-xr-x
2023-10-14 17:19
ping6
66.13
KB
-rwxr-xr-x
2023-10-14 17:19
pivot_root
12.38
KB
-rwxr-xr-x
2024-04-06 13:02
plipconfig
12.71
KB
-rwxr-xr-x
2020-08-30 17:47
pluginviewer
20.57
KB
-rwxr-xr-x
2022-02-23 20:13
poweroff
218.45
KB
-rwxr-xr-x
2025-04-22 01:58
pure-authd
19.23
KB
-rwxr-xr-x
2024-10-30 12:42
pure-certd
19.13
KB
-rwxr-xr-x
2024-10-30 12:42
pure-config.pl
4.64
KB
-rwxr-xr-x
2024-10-30 12:41
pure-ftpd
182.06
KB
-rwxr-xr-x
2024-10-30 12:42
pure-ftpwho
26.82
KB
-rwxr-xr-x
2024-10-30 12:42
pure-mrtginfo
11.16
KB
-rwxr-xr-x
2024-10-30 12:42
pure-quotacheck
18.81
KB
-rwxr-xr-x
2024-10-30 12:42
pure-uploadscript
19.07
KB
-rwxr-xr-x
2024-10-30 12:42
pwck
57.27
KB
-rwxr-xr-x
2024-04-06 14:00
pwconv
53.1
KB
-rwxr-xr-x
2024-04-06 14:00
pwhistory_helper
20.44
KB
-rwxr-xr-x
2025-08-26 08:59
pwunconv
53.13
KB
-rwxr-xr-x
2024-04-06 14:00
quot
78.67
KB
-rwxr-xr-x
2021-10-09 07:08
quotacheck
115.75
KB
-rwxr-xr-x
2021-10-09 07:08
quotaoff
83.16
KB
-rwxr-xr-x
2021-10-09 07:08
quotaon
83.16
KB
-rwxr-xr-x
2021-10-09 07:08
quotastats
16.54
KB
-rwxr-xr-x
2021-10-09 07:08
rdisc
24.55
KB
-rwxr-xr-x
2023-10-14 17:19
rdma
187.38
KB
-rwxr-xr-x
2024-05-23 08:36
readprofile
20.55
KB
-rwxr-xr-x
2024-04-06 13:02
reboot
218.45
KB
-rwxr-xr-x
2025-04-22 01:58
repquota
83.24
KB
-rwxr-xr-x
2021-10-09 07:08
request-key
24.38
KB
-rwxr-xr-x
2021-10-08 13:50
resize2fs
64.91
KB
-rwxr-xr-x
2025-10-07 07:08
resizepart
41.56
KB
-rwxr-xr-x
2024-04-06 13:02
resolvconf
195.74
KB
-rwxr-xr-x
2025-04-22 01:58
restorecon
20.53
KB
-rwxr-xr-x
2024-07-02 21:04
restorecon_xattr
16.41
KB
-rwxr-xr-x
2024-07-02 21:04
rfkill
53.46
KB
-rwxr-xr-x
2024-04-06 13:02
rmmod
159.95
KB
-rwxr-xr-x
2024-04-08 09:18
rndc
36.53
KB
-rwxr-xr-x
2025-02-20 09:05
rndc-confgen
20.45
KB
-rwxr-xr-x
2025-02-20 09:05
rotatelogs
30.51
KB
-rwxr-xr-x
2025-10-15 20:39
route
67.63
KB
-rwxr-xr-x
2020-08-30 17:47
rpc.gssd
106.55
KB
-rwxr-xr-x
2025-06-04 10:54
rpc.idmapd
61.73
KB
-rwxr-xr-x
2025-06-04 10:54
rpc.mountd
158.92
KB
-rwxr-xr-x
2025-06-04 10:54
rpc.nfsd
49.91
KB
-rwxr-xr-x
2025-06-04 10:54
rpc.statd
103.29
KB
-rwxr-xr-x
2025-06-04 10:54
rpcbind
61.55
KB
-rwxr-xr-x
2022-10-12 11:00
rpcctl
9.41
KB
-rwxr-xr-x
2025-06-04 10:53
rpcdebug
19.38
KB
-rwxr-xr-x
2025-06-04 10:54
rpcinfo
32.64
KB
-rwxr-xr-x
2022-10-12 11:00
rsyslogd
724.73
KB
-rwxr-xr-x
2024-11-05 02:34
rtacct
46.94
KB
-rwxr-xr-x
2024-05-23 08:36
rtcwake
49.31
KB
-rwxr-xr-x
2024-04-06 13:02
rtmon
117.27
KB
-rwxr-xr-x
2024-05-23 08:36
rtstat
25.33
KB
-rwxr-xr-x
2024-05-23 08:36
runlevel
218.45
KB
-rwxr-xr-x
2025-04-22 01:58
runq
1.49
MB
-rwsr-xr-x
2025-05-12 17:54
runuser
48.99
KB
-rwxr-xr-x
2024-04-06 13:02
sasl2-shared-mechlist
12.19
KB
-rwxr-xr-x
2022-02-23 20:13
saslauthd
94.42
KB
-rwxr-xr-x
2022-02-23 20:13
sasldblistusers2
20.77
KB
-rwxr-xr-x
2022-02-23 20:13
saslpasswd2
16.42
KB
-rwxr-xr-x
2022-02-23 20:13
schedmgr
818
B
-rwxr-xr-x
2025-10-16 17:25
sedispatch
20.52
KB
-rwxr-xr-x
2024-04-06 13:44
sefcontext_compile
65.35
KB
-rwxr-xr-x
2025-03-11 12:11
selabel_digest
12.28
KB
-rwxr-xr-x
2025-03-11 12:11
selabel_lookup
12.27
KB
-rwxr-xr-x
2025-03-11 12:11
selabel_lookup_best_match
11.89
KB
-rwxr-xr-x
2025-03-11 12:11
selabel_partial_match
11.88
KB
-rwxr-xr-x
2025-03-11 12:11
selinux_check_access
12.36
KB
-rwxr-xr-x
2025-03-11 12:11
selinuxconlist
11.88
KB
-rwxr-xr-x
2025-03-11 12:11
selinuxdefcon
11.88
KB
-rwxr-xr-x
2025-03-11 12:11
selinuxenabled
7.84
KB
-rwxr-xr-x
2025-03-11 12:11
selinuxexeccon
11.86
KB
-rwxr-xr-x
2025-03-11 12:11
semanage
41.18
KB
-rwxr-xr-x
2024-07-02 21:08
semodule
29.27
KB
-rwxr-xr-x
2024-07-02 21:04
sendmail
16.91
KB
-rwxr-sr-x
2025-05-12 17:54
service
3.64
KB
-rwxr-xr-x
2022-08-10 13:03
sestatus
20.41
KB
-rwxr-xr-x
2024-07-02 21:04
setcap
16.27
KB
-rwxr-xr-x
2024-01-10 14:34
setenforce
12.27
KB
-rwxr-xr-x
2025-03-11 12:11
setfiles
20.53
KB
-rwxr-xr-x
2024-07-02 21:04
setquota
91.38
KB
-rwxr-xr-x
2021-10-09 07:08
setroubleshootd
3.34
KB
-rwxr-xr-x
2024-04-06 13:44
setsebool
16.38
KB
-rwxr-xr-x
2024-07-02 21:04
sfdisk
118.5
KB
-rwxr-xr-x
2024-04-06 13:02
sgdisk
198.05
KB
-rwxr-xr-x
2022-10-12 10:53
showmount
21.06
KB
-rwxr-xr-x
2025-06-04 10:54
shutdown
218.45
KB
-rwxr-xr-x
2025-04-22 01:58
sim_server
11.87
KB
-rwxr-xr-x
2025-06-03 02:06
slattach
43.76
KB
-rwxr-xr-x
2020-08-30 17:47
sm-notify
78.14
KB
-rwxr-xr-x
2025-06-04 10:54
smartctl
907.08
KB
-rwxr-xr-x
2024-04-06 14:11
smartd
733.2
KB
-rwxr-xr-x
2024-04-06 14:11
snmpd
32.45
KB
-rwxr-xr-x
2025-10-07 09:19
snmptrapd
32.6
KB
-rwxr-xr-x
2025-10-07 09:19
sos
627
B
-rwxr-xr-x
2025-10-06 03:40
sos-collector
147
B
-rwxr-xr-x
2025-10-06 03:40
sosreport
140
B
-rwxr-xr-x
2025-10-06 03:40
ss
191.3
KB
-rwxr-xr-x
2024-05-23 08:36
sshd
869.75
KB
-rwxr-xr-x
2025-09-30 10:44
sss_cache
61.09
KB
-rwxr-xr-x
2025-06-05 19:42
sssd
73.01
KB
-rwxr-xr-x
2025-06-05 19:42
start-statd
838
B
-rwxr-xr-x
2018-09-06 18:09
start-stop-daemon
45.98
KB
-rwxr-xr-x
2021-12-15 12:46
suexec
25.3
KB
-rwsr-xr-x
2025-10-15 20:39
sulogin
49.24
KB
-rwxr-xr-x
2024-04-06 13:02
suphp
6.56
MB
-rwsr-x---
2025-10-15 20:46
swaplabel
16.5
KB
-rwxr-xr-x
2024-04-06 13:02
swapoff
20.74
KB
-rwxr-xr-x
2024-04-06 13:02
swapon
49.4
KB
-rwxr-xr-x
2024-04-06 13:02
switch_root
16.49
KB
-rwxr-xr-x
2024-04-06 13:02
sysctl
28.88
KB
-rwxr-xr-x
2023-10-14 20:31
syspurpose
415
B
-rwxr-xr-x
2025-07-15 09:13
tcpdump
1.01
MB
-rwxr-xr-x
2024-04-06 11:58
tcpslice
32.63
KB
-rwxr-xr-x
2024-04-06 11:58
tcsd
309.72
KB
-rwxr-xr-x
2024-04-06 12:42
telinit
218.45
KB
-rwxr-xr-x
2025-04-22 01:58
testsaslauthd
16.66
KB
-rwxr-xr-x
2022-02-23 20:13
tibxread
828
B
-rwxr-xr-x
2025-10-16 17:25
timedatex
33.43
KB
-rwxr-xr-x
2019-10-16 17:24
tipc
163.07
KB
-rwxr-xr-x
2024-05-23 08:36
tmpwatch
35.47
KB
-rwxr-xr-x
2019-10-12 11:32
tracepath
20.44
KB
-rwxr-xr-x
2023-10-14 17:19
tracepath6
20.44
KB
-rwxr-xr-x
2023-10-14 17:19
trueimagemnt
850
B
-rwxr-xr-x
2025-10-16 17:25
tsig-keygen
20.46
KB
-rwxr-xr-x
2025-02-20 09:05
tune2fs
110.63
KB
-rwxr-xr-x
2025-10-07 07:08
tuned
3.88
KB
-rwxr-xr-x
2024-02-22 12:23
tuned-adm
6.5
KB
-rwxr-xr-x
2024-02-22 12:23
udevadm
424.59
KB
-rwxr-xr-x
2025-04-22 01:58
umount.nfs
197.24
KB
-rwsr-xr-x
2025-06-04 10:54
umount.nfs4
197.24
KB
-rwsr-xr-x
2025-06-04 10:54
unbound-anchor
57.34
KB
-rwxr-xr-x
2025-07-28 13:31
unix_chkpwd
36.86
KB
-rwsr-xr-x
2025-08-26 08:59
unix_update
36.87
KB
-rwx------
2025-08-26 08:59
unsquashfs
99.57
KB
-rwxr-xr-x
2024-04-06 14:17
update-alternatives
36.66
KB
-rwxr-xr-x
2023-10-14 22:48
update-smart-drivedb
14.44
KB
-rwxr-xr-x
2024-04-06 14:11
useradd
148.17
KB
-rwxr-xr-x
2024-04-06 14:00
userdel
107.29
KB
-rwxr-xr-x
2024-04-06 14:00
usermod
144.07
KB
-rwxr-xr-x
2024-04-06 14:00
usernetctl
12.4
KB
-rwxr-xr-x
2022-10-08 11:08
uuserver
15.88
KB
-rwxr-xr-x
2025-06-03 02:06
varnishd
1.61
MB
-rwxr-xr-x
2025-06-04 10:25
varnishreload
5.43
KB
-rwxr-xr-x
2025-06-04 10:25
vdpa
118.04
KB
-rwxr-xr-x
2024-05-23 08:36
vigr
68.05
KB
-rwxr-xr-x
2024-04-06 14:00
vipw
68.05
KB
-rwxr-xr-x
2024-04-06 14:00
virt-what
14.22
KB
-rwxr-xr-x
2023-10-14 20:52
visudo
239.28
KB
-rwxr-xr-x
2025-08-26 09:02
vmcore-dmesg
28.58
KB
-rwxr-xr-x
2024-09-24 08:36
vpddecode
16.47
KB
-rwxr-xr-x
2024-04-06 13:04
weak-modules
33.6
KB
-rwxr-xr-x
2024-04-08 09:18
whmapi0
3.18
MB
-rwxr-xr-x
2025-10-16 18:06
whmapi1
3.18
MB
-rwxr-xr-x
2025-10-16 18:06
whmlogin
2.33
KB
-rwxr-xr-x
2024-05-22 18:59
wipefs
41.11
KB
-rwxr-xr-x
2024-04-06 13:02
xfs_admin
1.38
KB
-rwxr-xr-x
2023-10-15 05:10
xfs_bmap
695
B
-rwxr-xr-x
2023-10-15 05:11
xfs_copy
434.59
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_db
760.47
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_estimate
12.39
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_freeze
800
B
-rwxr-xr-x
2023-10-15 05:11
xfs_fsr
53.41
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_growfs
422.48
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_info
1.26
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_io
188.28
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_logprint
454.7
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_mdrestore
410.09
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_metadump
782
B
-rwxr-xr-x
2023-10-15 05:10
xfs_mkfile
1.02
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_ncheck
685
B
-rwxr-xr-x
2023-10-15 05:10
xfs_quota
93.98
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_repair
715.24
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_rtcp
16.38
KB
-rwxr-xr-x
2023-10-15 05:11
xfs_spaceman
45.42
KB
-rwxr-xr-x
2023-10-15 05:11
xqmstats
16.45
KB
-rwxr-xr-x
2021-10-09 07:08
xtables-monitor
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
xtables-nft-multi
220.8
KB
-rwxr-xr-x
2024-04-02 18:37
zabbix_agentd
635.65
KB
-rwxr-xr-x
2025-01-27 10:11
zdump
20.57
KB
-rwxr-xr-x
2025-08-05 14:12
zic
52.83
KB
-rwxr-xr-x
2025-08-05 14:12
zramctl
99.09
KB
-rwxr-xr-x
2024-04-06 13:02
Save
Rename
#! /usr/libexec/platform-python -EsI # Copyright (C) 2012-2013 Red Hat # AUTHOR: Miroslav Grepl <mgrepl@redhat.com> # AUTHOR: David Quigley <selinux@davequigley.com> # see file 'COPYING' for use and warranty information # # semanage is a tool for managing SELinux configuration files # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA # 02111-1307 USA # # import argparse import os import re import sys import traceback PROGNAME = "selinux-python" try: import gettext kwargs = {} if sys.version_info < (3,): kwargs['unicode'] = True gettext.install(PROGNAME, localedir="/usr/share/locale", codeset='utf-8', **kwargs) except: try: import builtins builtins.__dict__['_'] = str except ImportError: import __builtin__ __builtin__.__dict__['_'] = unicode # define custom usages for selected main actions usage_login = "semanage login [-h] [-n] [-N] [-S STORE] [" usage_login_dict = {' --add': ('-s SEUSER', '-r RANGE', 'LOGIN',), ' --modify': ('-s SEUSER', '-r RANGE', 'LOGIN',), ' --delete': ('LOGIN',), ' --list': ('-C',), ' --extract': ('',), ' --deleteall': ('',)} usage_fcontext = "semanage fcontext [-h] [-n] [-N] [-S STORE] [" usage_fcontext_dict = {' --add': ('(', '-t TYPE', '-f FTYPE', '-r RANGE', '-s SEUSER', '|', '-e EQUAL', ')', 'FILE_SPEC',), ' --delete': ('(', '-t TYPE', '-f FTYPE', '|', '-e EQUAL', ')', 'FILE_SPEC',), ' --modify': ('(', '-t TYPE', '-f FTYPE', '-r RANGE', '-s SEUSER', '|', '-e EQUAL', ')', 'FILE_SPEC',), ' --list': ('[-C]',), ' --extract': ('',), ' --deleteall': ('',)} usage_user = "semanage user [-h] [-n] [-N] [-S STORE] [" usage_user_dict = {' --add': ('(', '-L LEVEL', '-R ROLES', '-r RANGE', 'SEUSER', ')'), ' --delete': ('SEUSER',), ' --modify': ('(', '-L LEVEL', '-R ROLES', '-r RANGE', '-s SEUSER', 'SEUSER', ')'), ' --list': ('-C',), ' --extract': ('',), ' --deleteall': ('',)} usage_port = "semanage port [-h] [-n] [-N] [-S STORE] [" usage_port_dict = {' --add': ('-t TYPE', '-p PROTOCOL', '-r RANGE', '(', 'port_name', '|', 'port_range', ')'), ' --modify': ('-t TYPE', '-p PROTOCOL', '-r RANGE', '(', 'port_name', '|', 'port_range', ')'), ' --delete': ('-p PROTOCOL', '(', 'port_name', '|', 'port_range', ')'), ' --list': ('-C',), ' --extract': ('',), ' --deleteall': ('',)} usage_ibpkey = "semanage ibpkey [-h] [-n] [-N] [-s STORE] [" usage_ibpkey_dict = {' --add': ('-t TYPE', '-x SUBNET_PREFIX', '-r RANGE', '(', 'ibpkey_name', '|', 'pkey_range', ')'), ' --modify': ('-t TYPE', '-x SUBNET_PREFIX', '-r RANGE', '(', 'ibpkey_name', '|', 'pkey_range', ')'), ' --delete': ('-x SUBNET_PREFIX', '(', 'ibpkey_name', '|', 'pkey_range', ')'), ' --list': ('-C',), ' --extract': ('',), ' --deleteall': ('',)} usage_ibendport = "semanage ibendport [-h] [-n] [-N] [-s STORE] [" usage_ibendport_dict = {' --add': ('-t TYPE', '-z IBDEV_NAME', '-r RANGE', '(', 'port', ')'), ' --modify': ('-t TYPE', '-z IBDEV_NAME', '-r RANGE', '(', 'port', ')'), ' --delete': ('-z IBDEV_NAME', '-r RANGE', '(', 'port', ')'), ' --list': ('-C',), ' --extract': ('',), ' --deleteall': ('',)} usage_node = "semanage node [-h] [-n] [-N] [-S STORE] [" usage_node_dict = {' --add': ('-M NETMASK', '-p PROTOCOL', '-t TYPE', '-r RANGE', 'node'), ' --modify': ('-M NETMASK', '-p PROTOCOL', '-t TYPE', '-r RANGE', 'node'), ' --delete': ('-M NETMASK', '-p PROTOCOL', 'node'), ' --list': ('-C',), ' --extract': ('',), ' --deleteall': ('',)} usage_interface = "semanage interface [-h] [-n] [-N] [-S STORE] [" usage_interface_dict = {' --add': ('-t TYPE', '-r RANGE', 'interface'), ' --modify': ('-t TYPE', '-r RANGE', 'interface'), ' --delete': ('interface',), ' --list': ('-C',), ' --extract': ('',), ' --deleteall': ('',)} usage_boolean = "semanage boolean [-h] [-n] [-N] [-S STORE] [" usage_boolean_dict = {' --modify': ('(', '--on', '|', '--off', ')', 'boolean'), ' --list': ('-C',), ' --extract': ('',), ' --deleteall': ('',)} class CheckRole(argparse.Action): def __call__(self, parser, namespace, value, option_string=None): newval = getattr(namespace, self.dest) if not newval: newval = [] try: # sepolicy tries to load the SELinux policy and raises ValueError if it fails. import sepolicy roles = sepolicy.get_all_roles() except ValueError: roles = [] for v in value.split(): if v not in roles: raise ValueError("%s must be an SELinux role:\nValid roles: %s" % (v, ", ".join(roles))) newval.append(v) setattr(namespace, self.dest, newval) class seParser(argparse.ArgumentParser): def error(self, message): if len(sys.argv) == 2: self.print_help() else: self.print_usage() self.exit(2, ('%s: error: %s\n') % (self.prog, message)) class SetExportFile(argparse.Action): def __call__(self, parser, namespace, values, option_string=None): if values: if values != "-": try: sys.stdout = open(values, 'w') except: sys.stderr.write(traceback.format_exc()) sys.exit(1) setattr(namespace, self.dest, values) class SetImportFile(argparse.Action): def __call__(self, parser, namespace, values, option_string=None): if values and values != "-": try: sys.stdin = open(values, 'r') except IOError as e: sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e))) sys.exit(1) setattr(namespace, self.dest, values) def generate_custom_usage(usage_text, usage_dict): # generate custom usage from given text and dictonary sorted_keys = [] for i in usage_dict.keys(): sorted_keys.append(i) sorted_keys.sort() for k in sorted_keys: usage_text += "%s %s |" % (k, (" ".join(usage_dict[k]))) usage_text = usage_text[:-1] + "]" usage_text = _(usage_text) return usage_text def handle_opts(args, dict, target_key): # handle conflict and required options for given dictonary # {action:[conflict_opts,require_opts]} # first we need to catch conflicts for k in args.__dict__.keys(): try: if k in dict[target_key][0] and args.__dict__[k]: print("%s option can not be used with --%s" % (target_key, k)) sys.exit(2) except KeyError: continue for k in args.__dict__.keys(): try: if k in dict[target_key][1] and not args.__dict__[k]: print("%s option is needed for %s" % (k, target_key)) sys.exit(2) except KeyError: continue def handleLogin(args): # {action:[conflict_opts,require_opts]} login_args = {'list': [('login', 'seuser'), ('')], 'add': [('locallist'), ('seuser', 'login')], 'modify': [('locallist'), ('login')], 'delete': [('locallist'), ('login')], 'extract': [('locallist', 'login', 'seuser'), ('')], 'deleteall': [('locallist'), ('')]} handle_opts(args, login_args, args.action) OBJECT = object_dict['login'](args) if args.action == "add": OBJECT.add(args.login, args.seuser, args.range) if args.action == "modify": OBJECT.modify(args.login, args.seuser, args.range) if args.action == "delete": OBJECT.delete(args.login) if args.action == "list": OBJECT.list(args.noheading, args.locallist) if args.action == "deleteall": OBJECT.deleteall() if args.action == "extract": for i in OBJECT.customized(): print("login %s" % (str(i))) def parser_add_store(parser, name): parser.add_argument('-S', '--store', default='', help=_("Select an alternate SELinux Policy Store to manage")) def parser_add_priority(parser, name): parser.add_argument('-P', '--priority', type=int, default=400, help=_("Select a priority for module operations")) def parser_add_noheading(parser, name): parser.add_argument('-n', '--noheading', action='store_false', default=True, help=_("Do not print heading when listing %s object types") % name) def parser_add_noreload(parser, name): parser.add_argument('-N', '--noreload', action='store_true', default=False, help=_('Do not reload policy after commit')) def parser_add_locallist(parser, name): parser.add_argument('-C', '--locallist', action='store_true', default=False, help=_("List %s local customizations") % name) def parser_add_add(parser, name): parser.add_argument('-a', '--add', dest='action', action='store_const', const='add', help=_("Add a record of the %s object type") % name) def parser_add_type(parser, name): parser.add_argument('-t', '--type', help=_('SELinux Type for the object')) def parser_add_level(parser, name): parser.add_argument('-L', '--level', default='s0', help=_('Default SELinux Level for SELinux user, s0 Default. (MLS/MCS Systems only)')) def parser_add_range(parser, name): parser.add_argument('-r', '--range', default='', help=_(''' MLS/MCS Security Range (MLS/MCS Systems only) SELinux Range for SELinux login mapping defaults to the SELinux user record range. SELinux Range for SELinux user defaults to s0. ''')) def parser_add_proto(parser, name): parser.add_argument('-p', '--proto', help=_(''' Protocol for the specified port (tcp|udp) or internet protocol version for the specified node (ipv4|ipv6). ''')) def parser_add_subnet_prefix(parser, name): parser.add_argument('-x', '--subnet_prefix', help=_(''' Subnet prefix for the specified infiniband ibpkey. ''')) def parser_add_ibdev_name(parser, name): parser.add_argument('-z', '--ibdev_name', help=_(''' Name for the specified infiniband end port. ''')) def parser_add_modify(parser, name): parser.add_argument('-m', '--modify', dest='action', action='store_const', const='modify', help=_("Modify a record of the %s object type") % name) def parser_add_list(parser, name): parser.add_argument('-l', '--list', dest='action', action='store_const', const='list', help=_("List records of the %s object type") % name) def parser_add_delete(parser, name): parser.add_argument('-d', '--delete', dest='action', action='store_const', const='delete', help=_("Delete a record of the %s object type") % name) def parser_add_extract(parser, name): parser.add_argument('-E', '--extract', dest='action', action='store_const', const='extract', help=_("Extract customizable commands, for use within a transaction")) def parser_add_deleteall(parser, name): parser.add_argument('-D', '--deleteall', dest='action', action='store_const', const='deleteall', help=_('Remove all %s objects local customizations') % name) def parser_add_seuser(parser, name): parser.add_argument('-s', '--seuser', default="", help=_("SELinux user name")) def setupLoginParser(subparsers): generated_usage = generate_custom_usage(usage_login, usage_login_dict) loginParser = subparsers.add_parser('login', usage=generated_usage, help=_("Manage login mappings between linux users and SELinux confined users")) parser_add_locallist(loginParser, "login") parser_add_noheading(loginParser, "login") parser_add_noreload(loginParser, "login") parser_add_store(loginParser, "login") parser_add_range(loginParser, "login") login_action = loginParser.add_mutually_exclusive_group(required=True) parser_add_add(login_action, "login") parser_add_delete(login_action, "login") parser_add_modify(login_action, "login") parser_add_list(login_action, "login") parser_add_extract(login_action, "login") parser_add_deleteall(login_action, "login") parser_add_seuser(loginParser, "login") loginParser.add_argument('login', nargs='?', default=None, help=_("login_name | %%groupname")) loginParser.set_defaults(func=handleLogin) def handleFcontext(args): fcontext_args = {'list': [('equal', 'ftype', 'seuser', 'type'), ('')], 'add': [('locallist'), ('type', 'file_spec')], 'modify': [('locallist'), ('type', 'file_spec')], 'delete': [('locallist'), ('file_spec')], 'extract': [('locallist', 'equal', 'ftype', 'seuser', 'type'), ('')], 'deleteall': [('locallist'), ('')]} # we can not use mutually for equal because we can define some actions together with equal fcontext_equal_args = {'equal': [('list', 'locallist', 'type', 'ftype', 'seuser', 'deleteall', 'extract'), ()]} if args.action and args.equal: handle_opts(args, fcontext_equal_args, "equal") else: handle_opts(args, fcontext_args, args.action) OBJECT = object_dict['fcontext'](args) if args.action == "add": if args.equal: OBJECT.add_equal(args.file_spec, args.equal) else: OBJECT.add(args.file_spec, args.type, args.ftype, args.range, args.seuser) if args.action == "modify": if args.equal: OBJECT.modify_equal(args.file_spec, args.equal) else: OBJECT.modify(args.file_spec, args.type, args.ftype, args.range, args.seuser) if args.action == "delete": if args.equal: OBJECT.delete(args.file_spec, args.equal) else: OBJECT.delete(args.file_spec, args.ftype) if args.action == "list": OBJECT.list(args.noheading, args.locallist) if args.action == "deleteall": OBJECT.deleteall() if args.action == "extract": for i in OBJECT.customized(): print("fcontext %s" % str(i)) def setupFcontextParser(subparsers): ftype_help = ''' File Type. This is used with fcontext. Requires a file type as shown in the mode field by ls, e.g. use d to match only directories or f to match only regular files. The following file type options can be passed: f (regular file),d (directory),c (character device), b (block device),s (socket),l (symbolic link),p (named pipe) If you do not specify a file type, the file type will default to "all files". ''' generate_usage = generate_custom_usage(usage_fcontext, usage_fcontext_dict) fcontextParser = subparsers.add_parser('fcontext', usage=generate_usage, help=_("Manage file context mapping definitions")) parser_add_locallist(fcontextParser, "fcontext") parser_add_noheading(fcontextParser, "fcontext") parser_add_noreload(fcontextParser, "fcontext") parser_add_store(fcontextParser, "fcontext") fcontext_action = fcontextParser.add_mutually_exclusive_group(required=True) parser_add_add(fcontext_action, "fcontext") parser_add_delete(fcontext_action, "fcontext") parser_add_modify(fcontext_action, "fcontext") parser_add_list(fcontext_action, "fcontext") parser_add_extract(fcontext_action, "fcontext") parser_add_deleteall(fcontext_action, "fcontext") fcontextParser.add_argument('-e', '--equal', help=_('''Substitute target path with sourcepath when generating default label. This is used with fcontext. Requires source and target path arguments. The context labeling for the target subtree is made equivalent to that defined for the source.''')) fcontextParser.add_argument('-f', '--ftype', default="", choices=["a", "f", "d", "c", "b", "s", "l", "p"], help=_(ftype_help)) parser_add_seuser(fcontextParser, "fcontext") parser_add_type(fcontextParser, "fcontext") parser_add_range(fcontextParser, "fcontext") fcontextParser.add_argument('file_spec', nargs='?', default=None, help=_('Path to be labeled (may be in the form of a Perl compatible regular expression)')) fcontextParser.set_defaults(func=handleFcontext) def handleUser(args): user_args = {'list': [('selinux_name', 'seuser', 'roles'), ('')], 'add': [('locallist'), ('roles', 'selinux_name')], 'modify': [('locallist'), ('selinux_name')], 'delete': [('locallist'), ('selinux_name')], 'extract': [('locallist', 'selinux_name', 'seuser', 'role'), ('')], 'deleteall': [('locallist'), ('')]} handle_opts(args, user_args, args.action) OBJECT = object_dict['user'](args) if args.action == "add": OBJECT.add(args.selinux_name, args.roles, args.level, args.range, args.prefix) if args.action == "modify": OBJECT.modify(args.selinux_name, args.roles, args.level, args.range, args.prefix) if args.action == "delete": OBJECT.delete(args.selinux_name) if args.action == "list": OBJECT.list(args.noheading, args.locallist) if args.action == "deleteall": OBJECT.deleteall() if args.action == "extract": for i in OBJECT.customized(): print("user %s" % str(i)) def setupUserParser(subparsers): generated_usage = generate_custom_usage(usage_user, usage_user_dict) userParser = subparsers.add_parser('user', usage=generated_usage, help=_('Manage SELinux confined users (Roles and levels for an SELinux user)')) parser_add_locallist(userParser, "user") parser_add_noheading(userParser, "user") parser_add_noreload(userParser, "user") parser_add_store(userParser, "user") user_action = userParser.add_mutually_exclusive_group(required=True) parser_add_add(user_action, "user") parser_add_delete(user_action, "user") parser_add_modify(user_action, "user") parser_add_list(user_action, "user") parser_add_extract(user_action, "user") parser_add_deleteall(user_action, "user") parser_add_level(userParser, "user") parser_add_range(userParser, "user") userParser.add_argument('-R', '--roles', default=[], action=CheckRole, help=_(''' SELinux Roles. You must enclose multiple roles within quotes, separate by spaces. Or specify -R multiple times. ''')) userParser.add_argument('-P', '--prefix', default="user", help=argparse.SUPPRESS) userParser.add_argument('selinux_name', nargs='?', default=None, help=_('selinux_name')) userParser.set_defaults(func=handleUser) def handlePort(args): port_args = {'list': [('port', 'type', 'proto'), ('')], 'add': [('locallist'), ('type', 'port', 'proto')], 'modify': [('localist'), ('port', 'proto')], 'delete': [('locallist'), ('port', 'proto')], 'extract': [('locallist', 'port', 'type', 'proto'), ('')], 'deleteall': [('locallist'), ('')]} handle_opts(args, port_args, args.action) OBJECT = object_dict['port'](args) if args.action == "add": OBJECT.add(args.port, args.proto, args.range, args.type) if args.action == "modify": OBJECT.modify(args.port, args.proto, args.range, args.type) if args.action == "delete": OBJECT.delete(args.port, args.proto) if args.action == "list": OBJECT.list(args.noheading, args.locallist) if args.action == "deleteall": OBJECT.deleteall() if args.action == "extract": for i in OBJECT.customized(): print("port %s" % str(i)) def setupPortParser(subparsers): generated_usage = generate_custom_usage(usage_port, usage_port_dict) portParser = subparsers.add_parser('port', usage=generated_usage, help=_('Manage network port type definitions')) parser_add_locallist(portParser, "port") parser_add_noheading(portParser, "port") parser_add_noreload(portParser, "port") parser_add_store(portParser, "port") port_action = portParser.add_mutually_exclusive_group(required=True) parser_add_add(port_action, "port") parser_add_delete(port_action, "port") parser_add_modify(port_action, "port") parser_add_list(port_action, "port") parser_add_extract(port_action, "port") parser_add_deleteall(port_action, "port") parser_add_type(portParser, "port") parser_add_range(portParser, "port") parser_add_proto(portParser, "port") portParser.add_argument('port', nargs='?', default=None, help=_('port | port_range')) portParser.set_defaults(func=handlePort) def handlePkey(args): ibpkey_args = {'list': [('ibpkey', 'type', 'subnet_prefix'), ('')], 'add': [('locallist'), ('type', 'ibpkey', 'subnet_prefix')], 'modify': [('localist'), ('ibpkey', 'subnet_prefix')], 'delete': [('locallist'), ('ibpkey', 'subnet_prefix')], 'extract': [('locallist', 'ibpkey', 'type', 'subnet prefix'), ('')], 'deleteall': [('locallist'), ('')]} handle_opts(args, ibpkey_args, args.action) OBJECT = object_dict['ibpkey'](args) if args.action == "add": OBJECT.add(args.ibpkey, args.subnet_prefix, args.range, args.type) if args.action == "modify": OBJECT.modify(args.ibpkey, args.subnet_prefix, args.range, args.type) if args.action == "delete": OBJECT.delete(args.ibpkey, args.subnet_prefix) if args.action == "list": OBJECT.list(args.noheading, args.locallist) if args.action == "deleteall": OBJECT.deleteall() if args.action == "extract": for i in OBJECT.customized(): print("ibpkey %s" % str(i)) def setupPkeyParser(subparsers): generated_usage = generate_custom_usage(usage_ibpkey, usage_ibpkey_dict) ibpkeyParser = subparsers.add_parser('ibpkey', usage=generated_usage, help=_('Manage infiniband ibpkey type definitions')) parser_add_locallist(ibpkeyParser, "ibpkey") parser_add_noheading(ibpkeyParser, "ibpkey") parser_add_noreload(ibpkeyParser, "ibpkey") parser_add_store(ibpkeyParser, "ibpkey") ibpkey_action = ibpkeyParser.add_mutually_exclusive_group(required=True) parser_add_add(ibpkey_action, "ibpkey") parser_add_delete(ibpkey_action, "ibpkey") parser_add_modify(ibpkey_action, "ibpkey") parser_add_list(ibpkey_action, "ibpkey") parser_add_extract(ibpkey_action, "ibpkey") parser_add_deleteall(ibpkey_action, "ibpkey") parser_add_type(ibpkeyParser, "ibpkey") parser_add_range(ibpkeyParser, "ibpkey") parser_add_subnet_prefix(ibpkeyParser, "ibpkey") ibpkeyParser.add_argument('ibpkey', nargs='?', default=None, help=_('pkey | pkey_range')) ibpkeyParser.set_defaults(func=handlePkey) def handleIbendport(args): ibendport_args = {'list': [('ibendport', 'type', 'ibdev_name'), ('')], 'add': [('locallist'), ('type', 'ibendport', 'ibdev_name'), ('')], 'modify': [('localist'), ('ibendport', 'ibdev_name')], 'delete': [('locallist'), ('ibendport', 'ibdev_name')], 'extract': [('locallist', 'ibendport', 'type', 'ibdev_name'), ('')], 'deleteall': [('locallist'), ('')]} handle_opts(args, ibendport_args, args.action) OBJECT = object_dict['ibendport'](args) if args.action == "add": OBJECT.add(args.ibendport, args.ibdev_name, args.range, args.type) if args.action == "modify": OBJECT.modify(args.ibendport, args.ibdev_name, args.range, args.type) if args.action == "delete": OBJECT.delete(args.ibendport, args.ibdev_name) if args.action == "list": OBJECT.list(args.noheading, args.locallist) if args.action == "deleteall": OBJECT.deleteall() if args.action == "extract": for i in OBJECT.customized(): print("ibendport %s" % str(i)) def setupIbendportParser(subparsers): generated_usage = generate_custom_usage(usage_ibendport, usage_ibendport_dict) ibendportParser = subparsers.add_parser('ibendport', usage=generated_usage, help=_('Manage infiniband end port type definitions')) parser_add_locallist(ibendportParser, "ibendport") parser_add_noheading(ibendportParser, "ibendport") parser_add_noreload(ibendportParser, "ibendport") parser_add_store(ibendportParser, "ibendport") ibendport_action = ibendportParser.add_mutually_exclusive_group(required=True) parser_add_add(ibendport_action, "ibendport") parser_add_delete(ibendport_action, "ibendport") parser_add_modify(ibendport_action, "ibendport") parser_add_list(ibendport_action, "ibendport") parser_add_extract(ibendport_action, "ibendport") parser_add_deleteall(ibendport_action, "ibendport") parser_add_type(ibendportParser, "ibendport") parser_add_range(ibendportParser, "ibendport") parser_add_ibdev_name(ibendportParser, "ibendport") ibendportParser.add_argument('ibendport', nargs='?', default=None, help=_('ibendport')) ibendportParser.set_defaults(func=handleIbendport) def handleInterface(args): interface_args = {'list': [('interface'), ('')], 'add': [('locallist'), ('type', 'interface')], 'modify': [('locallist'), ('type', 'interface')], 'delete': [('locallist'), ('interface')], 'extract': [('locallist', 'interface', 'type'), ('')], 'deleteall': [('locallist'), ('')]} handle_opts(args, interface_args, args.action) OBJECT = object_dict['interface'](args) if args.action == "add": OBJECT.add(args.interface, args.range, args.type) if args.action == "modify": OBJECT.modify(args.interface, args.range, args.type) if args.action == "delete": OBJECT.delete(args.interface) if args.action == "list": OBJECT.list(args.noheading, args.locallist) if args.action == "deleteall": OBJECT.deleteall() if args.action == "extract": for i in OBJECT.customized(): print("interface %s" % str(i)) def setupInterfaceParser(subparsers): generated_usage = generate_custom_usage(usage_interface, usage_interface_dict) interfaceParser = subparsers.add_parser('interface', usage=generated_usage, help=_('Manage network interface type definitions')) parser_add_locallist(interfaceParser, "interface") parser_add_noheading(interfaceParser, "interface") parser_add_noreload(interfaceParser, "interface") parser_add_store(interfaceParser, "interface") parser_add_type(interfaceParser, "interface") parser_add_range(interfaceParser, "interface") interface_action = interfaceParser.add_mutually_exclusive_group(required=True) parser_add_add(interface_action, "interface") parser_add_delete(interface_action, "interface") parser_add_modify(interface_action, "interface") parser_add_list(interface_action, "interface") parser_add_extract(interface_action, "interface") parser_add_deleteall(interface_action, "interface") interfaceParser.add_argument('interface', nargs='?', default=None, help=_('interface_spec')) interfaceParser.set_defaults(func=handleInterface) def handleModule(args): import seobject OBJECT = seobject.moduleRecords(args) if args.action_add: OBJECT.add(args.action_add[0], args.priority) if args.action_enable: OBJECT.set_enabled(" ".join(args.action_enable), True) if args.action_disable: OBJECT.set_enabled(" ".join(args.action_disable), False) if args.action_remove: OBJECT.delete(" ".join(args.action_remove), args.priority) if args.action == "deleteall": OBJECT.deleteall() if args.action == "list": OBJECT.list(args.noheading, args.locallist) if args.action == "extract": for i in OBJECT.customized(): print("module %s" % str(i)) def setupModuleParser(subparsers): moduleParser = subparsers.add_parser('module', help=_('Manage SELinux policy modules')) parser_add_noheading(moduleParser, "module") parser_add_noreload(moduleParser, "module") parser_add_store(moduleParser, "module") parser_add_locallist(moduleParser, "module") parser_add_priority(moduleParser, "module") mgroup = moduleParser.add_mutually_exclusive_group(required=True) parser_add_list(mgroup, "module") parser_add_extract(mgroup, "module") parser_add_deleteall(mgroup, "module") mgroup.add_argument('-a', '--add', dest='action_add', action='store', nargs=1, metavar='module_name', help=_("Add a module")) mgroup.add_argument('-r', '--remove', dest='action_remove', action='store', nargs='+', metavar='module_name', help=_("Remove a module")) mgroup.add_argument('-d', '--disable', dest='action_disable', action='store', nargs='+', metavar='module_name', help=_("Disable a module")) mgroup.add_argument('-e', '--enable', dest='action_enable', action='store', nargs='+', metavar='module_name', help=_("Enable a module")) moduleParser.set_defaults(func=handleModule) def handleNode(args): node_args = {'list': [('node', 'type', 'proto', 'netmask'), ('')], 'add': [('locallist'), ('type', 'node', 'proto', 'netmask')], 'modify': [('locallist'), ('node', 'netmask', 'proto')], 'delete': [('locallist'), ('node', 'netmask', 'prototype')], 'extract': [('locallist', 'node', 'type', 'proto', 'netmask'), ('')], 'deleteall': [('locallist'), ('')]} handle_opts(args, node_args, args.action) OBJECT = object_dict['node'](args) if args.action == "add": OBJECT.add(args.node, args.netmask, args.proto, args.range, args.type) if args.action == "modify": OBJECT.modify(args.node, args.netmask, args.proto, args.range, args.type) if args.action == "delete": OBJECT.delete(args.node, args.netmask, args.proto) if args.action == "list": OBJECT.list(args.noheading, args.locallist) if args.action == "deleteall": OBJECT.deleteall() if args.action == "extract": for i in OBJECT.customized(): print("node %s" % str(i)) def setupNodeParser(subparsers): generated_usage = generate_custom_usage(usage_node, usage_node_dict) nodeParser = subparsers.add_parser('node', usage=generated_usage, help=_('Manage network node type definitions')) parser_add_locallist(nodeParser, "node") parser_add_noheading(nodeParser, "node") parser_add_noreload(nodeParser, "node") parser_add_store(nodeParser, "node") node_action = nodeParser.add_mutually_exclusive_group(required=True) parser_add_add(node_action, "node") parser_add_delete(node_action, "node") parser_add_modify(node_action, "node") parser_add_list(node_action, "node") parser_add_extract(node_action, "node") parser_add_deleteall(node_action, "node") nodeParser.add_argument('-M', '--netmask', help=_('Network Mask')) parser_add_type(nodeParser, "node") parser_add_range(nodeParser, "node") parser_add_proto(nodeParser, "node") nodeParser.add_argument('node', nargs='?', default=None, help=_('node')) nodeParser.set_defaults(func=handleNode) def handleBoolean(args): boolean_args = {'list': [('state', 'boolean'), ('')], 'modify': [('localist'), ('boolean', 'state')], 'extract': [('locallist', 'state', 'boolean'), ('')], 'deleteall': [('locallist'), ('')], 'state': [('locallist', 'list', 'extract', 'deleteall'), ('modify')]} handle_opts(args, boolean_args, args.action) OBJECT = object_dict['boolean'](args) if args.action == "modify": if args.boolean: OBJECT.modify(args.boolean, args.state, False) if args.action == "list": OBJECT.list(args.noheading, args.locallist) if args.action == "deleteall": OBJECT.deleteall() if args.action == "extract": for i in OBJECT.customized(): print("boolean %s" % str(i)) def setupBooleanParser(subparsers): generated_usage = generate_custom_usage(usage_boolean, usage_boolean_dict) booleanParser = subparsers.add_parser('boolean', usage=generated_usage, help=_('Manage booleans to selectively enable functionality')) parser_add_locallist(booleanParser, "boolean") parser_add_noheading(booleanParser, "boolean") parser_add_noreload(booleanParser, "boolean") parser_add_store(booleanParser, "boolean") booleanParser.add_argument('boolean', nargs="?", default=None, help=_('boolean')) boolean_action = booleanParser.add_mutually_exclusive_group(required=True) #add_add(boolean_action) parser_add_modify(boolean_action, "boolean") parser_add_list(boolean_action, "boolean") parser_add_extract(boolean_action, "boolean") parser_add_deleteall(boolean_action, "boolean") booleanGroup = booleanParser.add_mutually_exclusive_group(required=False) booleanGroup.add_argument('-1', '--on', dest='state', action='store_const', const='on', help=_('Enable the boolean')) booleanGroup.add_argument('-0', '--off', dest='state', action='store_const', const='off', help=_('Disable the boolean')) booleanParser.set_defaults(func=handleBoolean) def handlePermissive(args): OBJECT = object_dict['permissive'](args) if args.action == "list": OBJECT.list(args.noheading) elif args.action == "deleteall": OBJECT.deleteall() elif args.action == "extract": for i in OBJECT.customized(): print("permissive %s" % str(i)) elif args.type is not None: if args.action == "add": OBJECT.add(args.type) if args.action == "delete": OBJECT.delete(args.type) else: args.parser.error(message=_('semanage permissive: error: the following argument is required: type\n')) def setupPermissiveParser(subparsers): permissiveParser = subparsers.add_parser('permissive', help=_('Manage process type enforcement mode')) pgroup = permissiveParser.add_mutually_exclusive_group(required=True) parser_add_add(pgroup, "permissive") parser_add_delete(pgroup, "permissive") parser_add_deleteall(pgroup, "permissive") parser_add_extract(pgroup, "permissive") parser_add_list(pgroup, "permissive") parser_add_noheading(permissiveParser, "permissive") parser_add_noreload(permissiveParser, "permissive") parser_add_store(permissiveParser, "permissive") permissiveParser.add_argument('type', nargs='?', default=None, help=_('type')) permissiveParser.set_defaults(func=handlePermissive) permissiveParser.set_defaults(parser=permissiveParser) def handleDontaudit(args): OBJECT = object_dict['dontaudit'](args) OBJECT.toggle(args.action) def setupDontauditParser(subparsers): dontauditParser = subparsers.add_parser('dontaudit', help=_('Disable/Enable dontaudit rules in policy')) parser_add_noreload(dontauditParser, "dontaudit") parser_add_store(dontauditParser, "dontaudit") dontauditParser.add_argument('action', choices=["on", "off"]) dontauditParser.set_defaults(func=handleDontaudit) def handleExport(args): manageditems = ["boolean", "login", "interface", "user", "port", "node", "fcontext", "module", "ibendport", "ibpkey", "permissive"] for i in manageditems: print("%s -D" % i) for i in manageditems: OBJECT = object_dict[i](args) for c in OBJECT.customized(): print("%s %s" % (i, str(c))) sys.exit(0) def setupExportParser(subparsers): exportParser = subparsers.add_parser('export', help=_('Output local customizations')) parser_add_store(exportParser, "export") exportParser.add_argument('-f', '--output_file', dest='output_file', action=SetExportFile, help=_('Output file')) exportParser.set_defaults(func=handleExport) def mkargv(line): dquote = "\"" squote = "\'" l = line.split() ret = [] i = 0 while i < len(l): cnt = len(re.findall(dquote, l[i])) if cnt > 1: ret.append(l[i].strip(dquote)) i = i + 1 continue if cnt == 1: quote = [l[i].strip(dquote)] i = i + 1 while i < len(l) and dquote not in l[i]: quote.append(l[i]) i = i + 1 quote.append(l[i].strip(dquote)) ret.append(" ".join(quote)) i = i + 1 continue cnt = len(re.findall(squote, l[i])) if cnt > 1: ret.append(l[i].strip(squote)) i = i + 1 continue if cnt == 1: quote = [l[i].strip(squote)] i = i + 1 while i < len(l) and squote not in l[i]: quote.append(l[i]) i = i + 1 quote.append(l[i].strip(squote)) ret.append(" ".join(quote)) i = i + 1 continue ret.append(l[i]) i = i + 1 return ret def handleImport(args): import seobject trans = seobject.semanageRecords(args) trans.start() deleteCommands = [] commands = [] # separate commands for deletion from the rest so they can be # applied in a separate transaction for l in sys.stdin.readlines(): if len(l.strip()) == 0: continue if "-d" in l or "-D" in l: deleteCommands.append(l) else: commands.append(l) if deleteCommands: importHelper(deleteCommands) trans.finish() trans.start() importHelper(commands) trans.finish() def importHelper(commands): for l in commands: try: commandParser = createCommandParser() args = commandParser.parse_args(mkargv(l)) args.func(args) except ValueError as e: sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e))) sys.exit(1) except IOError as e: sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e))) sys.exit(1) except KeyboardInterrupt: sys.exit(0) def setupImportParser(subparsers): importParser = subparsers.add_parser('import', help=_('Import local customizations')) parser_add_noreload(importParser, "import") parser_add_store(importParser, "import") importParser.add_argument('-f', '--input_file', dest='input_file', action=SetImportFile, help=_('Input file')) importParser.set_defaults(func=handleImport) def createCommandParser(): commandParser = seParser(prog='semanage', formatter_class=argparse.ArgumentDefaultsHelpFormatter, description='''semanage is used to configure certain elements of SELinux policy with-out requiring modification to or recompilation from policy source.''') #To add a new subcommand define the parser for it in a function above and call it here. subparsers = commandParser.add_subparsers(dest='subcommand') subparsers.required = True import seobject # define dictonary for seobject OBEJCTS global object_dict object_dict = { 'login': seobject.loginRecords, 'user': seobject.seluserRecords, 'port': seobject.portRecords, 'module': seobject.moduleRecords, 'interface': seobject.interfaceRecords, 'node': seobject.nodeRecords, 'fcontext': seobject.fcontextRecords, 'boolean': seobject.booleanRecords, 'permissive': seobject.permissiveRecords, 'dontaudit': seobject.dontauditClass, 'ibpkey': seobject.ibpkeyRecords, 'ibendport': seobject.ibendportRecords } setupImportParser(subparsers) setupExportParser(subparsers) setupLoginParser(subparsers) setupUserParser(subparsers) setupPortParser(subparsers) setupPkeyParser(subparsers) setupIbendportParser(subparsers) setupInterfaceParser(subparsers) setupModuleParser(subparsers) setupNodeParser(subparsers) setupFcontextParser(subparsers) setupBooleanParser(subparsers) setupPermissiveParser(subparsers) setupDontauditParser(subparsers) return commandParser def make_io_args(args): # import/export backward compability args_origin = ["-S", "-o", "-i", "targeted", "minimum", "mls"] args_file = [] args_ie = [] args_subcommand = [] for i in args: if i == "-o": args_subcommand = ["export"] continue if i == "-i": args_subcommand = ["import"] continue if i not in args_origin: args_file = ["-f", i] continue args_ie.append(i) return args_subcommand + args_ie + args_file def make_args(sys_args): args = [] if "-o" in sys_args[1:] or "-i" in sys_args[1:]: args = make_io_args(sys_args[1:]) else: args = sys_args[1:] return args def do_parser(): try: commandParser = createCommandParser() args = commandParser.parse_args(make_args(sys.argv)) args.func(args) sys.exit(0) except BrokenPipeError as e: sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e))) # Python flushes standard streams on exit; redirect remaining output # to devnull to avoid another BrokenPipeError at shutdown devnull = os.open(os.devnull, os.O_WRONLY) os.dup2(devnull, sys.stdout.fileno()) sys.exit(1) except IOError as e: sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e))) sys.exit(1) except KeyboardInterrupt: sys.exit(0) except ValueError as e: sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[0])) sys.exit(1) except KeyError as e: sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[0])) sys.exit(1) except OSError as e: sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[1])) sys.exit(1) except RuntimeError as e: sys.stderr.write("%s: %s\n" % (e.__class__.__name__, e.args[0])) sys.exit(1) if __name__ == '__main__': do_parser()