Linux server.nvwebsoft.co.in 3.10.0-1160.114.2.el7.x86_64 #1 SMP Wed Mar 20 15:54:52 UTC 2024 x86_64
Apache
: 162.240.12.249 | : 18.225.54.199
202 Domain
8.1.31
nbspublicschool
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
README
+ Create Folder
+ Create File
/
usr /
sbin /
[ HOME SHELL ]
Name
Size
Permission
Action
abrt-auto-reporting
10.98
KB
-rwxr-xr-x
abrt-configuration
31.66
KB
-rwxr-xr-x
abrt-dbus
31.22
KB
-rwxr-xr-x
abrt-harvest-pstoreoops
1.32
KB
-rwxr-xr-x
abrt-harvest-vmcore
8.19
KB
-rwxr-xr-x
abrt-install-ccpp-hook
2.85
KB
-rwxr-xr-x
abrt-server
31.11
KB
-rwxr-xr-x
abrtd
31.22
KB
-rwxr-xr-x
accessdb
11.55
KB
-rwxr-xr-x
accton
11.19
KB
-rwxr-xr-x
addgnupghome
3.05
KB
-rwxr-xr-x
addpart
19.69
KB
-rwxr-xr-x
adduser
134.39
KB
-rwxr-xr-x
agetty
48.48
KB
-rwxr-xr-x
alternatives
27.61
KB
-rwxr-xr-x
anacron
35.52
KB
-rwxr-xr-x
apachectl
4.31
KB
-rwxr-xr-x
applygnupgdefaults
2.21
KB
-rwxr-xr-x
arp
63.98
KB
-rwxr-xr-x
arpd
52.98
KB
-rwxr-xr-x
arping
23.19
KB
-rwxr-xr-x
atd
27.17
KB
-rwxr-xr-x
atrun
67
B
-rwxr-xr-x
audispd
39.75
KB
-rwxr-xr-x
auditctl
39.56
KB
-rwxr-xr-x
auditd
125.65
KB
-rwxr-xr-x
augenrules
3.7
KB
-rwxr-xr-x
aureport
105.39
KB
-rwxr-xr-x
ausearch
109.8
KB
-rwxr-xr-x
autrace
15.49
KB
-rwxr-x---
avcstat
11.25
KB
-rwxr-xr-x
badblocks
27.69
KB
-rwxr-xr-x
biosdecode
24.15
KB
-rwxr-xr-x
blkdeactivate
15.97
KB
-r-xr-xr-x
blkdiscard
23.84
KB
-rwxr-xr-x
blkid
77.92
KB
-rwxr-xr-x
blkmapd
43.81
KB
-rwxr-xr-x
blockdev
32.2
KB
-rwxr-xr-x
bpftool
1.9
MB
-rwxr-xr-x
brctl
32.13
KB
-rwxr-xr-x
bridge
77.61
KB
-rwxr-xr-x
build-locale-archive
860.52
KB
-rwx------
cache_check
1.23
MB
-rwxr-xr-x
cache_dump
1.23
MB
-rwxr-xr-x
cache_metadata_size
1.23
MB
-rwxr-xr-x
cache_repair
1.23
MB
-rwxr-xr-x
cache_restore
1.23
MB
-rwxr-xr-x
cache_writeback
1.23
MB
-rwxr-xr-x
capsh
19.43
KB
-rwxr-xr-x
cbq
32.73
KB
-rwxr-xr-x
cfdisk
71.37
KB
-rwxr-xr-x
cgdisk
176.87
KB
-rwxr-xr-x
chcpu
23.7
KB
-rwxr-xr-x
chgpasswd
64.1
KB
-rwxr-xr-x
chkconfig
40.22
KB
-rwxr-xr-x
chpasswd
55.88
KB
-rwxr-xr-x
chronyd
263.08
KB
-rwxr-xr-x
chroot
32.48
KB
-rwxr-xr-x
clock
48.44
KB
-rwxr-xr-x
clockdiff
19.04
KB
-rwxr-xr-x
collectd
210.29
KB
-rwxr-xr-x
collectdmon
14.99
KB
-rwxr-xr-x
consoletype
6.95
KB
-rwxr-xr-x
convertquota
70.88
KB
-rwxr-xr-x
cracklib-check
7.04
KB
-rwxr-xr-x
cracklib-format
246
B
-rwxr-xr-x
cracklib-packer
11.06
KB
-rwxr-xr-x
cracklib-unpacker
7.02
KB
-rwxr-xr-x
crda
11.34
KB
-rwxr-xr-x
create-cracklib-dict
990
B
-rwxr-xr-x
crond
68.48
KB
-rwxr-xr-x
cryptsetup
85.41
KB
-rwxr-xr-x
ctrlaltdel
11.2
KB
-rwxr-xr-x
ctstat
20.09
KB
-rwxr-xr-x
ddns-confgen
19.44
KB
-rwxr-xr-x
debugfs
120.64
KB
-rwxr-xr-x
delpart
19.69
KB
-rwxr-xr-x
depmod
143.24
KB
-rwxr-xr-x
devlink
64.72
KB
-rwxr-xr-x
dhclient
414.34
KB
-rwxr-xr-x
dhclient-script
30.38
KB
-rwxr-xr-x
dm_dso_reg_tool
11.29
KB
-rwxr-xr-x
dmevent_tool
11.29
KB
-rwxr-xr-x
dmeventd
39.56
KB
-r-xr-xr-x
dmfilemapd
19.16
KB
-r-xr-xr-x
dmidecode
120.2
KB
-rwxr-xr-x
dmraid
22.1
KB
-rwxr-xr-x
dmraid.static
22.1
KB
-rwxr-xr-x
dmsetup
149.2
KB
-r-xr-xr-x
dmstats
149.2
KB
-r-xr-xr-x
dnssec-checkds
922
B
-rwxr-xr-x
dnssec-coverage
924
B
-rwxr-xr-x
dnssec-dsfromkey
56.6
KB
-rwxr-xr-x
dnssec-importkey
52.59
KB
-rwxr-xr-x
dnssec-keyfromlabel
60.52
KB
-rwxr-xr-x
dnssec-keygen
64.55
KB
-rwxr-xr-x
dnssec-keymgr
920
B
-rwxr-xr-x
dnssec-revoke
48.45
KB
-rwxr-xr-x
dnssec-settime
56.52
KB
-rwxr-xr-x
dnssec-signzone
105.7
KB
-rwxr-xr-x
dnssec-verify
48.46
KB
-rwxr-xr-x
dosfsck
56.24
KB
-rwxr-xr-x
dosfslabel
52.23
KB
-rwxr-xr-x
dovecot
370.66
KB
-rwxr-xr-x
dovecot_cpshutdown
3.27
KB
-rwxr-xr-x
dracut
55.83
KB
-rwxr-xr-x
dump-acct
19.63
KB
-rwxr-xr-x
dump-utmp
15.47
KB
-rwxr-xr-x
dumpe2fs
23.62
KB
-rwxr-xr-x
e2freefrag
11.15
KB
-rwxr-xr-x
e2fsck
250.55
KB
-rwxr-xr-x
e2image
27.85
KB
-rwxr-xr-x
e2label
69.41
KB
-rwxr-xr-x
e2undo
11.32
KB
-rwxr-xr-x
e4defrag
23.55
KB
-rwxr-xr-x
ebtables
6.85
KB
-rwxr-xr-x
ebtables-restore
10.88
KB
-rwxr-xr-x
ebtables-save
851
B
-rwxr-xr-x
edquota
83.09
KB
-rwxr-xr-x
era_check
1.23
MB
-rwxr-xr-x
era_dump
1.23
MB
-rwxr-xr-x
era_invalidate
1.23
MB
-rwxr-xr-x
era_restore
1.23
MB
-rwxr-xr-x
ether-wake
73.26
KB
-rwxr-xr-x
ethtool
293.87
KB
-rwxr-xr-x
exicyclog
11.01
KB
-rwxr-xr-x
exigrep
10.44
KB
-rwxr-xr-x
exim
1.33
MB
-rwsr-xr-x
exim_checkaccess
4.73
KB
-rwxr-xr-x
exim_dbmbuild
82.09
KB
-rwxr-xr-x
exim_dumpdb
134.47
KB
-rwxr-xr-x
exim_fixdb
168.22
KB
-rwxr-xr-x
exim_lock
64.66
KB
-rwxr-xr-x
exim_tidydb
142.8
KB
-rwxr-xr-x
eximstats
148.01
KB
-rwxr-xr-x
exinext
8.02
KB
-rwxr-xr-x
exiqgrep
5.46
KB
-rwxr-xr-x
exiqsumm
5.07
KB
-rwxr-xr-x
exiwhat
4.32
KB
-rwxr-xr-x
exportfs
76.91
KB
-rwxr-xr-x
faillock
15.02
KB
-rwxr-xr-x
fatlabel
52.23
KB
-rwxr-xr-x
fcgistarter
23.85
KB
-rwxr-xr-x
fdformat
11.27
KB
-rwxr-xr-x
fdisk
195.8
KB
-rwxr-xr-x
filefrag
15.23
KB
-rwxr-xr-x
findfs
11.2
KB
-rwxr-xr-x
firewalld
6.87
KB
-rwxr-xr-x
fixfiles
11.03
KB
-rwxr-xr-x
fixparts
61.65
KB
-rwxr-xr-x
fsadm
23.97
KB
-r-xr-xr-x
fsck
32.12
KB
-rwxr-xr-x
fsck.cramfs
19.57
KB
-rwxr-xr-x
fsck.ext2
250.55
KB
-rwxr-xr-x
fsck.ext3
250.55
KB
-rwxr-xr-x
fsck.ext4
250.55
KB
-rwxr-xr-x
fsck.fat
56.24
KB
-rwxr-xr-x
fsck.minix
73.32
KB
-rwxr-xr-x
fsck.msdos
56.24
KB
-rwxr-xr-x
fsck.vfat
56.24
KB
-rwxr-xr-x
fsck.xfs
433
B
-rwxr-xr-x
fsfreeze
11.23
KB
-rwxr-xr-x
fstrim
40.59
KB
-rwxr-xr-x
fuser
32.34
KB
-rwxr-xr-x
gdisk
184.49
KB
-rwxr-xr-x
genhomedircon
23.77
KB
-rwxr-xr-x
genhostid
6.94
KB
-rwxr-xr-x
genl
52.81
KB
-rwxr-xr-x
genl-ctrl-list
11.27
KB
-rwxr-xr-x
genrandom
11.16
KB
-rwxr-xr-x
getcap
11.13
KB
-rwxr-xr-x
getenforce
7.01
KB
-rwxr-xr-x
getpcaps
7.07
KB
-rwxr-xr-x
getsebool
11.13
KB
-rwxr-xr-x
glibc_post_upgrade.x86_64
772.05
KB
-rwx------
groupadd
85.65
KB
-rwxr-xr-x
groupdel
77.38
KB
-rwxr-xr-x
groupmems
55.97
KB
-rwxr-xr-x
groupmod
85.66
KB
-rwxr-xr-x
grpck
59.93
KB
-rwxr-xr-x
grpconv
51.73
KB
-rwxr-xr-x
grpunconv
51.73
KB
-rwxr-xr-x
grub2-bios-setup
1.03
MB
-rwxr-xr-x
grub2-get-kernel-settings
2.08
KB
-rwxr-xr-x
grub2-install
1.29
MB
-rwxr-xr-x
grub2-macbless
1.02
MB
-rwxr-xr-x
grub2-mkconfig
7.63
KB
-rwxr-xr-x
grub2-ofpathname
225.54
KB
-rwxr-xr-x
grub2-probe
1.03
MB
-rwxr-xr-x
grub2-reboot
4
KB
-rwxr-xr-x
grub2-rpm-sort
258.52
KB
-rwxr-xr-x
grub2-set-default
3.46
KB
-rwxr-xr-x
grub2-setpassword
2.96
KB
-rwxr-xr-x
grub2-sparc64-setup
1.04
MB
-rwxr-xr-x
grubby
71.27
KB
-rwxr-xr-x
gss-server
23.13
KB
-rwxr-xr-x
gssproxy
130.64
KB
-rwxr-xr-x
halt
704.8
KB
-rwxr-xr-x
hardlink
15.29
KB
-rwxr-xr-x
htcacheclean
78.45
KB
-rwxr-xr-x
httpd
2.31
MB
-rwxr-xr-x
hwclock
48.44
KB
-rwxr-xr-x
iconvconfig
22.15
KB
-rwxr-xr-x
iconvconfig.x86_64
22.15
KB
-rwxr-xr-x
ifcfg
2.99
KB
-rwxr-xr-x
ifconfig
80.05
KB
-rwxr-xr-x
ifdown
1.61
KB
-rwxr-xr-x
ifenslave
19.74
KB
-rwxr-xr-x
ifstat
40.6
KB
-rwxr-xr-x
ifup
4.89
KB
-rwxr-xr-x
imunify-notifier
9.8
MB
-rwxr-xr-x
init
1.56
MB
-rwxr-xr-x
insmod
143.24
KB
-rwxr-xr-x
install-info
110.42
KB
-rwxr-xr-x
installkernel
2.69
KB
-rwxr-xr-x
intel-microcode2ucode
11.1
KB
-rwxr-xr-x
ip
459.59
KB
-rwxr-xr-x
ip6tables
91.52
KB
-rwxr-xr-x
ip6tables-restore
91.52
KB
-rwxr-xr-x
ip6tables-save
91.52
KB
-rwxr-xr-x
ipmaddr
19.33
KB
-rwxr-xr-x
ipset
7.02
KB
-rwxr-xr-x
iptables
91.52
KB
-rwxr-xr-x
iptables-restore
91.52
KB
-rwxr-xr-x
iptables-save
91.52
KB
-rwxr-xr-x
iptunnel
23.33
KB
-rwxr-xr-x
irqbalance
48.5
KB
-rwxr-xr-x
isc-hmac-fixup
11.2
KB
-rwxr-xr-x
iw
157.97
KB
-rwxr-xr-x
kexec
166.06
KB
-rwxr-xr-x
key.dns_resolver
19.45
KB
-rwxr-xr-x
killall5
23.17
KB
-rwxr-xr-x
kpartx
39.47
KB
-rwxr-xr-x
kpatch
14.53
KB
-rwxr-xr-x
lchage
15.41
KB
-rwxr-xr-x
ldattach
27.93
KB
-rwxr-xr-x
ldconfig
952.08
KB
-rwxr-xr-x
ledctl
61.97
KB
-rwxr-xr-x
ledmon
62.15
KB
-rwxr-xr-x
lgroupadd
11.28
KB
-rwxr-xr-x
lgroupdel
11.26
KB
-rwxr-xr-x
lgroupmod
15.44
KB
-rwxr-xr-x
lid
15.4
KB
-rwxr-xr-x
lnewusers
15.46
KB
-rwxr-xr-x
lnstat
20.09
KB
-rwxr-xr-x
load_policy
10.97
KB
-rwxr-xr-x
logrotate
68.61
KB
-rwxr-xr-x
logsave
11.27
KB
-rwxr-xr-x
losetup
82.45
KB
-rwxr-xr-x
lpasswd
15.5
KB
-rwxr-xr-x
lshw
895.18
KB
-rwxr-xr-x
lsmod
143.24
KB
-rwxr-xr-x
lsof
150.57
KB
-rwxr-xr-x
lspci
73.67
KB
-rwxr-xr-x
luseradd
15.38
KB
-rwxr-xr-x
luserdel
11.3
KB
-rwxr-xr-x
lusermod
19.43
KB
-rwxr-xr-x
lvchange
2.15
MB
-r-xr-xr-x
lvconvert
2.15
MB
-r-xr-xr-x
lvcreate
2.15
MB
-r-xr-xr-x
lvdisplay
2.15
MB
-r-xr-xr-x
lvextend
2.15
MB
-r-xr-xr-x
lvm
2.15
MB
-r-xr-xr-x
lvmconf
12.55
KB
-r-xr-xr-x
lvmconfig
2.15
MB
-r-xr-xr-x
lvmdiskscan
2.15
MB
-r-xr-xr-x
lvmdump
10.07
KB
-r-xr-xr-x
lvmetad
71.66
KB
-r-xr-xr-x
lvmpolld
64.07
KB
-r-xr-xr-x
lvmsadc
2.15
MB
-r-xr-xr-x
lvmsar
2.15
MB
-r-xr-xr-x
lvreduce
2.15
MB
-r-xr-xr-x
lvremove
2.15
MB
-r-xr-xr-x
lvrename
2.15
MB
-r-xr-xr-x
lvresize
2.15
MB
-r-xr-xr-x
lvs
2.15
MB
-r-xr-xr-x
lvscan
2.15
MB
-r-xr-xr-x
lwresd
768.18
KB
-rwxr-xr-x
makedumpfile
376.52
KB
-rwxr-xr-x
matchpathcon
11.19
KB
-rwxr-xr-x
mdadm
593.45
KB
-rwxr-xr-x
mdmon
331.55
KB
-rwxr-xr-x
mii-diag
20.08
KB
-rwxr-xr-x
mii-tool
19.51
KB
-rwxr-xr-x
mkdict
246
B
-rwxr-xr-x
mkdosfs
28.05
KB
-rwxr-xr-x
mkdumprd
13.99
KB
-rwxr-xr-x
mke2fs
94.08
KB
-rwxr-xr-x
mkfs
11.25
KB
-rwxr-xr-x
mkfs.cramfs
36.16
KB
-rwxr-xr-x
mkfs.ext2
94.08
KB
-rwxr-xr-x
mkfs.ext3
94.08
KB
-rwxr-xr-x
mkfs.ext4
94.08
KB
-rwxr-xr-x
mkfs.fat
28.05
KB
-rwxr-xr-x
mkfs.minix
36.27
KB
-rwxr-xr-x
mkfs.msdos
28.05
KB
-rwxr-xr-x
mkfs.vfat
28.05
KB
-rwxr-xr-x
mkfs.xfs
359.8
KB
-rwxr-xr-x
mkhomedir_helper
19.05
KB
-rwxr-xr-x
mklost+found
11.11
KB
-rwxr-xr-x
mkswap
69.64
KB
-rwxr-xr-x
modinfo
143.24
KB
-rwxr-xr-x
modprobe
143.24
KB
-rwxr-xr-x
modsec-sdbm-util
22.17
KB
-rwxr-x---
mount.fuse
11.1
KB
-rwxr-xr-x
mount.nfs
114.68
KB
-rwsr-xr-x
mount.nfs4
114.68
KB
-rwsr-xr-x
mountstats
40.59
KB
-rwxr-xr-x
mtr
83.18
KB
-rwxr-xr-x
mysqld
244.14
MB
-rwxr-xr-x
mysqld-debug
165.52
MB
-rwxr-xr-x
named
768.18
KB
-rwxr-xr-x
named-checkconf
32.25
KB
-rwxr-xr-x
named-checkzone
32.06
KB
-rwxr-xr-x
named-compilezone
32.06
KB
-rwxr-xr-x
named-journalprint
11.13
KB
-rwxr-xr-x
nameif
15.32
KB
-rwxr-xr-x
netreport
10.96
KB
-rwxr-xr-x
new-kernel-pkg
24.96
KB
-rwxr-xr-x
newusers
93.45
KB
-rwxr-xr-x
nfsdcltrack
40.11
KB
-rwxr-xr-x
nfsidmap
19.32
KB
-rwxr-xr-x
nfsiostat
23.64
KB
-rwxr-xr-x
nfsstat
29.84
KB
-rwxr-xr-x
nl-class-add
11.7
KB
-rwxr-xr-x
nl-class-delete
11.55
KB
-rwxr-xr-x
nl-class-list
11.48
KB
-rwxr-xr-x
nl-classid-lookup
11.29
KB
-rwxr-xr-x
nl-cls-add
11.76
KB
-rwxr-xr-x
nl-cls-delete
11.68
KB
-rwxr-xr-x
nl-cls-list
11.58
KB
-rwxr-xr-x
nl-link-list
11.52
KB
-rwxr-xr-x
nl-pktloc-lookup
11.36
KB
-rwxr-xr-x
nl-qdisc-add
11.6
KB
-rwxr-xr-x
nl-qdisc-delete
11.54
KB
-rwxr-xr-x
nl-qdisc-list
11.63
KB
-rwxr-xr-x
nologin
7.01
KB
-rwxr-xr-x
nscd
180.02
KB
-rwxr-xr-x
nsec3hash
11.13
KB
-rwxr-xr-x
nstat
23.88
KB
-rwxr-xr-x
ntpdate
107.58
KB
-rwxr-xr-x
ntsysv
36.24
KB
-rwxr-xr-x
osd_login
2.55
KB
-rwxr-xr-x
ownership
15.04
KB
-rwxr-xr-x
packer
11.06
KB
-rwxr-xr-x
pam_console_apply
39.69
KB
-rwxr-xr-x
pam_tally2
15.05
KB
-rwxr-xr-x
pam_timestamp_check
10.97
KB
-rwxr-xr-x
paperconfig
4.07
KB
-rwxr-xr-x
parted
77.22
KB
-rwxr-xr-x
partprobe
11.23
KB
-rwxr-xr-x
partx
86.55
KB
-rwxr-xr-x
pdata_tools
1.23
MB
-rwxr-xr-x
pdns_server
98.68
MB
-rwxr-xr-x
pidof
23.17
KB
-rwxr-xr-x
ping6
64.63
KB
-rwxr-xr-x
pivot_root
11.19
KB
-rwxr-xr-x
plipconfig
11.06
KB
-rwxr-xr-x
pm-hibernate
2.86
KB
-rwxr-xr-x
pm-powersave
2.09
KB
-rwxr-xr-x
pm-suspend
2.86
KB
-rwxr-xr-x
pm-suspend-hybrid
2.86
KB
-rwxr-xr-x
pm-utils-bugreport-info.sh
1.47
KB
-rwxr-xr-x
poweroff
704.8
KB
-rwxr-xr-x
ppp-watch
23.2
KB
-rwxr-xr-x
pure-authd
18.37
KB
-rwxr-xr-x
pure-certd
18.27
KB
-rwxr-xr-x
pure-config.pl
4.64
KB
-rwxr-xr-x
pure-ftpd
173.28
KB
-rwxr-xr-x
pure-ftpwho
25.96
KB
-rwxr-xr-x
pure-mrtginfo
9.93
KB
-rwxr-xr-x
pure-quotacheck
13.95
KB
-rwxr-xr-x
pure-uploadscript
14.21
KB
-rwxr-xr-x
pvchange
2.15
MB
-r-xr-xr-x
pvck
2.15
MB
-r-xr-xr-x
pvcreate
2.15
MB
-r-xr-xr-x
pvdisplay
2.15
MB
-r-xr-xr-x
pvmove
2.15
MB
-r-xr-xr-x
pvremove
2.15
MB
-r-xr-xr-x
pvresize
2.15
MB
-r-xr-xr-x
pvs
2.15
MB
-r-xr-xr-x
pvscan
2.15
MB
-r-xr-xr-x
pwck
51.71
KB
-rwxr-xr-x
pwconv
47.57
KB
-rwxr-xr-x
pwhistory_helper
15.44
KB
-rwxr-xr-x
pwunconv
47.59
KB
-rwxr-xr-x
quot
70.66
KB
-rwxr-xr-x
quotacheck
107.29
KB
-rwxr-xr-x
quotaoff
75.03
KB
-rwxr-xr-x
quotaon
75.03
KB
-rwxr-xr-x
quotastats
14.03
KB
-rwxr-xr-x
raid-check
3.7
KB
-rwxr-xr-x
rdisc
23.17
KB
-rwxr-xr-x
rdma
73.42
KB
-rwxr-xr-x
readprofile
15.46
KB
-rwxr-xr-x
reboot
704.8
KB
-rwxr-xr-x
regdbdump
7.12
KB
-rwxr-xr-x
repquota
75.16
KB
-rwxr-xr-x
request-key
19.41
KB
-rwxr-xr-x
resize2fs
48.41
KB
-rwxr-xr-x
resizepart
32.36
KB
-rwxr-xr-x
restorecon
27.16
KB
-rwxr-xr-x
rfkill
11.29
KB
-rwxr-xr-x
rmmod
143.24
KB
-rwxr-xr-x
rndc
35.88
KB
-rwxr-xr-x
rndc-confgen
19.44
KB
-rwxr-xr-x
rngd
42.39
KB
-rwxr-xr-x
rotatelogs
53
KB
-rwxr-xr-x
route
66.6
KB
-rwxr-xr-x
routef
173
B
-rwxr-xr-x
routel
1.59
KB
-rwxr-xr-x
rpc.gssd
88.73
KB
-rwxr-xr-x
rpc.idmapd
48.13
KB
-rwxr-xr-x
rpc.mountd
128.91
KB
-rwxr-xr-x
rpc.nfsd
40.2
KB
-rwxr-xr-x
rpc.rquotad
78.95
KB
-rwxr-xr-x
rpc.statd
97.59
KB
-rwxr-xr-x
rpcbind
60.07
KB
-rwxr-xr-x
rpcdebug
18.05
KB
-rwxr-xr-x
rpcinfo
27.3
KB
-rwxr-xr-x
rsyslogd
648.45
KB
-rwxr-xr-x
rtacct
41.93
KB
-rwxr-xr-x
rtcwake
31.96
KB
-rwxr-xr-x
rtmon
48.67
KB
-rwxr-xr-x
rtpr
37
B
-rwxr-xr-x
rtstat
20.09
KB
-rwxr-xr-x
runlevel
704.8
KB
-rwxr-xr-x
runq
1.33
MB
-rwsr-xr-x
runuser
32.21
KB
-rwxr-xr-x
sa
36.77
KB
-rwxr-xr-x
safe_finger
11.08
KB
-rwxr-xr-x
sasldblistusers2
19.26
KB
-rwxr-xr-x
saslpasswd2
15.09
KB
-rwxr-xr-x
sefcontext_compile
60.53
KB
-rwxr-xr-x
selabel_digest
11.17
KB
-rwxr-xr-x
selabel_lookup
11.14
KB
-rwxr-xr-x
selabel_lookup_best_match
11.16
KB
-rwxr-xr-x
selabel_partial_match
11.09
KB
-rwxr-xr-x
selinux_restorecon
15.21
KB
-rwxr-xr-x
selinuxconlist
11.1
KB
-rwxr-xr-x
selinuxdefcon
11.12
KB
-rwxr-xr-x
selinuxenabled
6.98
KB
-rwxr-xr-x
selinuxexeccon
7.09
KB
-rwxr-xr-x
semanage
42.76
KB
-rwxr-xr-x
semodule
23.77
KB
-rwxr-xr-x
sendmail
13.48
KB
-rwxr-sr-x
service
3.17
KB
-rwxr-xr-x
sestatus
15.02
KB
-rwxr-xr-x
setcap
11.13
KB
-rwxr-xr-x
setenforce
7.05
KB
-rwxr-xr-x
setfiles
27.16
KB
-rwxr-xr-x
setpci
23.4
KB
-rwxr-xr-x
setquota
83.16
KB
-rwxr-xr-x
setregdomain
1.7
KB
-rwxr-xr-x
setsebool
14.99
KB
-rwxr-xr-x
setup
15.38
KB
-rwxr-xr-x
sfdisk
83.25
KB
-rwxr-xr-x
sgdisk
168.33
KB
-rwxr-xr-x
sgpio
15.63
KB
-rwxr-xr-x
showmount
19.56
KB
-rwxr-xr-x
shutdown
704.8
KB
-rwxr-xr-x
sim_server
10.97
KB
-rwxr-xr-x
slattach
42.4
KB
-rwxr-xr-x
sln
743.78
KB
-rwxr-xr-x
sm-notify
68.43
KB
-rwxr-xr-x
smartctl
864.48
KB
-rwxr-xr-x
smartd
670.63
KB
-rwxr-xr-x
snmpd
31.05
KB
-rwxr-xr-x
snmptrapd
31.22
KB
-rwxr-xr-x
sosreport
561
B
-rwxr-xr-x
ss
128.44
KB
-rwxr-xr-x
sshd
836.91
KB
-rwxr-xr-x
sshd-keygen
3.53
KB
-rwxr-xr-x
start-statd
842
B
-rwxr-xr-x
start-stop-daemon
32.96
KB
-rwxr-xr-x
suexec
43.3
KB
-rwsr-xr-x
sulogin
40.53
KB
-rwxr-xr-x
suphp
2.47
MB
-rwsr-x---
sushell
67
B
-rwxr-xr-x
swaplabel
15.31
KB
-rwxr-xr-x
swapoff
15.53
KB
-rwxr-xr-x
swapon
53.29
KB
-rwxr-xr-x
switch_root
15.35
KB
-rwxr-xr-x
sys-unconfig
184
B
-rwxr-xr-x
sysctl
23.57
KB
-rwxr-xr-x
tc
384.66
KB
-rwxr-xr-x
tcpd
36.62
KB
-rwxr-xr-x
tcpdmatch
40.83
KB
-rwxr-xr-x
tcpdump
920.16
KB
-rwxr-xr-x
tcpslice
23.64
KB
-rwxr-xr-x
telinit
704.8
KB
-rwxr-xr-x
thin_check
1.23
MB
-rwxr-xr-x
thin_delta
1.23
MB
-rwxr-xr-x
thin_dump
1.23
MB
-rwxr-xr-x
thin_ls
1.23
MB
-rwxr-xr-x
thin_metadata_size
1.23
MB
-rwxr-xr-x
thin_repair
1.23
MB
-rwxr-xr-x
thin_restore
1.23
MB
-rwxr-xr-x
thin_rmap
1.23
MB
-rwxr-xr-x
thin_trim
1.23
MB
-rwxr-xr-x
tmpwatch
27.87
KB
-rwxr-xr-x
tracepath
15.05
KB
-rwxr-xr-x
tracepath6
15.05
KB
-rwxr-xr-x
try-from
23.47
KB
-rwxr-xr-x
tsig-keygen
19.44
KB
-rwxr-xr-x
tune2fs
69.41
KB
-rwxr-xr-x
tuned
3.29
KB
-rwxr-xr-x
tuned-adm
5.22
KB
-rwxr-xr-x
udevadm
414.27
KB
-rwxr-xr-x
umount.nfs
114.68
KB
-rwsr-xr-x
umount.nfs4
114.68
KB
-rwsr-xr-x
unix_chkpwd
35.42
KB
-rwxr-xr-x
unix_update
35.42
KB
-rwx------
update-alternatives
27.61
KB
-rwxr-xr-x
update-pciids
1.71
KB
-rwxr-xr-x
update-smart-drivedb
14.34
KB
-rwxr-xr-x
usb_modeswitch
57.61
KB
-rwxr-xr-x
usb_modeswitch_dispatcher
236.66
KB
-rwxr-xr-x
useradd
134.39
KB
-rwxr-xr-x
userdel
93.5
KB
-rwxr-xr-x
userhelper
39.38
KB
-rwx--x--x
usermod
130.33
KB
-rwxr-xr-x
usernetctl
11.03
KB
-rwxr-xr-x
uuserver
14.97
KB
-rwxr-xr-x
vgcfgbackup
2.15
MB
-r-xr-xr-x
vgcfgrestore
2.15
MB
-r-xr-xr-x
vgchange
2.15
MB
-r-xr-xr-x
vgck
2.15
MB
-r-xr-xr-x
vgconvert
2.15
MB
-r-xr-xr-x
vgcreate
2.15
MB
-r-xr-xr-x
vgdisplay
2.15
MB
-r-xr-xr-x
vgexport
2.15
MB
-r-xr-xr-x
vgextend
2.15
MB
-r-xr-xr-x
vgimport
2.15
MB
-r-xr-xr-x
vgimportclone
2.15
MB
-r-xr-xr-x
vgmerge
2.15
MB
-r-xr-xr-x
vgmknodes
2.15
MB
-r-xr-xr-x
vgreduce
2.15
MB
-r-xr-xr-x
vgremove
2.15
MB
-r-xr-xr-x
vgrename
2.15
MB
-r-xr-xr-x
vgs
2.15
MB
-r-xr-xr-x
vgscan
2.15
MB
-r-xr-xr-x
vgsplit
2.15
MB
-r-xr-xr-x
vigr
62.54
KB
-rwxr-xr-x
vipw
62.54
KB
-rwxr-xr-x
virt-what
11.57
KB
-rwxr-xr-x
visudo
200.91
KB
-rwxr-xr-x
vmcore-dmesg
19.28
KB
-rwxr-xr-x
vpddecode
15.33
KB
-rwxr-xr-x
weak-modules
31.9
KB
-rwxr-xr-x
whmapi0
3.02
MB
-rwxr-xr-x
whmapi1
3.02
MB
-rwxr-xr-x
whmlogin
2.33
KB
-rwxr-xr-x
wipefs
28.05
KB
-rwxr-xr-x
xfs_admin
1.35
KB
-rwxr-xr-x
xfs_bmap
638
B
-rwxr-xr-x
xfs_copy
339.33
KB
-rwxr-xr-x
xfs_db
576.38
KB
-rwxr-xr-x
xfs_estimate
11.16
KB
-rwxr-xr-x
xfs_freeze
767
B
-rwxr-xr-x
xfs_fsr
31.83
KB
-rwxr-xr-x
xfs_growfs
327.2
KB
-rwxr-xr-x
xfs_info
472
B
-rwxr-xr-x
xfs_io
122.68
KB
-rwxr-xr-x
xfs_logprint
355.81
KB
-rwxr-xr-x
xfs_mdrestore
314.81
KB
-rwxr-xr-x
xfs_metadump
747
B
-rwxr-xr-x
xfs_mkfile
1007
B
-rwxr-xr-x
xfs_ncheck
650
B
-rwxr-xr-x
xfs_quota
84.88
KB
-rwxr-xr-x
xfs_repair
563.2
KB
-rwxr-xr-x
xfs_rtcp
15.25
KB
-rwxr-xr-x
xfsdump
291.68
KB
-rwxr-xr-x
xfsinvutil
61.87
KB
-rwxr-xr-x
xfsrestore
353.26
KB
-rwxr-xr-x
xqmstats
14.03
KB
-rwxr-xr-x
xtables-multi
91.52
KB
-rwxr-xr-x
yum-complete-transaction
9.22
KB
-rwxr-xr-x
yumdb
8.67
KB
-rwxr-xr-x
zabbix_agentd
691.83
KB
-rwxr-xr-x
zdump
14.02
KB
-rwxr-xr-x
zic
50.02
KB
-rwxr-xr-x
zramctl
82.23
KB
-rwxr-xr-x
Delete
Unzip
Zip
${this.title}
Close
Code Editor : semanage
#! /usr/bin/python -Es # 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 # # try: import policycoreutils.default_encoding_utf8 except ImportError: pass import argparse import sys import gettext PROGNAME = "policycoreutils" try: kwargs = {} if sys.version_info < (3,): kwargs['unicode'] = True gettext.install(PROGNAME, localedir="/usr/share/locale", codeset='utf-8', **kwargs) except IOError: 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', '-s SEUSER', 'selinux_name'')'), ' --delete': ('selinux_name',), ' --modify': ('(', '-L LEVEL', '-R ROLES', '-r RANGE', '-s SEUSER', 'selinux_name', ')'), ' --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: 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) store = '' class SetStore(argparse.Action): def __call__(self, parser, namespace, values, option_string=None): global store store = values # set store value as soon as possible so that seobject (sepolicy) can be imported successfully import selinux rc, localstore = selinux.selinux_getpolicytype() if store not in ["", localstore]: selinux.selinux_set_policy_root("%s%s" % (selinux.selinux_path(), store)) setattr(namespace, self.dest, values) class seParser(argparse.ArgumentParser): def error(self, message): if len(sys.argv) == 2: self.print_help() sys.exit(2) 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 is not "-": try: sys.stdout = open(values, 'w') except: sys.stderr.write("%s: %s\n" % (e.__class__.__name__, str(e))) 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 is not "-": 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) # functions for OBJECT initialization def login_ini(): from seobject import loginRecords OBJECT = loginRecords(store) return OBJECT def user_ini(): from seobject import seluserRecords OBJECT = seluserRecords(store) return OBJECT def port_ini(): from seobject import portRecords OBJECT = portRecords(store) return OBJECT def ibpkey_ini(): from seobject import ibpkeyRecords OBJECT = ibpkeyRecords(store) return OBJECT def ibendport_ini(): from seobject import ibendportRecords OBJECT = ibendportRecords(store) return OBJECT def module_ini(): from seobject import moduleRecords OBJECT = moduleRecords(store) return OBJECT def interface_ini(): from seobject import interfaceRecords OBJECT = interfaceRecords(store) return OBJECT def node_ini(): from seobject import nodeRecords OBJECT = nodeRecords(store) return OBJECT def fcontext_ini(): from seobject import fcontextRecords OBJECT = fcontextRecords(store) return OBJECT def boolean_ini(): from seobject import booleanRecords OBJECT = booleanRecords(store) return OBJECT def permissive_ini(): from seobject import permissiveRecords OBJECT = permissiveRecords(store) return OBJECT def dontaudit_ini(): from seobject import dontauditClass OBJECT = dontauditClass(store) return OBJECT # define dictonary for seobject OBEJCTS object_dict = {'login': login_ini, 'user': user_ini, 'port': port_ini, 'module': module_ini, 'interface': interface_ini, 'node': node_ini, 'fcontext': fcontext_ini, 'boolean': boolean_ini, 'permissive': permissive_ini, 'dontaudit': dontaudit_ini, 'ibpkey': ibpkey_ini, 'ibendport': ibendport_ini} def generate_custom_usage(usage_text, usage_dict): # generate custom usage from given text and dictonary sorted_keys = [] for i in list(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 list(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 list(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']() OBJECT.set_reload(args.noreload) if args.action is "add": OBJECT.add(args.login, args.seuser, args.range) if args.action is "modify": OBJECT.modify(args.login, args.seuser, args.range) if args.action is "delete": OBJECT.delete(args.login) if args.action is "list": OBJECT.list(args.noheading, args.locallist) if args.action is "deleteall": OBJECT.deleteall() if args.action is "extract": for i in OBJECT.customized(): print("login %s" % (str(i))) def parser_add_store(parser, name): parser.add_argument('-S', '--store', action=SetStore, 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_false', default=True, 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='', help=_('Default SELinux Level for SELinux user. (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. ''')) 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 is None: print("usage: " + "%s" % generate_custom_usage(usage_fcontext, usage_fcontext_dict)) sys.exit(2) elif args.action and args.equal: handle_opts(args, fcontext_equal_args, "equal") else: handle_opts(args, fcontext_args, args.action) OBJECT = object_dict['fcontext']() OBJECT.set_reload(args.noreload) if args.action is "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 is "modify": if args.equal: OBJECT.add_equal(args.file_spec, args.equal) else: OBJECT.modify(args.file_spec, args.type, args.ftype, args.range, args.seuser) if args.action is "delete": if args.equal: OBJECT.delete(args.file_spec, args.equal) else: OBJECT.delete(args.file_spec, args.ftype) if args.action is "list": OBJECT.list(args.noheading, args.locallist) if args.action is "deleteall": OBJECT.deleteall() if args.action is "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=False) 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=_('file_spec')) 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']() OBJECT.set_reload(args.noreload) if args.action is "add": OBJECT.add(args.selinux_name, args.roles, args.level, args.range, args.prefix) if args.action is "modify": OBJECT.modify(args.selinux_name, args.roles, args.level, args.range, args.prefix) if args.action is "delete": OBJECT.delete(args.selinux_name) if args.action is "list": OBJECT.list(args.noheading, args.locallist) if args.action is "deleteall": OBJECT.deleteall() if args.action is "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']() OBJECT.set_reload(args.noreload) if args.action is "add": OBJECT.add(args.port, args.proto, args.range, args.type) if args.action is "modify": OBJECT.modify(args.port, args.proto, args.range, args.type) if args.action is "delete": OBJECT.delete(args.port, args.proto) if args.action is "list": OBJECT.list(args.noheading, args.locallist) if args.action is "deleteall": OBJECT.deleteall() if args.action is "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']() OBJECT.set_reload(args.noreload) if args.action is "add": OBJECT.add(args.ibpkey, args.subnet_prefix, args.range, args.type) if args.action is "modify": OBJECT.modify(args.ibpkey, args.subnet_prefix, args.range, args.type) if args.action is "delete": OBJECT.delete(args.ibpkey, args.subnet_prefix) if args.action is "list": OBJECT.list(args.noheading, args.locallist) if args.action is "deleteall": OBJECT.deleteall() if args.action is "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']() OBJECT.set_reload(args.noreload) if args.action is "add": OBJECT.add(args.ibendport, args.ibdev_name, args.range, args.type) if args.action is "modify": OBJECT.modify(args.ibendport, args.ibdev_name, args.range, args.type) if args.action is "delete": OBJECT.delete(args.ibendport, args.ibdev_name) if args.action is "list": OBJECT.list(args.noheading, args.locallist) if args.action is "deleteall": OBJECT.deleteall() if args.action is "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']() OBJECT.set_reload(args.noreload) if args.action is "add": OBJECT.add(args.interface, args.range, args.type) if args.action is "modify": OBJECT.modify(args.interface, args.range, args.type) if args.action is "delete": OBJECT.delete(args.interface) if args.action is "list": OBJECT.list(args.noheading, args.locallist) if args.action is "deleteall": OBJECT.deleteall() if args.action is "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): from seobject import moduleRecords OBJECT = moduleRecords(store) OBJECT.set_reload(args.noreload) if args.action == "add": OBJECT.add(args.module_name, args.priority) if args.action == "enable": OBJECT.set_enabled(args.module_name, True) if args.action == "disable": OBJECT.set_enabled(args.module_name, False) if args.action == "remove": OBJECT.delete(args.module_name, args.priority) if args.action is "deleteall": OBJECT.deleteall() if args.action == "list": OBJECT.list(args.noheading, args.locallist) if args.action is "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_add(mgroup, "module") parser_add_list(mgroup, "module") parser_add_extract(mgroup, "module") parser_add_deleteall(mgroup, "module") mgroup.add_argument('-r', '--remove', dest='action', action='store_const', const='remove', help=_("Remove a module")) mgroup.add_argument('-d', '--disable', dest='action', action='store_const', const='disable', help=_("Disable a module")) mgroup.add_argument('-e', '--enable', dest='action', action='store_const', const='enable', help=_("Enable a module")) moduleParser.add_argument('module_name', nargs='?', default=None, help=_('Name of the module to act on')) 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']() OBJECT.set_reload(args.noreload) if args.action is "add": OBJECT.add(args.node, args.netmask, args.proto, args.range, args.type) if args.action is "modify": OBJECT.modify(args.node, args.netmask, args.proto, args.range, args.type) if args.action is "delete": OBJECT.delete(args.node, args.netmask, args.proto) if args.action is "list": OBJECT.list(args.noheading, args.locallist) if args.action is "deleteall": OBJECT.deleteall() if args.action is "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'), ('')], 'extract': [('locallist', 'state', 'boolean'), ('')], 'deleteall': [('locallist'), ('')], 'state': [('locallist', 'list', 'extract', 'deleteall'), ('modify')]} if args.action is None: print("Usage: " + "%s" % generate_custom_usage(usage_boolean, usage_boolean_dict)) sys.exit(2) # TODO: should be added to handle_opts logic elif args.action is "modify" and not args.boolean: print("boolean name required ") sys.exit(1) elif args.action is "modify" and args.boolean and not args.state: print("state option is needed") sys.exit(1) else: handle_opts(args, boolean_args, args.action) OBJECT = object_dict['boolean']() OBJECT.set_reload(args.noreload) if args.action is "modify": if args.boolean: OBJECT.modify(args.boolean, args.state, False) if args.action is "list": OBJECT.list(args.noheading, args.locallist) if args.action is "deleteall": OBJECT.deleteall() if args.action is "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=False) #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']() OBJECT.set_reload(args.noreload) if args.action is "list": OBJECT.list(args.noheading) elif args.type != None: if args.action is "add": OBJECT.add(args.type) if args.action is "delete": OBJECT.delete(args.type) else: args.parser.print_usage(sys.stderr) sys.stderr.write(_('semanage permissive: error: the following argument is required: type\n')) sys.exit(1) 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_list(pgroup, "permissive") #TODO: probably should be also added => need to implement own option handling #parser_add_deleteall(pgroup) 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']() OBJECT.set_reload(args.noreload) 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"] for i in manageditems: print("%s -D" % i) for i in manageditems: OBJECT = object_dict[i]() 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) import re 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): from seobject import semanageRecords trans = semanageRecords(store) trans.start() for l in sys.stdin.readlines(): if len(l.strip()) == 0: continue 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) trans.set_reload(args.noreload) trans.finish() 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') 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): if len(sys_args) == 1: return [ "-h" ] 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 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()
Close