Skip to content

Commit b22807f

Browse files
committed
Remove deprecated functionality.
Changelog excerpt: - Remove deprecated functionality (automatically downloading the main.cvd and/or daily.cvd files, internal self-update functionality; for the former, just download these files manually; for the latter, just use Composer instead).
1 parent 4ff61ef commit b22807f

16 files changed

+22
-178
lines changed

Changelog.txt

+5-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ Versioning guidelines for SemVer can be found at: https://semver.org/
77

88
=== Changes made since last versioned release ===
99

10-
None.
10+
- [2021.07.22; Maikuolan]: Remove deprecated functionality (automatically
11+
downloading the main.cvd and/or daily.cvd files, internal self-update
12+
functionality; for the former, just download these files manually; for the
13+
latter, just use Composer instead).
1114

1215
=== Version/Release 1.0.3 ===
1316
PATCH RELEASE.
@@ -18,7 +21,7 @@ PATCH RELEASE.
1821
- [2021.07.21; Maikuolan]: SigTool now displays current RAM usage throughout
1922
its entire process.
2023

21-
- [2021.07.22; Maikuolan]: Update requirements and installation instructions.
24+
- [2021.07.22; Maikuolan]: Updated requirements and installation instructions.
2225

2326
Caleb M (Maikuolan),
2427
July 22, 2021.

SigTool.php

+17-134
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?php
22
/**
3-
* SigTool v1.0.3 (last modified: 2021.07.21).
3+
* SigTool v2.0.0 (last modified: 2021.07.22).
44
*
55
* Generates signatures for phpMussel using main.cvd and daily.cvd from ClamAV.
66
*
@@ -18,12 +18,12 @@ class SigTool extends \Maikuolan\Common\YAML
1818
/**
1919
* @var string Script version.
2020
*/
21-
public $Ver = '1.0.3';
21+
public $Ver = '2.0.0';
2222

2323
/**
2424
* @var string Last modified date.
2525
*/
26-
public $Modified = '2021.07.21';
26+
public $Modified = '2021.07.22';
2727

