# 7.8. ingest-external-antivirus

Dans cette section, nous expliquons comment utiliser et configurer le script d’antivirus pour le service ingest-external.

1. Configuration pour ingest-external : ingest-external.conf

   > Dans ce fichier de configuration, nous précisons le nom du script antivirus utilisé, et le timeout pour le scan. Le script utilisé actuellement est scan-clamav.sh utilisant l’antivirus ClamAV.

   > Le paramètre “timeoutScanDelay” est utilisé comme timeout du traitement de l’antivirus. Il faut choisir une valeur (en millisecondes) en fonction de la performance de l’antivirus et de la somme des tailles de binaires que l’on doit pouvoir traiter simultanément sur le composant ingest-external. La valeur par défaut est de 60000 millisecondes.

    antiVirusScriptName : scan-clamav.sh
    timeoutScanDelay : 60000

2. Script d’antivirus scan-clamav.sh

   > Le script permettant de lancer d’un scan d’un fichier envoyé avec l’antivirus ClamAV et retourner le résulat :

   -1: Analyse non effectuée

     0: Analyse OK - no virus 1: Virus trouvé et corrigé 2: Virus trouvé mais non corrigé 3: Analyse NOK

     Ce fichier est mis dans le répertoire vitam/conf avec le droit d’exécution.

3. Lancer le script en Java et intégration

JavaExecuteScript.java (se trouve dans ingest-external-common) permettant de lancer le script de clamav en Java en prenant des paramètres d’entrées : le script utilisé, le chemin du fichier à scanner et le temps limité d’un scan Pour l’intégration dans ingest-external, ce script est appelé dans l’implémentation des APIs de ingest-externe. la section suivant montre comment on appelle le script depuis ingest-external en Code.

    antiVirusResult = JavaExecuteScript.executeCommand(antiVirusScriptName, filePath, timeoutScanDelay);
    .......
    switch (antiVirusResult) {
          case STATUS_ANTIVIRUS_OK:
              LOGGER.info(IngestExternalOutcomeMessage.OK_VIRUS.toString());
              // nothing to do, default already set to ok
              break;
          case STATUS_ANTIVIRUS_WARNING:
          case STATUS_ANTIVIRUS_KO:
              LOGGER.error(IngestExternalOutcomeMessage.KO_VIRUS.toString());
              antivirusParameters.setStatus(StatusCode.KO);
              antivirusParameters.putParameterValue(LogbookParameterName.outcomeDetail,
                  messageLogbookEngineHelper.getOutcomeDetail(SANITY_CHECK_SIP, StatusCode.KO));
              antivirusParameters.putParameterValue(LogbookParameterName.outcomeDetailMessage,
                  messageLogbookEngineHelper.getLabelOp(SANITY_CHECK_SIP, StatusCode.KO));
              isFileInfected = true;
              break;
          case STATUS_ANTIVIRUS_NOT_PERFORMED:
          case STATUS_ANTIVIRUS_NOT_PERFORMED_2:
              LOGGER.error(IngestExternalOutcomeMessage.FATAL_VIRUS.toString());
              antivirusParameters.setStatus(StatusCode.FATAL);
              antivirusParameters.putParameterValue(LogbookParameterName.outcomeDetail,
                  messageLogbookEngineHelper.getOutcomeDetail(SANITY_CHECK_SIP, StatusCode.FATAL));
              antivirusParameters.putParameterValue(LogbookParameterName.outcomeDetailMessage,
                  messageLogbookEngineHelper.getLabelOp(SANITY_CHECK_SIP, StatusCode.FATAL));
              isFileInfected = true;
              break;
      }
    }
        .....................................................................................................