Linux webserver 6.8.0-49-generic #49~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Nov 6 17:42:15 UTC 2 x86_64
Apache/2.4.52 (Ubuntu)
Server IP : 192.168.1.1 & Your IP : 18.188.39.45
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
sbin /
Delete
Unzip
Name
Size
Permission
Date
Action
ModemManager
2.09
MB
-rwxr-xr-x
2023-12-20 05:35
NetworkManager
3.1
MB
-rwxr-xr-x
2022-06-09 09:27
a2disconf
15.89
KB
-rwxr-xr-x
2024-03-18 13:41
a2dismod
15.89
KB
-rwxr-xr-x
2024-03-18 13:41
a2dissite
15.89
KB
-rwxr-xr-x
2024-03-18 13:41
a2enconf
15.89
KB
-rwxr-xr-x
2024-03-18 13:41
a2enmod
15.89
KB
-rwxr-xr-x
2024-03-18 13:41
a2ensite
15.89
KB
-rwxr-xr-x
2024-03-18 13:41
a2query
9.64
KB
-rwxr-xr-x
2025-04-03 09:05
aa-remove-unknown
3
KB
-rwxr-xr-x
2024-03-06 18:35
aa-status
62.62
KB
-rwxr-xr-x
2024-03-06 18:35
aa-teardown
137
B
-rwxr-xr-x
2022-02-10 00:45
accessdb
14.55
KB
-rwxr-xr-x
2022-03-17 19:03
add-shell
1.03
KB
-rwxr-xr-x
2022-03-23 13:49
addgnupghome
3
KB
-rwxr-xr-x
2025-03-28 17:39
addgroup
37.35
KB
-rwxr-xr-x
2021-01-06 06:16
adduser
37.35
KB
-rwxr-xr-x
2021-01-06 06:16
agetty
55.56
KB
-rwxr-xr-x
2024-04-09 15:32
apache2
740.89
KB
-rwxr-xr-x
2025-04-03 09:05
apache2ctl
7.06
KB
-rwxr-xr-x
2024-03-18 13:41
apachectl
7.06
KB
-rwxr-xr-x
2024-03-18 13:41
apparmor_parser
1.48
MB
-rwxr-xr-x
2024-03-06 18:35
apparmor_status
62.62
KB
-rwxr-xr-x
2024-03-06 18:35
applygnupgdefaults
2.17
KB
-rwxr-xr-x
2025-03-28 17:39
arp
61.61
KB
-rwxr-xr-x
2022-03-24 16:20
arpd
26.33
KB
-rwxr-xr-x
2022-03-24 11:56
arptables
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
arptables-nft
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
arptables-nft-restore
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
arptables-nft-save
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
arptables-restore
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
arptables-save
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
badblocks
34.32
KB
-rwxr-xr-x
2023-10-09 01:50
bcache-super-show
14.3
KB
-rwxr-xr-x
2022-03-23 09:42
biosdecode
23.2
KB
-rwxr-xr-x
2022-08-23 23:52
blkdeactivate
15.97
KB
-rwxr-xr-x
2022-02-16 17:06
blkdiscard
22.38
KB
-rwxr-xr-x
2024-04-09 15:32
blkid
50.41
KB
-rwxr-xr-x
2024-04-09 15:32
blkzone
34.38
KB
-rwxr-xr-x
2024-04-09 15:32
blockdev
30.38
KB
-rwxr-xr-x
2024-04-09 15:32
bpftool
1.58
KB
-rwxr-xr-x
2025-04-11 20:45
bridge
92.49
KB
-rwxr-xr-x
2022-03-24 11:56
cache_check
1.33
MB
-rwxr-xr-x
2022-03-18 12:36
cache_dump
1.33
MB
-rwxr-xr-x
2022-03-18 12:36
cache_metadata_size
1.33
MB
-rwxr-xr-x
2022-03-18 12:36
cache_repair
1.33
MB
-rwxr-xr-x
2022-03-18 12:36
cache_restore
1.33
MB
-rwxr-xr-x
2022-03-18 12:36
cache_writeback
1.33
MB
-rwxr-xr-x
2022-03-18 12:36
capsh
30.3
KB
-rwxr-xr-x
2025-02-20 15:51
cfdisk
94.73
KB
-rwxr-xr-x
2024-04-09 15:32
cgdisk
150.48
KB
-rwxr-xr-x
2022-03-23 13:53
chat
34.31
KB
-rwxr-xr-x
2022-02-24 17:14
chcpu
30.38
KB
-rwxr-xr-x
2024-04-09 15:32
check_forensic
952
B
-rwxr-xr-x
2011-04-26 15:10
chgpasswd
58.13
KB
-rwxr-xr-x
2024-02-06 12:54
chmem
34.38
KB
-rwxr-xr-x
2024-04-09 15:32
chpasswd
54.16
KB
-rwxr-xr-x
2024-02-06 12:54
chroot
38.51
KB
-rwxr-xr-x
2024-02-08 03:46
cpgr
48.29
KB
-rwxr-xr-x
2024-02-06 12:54
cppw
48.29
KB
-rwxr-xr-x
2024-02-06 12:54
cron
50.58
KB
-rwxr-xr-x
2022-03-23 13:49
cryptdisks_start
1.51
KB
-rwxr-xr-x
2022-01-13 21:44
cryptdisks_stop
844
B
-rwxr-xr-x
2022-01-13 21:44
cryptsetup
169.55
KB
-rwxr-xr-x
2023-08-22 17:16
cryptsetup-reencrypt
90.38
KB
-rwxr-xr-x
2023-08-22 17:16
cryptsetup-ssh
23.53
KB
-rwxr-xr-x
2023-08-22 17:16
ctrlaltdel
14.38
KB
-rwxr-xr-x
2024-04-09 15:32
dbconfig-generate-include
12.36
KB
-rwxr-xr-x
2021-12-17 20:18
dbconfig-load-include
5.57
KB
-rwxr-xr-x
2021-12-17 20:18
dcb
80.52
KB
-rwxr-xr-x
2022-03-24 11:56
debugfs
229.8
KB
-rwxr-xr-x
2023-10-09 01:50
delgroup
16.11
KB
-rwxr-xr-x
2021-01-06 06:16
deluser
16.11
KB
-rwxr-xr-x
2021-01-06 06:16
depmod
166.36
KB
-rwxr-xr-x
2021-08-17 09:19
devlink
142.86
KB
-rwxr-xr-x
2022-03-24 11:56
dhclient
442.66
KB
-rwxr-xr-x
2023-01-31 21:54
dhclient-script
15.92
KB
-rwxr-xr-x
2023-01-31 21:54
dmeventd
50.38
KB
-rwxr-xr-x
2022-02-16 17:06
dmidecode
118.98
KB
-rwxr-xr-x
2022-08-23 23:52
dmsetup
171.01
KB
-rwxr-xr-x
2022-02-16 17:06
dmstats
171.01
KB
-rwxr-xr-x
2022-02-16 17:06
dnsmasq
480.24
KB
-rwxr-xr-x
2024-02-14 19:23
dosfsck
82.38
KB
-rwxr-xr-x
2022-03-23 13:51
dosfslabel
38.38
KB
-rwxr-xr-x
2022-03-23 13:51
dpkg-preconfigure
3.58
KB
-rwxr-xr-x
2022-02-20 14:42
dpkg-reconfigure
4.38
KB
-rwxr-xr-x
2022-02-20 14:42
dumpe2fs
30.31
KB
-rwxr-xr-x
2023-10-09 01:50
e2freefrag
14.3
KB
-rwxr-xr-x
2023-10-09 01:50
e2fsck
351.84
KB
-rwxr-xr-x
2023-10-09 01:50
e2image
42.31
KB
-rwxr-xr-x
2023-10-09 01:50
e2label
102.55
KB
-rwxr-xr-x
2023-10-09 01:50
e2mmpstatus
30.31
KB
-rwxr-xr-x
2023-10-09 01:50
e2scrub
7.13
KB
-rwxr-xr-x
2023-10-09 01:50
e2scrub_all
5.27
KB
-rwxr-xr-x
2023-10-09 01:50
e2undo
22.3
KB
-rwxr-xr-x
2023-10-09 01:50
e4crypt
30.38
KB
-rwxr-xr-x
2023-10-09 01:50
e4defrag
30.3
KB
-rwxr-xr-x
2023-10-09 01:50
ebtables
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
ebtables-nft
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
ebtables-nft-restore
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
ebtables-nft-save
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
ebtables-restore
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
ebtables-save
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
era_check
1.33
MB
-rwxr-xr-x
2022-03-18 12:36
era_dump
1.33
MB
-rwxr-xr-x
2022-03-18 12:36
era_invalidate
1.33
MB
-rwxr-xr-x
2022-03-18 12:36
era_restore
1.33
MB
-rwxr-xr-x
2022-03-18 12:36
ethtool
551.48
KB
-rwxr-xr-x
2023-12-12 20:52
faillock
14.15
KB
-rwxr-xr-x
2024-01-10 13:54
fatlabel
38.38
KB
-rwxr-xr-x
2022-03-23 13:51
fdisk
110.42
KB
-rwxr-xr-x
2024-04-09 15:32
filefrag
18.32
KB
-rwxr-xr-x
2023-10-09 01:50
findfs
14.38
KB
-rwxr-xr-x
2024-04-09 15:32
fixparts
58.48
KB
-rwxr-xr-x
2022-03-23 13:53
fsadm
23.94
KB
-rwxr-xr-x
2022-02-16 17:06
fsck
42.42
KB
-rwxr-xr-x
2024-04-09 15:32
fsck.btrfs
1.16
KB
-rwxr-xr-x
2022-02-24 17:39
fsck.cramfs
30.44
KB
-rwxr-xr-x
2024-04-09 15:32
fsck.ext2
351.84
KB
-rwxr-xr-x
2023-10-09 01:50
fsck.ext3
351.84
KB
-rwxr-xr-x
2023-10-09 01:50
fsck.ext4
351.84
KB
-rwxr-xr-x
2023-10-09 01:50
fsck.fat
82.38
KB
-rwxr-xr-x
2022-03-23 13:51
fsck.minix
54.41
KB
-rwxr-xr-x
2024-04-09 15:32
fsck.msdos
82.38
KB
-rwxr-xr-x
2022-03-23 13:51
fsck.vfat
82.38
KB
-rwxr-xr-x
2022-03-23 13:51
fsck.xfs
1.92
KB
-rwxr-xr-x
2022-02-09 04:42
fsfreeze
14.38
KB
-rwxr-xr-x
2024-04-09 15:32
fstab-decode
18.3
KB
-rwxr-xr-x
2021-12-14 21:17
fstrim
42.38
KB
-rwxr-xr-x
2024-04-09 15:32
gdisk
174.48
KB
-rwxr-xr-x
2022-03-23 13:53
genl
90.44
KB
-rwxr-xr-x
2022-03-24 11:56
getcap
14.3
KB
-rwxr-xr-x
2025-02-20 15:51
getpcaps
14.3
KB
-rwxr-xr-x
2025-02-20 15:51
getty
55.56
KB
-rwxr-xr-x
2024-04-09 15:32
groupadd
66.91
KB
-rwxr-xr-x
2024-02-06 12:54
groupdel
62.73
KB
-rwxr-xr-x
2024-02-06 12:54
groupmems
54.19
KB
-rwxr-xr-x
2024-02-06 12:54
groupmod
66.82
KB
-rwxr-xr-x
2024-02-06 12:54
grpck
58.13
KB
-rwxr-xr-x
2024-02-06 12:54
grpconv
50.01
KB
-rwxr-xr-x
2024-02-06 12:54
grpunconv
50.01
KB
-rwxr-xr-x
2024-02-06 12:54
grub-install
1.15
MB
-rwxr-xr-x
2022-12-18 21:21
grub-macbless
929.11
KB
-rwxr-xr-x
2022-12-18 21:21
grub-mkconfig
8.6
KB
-rwxr-xr-x
2022-12-18 21:21
grub-mkdevicemap
215.7
KB
-rwxr-xr-x
2022-12-18 21:21
grub-probe
941.36
KB
-rwxr-xr-x
2022-12-18 21:21
grub-reboot
4.73
KB
-rwxr-xr-x
2022-12-18 21:21
grub-set-default
3.47
KB
-rwxr-xr-x
2022-12-18 21:21
halt
1.06
MB
-rwxr-xr-x
2023-11-21 20:57
hdparm
139.43
KB
-rwxr-xr-x
2022-03-23 13:57
httxt2dbm
14.3
KB
-rwxr-xr-x
2025-04-03 09:05
hwclock
50.5
KB
-rwxr-xr-x
2024-04-09 15:32
iconvconfig
30.4
KB
-rwxr-xr-x
2025-01-28 20:25
ifconfig
77.17
KB
-rwxr-xr-x
2022-03-24 16:20
init
1.76
MB
-rwxr-xr-x
2023-11-21 20:57
insmod
166.36
KB
-rwxr-xr-x
2021-08-17 09:19
installkernel
2.6
KB
-rwxr-xr-x
2022-03-23 13:49
integritysetup
54.07
KB
-rwxr-xr-x
2023-08-22 17:16
invoke-rc.d
16.12
KB
-rwxr-xr-x
2021-12-07 21:55
ip
702.05
KB
-rwxr-xr-x
2022-03-24 11:56
ip6tables
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
ip6tables-apply
6.89
KB
-rwxr-xr-x
2021-01-15 22:03
ip6tables-legacy
96.95
KB
-rwxr-xr-x
2024-01-16 21:14
ip6tables-legacy-restore
96.95
KB
-rwxr-xr-x
2024-01-16 21:14
ip6tables-legacy-save
96.95
KB
-rwxr-xr-x
2024-01-16 21:14
ip6tables-nft
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
ip6tables-nft-restore
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
ip6tables-nft-save
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
ip6tables-restore
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
ip6tables-restore-translate
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
ip6tables-save
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
ip6tables-translate
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
ipmaddr
18.3
KB
-rwxr-xr-x
2022-03-24 16:20
iptables
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
iptables-apply
6.89
KB
-rwxr-xr-x
2021-01-15 22:03
iptables-legacy
96.95
KB
-rwxr-xr-x
2024-01-16 21:14
iptables-legacy-restore
96.95
KB
-rwxr-xr-x
2024-01-16 21:14
iptables-legacy-save
96.95
KB
-rwxr-xr-x
2024-01-16 21:14
iptables-nft
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
iptables-nft-restore
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
iptables-nft-save
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
iptables-restore
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
iptables-restore-translate
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
iptables-save
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
iptables-translate
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
iptunnel
18.3
KB
-rwxr-xr-x
2022-03-24 16:20
irqbalance
66.86
KB
-rwxr-xr-x
2023-10-16 09:22
irqbalance-ui
34.38
KB
-rwxr-xr-x
2023-10-16 09:22
iscsi-iname
14.3
KB
-rwxr-xr-x
2022-01-19 11:38
iscsi_discovery
5.17
KB
-rwxr-xr-x
2021-09-05 23:32
iscsiadm
398.46
KB
-rwxr-xr-x
2022-01-19 11:38
iscsid
298.55
KB
-rwxr-xr-x
2022-01-19 11:38
iscsistart
274.56
KB
-rwxr-xr-x
2022-01-19 11:38
isosize
14.38
KB
-rwxr-xr-x
2024-04-09 15:32
iucode-tool
58.34
KB
-rwxr-xr-x
2021-10-07 10:13
iucode_tool
58.34
KB
-rwxr-xr-x
2021-10-07 10:13
kbdrate
18.16
KB
-rwxr-xr-x
2022-12-16 14:14
killall5
30.38
KB
-rwxr-xr-x
2021-12-14 21:17
kpartx
46.16
KB
-rwxr-xr-x
2023-10-31 22:21
ldattach
26.38
KB
-rwxr-xr-x
2024-04-09 15:32
ldconfig
387
B
-rwxr-xr-x
2025-01-28 20:25
ldconfig.real
1.16
MB
-rwxr-xr-x
2025-01-28 20:25
locale-gen
4.29
KB
-rwxr-xr-x
2023-07-26 08:23
logrotate
102.24
KB
-rwxr-xr-x
2022-05-25 14:10
logsave
14.16
KB
-rwxr-xr-x
2023-10-09 01:50
losetup
70.52
KB
-rwxr-xr-x
2024-04-09 15:32
lsmod
166.36
KB
-rwxr-xr-x
2021-08-17 09:19
luksformat
3.32
KB
-rwxr-xr-x
2022-01-13 21:44
lvchange
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
lvconvert
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
lvcreate
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
lvdisplay
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
lvextend
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
lvm
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
lvmconfig
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
lvmdiskscan
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
lvmdump
10.07
KB
-rwxr-xr-x
2022-02-16 17:06
lvmpolld
236.34
KB
-rwxr-xr-x
2022-02-16 17:06
lvmsadc
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
lvmsar
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
lvreduce
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
lvremove
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
lvrename
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
lvresize
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
lvs
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
lvscan
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
make-bcache
22.38
KB
-rwxr-xr-x
2022-03-23 09:42
make-ssl-cert
6.65
KB
-rwxr-xr-x
2021-12-30 16:52
mdadm
601.31
KB
-rwxr-xr-x
2023-04-11 03:22
mdmon
258.44
KB
-rwxr-xr-x
2023-04-11 03:22
mii-tool
26.73
KB
-rwxr-xr-x
2022-03-24 16:20
mkdosfs
50.83
KB
-rwxr-xr-x
2022-03-23 13:51
mke2fs
130.62
KB
-rwxr-xr-x
2023-10-09 01:50
mkfs
14.38
KB
-rwxr-xr-x
2024-04-09 15:32
mkfs.bfs
22.38
KB
-rwxr-xr-x
2024-04-09 15:32
mkfs.btrfs
471.25
KB
-rwxr-xr-x
2022-02-24 17:39
mkfs.cramfs
34.32
KB
-rwxr-xr-x
2024-04-09 15:32
mkfs.ext2
130.62
KB
-rwxr-xr-x
2023-10-09 01:50
mkfs.ext3
130.62
KB
-rwxr-xr-x
2023-10-09 01:50
mkfs.ext4
130.62
KB
-rwxr-xr-x
2023-10-09 01:50
mkfs.fat
50.83
KB
-rwxr-xr-x
2022-03-23 13:51
mkfs.minix
42.39
KB
-rwxr-xr-x
2024-04-09 15:32
mkfs.msdos
50.83
KB
-rwxr-xr-x
2022-03-23 13:51
mkfs.ntfs
70.38
KB
-rwxr-xr-x
2022-11-01 11:56
mkfs.vfat
50.83
KB
-rwxr-xr-x
2022-03-23 13:51
mkfs.xfs
382.77
KB
-rwxr-xr-x
2022-02-09 04:42
mkhomedir_helper
22.17
KB
-rwxr-xr-x
2024-01-10 13:54
mkinitramfs
12.16
KB
-rwxr-xr-x
2023-07-25 09:54
mklost+found
14.3
KB
-rwxr-xr-x
2023-10-09 01:50
mkntfs
70.38
KB
-rwxr-xr-x
2022-11-01 11:56
mkswap
46.38
KB
-rwxr-xr-x
2024-04-09 15:32
modinfo
166.36
KB
-rwxr-xr-x
2021-08-17 09:19
modprobe
166.36
KB
-rwxr-xr-x
2021-08-17 09:19
mount.fuse
18.3
KB
-rwxr-xr-x
2022-03-23 13:53
mount.fuse3
18.3
KB
-rwxr-xr-x
2022-03-23 13:53
mount.lowntfs-3g
114.98
KB
-rwxr-xr-x
2022-11-01 11:56
mount.ntfs
159.01
KB
-rwxr-xr-x
2022-11-01 11:56
mount.ntfs-3g
159.01
KB
-rwxr-xr-x
2022-11-01 11:56
mpathpersist
31.05
KB
-rwxr-xr-x
2023-10-31 22:21
multipath
34.15
KB
-rwxr-xr-x
2023-10-31 22:21
multipathd
134.26
KB
-rwxr-xr-x
2023-10-31 22:21
mysqld
52.92
MB
-rwxr-xr-x
2025-04-25 17:19
nameif
14.48
KB
-rwxr-xr-x
2022-03-24 16:20
needrestart
38.71
KB
-rwxr-xr-x
2024-12-05 11:58
netplan
798
B
-rwxr-xr-x
2023-05-17 17:11
newusers
74.73
KB
-rwxr-xr-x
2024-02-06 12:54
nfnl_osf
18.3
KB
-rwxr-xr-x
2024-01-16 21:14
nft
26.23
KB
-rwxr-xr-x
2022-08-10 05:36
nologin
14.3
KB
-rwxr-xr-x
2024-02-06 12:54
ntfsclone
50.38
KB
-rwxr-xr-x
2022-11-01 11:56
ntfscp
34.38
KB
-rwxr-xr-x
2022-11-01 11:56
ntfslabel
22.38
KB
-rwxr-xr-x
2022-11-01 11:56
ntfsresize
62.39
KB
-rwxr-xr-x
2022-11-01 11:56
ntfsundelete
50.38
KB
-rwxr-xr-x
2022-11-01 11:56
on_ac_power
2.18
KB
-rwxr-xr-x
2019-07-20 15:43
overlayroot-chroot
2.45
KB
-rwxr-xr-x
2020-08-17 16:00
ownership
14.45
KB
-rwxr-xr-x
2022-08-23 23:52
pam-auth-update
20.5
KB
-rwxr-xr-x
2022-02-07 16:47
pam_extrausers_chkpwd
22.15
KB
-rwxr-sr-x
2024-01-10 13:54
pam_extrausers_update
30.15
KB
-rwxr-xr-x
2024-01-10 13:54
pam_getenv
2.82
KB
-rwxr-xr-x
2020-08-12 00:15
pam_timestamp_check
14.15
KB
-rwxr-xr-x
2024-01-10 13:54
parted
86.4
KB
-rwxr-xr-x
2022-03-24 16:22
partprobe
14.38
KB
-rwxr-xr-x
2022-03-24 16:22
pdata_tools
1.33
MB
-rwxr-xr-x
2022-03-18 12:36
phpdismod
7.11
KB
-rwxr-xr-x
2022-01-28 00:27
phpenmod
7.11
KB
-rwxr-xr-x
2022-01-28 00:27
phpquery
6.24
KB
-rwxr-xr-x
2022-01-28 00:27
pivot_root
14.38
KB
-rwxr-xr-x
2024-04-09 15:32
plipconfig
14.3
KB
-rwxr-xr-x
2022-03-24 16:20
plymouthd
150.55
KB
-rwxr-xr-x
2022-03-18 10:45
poweroff
1.06
MB
-rwxr-xr-x
2023-11-21 20:57
pppd
414.56
KB
-rwsr-xr--
2022-02-24 17:14
pppdump
18.39
KB
-rwxr-xr-x
2022-02-24 17:14
pppoe-discovery
22.3
KB
-rwxr-xr-x
2022-02-24 17:14
pppstats
18.3
KB
-rwxr-xr-x
2022-02-24 17:14
pptp
63.05
KB
-rwxr-xr-x
2022-03-24 16:23
pptpsetup
6.46
KB
-rwxr-xr-x
2022-03-24 16:23
pvchange
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
pvck
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
pvcreate
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
pvdisplay
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
pvmove
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
pvremove
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
pvresize
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
pvs
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
pvscan
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
pwck
50.13
KB
-rwxr-xr-x
2024-02-06 12:54
pwconv
46.01
KB
-rwxr-xr-x
2024-02-06 12:54
pwunconv
42.01
KB
-rwxr-xr-x
2024-02-06 12:54
rarp
32.33
KB
-rwxr-xr-x
2022-03-24 16:20
readprofile
22.41
KB
-rwxr-xr-x
2024-04-09 15:32
reboot
1.06
MB
-rwxr-xr-x
2023-11-21 20:57
remove-shell
1.07
KB
-rwxr-xr-x
2022-03-23 13:49
resize2fs
66.3
KB
-rwxr-xr-x
2023-10-09 01:50
rmmod
166.36
KB
-rwxr-xr-x
2021-08-17 09:19
rmt
58.57
KB
-rwxr-xr-x
2023-12-05 05:15
rmt-tar
58.57
KB
-rwxr-xr-x
2023-12-05 05:15
route
64.27
KB
-rwxr-xr-x
2022-03-24 16:20
rsyslogd
767.19
KB
-rwxr-xr-x
2022-05-02 18:45
rtacct
28.31
KB
-rwxr-xr-x
2022-03-24 11:56
rtcwake
34.38
KB
-rwxr-xr-x
2024-04-09 15:32
rtmon
90.39
KB
-rwxr-xr-x
2022-03-24 11:56
runlevel
1.06
MB
-rwxr-xr-x
2023-11-21 20:57
runuser
54.38
KB
-rwxr-xr-x
2024-04-09 15:32
service
8.88
KB
-rwxr-xr-x
2022-02-15 22:32
setcap
14.3
KB
-rwxr-xr-x
2025-02-20 15:51
setvesablank
14.23
KB
-rwxr-xr-x
2022-12-16 14:14
setvtrgb
14.29
KB
-rwxr-xr-x
2022-12-16 14:14
sfdisk
102.38
KB
-rwxr-xr-x
2024-04-09 15:32
sgdisk
162.48
KB
-rwxr-xr-x
2022-03-23 13:53
shadowconfig
885
B
-rwxr-xr-x
2021-11-11 15:42
shutdown
1.06
MB
-rwxr-xr-x
2023-11-21 20:57
slattach
36.08
KB
-rwxr-xr-x
2022-03-24 16:20
split-logfile
2.36
KB
-rwxr-xr-x
2025-04-03 09:05
sshd
899.7
KB
-rwxr-xr-x
2025-04-11 12:05
start-stop-daemon
47.35
KB
-rwxr-xr-x
2024-02-23 14:53
sudo_logsrvd
200.1
KB
-rwxr-xr-x
2023-04-03 18:00
sudo_sendlog
107.34
KB
-rwxr-xr-x
2023-04-03 18:00
sulogin
42.38
KB
-rwxr-xr-x
2024-04-09 15:32
swaplabel
18.38
KB
-rwxr-xr-x
2024-04-09 15:32
swapoff
22.38
KB
-rwxr-xr-x
2024-04-09 15:32
swapon
42.38
KB
-rwxr-xr-x
2024-04-09 15:32
switch_root
22.38
KB
-rwxr-xr-x
2024-04-09 15:32
sysctl
30.23
KB
-rwxr-xr-x
2023-10-31 11:36
tarcat
936
B
-rwxr-xr-x
2023-12-05 05:15
tc
614.08
KB
-rwxr-xr-x
2022-03-24 11:56
telinit
1.06
MB
-rwxr-xr-x
2023-11-21 20:57
thermald
554.6
KB
-rwxr-xr-x
2023-08-10 07:36
thin_check
1.33
MB
-rwxr-xr-x
2022-03-18 12:36
thin_delta
1.33
MB
-rwxr-xr-x
2022-03-18 12:36
thin_dump
1.33
MB
-rwxr-xr-x
2022-03-18 12:36
thin_ls
1.33
MB
-rwxr-xr-x
2022-03-18 12:36
thin_metadata_size
1.33
MB
-rwxr-xr-x
2022-03-18 12:36
thin_repair
1.33
MB
-rwxr-xr-x
2022-03-18 12:36
thin_restore
1.33
MB
-rwxr-xr-x
2022-03-18 12:36
thin_rmap
1.33
MB
-rwxr-xr-x
2022-03-18 12:36
thin_trim
1.33
MB
-rwxr-xr-x
2022-03-18 12:36
tipc
90.44
KB
-rwxr-xr-x
2022-03-24 11:56
tune2fs
102.55
KB
-rwxr-xr-x
2023-10-09 01:50
tzconfig
106
B
-rwxr-xr-x
2025-03-26 17:32
u-d-c-print-pci-ids
517
B
-rwxr-xr-x
2024-07-05 08:55
ufw
4.82
KB
-rwxr-xr-x
2023-07-17 13:55
umount.udisks2
14.3
KB
-rwxr-xr-x
2022-04-07 21:17
unix_chkpwd
26.15
KB
-rwxr-sr-x
2024-01-10 13:54
unix_update
30.15
KB
-rwxr-xr-x
2024-01-10 13:54
update-ca-certificates
5.29
KB
-rwxr-xr-x
2024-09-24 17:46
update-grub
64
B
-rwxr-xr-x
2022-12-02 15:18
update-grub2
64
B
-rwxr-xr-x
2022-12-02 15:18
update-info-dir
1.66
KB
-rwxr-xr-x
2022-02-06 12:48
update-initramfs
6.74
KB
-rwxr-xr-x
2023-07-25 09:54
update-locale
2.99
KB
-rwxr-xr-x
2023-06-16 10:22
update-mime
9.39
KB
-rwxr-xr-x
2021-12-10 23:14
update-passwd
34.56
KB
-rwxr-xr-x
2022-03-23 09:42
update-pciids
1.71
KB
-rwxr-xr-x
2021-08-30 02:45
update-rc.d
16.92
KB
-rwxr-xr-x
2021-12-07 21:55
update-secureboot-policy
7.43
KB
-rwxr-xr-x
2024-01-24 09:14
update-shells
3.72
KB
-rwxr-xr-x
2022-03-23 13:49
usb_modeswitch
59.66
KB
-rwxr-xr-x
2022-03-25 09:53
usb_modeswitch_dispatcher
26.78
KB
-rwxr-xr-x
2022-03-25 09:53
usbmuxd
86.6
KB
-rwxr-xr-x
2022-03-25 09:53
useradd
127.66
KB
-rwxr-xr-x
2024-02-06 12:54
userdel
86.85
KB
-rwxr-xr-x
2024-02-06 12:54
usermod
123.46
KB
-rwxr-xr-x
2024-02-06 12:54
uuidd
30.85
KB
-rwxr-xr-x
2024-04-09 15:32
validlocale
1.73
KB
-rwxr-xr-x
2022-08-02 15:34
vcstime
14.15
KB
-rwxr-xr-x
2022-12-16 14:14
vdpa
30.56
KB
-rwxr-xr-x
2022-03-24 11:56
veritysetup
43.76
KB
-rwxr-xr-x
2023-08-22 17:16
vgcfgbackup
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
vgcfgrestore
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
vgchange
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
vgck
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
vgconvert
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
vgcreate
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
vgdisplay
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
vgexport
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
vgextend
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
vgimport
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
vgimportclone
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
vgmerge
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
vgmknodes
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
vgreduce
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
vgremove
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
vgrename
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
vgs
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
vgscan
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
vgsplit
2.89
MB
-rwxr-xr-x
2022-02-16 17:06
vigr
56.53
KB
-rwxr-xr-x
2024-02-06 12:54
vipw
56.53
KB
-rwxr-xr-x
2024-02-06 12:54
visudo
219.79
KB
-rwxr-xr-x
2023-04-03 18:00
vpddecode
14.58
KB
-rwxr-xr-x
2022-08-23 23:52
vsftpd
156.48
KB
-rwxr-xr-x
2024-07-16 07:52
wipefs
38.38
KB
-rwxr-xr-x
2024-04-09 15:32
wpa_action
1.69
KB
-rwxr-xr-x
2022-04-04 13:04
wpa_cli
140.31
KB
-rwxr-xr-x
2025-02-24 19:39
wpa_supplicant
3.24
MB
-rwxr-xr-x
2025-02-24 19:39
xfs_admin
1.37
KB
-rwxr-xr-x
2022-02-09 04:42
xfs_bmap
695
B
-rwxr-xr-x
2022-02-09 04:42
xfs_copy
82.47
KB
-rwxr-xr-x
2022-02-09 04:42
xfs_db
652.42
KB
-rwxr-xr-x
2022-02-09 04:42
xfs_estimate
14.16
KB
-rwxr-xr-x
2022-02-09 04:42
xfs_freeze
800
B
-rwxr-xr-x
2022-02-09 04:42
xfs_fsr
42.17
KB
-rwxr-xr-x
2022-02-09 04:42
xfs_growfs
38.27
KB
-rwxr-xr-x
2022-02-09 04:42
xfs_info
1.26
KB
-rwxr-xr-x
2022-02-09 04:42
xfs_io
199.55
KB
-rwxr-xr-x
2022-02-09 04:42
xfs_logprint
78.32
KB
-rwxr-xr-x
2022-02-09 04:42
xfs_mdrestore
26.16
KB
-rwxr-xr-x
2022-02-09 04:42
xfs_metadump
782
B
-rwxr-xr-x
2022-02-09 04:42
xfs_mkfile
1.02
KB
-rwxr-xr-x
2022-02-09 04:42
xfs_ncheck
685
B
-rwxr-xr-x
2022-02-09 04:42
xfs_quota
90.16
KB
-rwxr-xr-x
2022-02-09 04:42
xfs_repair
599.37
KB
-rwxr-xr-x
2022-02-09 04:42
xfs_rtcp
18.14
KB
-rwxr-xr-x
2022-02-09 04:42
xfs_scrub
106.25
KB
-rwxr-xr-x
2022-02-09 04:42
xfs_scrub_all
5.87
KB
-rwxr-xr-x
2022-02-09 04:42
xfs_spaceman
42.29
KB
-rwxr-xr-x
2022-02-09 04:42
xtables-legacy-multi
96.95
KB
-rwxr-xr-x
2024-01-16 21:14
xtables-monitor
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
xtables-nft-multi
219.04
KB
-rwxr-xr-x
2024-01-16 21:14
zerofree
14.15
KB
-rwxr-xr-x
2022-03-25 09:54
zic
62.32
KB
-rwxr-xr-x
2025-01-28 20:25
zramctl
54.52
KB
-rwxr-xr-x
2024-04-09 15:32
Save
Rename
#!/usr/bin/perl -w # # a2enmod by Stefan Fritsch <sf@debian.org> # Licensed under Apache License 2.0 # # The coding style is "perltidy -pbp" use strict; use Cwd 'realpath'; use File::Spec; use File::Basename; use File::Path; use Getopt::Long; use 5.014; no if $] >= 5.017011, warnings => 'experimental::smartmatch'; my $quiet; my $force; my $maintmode; my $purge; Getopt::Long::Configure('bundling'); GetOptions( 'quiet|q' => \$quiet, 'force|f' => \$force, 'maintmode|m' => \$maintmode, 'purge|p' => \$purge ) or exit 2; my $basename = basename($0); $basename =~ /^a2(en|dis)(mod|site|conf)((?:-.+)?)$/ or die "$basename call name unknown\n"; my $act = $1; my $obj = $2; my $dir_suffix = $3; my @essential_module_list = qw(alias auth_basic authn_file authz_host authz_user autoindex deflate dir env filter logio mime negotiation setenvif unixd version watchdog); my $env_file = $ENV{APACHE_ENVVARS}; if (! $env_file) { if ($ENV{APACHE_CONFDIR}) { $env_file = "$ENV{APACHE_CONFDIR}/envvars"; } else { $env_file = "/etc/apache2$dir_suffix/envvars"; } } $ENV{LANG} = 'C'; read_env_file($env_file); $act .= 'able'; my ( $name, $dir, $sffx, $reload ); if ( $obj eq 'mod' ) { $obj = 'module'; $dir = 'mods'; $sffx = '.load'; $reload = 'restart'; } elsif ( $obj eq 'conf' ) { $obj = 'conf'; $dir = 'conf'; $sffx = '.conf'; $reload = 'reload'; } else { $dir = 'sites'; $sffx = '.conf'; $reload = 'reload'; } $name = ucfirst($obj); my $confdir = $ENV{APACHE_CONFDIR} || "/etc/apache2$dir_suffix"; my $availdir = $ENV{ uc("APACHE_${dir}_AVAILABLE") } || "$confdir/$dir-available"; my $enabldir = $ENV{ uc("APACHE_${dir}_ENABLED") } || "$confdir/$dir-enabled"; my $statedir = $ENV{ uc("APACHE_STATE_DIRECTORY") } || "/var/lib/apache2"; $statedir .= "/$obj"; my $choicedir = $act eq 'enable' ? $availdir : $enabldir; my $linkdir = File::Spec->abs2rel( $availdir, $enabldir ); my $request_reload = 0; my $request_htcacheclean; my $htc = "apache-htcacheclean$dir_suffix"; my $htc_service = "apache-htcacheclean"; # Service name for systemd my $apache_service = "apache2"; if (defined($dir_suffix) and $dir_suffix ne '') { # Uses '@instance.service' suffix instead of '-instance' suffix my $service_suffix = '@' . substr($dir_suffix, 1) . '.service'; $htc_service .= $service_suffix; $apache_service .= $service_suffix; } my $rc = 0; if ( !scalar @ARGV ) { my @choices = myglob('*'); print "Your choices are: @choices\n"; print "Which ${obj}(s) do you want to $act (wildcards ok)?\n"; my $input = <>; @ARGV = split /\s+/, $input; } my @objs; foreach my $arg (@ARGV) { $arg =~ s/${sffx}$//; my @glob = myglob($arg); if ( !@glob ) { error("No $obj found matching $arg!\n"); $rc = 1; } else { push @objs, @glob; } } foreach my $acton (@objs) { doit($acton) or $rc = 1; } my $htcstart = ""; my $apache_reload = ""; my $cmd = ($act eq "enable") ? "start" : "stop"; if (is_systemd()) { $htcstart = " systemctl $cmd $htc_service\n"; $apache_reload = " systemctl $reload $apache_service\n"; } else { $htcstart = " service $htc $cmd\n"; $apache_reload = " service apache2$dir_suffix $reload\n"; } info( "To activate the new configuration, you need to run:\n" . $apache_reload . ($request_htcacheclean ? $htcstart : "") ) if $request_reload; exit($rc); ############################################################################## sub myglob { my $arg = shift; my @glob = map { s{^$choicedir/}{}; s{$sffx$}{}; $_ } glob("$choicedir/$arg$sffx"); return @glob; } sub doit { my $acton = shift; my ( $conftgt, $conflink ); if ( $obj eq 'module' ) { if ( $act eq 'enable' && $acton eq 'cgi' && threaded() ) { print "Your MPM seems to be threaded. Selecting cgid instead of cgi.\n"; $acton = 'cgid'; } $conftgt = "$availdir/$acton.conf"; if ( -e $conftgt ) { $conflink = "$enabldir/$acton.conf"; } } my $tgt = "$availdir/$acton$sffx"; my $link = "$enabldir/$acton$sffx"; if ( !-e $tgt ) { if ( -l $link && !-e $link ) { if ( $act eq 'disable' ) { info("removing dangling symlink $link\n"); unlink($link); # force a .conf path. It may exist as dangling link, too $conflink = "$enabldir/$acton.conf"; if ( -l $conflink && !-e $conflink ) { info("removing dangling symlink $conflink\n"); unlink($conflink); } return 1; } else { error("$link is a dangling symlink!\n"); } } if ( $purge ) { switch_marker( $obj, $act, $acton ); # exit silently, we are purging anyway return 1; } error("$name $acton does not exist!\n"); return 0; } # handle module dependencies if ( $obj eq 'module' ) { if ( $act eq 'enable' ) { my @depends = get_deps("$availdir/$acton.load"); do_deps( $acton, @depends ) or return 0; my @conflicts = get_deps( "$availdir/$acton.load", "Conflicts" ); check_conflicts( $acton, @conflicts ) or return 0; } else { my @depending; foreach my $d ( glob("$enabldir/*.load") ) { my @deps = get_deps($d); if ( is_in( $acton, @deps ) ) { $d =~ m,/([^/]+).load$,; push @depending, $1; } } if ( scalar @depending ) { if ($force) { do_deps( $acton, @depending ) or return 0; } else { error( "The following modules depend on $acton ", "and need to be disabled first: @depending\n" ); return 0; } } } } elsif ( $act eq 'enable' ) { my @depends = get_deps("$availdir/$acton$sffx"); warn_deps( $acton, @depends ) or return 0; } if ( $act eq 'enable' ) { my $check = check_link( $tgt, $link ); if ( $check eq 'ok' ) { if ($conflink) { # handle .conf file my $confcheck = check_link( $conftgt, $conflink ); if ( $confcheck eq 'ok' ) { info("$name $acton already enabled\n"); return 1; } elsif ( $confcheck eq 'missing' ) { print "Enabling config file $acton.conf.\n"; add_link( $conftgt, $conflink ) or return 0; } else { error( "Config file $acton.conf not properly enabled: $confcheck\n" ); return 0; } } else { info("$name $acton already enabled\n"); return 1; } } elsif ( $check eq 'missing' ) { if ($conflink) { # handle .conf file my $confcheck = check_link( $conftgt, $conflink ); if ( $confcheck eq 'missing' ) { add_link( $conftgt, $conflink ) or return 0; } elsif ( $confcheck ne 'ok' ) { error( "Config file $acton.conf not properly enabled: $confcheck\n" ); return 0; } } print "Enabling $obj $acton.\n"; special_module_handling($acton); return add_link( $tgt, $link ) && switch_marker( $obj, $act, $acton ); } else { error("$name $acton not properly enabled: $check\n"); return 0; } } else { if ( -e $link || -l $link ) { special_module_handling($acton); if ($obj eq 'module' && grep {$_ eq $acton} @essential_module_list) { $force || essential_module_handling($acton); } remove_link($link); if ( $conflink && -e $conflink ) { remove_link($conflink); } switch_marker( $obj, $act, $acton ); print "$name $acton disabled.\n"; } elsif ( $conflink && -e $conflink ) { print "Disabling stale config file $acton.conf.\n"; remove_link($conflink); } else { info("$name $acton already disabled\n"); if ( $purge ) { switch_marker( $obj, $act, $acton ); } return 1; } } return 1; } sub get_deps { my $file = shift; my $type = shift || "Depends"; my $fd; if ( !open( $fd, '<', $file ) ) { error("Can't open $file: $!"); return; } my $line; while ( defined( $line = <$fd> ) ) { chomp $line; if ( $line =~ /^# $type:\s+(.*?)\s*$/ ) { my $deps = $1; return split( /[\n\s]+/, $deps ); } # only check until the first non-empty non-comment line last if ( $line !~ /^\s*(?:#.*)?$/ ); } return; } sub do_deps { my $acton = shift; foreach my $d (@_) { info("Considering dependency $d for $acton:\n"); if ( !doit($d) ) { error("Could not $act dependency $d for $acton, aborting\n"); return 0; } } return 1; } sub warn_deps { my $acton = shift; my $modsenabldir = $ENV{APACHE_MODS_ENABLED} || "$confdir/mods-enabled"; foreach my $d (@_) { info("Checking dependency $d for $acton:\n"); if ( !-e "$modsenabldir/$d.load" ) { warning( "Module $d is not enabled, but $acton depends on it, aborting\n" ); return 0; } } return 1; } sub check_conflicts { my $acton = shift; my $haderror = 0; foreach my $d (@_) { info("Considering conflict $d for $acton:\n"); my $tgt = "$availdir/$d$sffx"; my $link = "$enabldir/$d$sffx"; my $confcheck = check_link( $tgt, $link ); if ( $confcheck eq 'ok' ) { error( "Module $d is enabled - cannot proceed due to conflicts. It needs to be disabled first!\n" ); # Don't return immediately, there could be several conflicts $haderror++; } } if ($haderror) { return 0; } return 1; } sub add_link { my ( $tgt, $link ) = @_; # create relative link if ( !symlink( File::Spec->abs2rel( $tgt, dirname($link) ), $link ) ) { die("Could not create $link: $!\n"); } $request_reload = 1; return 1; } sub check_link { my ( $tgt, $link ) = @_; if ( !-e $link ) { if ( -l $link ) { # points to nowhere info("Removing dangling link $link"); unlink($link) or die "Could not remove $link\n"; } return 'missing'; } if ( -e $link && !-l $link ) { return "$link is a real file, not touching it"; } if ( realpath($link) ne realpath($tgt) ) { return "$link exists but does not point to $tgt, not touching it"; } return 'ok'; } sub remove_link { my ($link) = @_; if ( -l $link ) { unlink($link) or die "Could not remove $link: $!\n"; } elsif ( -e $link ) { error("$link is not a symbolic link, not deleting\n"); return 0; } $request_reload = 1; return 1; } sub threaded { my $result = ""; $result = qx{/usr/sbin/apache2ctl -V | grep 'threaded'} if -x '/usr/sbin/apache2ctl'; if ( $? != 0 ) { # config doesn't work if ( -e "$enabldir/mpm_prefork.load" ) { return 0; } elsif (-e "$enabldir/mpm_worker.load" || -e "$enabldir/mpm_event.load" ) { return 1; } else { error("Can't determine enabled MPM"); # do what user requested return 0; } } if ( $result =~ / no/ ) { return 0; } elsif ( $result =~ / yes/ ) { return 1; } else { die("Can't parse output from apache2ctl -V:\n$result\n"); } } sub info { print @_ if !$quiet; } sub error { print STDERR 'ERROR: ', @_; } sub warning { print STDERR 'WARNING: ', @_; } sub is_in { my $needle = shift; foreach my $e (@_) { return 1 if $needle eq $e; } return 0; } sub read_env_file { my $file = shift; -r $file or return; my @lines = qx{env - sh -c '. $file && env'}; if ($?) { die "Could not read $file\n"; } foreach my $l (@lines) { chomp $l; $l =~ /^(.*)?=(.*)$/ or die "Could not parse $file\n"; $ENV{$1} = $2; } } sub switch_marker { die('usage: switch_marker([module|site|conf], [enable|disable], $name)') if @_ != 3; my $which = shift; my $what = shift; my $name = shift; my $mode = "admin"; $mode = "maint" if $maintmode; #print("switch_marker $which $what $name\n"); # TODO: get rid of the magic string(s) my $state_marker_dir = "$statedir/$what" . "d" . "_by_$mode"; my $state_marker = "$state_marker_dir/$name"; if ( !-d $state_marker_dir ) { File::Path::mkpath("$state_marker_dir") || error( "Failed to create marker directory: '$state_marker_dir'\n"); } # XXX: swap find with perl alternative my @markers = qx{find "$statedir" -type f -a -name "$name"}; chomp(@markers); foreach (@markers) { unless ( unlink $_ ) { error("Failed to remove old marker '$_'!\n") && return 0; } } unless ($purge) { qx{touch "$state_marker"}; if ( $? != 0 ) { error("Failed to create marker '$state_marker'!\n") && return 0; } return 1; } } sub essential_module_handling { my $module = shift; print "WARNING: The following essential module will be disabled.\n"; print "This might result in unexpected behavior and should NOT be done\n"; print "unless you know exactly what you are doing!\n $module\n\n"; print "To continue type in the phrase 'Yes, do as I say!' or retry by passing '-f': "; my $input = <STDIN>; chomp($input); if ($input ne 'Yes, do as I say!') { print("Aborting\n"); exit(1) } } sub special_module_handling { my $acton = shift; if ($obj ne 'module') { return; } given ($acton) { when ('ssl') { if ( $act eq 'enable' ) { info( "See /usr/share/doc/apache2/README.Debian.gz on " . "how to configure SSL and create self-signed " . "certificates.\n" ); } } when ('cache_disk') { $request_htcacheclean = 1; my $verb = "\u$act"; my $command; $verb =~ s/e$/ing/; if (-d "/run/systemd" and -x "/bin/systemctl") { info("$verb external service $htc_service\n"); $command = "systemctl $act $htc_service"; } else { info("$verb external service $htc\n"); $command = "update-rc.d $htc $act"; } my $res = system($command); if ($res == 0) { info("The service will be started on next reboot.\n") if $act eq 'enable'; } else { warning("'$command' failed\n"); } } } } sub is_systemd { my $init = readlink("/proc/1/exe") || ""; return scalar $init =~ /systemd/; } # vim: syntax=perl sw=4 sts=4 sr et