2828
/**
2929
* @var string Script user agent.
@@ -86,44 +86,6 @@ public function setRaw(string $Raw)
8686
$this->Raw = $Raw;
8787
}
8888

89-
/**
90-
* Use cURL to fetch files.
91-
*
92-
* @param string $URI The resource to fetch.
93-
* @param int $Timeout An optional timeout.
94-
* @return string The cURL response (the fetched resource).
95-
*/
96-
public function fetch($URI, $Timeout = 600)
97-
{
98-
/** Initialise the cURL session. */
99-
$Request = curl_init($URI);
100-
101-
$LCURI = strtolower($URI);
102-
$SSL = (substr($LCURI, 0, 6) === 'https:');
103-
104-
curl_setopt($Request, CURLOPT_FRESH_CONNECT, true);
105-
curl_setopt($Request, CURLOPT_HEADER, false);
106-
curl_setopt($Request, CURLOPT_POST, false);
107-
if ($SSL) {
108-
curl_setopt($Request, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS);
109-
curl_setopt($Request, CURLOPT_SSL_VERIFYPEER, false);
110-
}
111-
curl_setopt($Request, CURLOPT_FOLLOWLOCATION, true);
112-
curl_setopt($Request, CURLOPT_MAXREDIRS, 1);
113-
curl_setopt($Request, CURLOPT_RETURNTRANSFER, true);
114-
curl_setopt($Request, CURLOPT_TIMEOUT, $Timeout);
115-
curl_setopt($Request, CURLOPT_USERAGENT, $this->UA);
116-
117-
/** Execute and get the response. */
118-
$Response = curl_exec($Request);
119-
120-
/** Close the cURL session. */
121-
curl_close($Request);
122-
123-
/** Return the results of the request. */
124-
return $Response;
125-
}
126-
12789
/**
12890
* Apply shorthand to signature names and remove any unwanted lines.
12991
*
@@ -325,36 +287,28 @@ private function formatSize($Size)
325287
" Arguments (all are OFF by default; include to turn ON):\n" .
326288
" - No arguments: Display this help information.\n" .
327289
" - x: Extract signature files from \"daily.cvd\" and \"main.cvd\".\n" .
328-
" - p: Process signature files for use with phpMussel.\n" .
329-
" - m: Download main.cvd before processing (deprecated).\n" .
330-
" - d: Download daily.cvd before processing (deprecated).\n" .
331-
" - u: Update SigTool (redownloads SigTool's files and dies;\n" .
332-
" doesn't perform any checks).\n\n"
290+
" - p: Process signature files for use with phpMussel.\n\n"
333291
),
334292
'Accessing' => ' Accessing %s ...',
335293
'Decompressing' => ' Decompressing %s ...',
336294
'Deleting' => ' Deleting %s ...',
337295
'Done' => " Done!",
338-
'Downloading' => ' Downloading %s ...',
339296
'Extracting_to_Cvd' => ' Extracting contents from %s to Cvd object ...',
340297
'Failed' => " Failed!",
341298
'Processing' => ' Processing ...',
342-
'Sorting' => ' Sorting %s ...',
343299
'Writing' => ' Writing %s ...',
344-
'_Error0' => ' Error at line "%d"! SigTool terminated.',
345-
'_Error1' => ' Writing to "%2$s" failed at line "%1$d"! SigTool terminated.',
346-
'_Error2' => ' Reading from "%2$s" failed at line "%1$d"! SigTool terminated.',
347-
'_Error3' => ' Fetching "%2$s" from the upstream failed at line "%1$d"! SigTool terminated.',
348-
'_Error4' => ' Fetching "%2$s" blocked by upstream firewall at line "%1$d"! SigTool terminated.',
349-
'_Error5' => ' Reading "%2$s" failed at line "%1$d"! "%2$s" could be corrupted! SigTool terminated.'
300+
'_Error_Corrupted' => ' Reading "%2$s" failed at line "%1$d"! "%2$s" could be corrupted! SigTool terminated.',
301+
'_Error_Other' => ' Error at line "%d"! SigTool terminated.',
302+
'_Error_Reading' => ' Reading from "%2$s" failed at line "%1$d"! SigTool terminated.',
303+
'_Error_Writing' => ' Writing to "%2$s" failed at line "%1$d"! SigTool terminated.'
350304
];
351305

352306
/**
353307
* Terminate with debug information.
354308
*/
355-
$Terminate = function ($Err = '_Error0', $Msg = '') use (&$SigTool, &$L10N) {
309+
$Terminate = function ($Err = '_Error_Other', $Msg = '') use (&$SigTool, &$L10N) {
356310
$Debug = debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT | DEBUG_BACKTRACE_IGNORE_ARGS, 1)[0];
357-
$SigTool->outputMessage(sprintf($L10N[$Err] ?? $L10N['_Error0'], $Debug['line'], $Msg), true);
311+
$SigTool->outputMessage(sprintf($L10N[$Err] ?? $L10N['_Error_Other'], $Debug['line'], $Msg), true);
358312
echo "\n\n";
359313
die;
360314
};
@@ -373,94 +327,23 @@ private function formatSize($Size)
373327
date_default_timezone_set('Europe/Zurich');
374328

