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 /
bin /
Delete
Unzip
Name
Size
Permission
Date
Action
2to3
106
B
-rwxr-xr-x
2025-08-26 09:08
2to3-3.6
106
B
-rwxr-xr-x
2025-08-26 09:08
GET
15.84
KB
-rwxr-xr-x
2022-04-22 20:13
HEAD
15.84
KB
-rwxr-xr-x
2022-04-22 20:13
Mail
408.89
KB
-rwxr-xr-x
2019-10-13 00:19
POST
15.84
KB
-rwxr-xr-x
2022-04-22 20:13
[
53.67
KB
-rwxr-xr-x
2023-04-01 08:44
ab
72.63
KB
-rwxr-xr-x
2025-10-15 20:39
aclocal
35.62
KB
-rwxr-xr-x
2023-10-14 20:00
aclocal-1.16
35.62
KB
-rwxr-xr-x
2023-10-14 20:00
acyclic
12.41
KB
-rwxr-xr-x
2024-04-06 12:47
addr2line
33.41
KB
-rwxr-xr-x
2025-10-07 06:44
agentxtrap
24.54
KB
-rwxr-xr-x
2025-10-07 09:19
alias
29
B
-rwxr-xr-x
2025-08-26 08:48
animate
11.84
KB
-rwxr-xr-x
2025-04-01 13:15
appstream-compose
33.21
KB
-rwxr-xr-x
2019-11-13 14:06
appstream-util
114.34
KB
-rwxr-xr-x
2019-11-13 14:06
apropos
54.04
KB
-rwxr-xr-x
2021-10-08 13:04
ar
61.97
KB
-rwxr-xr-x
2025-10-07 06:44
arch
37.41
KB
-rwxr-xr-x
2023-04-01 08:44
arpaname
11.82
KB
-rwxr-xr-x
2025-02-20 09:05
as
889.91
KB
-rwxr-xr-x
2025-10-07 06:44
aspell
159.5
KB
-rwxr-xr-x
2022-04-18 15:10
at
57.33
KB
-rwxr-xr-x
2022-10-10 10:23
atq
57.33
KB
-rwxr-xr-x
2022-10-10 10:23
atrm
57.33
KB
-rwxr-xr-x
2022-10-10 10:23
audit2allow
14.85
KB
-rwxr-xr-x
2024-07-02 21:08
audit2why
14.85
KB
-rwxr-xr-x
2024-07-02 21:08
aulast
20.58
KB
-rwxr-xr-x
2025-07-15 09:41
aulastlog
12.44
KB
-rwxr-xr-x
2025-07-15 09:41
ausyscall
12.27
KB
-rwxr-xr-x
2025-07-15 09:41
authselect
41.13
KB
-rwxr-xr-x
2023-10-14 18:06
autoconf
14.42
KB
-rwxr-xr-x
2024-08-13 19:30
autoheader
8.33
KB
-rwxr-xr-x
2024-08-13 19:30
autom4te
31.43
KB
-rwxr-xr-x
2024-08-13 19:30
automake
251.9
KB
-rwxr-xr-x
2023-10-14 20:00
automake-1.16
251.9
KB
-rwxr-xr-x
2023-10-14 20:00
autopoint
25.95
KB
-rwxr-xr-x
2019-11-18 17:16
autoreconf
20.57
KB
-rwxr-xr-x
2024-08-13 19:30
autoscan
16.72
KB
-rwxr-xr-x
2024-08-13 19:30
autoupdate
33.08
KB
-rwxr-xr-x
2024-08-13 19:30
auvirt
32.73
KB
-rwxr-xr-x
2025-07-15 09:41
awk
669.77
KB
-rwxr-xr-x
2022-04-18 15:56
b2sum
57.76
KB
-rwxr-xr-x
2023-04-01 08:44
base32
41.55
KB
-rwxr-xr-x
2023-04-01 08:44
base64
41.56
KB
-rwxr-xr-x
2023-04-01 08:44
basename
37.49
KB
-rwxr-xr-x
2023-04-01 08:44
bash
1.1
MB
-rwxr-xr-x
2025-08-26 08:48
bashbug
7.18
KB
-rwxr-xr-x
2025-08-26 08:48
bashbug-64
7.18
KB
-rwxr-xr-x
2025-08-26 08:48
batch
137
B
-rwxr-xr-x
2022-10-10 10:23
bc
94.98
KB
-rwxr-xr-x
2019-10-12 12:34
bcomps
20.62
KB
-rwxr-xr-x
2024-04-06 12:47
bdftopcf
45.4
KB
-rwxr-xr-x
2021-10-09 23:42
bg
26
B
-rwxr-xr-x
2025-08-26 08:48
bind9-config
3.33
KB
-rwxr-xr-x
2025-02-20 09:05
bison
437.72
KB
-rwxr-xr-x
2019-10-12 12:28
bond2team
22.74
KB
-rwxr-xr-x
2020-07-26 09:58
bootctl
45.15
KB
-rwxr-xr-x
2025-04-22 01:58
brotli
739.2
KB
-rwxr-xr-x
2021-04-08 09:00
bunzip2
36.86
KB
-rwxr-xr-x
2025-01-28 01:38
busctl
77.26
KB
-rwxr-xr-x
2025-04-22 01:58
bzcat
36.86
KB
-rwxr-xr-x
2025-01-28 01:38
bzcmp
2.08
KB
-rwxr-xr-x
2025-01-28 01:38
bzdiff
2.08
KB
-rwxr-xr-x
2025-01-28 01:38
bzegrep
1.64
KB
-rwxr-xr-x
2025-01-28 01:38
bzfgrep
1.64
KB
-rwxr-xr-x
2025-01-28 01:38
bzgrep
1.64
KB
-rwxr-xr-x
2025-01-28 01:38
bzip2
36.86
KB
-rwxr-xr-x
2025-01-28 01:38
bzip2recover
16.44
KB
-rwxr-xr-x
2025-01-28 01:38
bzless
1.23
KB
-rwxr-xr-x
2025-01-28 01:38
bzmore
1.23
KB
-rwxr-xr-x
2025-01-28 01:38
c++
1.21
MB
-rwxr-xr-x
2025-08-26 09:47
c++filt
28.89
KB
-rwxr-xr-x
2025-10-07 06:44
c89
224
B
-rwxr-xr-x
2025-08-26 09:45
c99
215
B
-rwxr-xr-x
2025-08-26 09:45
ca-legacy
1.61
KB
-rwxr-xr-x
2024-08-21 19:16
cairo-sphinx
69.71
KB
-rwxr-xr-x
2022-04-18 16:06
cal
65.98
KB
-rwxr-xr-x
2024-04-06 13:02
captoinfo
85.31
KB
-rwxr-xr-x
2023-10-14 18:54
cat
37.54
KB
-rwxr-xr-x
2023-04-01 08:44
catchsegv
3.21
KB
-rwxr-xr-x
2025-08-05 14:01
catman
41.45
KB
-rwxr-xr-x
2021-10-08 13:04
cc
1.21
MB
-rwxr-xr-x
2025-08-26 09:47
ccomps
24.72
KB
-rwxr-xr-x
2024-04-06 12:47
cd
26
B
-rwxr-xr-x
2025-08-26 08:48
centrino-decode
11.27
KB
-rwxr-xr-x
2025-10-27 15:46
certutil
199.15
KB
-rwxr-xr-x
2025-09-09 13:57
chacl
16.36
KB
-rwxr-xr-x
2024-04-06 12:15
chage
77.68
KB
-rwxr-xr-x
2024-04-06 14:00
chardetect
400
B
-rwxr-xr-x
2019-10-12 19:18
chattr
16.41
KB
-rwxr-xr-x
2025-10-07 07:08
chcat
13.57
KB
-rwxr-xr-x
2024-07-02 21:08
chcon
70.43
KB
-rwxr-xr-x
2023-04-01 08:44
checkmodule
427.01
KB
-rwxr-xr-x
2019-12-10 17:48
checkpolicy
488.64
KB
-rwxr-xr-x
2019-12-10 17:48
chfn
32.89
KB
-rwx--x--x
2024-04-06 13:02
chgrp
66.35
KB
-rwxr-xr-x
2023-04-01 08:44
chmem
45.47
KB
-rwxr-xr-x
2024-04-06 13:02
chmod
62.29
KB
-rwxr-xr-x
2023-04-01 08:44
chown
70.39
KB
-rwxr-xr-x
2023-04-01 08:44
chronyc
127.6
KB
-rwxr-xr-x
2024-11-05 07:47
chrt
37.18
KB
-rwxr-xr-x
2024-04-06 13:02
chsh
24.71
KB
-rwx--x--x
2024-04-06 13:02
chvt
12.53
KB
-rwxr-xr-x
2023-10-14 21:01
cifsiostat
41.35
KB
-rwxr-xr-x
2024-07-03 09:57
circo
12.26
KB
-rwxr-xr-x
2024-04-06 12:47
cksum
37.46
KB
-rwxr-xr-x
2023-04-01 08:44
cl-linksafe-reconfigure
4.83
KB
-rwxr-xr-x
2021-07-04 21:39
clear
12.54
KB
-rwxr-xr-x
2023-10-14 18:54
cloud-id
402
B
-rwxr-xr-x
2025-07-17 07:36
cloud-init
406
B
-rwxr-xr-x
2025-07-17 07:36
cloud-init-per
2.06
KB
-rwxr-xr-x
2025-07-17 07:36
cluster
518.33
KB
-rwxr-xr-x
2024-04-06 12:47
cmp
103.76
KB
-rwxr-xr-x
2020-05-04 15:15
cmsutil
122.48
KB
-rwxr-xr-x
2025-09-09 13:57
cockpit-bridge
500.4
KB
-rwxr-xr-x
2025-07-15 09:26
col
29
KB
-rwxr-xr-x
2024-04-06 13:02
colcrt
16.48
KB
-rwxr-xr-x
2024-04-06 13:02
colrm
24.88
KB
-rwxr-xr-x
2024-04-06 13:02
column
49.47
KB
-rwxr-xr-x
2024-04-06 13:02
comm
41.63
KB
-rwxr-xr-x
2023-04-01 08:44
command
31
B
-rwxr-xr-x
2025-08-26 08:48
compare
11.85
KB
-rwxr-xr-x
2025-04-01 13:15
compile_et
1.31
KB
-rwxr-xr-x
2025-10-07 07:07
composite
11.84
KB
-rwxr-xr-x
2025-04-01 13:15
config_data
6.97
KB
-rwxr-xr-x
2019-10-13 10:59
conjure
11.84
KB
-rwxr-xr-x
2025-04-01 13:15
convert
11.84
KB
-rwxr-xr-x
2025-04-01 13:15
coredumpctl
44.91
KB
-rwxr-xr-x
2025-04-22 01:58
corelist
14.64
KB
-rwxr-xr-x
2019-10-13 11:00
cp
148.05
KB
-rwxr-xr-x
2023-04-01 08:44
cpan
8.17
KB
-rwxr-xr-x
2025-06-03 14:32
cpan-mirrors
4.19
KB
-rwxr-xr-x
2025-06-03 14:32
cpapi1
3.18
MB
-rwxr-xr-x
2025-10-16 18:06
cpapi2
3.18
MB
-rwxr-xr-x
2025-10-16 18:06
cpapi3
3.18
MB
-rwxr-xr-x
2025-10-16 18:06
cpio
159.8
KB
-rwxr-xr-x
2022-04-18 17:19
cpp
1.21
MB
-rwxr-xr-x
2025-08-26 09:47
cpupower
66.91
KB
-rwxr-xr-x
2025-10-27 15:43
crb
2.58
KB
-rwxr--r--
2025-04-22 17:22
crc32
1.02
KB
-rwxr-xr-x
2019-11-12 18:41
crlutil
134.95
KB
-rwxr-xr-x
2025-09-09 13:57
cronnext
49.8
KB
-rwxr-xr-x
2024-04-06 11:40
crontab
61.67
KB
-rwsr-xr-x
2024-04-06 11:40
csplit
53.76
KB
-rwxr-xr-x
2023-04-01 08:44
csslint-0.6
24.56
KB
-rwxr-xr-x
2020-09-22 21:07
curl
230.08
KB
-rwxr-xr-x
2025-10-07 06:37
cut
49.59
KB
-rwxr-xr-x
2023-04-01 08:44
cvtsudoers
284.21
KB
-rwxr-xr-x
2025-08-26 09:02
cxpm
29.11
KB
-rwxr-xr-x
2024-03-30 13:53
date
106.03
KB
-rwxr-xr-x
2023-04-01 08:44
db_archive
12.45
KB
-rwxr-xr-x
2021-09-21 16:38
db_checkpoint
16.48
KB
-rwxr-xr-x
2021-09-21 16:38
db_deadlock
16.48
KB
-rwxr-xr-x
2021-09-21 16:38
db_dump
16.51
KB
-rwxr-xr-x
2021-09-21 16:38
db_dump185
69.55
KB
-rwxr-xr-x
2021-09-21 16:38
db_hotbackup
20.49
KB
-rwxr-xr-x
2021-09-21 16:38
db_load
28.61
KB
-rwxr-xr-x
2021-09-21 16:38
db_log_verify
16.52
KB
-rwxr-xr-x
2021-09-21 16:38
db_printlog
33.4
KB
-rwxr-xr-x
2021-09-21 16:38
db_recover
16.51
KB
-rwxr-xr-x
2021-09-21 16:38
db_replicate
16.49
KB
-rwxr-xr-x
2021-09-21 16:38
db_stat
16.48
KB
-rwxr-xr-x
2021-09-21 16:38
db_tuner
24.55
KB
-rwxr-xr-x
2021-09-21 16:38
db_upgrade
12.45
KB
-rwxr-xr-x
2021-09-21 16:38
db_verify
16.46
KB
-rwxr-xr-x
2021-09-21 16:38
dbus-binding-tool
110.43
KB
-rwxr-xr-x
2019-10-25 12:53
dbus-cleanup-sockets
16.39
KB
-rwxr-xr-x
2025-08-26 11:23
dbus-daemon
239.72
KB
-rwxr-xr-x
2025-08-26 11:23
dbus-monitor
28.58
KB
-rwxr-xr-x
2025-08-26 11:23
dbus-run-session
15.88
KB
-rwxr-xr-x
2025-08-26 11:23
dbus-send
28.54
KB
-rwxr-xr-x
2025-08-26 11:23
dbus-test-tool
24.6
KB
-rwxr-xr-x
2025-08-26 11:23
dbus-update-activation-environment
16.41
KB
-rwxr-xr-x
2025-08-26 11:23
dbus-uuidgen
12.38
KB
-rwxr-xr-x
2025-08-26 11:23
dc
53.02
KB
-rwxr-xr-x
2019-10-12 12:34
dd
78.05
KB
-rwxr-xr-x
2023-04-01 08:44
deallocvt
12.54
KB
-rwxr-xr-x
2023-10-14 21:01
debuginfo-install
3.62
KB
-rwxr-xr-x
2024-04-08 10:02
debuginfod-find
16.47
KB
-rwxr-xr-x
2025-08-25 12:56
delv
42.46
KB
-rwxr-xr-x
2025-02-20 09:05
df
91.16
KB
-rwxr-xr-x
2023-04-01 08:44
diff
268.01
KB
-rwxr-xr-x
2020-05-04 15:15
diff3
128.6
KB
-rwxr-xr-x
2020-05-04 15:15
diffimg
12.27
KB
-rwxr-xr-x
2024-04-06 12:47
dig
162.19
KB
-rwxr-xr-x
2025-02-20 09:05
dijkstra
16.71
KB
-rwxr-xr-x
2024-04-06 12:47
dir
139.97
KB
-rwxr-xr-x
2023-04-01 08:44
dircolors
49.63
KB
-rwxr-xr-x
2023-04-01 08:44
dirmngr
580.16
KB
-rwxr-xr-x
2022-09-13 10:15
dirmngr-client
120.12
KB
-rwxr-xr-x
2022-09-13 10:15
dirname
33.44
KB
-rwxr-xr-x
2023-04-01 08:44
display
11.84
KB
-rwxr-xr-x
2025-04-01 13:15
dltest
13.05
KB
-rwxr-xr-x
2019-10-14 21:51
dmesg
77.88
KB
-rwxr-xr-x
2024-04-06 13:02
dnf
2.05
KB
-rwxr-xr-x
2025-03-11 09:47
dnf-3
2.05
KB
-rwxr-xr-x
2025-03-11 09:47
dnsdomainname
21.16
KB
-rwxr-xr-x
2019-10-11 13:06
dnstap-read
20.43
KB
-rwxr-xr-x
2025-02-20 09:05
domainname
21.16
KB
-rwxr-xr-x
2019-10-11 13:06
dot
12.26
KB
-rwxr-xr-x
2024-04-06 12:47
dot2gxl
41.3
KB
-rwxr-xr-x
2024-04-06 12:47
dotty
2.04
KB
-rwxr-xr-x
2024-04-06 12:47
doveadm
983.31
KB
-rwxr-xr-x
2025-02-25 20:04
doveconf
228.41
KB
-rwxr-xr-x
2025-02-25 20:04
dovecot-sysreport
5.8
KB
-rwxr-xr-x
2025-02-25 20:04
dpkg
316.17
KB
-rwxr-xr-x
2021-12-15 12:46
dpkg-deb
165.5
KB
-rwxr-xr-x
2021-12-15 12:46
dpkg-divert
157.75
KB
-rwxr-xr-x
2021-12-15 12:46
dpkg-maintscript-helper
20.67
KB
-rwxr-xr-x
2021-12-15 12:46
dpkg-query
165.84
KB
-rwxr-xr-x
2021-12-15 12:46
dpkg-realpath
4.05
KB
-rwxr-xr-x
2021-12-15 12:46
dpkg-split
132.39
KB
-rwxr-xr-x
2021-12-15 12:46
dpkg-statoverride
66.41
KB
-rwxr-xr-x
2021-12-15 12:46
dpkg-trigger
87.66
KB
-rwxr-xr-x
2021-12-15 12:46
dracut
67.56
KB
-rwxr-xr-x
2025-07-15 09:09
dsync
983.31
KB
-rwxr-xr-x
2025-02-25 20:04
dtrace
17.39
KB
-rwxr-xr-x
2023-10-14 13:06
du
107.1
KB
-rwxr-xr-x
2023-04-01 08:44
dumpkeys
169.88
KB
-rwxr-xr-x
2023-10-14 21:01
dumpsexp
16.43
KB
-rwxr-xr-x
2022-06-28 11:54
dwp
2.13
MB
-rwxr-xr-x
2025-10-07 06:44
dwz
167.64
KB
-rwxr-xr-x
2021-10-09 03:26
ea-php72
6.18
MB
-rwxr-xr-x
2025-10-15 21:18
ea-php72-pear
383
B
-rwxr-xr-x
2025-10-15 21:56
ea-php72-pecl
299
B
-rwxr-xr-x
2025-10-15 21:56
ea-php73
5.32
MB
-rwxr-xr-x
2025-10-15 21:19
ea-php73-pear
383
B
-rwxr-xr-x
2025-10-15 22:00
ea-php73-pecl
299
B
-rwxr-xr-x
2025-10-15 22:00
ea-php74
6.09
MB
-rwxr-xr-x
2025-10-15 21:23
ea-php74-pear
383
B
-rwxr-xr-x
2025-10-15 21:58
ea-php74-pecl
299
B
-rwxr-xr-x
2025-10-15 21:58
ea-php80
7.61
MB
-rwxr-xr-x
2025-10-15 21:04
ea-php80-pear
383
B
-rwxr-xr-x
2025-10-15 21:19
ea-php80-pecl
299
B
-rwxr-xr-x
2025-10-15 21:19
ea-php81
7.72
MB
-rwxr-xr-x
2025-10-15 21:06
ea-php81-pear
383
B
-rwxr-xr-x
2025-10-15 21:21
ea-php81-pecl
299
B
-rwxr-xr-x
2025-10-15 21:21
ea-php82
7.77
MB
-rwxr-xr-x
2025-10-15 21:08
ea-php82-pear
383
B
-rwxr-xr-x
2025-10-15 21:24
ea-php82-pecl
299
B
-rwxr-xr-x
2025-10-15 21:24
ea-php83
7.8
MB
-rwxr-xr-x
2025-10-15 21:09
ea-php83-pear
383
B
-rwxr-xr-x
2025-10-15 21:24
ea-php83-pecl
299
B
-rwxr-xr-x
2025-10-15 21:24
easy_install-2
234
B
-rwxr-xr-x
2024-04-10 05:04
easy_install-2.7
234
B
-rwxr-xr-x
2024-04-10 05:04
easy_install-3
246
B
-rwxr-xr-x
2025-07-15 09:13
easy_install-3.6
246
B
-rwxr-xr-x
2025-07-15 09:13
echo
37.43
KB
-rwxr-xr-x
2023-04-01 08:44
edgepaint
420.79
KB
-rwxr-xr-x
2024-04-06 12:47
egrep
28
B
-rwxr-xr-x
2019-10-11 15:15
eject
57.78
KB
-rwxr-xr-x
2024-04-06 13:02
elfedit
33.29
KB
-rwxr-xr-x
2025-10-07 06:44
enc2xs
40.97
KB
-rwxr-xr-x
2019-10-13 08:46
encguess
2.91
KB
-rwxr-xr-x
2019-10-13 08:46
env
41.43
KB
-rwxr-xr-x
2023-04-01 08:44
envml
4.1
KB
-rwxr-xr-x
2023-10-14 18:46
envsubst
48.99
KB
-rwxr-xr-x
2019-11-18 17:17
eps2eps
639
B
-rwxr-xr-x
2025-06-03 02:48
eqn
232.16
KB
-rwxr-xr-x
2019-10-13 14:29
event_rpcgen.py
54.26
KB
-rwxr-xr-x
2019-10-12 00:29
evmctl
62.54
KB
-rwxr-xr-x
2021-04-08 15:44
ex
1.13
MB
-rwxr-xr-x
2025-10-12 00:23
expand
41.66
KB
-rwxr-xr-x
2023-04-01 08:44
expr
49.65
KB
-rwxr-xr-x
2023-04-01 08:44
factor
86.05
KB
-rwxr-xr-x
2023-04-01 08:44
fallocate
28.96
KB
-rwxr-xr-x
2024-04-06 13:02
false
33.39
KB
-rwxr-xr-x
2023-04-01 08:44
fc
26
B
-rwxr-xr-x
2025-08-26 08:48
fc-cache
132
B
-rwxr-xr-x
2021-08-16 11:04
fc-cache-64
20.35
KB
-rwxr-xr-x
2021-10-09 09:02
fc-cat
16.35
KB
-rwxr-xr-x
2021-10-09 09:02
fc-conflist
12.25
KB
-rwxr-xr-x
2021-10-09 09:02
fc-list
12.25
KB
-rwxr-xr-x
2021-10-09 09:02
fc-match
16.26
KB
-rwxr-xr-x
2021-10-09 09:02
fc-pattern
12.26
KB
-rwxr-xr-x
2021-10-09 09:02
fc-query
12.24
KB
-rwxr-xr-x
2021-10-09 09:02
fc-scan
12.26
KB
-rwxr-xr-x
2021-10-09 09:02
fc-validate
16.26
KB
-rwxr-xr-x
2021-10-09 09:02
fdp
12.26
KB
-rwxr-xr-x
2024-04-06 12:47
fg
26
B
-rwxr-xr-x
2025-08-26 08:48
fgconsole
12.55
KB
-rwxr-xr-x
2023-10-14 21:01
fgrep
28
B
-rwxr-xr-x
2019-10-11 15:15
filan
94.72
KB
-rwxr-xr-x
2025-07-15 09:33
file
24.69
KB
-rwxr-xr-x
2025-10-07 06:30
fincore
33.03
KB
-rwxr-xr-x
2024-04-06 13:02
find
223.3
KB
-rwxr-xr-x
2024-09-24 02:19
find-repos-of-install
3.62
KB
-rwxr-xr-x
2024-04-08 10:02
findmnt
70.6
KB
-rwxr-xr-x
2024-04-06 13:02
fips-finish-install
1.29
KB
-rwxr-xr-x
2023-08-01 15:18
fips-mode-setup
3.91
KB
-rwxr-xr-x
2023-08-01 15:18
flex
428.45
KB
-rwxr-xr-x
2019-10-12 12:33
flex++
428.45
KB
-rwxr-xr-x
2019-10-12 12:33
flock
33.2
KB
-rwxr-xr-x
2024-04-06 13:02
fmt
45.57
KB
-rwxr-xr-x
2023-04-01 08:44
fold
41.48
KB
-rwxr-xr-x
2023-04-01 08:44
fonttosfnt
41.18
KB
-rwxr-xr-x
2021-10-09 23:42
free
20.79
KB
-rwxr-xr-x
2023-10-14 20:31
freetype-config
4.31
KB
-rwxr-xr-x
2025-03-31 19:37
fribidi
21.14
KB
-rwxr-xr-x
2022-10-08 11:16
ftp
101.2
KB
-rwxr-xr-x
2019-10-12 12:59
funzip
36.63
KB
-rwxr-xr-x
2025-06-03 02:10
g++
1.21
MB
-rwxr-xr-x
2025-08-26 09:47
g13
212.02
KB
-rwxr-xr-x
2022-09-13 10:15
gapplication
20.45
KB
-rwxr-xr-x
2025-07-16 19:34
gawk
669.77
KB
-rwxr-xr-x
2022-04-18 15:56
gc
16.64
KB
-rwxr-xr-x
2024-04-06 12:47
gcc
1.21
MB
-rwxr-xr-x
2025-08-26 09:47
gcc-ar
36.66
KB
-rwxr-xr-x
2025-08-26 09:47
gcc-nm
36.66
KB
-rwxr-xr-x
2025-08-26 09:47
gcc-ranlib
36.66
KB
-rwxr-xr-x
2025-08-26 09:47
gcov
1.31
MB
-rwxr-xr-x
2025-08-26 09:47
gcov-dump
570.96
KB
-rwxr-xr-x
2025-08-26 09:47
gcov-tool
607.77
KB
-rwxr-xr-x
2025-08-26 09:47
gdbm_dump
21.05
KB
-rwxr-xr-x
2022-10-08 13:22
gdbm_load
25.31
KB
-rwxr-xr-x
2022-10-08 13:22
gdbmtool
111.57
KB
-rwxr-xr-x
2022-10-08 13:22
gdbus
48.72
KB
-rwxr-xr-x
2025-07-16 19:34
gdk-pixbuf-query-loaders-64
15.93
KB
-rwxr-xr-x
2025-08-07 07:30
gdk-pixbuf-thumbnailer
20.45
KB
-rwxr-xr-x
2025-08-07 07:30
gdlib-config
2.79
KB
-rwxr-xr-x
2020-08-29 08:49
gencat
24.84
KB
-rwxr-xr-x
2025-08-05 14:12
genl-ctrl-list
12.04
KB
-rwxr-xr-x
2022-10-08 11:39
geqn
232.16
KB
-rwxr-xr-x
2019-10-13 14:29
getconf
32.46
KB
-rwxr-xr-x
2025-08-05 14:12
getent
33.13
KB
-rwxr-xr-x
2025-08-05 14:12
getfacl
25.38
KB
-rwxr-xr-x
2024-04-06 12:15
getkeycodes
12.54
KB
-rwxr-xr-x
2023-10-14 21:01
getopt
20.52
KB
-rwxr-xr-x
2024-04-06 13:02
getopts
31
B
-rwxr-xr-x
2025-08-26 08:48
gettext
48.97
KB
-rwxr-xr-x
2019-11-18 17:17
gettext.sh
4.52
KB
-rwxr-xr-x
2019-11-18 17:16
gettextize
42.69
KB
-rwxr-xr-x
2019-11-18 17:16
ghostscript
12.35
KB
-rwxr-xr-x
2025-06-03 02:48
gio
85.22
KB
-rwxr-xr-x
2025-07-16 19:34
gio-querymodules-64
16.3
KB
-rwxr-xr-x
2025-07-16 19:34
git
26.38
MB
-rwxr-xr-x
2025-07-09 15:46
git-receive-pack
26.38
MB
-rwxr-xr-x
2025-07-09 15:46
git-shell
15.79
MB
-rwxr-xr-x
2025-07-09 15:46
git-upload-archive
26.38
MB
-rwxr-xr-x
2025-07-09 15:46
git-upload-pack
26.38
MB
-rwxr-xr-x
2025-07-09 15:46
glib-compile-schemas
48.85
KB
-rwxr-xr-x
2025-07-16 19:34
gmake
235.32
KB
-rwxr-xr-x
2022-04-18 16:38
gml2gv
41.23
KB
-rwxr-xr-x
2024-04-06 12:47
gneqn
908
B
-rwxr-xr-x
2019-10-13 14:29
gnroff
3.23
KB
-rwxr-xr-x
2019-10-13 14:29
gpasswd
82.16
KB
-rwsr-xr-x
2024-04-06 14:00
gpg
1.04
MB
-rwxr-xr-x
2022-09-13 10:15
gpg-agent
419.29
KB
-rwxr-xr-x
2022-09-13 10:15
gpg-connect-agent
165.3
KB
-rwxr-xr-x
2022-09-13 10:15
gpg-error
34.16
KB
-rwxr-xr-x
2019-10-12 12:20
gpg-error-config
2.26
KB
-rwxr-xr-x
2019-10-12 12:20
gpg-wks-server
206.69
KB
-rwxr-xr-x
2022-09-13 10:15
gpg-zip
3.44
KB
-rwxr-xr-x
2022-09-13 10:15
gpg2
1.04
MB
-rwxr-xr-x
2022-09-13 10:15
gpgconf
176.09
KB
-rwxr-xr-x
2022-09-13 10:15
gpgme-json
85.68
KB
-rwxr-xr-x
2024-04-06 12:29
gpgparsemail
28.74
KB
-rwxr-xr-x
2022-09-13 10:15
gpgrt-config
2.26
KB
-rwxr-xr-x
2019-10-12 12:20
gpgsm
514.45
KB
-rwxr-xr-x
2022-09-13 10:15
gpgsplit
87.02
KB
-rwxr-xr-x
2022-09-13 10:15
gpgv
451.58
KB
-rwxr-xr-x
2022-09-13 10:15
gpgv2
451.58
KB
-rwxr-xr-x
2022-09-13 10:15
gpic
293.84
KB
-rwxr-xr-x
2019-10-13 14:29
gpio-event-mon
14.96
KB
-rwxr-xr-x
2025-10-27 15:46
gpio-hammer
14.96
KB
-rwxr-xr-x
2025-10-27 15:46
gprof
103.35
KB
-rwxr-xr-x
2025-10-07 06:44
gr2fonttest
29.95
KB
-rwxr-xr-x
2019-11-06 07:45
graphml2gv
20.65
KB
-rwxr-xr-x
2024-04-06 12:47
grep
193.63
KB
-rwxr-xr-x
2019-10-11 15:15
groff
124.92
KB
-rwxr-xr-x
2019-10-13 14:29
grops
191.14
KB
-rwxr-xr-x
2019-10-13 14:29
grotty
141.9
KB
-rwxr-xr-x
2019-10-13 14:29
groups
37.47
KB
-rwxr-xr-x
2023-04-01 08:44
growpart
29.19
KB
-rwxr-xr-x
2023-03-31 18:48
grub2-editenv
448.09
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-file
928.48
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-fstest
1.15
MB
-rwxr-xr-x
2025-10-07 08:06
grub2-glue-efi
279.36
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-kbdcomp
1.63
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-menulst2cfg
262.64
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-mkfont
312.13
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-mkimage
431.35
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-mklayout
285.46
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-mknetdir
485.75
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-mkpasswd-pbkdf2
291.84
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-mkrelpath
279.22
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-mkrescue
1.12
MB
-rwxr-xr-x
2025-10-07 08:06
grub2-mkstandalone
594.47
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-render-label
937.1
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-script-check
315.96
KB
-rwxr-xr-x
2025-10-07 08:06
grub2-syslinux2cfg
861.53
KB
-rwxr-xr-x
2025-10-07 08:06
gs
12.35
KB
-rwxr-xr-x
2025-06-03 02:48
gsettings
28.61
KB
-rwxr-xr-x
2025-07-16 19:34
gsnd
277
B
-rwxr-xr-x
2025-06-03 02:48
gsoelim
42.55
KB
-rwxr-xr-x
2019-10-13 14:29
gss-client
24.56
KB
-rwxr-xr-x
2025-06-03 02:06
gtar
448.99
KB
-rwxr-xr-x
2025-08-26 08:57
gtbl
154.61
KB
-rwxr-xr-x
2019-10-13 14:29
gtk-query-immodules-2.0-64
16.29
KB
-rwxr-xr-x
2021-04-06 13:52
gtk-update-icon-cache
33.03
KB
-rwxr-xr-x
2024-09-24 02:16
gtroff
805.02
KB
-rwxr-xr-x
2019-10-13 14:29
gunzip
2.29
KB
-rwxr-xr-x
2022-04-27 05:49
gv2gml
24.7
KB
-rwxr-xr-x
2024-04-06 12:47
gv2gxl
41.3
KB
-rwxr-xr-x
2024-04-06 12:47
gvcolor
46.9
KB
-rwxr-xr-x
2024-04-06 12:47
gvgen
24.8
KB
-rwxr-xr-x
2024-04-06 12:47
gvmap
526.31
KB
-rwxr-xr-x
2024-04-06 12:47
gvmap.sh
2.14
KB
-rwxr-xr-x
2024-04-06 12:47
gvpack
460.59
KB
-rwxr-xr-x
2024-04-06 12:47
gvpr
7.83
KB
-rwxr-xr-x
2024-04-06 12:47
gxl2dot
41.3
KB
-rwxr-xr-x
2024-04-06 12:47
gxl2gv
41.3
KB
-rwxr-xr-x
2024-04-06 12:47
gzexe
6.23
KB
-rwxr-xr-x
2022-04-27 05:49
gzip
94.67
KB
-rwxr-xr-x
2022-04-27 05:49
h2ph
28.69
KB
-rwxr-xr-x
2025-07-28 08:08
h2xs
59.44
KB
-rwxr-xr-x
2025-07-28 08:07
hash
28
B
-rwxr-xr-x
2025-08-26 08:48
head
45.58
KB
-rwxr-xr-x
2023-04-01 08:44
hexdump
57.5
KB
-rwxr-xr-x
2024-04-06 13:02
hmac256
16.86
KB
-rwxr-xr-x
2022-06-28 11:54
host
142.3
KB
-rwxr-xr-x
2025-02-20 09:05
hostid
33.41
KB
-rwxr-xr-x
2023-04-01 08:44
hostname
21.16
KB
-rwxr-xr-x
2019-10-11 13:06
hostnamectl
20.83
KB
-rwxr-xr-x
2025-04-22 01:58
htdbm
31.72
KB
-rwxr-xr-x
2025-10-15 20:39
htdigest
21.71
KB
-rwxr-xr-x
2025-10-15 20:39
html2text
406
B
-rwxr-xr-x
2020-03-17 12:40
htpasswd
31.55
KB
-rwxr-xr-x
2025-10-15 20:39
httxt2dbm
21.1
KB
-rwxr-xr-x
2025-10-15 20:39
hunspell
144.7
KB
-rwxr-xr-x
2019-10-13 08:33
i386
20.76
KB
-rwxr-xr-x
2024-04-06 13:02
ibd2sdi
6.41
MB
-rwxr-xr-x
2024-06-13 12:01
iceauth
41.87
KB
-rwxr-xr-x
2019-10-15 13:08
iconv
61.44
KB
-rwxr-xr-x
2025-08-05 14:12
id
45.52
KB
-rwxr-xr-x
2023-04-01 08:44
identify
11.84
KB
-rwxr-xr-x
2025-04-01 13:15
idiag-socket-details
12.09
KB
-rwxr-xr-x
2022-10-08 11:39
idle2
93
B
-rwxr-xr-x
2024-04-10 04:57
idle2.7
93
B
-rwxr-xr-x
2024-04-10 04:57
idn
39.41
KB
-rwxr-xr-x
2019-10-13 16:55
ifnames
4.03
KB
-rwxr-xr-x
2024-08-13 19:30
iio_event_monitor
22.98
KB
-rwxr-xr-x
2025-10-27 15:46
iio_generic_buffer
26.98
KB
-rwxr-xr-x
2025-10-27 15:46
im360-k8s-syncer
15.85
MB
-rwxr-xr-x
2025-08-22 10:14
import
11.84
KB
-rwxr-xr-x
2025-04-01 13:15
imunify-agent-proxy
7.57
MB
-rwxr-xr-x
2025-08-22 10:14
imunify-antivirus
1
KB
-rwxr-xr-x
2025-10-24 14:51
imunify-service
1020
B
-rwxr-xr-x
2025-10-24 14:51
imunify360-agent
1
KB
-rwxr-xr-x
2025-10-24 14:51
imunify360-command-wrapper
9.14
KB
-rwxr-xr-x
2025-10-09 10:59
info
249.89
KB
-rwxr-xr-x
2022-04-18 17:09
infocmp
61.05
KB
-rwxr-xr-x
2023-10-14 18:54
infotocap
85.31
KB
-rwxr-xr-x
2023-10-14 18:54
innochecksum
6.36
MB
-rwxr-xr-x
2024-06-13 12:01
install
156.25
KB
-rwxr-xr-x
2023-04-01 08:44
instmodsh
4.1
KB
-rwxr-xr-x
2019-10-13 08:55
intel-speed-select
93.02
KB
-rwxr-xr-x
2025-10-27 15:46
ionice
28.98
KB
-rwxr-xr-x
2024-04-06 13:02
iostat
57.69
KB
-rwxr-xr-x
2024-07-03 09:57
ipcalc
46.08
KB
-rwxr-xr-x
2020-05-31 19:39
ipcmk
29.14
KB
-rwxr-xr-x
2024-04-06 13:02
ipcrm
28.99
KB
-rwxr-xr-x
2024-04-06 13:02
ipcs
53.39
KB
-rwxr-xr-x
2024-04-06 13:02
isc-config.sh
3.33
KB
-rwxr-xr-x
2025-02-20 09:05
isosize
24.88
KB
-rwxr-xr-x
2024-04-06 13:02
ispell
988
B
-rwxr-xr-x
2022-04-18 15:10
isql
37.29
KB
-rwxr-xr-x
2019-10-14 21:51
iusql
29.68
KB
-rwxr-xr-x
2019-10-14 21:51
jobs
28
B
-rwxr-xr-x
2025-08-26 08:48
join
53.77
KB
-rwxr-xr-x
2023-04-01 08:44
journalctl
76.99
KB
-rwxr-xr-x
2025-04-22 01:58
json_pp
4.19
KB
-rwxr-xr-x
2019-10-14 12:12
json_reformat
16.55
KB
-rwxr-xr-x
2023-10-14 13:17
json_verify
12.27
KB
-rwxr-xr-x
2023-10-14 13:17
json_xs
6.84
KB
-rwxr-xr-x
2025-10-03 07:13
jsondiff
1.01
KB
-rwxr-xr-x
2019-12-11 14:10
jsondiff-3
1.01
KB
-rwxr-xr-x
2019-12-11 14:10
jsondiff-3.6
1.01
KB
-rwxr-xr-x
2019-12-11 14:10
jsonpatch
3.59
KB
-rwxr-xr-x
2019-12-11 14:10
jsonpatch-3
3.59
KB
-rwxr-xr-x
2019-12-11 14:10
jsonpatch-3.6
3.59
KB
-rwxr-xr-x
2019-12-11 14:10
jsonpointer
1.32
KB
-rwxr-xr-x
2019-11-24 18:36
jsonpointer-3
1.32
KB
-rwxr-xr-x
2019-11-24 18:36
jsonpointer-3.6
1.32
KB
-rwxr-xr-x
2019-11-24 18:36
jsonschema-3
409
B
-rwxr-xr-x
2019-11-24 18:37
kbd_mode
12.55
KB
-rwxr-xr-x
2023-10-14 21:01
kbdinfo
16.56
KB
-rwxr-xr-x
2023-10-14 21:01
kbdrate
16.45
KB
-rwxr-xr-x
2023-10-14 21:01
kbxutil
177.32
KB
-rwxr-xr-x
2022-09-13 10:15
kdumpctl
32.93
KB
-rwxr-xr-x
2024-09-24 08:36
kernel-install
4.41
KB
-rwxr-xr-x
2018-06-22 11:11
keyctl
36.82
KB
-rwxr-xr-x
2021-10-08 13:50
kill
37.27
KB
-rwxr-xr-x
2024-04-06 13:02
killall
29.77
KB
-rwxr-xr-x
2020-11-06 14:24
kmod
159.95
KB
-rwxr-xr-x
2024-04-08 09:18
krb5-config
6.98
KB
-rwxr-xr-x
2025-06-03 02:06
kvm_stat
60.85
KB
-rwxr-xr-x
2025-10-16 07:44
last
49.23
KB
-rwxr-xr-x
2024-04-06 13:02
lastb
49.23
KB
-rwxr-xr-x
2024-04-06 13:02
lastlog
20.62
KB
-rwxr-xr-x
2024-04-06 14:00
lchfn
20.35
KB
-rwxr-xr-x
2024-09-24 02:24
lchsh
16.35
KB
-rwxr-xr-x
2024-09-24 02:24
ld
1.71
MB
-rwxr-xr-x
2025-10-07 06:44
ld.bfd
1.71
MB
-rwxr-xr-x
2025-10-07 06:44
ld.gold
2.35
MB
-rwxr-xr-x
2025-10-07 06:44
ld.so
1.05
MB
-rwxr-xr-x
2025-08-05 14:12
ldd
5.31
KB
-rwxr-xr-x
2025-08-05 14:01
lefty
304.52
KB
-rwxr-xr-x
2024-04-06 12:47
less
173.76
KB
-rwxr-xr-x
2024-07-02 20:10
lessecho
12.4
KB
-rwxr-xr-x
2024-07-02 20:10
lesskey
21.99
KB
-rwxr-xr-x
2024-07-02 20:10
lesspipe.sh
3.07
KB
-rwxr-xr-x
2024-07-02 19:57
lex
428.45
KB
-rwxr-xr-x
2019-10-12 12:33
lexgrog
93.7
KB
-rwxr-xr-x
2021-10-08 13:04
libgcrypt-config
3.84
KB
-rwxr-xr-x
2022-06-28 11:54
libnetcfg
15.41
KB
-rwxr-xr-x
2025-07-28 08:08
libpng-config
2.33
KB
-rwxr-xr-x
2019-10-12 00:44
libpng16-config
2.33
KB
-rwxr-xr-x
2019-10-12 00:44
libtool
359.11
KB
-rwxr-xr-x
2019-10-11 14:55
libtoolize
126.17
KB
-rwxr-xr-x
2019-10-11 14:55
libwmf-fontmap
13.03
KB
-rwxr-xr-x
2019-10-14 15:47
link
33.41
KB
-rwxr-xr-x
2023-04-01 08:44
linux-boot-prober
5.85
KB
-rwxr-xr-x
2021-10-09 02:56
linux32
20.76
KB
-rwxr-xr-x
2024-04-06 13:02
linux64
20.76
KB
-rwxr-xr-x
2024-04-06 13:02
ln
70.57
KB
-rwxr-xr-x
2023-04-01 08:44
lneato
1.51
KB
-rwxr-xr-x
2024-04-06 12:47
loadkeys
210.53
KB
-rwxr-xr-x
2023-10-14 21:01
loadunimap
29.03
KB
-rwxr-xr-x
2023-10-14 21:01
locale
56.45
KB
-rwxr-xr-x
2025-08-05 14:12
localectl
28.86
KB
-rwxr-xr-x
2025-04-22 01:58
localedef
307.47
KB
-rwxr-xr-x
2025-08-05 14:12
logger
49.98
KB
-rwxr-xr-x
2024-04-06 13:02
login
40.96
KB
-rwxr-xr-x
2024-04-06 13:02
loginctl
57.28
KB
-rwxr-xr-x
2025-04-22 01:58
logname
33.42
KB
-rwxr-xr-x
2023-04-01 08:44
logresolve
21.45
KB
-rwxr-xr-x
2025-10-15 20:39
look
16.45
KB
-rwxr-xr-x
2024-04-06 13:02
ls
139.97
KB
-rwxr-xr-x
2023-04-01 08:44
lsattr
11.93
KB
-rwxr-xr-x
2025-10-07 07:08
lsblk
90.13
KB
-rwxr-xr-x
2024-04-06 13:02
lscpu
81.7
KB
-rwxr-xr-x
2024-04-06 13:02
lsgpio
15.06
KB
-rwxr-xr-x
2025-10-27 15:46
lsiio
22.98
KB
-rwxr-xr-x
2025-10-27 15:46
lsinitrd
8.68
KB
-rwxr-xr-x
2025-07-15 09:09
lsipc
73.74
KB
-rwxr-xr-x
2024-04-06 13:02
lslocks
37.53
KB
-rwxr-xr-x
2024-04-06 13:02
lslogins
65.6
KB
-rwxr-xr-x
2024-04-06 13:02
lsmem
45.34
KB
-rwxr-xr-x
2024-04-06 13:02
lsns
49.28
KB
-rwxr-xr-x
2024-04-06 13:02
lsof
175.4
KB
-rwxr-xr-x
2020-08-15 21:59
lsphp
937
B
-rwxr-xr-x
2025-04-01 16:34
lsscsi
86.01
KB
-rwxr-xr-x
2021-10-09 05:12
lua
20.45
KB
-rwxr-xr-x
2021-10-09 05:14
luac
152.77
KB
-rwxr-xr-x
2021-10-09 05:14
lwp-download
10.05
KB
-rwxr-xr-x
2022-04-22 20:13
lwp-dump
2.65
KB
-rwxr-xr-x
2022-04-22 20:13
lwp-mirror
2.36
KB
-rwxr-xr-x
2022-04-22 20:13
lwp-request
15.84
KB
-rwxr-xr-x
2022-04-22 20:13
lz4_decompress
6.25
MB
-rwxr-xr-x
2024-06-13 12:01
m4
185.56
KB
-rwxr-xr-x
2019-10-11 14:41
mail
408.89
KB
-rwxr-xr-x
2019-10-13 00:19
mailx
408.89
KB
-rwxr-xr-x
2019-10-13 00:19
make
235.32
KB
-rwxr-xr-x
2022-04-18 16:38
make-dummy-cert
610
B
-rwxr-xr-x
2024-10-09 13:39
makedb
24.84
KB
-rwxr-xr-x
2025-08-05 14:12
man
112.52
KB
-rwxr-xr-x
2021-10-08 13:04
mandb
134.52
KB
-rwxr-xr-x
2021-10-08 13:04
manpath
33.42
KB
-rwxr-xr-x
2021-10-08 13:04
mapscrn
24.84
KB
-rwxr-xr-x
2023-10-14 21:01
mcookie
33.26
KB
-rwxr-xr-x
2024-04-06 13:02
mcpp
9.02
KB
-rwxr-xr-x
2019-10-14 15:45
md5sum
45.62
KB
-rwxr-xr-x
2023-04-01 08:44
mdig
48.52
KB
-rwxr-xr-x
2025-02-20 09:05
memstrack
83.78
KB
-rwxr-xr-x
2023-10-15 04:56
mesg
16.36
KB
-rwxr-xr-x
2024-04-06 13:02
miniterm-3.6.py
33.09
KB
-rwxr-xr-x
2024-04-06 13:25
miniterm-3.py
33.09
KB
-rwxr-xr-x
2024-04-06 13:25
mkdir
82.79
KB
-rwxr-xr-x
2023-04-01 08:44
mkfifo
66.56
KB
-rwxr-xr-x
2023-04-01 08:44
mkfontdir
65
B
-rwxr-xr-x
2021-10-09 23:42
mkfontscale
41.59
KB
-rwxr-xr-x
2021-10-09 23:42
mkinitrd
6.43
KB
-rwxr-xr-x
2025-07-15 09:09
mknod
70.55
KB
-rwxr-xr-x
2023-04-01 08:44
mktemp
45.73
KB
-rwxr-xr-x
2023-04-01 08:44
mm2gv
90.53
KB
-rwxr-xr-x
2024-04-06 12:47
mmdblookup
16.74
KB
-rwxr-xr-x
2024-02-12 02:30
modulecmd
384.75
KB
-rwxr-xr-x
2023-10-14 18:46
modulemd-validator
24.96
KB
-rwxr-xr-x
2021-10-09 01:37
modutil
177.43
KB
-rwxr-xr-x
2025-09-09 13:57
mogrify
11.84
KB
-rwxr-xr-x
2025-04-01 13:15
montage
11.84
KB
-rwxr-xr-x
2025-04-01 13:15
more
44.94
KB
-rwxr-xr-x
2024-04-06 13:02
mount
49.15
KB
-rwxr-xr-x
2024-04-06 13:02
mountpoint
16.48
KB
-rwxr-xr-x
2024-04-06 13:02
mpicalc
20.38
KB
-rwxr-xr-x
2022-06-28 11:54
mpstat
53.51
KB
-rwxr-xr-x
2024-07-03 09:57
msgattrib
25.58
KB
-rwxr-xr-x
2019-11-18 17:17
msgcat
25.55
KB
-rwxr-xr-x
2019-11-18 17:17
msgcmp
26.12
KB
-rwxr-xr-x
2019-11-18 17:17
msgcomm
25.55
KB
-rwxr-xr-x
2019-11-18 17:17
msgconv
21.55
KB
-rwxr-xr-x
2019-11-18 17:17
msgen
21.55
KB
-rwxr-xr-x
2019-11-18 17:17
msgexec
21.55
KB
-rwxr-xr-x
2019-11-18 17:17
msgfilter
34.53
KB
-rwxr-xr-x
2019-11-18 17:17
msgfmt
90.3
KB
-rwxr-xr-x
2019-11-18 17:17
msgfmt2.7.py
6.33
KB
-rwxr-xr-x
2024-04-10 04:58
msgfmt2.py
6.33
KB
-rwxr-xr-x
2024-04-10 04:58
msggrep
43.6
KB
-rwxr-xr-x
2019-11-18 17:17
msginit
67.85
KB
-rwxr-xr-x
2019-11-18 17:17
msgmerge
71.48
KB
-rwxr-xr-x
2019-11-18 17:17
msgunfmt
35.8
KB
-rwxr-xr-x
2019-11-18 17:17
msguniq
25.56
KB
-rwxr-xr-x
2019-11-18 17:17
mv
144.03
KB
-rwxr-xr-x
2023-04-01 08:44
my_print_defaults
6.2
MB
-rwxr-xr-x
2024-06-13 12:01
myisam_ftdump
6.47
MB
-rwxr-xr-x
2024-06-13 12:01
myisamchk
6.57
MB
-rwxr-xr-x
2024-06-13 12:01
myisamlog
6.42
MB
-rwxr-xr-x
2024-06-13 12:01
myisampack
6.49
MB
-rwxr-xr-x
2024-06-13 12:01
mysql
7.36
MB
-rwxr-xr-x
2024-06-13 12:01
mysql_config
840
B
-rwxr-xr-x
2024-06-13 11:26
mysql_config-64
4.95
KB
-rwxr-xr-x
2024-06-13 11:26
mysql_config_editor
6.21
MB
-rwxr-xr-x
2024-06-13 12:01
mysql_migrate_keyring
7.14
MB
-rwxr-xr-x
2024-06-13 12:01
mysql_secure_installation
7.05
MB
-rwxr-xr-x
2024-06-13 12:01
mysql_ssl_rsa_setup
6.25
MB
-rwxr-xr-x
2024-06-13 12:01
mysql_tzinfo_to_sql
6.13
MB
-rwxr-xr-x
2024-06-13 12:01
mysql_upgrade
7.16
MB
-rwxr-xr-x
2024-06-13 12:01
mysqladmin
7.06
MB
-rwxr-xr-x
2024-06-13 12:01
mysqlbinlog
7.51
MB
-rwxr-xr-x
2024-06-13 12:01
mysqlcheck
7.07
MB
-rwxr-xr-x
2024-06-13 12:01
mysqld_pre_systemd
4.31
KB
-rwxr-xr-x
2024-06-13 11:26
mysqldump
7.14
MB
-rwxr-xr-x
2024-06-13 12:01
mysqldumpslow
7.54
KB
-rwxr-xr-x
2024-06-13 11:26
mysqlimport
7.06
MB
-rwxr-xr-x
2024-06-13 12:01
mysqlpump
7.65
MB
-rwxr-xr-x
2024-06-13 12:01
mysqlshow
7.05
MB
-rwxr-xr-x
2024-06-13 12:01
mysqlslap
7.07
MB
-rwxr-xr-x
2024-06-13 12:01
nail
408.89
KB
-rwxr-xr-x
2019-10-13 00:19
named-rrchecker
19.88
KB
-rwxr-xr-x
2025-02-20 09:05
namei
33.1
KB
-rwxr-xr-x
2024-04-06 13:02
nano
247.94
KB
-rwxr-xr-x
2024-09-24 02:16
nc
49.27
KB
-rwxr-xr-x
2025-01-05 23:13
ncurses6-config
5.87
KB
-rwxr-xr-x
2023-10-14 18:54
ncursesw6-config
5.88
KB
-rwxr-xr-x
2023-10-14 18:54
ndptool
24.45
KB
-rwxr-xr-x
2024-07-19 07:04
neato
12.26
KB
-rwxr-xr-x
2024-04-06 12:47
needs-restarting
3.62
KB
-rwxr-xr-x
2024-04-08 10:02
neqn
908
B
-rwxr-xr-x
2019-10-13 14:29
net-snmp-create-v3-user
3.15
KB
-rwxr-xr-x
2025-10-07 09:19
netcat
49.27
KB
-rwxr-xr-x
2025-01-05 23:13
netstat
158.68
KB
-rwxr-xr-x
2020-08-30 17:47
newgidmap
47.8
KB
-rwxr-xr-x
2024-04-06 14:00
newgrp
42.45
KB
-rwxr-xr-x
2024-04-06 14:00
newuidmap
47.76
KB
-rwxr-xr-x
2024-04-06 14:00
nf-ct-add
16.46
KB
-rwxr-xr-x
2022-10-08 11:39
nf-ct-events
12.38
KB
-rwxr-xr-x
2022-10-08 11:39
nf-ct-list
16.49
KB
-rwxr-xr-x
2022-10-08 11:39
nf-exp-add
16.87
KB
-rwxr-xr-x
2022-10-08 11:39
nf-exp-delete
16.66
KB
-rwxr-xr-x
2022-10-08 11:39
nf-exp-list
16.49
KB
-rwxr-xr-x
2022-10-08 11:39
nf-log
12.35
KB
-rwxr-xr-x
2022-10-08 11:39
nf-monitor
12.36
KB
-rwxr-xr-x
2022-10-08 11:39
nf-queue
16.35
KB
-rwxr-xr-x
2022-10-08 11:39
ngettext
48.97
KB
-rwxr-xr-x
2019-11-18 17:17
nice
37.41
KB
-rwxr-xr-x
2023-04-01 08:44
nisdomainname
21.16
KB
-rwxr-xr-x
2019-10-11 13:06
nl
45.63
KB
-rwxr-xr-x
2023-04-01 08:44
nl-addr-add
12.34
KB
-rwxr-xr-x
2022-10-08 11:39
nl-addr-delete
16.77
KB
-rwxr-xr-x
2022-10-08 11:39
nl-addr-list
16.88
KB
-rwxr-xr-x
2022-10-08 11:39
nl-class-add
16.73
KB
-rwxr-xr-x
2022-10-08 11:39
nl-class-delete
12.63
KB
-rwxr-xr-x
2022-10-08 11:39
nl-class-list
12.59
KB
-rwxr-xr-x
2022-10-08 11:39
nl-classid-lookup
12.47
KB
-rwxr-xr-x
2022-10-08 11:39
nl-cls-add
16.77
KB
-rwxr-xr-x
2022-10-08 11:39
nl-cls-delete
16.77
KB
-rwxr-xr-x
2022-10-08 11:39
nl-cls-list
12.73
KB
-rwxr-xr-x
2022-10-08 11:39
nl-fib-lookup
12.5
KB
-rwxr-xr-x
2022-10-08 11:39
nl-link-enslave
11.87
KB
-rwxr-xr-x
2022-10-08 11:39
nl-link-ifindex2name
11.87
KB
-rwxr-xr-x
2022-10-08 11:39
nl-link-list
12.23
KB
-rwxr-xr-x
2022-10-08 11:39
nl-link-name2ifindex
11.86
KB
-rwxr-xr-x
2022-10-08 11:39
nl-link-release
11.86
KB
-rwxr-xr-x
2022-10-08 11:39
nl-link-set
12.77
KB
-rwxr-xr-x
2022-10-08 11:39
nl-link-stats
12.59
KB
-rwxr-xr-x
2022-10-08 11:39
nl-list-caches
12.27
KB
-rwxr-xr-x
2022-10-08 11:39
nl-list-sockets
11.87
KB
-rwxr-xr-x
2022-10-08 11:39
nl-monitor
12.52
KB
-rwxr-xr-x
2022-10-08 11:39
nl-neigh-add
12.63
KB
-rwxr-xr-x
2022-10-08 11:39
nl-neigh-delete
12.66
KB
-rwxr-xr-x
2022-10-08 11:39
nl-neigh-list
12.19
KB
-rwxr-xr-x
2022-10-08 11:39
nl-neightbl-list
12.01
KB
-rwxr-xr-x
2022-10-08 11:39
nl-pktloc-lookup
12.56
KB
-rwxr-xr-x
2022-10-08 11:39
nl-qdisc-add
12.65
KB
-rwxr-xr-x
2022-10-08 11:39
nl-qdisc-delete
12.63
KB
-rwxr-xr-x
2022-10-08 11:39
nl-qdisc-list
16.74
KB
-rwxr-xr-x
2022-10-08 11:39
nl-route-add
16.39
KB
-rwxr-xr-x
2022-10-08 11:39
nl-route-delete
16.88
KB
-rwxr-xr-x
2022-10-08 11:39
nl-route-get
12.35
KB
-rwxr-xr-x
2022-10-08 11:39
nl-route-list
16.44
KB
-rwxr-xr-x
2022-10-08 11:39
nl-rule-list
12.05
KB
-rwxr-xr-x
2022-10-08 11:39
nl-tctree-list
12.66
KB
-rwxr-xr-x
2022-10-08 11:39
nl-util-addr
11.85
KB
-rwxr-xr-x
2022-10-08 11:39
nm
50.38
KB
-rwxr-xr-x
2025-10-07 06:44
nm-online
20.84
KB
-rwxr-xr-x
2025-08-26 09:47
nmcli
1009
KB
-rwxr-xr-x
2025-08-26 09:47
nmtui
784.12
KB
-rwxr-xr-x
2025-08-26 09:47
nmtui-connect
784.12
KB
-rwxr-xr-x
2025-08-26 09:47
nmtui-edit
784.12
KB
-rwxr-xr-x
2025-08-26 09:47
nmtui-hostname
784.12
KB
-rwxr-xr-x
2025-08-26 09:47
nohup
37.48
KB
-rwxr-xr-x
2023-04-01 08:44
nop
12.5
KB
-rwxr-xr-x
2024-04-06 12:47
nproc
37.48
KB
-rwxr-xr-x
2023-04-01 08:44
nroff
3.23
KB
-rwxr-xr-x
2019-10-13 14:29
nsenter
33.3
KB
-rwxr-xr-x
2024-04-06 13:02
nslookup
146.26
KB
-rwxr-xr-x
2025-02-20 09:05
nss-policy-check
16.3
KB
-rwxr-xr-x
2025-09-09 13:57
nsupdate
73.05
KB
-rwxr-xr-x
2025-02-20 09:05
numfmt
65.71
KB
-rwxr-xr-x
2023-04-01 08:44
objcopy
240.07
KB
-rwxr-xr-x
2025-10-07 06:44
objdump
419.76
KB
-rwxr-xr-x
2025-10-07 06:44
od
73.88
KB
-rwxr-xr-x
2023-04-01 08:44
odbc_config
13.05
KB
-rwxr-xr-x
2019-10-14 21:51
odbcinst
37.68
KB
-rwxr-xr-x
2019-10-14 21:51
open
20.97
KB
-rwxr-xr-x
2023-10-14 21:01
openssl
745.95
KB
-rwxr-xr-x
2024-10-09 13:39
openvt
20.97
KB
-rwxr-xr-x
2023-10-14 21:01
os-prober
5.78
KB
-rwxr-xr-x
2021-10-09 02:56
osage
12.26
KB
-rwxr-xr-x
2024-04-06 12:47
p11-kit
37.15
KB
-rwxr-xr-x
2024-04-06 14:16
package-cleanup
3.62
KB
-rwxr-xr-x
2024-04-08 10:02
page_owner_sort
11.34
KB
-rwxr-xr-x
2025-10-27 15:46
pango-list
11.88
KB
-rwxr-xr-x
2021-10-08 15:22
pango-view
57.44
KB
-rwxr-xr-x
2021-10-08 15:22
paperconf
13.07
KB
-rwxr-xr-x
2019-10-12 20:09
passwd
32.77
KB
-rwsr-xr-x
2022-04-18 22:59
paste
37.46
KB
-rwxr-xr-x
2023-04-01 08:44
patch
206.46
KB
-rwxr-xr-x
2020-06-01 15:14
patchwork
12.26
KB
-rwxr-xr-x
2024-04-06 12:47
pathchk
37.41
KB
-rwxr-xr-x
2023-04-01 08:44
pathfix.py
6.63
KB
-rwxr-xr-x
2025-08-26 08:58
pcre-config
2.09
KB
-rwxr-xr-x
2021-10-08 19:17
pcre2-config
1.9
KB
-rwxr-xr-x
2022-08-02 16:07
pdf2dsc
698
B
-rwxr-xr-x
2025-06-03 02:48
pdf2ps
909
B
-rwxr-xr-x
2025-06-03 02:48
pdns_control
486.11
KB
-rwxr-xr-x
2025-05-12 18:42
pdnsutil
5.19
MB
-rwxr-xr-x
2025-05-12 18:42
peekfd
16.51
KB
-rwxr-xr-x
2020-11-06 14:24
perl
12.43
KB
-rwxr-xr-x
2025-07-28 08:07
perl5.26.3
12.43
KB
-rwxr-xr-x
2025-07-28 08:07
perlbug
44.39
KB
-rwxr-xr-x
2025-07-28 08:08
perldoc
118
B
-rwxr-xr-x
2019-10-13 11:53
perlivp
10.56
KB
-rwxr-xr-x
2025-07-28 08:07
perlml
6.86
KB
-rwxr-xr-x
2022-08-10 20:54
perlthanks
44.39
KB
-rwxr-xr-x
2025-07-28 08:08
perror
6.99
MB
-rwxr-xr-x
2024-06-13 12:01
pflags
2.57
KB
-rwxr-xr-x
2024-04-06 13:32
pftp
101.2
KB
-rwxr-xr-x
2019-10-12 12:59
pgrep
28.84
KB
-rwxr-xr-x
2023-10-14 20:31
php
937
B
-rwxr-xr-x
2025-04-01 16:34
pic
293.84
KB
-rwxr-xr-x
2019-10-13 14:29
piconv
8.08
KB
-rwxr-xr-x
2019-10-13 08:46
pidof
16.7
KB
-rwxr-xr-x
2023-10-14 20:31
pidstat
65.72
KB
-rwxr-xr-x
2024-07-03 09:57
pigz
125.38
KB
-rwxr-xr-x
2020-06-01 15:15
pinentry
2.35
KB
-rwxr-xr-x
2018-08-12 17:18
pinentry-curses
77.89
KB
-rwxr-xr-x
2019-11-24 17:39
ping
66.13
KB
-rwxr-xr-x
2023-10-14 17:19
pinky
41.53
KB
-rwxr-xr-x
2023-04-01 08:44
pip-2
206
B
-rwxr-xr-x
2022-04-21 18:08
pip-2.7
206
B
-rwxr-xr-x
2022-04-21 18:08
pip-3
209
B
-rwxr-xr-x
2024-04-06 13:40
pip-3.6
209
B
-rwxr-xr-x
2024-04-06 13:40
pip2
206
B
-rwxr-xr-x
2022-04-21 18:08
pip2.7
206
B
-rwxr-xr-x
2022-04-21 18:08
pip3
209
B
-rwxr-xr-x
2024-04-06 13:40
pip3.6
209
B
-rwxr-xr-x
2024-04-06 13:40
pk12util
111.13
KB
-rwxr-xr-x
2025-09-09 13:57
pkaction
16.38
KB
-rwxr-xr-x
2024-05-29 12:51
pkcheck
24.43
KB
-rwxr-xr-x
2024-05-29 12:51
pkcon
81.38
KB
-rwxr-xr-x
2023-10-14 13:32
pkexec
28.41
KB
-rwsr-xr-x
2024-05-29 12:51
pkg-config
40.04
KB
-rwxr-xr-x
2019-10-13 06:57
pkgconf
40.04
KB
-rwxr-xr-x
2019-10-13 06:57
pkill
28.84
KB
-rwxr-xr-x
2023-10-14 20:31
pkla-admin-identities
25.72
KB
-rwxr-xr-x
2019-11-18 15:17
pkla-check-authorization
33.78
KB
-rwxr-xr-x
2019-11-18 15:17
pkmon
20.74
KB
-rwxr-xr-x
2023-10-14 13:32
pkttyagent
20.38
KB
-rwxr-xr-x
2024-05-29 12:51
pl2pm
4.43
KB
-rwxr-xr-x
2025-07-28 08:08
pldd
16.75
KB
-rwxr-xr-x
2025-08-05 14:12
plesk_configure
342
B
-rwxr-xr-x
2021-07-04 21:39
pmap
32.78
KB
-rwxr-xr-x
2023-10-14 20:31
png-fix-itxt
13.04
KB
-rwxr-xr-x
2019-10-12 00:44
pngfix
53.53
KB
-rwxr-xr-x
2019-10-12 00:44
pod2html
4.04
KB
-rwxr-xr-x
2025-07-28 08:08
pod2man
14.68
KB
-rwxr-xr-x
2019-10-13 14:12
pod2text
10.55
KB
-rwxr-xr-x
2019-10-13 14:12
pod2usage
3.86
KB
-rwxr-xr-x
2019-10-13 11:57
podchecker
3.57
KB
-rwxr-xr-x
2019-10-13 11:46
podselect
2.47
KB
-rwxr-xr-x
2019-10-13 11:52
post-grohtml
238.73
KB
-rwxr-xr-x
2019-10-13 14:29
powernow-k8-decode
10.88
KB
-rwxr-xr-x
2025-10-27 15:46
pr
82.23
KB
-rwxr-xr-x
2023-04-01 08:44
pre-grohtml
130.55
KB
-rwxr-xr-x
2019-10-13 14:29
precat
5.52
KB
-rwxr-xr-x
2022-04-18 15:10
preconv
57.65
KB
-rwxr-xr-x
2019-10-13 14:29
preunzip
5.52
KB
-rwxr-xr-x
2022-04-18 15:10
prezip
5.52
KB
-rwxr-xr-x
2022-04-18 15:10
prezip-bin
11.98
KB
-rwxr-xr-x
2022-04-18 15:10
printenv
33.4
KB
-rwxr-xr-x
2023-04-01 08:44
printf
53.64
KB
-rwxr-xr-x
2023-04-01 08:44
prlimit
37.54
KB
-rwxr-xr-x
2024-04-06 13:02
procan
82.6
KB
-rwxr-xr-x
2025-07-15 09:33
protoc
16.49
KB
-rwxr-xr-x
2025-10-07 08:37
protoc-c
244.79
KB
-rwxr-xr-x
2023-10-14 21:21
protoc-gen-c
244.79
KB
-rwxr-xr-x
2023-10-14 21:21
prove
13.24
KB
-rwxr-xr-x
2019-10-13 12:42
prtstat
20.51
KB
-rwxr-xr-x
2020-11-06 14:24
prune
16.73
KB
-rwxr-xr-x
2024-04-06 12:47
ps
134.75
KB
-rwxr-xr-x
2023-10-14 20:31
ps2ascii
631
B
-rwxr-xr-x
2025-06-03 02:48
ps2epsi
2.69
KB
-rwxr-xr-x
2025-06-03 02:48
ps2pdf
272
B
-rwxr-xr-x
2025-06-03 02:48
ps2pdf12
215
B
-rwxr-xr-x
2025-06-03 02:48
ps2pdf13
215
B
-rwxr-xr-x
2025-06-03 02:48
ps2pdf14
215
B
-rwxr-xr-x
2025-06-03 02:48
ps2pdfwr
1.07
KB
-rwxr-xr-x
2025-06-03 02:48
ps2ps
647
B
-rwxr-xr-x
2025-06-03 02:48
ps2ps2
669
B
-rwxr-xr-x
2025-06-03 02:48
psfaddtable
20.66
KB
-rwxr-xr-x
2023-10-14 21:01
psfgettable
20.66
KB
-rwxr-xr-x
2023-10-14 21:01
psfstriptable
20.66
KB
-rwxr-xr-x
2023-10-14 21:01
psfxtable
20.66
KB
-rwxr-xr-x
2023-10-14 21:01
pslog
12.48
KB
-rwxr-xr-x
2020-11-06 14:24
pstree
33.53
KB
-rwxr-xr-x
2020-11-06 14:24
pstree.x11
33.53
KB
-rwxr-xr-x
2020-11-06 14:24
ptar
3.38
KB
-rwxr-xr-x
2019-10-13 07:10
ptardiff
2.48
KB
-rwxr-xr-x
2019-10-13 07:10
ptargrep
4.2
KB
-rwxr-xr-x
2019-10-13 07:10
ptx
78.07
KB
-rwxr-xr-x
2023-04-01 08:44
pure-pw
38.83
KB
-rwxr-xr-x
2024-10-30 12:42
pure-pwconvert
10.72
KB
-rwxr-xr-x
2024-10-30 12:42
pure-statsdecode
10.72
KB
-rwxr-xr-x
2024-10-30 12:42
pwd
37.5
KB
-rwxr-xr-x
2023-04-01 08:44
pwdx
12.68
KB
-rwxr-xr-x
2023-10-14 20:31
pwmake
12.27
KB
-rwxr-xr-x
2023-04-01 18:24
pwscore
12.27
KB
-rwxr-xr-x
2023-04-01 18:24
pybabel
388
B
-rwxr-xr-x
2021-10-11 11:19
pydoc-3
89
B
-rwxr-xr-x
2025-08-26 09:08
pydoc2
78
B
-rwxr-xr-x
2024-04-10 04:58
pydoc2.7
78
B
-rwxr-xr-x
2024-04-10 04:58
pydoc3
89
B
-rwxr-xr-x
2025-08-26 09:08
pydoc3.6
89
B
-rwxr-xr-x
2025-08-26 09:08
pygettext2.7.py
21.56
KB
-rwxr-xr-x
2024-04-10 04:58
pygettext2.py
21.56
KB
-rwxr-xr-x
2024-04-10 04:58
pyjwt
384
B
-rwxr-xr-x
2019-12-18 17:51
pynche2
138
B
-rwxr-xr-x
2024-04-10 04:48
pynche2.7
138
B
-rwxr-xr-x
2024-04-10 04:48
python-html2text
406
B
-rwxr-xr-x
2020-03-17 12:40
python2
7.84
KB
-rwxr-xr-x
2024-04-10 04:58
python2-config
1.8
KB
-rwxr-xr-x
2024-04-10 04:58
python2.7
7.84
KB
-rwxr-xr-x
2024-04-10 04:58
python2.7-config
1.8
KB
-rwxr-xr-x
2024-04-10 04:58
python3
11.59
KB
-rwxr-xr-x
2025-08-26 09:08
python3-config
204
B
-rwxr-xr-x
2025-08-26 09:08
python3-html2text
406
B
-rwxr-xr-x
2020-03-17 12:40
python3.6
11.59
KB
-rwxr-xr-x
2025-08-26 09:08
python3.6-config
204
B
-rwxr-xr-x
2025-08-26 09:08
python3.6m
11.59
KB
-rwxr-xr-x
2025-08-26 09:08
python3.6m-config
204
B
-rwxr-xr-x
2025-08-26 09:08
python3.6m-x86_64-config
3.54
KB
-rwxr-xr-x
2025-08-26 09:01
pyvenv-3
446
B
-rwxr-xr-x
2025-08-26 09:08
pyvenv-3.6
446
B
-rwxr-xr-x
2025-08-26 09:08
qemu-ga
505.49
KB
-rwxr-xr-x
2025-08-07 12:04
quota
91.49
KB
-rwsr-xr-x
2021-10-09 07:08
quotasync
74.69
KB
-rwxr-xr-x
2021-10-09 07:08
ranlib
61.97
KB
-rwxr-xr-x
2025-10-07 06:44
raw
16.49
KB
-rwxr-xr-x
2024-04-06 13:02
read
28
B
-rwxr-xr-x
2025-08-26 08:48
readelf
624.54
KB
-rwxr-xr-x
2025-10-07 06:44
readlink
45.96
KB
-rwxr-xr-x
2023-04-01 08:44
realpath
50.02
KB
-rwxr-xr-x
2023-04-01 08:44
recode-sr-latin
17.99
KB
-rwxr-xr-x
2019-11-18 17:17
rename
16.5
KB
-rwxr-xr-x
2024-04-06 13:02
renew-dummy-cert
725
B
-rwxr-xr-x
2024-10-09 13:39
renice
16.46
KB
-rwxr-xr-x
2024-04-06 13:02
repo-graph
3.62
KB
-rwxr-xr-x
2024-04-08 10:02
repoclosure
3.62
KB
-rwxr-xr-x
2024-04-08 10:02
repodiff
3.62
KB
-rwxr-xr-x
2024-04-08 10:02
repomanage
3.62
KB
-rwxr-xr-x
2024-04-08 10:02
repoquery
3.62
KB
-rwxr-xr-x
2024-04-08 10:02
reposync
3.62
KB
-rwxr-xr-x
2024-04-08 10:02
repotrack
3.62
KB
-rwxr-xr-x
2024-04-08 10:02
rescan-scsi-bus.sh
38.24
KB
-rwxr-xr-x
2022-10-08 11:49
reset
24.76
KB
-rwxr-xr-x
2023-10-14 18:54
resizecons
20.77
KB
-rwxr-xr-x
2023-10-14 21:01
resolvectl
195.74
KB
-rwxr-xr-x
2025-04-22 01:58
rev
12.45
KB
-rwxr-xr-x
2024-04-06 13:02
rm
70.47
KB
-rwxr-xr-x
2023-04-01 08:44
rmdir
45.54
KB
-rwxr-xr-x
2023-04-01 08:44
rnano
247.94
KB
-rwxr-xr-x
2024-09-24 02:16
rpcbind
61.55
KB
-rwxr-xr-x
2022-10-12 11:00
rpcinfo
32.64
KB
-rwxr-xr-x
2022-10-12 11:00
rpm
20.85
KB
-rwxr-xr-x
2024-12-17 04:11
rpm2archive
20.46
KB
-rwxr-xr-x
2024-12-17 04:11
rpm2cpio
11.84
KB
-rwxr-xr-x
2024-12-17 04:11
rpmdb
16.96
KB
-rwxr-xr-x
2024-12-17 04:11
rpmkeys
16.87
KB
-rwxr-xr-x
2024-12-17 04:11
rpmquery
20.85
KB
-rwxr-xr-x
2024-12-17 04:11
rpmverify
20.85
KB
-rwxr-xr-x
2024-12-17 04:11
rsync
510.15
KB
-rwxr-xr-x
2025-06-03 02:02
rsyslog-recover-qi.pl
5.96
KB
-rwxr-xr-x
2024-11-05 02:34
run-parts
1.94
KB
-rwxr-xr-x
2021-04-08 09:38
run-with-aspell
85
B
-rwxr-xr-x
2022-04-18 15:10
runcon
37.45
KB
-rwxr-xr-x
2023-04-01 08:44
rvi
1.13
MB
-rwxr-xr-x
2025-10-12 00:23
rview
1.13
MB
-rwxr-xr-x
2025-10-12 00:23
sadf
334.57
KB
-rwxr-xr-x
2024-07-03 09:57
sandbox
17.62
KB
-rwxr-xr-x
2024-07-02 21:08
sar
135.77
KB
-rwxr-xr-x
2024-07-03 09:57
sasl2-sample-client
20.84
KB
-rwxr-xr-x
2022-02-23 20:13
sasl2-sample-server
24.7
KB
-rwxr-xr-x
2022-02-23 20:13
sccmap
20.62
KB
-rwxr-xr-x
2024-04-06 12:47
scl
36.87
KB
-rwxr-xr-x
2023-04-01 16:10
scl_enabled
258
B
-rwxr-xr-x
2017-08-25 08:23
scl_source
1.82
KB
-rwxr-xr-x
2023-04-01 16:10
scp
102.84
KB
-rwxr-xr-x
2025-09-30 10:44
screen
482.46
KB
-rwxr-sr-x
2021-05-05 10:04
script
36.79
KB
-rwxr-xr-x
2024-04-06 13:02
scriptreplay
28.99
KB
-rwxr-xr-x
2024-04-06 13:02
scsi-rescan
38.24
KB
-rwxr-xr-x
2022-10-08 11:49
scsi_logging_level
8.38
KB
-rwxr-xr-x
2022-10-08 11:49
scsi_mandat
3.52
KB
-rwxr-xr-x
2022-10-08 11:49
scsi_readcap
1.3
KB
-rwxr-xr-x
2022-10-08 11:49
scsi_ready
1.09
KB
-rwxr-xr-x
2022-10-08 11:49
scsi_satl
3.77
KB
-rwxr-xr-x
2022-10-08 11:49
scsi_start
1.25
KB
-rwxr-xr-x
2022-10-08 11:49
scsi_stop
1.44
KB
-rwxr-xr-x
2022-10-08 11:49
scsi_temperature
936
B
-rwxr-xr-x
2022-10-08 11:49
sdiff
105.33
KB
-rwxr-xr-x
2020-05-04 15:15
sealert
27.27
KB
-rwxr-xr-x
2024-04-06 13:44
secon
25.46
KB
-rwxr-xr-x
2024-07-02 21:04
secret-tool
21.17
KB
-rwxr-xr-x
2019-11-15 09:37
sed
115.48
KB
-rwxr-xr-x
2022-04-18 21:41
sedismod
273.66
KB
-rwxr-xr-x
2019-12-10 17:48
sedispol
198.48
KB
-rwxr-xr-x
2019-12-10 17:48
semodule_expand
12.28
KB
-rwxr-xr-x
2024-07-02 21:04
semodule_link
12.28
KB
-rwxr-xr-x
2024-07-02 21:04
semodule_package
16.68
KB
-rwxr-xr-x
2024-07-02 21:04
semodule_unpackage
12.3
KB
-rwxr-xr-x
2024-07-02 21:04
seq
53.52
KB
-rwxr-xr-x
2023-04-01 08:44
sessreg
17.38
KB
-rwxr-xr-x
2019-10-15 13:08
setarch
20.76
KB
-rwxr-xr-x
2024-04-06 13:02
setfacl
37.65
KB
-rwxr-xr-x
2024-04-06 12:15
setfont
45.19
KB
-rwxr-xr-x
2023-10-14 21:01
setkeycodes
12.56
KB
-rwxr-xr-x
2023-10-14 21:01
setleds
16.6
KB
-rwxr-xr-x
2023-10-14 21:01
setmetamode
12.56
KB
-rwxr-xr-x
2023-10-14 21:01
setpriv
45.15
KB
-rwxr-xr-x
2024-04-06 13:02
setsid
16.38
KB
-rwxr-xr-x
2024-04-06 13:02
setterm
45.12
KB
-rwxr-xr-x
2024-04-06 13:02
setup-nsssysinit
1.5
KB
-rwxr-xr-x
2025-09-09 13:57
setup-nsssysinit.sh
1.5
KB
-rwxr-xr-x
2025-09-09 13:57
setvtrgb
16.64
KB
-rwxr-xr-x
2023-10-14 21:01
sfdp
12.26
KB
-rwxr-xr-x
2024-04-06 12:47
sftp
159.73
KB
-rwxr-xr-x
2025-09-30 10:44
sg
42.45
KB
-rwxr-xr-x
2024-04-06 14:00
sg_bg_ctl
16.07
KB
-rwxr-xr-x
2022-10-08 11:49
sg_compare_and_write
20.9
KB
-rwxr-xr-x
2022-10-08 11:49
sg_copy_results
20.81
KB
-rwxr-xr-x
2022-10-08 11:49
sg_dd
44.58
KB
-rwxr-xr-x
2022-10-08 11:49
sg_decode_sense
20.33
KB
-rwxr-xr-x
2022-10-08 11:49
sg_emc_trespass
12.26
KB
-rwxr-xr-x
2022-10-08 11:49
sg_format
33.37
KB
-rwxr-xr-x
2022-10-08 11:49
sg_get_config
33.31
KB
-rwxr-xr-x
2022-10-08 11:49
sg_get_lba_status
20.46
KB
-rwxr-xr-x
2022-10-08 11:49
sg_ident
16.17
KB
-rwxr-xr-x
2022-10-08 11:49
sg_inq
117.91
KB
-rwxr-xr-x
2022-10-08 11:49
sg_logs
150.02
KB
-rwxr-xr-x
2022-10-08 11:49
sg_luns
24.85
KB
-rwxr-xr-x
2022-10-08 11:49
sg_map
16.41
KB
-rwxr-xr-x
2022-10-08 11:49
sg_map26
24.87
KB
-rwxr-xr-x
2022-10-08 11:49
sg_modes
43.88
KB
-rwxr-xr-x
2022-10-08 11:49
sg_opcodes
28.69
KB
-rwxr-xr-x
2022-10-08 11:49
sg_persist
34.13
KB
-rwxr-xr-x
2022-10-08 11:49
sg_prevent
12.07
KB
-rwxr-xr-x
2022-10-08 11:49
sg_raw
24.38
KB
-rwxr-xr-x
2022-10-08 11:49
sg_rbuf
20.84
KB
-rwxr-xr-x
2022-10-08 11:49
sg_rdac
15.88
KB
-rwxr-xr-x
2022-10-08 11:49
sg_read
24.41
KB
-rwxr-xr-x
2022-10-08 11:49
sg_read_attr
34.79
KB
-rwxr-xr-x
2022-10-08 11:49
sg_read_block_limits
12.12
KB
-rwxr-xr-x
2022-10-08 11:49
sg_read_buffer
20.96
KB
-rwxr-xr-x
2022-10-08 11:49
sg_read_long
16.27
KB
-rwxr-xr-x
2022-10-08 11:49
sg_readcap
20.86
KB
-rwxr-xr-x
2022-10-08 11:49
sg_reassign
16.22
KB
-rwxr-xr-x
2022-10-08 11:49
sg_referrals
16.23
KB
-rwxr-xr-x
2022-10-08 11:49
sg_rep_zones
20.66
KB
-rwxr-xr-x
2022-10-08 11:49
sg_requests
16.3
KB
-rwxr-xr-x
2022-10-08 11:49
sg_reset
16.73
KB
-rwxr-xr-x
2022-10-08 11:49
sg_reset_wp
16.17
KB
-rwxr-xr-x
2022-10-08 11:49
sg_rmsn
12.06
KB
-rwxr-xr-x
2022-10-08 11:49
sg_rtpg
16.16
KB
-rwxr-xr-x
2022-10-08 11:49
sg_safte
20.27
KB
-rwxr-xr-x
2022-10-08 11:49
sg_sanitize
24.58
KB
-rwxr-xr-x
2022-10-08 11:49
sg_sat_identify
16.71
KB
-rwxr-xr-x
2022-10-08 11:49
sg_sat_phy_event
20.59
KB
-rwxr-xr-x
2022-10-08 11:49
sg_sat_read_gplog
16.3
KB
-rwxr-xr-x
2022-10-08 11:49
sg_sat_set_features
16.27
KB
-rwxr-xr-x
2022-10-08 11:49
sg_scan
16.5
KB
-rwxr-xr-x
2022-10-08 11:49
sg_seek
16.85
KB
-rwxr-xr-x
2022-10-08 11:49
sg_senddiag
25.27
KB
-rwxr-xr-x
2022-10-08 11:49
sg_ses
118.23
KB
-rwxr-xr-x
2022-10-08 11:49
sg_ses_microcode
29.48
KB
-rwxr-xr-x
2022-10-08 11:49
sg_start
20.93
KB
-rwxr-xr-x
2022-10-08 11:49
sg_stpg
20.3
KB
-rwxr-xr-x
2022-10-08 11:49
sg_stream_ctl
20.27
KB
-rwxr-xr-x
2022-10-08 11:49
sg_sync
16.22
KB
-rwxr-xr-x
2022-10-08 11:49
sg_test_rwbuf
20.73
KB
-rwxr-xr-x
2022-10-08 11:49
sg_timestamp
20.74
KB
-rwxr-xr-x
2022-10-08 11:49
sg_turs
16.74
KB
-rwxr-xr-x
2022-10-08 11:49
sg_unmap
24.32
KB
-rwxr-xr-x
2022-10-08 11:49
sg_verify
20.46
KB
-rwxr-xr-x
2022-10-08 11:49
sg_vpd
108.75
KB
-rwxr-xr-x
2022-10-08 11:49
sg_wr_mode
20.3
KB
-rwxr-xr-x
2022-10-08 11:49
sg_write_buffer
21.24
KB
-rwxr-xr-x
2022-10-08 11:49
sg_write_long
16.33
KB
-rwxr-xr-x
2022-10-08 11:49
sg_write_same
24.48
KB
-rwxr-xr-x
2022-10-08 11:49
sg_write_verify
20.78
KB
-rwxr-xr-x
2022-10-08 11:49
sg_write_x
53.75
KB
-rwxr-xr-x
2022-10-08 11:49
sg_xcopy
40.59
KB
-rwxr-xr-x
2022-10-08 11:49
sg_zone
16.3
KB
-rwxr-xr-x
2022-10-08 11:49
sginfo
74.85
KB
-rwxr-xr-x
2022-10-08 11:49
sgm_dd
32.55
KB
-rwxr-xr-x
2022-10-08 11:49
sgp_dd
36.95
KB
-rwxr-xr-x
2022-10-08 11:49
sh
1.1
MB
-rwxr-xr-x
2025-08-26 08:48
sha1hmac
32.66
KB
-rwxr-xr-x
2024-03-30 14:16
sha1sum
45.63
KB
-rwxr-xr-x
2023-04-01 08:44
sha224hmac
32.66
KB
-rwxr-xr-x
2024-03-30 14:16
sha224sum
45.66
KB
-rwxr-xr-x
2023-04-01 08:44
sha256hmac
32.66
KB
-rwxr-xr-x
2024-03-30 14:16
sha256sum
45.66
KB
-rwxr-xr-x
2023-04-01 08:44
sha384hmac
32.66
KB
-rwxr-xr-x
2024-03-30 14:16
sha384sum
45.66
KB
-rwxr-xr-x
2023-04-01 08:44
sha512hmac
32.66
KB
-rwxr-xr-x
2024-03-30 14:16
sha512sum
45.66
KB
-rwxr-xr-x
2023-04-01 08:44
shasum
9.66
KB
-rwxr-xr-x
2019-10-14 12:00
showconsolefont
20.73
KB
-rwxr-xr-x
2023-10-14 21:01
showkey
16.58
KB
-rwxr-xr-x
2023-10-14 21:01
showrgb
13.05
KB
-rwxr-xr-x
2019-10-15 13:08
shred
61.94
KB
-rwxr-xr-x
2023-04-01 08:44
shuf
58.16
KB
-rwxr-xr-x
2023-04-01 08:44
signver
114.79
KB
-rwxr-xr-x
2025-09-09 13:57
sim_client
16.28
KB
-rwxr-xr-x
2025-06-03 02:06
size
33.25
KB
-rwxr-xr-x
2025-10-07 06:44
skill
28.8
KB
-rwxr-xr-x
2023-10-14 20:31
slabinfo
36.15
KB
-rwxr-xr-x
2025-10-27 15:46
slabtop
20.84
KB
-rwxr-xr-x
2023-10-14 20:31
sleep
37.47
KB
-rwxr-xr-x
2023-04-01 08:44
slencheck
13.07
KB
-rwxr-xr-x
2019-10-14 21:51
sm3hmac
32.66
KB
-rwxr-xr-x
2024-03-30 14:16
smtpd2.7.py
18.11
KB
-rwxr-xr-x
2024-04-10 04:57
smtpd2.py
18.11
KB
-rwxr-xr-x
2024-04-10 04:57
snice
28.8
KB
-rwxr-xr-x
2023-10-14 20:31
snmpconf
25.44
KB
-rwxr-xr-x
2025-10-07 09:19
socat
406.49
KB
-rwxr-xr-x
2025-07-15 09:33
soelim
42.55
KB
-rwxr-xr-x
2019-10-13 14:29
sort
123.55
KB
-rwxr-xr-x
2023-04-01 08:44
sotruss
4.18
KB
-rwxr-xr-x
2025-08-05 14:01
spell
122
B
-rwxr-xr-x
2022-04-18 15:10
splain
18.7
KB
-rwxr-xr-x
2025-07-28 08:08
split
58.13
KB
-rwxr-xr-x
2023-04-01 08:44
sprof
28.67
KB
-rwxr-xr-x
2025-08-05 14:12
sqlite3
1.28
MB
-rwxr-xr-x
2025-07-29 01:27
sscg
57.14
KB
-rwxr-xr-x
2023-04-02 05:28
ssh
757.52
KB
-rwxr-xr-x
2025-09-30 10:44
ssh-add
346.13
KB
-rwxr-xr-x
2025-09-30 10:44
ssh-agent
325.55
KB
-rwxr-xr-x
2025-09-30 10:44
ssh-copy-id
10.44
KB
-rwxr-xr-x
2025-09-30 10:44
ssh-keygen
427.16
KB
-rwxr-xr-x
2025-09-30 10:44
ssh-keyscan
428.57
KB
-rwxr-xr-x
2025-09-30 10:44
ssltap
130.51
KB
-rwxr-xr-x
2025-09-09 13:57
sss_ssh_authorizedkeys
28.79
KB
-rwxr-xr-x
2025-06-05 19:42
sss_ssh_knownhostsproxy
28.79
KB
-rwxr-xr-x
2025-06-05 19:42
stat
86.23
KB
-rwxr-xr-x
2023-04-01 08:44
stdbuf
49.58
KB
-rwxr-xr-x
2023-04-01 08:44
strace
1.94
MB
-rwxr-xr-x
2025-01-28 01:32
strace-log-merge
1.78
KB
-rwxr-xr-x
2021-02-16 08:00
stream
11.83
KB
-rwxr-xr-x
2025-04-01 13:15
strings
37.43
KB
-rwxr-xr-x
2025-10-07 06:44
strip
240.1
KB
-rwxr-xr-x
2025-10-07 06:44
stty
77.68
KB
-rwxr-xr-x
2023-04-01 08:44
su
48.98
KB
-rwsr-x---
2024-04-06 13:02
sudo
186.52
KB
---s--x--x
2025-08-26 09:02
sudoedit
186.52
KB
---s--x--x
2025-08-26 09:02
sudoreplay
115.2
KB
---x--x--x
2025-08-26 09:02
sum
45.61
KB
-rwxr-xr-x
2023-04-01 08:44
sxpm
28.81
KB
-rwxr-xr-x
2024-03-30 13:53
sync
37.43
KB
-rwxr-xr-x
2023-04-01 08:44
systemctl
218.45
KB
-rwxr-xr-x
2025-04-22 01:58
systemd-analyze
1.55
MB
-rwxr-xr-x
2025-04-22 01:58
systemd-ask-password
12.02
KB
-rwxr-xr-x
2025-04-22 01:58
systemd-cat
16.03
KB
-rwxr-xr-x
2025-04-22 01:58
systemd-cgls
16.44
KB
-rwxr-xr-x
2025-04-22 01:58
systemd-cgtop
32.88
KB
-rwxr-xr-x
2025-04-22 01:58
systemd-delta
24.45
KB
-rwxr-xr-x
2025-04-22 01:58
systemd-detect-virt
11.88
KB
-rwxr-xr-x
2025-04-22 01:58
systemd-escape
16.01
KB
-rwxr-xr-x
2025-04-22 01:58
systemd-firstboot
36.98
KB
-rwxr-xr-x
2025-04-22 01:58
systemd-hwdb
28.91
KB
-rwxr-xr-x
2025-04-22 01:58
systemd-inhibit
16.03
KB
-rwxr-xr-x
2025-04-22 01:58
systemd-machine-id-setup
24.75
KB
-rwxr-xr-x
2025-04-22 01:58
systemd-mount
52.63
KB
-rwxr-xr-x
2025-04-22 01:58
systemd-notify
16.03
KB
-rwxr-xr-x
2025-04-22 01:58
systemd-path
16.02
KB
-rwxr-xr-x
2025-04-22 01:58
systemd-resolve
195.74
KB
-rwxr-xr-x
2025-04-22 01:58
systemd-run
48.94
KB
-rwxr-xr-x
2025-04-22 01:58
systemd-socket-activate
24.77
KB
-rwxr-xr-x
2025-04-22 01:58
systemd-stdio-bridge
16.02
KB
-rwxr-xr-x
2025-04-22 01:58
systemd-sysusers
53.05
KB
-rwxr-xr-x
2025-04-22 01:58
systemd-tmpfiles
73.29
KB
-rwxr-xr-x
2025-04-22 01:58
systemd-tty-ask-password-agent
32.82
KB
-rwxr-xr-x
2025-04-22 01:58
systemd-umount
52.63
KB
-rwxr-xr-x
2025-04-22 01:58
tabs
16.55
KB
-rwxr-xr-x
2023-10-14 18:54
tac
41.57
KB
-rwxr-xr-x
2023-04-01 08:44
tail
74.2
KB
-rwxr-xr-x
2023-04-01 08:44
tapestat
41.32
KB
-rwxr-xr-x
2024-07-03 09:57
tar
448.99
KB
-rwxr-xr-x
2025-08-26 08:57
taskset
37.25
KB
-rwxr-xr-x
2024-04-06 13:02
tbl
154.61
KB
-rwxr-xr-x
2019-10-13 14:29
tcamgr
25.13
KB
-rwxr-xr-x
2019-10-13 01:22
tcamttest
21.16
KB
-rwxr-xr-x
2019-10-13 01:22
tcatest
57.6
KB
-rwxr-xr-x
2019-10-13 01:22
tcbmgr
29.1
KB
-rwxr-xr-x
2019-10-13 01:22
tcbmttest
53.22
KB
-rwxr-xr-x
2019-10-13 01:22
tcbtest
69.56
KB
-rwxr-xr-x
2019-10-13 01:22
tcfmgr
25.09
KB
-rwxr-xr-x
2019-10-13 01:22
tcfmttest
37.2
KB
-rwxr-xr-x
2019-10-13 01:22
tcftest
45.18
KB
-rwxr-xr-x
2019-10-13 01:22
tchmgr
25.09
KB
-rwxr-xr-x
2019-10-13 01:22
tchmttest
49.22
KB
-rwxr-xr-x
2019-10-13 01:22
tchtest
57.53
KB
-rwxr-xr-x
2019-10-13 01:22
tclsh
9.04
KB
-rwxr-xr-x
2019-10-12 00:25
tclsh8.6
9.04
KB
-rwxr-xr-x
2019-10-12 00:25
tcptraceroute
1.55
KB
-rwxr-xr-x
2025-03-11 07:45
tctmgr
37.09
KB
-rwxr-xr-x
2019-10-13 01:22
tctmttest
45.2
KB
-rwxr-xr-x
2019-10-13 01:22
tcttest
57.19
KB
-rwxr-xr-x
2019-10-13 01:22
tcucodec
37.08
KB
-rwxr-xr-x
2019-10-13 01:22
tcumttest
25.16
KB
-rwxr-xr-x
2019-10-13 01:22
tcutest
73.17
KB
-rwxr-xr-x
2019-10-13 01:22
teamd
160.52
KB
-rwxr-xr-x
2023-03-31 20:40
teamdctl
30.37
KB
-rwxr-xr-x
2023-03-31 20:40
teamnl
20.47
KB
-rwxr-xr-x
2023-03-31 20:40
tee
41.55
KB
-rwxr-xr-x
2023-04-01 08:44
test
53.63
KB
-rwxr-xr-x
2023-04-01 08:44
tic
85.31
KB
-rwxr-xr-x
2023-10-14 18:54
timedatectl
36.96
KB
-rwxr-xr-x
2025-04-22 01:58
timeout
41.93
KB
-rwxr-xr-x
2023-04-01 08:44
tload
16.76
KB
-rwxr-xr-x
2023-10-14 20:31
tmon
39.63
KB
-rwxr-xr-x
2025-10-27 15:46
tmpwatch
35.47
KB
-rwxr-xr-x
2019-10-12 11:32
toe
16.45
KB
-rwxr-xr-x
2023-10-14 18:54
top
121.7
KB
-rwxr-xr-x
2023-10-14 20:31
touch
94.02
KB
-rwxr-xr-x
2023-04-01 08:44
tput
24.8
KB
-rwxr-xr-x
2023-10-14 18:54
tr
49.7
KB
-rwxr-xr-x
2023-04-01 08:44
tracepath
20.44
KB
-rwxr-xr-x
2023-10-14 17:19
traceroute
70.97
KB
-rwxr-xr-x
2025-03-11 07:45
traceroute6
70.97
KB
-rwxr-xr-x
2025-03-11 07:45
tred
16.59
KB
-rwxr-xr-x
2024-04-06 12:47
troff
805.02
KB
-rwxr-xr-x
2019-10-13 14:29
true
33.4
KB
-rwxr-xr-x
2023-04-01 08:44
truncate
41.44
KB
-rwxr-xr-x
2023-04-01 08:44
trust
219.55
KB
-rwxr-xr-x
2024-04-06 14:16
tset
24.76
KB
-rwxr-xr-x
2023-10-14 18:54
tsort
41.57
KB
-rwxr-xr-x
2023-04-01 08:44
tty
33.39
KB
-rwxr-xr-x
2023-04-01 08:44
turbostat
130.8
KB
-rwxr-xr-x
2025-10-27 15:46
twopi
12.26
KB
-rwxr-xr-x
2024-04-06 12:47
type
28
B
-rwxr-xr-x
2025-08-26 08:48
tzselect
15.01
KB
-rwxr-xr-x
2025-08-05 14:01
uapi
3.18
MB
-rwxr-xr-x
2025-10-16 18:06
ucs2any
24.41
KB
-rwxr-xr-x
2021-10-09 23:42
udevadm
424.59
KB
-rwxr-xr-x
2025-04-22 01:58
ul
20.58
KB
-rwxr-xr-x
2024-04-06 13:02
ulimit
30
B
-rwxr-xr-x
2025-08-26 08:48
umask
29
B
-rwxr-xr-x
2025-08-26 08:48
umount
32.75
KB
-rwxr-xr-x
2024-04-06 13:02
unalias
31
B
-rwxr-xr-x
2025-08-26 08:48
uname
37.41
KB
-rwxr-xr-x
2023-04-01 08:44
uname26
20.76
KB
-rwxr-xr-x
2024-04-06 13:02
unexpand
45.68
KB
-rwxr-xr-x
2023-04-01 08:44
unflatten
16.63
KB
-rwxr-xr-x
2024-04-06 12:47
unicode_start
2.55
KB
-rwxr-xr-x
2023-10-14 20:59
unicode_stop
363
B
-rwxr-xr-x
2023-10-14 20:59
uniq
49.72
KB
-rwxr-xr-x
2023-04-01 08:44
unlink
33.41
KB
-rwxr-xr-x
2023-04-01 08:44
unpigz
125.38
KB
-rwxr-xr-x
2020-06-01 15:15
unshare
24.92
KB
-rwxr-xr-x
2024-04-06 13:02
unversioned-python
157
B
-rwxr-xr-x
2025-08-26 09:08
unxz
82.09
KB
-rwxr-xr-x
2022-06-14 13:03
unzip
201.88
KB
-rwxr-xr-x
2025-06-03 02:10
unzipsfx
101.48
KB
-rwxr-xr-x
2025-06-03 02:10
update-ca-trust
1.24
KB
-rwxr-xr-x
2024-08-21 19:16
update-crypto-policies
87
B
-rwxr-xr-x
2023-08-01 15:18
update-gtk-immodules
313
B
-rwxr-xr-x
2021-04-06 13:52
update-mime-database
57.22
KB
-rwxr-xr-x
2024-04-06 14:07
uptime
12.59
KB
-rwxr-xr-x
2023-10-14 20:31
users
37.47
KB
-rwxr-xr-x
2023-04-01 08:44
usleep
11.85
KB
-rwxr-xr-x
2022-10-08 11:08
utmpdump
28.66
KB
-rwxr-xr-x
2024-04-06 13:02
uuclient
15.88
KB
-rwxr-xr-x
2025-06-03 02:06
uuidgen
16.37
KB
-rwxr-xr-x
2024-04-06 13:02
uuidparse
37.13
KB
-rwxr-xr-x
2024-04-06 13:02
varnishadm
69.06
KB
-rwxr-xr-x
2025-06-04 10:25
varnishhist
40.39
KB
-rwxr-xr-x
2025-06-04 10:25
varnishlog
30.12
KB
-rwxr-xr-x
2025-06-04 10:25
varnishncsa
56.12
KB
-rwxr-xr-x
2025-06-04 10:25
varnishstat
42.95
KB
-rwxr-xr-x
2025-06-04 10:25
varnishtest
540.7
KB
-rwxr-xr-x
2025-06-04 10:25
varnishtop
39.73
KB
-rwxr-xr-x
2025-06-04 10:25
vdir
139.97
KB
-rwxr-xr-x
2023-04-01 08:44
vi
1.13
MB
-rwxr-xr-x
2025-10-12 00:23
view
1.13
MB
-rwxr-xr-x
2025-10-12 00:23
vimdot
1.06
KB
-rwxr-xr-x
2024-04-06 12:47
vlock
20.83
KB
-rwxr-xr-x
2023-10-14 21:01
vmstat
36.79
KB
-rwxr-xr-x
2023-10-14 20:31
w
20.75
KB
-rwxr-xr-x
2023-10-14 20:31
wait
28
B
-rwxr-xr-x
2025-08-26 08:48
wall
33.05
KB
-rwxr-xr-x
2024-04-06 13:02
watch
29.19
KB
-rwxr-xr-x
2023-10-14 20:31
watchgnupg
16.43
KB
-rwxr-xr-x
2022-09-13 10:15
wc
49.72
KB
-rwxr-xr-x
2023-04-01 08:44
wdctl
36.98
KB
-rwxr-xr-x
2024-04-06 13:02
wget
521.41
KB
-rwxr-xr-x
2024-08-13 22:22
whatis
54.04
KB
-rwxr-xr-x
2021-10-08 13:04
whereis
29.27
KB
-rwxr-xr-x
2024-04-06 13:02
which
29.38
KB
-rwxr-xr-x
2025-08-26 08:54
whiptail
33.09
KB
-rwxr-xr-x
2020-06-01 14:11
who
53.68
KB
-rwxr-xr-x
2023-04-01 08:44
whoami
33.41
KB
-rwxr-xr-x
2023-04-01 08:44
wish
13.05
KB
-rwxr-xr-x
2019-10-16 17:25
wish8.6
13.05
KB
-rwxr-xr-x
2019-10-16 17:25
wmf2eps
17.15
KB
-rwxr-xr-x
2019-10-14 15:47
wmf2fig
17.15
KB
-rwxr-xr-x
2019-10-14 15:47
wmf2gd
17.14
KB
-rwxr-xr-x
2019-10-14 15:47
wmf2svg
17.16
KB
-rwxr-xr-x
2019-10-14 15:47
wmf2x
17.13
KB
-rwxr-xr-x
2019-10-14 15:47
word-list-compress
11.99
KB
-rwxr-xr-x
2022-04-18 15:10
write
20.62
KB
-rwxr-xr-x
2024-04-06 13:02
x86_64
20.76
KB
-rwxr-xr-x
2024-04-06 13:02
x86_64-redhat-linux-c++
1.21
MB
-rwxr-xr-x
2025-08-26 09:47
x86_64-redhat-linux-g++
1.21
MB
-rwxr-xr-x
2025-08-26 09:47
x86_64-redhat-linux-gcc
1.21
MB
-rwxr-xr-x
2025-08-26 09:47
x86_64-redhat-linux-gcc-8
1.21
MB
-rwxr-xr-x
2025-08-26 09:47
x86_64-redhat-linux-gnu-pkg-config
424
B
-rwxr-xr-x
2019-10-13 06:57
x86_energy_perf_policy
31.95
KB
-rwxr-xr-x
2025-10-27 15:46
xargs
74.11
KB
-rwxr-xr-x
2024-09-24 02:19
xgamma
17.08
KB
-rwxr-xr-x
2019-10-15 13:08
xgettext
283.88
KB
-rwxr-xr-x
2019-11-18 17:17
xhost
17.12
KB
-rwxr-xr-x
2019-10-15 13:08
xinput
63.61
KB
-rwxr-xr-x
2019-10-15 13:08
xkill
17.1
KB
-rwxr-xr-x
2019-10-15 13:08
xml2-config
1.71
KB
-rwxr-xr-x
2017-07-23 05:10
xmlcatalog
20.38
KB
-rwxr-xr-x
2025-08-06 13:59
xmllint
73.37
KB
-rwxr-xr-x
2025-08-06 13:59
xmlwf
32.96
KB
-rwxr-xr-x
2025-04-15 19:58
xmodmap
39.98
KB
-rwxr-xr-x
2019-10-15 13:08
xorg-x11-fonts-update-dirs
1.29
KB
-rwxr--r--
2021-10-09 23:42
xrandr
65.46
KB
-rwxr-xr-x
2019-10-15 13:08
xrdb
33.98
KB
-rwxr-xr-x
2019-10-15 13:08
xrefresh
17.94
KB
-rwxr-xr-x
2019-10-15 13:08
xset
37.2
KB
-rwxr-xr-x
2019-10-15 13:08
xsetpointer
13.05
KB
-rwxr-xr-x
2019-10-15 13:08
xsetroot
21.44
KB
-rwxr-xr-x
2019-10-15 13:08
xslt-config
2.36
KB
-rwxr-xr-x
2015-05-10 14:11
xsltproc
28.47
KB
-rwxr-xr-x
2025-08-26 08:55
xstdcmap
17.68
KB
-rwxr-xr-x
2019-10-15 13:08
xsubpp
4.96
KB
-rwxr-xr-x
2019-10-13 08:58
xz
82.09
KB
-rwxr-xr-x
2022-06-14 13:03
xzcat
82.09
KB
-rwxr-xr-x
2022-06-14 13:03
xzcmp
6.48
KB
-rwxr-xr-x
2022-06-14 13:03
xzdec
16.48
KB
-rwxr-xr-x
2022-06-14 13:03
xzdiff
6.48
KB
-rwxr-xr-x
2022-06-14 13:03
xzegrep
5.76
KB
-rwxr-xr-x
2022-06-14 13:03
xzfgrep
5.76
KB
-rwxr-xr-x
2022-06-14 13:03
xzgrep
5.76
KB
-rwxr-xr-x
2022-06-14 13:03
xzless
1.76
KB
-rwxr-xr-x
2022-06-14 13:03
xzmore
2.11
KB
-rwxr-xr-x
2022-06-14 13:03
yat2m
33.34
KB
-rwxr-xr-x
2019-10-12 12:20
yes
33.45
KB
-rwxr-xr-x
2023-04-01 08:44
ypdomainname
21.16
KB
-rwxr-xr-x
2019-10-11 13:06
yum
2.05
KB
-rwxr-xr-x
2025-03-11 09:47
yum-builddep
3.62
KB
-rwxr-xr-x
2024-04-08 10:02
yum-config-manager
3.62
KB
-rwxr-xr-x
2024-04-08 10:02
yum-debug-dump
3.62
KB
-rwxr-xr-x
2024-04-08 10:02
yum-debug-restore
3.62
KB
-rwxr-xr-x
2024-04-08 10:02
yum-groups-manager
3.62
KB
-rwxr-xr-x
2024-04-08 10:02
yumdownloader
3.62
KB
-rwxr-xr-x
2024-04-08 10:02
zcat
1.94
KB
-rwxr-xr-x
2022-04-27 05:49
zcmp
1.64
KB
-rwxr-xr-x
2022-04-27 05:49
zdiff
5.74
KB
-rwxr-xr-x
2022-04-27 05:49
zegrep
29
B
-rwxr-xr-x
2022-04-27 05:49
zfgrep
29
B
-rwxr-xr-x
2022-04-27 05:49
zforce
2.03
KB
-rwxr-xr-x
2022-04-27 05:49
zgrep
7.4
KB
-rwxr-xr-x
2022-04-27 05:49
zip
229
KB
-rwxr-xr-x
2019-10-11 13:11
zipcloak
102.91
KB
-rwxr-xr-x
2019-10-11 13:11
zipdetails
49.39
KB
-rwxr-xr-x
2019-10-13 09:48
zipgrep
2.88
KB
-rwxr-xr-x
2008-10-10 17:40
zipinfo
201.88
KB
-rwxr-xr-x
2025-06-03 02:10
zipnote
97.76
KB
-rwxr-xr-x
2019-10-11 13:11
zipsplit
97.76
KB
-rwxr-xr-x
2019-10-11 13:11
zless
2.15
KB
-rwxr-xr-x
2022-04-27 05:49
zlib_decompress
6.16
MB
-rwxr-xr-x
2024-06-13 12:01
zmore
1.8
KB
-rwxr-xr-x
2022-04-27 05:49
znew
4.45
KB
-rwxr-xr-x
2022-04-27 05:49
zone2json
1.38
MB
-rwxr-xr-x
2025-05-12 18:42
zone2sql
1.4
MB
-rwxr-xr-x
2025-05-12 18:42
zsoelim
42.55
KB
-rwxr-xr-x
2019-10-13 14:29
Save
Rename
#! /usr/libexec/platform-python # # Copyright (c) 2005-2007 Niels Provos <provos@citi.umich.edu> # Copyright (c) 2007-2012 Niels Provos and Nick Mathewson # All rights reserved. # # Generates marshaling code based on libevent. # TODO: # 1) use optparse to allow the strategy shell to parse options, and # to allow the instantiated factory (for the specific output language) # to parse remaining options # 2) move the globals into a class that manages execution (including the # progress outputs that space stderr at the moment) # 3) emit other languages import sys import re _NAME = "event_rpcgen.py" _VERSION = "0.1" # Globals line_count = 0 white = re.compile(r'\s+') cppcomment = re.compile(r'\/\/.*$') nonident = re.compile(r'[^a-zA-Z0-9_]') structref = re.compile(r'^struct\[([a-zA-Z_][a-zA-Z0-9_]*)\]$') structdef = re.compile(r'^struct +[a-zA-Z_][a-zA-Z0-9_]* *{$') headerdirect = [] cppdirect = [] QUIETLY = 0 def declare(s): if not QUIETLY: print(s) def TranslateList(mylist, mydict): return [x % mydict for x in mylist] # Exception class for parse errors class RpcGenError(Exception): def __init__(self, why): self.why = why def __str__(self): return str(self.why) # Holds everything that makes a struct class Struct: def __init__(self, name): self._name = name self._entries = [] self._tags = {} declare(' Created struct: %s' % name) def AddEntry(self, entry): if entry.Tag() in self._tags: raise RpcGenError( 'Entry "%s" duplicates tag number %d from "%s" ' 'around line %d' % (entry.Name(), entry.Tag(), self._tags[entry.Tag()], line_count)) self._entries.append(entry) self._tags[entry.Tag()] = entry.Name() declare(' Added entry: %s' % entry.Name()) def Name(self): return self._name def EntryTagName(self, entry): """Creates the name inside an enumeration for distinguishing data types.""" name = "%s_%s" % (self._name, entry.Name()) return name.upper() def PrintIndented(self, file, ident, code): """Takes an array, add indentation to each entry and prints it.""" for entry in code: file.write('%s%s\n' % (ident, entry)) class StructCCode(Struct): """ Knows how to generate C code for a struct """ def __init__(self, name): Struct.__init__(self, name) def PrintTags(self, file): """Prints the tag definitions for a structure.""" file.write('/* Tag definition for %s */\n' % self._name) file.write('enum %s_ {\n' % self._name.lower()) for entry in self._entries: file.write(' %s=%d,\n' % (self.EntryTagName(entry), entry.Tag())) file.write(' %s_MAX_TAGS\n' % (self._name.upper())) file.write('};\n\n') def PrintForwardDeclaration(self, file): file.write('struct %s;\n' % self._name) def PrintDeclaration(self, file): file.write('/* Structure declaration for %s */\n' % self._name) file.write('struct %s_access_ {\n' % self._name) for entry in self._entries: dcl = entry.AssignDeclaration('(*%s_assign)' % entry.Name()) dcl.extend( entry.GetDeclaration('(*%s_get)' % entry.Name())) if entry.Array(): dcl.extend( entry.AddDeclaration('(*%s_add)' % entry.Name())) self.PrintIndented(file, ' ', dcl) file.write('};\n\n') file.write('struct %s {\n' % self._name) file.write(' struct %s_access_ *base;\n\n' % self._name) for entry in self._entries: dcl = entry.Declaration() self.PrintIndented(file, ' ', dcl) file.write('\n') for entry in self._entries: file.write(' ev_uint8_t %s_set;\n' % entry.Name()) file.write('};\n\n') file.write("""struct %(name)s *%(name)s_new(void); struct %(name)s *%(name)s_new_with_arg(void *); void %(name)s_free(struct %(name)s *); void %(name)s_clear(struct %(name)s *); void %(name)s_marshal(struct evbuffer *, const struct %(name)s *); int %(name)s_unmarshal(struct %(name)s *, struct evbuffer *); int %(name)s_complete(struct %(name)s *); void evtag_marshal_%(name)s(struct evbuffer *, ev_uint32_t, const struct %(name)s *); int evtag_unmarshal_%(name)s(struct evbuffer *, ev_uint32_t, struct %(name)s *);\n""" % { 'name' : self._name }) # Write a setting function of every variable for entry in self._entries: self.PrintIndented(file, '', entry.AssignDeclaration( entry.AssignFuncName())) self.PrintIndented(file, '', entry.GetDeclaration( entry.GetFuncName())) if entry.Array(): self.PrintIndented(file, '', entry.AddDeclaration( entry.AddFuncName())) file.write('/* --- %s done --- */\n\n' % self._name) def PrintCode(self, file): file.write(('/*\n' ' * Implementation of %s\n' ' */\n\n') % self._name) file.write('static struct %(name)s_access_ %(name)s_base__ = {\n' % \ { 'name' : self._name }) for entry in self._entries: self.PrintIndented(file, ' ', entry.CodeBase()) file.write('};\n\n') # Creation file.write(( 'struct %(name)s *\n' '%(name)s_new(void)\n' '{\n' ' return %(name)s_new_with_arg(NULL);\n' '}\n' '\n' 'struct %(name)s *\n' '%(name)s_new_with_arg(void *unused)\n' '{\n' ' struct %(name)s *tmp;\n' ' if ((tmp = malloc(sizeof(struct %(name)s))) == NULL) {\n' ' event_warn("%%s: malloc", __func__);\n' ' return (NULL);\n' ' }\n' ' tmp->base = &%(name)s_base__;\n\n') % { 'name' : self._name }) for entry in self._entries: self.PrintIndented(file, ' ', entry.CodeInitialize('tmp')) file.write(' tmp->%s_set = 0;\n\n' % entry.Name()) file.write(( ' return (tmp);\n' '}\n\n')) # Adding for entry in self._entries: if entry.Array(): self.PrintIndented(file, '', entry.CodeAdd()) file.write('\n') # Assigning for entry in self._entries: self.PrintIndented(file, '', entry.CodeAssign()) file.write('\n') # Getting for entry in self._entries: self.PrintIndented(file, '', entry.CodeGet()) file.write('\n') # Clearing file.write(( 'void\n' '%(name)s_clear(struct %(name)s *tmp)\n' '{' '\n') % { 'name' : self._name }) for entry in self._entries: self.PrintIndented(file, ' ', entry.CodeClear('tmp')) file.write('}\n\n') # Freeing file.write(( 'void\n' '%(name)s_free(struct %(name)s *tmp)\n' '{' '\n') % { 'name' : self._name }) for entry in self._entries: self.PrintIndented(file, ' ', entry.CodeFree('tmp')) file.write((' free(tmp);\n' '}\n\n')) # Marshaling file.write(('void\n' '%(name)s_marshal(struct evbuffer *evbuf, ' 'const struct %(name)s *tmp)' '{\n') % { 'name' : self._name }) for entry in self._entries: indent = ' ' # Optional entries do not have to be set if entry.Optional(): indent += ' ' file.write(' if (tmp->%s_set) {\n' % entry.Name()) self.PrintIndented( file, indent, entry.CodeMarshal('evbuf', self.EntryTagName(entry), entry.GetVarName('tmp'), entry.GetVarLen('tmp'))) if entry.Optional(): file.write(' }\n') file.write('}\n\n') # Unmarshaling file.write(('int\n' '%(name)s_unmarshal(struct %(name)s *tmp, ' ' struct evbuffer *evbuf)\n' '{\n' ' ev_uint32_t tag;\n' ' while (evbuffer_get_length(evbuf) > 0) {\n' ' if (evtag_peek(evbuf, &tag) == -1)\n' ' return (-1);\n' ' switch (tag) {\n' '\n') % { 'name' : self._name }) for entry in self._entries: file.write(' case %s:\n' % self.EntryTagName(entry)) if not entry.Array(): file.write(( ' if (tmp->%s_set)\n' ' return (-1);' '\n') % (entry.Name())) self.PrintIndented( file, ' ', entry.CodeUnmarshal('evbuf', self.EntryTagName(entry), entry.GetVarName('tmp'), entry.GetVarLen('tmp'))) file.write(( ' tmp->%s_set = 1;\n' % entry.Name() + ' break;\n' )) file.write(( ' default:\n' ' return -1;\n' ' }\n' ' }\n\n' )) # Check if it was decoded completely file.write(( ' if (%(name)s_complete(tmp) == -1)\n' ' return (-1);' '\n') % { 'name' : self._name }) # Successfully decoded file.write(( ' return (0);\n' '}\n\n')) # Checking if a structure has all the required data file.write(( 'int\n' '%(name)s_complete(struct %(name)s *msg)\n' '{\n' ) % { 'name' : self._name }) for entry in self._entries: if not entry.Optional(): code = [ 'if (!msg->%(name)s_set)', ' return (-1);' ] code = TranslateList(code, entry.GetTranslation()) self.PrintIndented( file, ' ', code) self.PrintIndented( file, ' ', entry.CodeComplete('msg', entry.GetVarName('msg'))) file.write(( ' return (0);\n' '}\n\n' )) # Complete message unmarshaling file.write(( 'int\n' 'evtag_unmarshal_%(name)s(struct evbuffer *evbuf, ' 'ev_uint32_t need_tag, struct %(name)s *msg)\n' '{\n' ' ev_uint32_t tag;\n' ' int res = -1;\n' '\n' ' struct evbuffer *tmp = evbuffer_new();\n' '\n' ' if (evtag_unmarshal(evbuf, &tag, tmp) == -1' ' || tag != need_tag)\n' ' goto error;\n' '\n' ' if (%(name)s_unmarshal(msg, tmp) == -1)\n' ' goto error;\n' '\n' ' res = 0;\n' '\n' ' error:\n' ' evbuffer_free(tmp);\n' ' return (res);\n' '}\n\n' ) % { 'name' : self._name }) # Complete message marshaling file.write(( 'void\n' 'evtag_marshal_%(name)s(struct evbuffer *evbuf, ev_uint32_t tag, ' 'const struct %(name)s *msg)\n' '{\n' ' struct evbuffer *buf_ = evbuffer_new();\n' ' assert(buf_ != NULL);\n' ' %(name)s_marshal(buf_, msg);\n' ' evtag_marshal_buffer(evbuf, tag, buf_);\n ' ' evbuffer_free(buf_);\n' '}\n\n' ) % { 'name' : self._name }) class Entry: def __init__(self, type, name, tag): self._type = type self._name = name self._tag = int(tag) self._ctype = type self._optional = 0 self._can_be_array = 0 self._array = 0 self._line_count = -1 self._struct = None self._refname = None self._optpointer = True self._optaddarg = True def GetInitializer(self): assert 0, "Entry does not provide initializer" def SetStruct(self, struct): self._struct = struct def LineCount(self): assert self._line_count != -1 return self._line_count def SetLineCount(self, number): self._line_count = number def Array(self): return self._array def Optional(self): return self._optional def Tag(self): return self._tag def Name(self): return self._name def Type(self): return self._type def MakeArray(self, yes=1): self._array = yes def MakeOptional(self): self._optional = 1 def Verify(self): if self.Array() and not self._can_be_array: raise RpcGenError( 'Entry "%s" cannot be created as an array ' 'around line %d' % (self._name, self.LineCount())) if not self._struct: raise RpcGenError( 'Entry "%s" does not know which struct it belongs to ' 'around line %d' % (self._name, self.LineCount())) if self._optional and self._array: raise RpcGenError( 'Entry "%s" has illegal combination of optional and array ' 'around line %d' % (self._name, self.LineCount())) def GetTranslation(self, extradict = {}): mapping = { "parent_name" : self._struct.Name(), "name" : self._name, "ctype" : self._ctype, "refname" : self._refname, "optpointer" : self._optpointer and "*" or "", "optreference" : self._optpointer and "&" or "", "optaddarg" : self._optaddarg and ", const %s value" % self._ctype or "" } for (k, v) in list(extradict.items()): mapping[k] = v return mapping def GetVarName(self, var): return '%(var)s->%(name)s_data' % self.GetTranslation({ 'var' : var }) def GetVarLen(self, var): return 'sizeof(%s)' % self._ctype def GetFuncName(self): return '%s_%s_get' % (self._struct.Name(), self._name) def GetDeclaration(self, funcname): code = [ 'int %s(struct %s *, %s *);' % ( funcname, self._struct.Name(), self._ctype ) ] return code def CodeGet(self): code = ( 'int', '%(parent_name)s_%(name)s_get(struct %(parent_name)s *msg, ' '%(ctype)s *value)', '{', ' if (msg->%(name)s_set != 1)', ' return (-1);', ' *value = msg->%(name)s_data;', ' return (0);', '}' ) code = '\n'.join(code) code = code % self.GetTranslation() return code.split('\n') def AssignFuncName(self): return '%s_%s_assign' % (self._struct.Name(), self._name) def AddFuncName(self): return '%s_%s_add' % (self._struct.Name(), self._name) def AssignDeclaration(self, funcname): code = [ 'int %s(struct %s *, const %s);' % ( funcname, self._struct.Name(), self._ctype ) ] return code def CodeAssign(self): code = [ 'int', '%(parent_name)s_%(name)s_assign(struct %(parent_name)s *msg,' ' const %(ctype)s value)', '{', ' msg->%(name)s_set = 1;', ' msg->%(name)s_data = value;', ' return (0);', '}' ] code = '\n'.join(code) code = code % self.GetTranslation() return code.split('\n') def CodeClear(self, structname): code = [ '%s->%s_set = 0;' % (structname, self.Name()) ] return code def CodeComplete(self, structname, var_name): return [] def CodeFree(self, name): return [] def CodeBase(self): code = [ '%(parent_name)s_%(name)s_assign,', '%(parent_name)s_%(name)s_get,' ] if self.Array(): code.append('%(parent_name)s_%(name)s_add,') code = '\n'.join(code) code = code % self.GetTranslation() return code.split('\n') class EntryBytes(Entry): def __init__(self, type, name, tag, length): # Init base class Entry.__init__(self, type, name, tag) self._length = length self._ctype = 'ev_uint8_t' def GetInitializer(self): return "NULL" def GetVarLen(self, var): return '(%s)' % self._length def CodeArrayAdd(self, varname, value): # XXX: copy here return [ '%(varname)s = NULL;' % { 'varname' : varname } ] def GetDeclaration(self, funcname): code = [ 'int %s(struct %s *, %s **);' % ( funcname, self._struct.Name(), self._ctype ) ] return code def AssignDeclaration(self, funcname): code = [ 'int %s(struct %s *, const %s *);' % ( funcname, self._struct.Name(), self._ctype ) ] return code def Declaration(self): dcl = ['ev_uint8_t %s_data[%s];' % (self._name, self._length)] return dcl def CodeGet(self): name = self._name code = [ 'int', '%s_%s_get(struct %s *msg, %s **value)' % ( self._struct.Name(), name, self._struct.Name(), self._ctype), '{', ' if (msg->%s_set != 1)' % name, ' return (-1);', ' *value = msg->%s_data;' % name, ' return (0);', '}' ] return code def CodeAssign(self): name = self._name code = [ 'int', '%s_%s_assign(struct %s *msg, const %s *value)' % ( self._struct.Name(), name, self._struct.Name(), self._ctype), '{', ' msg->%s_set = 1;' % name, ' memcpy(msg->%s_data, value, %s);' % ( name, self._length), ' return (0);', '}' ] return code def CodeUnmarshal(self, buf, tag_name, var_name, var_len): code = [ 'if (evtag_unmarshal_fixed(%(buf)s, %(tag)s, ' '%(var)s, %(varlen)s) == -1) {', ' event_warnx("%%s: failed to unmarshal %(name)s", __func__);', ' return (-1);', '}' ] return TranslateList(code, self.GetTranslation({ 'var' : var_name, 'varlen' : var_len, 'buf' : buf, 'tag' : tag_name })) def CodeMarshal(self, buf, tag_name, var_name, var_len): code = ['evtag_marshal(%s, %s, %s, %s);' % ( buf, tag_name, var_name, var_len)] return code def CodeClear(self, structname): code = [ '%s->%s_set = 0;' % (structname, self.Name()), 'memset(%s->%s_data, 0, sizeof(%s->%s_data));' % ( structname, self._name, structname, self._name)] return code def CodeInitialize(self, name): code = ['memset(%s->%s_data, 0, sizeof(%s->%s_data));' % ( name, self._name, name, self._name)] return code def Verify(self): if not self._length: raise RpcGenError( 'Entry "%s" needs a length ' 'around line %d' % (self._name, self.LineCount())) Entry.Verify(self) class EntryInt(Entry): def __init__(self, type, name, tag, bits=32): # Init base class Entry.__init__(self, type, name, tag) self._can_be_array = 1 if bits == 32: self._ctype = 'ev_uint32_t' self._marshal_type = 'int' if bits == 64: self._ctype = 'ev_uint64_t' self._marshal_type = 'int64' def GetInitializer(self): return "0" def CodeArrayFree(self, var): return [] def CodeArrayAssign(self, varname, srcvar): return [ '%(varname)s = %(srcvar)s;' % { 'varname' : varname, 'srcvar' : srcvar } ] def CodeArrayAdd(self, varname, value): """Returns a new entry of this type.""" return [ '%(varname)s = %(value)s;' % { 'varname' : varname, 'value' : value } ] def CodeUnmarshal(self, buf, tag_name, var_name, var_len): code = [ 'if (evtag_unmarshal_%(ma)s(%(buf)s, %(tag)s, &%(var)s) == -1) {', ' event_warnx("%%s: failed to unmarshal %(name)s", __func__);', ' return (-1);', '}' ] code = '\n'.join(code) % self.GetTranslation({ 'ma' : self._marshal_type, 'buf' : buf, 'tag' : tag_name, 'var' : var_name }) return code.split('\n') def CodeMarshal(self, buf, tag_name, var_name, var_len): code = [ 'evtag_marshal_%s(%s, %s, %s);' % ( self._marshal_type, buf, tag_name, var_name)] return code def Declaration(self): dcl = ['%s %s_data;' % (self._ctype, self._name)] return dcl def CodeInitialize(self, name): code = ['%s->%s_data = 0;' % (name, self._name)] return code class EntryString(Entry): def __init__(self, type, name, tag): # Init base class Entry.__init__(self, type, name, tag) self._can_be_array = 1 self._ctype = 'char *' def GetInitializer(self): return "NULL" def CodeArrayFree(self, varname): code = [ 'if (%(var)s != NULL) free(%(var)s);' ] return TranslateList(code, { 'var' : varname }) def CodeArrayAssign(self, varname, srcvar): code = [ 'if (%(var)s != NULL)', ' free(%(var)s);', '%(var)s = strdup(%(srcvar)s);', 'if (%(var)s == NULL) {', ' event_warnx("%%s: strdup", __func__);', ' return (-1);', '}' ] return TranslateList(code, { 'var' : varname, 'srcvar' : srcvar }) def CodeArrayAdd(self, varname, value): code = [ 'if (%(value)s != NULL) {', ' %(var)s = strdup(%(value)s);', ' if (%(var)s == NULL) {', ' goto error;', ' }', '} else {', ' %(var)s = NULL;', '}' ] return TranslateList(code, { 'var' : varname, 'value' : value }) def GetVarLen(self, var): return 'strlen(%s)' % self.GetVarName(var) def CodeMakeInitalize(self, varname): return '%(varname)s = NULL;' % { 'varname' : varname } def CodeAssign(self): name = self._name code = """int %(parent_name)s_%(name)s_assign(struct %(parent_name)s *msg, const %(ctype)s value) { if (msg->%(name)s_data != NULL) free(msg->%(name)s_data); if ((msg->%(name)s_data = strdup(value)) == NULL) return (-1); msg->%(name)s_set = 1; return (0); }""" % self.GetTranslation() return code.split('\n') def CodeUnmarshal(self, buf, tag_name, var_name, var_len): code = ['if (evtag_unmarshal_string(%(buf)s, %(tag)s, &%(var)s) == -1) {', ' event_warnx("%%s: failed to unmarshal %(name)s", __func__);', ' return (-1);', '}' ] code = '\n'.join(code) % self.GetTranslation({ 'buf' : buf, 'tag' : tag_name, 'var' : var_name }) return code.split('\n') def CodeMarshal(self, buf, tag_name, var_name, var_len): code = ['evtag_marshal_string(%s, %s, %s);' % ( buf, tag_name, var_name)] return code def CodeClear(self, structname): code = [ 'if (%s->%s_set == 1) {' % (structname, self.Name()), ' free(%s->%s_data);' % (structname, self.Name()), ' %s->%s_data = NULL;' % (structname, self.Name()), ' %s->%s_set = 0;' % (structname, self.Name()), '}' ] return code def CodeInitialize(self, name): code = ['%s->%s_data = NULL;' % (name, self._name)] return code def CodeFree(self, name): code = ['if (%s->%s_data != NULL)' % (name, self._name), ' free (%s->%s_data);' % (name, self._name)] return code def Declaration(self): dcl = ['char *%s_data;' % self._name] return dcl class EntryStruct(Entry): def __init__(self, type, name, tag, refname): # Init base class Entry.__init__(self, type, name, tag) self._optpointer = False self._can_be_array = 1 self._refname = refname self._ctype = 'struct %s*' % refname self._optaddarg = False def GetInitializer(self): return "NULL" def GetVarLen(self, var): return '-1' def CodeArrayAdd(self, varname, value): code = [ '%(varname)s = %(refname)s_new();', 'if (%(varname)s == NULL)', ' goto error;' ] return TranslateList(code, self.GetTranslation({ 'varname' : varname })) def CodeArrayFree(self, var): code = [ '%(refname)s_free(%(var)s);' % self.GetTranslation( { 'var' : var }) ] return code def CodeArrayAssign(self, var, srcvar): code = [ 'int had_error = 0;', 'struct evbuffer *tmp = NULL;', '%(refname)s_clear(%(var)s);', 'if ((tmp = evbuffer_new()) == NULL) {', ' event_warn("%%s: evbuffer_new()", __func__);', ' had_error = 1;', ' goto done;', '}', '%(refname)s_marshal(tmp, %(srcvar)s);', 'if (%(refname)s_unmarshal(%(var)s, tmp) == -1) {', ' event_warnx("%%s: %(refname)s_unmarshal", __func__);', ' had_error = 1;', ' goto done;', '}', 'done:' 'if (tmp != NULL)', ' evbuffer_free(tmp);', 'if (had_error) {', ' %(refname)s_clear(%(var)s);', ' return (-1);', '}' ] return TranslateList(code, self.GetTranslation({ 'var' : var, 'srcvar' : srcvar})) def CodeGet(self): name = self._name code = [ 'int', '%s_%s_get(struct %s *msg, %s *value)' % ( self._struct.Name(), name, self._struct.Name(), self._ctype), '{', ' if (msg->%s_set != 1) {' % name, ' msg->%s_data = %s_new();' % (name, self._refname), ' if (msg->%s_data == NULL)' % name, ' return (-1);', ' msg->%s_set = 1;' % name, ' }', ' *value = msg->%s_data;' % name, ' return (0);', '}' ] return code def CodeAssign(self): name = self._name code = """int %(parent_name)s_%(name)s_assign(struct %(parent_name)s *msg, const %(ctype)s value) { struct evbuffer *tmp = NULL; if (msg->%(name)s_set) { %(refname)s_clear(msg->%(name)s_data); msg->%(name)s_set = 0; } else { msg->%(name)s_data = %(refname)s_new(); if (msg->%(name)s_data == NULL) { event_warn("%%s: %(refname)s_new()", __func__); goto error; } } if ((tmp = evbuffer_new()) == NULL) { event_warn("%%s: evbuffer_new()", __func__); goto error; } %(refname)s_marshal(tmp, value); if (%(refname)s_unmarshal(msg->%(name)s_data, tmp) == -1) { event_warnx("%%s: %(refname)s_unmarshal", __func__); goto error; } msg->%(name)s_set = 1; evbuffer_free(tmp); return (0); error: if (tmp != NULL) evbuffer_free(tmp); if (msg->%(name)s_data != NULL) { %(refname)s_free(msg->%(name)s_data); msg->%(name)s_data = NULL; } return (-1); }""" % self.GetTranslation() return code.split('\n') def CodeComplete(self, structname, var_name): code = [ 'if (%(structname)s->%(name)s_set && ' '%(refname)s_complete(%(var)s) == -1)', ' return (-1);' ] return TranslateList(code, self.GetTranslation({ 'structname' : structname, 'var' : var_name })) def CodeUnmarshal(self, buf, tag_name, var_name, var_len): code = ['%(var)s = %(refname)s_new();', 'if (%(var)s == NULL)', ' return (-1);', 'if (evtag_unmarshal_%(refname)s(%(buf)s, %(tag)s, ' '%(var)s) == -1) {', ' event_warnx("%%s: failed to unmarshal %(name)s", __func__);', ' return (-1);', '}' ] code = '\n'.join(code) % self.GetTranslation({ 'buf' : buf, 'tag' : tag_name, 'var' : var_name }) return code.split('\n') def CodeMarshal(self, buf, tag_name, var_name, var_len): code = ['evtag_marshal_%s(%s, %s, %s);' % ( self._refname, buf, tag_name, var_name)] return code def CodeClear(self, structname): code = [ 'if (%s->%s_set == 1) {' % (structname, self.Name()), ' %s_free(%s->%s_data);' % ( self._refname, structname, self.Name()), ' %s->%s_data = NULL;' % (structname, self.Name()), ' %s->%s_set = 0;' % (structname, self.Name()), '}' ] return code def CodeInitialize(self, name): code = ['%s->%s_data = NULL;' % (name, self._name)] return code def CodeFree(self, name): code = ['if (%s->%s_data != NULL)' % (name, self._name), ' %s_free(%s->%s_data);' % ( self._refname, name, self._name)] return code def Declaration(self): dcl = ['%s %s_data;' % (self._ctype, self._name)] return dcl class EntryVarBytes(Entry): def __init__(self, type, name, tag): # Init base class Entry.__init__(self, type, name, tag) self._ctype = 'ev_uint8_t *' def GetInitializer(self): return "NULL" def GetVarLen(self, var): return '%(var)s->%(name)s_length' % self.GetTranslation({ 'var' : var }) def CodeArrayAdd(self, varname, value): # xxx: copy return [ '%(varname)s = NULL;' % { 'varname' : varname } ] def GetDeclaration(self, funcname): code = [ 'int %s(struct %s *, %s *, ev_uint32_t *);' % ( funcname, self._struct.Name(), self._ctype ) ] return code def AssignDeclaration(self, funcname): code = [ 'int %s(struct %s *, const %s, ev_uint32_t);' % ( funcname, self._struct.Name(), self._ctype ) ] return code def CodeAssign(self): name = self._name code = [ 'int', '%s_%s_assign(struct %s *msg, ' 'const %s value, ev_uint32_t len)' % ( self._struct.Name(), name, self._struct.Name(), self._ctype), '{', ' if (msg->%s_data != NULL)' % name, ' free (msg->%s_data);' % name, ' msg->%s_data = malloc(len);' % name, ' if (msg->%s_data == NULL)' % name, ' return (-1);', ' msg->%s_set = 1;' % name, ' msg->%s_length = len;' % name, ' memcpy(msg->%s_data, value, len);' % name, ' return (0);', '}' ] return code def CodeGet(self): name = self._name code = [ 'int', '%s_%s_get(struct %s *msg, %s *value, ev_uint32_t *plen)' % ( self._struct.Name(), name, self._struct.Name(), self._ctype), '{', ' if (msg->%s_set != 1)' % name, ' return (-1);', ' *value = msg->%s_data;' % name, ' *plen = msg->%s_length;' % name, ' return (0);', '}' ] return code def CodeUnmarshal(self, buf, tag_name, var_name, var_len): code = ['if (evtag_payload_length(%(buf)s, &%(varlen)s) == -1)', ' return (-1);', # We do not want DoS opportunities 'if (%(varlen)s > evbuffer_get_length(%(buf)s))', ' return (-1);', 'if ((%(var)s = malloc(%(varlen)s)) == NULL)', ' return (-1);', 'if (evtag_unmarshal_fixed(%(buf)s, %(tag)s, %(var)s, ' '%(varlen)s) == -1) {', ' event_warnx("%%s: failed to unmarshal %(name)s", __func__);', ' return (-1);', '}' ] code = '\n'.join(code) % self.GetTranslation({ 'buf' : buf, 'tag' : tag_name, 'var' : var_name, 'varlen' : var_len }) return code.split('\n') def CodeMarshal(self, buf, tag_name, var_name, var_len): code = ['evtag_marshal(%s, %s, %s, %s);' % ( buf, tag_name, var_name, var_len)] return code def CodeClear(self, structname): code = [ 'if (%s->%s_set == 1) {' % (structname, self.Name()), ' free (%s->%s_data);' % (structname, self.Name()), ' %s->%s_data = NULL;' % (structname, self.Name()), ' %s->%s_length = 0;' % (structname, self.Name()), ' %s->%s_set = 0;' % (structname, self.Name()), '}' ] return code def CodeInitialize(self, name): code = ['%s->%s_data = NULL;' % (name, self._name), '%s->%s_length = 0;' % (name, self._name) ] return code def CodeFree(self, name): code = ['if (%s->%s_data != NULL)' % (name, self._name), ' free(%s->%s_data);' % (name, self._name)] return code def Declaration(self): dcl = ['ev_uint8_t *%s_data;' % self._name, 'ev_uint32_t %s_length;' % self._name] return dcl class EntryArray(Entry): def __init__(self, entry): # Init base class Entry.__init__(self, entry._type, entry._name, entry._tag) self._entry = entry self._refname = entry._refname self._ctype = self._entry._ctype self._optional = True self._optpointer = self._entry._optpointer self._optaddarg = self._entry._optaddarg # provide a new function for accessing the variable name def GetVarName(var_name): return '%(var)s->%(name)s_data[%(index)s]' % \ self._entry.GetTranslation({'var' : var_name, 'index' : self._index}) self._entry.GetVarName = GetVarName def GetInitializer(self): return "NULL" def GetVarName(self, var_name): return var_name def GetVarLen(self, var_name): return '-1' def GetDeclaration(self, funcname): """Allows direct access to elements of the array.""" code = [ 'int %(funcname)s(struct %(parent_name)s *, int, %(ctype)s *);' % self.GetTranslation({ 'funcname' : funcname }) ] return code def AssignDeclaration(self, funcname): code = [ 'int %s(struct %s *, int, const %s);' % ( funcname, self._struct.Name(), self._ctype ) ] return code def AddDeclaration(self, funcname): code = [ '%(ctype)s %(optpointer)s ' '%(funcname)s(struct %(parent_name)s *msg%(optaddarg)s);' % \ self.GetTranslation({ 'funcname' : funcname }) ] return code def CodeGet(self): code = """int %(parent_name)s_%(name)s_get(struct %(parent_name)s *msg, int offset, %(ctype)s *value) { if (!msg->%(name)s_set || offset < 0 || offset >= msg->%(name)s_length) return (-1); *value = msg->%(name)s_data[offset]; return (0); }""" % self.GetTranslation() return code.split('\n') def CodeAssign(self): code = [ 'int', '%(parent_name)s_%(name)s_assign(struct %(parent_name)s *msg, int off,', ' const %(ctype)s value)', '{', ' if (!msg->%(name)s_set || off < 0 || off >= msg->%(name)s_length)', ' return (-1);\n', ' {' ] code = TranslateList(code, self.GetTranslation()) codearrayassign = self._entry.CodeArrayAssign( 'msg->%(name)s_data[off]' % self.GetTranslation(), 'value') code += [' ' + x for x in codearrayassign] code += TranslateList([ ' }', ' return (0);', '}' ], self.GetTranslation()) return code def CodeAdd(self): codearrayadd = self._entry.CodeArrayAdd( 'msg->%(name)s_data[msg->%(name)s_length - 1]' % self.GetTranslation(), 'value') code = [ 'static int', '%(parent_name)s_%(name)s_expand_to_hold_more(' 'struct %(parent_name)s *msg)', '{', ' int tobe_allocated = msg->%(name)s_num_allocated;', ' %(ctype)s* new_data = NULL;', ' tobe_allocated = !tobe_allocated ? 1 : tobe_allocated << 1;', ' new_data = (%(ctype)s*) realloc(msg->%(name)s_data,', ' tobe_allocated * sizeof(%(ctype)s));', ' if (new_data == NULL)', ' return -1;', ' msg->%(name)s_data = new_data;', ' msg->%(name)s_num_allocated = tobe_allocated;', ' return 0;' '}', '', '%(ctype)s %(optpointer)s', '%(parent_name)s_%(name)s_add(' 'struct %(parent_name)s *msg%(optaddarg)s)', '{', ' if (++msg->%(name)s_length >= msg->%(name)s_num_allocated) {', ' if (%(parent_name)s_%(name)s_expand_to_hold_more(msg)<0)', ' goto error;', ' }' ] code = TranslateList(code, self.GetTranslation()) code += [' ' + x for x in codearrayadd] code += TranslateList([ ' msg->%(name)s_set = 1;', ' return %(optreference)s(msg->%(name)s_data[' 'msg->%(name)s_length - 1]);', 'error:', ' --msg->%(name)s_length;', ' return (NULL);', '}' ], self.GetTranslation()) return code def CodeComplete(self, structname, var_name): self._index = 'i' tmp = self._entry.CodeComplete(structname, self._entry.GetVarName(var_name)) # skip the whole loop if there is nothing to check if not tmp: return [] translate = self.GetTranslation({ 'structname' : structname }) code = [ '{', ' int i;', ' for (i = 0; i < %(structname)s->%(name)s_length; ++i) {' ] code = TranslateList(code, translate) code += [' ' + x for x in tmp] code += [ ' }', '}' ] return code def CodeUnmarshal(self, buf, tag_name, var_name, var_len): translate = self.GetTranslation({ 'var' : var_name, 'buf' : buf, 'tag' : tag_name, 'init' : self._entry.GetInitializer()}) code = [ 'if (%(var)s->%(name)s_length >= %(var)s->%(name)s_num_allocated &&', ' %(parent_name)s_%(name)s_expand_to_hold_more(%(var)s) < 0) {', ' puts("HEY NOW");', ' return (-1);', '}'] # the unmarshal code directly returns code = TranslateList(code, translate) self._index = '%(var)s->%(name)s_length' % translate code += self._entry.CodeUnmarshal(buf, tag_name, self._entry.GetVarName(var_name), self._entry.GetVarLen(var_name)) code += [ '++%(var)s->%(name)s_length;' % translate ] return code def CodeMarshal(self, buf, tag_name, var_name, var_len): code = ['{', ' int i;', ' for (i = 0; i < %(var)s->%(name)s_length; ++i) {' ] self._index = 'i' code += self._entry.CodeMarshal(buf, tag_name, self._entry.GetVarName(var_name), self._entry.GetVarLen(var_name)) code += [' }', '}' ] code = "\n".join(code) % self.GetTranslation({ 'var' : var_name }) return code.split('\n') def CodeClear(self, structname): translate = self.GetTranslation({ 'structname' : structname }) codearrayfree = self._entry.CodeArrayFree( '%(structname)s->%(name)s_data[i]' % self.GetTranslation( { 'structname' : structname } )) code = [ 'if (%(structname)s->%(name)s_set == 1) {' ] if codearrayfree: code += [ ' int i;', ' for (i = 0; i < %(structname)s->%(name)s_length; ++i) {' ] code = TranslateList(code, translate) if codearrayfree: code += [' ' + x for x in codearrayfree] code += [ ' }' ] code += TranslateList([ ' free(%(structname)s->%(name)s_data);', ' %(structname)s->%(name)s_data = NULL;', ' %(structname)s->%(name)s_set = 0;', ' %(structname)s->%(name)s_length = 0;', ' %(structname)s->%(name)s_num_allocated = 0;', '}' ], translate) return code def CodeInitialize(self, name): code = ['%s->%s_data = NULL;' % (name, self._name), '%s->%s_length = 0;' % (name, self._name), '%s->%s_num_allocated = 0;' % (name, self._name)] return code def CodeFree(self, structname): code = self.CodeClear(structname); code += TranslateList([ 'free(%(structname)s->%(name)s_data);' ], self.GetTranslation({'structname' : structname })) return code def Declaration(self): dcl = ['%s *%s_data;' % (self._ctype, self._name), 'int %s_length;' % self._name, 'int %s_num_allocated;' % self._name ] return dcl def NormalizeLine(line): global white global cppcomment line = cppcomment.sub('', line) line = line.strip() line = white.sub(' ', line) return line def ProcessOneEntry(factory, newstruct, entry): optional = 0 array = 0 entry_type = '' name = '' tag = '' tag_set = None separator = '' fixed_length = '' tokens = entry.split(' ') while tokens: token = tokens[0] tokens = tokens[1:] if not entry_type: if not optional and token == 'optional': optional = 1 continue if not array and token == 'array': array = 1 continue if not entry_type: entry_type = token continue if not name: res = re.match(r'^([^\[\]]+)(\[.*\])?$', token) if not res: raise RpcGenError( 'Cannot parse name: \"%s\" ' 'around line %d' % (entry, line_count)) name = res.group(1) fixed_length = res.group(2) if fixed_length: fixed_length = fixed_length[1:-1] continue if not separator: separator = token if separator != '=': raise RpcGenError('Expected "=" after name \"%s\" got %s' % (name, token)) continue if not tag_set: tag_set = 1 if not re.match(r'^(0x)?[0-9]+$', token): raise RpcGenError('Expected tag number: \"%s\"' % entry) tag = int(token, 0) continue raise RpcGenError('Cannot parse \"%s\"' % entry) if not tag_set: raise RpcGenError('Need tag number: \"%s\"' % entry) # Create the right entry if entry_type == 'bytes': if fixed_length: newentry = factory.EntryBytes(entry_type, name, tag, fixed_length) else: newentry = factory.EntryVarBytes(entry_type, name, tag) elif entry_type == 'int' and not fixed_length: newentry = factory.EntryInt(entry_type, name, tag) elif entry_type == 'int64' and not fixed_length: newentry = factory.EntryInt(entry_type, name, tag, bits=64) elif entry_type == 'string' and not fixed_length: newentry = factory.EntryString(entry_type, name, tag) else: res = structref.match(entry_type) if res: # References another struct defined in our file newentry = factory.EntryStruct(entry_type, name, tag, res.group(1)) else: raise RpcGenError('Bad type: "%s" in "%s"' % (entry_type, entry)) structs = [] if optional: newentry.MakeOptional() if array: newentry.MakeArray() newentry.SetStruct(newstruct) newentry.SetLineCount(line_count) newentry.Verify() if array: # We need to encapsulate this entry into a struct newname = newentry.Name()+ '_array' # Now borgify the new entry. newentry = factory.EntryArray(newentry) newentry.SetStruct(newstruct) newentry.SetLineCount(line_count) newentry.MakeArray() newstruct.AddEntry(newentry) return structs def ProcessStruct(factory, data): tokens = data.split(' ') # First three tokens are: 'struct' 'name' '{' newstruct = factory.Struct(tokens[1]) inside = ' '.join(tokens[3:-1]) tokens = inside.split(';') structs = [] for entry in tokens: entry = NormalizeLine(entry) if not entry: continue # It's possible that new structs get defined in here structs.extend(ProcessOneEntry(factory, newstruct, entry)) structs.append(newstruct) return structs def GetNextStruct(file): global line_count global cppdirect got_struct = 0 processed_lines = [] have_c_comment = 0 data = '' while 1: line = file.readline() if not line: break line_count += 1 line = line[:-1] if not have_c_comment and re.search(r'/\*', line): if re.search(r'/\*.*?\*/', line): line = re.sub(r'/\*.*?\*/', '', line) else: line = re.sub(r'/\*.*$', '', line) have_c_comment = 1 if have_c_comment: if not re.search(r'\*/', line): continue have_c_comment = 0 line = re.sub(r'^.*\*/', '', line) line = NormalizeLine(line) if not line: continue if not got_struct: if re.match(r'#include ["<].*[>"]', line): cppdirect.append(line) continue if re.match(r'^#(if( |def)|endif)', line): cppdirect.append(line) continue if re.match(r'^#define', line): headerdirect.append(line) continue if not structdef.match(line): raise RpcGenError('Missing struct on line %d: %s' % (line_count, line)) else: got_struct = 1 data += line continue # We are inside the struct tokens = line.split('}') if len(tokens) == 1: data += ' ' + line continue if len(tokens[1]): raise RpcGenError('Trailing garbage after struct on line %d' % line_count) # We found the end of the struct data += ' %s}' % tokens[0] break # Remove any comments, that might be in there data = re.sub(r'/\*.*\*/', '', data) return data def Parse(factory, file): """ Parses the input file and returns C code and corresponding header file. """ entities = [] while 1: # Just gets the whole struct nicely formatted data = GetNextStruct(file) if not data: break entities.extend(ProcessStruct(factory, data)) return entities class CCodeGenerator: def __init__(self): pass def GuardName(self, name): # Use the complete provided path to the input file, with all # non-identifier characters replaced with underscores, to # reduce the chance of a collision between guard macros. return 'EVENT_RPCOUT_' + nonident.sub('_', name).upper() + '_' def HeaderPreamble(self, name): guard = self.GuardName(name) pre = ( '/*\n' ' * Automatically generated from %s\n' ' */\n\n' '#ifndef %s\n' '#define %s\n\n' ) % ( name, guard, guard) for statement in headerdirect: pre += '%s\n' % statement if headerdirect: pre += '\n' pre += ( '#include <event2/util.h> /* for ev_uint*_t */\n' '#include <event2/rpc.h>\n' ) return pre def HeaderPostamble(self, name): guard = self.GuardName(name) return '#endif /* %s */' % guard def BodyPreamble(self, name, header_file): global _NAME global _VERSION slash = header_file.rfind('/') if slash != -1: header_file = header_file[slash+1:] pre = ( '/*\n' ' * Automatically generated from %s\n' ' * by %s/%s. DO NOT EDIT THIS FILE.\n' ' */\n\n' ) % (name, _NAME, _VERSION) pre += ( '#include <stdlib.h>\n' '#include <string.h>\n' '#include <assert.h>\n' '#include <event2/event-config.h>\n' '#include <event2/event.h>\n' '#include <event2/buffer.h>\n' '#include <event2/tag.h>\n\n' '#if defined(EVENT____func__) && !defined(__func__)\n' '#define __func__ EVENT____func__\n' '#endif\n\n' ) for statement in cppdirect: pre += '%s\n' % statement pre += '\n#include "%s"\n\n' % header_file pre += 'void event_warn(const char *fmt, ...);\n' pre += 'void event_warnx(const char *fmt, ...);\n\n' return pre def HeaderFilename(self, filename): return '.'.join(filename.split('.')[:-1]) + '.h' def CodeFilename(self, filename): return '.'.join(filename.split('.')[:-1]) + '.gen.c' def Struct(self, name): return StructCCode(name) def EntryBytes(self, entry_type, name, tag, fixed_length): return EntryBytes(entry_type, name, tag, fixed_length) def EntryVarBytes(self, entry_type, name, tag): return EntryVarBytes(entry_type, name, tag) def EntryInt(self, entry_type, name, tag, bits=32): return EntryInt(entry_type, name, tag, bits) def EntryString(self, entry_type, name, tag): return EntryString(entry_type, name, tag) def EntryStruct(self, entry_type, name, tag, struct_name): return EntryStruct(entry_type, name, tag, struct_name) def EntryArray(self, entry): return EntryArray(entry) class Usage(RpcGenError): def __init__(self, argv0): RpcGenError.__init__("usage: %s input.rpc [[output.h] output.c]" % argv0) class CommandLine: def __init__(self, argv): """Initialize a command-line to launch event_rpcgen, as if from a command-line with CommandLine(sys.argv). If you're calling this directly, remember to provide a dummy value for sys.argv[0] """ self.filename = None self.header_file = None self.impl_file = None self.factory = CCodeGenerator() if len(argv) >= 2 and argv[1] == '--quiet': global QUIETLY QUIETLY = 1 del argv[1] if len(argv) < 2 or len(argv) > 4: raise Usage(argv[0]) self.filename = argv[1].replace('\\', '/') if len(argv) == 3: self.impl_file = argv[2].replace('\\', '/') if len(argv) == 4: self.header_file = argv[2].replace('\\', '/') self.impl_file = argv[3].replace('\\', '/') if not self.filename: raise Usage(argv[0]) if not self.impl_file: self.impl_file = self.factory.CodeFilename(self.filename) if not self.header_file: self.header_file = self.factory.HeaderFilename(self.impl_file) if not self.impl_file.endswith('.c'): raise RpcGenError("can only generate C implementation files") if not self.header_file.endswith('.h'): raise RpcGenError("can only generate C header files") def run(self): filename = self.filename header_file = self.header_file impl_file = self.impl_file factory = self.factory declare('Reading \"%s\"' % filename) fp = open(filename, 'r') entities = Parse(factory, fp) fp.close() declare('... creating "%s"' % header_file) header_fp = open(header_file, 'w') header_fp.write(factory.HeaderPreamble(filename)) # Create forward declarations: allows other structs to reference # each other for entry in entities: entry.PrintForwardDeclaration(header_fp) header_fp.write('\n') for entry in entities: entry.PrintTags(header_fp) entry.PrintDeclaration(header_fp) header_fp.write(factory.HeaderPostamble(filename)) header_fp.close() declare('... creating "%s"' % impl_file) impl_fp = open(impl_file, 'w') impl_fp.write(factory.BodyPreamble(filename, header_file)) for entry in entities: entry.PrintCode(impl_fp) impl_fp.close() if __name__ == '__main__': try: CommandLine(sys.argv).run() sys.exit(0) except RpcGenError as e: sys.stderr.write(e) sys.exit(1) except EnvironmentError as e: if e.filename and e.strerror: sys.stderr.write("%s: %s" % (e.filename, e.strerror)) sys.exit(1) elif e.strerror: sys.stderr.write(e.strerror) sys.exit(1) else: raise