Linux yavrix.internet-webhosting.com 3.10.0-962.3.2.lve1.5.88.el7.x86_64 #1 SMP Fri Sep 26 14:06:42 UTC 2025 x86_64
LiteSpeed
Server IP : 103.8.25.136 & Your IP : 216.73.216.129
Domains :
Cant Read [ /etc/named.conf ]
User : celfico1
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
bin /
Delete
Unzip
Name
Size
Permission
Date
Action
GET
14.71
KB
-rwxr-xr-x
2014-06-10 01:19
Magick-config
1.23
KB
-rwxr-xr-x
2026-04-23 21:21
MagickCore-config
1.24
KB
-rwxr-xr-x
2026-04-23 21:21
MagickWand-config
1.25
KB
-rwxr-xr-x
2026-04-23 21:21
Mail
383.67
KB
-rwxr-xr-x
2018-04-11 07:07
Wand-config
1.23
KB
-rwxr-xr-x
2026-04-23 21:21
[
40.52
KB
-rwxr-xr-x
2020-11-10 17:18
a2p
105.33
KB
-rwxr-xr-x
2026-01-13 14:58
aclocal
35.87
KB
-rwxr-xr-x
2014-06-10 08:03
aclocal-1.13
35.87
KB
-rwxr-xr-x
2014-06-10 08:03
addr2line
28.42
KB
-rwxr-xr-x
2026-04-17 15:11
agentxtrap
19.16
KB
-rwxr-xr-x
2024-01-29 07:00
animate
7.05
KB
-rwxr-xr-x
2026-04-23 21:25
ar
61.21
KB
-rwxr-xr-x
2026-04-17 15:11
arch
32.3
KB
-rwxr-xr-x
2020-11-10 17:18
as
377.28
KB
-rwxr-xr-x
2026-04-17 15:11
aspell
163.35
KB
-rwxr-xr-x
2014-09-11 13:39
at
1.25
KB
-rwxr-xr-x
2022-05-19 06:55
atq
1.25
KB
-rwxr-xr-x
2022-05-19 06:55
atrm
1.25
KB
-rwxr-xr-x
2022-05-19 06:55
autoconf
14.42
KB
-rwxr-xr-x
2014-06-10 05:41
autoheader
8.33
KB
-rwxr-xr-x
2014-06-10 05:41
autom4te
31.43
KB
-rwxr-xr-x
2014-06-10 05:41
automake
246.44
KB
-rwxr-xr-x
2014-06-10 08:03
automake-1.13
246.44
KB
-rwxr-xr-x
2014-06-10 08:03
autoreconf
20.57
KB
-rwxr-xr-x
2014-06-10 05:41
autoscan
16.72
KB
-rwxr-xr-x
2014-06-10 05:41
autoupdate
33.08
KB
-rwxr-xr-x
2014-06-10 05:41
awk
418.54
KB
-rwxr-xr-x
2017-06-28 21:52
base64
36.48
KB
-rwxr-xr-x
2020-11-10 17:18
basename
28.35
KB
-rwxr-xr-x
2020-11-10 17:18
bash
941.93
KB
-rwxr-xr-x
2021-11-24 07:06
bashbug-64
6.8
KB
-rwxr-xr-x
2021-11-24 07:06
batch
137
B
-rwxr-xr-x
2022-05-19 06:55
bison
393.34
KB
-rwxr-xr-x
2018-10-30 20:34
bunzip2
31.91
KB
-rwxr-xr-x
2026-04-23 09:32
bzcat
31.91
KB
-rwxr-xr-x
2026-04-23 09:32
bzcmp
2.08
KB
-rwxr-xr-x
2026-04-23 09:32
bzdiff
2.08
KB
-rwxr-xr-x
2026-04-23 09:32
bzgrep
1.64
KB
-rwxr-xr-x
2026-04-23 09:32
bzip2
31.91
KB
-rwxr-xr-x
2026-04-23 09:32
bzip2recover
15.24
KB
-rwxr-xr-x
2026-04-23 09:32
bzless
1.23
KB
-rwxr-xr-x
2026-04-23 09:32
bzmore
1.23
KB
-rwxr-xr-x
2026-04-23 09:32
c++
758.59
KB
-rwxr-x---
2026-04-27 14:01
c++filt
27.91
KB
-rwxr-xr-x
2026-04-17 15:11
c2ph
35.75
KB
-rwxr-xr-x
2026-01-13 14:57
c89
224
B
-rwxr-x---
2026-04-27 14:01
c99
215
B
-rwxr-x---
2026-04-27 14:01
cagefs_enter.proxied
1.27
KB
-rwxr-xr-x
2026-01-20 13:58
cal
36.8
KB
-rwxr-xr-x
2021-02-03 09:47
captoinfo
64.26
KB
-rwxr-xr-x
2017-09-06 22:08
cat
52.81
KB
-rwxr-xr-x
2020-11-10 17:18
catchsegv
3.26
KB
-rwxr-xr-x
2026-04-16 13:29
cc
754.58
KB
-rwxr-x---
2026-04-27 14:01
chcon
61.46
KB
-rwxr-xr-x
2020-11-10 17:18
chgrp
61.32
KB
-rwxr-xr-x
2020-11-10 17:18
chmod
57.22
KB
-rwxr-xr-x
2020-11-10 17:18
chown
61.36
KB
-rwxr-xr-x
2020-11-10 17:18
chrt
32.17
KB
-rwxr-xr-x
2021-02-03 09:47
cksum
32.38
KB
-rwxr-xr-x
2020-11-10 17:18
cldetect
10.34
KB
-rwxr-xr-x
2026-04-17 11:38
clear
7.02
KB
-rwxr-xr-x
2017-09-06 22:08
cloudlinux-awp-user
1.78
KB
-rwxr-xr-x
2026-02-13 13:02
clwpos-user
1.78
KB
-rwxr-xr-x
2026-02-13 13:02
cmp
44.14
KB
-rwxr-xr-x
2023-03-08 07:14
col
23.88
KB
-rwxr-xr-x
2021-02-03 09:47
colcrt
11.29
KB
-rwxr-xr-x
2021-02-03 09:47
colrm
23.77
KB
-rwxr-xr-x
2021-02-03 09:47
column
27.99
KB
-rwxr-xr-x
2021-02-03 09:47
comm
36.55
KB
-rwxr-xr-x
2020-11-10 17:18
compare
11.09
KB
-rwxr-xr-x
2026-04-23 21:25
composite
7.05
KB
-rwxr-xr-x
2026-04-23 21:25
conjure
7.05
KB
-rwxr-xr-x
2026-04-23 21:25
convert
7.05
KB
-rwxr-xr-x
2026-04-23 21:25
cp
151.54
KB
-rwxr-xr-x
2020-11-10 17:18
cpan
4.97
KB
-rwxr-xr-x
2026-01-13 14:44
cpp
754.58
KB
-rwxr-xr-x
2026-04-27 14:01
crontab
1.49
KB
-rwxr-xr-x
2023-04-26 06:58
crontab.cagefs
49.12
KB
-rwxr-xr-x
2026-04-17 12:12
csh
395.15
KB
-rwxr-xr-x
2020-11-10 22:16
csplit
48.82
KB
-rwxr-xr-x
2020-11-10 17:18
curl
153
KB
-rwxr-xr-x
2026-04-28 15:48
cut
40.61
KB
-rwxr-xr-x
2020-11-10 17:18
date
60.74
KB
-rwxr-xr-x
2020-11-10 17:18
dbiprof
6.15
KB
-rwxr-xr-x
2014-06-10 01:06
dbiproxy
5.35
KB
-rwxr-xr-x
2014-06-10 01:06
dd
73.14
KB
-rwxr-xr-x
2020-11-10 17:18
delv
39.98
KB
-rwxr-xr-x
2026-04-22 09:13
df
102.55
KB
-rwxr-xr-x
2020-11-10 17:18
diff
195.46
KB
-rwxr-xr-x
2023-03-08 07:14
diff3
60.65
KB
-rwxr-xr-x
2023-03-08 07:14
dig
146.96
KB
-rwxr-xr-x
2026-04-22 09:13
dir
114.85
KB
-rwxr-xr-x
2020-11-10 17:18
dircolors
40.44
KB
-rwxr-xr-x
2020-11-10 17:18
dirname
28.31
KB
-rwxr-xr-x
2020-11-10 17:18
display
7.05
KB
-rwxr-xr-x
2026-04-23 21:25
dltest
11.05
KB
-rwxr-xr-x
2019-08-06 19:30
du
110.34
KB
-rwxr-xr-x
2020-11-10 17:18
dvipdf
1
KB
-rwxr-xr-x
2020-11-13 15:19
echo
32.31
KB
-rwxr-xr-x
2020-11-10 17:18
ed
48.68
KB
-rwxr-xr-x
2014-06-10 03:54
egrep
290
B
-rwxr-xr-x
2017-08-03 06:58
enchant
15.29
KB
-rwxr-xr-x
2014-09-12 05:03
enchant-lsmod
11.13
KB
-rwxr-xr-x
2014-09-12 05:03
env
28.33
KB
-rwxr-xr-x
2020-11-10 17:18
eps2eps
639
B
-rwxr-xr-x
2020-11-13 15:19
eqn
144.41
KB
-rwxr-xr-x
2014-06-09 20:17
ex
906.3
KB
-rwxr-xr-x
2020-12-16 12:20
expand
32.48
KB
-rwxr-xr-x
2020-11-10 17:18
expr
36.53
KB
-rwxr-xr-x
2020-11-10 17:18
factor
93.29
KB
-rwxr-xr-x
2020-11-10 17:18
false
28.26
KB
-rwxr-xr-x
2020-11-10 17:18
fc-cache
132
B
-rwxr-xr-x
2018-10-30 15:13
fc-cache-64
15.45
KB
-rwxr-xr-x
2018-10-30 18:34
fc-cat
15.4
KB
-rwxr-xr-x
2018-10-30 18:34
fc-conflist
11.2
KB
-rwxr-xr-x
2018-10-30 18:34
fc-list
11.26
KB
-rwxr-xr-x
2018-10-30 18:34
fc-match
11.32
KB
-rwxr-xr-x
2018-10-30 18:34
fc-pattern
11.26
KB
-rwxr-xr-x
2018-10-30 18:34
fc-query
11.23
KB
-rwxr-xr-x
2018-10-30 18:34
fc-scan
11.27
KB
-rwxr-xr-x
2018-10-30 18:34
fc-validate
11.27
KB
-rwxr-xr-x
2018-10-30 18:34
fgrep
290
B
-rwxr-xr-x
2017-08-03 06:58
file
19.31
KB
-rwxr-xr-x
2020-06-30 01:19
find
194.63
KB
-rwxr-xr-x
2018-10-30 16:42
find2perl
23.06
KB
-rwxr-xr-x
2026-01-13 14:57
flex
318.07
KB
-rwxr-xr-x
2018-10-30 20:30
flex++
318.07
KB
-rwxr-xr-x
2018-10-30 20:30
flock
23.88
KB
-rwxr-xr-x
2021-02-03 09:47
fmt
36.48
KB
-rwxr-xr-x
2020-11-10 17:18
fold
36.46
KB
-rwxr-xr-x
2020-11-10 17:18
free
19.33
KB
-rwxr-xr-x
2020-10-02 18:09
freetype-config
4.39
KB
-rwxr-xr-x
2020-11-13 15:17
funzip
31.38
KB
-rwxr-xr-x
2022-01-12 07:36
g++
758.59
KB
-rwxr-x---
2026-04-27 14:01
gawk
418.54
KB
-rwxr-xr-x
2017-06-28 21:52
gcc
754.58
KB
-rwxr-x---
2026-04-27 14:01
gcc-ar
26.45
KB
-rwxr-xr-x
2026-04-27 14:01
gcc-nm
26.45
KB
-rwxr-xr-x
2026-04-27 14:01
gcc-ranlib
26.45
KB
-rwxr-xr-x
2026-04-27 14:01
gcov
311.45
KB
-rwxr-xr-x
2026-04-27 14:01
gencat
22.11
KB
-rwxr-xr-x
2026-04-16 14:09
geoiplookup
15.28
KB
-rwxr-xr-x
2019-08-08 23:34
geoiplookup6
11.16
KB
-rwxr-xr-x
2019-08-08 23:34
geqn
144.41
KB
-rwxr-xr-x
2014-06-09 20:17
getconf
22.02
KB
-rwxr-xr-x
2026-04-16 14:09
getent
26.39
KB
-rwxr-xr-x
2026-04-16 14:09
getopt
15.38
KB
-rwxr-xr-x
2021-02-03 09:47
ghostscript
10.97
KB
-rwxr-xr-x
2020-11-13 15:19
git
1.46
MB
-rwxr-xr-x
2026-01-13 07:27
git-receive-pack
1.46
MB
-rwxr-xr-x
2026-01-13 07:27
git-shell
722.05
KB
-rwxr-xr-x
2026-01-13 07:27
git-upload-archive
1.46
MB
-rwxr-xr-x
2026-01-13 07:27
git-upload-pack
795.52
KB
-rwxr-xr-x
2026-01-13 07:27
gm
6.98
KB
-rwxr-xr-x
2024-07-29 16:31
gmake
178.47
KB
-rwxr-xr-x
2019-08-09 00:46
gneqn
271
B
-rwxr-xr-x
2014-06-09 20:17
gnroff
3.31
KB
-rwxr-xr-x
2014-06-09 20:17
gpg
732.3
KB
-rwxr-xr-x
2026-01-23 08:40
gpg-agent
289.64
KB
-rwxr-xr-x
2026-01-23 08:40
gpg-error
23.18
KB
-rwxr-xr-x
2014-06-10 08:46
gpg-zip
3.23
KB
-rwxr-xr-x
2026-01-23 08:40
gpg2
732.3
KB
-rwxr-xr-x
2026-01-23 08:40
gpgsplit
48.8
KB
-rwxr-xr-x
2026-01-23 08:40
gpgv
345.35
KB
-rwxr-xr-x
2026-01-23 08:40
gpgv2
345.35
KB
-rwxr-xr-x
2026-01-23 08:40
gpic
180.41
KB
-rwxr-xr-x
2014-06-09 20:17
gprof
98.41
KB
-rwxr-xr-x
2026-04-17 15:11
grep
155.3
KB
-rwxr-xr-x
2017-08-03 06:58
groff
81.63
KB
-rwxr-xr-x
2014-06-09 20:17
grops
140.85
KB
-rwxr-xr-x
2014-06-09 20:17
grotty
98.59
KB
-rwxr-xr-x
2014-06-09 20:17
groups
32.41
KB
-rwxr-xr-x
2020-11-10 17:18
gs
10.97
KB
-rwxr-xr-x
2020-11-13 15:19
gsbj
350
B
-rwxr-xr-x
2020-11-13 15:19
gsdj
352
B
-rwxr-xr-x
2020-11-13 15:19
gsdj500
352
B
-rwxr-xr-x
2020-11-13 15:19
gslj
353
B
-rwxr-xr-x
2020-11-13 15:19
gslp
350
B
-rwxr-xr-x
2020-11-13 15:19
gsnd
277
B
-rwxr-xr-x
2020-11-13 15:19
gsoelim
32.59
KB
-rwxr-xr-x
2014-06-09 20:17
gtar
338.02
KB
-rwxr-xr-x
2018-10-30 20:24
gtbl
115.96
KB
-rwxr-xr-x
2014-06-09 20:17
gtroff
512.96
KB
-rwxr-xr-x
2014-06-09 20:17
gunzip
2.2
KB
-rwxr-xr-x
2022-05-12 06:56
gzexe
5.79
KB
-rwxr-xr-x
2022-05-12 06:56
gzip
98.43
KB
-rwxr-xr-x
2022-05-12 06:56
h2ph
27.65
KB
-rwxr-xr-x
2026-01-13 14:57
h2xs
59.15
KB
-rwxr-xr-x
2026-01-13 14:57
head
40.5
KB
-rwxr-xr-x
2020-11-10 17:18
hexdump
32.02
KB
-rwxr-xr-x
2021-02-03 09:47
host
127.02
KB
-rwxr-xr-x
2026-04-22 09:13
hostid
28.3
KB
-rwxr-xr-x
2020-11-10 17:18
hostname
15.41
KB
-rwxr-xr-x
2019-10-18 16:02
hunspell
53.11
KB
-rwxr-xr-x
2020-07-03 09:54
iconv
58.14
KB
-rwxr-xr-x
2026-04-16 14:09
icu-config
172
B
-rwxr-xr-x
2014-08-18 19:13
icu-config-64
21.49
KB
-rwxr-xr-x
2020-03-25 14:47
icuinfo
15.6
KB
-rwxr-xr-x
2020-03-25 14:47
id
36.52
KB
-rwxr-xr-x
2020-11-10 17:18
identify
7.06
KB
-rwxr-xr-x
2026-04-23 21:25
idn
32.45
KB
-rwxr-xr-x
2015-11-21 17:00
ifnames
4.03
KB
-rwxr-xr-x
2014-06-10 05:41
igawk
3.11
KB
-rwxr-xr-x
2017-06-28 21:52
import
7.05
KB
-rwxr-xr-x
2026-04-23 21:25
infocmp
56.07
KB
-rwxr-xr-x
2017-09-06 22:08
infotocap
64.26
KB
-rwxr-xr-x
2017-09-06 22:08
install
139.64
KB
-rwxr-xr-x
2020-11-10 17:18
instmodsh
4.15
KB
-rwxr-xr-x
2014-06-10 01:58
ionice
23.87
KB
-rwxr-xr-x
2021-02-03 09:47
ipcrm
27.85
KB
-rwxr-xr-x
2021-02-03 09:47
ipcs
48.36
KB
-rwxr-xr-x
2021-02-03 09:47
isosize
23.83
KB
-rwxr-xr-x
2021-02-03 09:47
ispell
988
B
-rwxr-xr-x
2014-09-11 13:39
isql
31.69
KB
-rwxr-xr-x
2019-08-06 19:30
iusql
23.61
KB
-rwxr-xr-x
2019-08-06 19:30
join
48.75
KB
-rwxr-xr-x
2020-11-10 17:18
kill
32.82
KB
-rwxr-xr-x
2021-02-03 09:47
ld
982.59
KB
-rwxr-x---
2026-04-17 15:11
ld.bfd
982.59
KB
-rwxr-x---
2026-04-17 15:11
ldd
5.18
KB
-rwxr-xr-x
2026-04-16 13:29
less
154.55
KB
-rwxr-xr-x
2026-04-29 12:31
lessecho
11.13
KB
-rwxr-xr-x
2026-04-29 12:31
lesskey
16.67
KB
-rwxr-xr-x
2026-04-29 12:31
lesspipe.sh
2.24
KB
-rwxr-xr-x
2026-04-29 12:22
lex
318.07
KB
-rwxr-xr-x
2018-10-30 20:30
libnetcfg
15.36
KB
-rwxr-xr-x
2026-01-13 14:57
libtool
314.04
KB
-rwxr-xr-x
2017-04-12 18:57
libtoolize
76.8
KB
-rwxr-xr-x
2017-04-12 18:57
link
28.3
KB
-rwxr-xr-x
2020-11-10 17:18
ln
57.22
KB
-rwxr-xr-x
2020-11-10 17:18
locale
37.11
KB
-rwxr-xr-x
2026-04-16 14:09
localedef
318.31
KB
-rwxr-xr-x
2026-04-16 14:09
logger
28.63
KB
-rwxr-xr-x
2021-02-03 09:47
login
36.38
KB
-rwxr-xr-x
2021-02-03 09:47
logname
28.31
KB
-rwxr-xr-x
2020-11-10 17:18
look
11.27
KB
-rwxr-xr-x
2021-02-03 09:47
lprsetup.sh
5.34
KB
-rwxr-xr-x
2020-11-13 15:19
ls
114.85
KB
-rwxr-xr-x
2020-11-10 17:18
m4
151.17
KB
-rwxr-xr-x
2015-11-20 07:27
mail
383.67
KB
-rwxr-xr-x
2018-04-11 07:07
mailx
383.67
KB
-rwxr-xr-x
2018-04-11 07:07
make
178.47
KB
-rwxr-xr-x
2019-08-09 00:46
mcookie
15.44
KB
-rwxr-xr-x
2021-02-03 09:47
md5sum
40.53
KB
-rwxr-xr-x
2020-11-10 17:18
mdig
44.2
KB
-rwxr-xr-x
2026-04-22 09:13
mesg
10.98
KB
-rwxr-xr-x
2014-06-09 23:16
mkdir
77.9
KB
-rwxr-xr-x
2020-11-10 17:18
mkfifo
61.58
KB
-rwxr-xr-x
2020-11-10 17:18
mknod
65.61
KB
-rwxr-xr-x
2020-11-10 17:18
mktemp
40.66
KB
-rwxr-xr-x
2020-11-10 17:18
mogrify
7.05
KB
-rwxr-xr-x
2026-04-23 21:25
montage
7.05
KB
-rwxr-xr-x
2026-04-23 21:25
more
40.15
KB
-rwxr-xr-x
2021-02-03 09:47
mv
127.3
KB
-rwxr-xr-x
2020-11-10 17:18
my_print_defaults
8.81
MB
-rwxr-xr-x
2023-10-11 12:09
mysql
12.1
MB
-rwxr-xr-x
2023-10-11 12:10
mysql_config
840
B
-rwxr-xr-x
2023-10-11 12:09
mysql_config-64
5.11
KB
-rwxr-xr-x
2023-10-11 12:09
mysqladmin
10.76
MB
-rwxr-xr-x
2023-10-11 12:10
mysqlbinlog
12.69
MB
-rwxr-xr-x
2023-10-11 12:10
mysqlcheck
11.04
MB
-rwxr-xr-x
2023-10-11 12:10
mysqldump
11.13
MB
-rwxr-xr-x
2023-10-11 12:10
mysqlimport
10.76
MB
-rwxr-xr-x
2023-10-11 12:10
mysqlshow
10.72
MB
-rwxr-xr-x
2023-10-11 12:10
namei
27.95
KB
-rwxr-xr-x
2021-02-03 09:47
nano
201.08
KB
-rwxr-xr-x
2014-06-10 04:47
neqn
271
B
-rwxr-xr-x
2014-06-09 20:17
net-snmp-create-v3-user
2.98
KB
-rwxr-xr-x
2024-01-29 07:00
nice
32.32
KB
-rwxr-xr-x
2020-11-10 17:18
nl
40.59
KB
-rwxr-xr-x
2020-11-10 17:18
nm
45.43
KB
-rwxr-xr-x
2026-04-17 15:11
nohup
32.42
KB
-rwxr-xr-x
2020-11-10 17:18
nproc
32.37
KB
-rwxr-xr-x
2020-11-10 17:18
nroff
3.31
KB
-rwxr-xr-x
2014-06-09 20:17
nslookup
130.93
KB
-rwxr-xr-x
2026-04-22 09:13
nsupdate
65.24
KB
-rwxr-xr-x
2026-04-22 09:13
numfmt
64.71
KB
-rwxr-xr-x
2020-11-10 17:18
objcopy
227.34
KB
-rwxr-xr-x
2026-04-17 15:11
objdump
357.75
KB
-rwxr-xr-x
2026-04-17 15:11
od
64.81
KB
-rwxr-xr-x
2020-11-10 17:18
odbc_config
11.04
KB
-rwxr-xr-x
2019-08-06 19:30
odbcinst
27.69
KB
-rwxr-xr-x
2019-08-06 19:30
openssl
542.27
KB
-rwxr-xr-x
2026-02-10 20:25
pango-list
11.1
KB
-rwxr-xr-x
2019-09-13 18:03
pango-querymodules-64
28.26
KB
-rwxr-xr-x
2020-11-10 17:18
pango-view
49.47
KB
-rwxr-xr-x
2019-09-13 18:03
passwd
1.25
KB
-rwxr-xr-x
2020-04-01 03:57
paste
32.34
KB
-rwxr-xr-x
2020-11-10 17:18
patch
147
KB
-rwxr-xr-x
2019-10-22 23:59
pathchk
32.31
KB
-rwxr-xr-x
2020-11-10 17:18
pdf2dsc
698
B
-rwxr-xr-x
2020-11-13 15:19
pdf2ps
909
B
-rwxr-xr-x
2020-11-13 15:19
perl
11.14
KB
-rwxr-xr-x
2026-01-13 14:58
perl5.16.3
11.14
KB
-rwxr-xr-x
2026-01-13 14:58
perlbug
43.61
KB
-rwxr-xr-x
2026-01-13 14:57
perldoc
203
B
-rwxr-xr-x
2014-06-10 08:17
perlivp
10.52
KB
-rwxr-xr-x
2026-01-13 14:57
perlml
5.98
KB
-rwxr-xr-x
2022-08-10 20:55
perlthanks
43.61
KB
-rwxr-xr-x
2026-01-13 14:57
pf2afm
498
B
-rwxr-xr-x
2020-11-13 15:19
pfbtopfa
516
B
-rwxr-xr-x
2020-11-13 15:19
pgawk
418.63
KB
-rwxr-xr-x
2017-06-28 21:52
pgrep
27.67
KB
-rwxr-xr-x
2020-10-02 18:09
php
937
B
-rwxr-xr-x
2025-04-03 10:48
pic
180.41
KB
-rwxr-xr-x
2014-06-09 20:17
piconv
7.99
KB
-rwxr-xr-x
2014-06-10 02:49
pinentry
2.54
KB
-rwxr-xr-x
2016-11-04 18:02
pinentry-curses
49.19
KB
-rwxr-xr-x
2016-11-05 15:49
ping
1.25
KB
-rwxr-xr-x
2017-08-04 08:01
pinky
36.58
KB
-rwxr-xr-x
2020-11-10 17:18
pkg-config
44.38
KB
-rwxr-xr-x
2014-06-09 22:05
pkill
27.67
KB
-rwxr-xr-x
2020-10-02 18:09
pl2pm
4.42
KB
-rwxr-xr-x
2026-01-13 14:57
pmap
27.61
KB
-rwxr-xr-x
2020-10-02 18:09
pod2html
4
KB
-rwxr-xr-x
2026-01-13 14:57
pod2latex
10.1
KB
-rwxr-xr-x
2014-06-10 07:53
pod2man
13.26
KB
-rwxr-xr-x
2014-06-09 19:56
pod2text
10.75
KB
-rwxr-xr-x
2014-06-09 19:56
pod2usage
3.67
KB
-rwxr-xr-x
2014-06-10 08:56
podchecker
3.7
KB
-rwxr-xr-x
2014-06-09 20:28
podselect
2.55
KB
-rwxr-xr-x
2014-06-10 04:04
post-grohtml
187.55
KB
-rwxr-xr-x
2014-06-09 20:17
pphs
404
B
-rwxr-xr-x
2020-11-13 15:19
pr
65.11
KB
-rwxr-xr-x
2020-11-10 17:18
pre-grohtml
86.24
KB
-rwxr-xr-x
2014-06-09 20:17
precat
5.52
KB
-rwxr-xr-x
2014-09-11 13:39
preunzip
5.52
KB
-rwxr-xr-x
2014-09-11 13:39
prezip
5.52
KB
-rwxr-xr-x
2014-09-11 13:39
prezip-bin
11.05
KB
-rwxr-xr-x
2014-09-11 13:39
printafm
395
B
-rwxr-xr-x
2020-11-13 15:19
printenv
28.29
KB
-rwxr-xr-x
2020-11-10 17:18
printf
48.61
KB
-rwxr-xr-x
2020-11-10 17:18
prove
13.13
KB
-rwxr-xr-x
2015-08-12 14:22
ps
97.77
KB
-rwxr-xr-x
2020-10-02 18:09
ps2ascii
631
B
-rwxr-xr-x
2020-11-13 15:19
ps2epsi
2.69
KB
-rwxr-xr-x
2020-11-13 15:19
ps2pdf
272
B
-rwxr-xr-x
2020-11-13 15:19
ps2pdf12
215
B
-rwxr-xr-x
2020-11-13 15:19
ps2pdf13
215
B
-rwxr-xr-x
2020-11-13 15:19
ps2pdf14
215
B
-rwxr-xr-x
2020-11-13 15:19
ps2pdfwr
1.07
KB
-rwxr-xr-x
2020-11-13 15:19
ps2ps
647
B
-rwxr-xr-x
2020-11-13 15:19
ps2ps2
669
B
-rwxr-xr-x
2020-11-13 15:19
psed
52.08
KB
-rwxr-xr-x
2026-01-13 14:57
pstruct
35.75
KB
-rwxr-xr-x
2026-01-13 14:57
ptx
65.09
KB
-rwxr-xr-x
2020-11-10 17:18
pwd
32.45
KB
-rwxr-xr-x
2020-11-10 17:18
pwdx
11.27
KB
-rwxr-xr-x
2020-10-02 18:09
pydoc
78
B
-rwxr-xr-x
2026-03-30 18:05
python
6.98
KB
-rwxr-xr-x
2026-03-30 18:06
python2
6.98
KB
-rwxr-xr-x
2026-03-30 18:06
python2.7
6.98
KB
-rwxr-xr-x
2026-03-30 18:06
ranlib
61.21
KB
-rwxr-xr-x
2026-04-17 15:11
raw
15.27
KB
-rwxr-xr-x
2021-02-03 09:47
readelf
509.84
KB
-rwxr-xr-x
2026-04-17 15:11
readlink
40.82
KB
-rwxr-xr-x
2020-11-10 17:18
realpath
61.23
KB
-rwxr-xr-x
2020-11-10 17:18
recode
39.87
KB
-rwxr-xr-x
2014-09-17 20:18
red
89
B
-rwxr-xr-x
2014-06-10 03:54
rename
11.26
KB
-rwxr-xr-x
2021-02-03 09:47
renice
11.2
KB
-rwxr-xr-x
2021-02-03 09:47
replace
5.16
MB
-rwxr-xr-x
2023-10-11 12:09
reset
19.6
KB
-rwxr-xr-x
2017-09-06 22:08
rev
11.26
KB
-rwxr-xr-x
2021-02-03 09:47
rm
61.4
KB
-rwxr-xr-x
2020-11-10 17:18
rmdir
44.46
KB
-rwxr-xr-x
2020-11-10 17:18
rnano
201.08
KB
-rwxr-xr-x
2014-06-10 04:47
rpcgen
90.45
KB
-rwxr-xr-x
2026-04-16 14:09
run-with-aspell
85
B
-rwxr-xr-x
2014-09-11 13:39
runcon
32.47
KB
-rwxr-xr-x
2020-11-10 17:18
rvi
906.3
KB
-rwxr-xr-x
2020-12-16 12:20
rview
906.3
KB
-rwxr-xr-x
2020-12-16 12:20
rvim
2.23
MB
-rwxr-xr-x
2020-12-16 12:20
s2p
52.08
KB
-rwxr-xr-x
2026-01-13 14:57
scl
19.5
KB
-rwxr-xr-x
2018-10-30 19:17
scl_enabled
258
B
-rwxr-xr-x
2018-10-30 19:17
scl_source
1.83
KB
-rwxr-xr-x
2018-10-30 19:17
scp
89.24
KB
-rwxr-xr-x
2026-04-29 10:13
screen
464.1
KB
-rwxr-xr-x
2021-04-14 17:40
script
19.61
KB
-rwxr-xr-x
2021-02-03 09:47
sdiff
48.41
KB
-rwxr-xr-x
2023-03-08 07:14
sed
74.29
KB
-rwxr-xr-x
2020-10-03 13:03
selectorctl
7.63
KB
-rwxr-xr-x
2026-04-10 12:49
seq
48.47
KB
-rwxr-xr-x
2020-11-10 17:18
setsid
11.23
KB
-rwxr-xr-x
2021-02-03 09:47
setterm
27.48
KB
-rwxr-xr-x
2021-02-03 09:47
sftp
142
KB
-rwxr-xr-x
2026-04-29 10:13
sh
941.93
KB
-rwxr-xr-x
2021-11-24 07:06
sha1sum
36.57
KB
-rwxr-xr-x
2020-11-10 17:18
sha224sum
40.63
KB
-rwxr-xr-x
2020-11-10 17:18
sha256sum
40.63
KB
-rwxr-xr-x
2020-11-10 17:18
sha384sum
40.65
KB
-rwxr-xr-x
2020-11-10 17:18
sha512sum
40.65
KB
-rwxr-xr-x
2020-11-10 17:18
shred
52.94
KB
-rwxr-xr-x
2020-11-10 17:18
shuf
49.13
KB
-rwxr-xr-x
2020-11-10 17:18
size
32.36
KB
-rwxr-xr-x
2026-04-17 15:11
skill
23.62
KB
-rwxr-xr-x
2020-10-02 18:09
slabtop
19.52
KB
-rwxr-xr-x
2020-10-02 18:09
sleep
32.35
KB
-rwxr-xr-x
2020-11-10 17:18
slogin
760.45
KB
-rwxr-xr-x
2026-04-29 10:13
snice
23.62
KB
-rwxr-xr-x
2020-10-02 18:09
snmpconf
25.52
KB
-rwxr-xr-x
2024-01-29 07:00
soelim
32.59
KB
-rwxr-xr-x
2014-06-09 20:17
sort
114.95
KB
-rwxr-xr-x
2020-11-10 17:18
spell
122
B
-rwxr-xr-x
2014-09-11 13:39
splain
18.03
KB
-rwxr-xr-x
2026-01-13 14:57
split
69.47
KB
-rwxr-xr-x
2020-11-10 17:18
sprof
22.1
KB
-rwxr-xr-x
2026-04-16 14:09
sqlite3
54.95
KB
-rwxr-xr-x
2025-08-04 13:27
ssh
760.45
KB
-rwxr-xr-x
2026-04-29 10:13
ssh-add
352.46
KB
-rwxr-xr-x
2026-04-29 10:13
ssh-agent
373.24
KB
---x--x--x
2026-04-29 10:13
ssh-copy-id
10.22
KB
-rwxr-xr-x
2026-04-29 10:13
ssh-keygen
409.38
KB
-rwxr-xr-x
2026-04-29 10:13
ssh-keyscan
434.7
KB
-rwxr-xr-x
2026-04-29 10:13
stat
77.19
KB
-rwxr-xr-x
2020-11-10 17:18
stdbuf
64.88
KB
-rwxr-xr-x
2020-11-10 17:18
strace
1009.19
KB
-rwxr-xr-x
2023-08-30 08:58
stream
7.05
KB
-rwxr-xr-x
2026-04-23 21:25
strings
36.53
KB
-rwxr-xr-x
2026-04-17 15:11
strip
227.33
KB
-rwxr-xr-x
2026-04-17 15:11
stty
68.61
KB
-rwxr-xr-x
2020-11-10 17:18
sum
36.55
KB
-rwxr-xr-x
2020-11-10 17:18
sync
28.33
KB
-rwxr-xr-x
2020-11-10 17:18
tabs
15.31
KB
-rwxr-xr-x
2017-09-06 22:08
tac
32.48
KB
-rwxr-xr-x
2020-11-10 17:18
tail
65.26
KB
-rwxr-xr-x
2020-11-10 17:18
tailf
23.88
KB
-rwxr-xr-x
2021-02-03 09:47
tar
338.02
KB
-rwxr-xr-x
2018-10-30 20:24
taskset
32.22
KB
-rwxr-xr-x
2021-02-03 09:47
tbl
115.96
KB
-rwxr-xr-x
2014-06-09 20:17
tclsh
7
KB
-rwxr-xr-x
2015-11-20 08:40
tclsh8.5
7
KB
-rwxr-xr-x
2015-11-20 08:40
tcsh
395.15
KB
-rwxr-xr-x
2020-11-10 22:16
tee
32.38
KB
-rwxr-xr-x
2020-11-10 17:18
test
36.46
KB
-rwxr-xr-x
2020-11-10 17:18
tic
64.26
KB
-rwxr-xr-x
2017-09-06 22:08
time
15.55
KB
-rwxr-xr-x
2014-06-12 13:29
timeout
53.31
KB
-rwxr-xr-x
2020-11-10 17:18
tload
15.38
KB
-rwxr-xr-x
2020-10-02 18:09
tmpwatch
27.87
KB
-rwxr-xr-x
2019-06-09 09:42
toe
15.43
KB
-rwxr-xr-x
2017-09-06 22:08
top
104.38
KB
-rwxr-xr-x
2020-10-02 18:09
touch
61.02
KB
-rwxr-xr-x
2020-11-10 17:18
tput
15.41
KB
-rwxr-xr-x
2017-09-06 22:08
tr
44.61
KB
-rwxr-xr-x
2020-11-10 17:18
troff
512.96
KB
-rwxr-xr-x
2014-06-09 20:17
true
28.26
KB
-rwxr-xr-x
2020-11-10 17:18
truncate
52.67
KB
-rwxr-xr-x
2020-11-10 17:18
tset
19.6
KB
-rwxr-xr-x
2017-09-06 22:08
tsort
36.47
KB
-rwxr-xr-x
2020-11-10 17:18
tty
28.29
KB
-rwxr-xr-x
2020-11-10 17:18
tzselect
7.17
KB
-rwxr-xr-x
2026-04-16 13:28
uapi
1.25
KB
-rwxr-xr-x
2026-05-08 18:17
ul
19.47
KB
-rwxr-xr-x
2021-02-03 09:47
uname
32.3
KB
-rwxr-xr-x
2020-11-10 17:18
unexpand
32.45
KB
-rwxr-xr-x
2020-11-10 17:18
uniq
44.71
KB
-rwxr-xr-x
2020-11-10 17:18
unix-lpr.sh
4.07
KB
-rwxr-xr-x
2020-11-13 15:19
unlink
28.3
KB
-rwxr-xr-x
2020-11-10 17:18
unzip
185.16
KB
-rwxr-xr-x
2022-01-12 07:36
unzipsfx
88.66
KB
-rwxr-xr-x
2022-01-12 07:36
uptime
11.22
KB
-rwxr-xr-x
2020-10-02 18:09
users
32.42
KB
-rwxr-xr-x
2020-11-10 17:18
utmpdump
15.45
KB
-rwxr-xr-x
2021-02-03 09:47
vdir
114.85
KB
-rwxr-xr-x
2020-11-10 17:18
vi
906.3
KB
-rwxr-xr-x
2020-12-16 12:20
view
906.3
KB
-rwxr-xr-x
2020-12-16 12:20
vim
2.23
MB
-rwxr-xr-x
2020-12-16 12:20
vimdiff
2.23
MB
-rwxr-xr-x
2020-12-16 12:20
vimtutor
2.04
KB
-rwxr-xr-x
2020-12-16 12:20
vmstat
31.48
KB
-rwxr-xr-x
2020-10-02 18:09
watch
24.15
KB
-rwxr-xr-x
2020-10-02 18:09
wc
40.67
KB
-rwxr-xr-x
2020-11-10 17:18
wget
408.97
KB
-rwxr-xr-x
2024-08-15 10:20
whereis
20.2
KB
-rwxr-xr-x
2021-02-03 09:47
which
23.77
KB
-rwxr-xr-x
2014-06-10 02:25
who
48.7
KB
-rwxr-xr-x
2020-11-10 17:18
whoami
28.3
KB
-rwxr-xr-x
2020-11-10 17:18
word-list-compress
11.03
KB
-rwxr-xr-x
2014-09-11 13:39
x86_64-redhat-linux-c++
758.59
KB
-rwxr-x---
2026-04-27 14:01
x86_64-redhat-linux-g++
758.59
KB
-rwxr-x---
2026-04-27 14:01
x86_64-redhat-linux-gcc
754.58
KB
-rwxr-x---
2026-04-27 14:01
xargs
60.91
KB
-rwxr-xr-x
2018-10-30 16:42
xmlcatalog
15.3
KB
-rwxr-xr-x
2025-09-08 13:50
xmllint
61.94
KB
-rwxr-xr-x
2025-09-08 13:50
xmlwf
24
KB
-rwxr-xr-x
2026-04-17 06:21
xsltproc
23.5
KB
-rwxr-xr-x
2020-10-02 21:02
xsubpp
4.45
KB
-rwxr-xr-x
2017-08-02 05:43
xxd
14.42
KB
-rwxr-xr-x
2020-12-16 12:20
yes
28.3
KB
-rwxr-xr-x
2020-11-10 17:18
zcat
1.9
KB
-rwxr-xr-x
2022-05-12 06:56
zcmp
1.72
KB
-rwxr-xr-x
2022-05-12 06:56
zdiff
5.63
KB
-rwxr-xr-x
2022-05-12 06:56
zegrep
123
B
-rwxr-xr-x
2022-05-12 06:56
zfgrep
123
B
-rwxr-xr-x
2022-05-12 06:56
zforce
2.09
KB
-rwxr-xr-x
2022-05-12 06:56
zgrep
5.98
KB
-rwxr-xr-x
2022-05-12 06:56
zip
210.78
KB
-rwxr-xr-x
2016-11-05 16:49
zipcloak
98.1
KB
-rwxr-xr-x
2016-11-05 16:49
zipgrep
2.88
KB
-rwxr-xr-x
2008-10-10 17:40
zipinfo
185.16
KB
-rwxr-xr-x
2022-01-12 07:36
zipnote
93.73
KB
-rwxr-xr-x
2016-11-05 16:49
zipsplit
97.75
KB
-rwxr-xr-x
2016-11-05 16:49
zless
1.99
KB
-rwxr-xr-x
2022-05-12 06:56
zmore
2.79
KB
-rwxr-xr-x
2022-05-12 06:56
znew
5.22
KB
-rwxr-xr-x
2022-05-12 06:56
zsoelim
32.59
KB
-rwxr-xr-x
2014-06-09 20:17
Save
Rename
#!/usr/bin/perl # # A simple configuration file builder based on questions listed in # its own configuration file. It would certainly be easy to use this # for other (non-snmp) programs as well. # use Getopt::Std; use Term::ReadLine; use IO::File; use Data::Dumper; use File::Copy; if ($^O eq 'MSWin32') { eval 'require Win32::Registry;'; if ($@) { print "\nWarning: Perl module Win32::Registry is not installed. This module is\n"; print " required to read the SNMPSHAREPATH and SNMPCONFPATH values from \n"; print " the registry. To use snmpconf without the module you need to\n"; print " define SNMPSHAREPATH and SNMPCONFPATH as environment variables\n"; print " or use the -c and -I command line options.\n"; } } # globals %tokenitems=qw(line 1 info 1 comment 1); %arrayitems=qw(question 1 validanswer 1); # default folder for snmpconf-data if (defined(&my_getenv("SNMPSHAREPATH"))) { $opts{'c'} = &my_getenv("SNMPSHAREPATH") . "/snmpconf-data"; } else { $opts{'c'} = "/usr/share/snmp/snmpconf-data"; } # default config file path if (defined(&my_getenv("SNMPCONFPATH"))) { $confpath = &my_getenv("SNMPCONFPATH"); } else { $confpath = "/usr/share/snmp"; } # home environment variable if (defined(&my_getenv("HOME"))) { $home = &my_getenv("HOME") . "/.snmp"; } else { $home = "(HOME dir - n/a)"; } # read the argument string getopts("qadhfc:piI:r:R:g:G", \%opts); # display help if ($opts{'h'}) { print "$0 [options] [FILETOCREATE...]\n"; print "options:\n"; print " -f overwrite existing files without prompting\n"; print " -i install created files into $confpath.\n"; print " -p install created files into $home.\n"; print " -I DIR install created files into DIR.\n"; print " -a Don't ask any questions, just read in current\n"; print " current .conf files and comment them\n"; print " -r all|none Read in all or none of the .conf files found.\n"; print " -R file,... Read in a particular list of .conf files.\n"; print " -g GROUP Ask a series of GROUPed questions.\n"; print " -G List known GROUPs.\n"; print " -c conf_dir use alternate configuration directory.\n"; print " -q run more quietly with less advice.\n"; print " -d turn on debugging output.\n"; print " -D turn on debugging dumper output.\n"; exit; } # setup terminal interface. $ENV{'PERL_RL'}='o=0' if (!exists($ENV{'PERL_RL'})); $term = new Term::ReadLine 'snmpconf'; # read in configuration file set read_config_files($opts{'c'}, \%filetypes); debug(my_Dumper(\%filetypes)); if ($opts{'G'}) { Print("\nKnown GROUPs of tokens:\n\n"); foreach my $group (keys(%groups)) { print " $group\n"; } Print("\n"); exit; } # # Expand the search path in case it contains multiple directories # separated by : (Unix) or ; (Win32) # my $ENV_SEPARATOR = ':'; if ($^O eq 'MSWin32') { $ENV_SEPARATOR = ';'; } my @searchpath = split(/$ENV_SEPARATOR/, $confpath); push @searchpath, "/etc/snmp"; push @searchpath, "."; push @searchpath, "$home"; # Remove trailing /'s or \'s for (my $i=0; $i <= $#searchpath; $i++) { $searchpath[$i] =~ /(.*?)([\/\\])*$/; $searchpath[$i] = $1; } # Determine persistent directory. Order of preference: # # file in SNMP_PERSISTENT_FILE environment variable # directory defined by persistentDir snmp.conf variable # directory in SNMP_PERSISTENT_DIR environment variable # default PERSISTENT_DIRECTORY directory my $persistentDir = ""; my $persistentFile = ""; # SNMP_PERSISTENT_FILE environment variable if (defined(&my_getenv("SNMP_PERSISTENT_FILE"))) { $persistentFile = &my_getenv("SNMP_PERSISTENT_FILE"); debug ("persistent file: SNMP_PERSISTENT_FILE environment variable set\n"); } # snmp.conf persistentDir if (!($persistentDir) && !($persistentFile)) { foreach my $i (@searchpath) { debug ("Searching file $i/snmp.conf for persistentDir\n"); my $temp = get_persistentDir("$i/snmp.conf"); if ($temp) { debug("persistent directory: set to $temp in $i/snmp.conf\n"); $persistentDir = $temp; last; } } } # SNMP_PERSISTENT_DIR environment variable if (!($persistentDir) && !($persistentFile)) { if (&my_getenv("SNMP_PERSISTENT_DIR")) { $persistentDir = &my_getenv("SNMP_PERSISTENT_DIR"); debug ("persistent directory: SNMP_PERSISTENT_DIR environment variable set\n"); } } # PERSISTENT_DIRECTORY default variable if (!($persistentDir) && !($persistentFile)) { $persistentDir = "/var/lib/net-snmp"; debug ("persistent directory: Using default value\n"); } # Rebuild search path without persistent folder # Note: persistent file handled in Find existing # files to possibly read in section if ($persistentDir) { # Remove trailing /'s or \'s $persistentDir =~ /(.*?)([\/\\])*$/; $persistentDir = $1; debug ("persistent directory: $persistentDir\n"); my @searchpath_old = @searchpath; @searchpath = (); foreach my $path_temp (@searchpath_old) { if ($path_temp eq $persistentDir) { debug("skipping persistent directory $path_temp\n"); next; } push @searchpath, $path_temp; } } # Reset $confpath to the first path $confpath = $searchpath[0]; # # Find existing files to possibly read in. # push @searchpath, $opts{I} if ($opts{I}); foreach my $i (@searchpath) { debug("searching $i\n"); foreach my $ft (keys(%filetypes)) { if ("$i/$ft" eq $persistentFile) { debug("skipping persistent file $i/$ft\n"); next; } debug("searching for $i/$ft\n"); $knownfiles{"$i/$ft"} = $ft if (-f "$i/$ft"); my $localft = $ft; $localft =~ s/.conf/.local.conf/; $knownfiles{"$i/$localft"} = $ft if (-f "$i/$localft"); } } # # Ask the user if they want them to be read in and read them # if (keys(%knownfiles)) { my @files; if (defined($opts{'r'})) { if ($opts{'r'} eq "all" || $opts{'r'} eq "a") { @files = keys(%knownfiles); } elsif ($opts{'r'} ne "none" && $opts{'r'} ne "n") { print "unknown argument to -r: $opts{'r'}\n"; exit(1); } } elsif(defined($opts{'R'})) { @files = split(/\s*,\s*/,$opts{'R'}); foreach my $i (@files) { my $x = $i; $x =~ s/.*\/([^\/]+)$/$1/; $knownfiles{$i} = $x; } Print("reading: ", join(",",@files),"\n"); } else { @files = display_menu(-head => "The following installed configuration files were found:\n", -tail => "Would you like me to read them in? Their content will be merged with the\noutput files created by this session.\n\nValid answer examples: \"all\", \"none\",\"3\",\"1,2,5\"\n", -multiple => 1, -question => 'Read in which', -defaultvalue => 'all', sort keys(%knownfiles)); } foreach my $i (@files) { debug("reading $i\n"); read_config($i, $knownfiles{$i}); } } if ($opts{'g'}) { my @groups = split(/,:\s/,$opts{'g'}); foreach my $group (@groups) { do_group($group); } } elsif ($#ARGV >= 0) { # # loop through requested files. # foreach my $i (@ARGV) { if (!defined($filetypes{$i})) { warn "invalid file: $i\n"; } else { if ($opts{'a'}) { $didfile{$i} = 1; } else { build_file($term, $i, $filetypes{$i}); } } } } else { # # ask user to select file type to operate on. # while(1) { my $line = display_menu(-head => "I can create the following types of configuration files for you.\nSelect the file type you wish to create:\n(you can create more than one as you run this program)\n", -question => 'Select File', -otheranswers => ['quit'], -mapanswers => { 'q' => 'quit' }, keys(%filetypes)); last if ($line eq "quit"); debug("file selected: $line\n"); build_file($term, $line, $filetypes{$line}); } } # # Write out the results to the output files. # output_files(\%filetypes, $term); # # Display the files that have been created for the user. # Print("\n\nThe following files were created:\n\n"); @didfiles = keys(%didfile); foreach my $i (@didfiles) { if ($didfile{$i} ne "1") { if ($opts{'i'} || $opts{'I'}) { $opts{'I'} = "$confpath" if (!$opts{'I'}); if (! (-d "$opts{'I'}") && ! (mkdir ("$opts{'I'}", 0755))) { print "\nCould not create $opts{'I'} directory: $!\n"; print ("File $didfile{$i} left in current directory\n"); } else { move ("$opts{'I'}/$i", "$opts{'I'}/$i.bak") if (-f "$opts{'I'}/$i"); if (move ("$didfile{$i}", "$opts{'I'}")) { print(" $didfile{$i} installed in $opts{'I'}\n"); } else { print "\nCould not move file $didfile{$i} to $opts{'I'}/$i: $!\n"; print ("File $didfile{$i} left in current directory\n"); } } } elsif ($opts{'p'}) { if (! (-d "$home") && ! (mkdir ("$home", 0755))) { print "\nCould not create $home directory: $!\n"; print ("File $didfile{$i} left in current directory\n"); } else { move ("$home/$i", "$home/$i.bak") if (-f "$home/$i"); if (move ("$didfile{$i}", "$home")) { print(" $didfile{$i} installed in $home\n"); } else { print "\nCould not move file $didfile{$i} to $home: $!\n"; print ("File $didfile{$i} left in current directory\n"); } } } else { Print(" $didfile{$i} ", ($i ne $didfile{$i})?"[ from $i specifications]":" ","\n"); if ($opts{'d'}) { open(I,$didfile{$i}); debug(" " . join(" ",<I>) . "\n"); close(I); } } } } if (!$opts{'p'} && !$opts{'i'} && !$opts{'I'}) { Print("\nThese files should be moved to $confpath if you want them used by everyone on the system. In the future, if you add the -i option to the command line I'll copy them there automatically for you. Or, if you want them for your personal use only, copy them to $home . In the future, if you add the -p option to the command line I'll copy them there automatically for you. "); } ########################################################################### # Functions ########################################################################### sub Print { print @_ if (!$opts{'q'}); } # # handle a group of questions # sub get_yn_maybe { my $question = shift; my $ans = "y"; if ($question ne "") { $ans = get_answer($term, $question, valid_answers(qw(yes y no n)), 'y'); } return ($ans =~ /^y/)?1:0; } sub do_group { my $group = shift; die "no such group $group\n" if (!$groups{$group}); foreach my $token (@{$groups{$group}}) { if ($token->[0] eq "message") { Print ("$token->[1] $token->[2]\n"); } elsif ($token->[0] eq "subgroup") { do_group($token->[1]) if (get_yn_maybe($token->[2])); } elsif (defined($tokenmap{$token->[1]})) { if (get_yn_maybe($token->[2])) { do { do_line($token->[1], $tokenmap{$token->[1]}); } until ($token->[0] ne "multiple" || get_answer($term, "Do another $token->[1] line?", valid_answers(qw(yes y no n)), 'y') =~ /n/); } } elsif (defined($filetypes{$token->[1]})) { $didfile{$token->[1]} = 1; } else { die "invalid member $token->[1] of group $group\n"; } } } # # build a particular type of file by operating on sections # sub build_file { my ($term, $filename, $fileconf) = @_; $didfile{$filename} = 1; my (@lines); while(1) { my $line = display_menu(-head => "The configuration information which can be put into $filename is divided\ninto sections. Select a configuration section for $filename\nthat you wish to create:\n", -otheranswers => ['finished'], -mapanswers => { 'f' => 'finished' }, -question => "Select section", -numeric => 1, map { $_->{'title'}[0] } @$fileconf); return @lines if ($line eq "finished"); do_section($fileconf->[$line-1]); } } # # configure a particular section by operating on token types # sub do_section { my $confsect = shift; my @lines; while(1) { Print ("\nSection: $confsect->{'title'}[0]\n"); Print ("Description:\n"); Print (" ", join("\n ",@{$confsect->{'description'}}),"\n"); my $line = display_menu(-head => "Select from:\n", -otheranswers => ['finished','list'], -mapanswers => { 'f' => 'finished', 'l' => 'list' }, -question => 'Select section', -descriptions => [map { $confsect->{$_}{info}[0] } @{$confsect->{'thetokens'}}], @{$confsect->{'thetokens'}}); return @lines if ($line eq "finished"); if ($line eq "list") { print "Lines defined for section \"$confsect->{title}[0]\" so far:\n"; foreach my $i (@{$confsect->{'thetokens'}}) { if ($#{$confsect->{$i}{'results'}} >= 0) { print " ",join("\n ",@{$confsect->{$i}{'results'}}),"\n"; } } next; } do_line($line, $confsect->{$line}); } return; } # # Ask all the questions related to a particular line type # sub do_line { my $token = shift; my $confline = shift; my (@answers, $counter, $i); # debug(my_Dumper($confline)); Print ("\nConfiguring: $token\n"); Print ("Description:\n ",join("\n ",@{$confline->{'info'}}),"\n\n"); for($i=0; $i <= $#{$confline->{'question'}}; $i++) { if (defined($confline->{'question'}[$i]) && $confline->{'question'}[$i] ne "") { my $q = $confline->{'question'}[$i]; $q =~ s/\$(\d+)/$answers[$1]/g; debug("after: $term, $q, ",$confline->{'validanswer'}[$i],"\n"); $answers[$i] = get_answer($term, $q, $confline->{'validanswer'}[$i]); $answers[$i] =~ s/\"/\\\"/g; $answers[$i] = '"' . $answers[$i] . '"' if ($answers[$i] =~ /\s/); } } if ($#{$confline->{'line'}} == -1) { my ($i,$line); for($i=0; $i <= $#{$confline->{'question'}}; $i++) { next if (!defined($confline->{'question'}[$i]) || $confline->{'question'}[$i] eq ""); $line .= " \$" . $i; } push @{$confline->{'line'}}, $line; } foreach my $line (@{$confline->{'line'}}) { my $finished = $line; debug("preline: $finished\n"); debug("answers: ",my_Dumper(\@answers)); $finished =~ s/\$(\d+)/$answers[$1]/g; if ($line =~ s/^eval\s+//) { debug("eval: $finished\n"); $finished = eval $finished; debug("eval results: $finished\n"); } $finished = $token . " " . $finished; Print ("\nFinished Output: $finished\n"); push @{$confline->{'results'}},$finished; } } # # read all sets of config files in the various subdirectories. # sub read_config_files { my $readdir = shift; my $filetypes = shift; opendir(DH, $readdir) || die "no such directory $readdir, did you run make install?\n"; my $dir; my $configfilename="snmpconf-config"; while(defined($dir = readdir(DH))) { next if ($dir =~ /^\./); next if ($dir =~ /CVS/); debug("dir entry: $dir\n"); if (-d "$readdir/$dir" && -f "$readdir/$dir/$configfilename") { my $conffile; # read the top level configuration inforamation about the direcotry. open(I, "$readdir/$dir/$configfilename"); while(<I>) { $conffile = $1 if (/forconffile: (.*)/); } close(I); # no README informatino. if ($conffile eq "") { print STDERR "Warning: No 'forconffile' information in $readdir/$dir/$configfilename\n"; next; } # read all the daat in the directory $filetypes->{$conffile} = read_config_items("$readdir/$dir", $conffile); } else { # no README informatino. print STDERR "Warning: No $configfilename file found in $readdir/$dir\n"; } } closedir DH; } # # read each configuration file in a directory # sub read_config_items { my $itemdir = shift; my $type = shift; opendir(ITEMS, $itemdir); my $file; my @results; while(defined($file = readdir(ITEMS))) { next if ($file =~ /~$/); next if ($file =~ /^snmpconf-config$/); if (-f "$itemdir/$file") { my $res = read_config_item("$itemdir/$file", $type); if (scalar(keys(%$res)) > 0) { push @results, $res; } } } closedir(ITEMS); return \@results; } # # mark a list of tokens as a special "group" # sub read_config_group { my ($fh, $group, $type) = @_; my $line; debug("handling group $group\n"); push (@{$groups{$group}},['filetype', $type]); while($line = <$fh>) { chomp($line); next if ($line =~ /^\s*$/); next if ($line =~ /^\#/); return $line if ($line !~ /^(single|multiple|message|filetype|subgroup)/); my ($type, $token, $rest) = ($line =~ /^(\w+)\s+([^\s]+)\s*(.*)/); debug ("reading group $group : $type -> $token -> $rest\n"); push (@{$groups{$group}}, [$type, $token, $rest]); } return; } # # Parse one file # sub read_config_item { my $itemfile = shift; my $itemcount; my $type = shift; my $fh = new IO::File($itemfile); return if (!defined($fh)); my (%results, $curtoken); debug("tokenitems: ", my_Dumper(\%tokenitems)); topwhile: while($line = <$fh>) { next if ($line =~ /^\s*\#/); my ($token, $rest) = ($line =~ /^(\w+)\s+(.*)/); next if (!defined($token) || !defined($rest)); while ($token eq 'group') { # handle special group list my $next = read_config_group($fh, $rest,$type); if ($next) { ($token, $rest) = ($next =~ /^(\w+)\s+(.*)/); } else { next topwhile; } } debug("token: $token => $rest\n"); if ($token eq 'steal') { foreach my $stealfrom (keys(%{$results{$rest}})) { if (!defined($results{$curtoken}{$stealfrom})) { @{$results{$curtoken}{$stealfrom}} = @{$results{$rest}{$stealfrom}}; } } } elsif (defined($tokenitems{$token})) { if (!defined($curtoken)) { die "error in configuration file $itemfile, no token set\n"; } $rest =~ s/^\#//; push @{$results{$curtoken}{$token}},$rest; } elsif (defined($arrayitems{$token})) { if (!defined($curtoken)) { die "error in configuration file $itemfile, no token set\n"; } my ($num, $newrest) = ($rest =~ /^(\d+)\s+(.*)/); if (!defined($num) || !defined($newrest)) { warn "invalid config line: $line\n"; } else { $results{$curtoken}{$token}[$num] = $newrest; } } elsif ($token =~ /^token\s*$/) { $rest = lc($rest); $curtoken = $rest; if (! exists $results{$curtoken}{'defined'}) { push @{$results{'thetokens'}}, $curtoken; $results{$curtoken}{'defined'} = 1; } $tokenmap{$curtoken} = $results{$curtoken}; debug("current token set to $token\n"); } else { push @{$results{$token}},$rest; } } return \%results; } sub debug { print @_ if ($opts{'d'}); } sub output_files { my $filetypes = shift; my $term = shift; foreach my $ft (keys(%$filetypes)) { next if (!$didfile{$ft}); my $outputf = $ft; if (-f $outputf && !$opts{'f'}) { print "\nError: An $outputf file already exists in this directory.\n\n"; my $ans = get_answer($term,"'overwrite', 'skip', 'rename' or 'append'? ",valid_answers(qw(o overwrite r rename s skip a append))); next if ($ans =~ /^(s|skip)$/i); if ($ans =~ /^(a|append)/) { $outputf = ">$outputf"; } elsif ($ans =~ /^(r|rename)$/i) { # default to rename for error conditions $outputf = $term->readline("Save to what new file name instead (or 'skip')? "); } } $didfile{$ft} = $outputf; open(O,">$outputf") || warn "couldn't write to $outputf\n"; print O "#" x 75,"\n"; print O "#\n# $ft\n"; print O "#\n# - created by the snmpconf configuration program\n#\n"; foreach my $sect (@{$filetypes->{$ft}}) { my $secthelp = 0; foreach my $token (@{$sect->{'thetokens'}}) { if ($#{$sect->{$token}{'results'}} >= 0) { if ($secthelp++ == 0) { print O "#" x 75,"\n# SECTION: ", join("\n# ", @{$sect->{title}}), "\n#\n"; print O "# ", join("\n# ",@{$sect->{description}}), "\n"; } print O "\n# $token: ", join("\n# ",@{$sect->{$token}{info}}), "\n\n"; foreach my $result (@{$sect->{$token}{'results'}}) { print O "$result\n"; } } } print O "\n\n\n"; } if ($#{$unknown{$ft}} > -1) { print O "#\n# Unknown directives read in from other files by snmpconf\n#\n"; foreach my $unknown (@{$unknown{$ft}}) { print O $unknown,"\n"; } } close(O); } } sub get_answer { my ($term, $question, $regexp, $defaultval) = @_; $question .= " (default = $defaultval)" if (defined($defaultval) && $defaultval ne ""); $question .= ": "; my $ans = $term->readline($question); return $defaultval if ($ans eq "" && defined($defaultval) && $defaultval ne ""); while (!(!defined($regexp) || $regexp eq "" || $ans =~ /$regexp/)) { print "invalid answer! It must match this regular expression: $regexp\n"; $ans = $term->readline($question); } return $defaultval if ($ans eq "" && defined($defaultval) && $defaultval ne ""); return $ans; } sub valid_answers { my @list; foreach $i (@_) { push @list, $i if ($i); } return "^(" . join("|",@list) . ")\$"; } sub read_config { my $file = shift; my $filetype = shift; return if (!defined($filetypes{$filetype})); if (! -f $file) { warn "$file does not exist\n"; return; } open(I,$file); while(<I>) { next if (/^\s*\#/); next if (/^\s*$/); chomp; my ($token, $rest) = /^\s*(\w+)\s+(.*)/; $token = lc($token); next if (defined($alllines{$_})); # drop duplicate lines if (defined($tokenmap{$token})) { push @{$tokenmap{$token}{'results'}},$_; } else { push @{$unknown{$filetype}},$_; } $alllines{$_}++; } close(I); } sub display_menu { my %config; while ($#_ > -1 && $_[0] =~ /^-/) { my $key = shift; $config{$key} = shift; } my $count=1; print "\n" if (!defined($config{'-dense'})); if ($config{'-head'}) { print $config{'-head'}; print "\n" if (!defined($config{'-dense'})); } my @answers = @_; my @list; if (defined($config{'-descriptions'}) && ref($config{'-descriptions'}) eq "ARRAY") { @list = @{$config{'-descriptions'}} } else { @list = @_; } foreach my $i (@list) { printf " %2d: $i\n", $count++ if ($i); } print "\n" if (!defined($config{'-dense'})); if (defined($config{'-otheranswers'})) { if (ref($config{'-otheranswers'}) eq 'ARRAY') { print "Other options: ", join(", ", @{$config{'-otheranswers'}}), "\n"; push @answers, @{$config{'-otheranswers'}}; push @answers, keys(%{$config{'-mapanswers'}}); } else { my $maxlen = 0; push @answers,keys(%{$config{'-otheranswers'}}); foreach my $i (keys(%{$config{'-otheranswers'}})) { $maxlen = length($i) if (length($i) > $maxlen); } foreach my $i (keys(%{$config{'-otheranswers'}})) { printf(" %-" . $maxlen . "s: %s\n", $i, $config{'-otheranswers'}{$i}); } } print "\n" if (!defined($config{'-dense'})); } if ($config{'-tail'}) { print $config{'-tail'}; print "\n" if (!defined($config{'-dense'})); } if (defined($config{'-question'})) { while(1) { my $numexpr; if ($config{'-multiple'}) { $numexpr = '[\d\s,]+|all|a|none|n'; } else { $numexpr = '\d+'; } push @answers,"" if ($config{'-defaultvalue'}); $ans = get_answer($term, $config{'-question'}, valid_answers($numexpr,@answers), $config{'-defaultvalue'}); if ($config{'-mapanswers'}{$ans}) { $ans = $config{'-mapanswers'}{$ans}; } if ($ans =~ /^$numexpr$/) { if ($config{'-multiple'}) { my @list = split(/\s*,\s*/,$ans); my @ret; $count = 0; foreach my $i (@_) { $count++; if ($ans eq "all" || $ans eq "a" || grep(/^$count$/,@list)) { push @ret, $i; } } return @ret; } else { if ($ans <= 0 || $ans > $#_+1) { warn "invalid selection: $ans [must be 1-" . ($#_+1) . "]\n"; } else { return $ans if ($config{'-numeric'}); $count = 0; foreach my $i (@_) { $count++; if ($ans eq $count) { return $i; } } } } } else { return $ans; } } } } sub my_Dumper { if ($opts{'D'}) { return Dumper(@_); } else { return "\n"; } } sub get_persistentDir { my $file = shift; my $result = 0; if (! -f $file) { return 0; } open(I,$file); while(<I>) { next if (/^\s*\#/); next if (/^\s*$/); chomp; my ($token, $rest) = /^\s*(\w+)\s+(.*)/; if (lc($token) eq "persistentdir") { $result = $rest; } next; } close(I); return $result; } # Usage: &win32_reg_read("key", "value") # Example: &win32_reg_read("SOFTWARE\\Net-SNMP","SNMPSHAREPATH"); # Returns: Value if found in HKCU or HCLM. Otherwise an empty string. sub win32_reg_read { my $sub_key = shift; my $value = shift; require Win32::Registry; my ($hkey, %key_values, $temp, $no_warn); # Try HKCU first $no_warn = $HKEY_CURRENT_USER; if ($HKEY_CURRENT_USER->Open($sub_key, $hkey)) { $hkey->GetValues(\%key_values); foreach $temp (sort keys %key_values) { if ($temp eq $value) { return $key_values{$temp}[2]; } } $hkey->Close(); } # Try HKLM second $no_warn = $HKEY_LOCAL_MACHINE; if ($HKEY_LOCAL_MACHINE->Open($sub_key, $hkey)) { $hkey->GetValues(\%key_values); foreach $temp (sort keys %key_values) { if ($temp eq $value) { return $key_values{$temp}[2]; } } $hkey->Close(); } return ""; } # Usage: &my_getenv("key") # Example: &my_getenv("SNMPSHAREPATH"); # Returns: Unix: Environment variable value (undef if not defined) # Win32: HKCU\Software\Net-SNMP\(key) or # Win32: HKLM\Software\Net-SNMP\(key) or # Win32: Environment variable value (undef if not defined) sub my_getenv { my $key = shift; # Unix if ($^O ne 'MSWin32') { return $ENV{$key}; } # Windows else { my $temp = &win32_reg_read("SOFTWARE\\Net-SNMP","$key"); if ($temp ne "") { return $temp; } else { return $ENV{$key}; } } }