375329
/**
376-
* Updating SigTool.
377-
*/
378-
if (strpos($RunMode, 'u') !== false) {
379-
foreach (['SigTool.php', 'YAML.php', 'Cvd.php'] as $File) {
380-
$SigTool->outputMessage(sprintf($L10N['Downloading'], $File), true);
381-
try {
382-
$Data = $SigTool->fetch('https://raw.githubusercontent.com/phpMussel/SigTool/master/' . $File);
383-
} catch (\Exception $e) {
384-
$Terminate('_Error3', $File);
385-
}
386-
$SigTool->outputMessage(sprintf($L10N['Downloading'], $File) . $L10N['Done']);
387-
$SigTool->outputMessage(sprintf($L10N['Writing'], $File), true);
388-
if (!file_put_contents($SigTool->fixPath(__DIR__ . '/' . $File), $Data)) {
389-
$Terminate('_Error1', $File);
390-
}
391-
$SigTool->outputMessage(sprintf($L10N['Writing'], $File) . $L10N['Done']);
392-
}
393-
die;
394-
}
395-
396-
/**
397-
* @deprecated
398-
* Phase 1: Download main.cvd.
399-
*/
400-
if (strpos($RunMode, 'm') !== false) {
401-
echo sprintf($L10N['Downloading'], 'main.cvd');
402-
try {
403-
$Data = $SigTool->fetch('http://database.clamav.net/main.cvd');
404-
} catch (\Exception $e) {
405-
$Terminate('_Error3', 'main.cvd');
406-
}
407-
if ($Data === '') {
408-
$Terminate('_Error3', 'main.cvd');
409-
}
410-
if ($Data === 'error code: 1020') {
411-
$Terminate('_Error4', 'main.cvd');
412-
}
413-
echo $L10N['Done'] . sprintf($L10N['Writing'], 'main.cvd');
414-
if (!file_put_contents($SigTool->fixPath(__DIR__ . '/main.cvd'), $Data)) {
415-
$Terminate('_Error1', 'main.cvd');
416-
}
417-
echo $L10N['Done'];
418-
unset($Data);
419-
}
420-
421-
/**
422-
* @deprecated
423-
* Phase 2: Download daily.cvd.
424-
*/
425-
if (strpos($RunMode, 'd') !== false) {
426-
echo sprintf($L10N['Downloading'], 'daily.cvd');
427-
try {
428-
$Data = $SigTool->fetch('http://database.clamav.net/daily.cvd');
429-
} catch (\Exception $e) {
430-
$Terminate('_Error3', 'daily.cvd');
431-
}
432-
if ($Data === '') {
433-
$Terminate('_Error3', 'daily.cvd');
434-
}
435-
if ($Data === 'error code: 1020') {
436-
$Terminate('_Error4', 'daily.cvd');
437-
}
438-
echo $L10N['Done'] . sprintf($L10N['Writing'], 'daily.cvd');
439-
if (!file_put_contents($SigTool->fixPath(__DIR__ . '/daily.cvd'), $Data)) {
440-
$Terminate('_Error1', 'daily.cvd');
441-
}
442-
echo $L10N['Done'];
443-
unset($Data);
444-
}
445-
446-
/**
447-
* Phase 3: Extract ClamAV signature files from "daily.cvd" and "main.cvd" packages.
330+
* Extract ClamAV signature files from "daily.cvd" and "main.cvd" packages.
448331
*/
449332
if (strpos($RunMode, 'x') !== false) {
450333
foreach (['daily.cvd', 'main.cvd'] as $Set) {
451334
$File = $SigTool->fixPath(__DIR__ . '/' . $Set);
452335

453336
/** Terminate if the file is missing or unreadable. */
454337
if (!file_exists($File) || !is_readable($File)) {
455-
$Terminate('_Error2', $Set);
338+
$Terminate('_Error_Reading', $Set);
456339
}
457340

458341
$SigTool->outputMessage(sprintf($L10N['Decompressing'], $Set), true);
459342
$Files = new Cvd($File);
460343
$SigTool->outputMessage(sprintf($L10N['Decompressing'], $Set) . $L10N['Done']);
461344
$SigTool->outputMessage(sprintf($L10N['Extracting_to_Cvd'], $Set), true);
462345
if ($Files->ErrorState !== 0) {
463-
$Terminate('_Error5', $File);
346+
$Terminate('_Error_Corrupted', $File);
464347
}
465348
$SigTool->outputMessage(sprintf($L10N['Extracting_to_Cvd'], $Set) . $L10N['Done']);
466349
while (true) {
@@ -470,7 +353,7 @@ private function formatSize($Size)
470353
$SigTool->outputMessage(sprintf($L10N['Writing'], $Name), true);
471354
$Handle = fopen($SigTool->fixPath(__DIR__ . '/' . $Name), 'wb');
472355
if (!is_resource($Handle)) {
473-
$Terminate('_Error1', $Name);
356+
$Terminate('_Error_Writing', $Name);
474357
}
475358
fwrite($Handle, $Data);
476359
fclose($Handle);
@@ -487,7 +370,7 @@ private function formatSize($Size)
487370
}
488371

489372
/**
490-
* Phase 4: Process signature files for use with phpMussel.
373+
* Process signature files for use with phpMussel.
491374
*/
492375
if (strpos($RunMode, 'p') !== false) {
493376
/** Check if signatures.dat exists; If so, we'll read it for updating. */
@@ -605,13 +488,13 @@ private function formatSize($Size)
605488

606489
/** Write to file. */
607490
if (!is_resource($Handle = fopen($SigTool->fixPath(__DIR__ . '/' . $Set[4]), 'wb'))) {
608-
$Terminate('_Error1', $Set[4] . '.gz');
491+
$Terminate('_Error_Writing', $Set[4] . '.gz');
609492
}
610493
fwrite($Handle, $FileData);
611494
fclose($Handle);
612495
if ($Set[5]) {
613496
if (!is_resource($Handle = gzopen($SigTool->fixPath(__DIR__ . '/' . $Set[4] . '.gz'), 'wb'))) {
614-
$Terminate('_Error1', $Set[4] . '.gz');
497+
$Terminate('_Error_Writing', $Set[4] . '.gz');
615498
}
616499
gzwrite($Handle, $FileData);
617500
gzclose($Handle);

_docs/readme.de.md

-3
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@ Möglichen Flaggen:
3131
- Keine Argumente: Zeigt diese Hilfeinformationen.
3232
- `x`: Extrahiert Signaturdateien aus "daily.cvd" und "main.cvd".
3333
- `p`: Verarbeitet Signaturdateien zur Verwendung mit phpMussel.
34-
- `m`: Holt `main.cvd` vor der Verarbeitung.
35-
- `d`: Holt `daily.cvd` vor der Verarbeitung.
36-
- `u`: Aktualisiert SigTool (lädt `SigTool.php` erneut herunter und die; es werden keine Prüfungen durchgeführt).
3734

3835
Die Ausgabe ist verschiedenen phpMussel-Signaturdateien, direkt aus der ClamAV-Signaturdatenbank in zwei Formen generiert:
3936
- Signaturdateien, die direkt in das `/vault/signatures/`-Verzeichnis eingefügt werden können.

_docs/readme.en.md

-3
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@ Possible flags:
3131
- No arguments: Display this help information.
3232
- `x`: Extract signature files from `daily.cvd` and `main.cvd`.
3333
- `p`: Process signature files for use with phpMussel.
34-
- `m`: Download `main.cvd` before processing.
35-
- `d`: Download `daily.cvd` before processing.
36-
- `u`: Update SigTool (redownloads `SigTool.php` and dies; no checks performed).
3734

3835
Output produced is various phpMussel signature files generated directly from the ClamAV signatures database, in two forms:
3936
- Signature files that can be inserted directly into the `/vault/signatures/` directory.

_docs/readme.es.md

-3
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@ Las posibles banderas:
3131
- Sin argumentos: Muestra esta información de ayuda.
3232
- `x`: Extraiga archivos de firmas de `daily.cvd` y `main.cvd`.
3333
- `p`: Procese archivos de firmas para uso con phpMussel.
34-
- `m`: Descargue `main.cvd` antes de procesar.
35-
- `d`: Descargue `daily.cvd` antes de procesar.
36-
- `u`: Actualizar SigTool (descarga `SigTool.php` de nuevo y die; no se realizan cualquier comprobaciones).
3734

3835
La salida producida es varios archivos de firmas para phpMussel generados directamente de la base de datos de firmas para ClamAV, de dos formas:
3936
- Archivos de firmas que se pueden insertar directamente en el directorio `/vault/signatures/`.

_docs/readme.fr.md

-3
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@ Drapeaux possibles :
3131
- Aucun argument : Affichez ces informations d'aide.
3232
- `x` : Extrayez les fichiers de signature de `daily.cvd` et` main.cvd`.
3333
- `p` : Procurez-vous des fichiers de signature à utiliser avec phpMussel.
34-
- `m` : Télécharger `main.cvd` avant le traitement.
35-
- `d` : Télécharger `daily.cvd` avant le traitement.
36-
- `u` : Mettre à jour SigTool (télécharge `SigTool.php` à nouveau et die ; aucun contrôle effectué).
3734

3835
La sortie produite est divers fichiers de signature pour phpMussel, généré directement à partir de la base de données de signature pour ClamAV, sous deux formes :
3936
- Fichiers de signatures qui peuvent être insérés directement dans le répertoire `/vault/signatures/`.

_docs/readme.id.md

-3
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@ Bendera yang mungkin:
3131
- Tidak ada argumen: Tampilkan informasi bantuan ini.
3232
- `x`: Ekstrak file tanda tangan dari `daily.cvd` dan `main.cvd`.
3333
- `p`: Proses file tanda tangan untuk digunakan dengan phpMussel.
34-
- `m`: Download `main.cvd` sebelum diproses.
35-
- `d`: Download `daily.cvd` sebelum diproses.
36-
- `u`: Perbarui SigTool (download `SigTool.php` lagi dan die; tidak ada pemeriksaan yang dilakukan).
3734

3835
Output yang dihasilkan adalah berbagai file tanda tangan phpMussel yang dihasilkan langsung dari database tanda tangan ClamAV, dalam dua bentuk:
3936
- File tanda tangan yang bisa dimasukkan langsung ke direktori `/vault/signatures/`.

_docs/readme.it.md

-3
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@ Flag possibile:
3131
- Nessun argomento: Visualizza le informazioni di aiuto.
3232
- `x`: Estrarre i file di firme da `daily.cvd` e `main.cvd`.
3333
- `p`: Processare le file di firma per l'utilizzo con phpMussel.
34-
- `m`: Scaricare `main.cvd` prima di processare.
35-
- `d`: Scaricare `daily.cvd` prima di processare.
36-
- `u`: Aggiornare SigTool (scarica nuovamente `SigTool.php` e die; nessun controllo effettuato).
3734

3835
L'output prodotto è vari file di firme per phpMussel generati direttamente dal database di firme per ClamAV, in due forme:
3936
- File di firme che possono essere inseriti direttamente nella cartella `/vault/signatures/`.

_docs/readme.ja.md

-3
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@ SigToolをインストールするための推奨される方法は、Composer
3131
- オプションを指定しないと、このヘルプ情報が表示されます。
3232
- `x``daily.cvd``main.cvd`からシグネチャ・ファイルを抽出します。
3333
- `p`:phpMusselで使用するためのシグネチャ・ファイルを処理します。
34-
- `m`:処理の前に`main.cvd`をダウンロードします。
35-
- `d`:処理の前に`daily.cvd`をダウンロードします。
36-
- `u`:SigToolをアップデイトします(再度`SigTool.php`をダウンロードして終了します。チェックは実行されません)。
3734

3835
生成される出力は、ClamAVシグネチャ・データベースから直接生成されたphpMusselシグネチャ・ファイルです。​2つの形式があります:
3936
- `/vault/signatures/`ディレクトリに直接挿入できるシグネチャ・ファイル。

_docs/readme.ko.md

-3
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@ SigTool이 호출되면 도움말 정보가 표시됩니다. SigTool을 사용
3131
- 옵션을 지정하지 않으면이, 도움말 정보가 표시됩니다.
3232
- `x` : `daily.cvd``main.cvd`에서 서명 파일을 추출합니다.
3333
- `p` : phpMussel과 함께 사용할 시그니처 파일 처리.
34-
- `m` : 처리하기 전에 `main.cvd`를 다운로드하십시오.
35-
- `d` : 처리하기 전에 `daily.cvd`를 다운로드하십시오.
36-
- `u` : SigTool 업데이트 (`SigTool.php`를 다시 다운로드 한 다음 종료하십시오; 아무것도 확인되지 않았다).
3734

3835
생성 된 출력은 ClamAV 서명 데이터베이스에서 직접 생성 된 phpMussel 서명 파일입니다. 두 가지 양식을 사용할 수 있습니다 :
3936
- `/vault/signatures/` 디렉토리에 삽입 할 수있는 서명 파일.

_docs/readme.nl.md

-3
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@ Mogelijke vlaggen:
3131
- Geen argumenten: Laat deze hulpinformatie zien.
3232
- `x`: Extract signatuurbestanden uit `daily.cvd` en `main.cvd`.
3333
- `p`: Verwerk signatuurbestanden voor gebruik met phpMussel.
34-
- `m`: Download `main.cvd` voor verwerking.
35-
- `d`: Download `daily.cvd` voor verwerking.
36-
- `u`: Update SigTool (downloadt `SigTool.php` opnieuw en dies; geen controles uitgevoerd).
3734

3835
Output geproduceerd is verschillende phpMussel signatuurbestanden die direct uit de ClamAV signatures database worden gegenereerd, in twee vormen:
3936
- Signatuurbestanden die direct in de `/vault/signatures/` map kunnen worden ingevoegd.

_docs/readme.pt.md

-3
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@ Bandeiras possíveis:
3131
- Sem argumentos: Exiba esta informação de ajuda.
3232
- `x`: Extraia arquivos de assinatura a partir de `daily.cvd` e` main.cvd`.
3333
- `p`: Processar arquivos de assinatura para uso com phpMussel.
34-
- `m`: Baixar `main.cvd` antes do processamento.
35-
- `d`: Baixar `daily.cvd` antes do processamento.
36-
- `u`: Atualizar SigTool (baixe `SigTool.php` novamente e die; nenhuma verificação realizada).
3734

3835
Produção produzida são vários arquivos de assinatura para phpMussel gerados diretamente do banco de dados de assinaturas para ClamAV, em duas formas:
3936
- Arquivos de assinatura que podem ser inseridos diretamente no diretório `/vault/signatures/`.

_docs/readme.ru.md

-3
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@
3131
- Без аргументов: Показать эту справочную информацию.
3232
- `x`: Извлечь файлы сигнатуры из `daily.cvd` и `main.cvd`.
3333
- `p`: Обрабатывать файлы сигнатур для использования с phpMussel.
34-
- `m`: Скачайте `main.cvd` перед обработкой.
35-
- `d`: Скачайте `daily.cvd` перед обработкой.
36-
- `u`: Обновление SigTool (загрузите `SigTool.php` заново и умирает; проверки не выполняются).
3734

3835
В результате получаются различные файлы сигнатур phpMussel, созданные непосредственно из базы данных сигнатур ClamAV, в двух формах:
3936
- Файлы сигнатуры, которые можно вставить непосредственно в каталог `/vault/signatures/`.

_docs/readme.vi.md

-3
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@ Các cờ có sẵn:
3131
- Không có đối số: Hiển thị thông tin trợ giúp này.
3232
- `x`: Trích xuất các tập tin chữ ký từ `daily.cvd``main.cvd`.
3333
- `p`: Xử lý các tập tin chữ ký để sử dụng với phpMussel.
34-
- `m`: Tải xuống `main.cvd` trước khi xử lý.
35-
- `d`: Tải xuống `daily.cvd` trước khi xử lý.
36-
- `u`: Cập nhật SigTool (tải xuống `SigTool.php` lại và die; không kiểm tra được thực hiện).
3734

3835
Đầu ra được sản xuất là các tập tin chữ ký phpMussel khác nhau được tạo trực tiếp từ cơ sở dữ liệu chữ ký ClamAV, theo hai hình thức:
3936
- Chữ ký có thể được chèn trực tiếp vào thư mục `/vault/signatures/`.

_docs/readme.zh-tw.md

-3
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@
3131
- 沒有參數:顯示此幫助信息。
3232
- `x`:從`daily.cvd``main.cvd`中提取簽名文件。
3333
- `p`:處理用於phpMussel的簽名文件。
34-
- `m`:在處理之前下載`main.cvd`
35-
- `d`:在處理之前下載`daily.cvd`
36-
- `u`:更新SigTool(重新`SigTool.php`下載然後die;沒有檢查執行).
3734

3835
產生的產出是各種phpMussel簽名文件直接從ClamAV簽名數據庫生成,有兩種形式:
3936
- 可以直接插入在`/vault/signatures/`目錄的簽名文件。

0 commit comments

Comments
 (0)