Catalogue initial des outils externes et détection de leurs versions #41
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Catalogue initial des outils externes et détection de leurs versions
Statut
À faire
Priorité
Haute
Objectif
Créer le catalogue initial des outils externes utilisés par Labfy Investigation et fournir une détection fiable de leur version.
Ce ticket complète les modules déjà validés :
Le catalogue décrit les outils connus par l’application. Le registre décrit leur état sur la machine courante.
Contexte
ToolRegistrypermet déjà d’enregistrer un outil, de rechercher son exécutable dans lePATH, de conserver son chemin résolu et sa version détectée, et de distinguer les étatsUNKNOWN,AVAILABLEetMISSING.Il manque une source centrale définissant :
Sans catalogue central, chaque fonctionnalité finirait par enregistrer elle-même ses dépendances.
Modules attendus
Le ticket ne doit pas modifier l’API publique de
ToolRegistry, sauf nécessité démontrée pendant l’implémentation.Responsabilités de ToolCatalog
Le module doit :
ToolRegistry;ToolProcess;Le module ne doit pas installer de dépendance, modifier le
PATH, utiliser un shell, analyser un résultat OSINT ni modifier l’interface graphique.Catalogue initial
dns.digdigdig-vdns.hosthosthost-Vnetwork.whoiswhoiswhois--versionhttp.curlcurlcurl--versiontls.opensslOpenSSLopensslversionTous ces outils sont optionnels au niveau de l’application entière.
Ne pas ajouter encore
nslookup,traceroute,jq,file,exiftool,nmap,subfinder,amass, les outils Python ou les outils installés depuis GitHub.Structure ToolCatalogEntry
Créer une structure opaque :
Elle conserve au minimum :
Les données du catalogue sont statiques et immuables. Elles ne doivent jamais être libérées par l’appelant.
Domaine d’erreur
API publique proposée
Consultation
Accesseurs
Enregistrement
Détection d’une version
out_versionreçoit une chaîne nouvellement allouée, à libérer avecg_free().La fonction ne doit pas appeler
tool_registry_set_version().Règles d’enregistrement
tool_catalog_register_defaults()doit vérifier avant toute insertion qu’aucun identifiant du catalogue n’existe déjà dans le registre.En cas de doublon :
FALSE;TOOL_CATALOG_ERROR_REGISTRATION.Cette prévalidation évite une insertion partielle, car
ToolRegistryne fournit pas de suppression.Validation de la détection
La fonction doit refuser :
NULL;NULLou vide ;out_versionégal àNULL;out_versionpointant déjà vers une chaîne ;GErrordéjà initialisé.Au début d’un appel valide :
Cas d’erreur :
Exécution de la commande de version
Utiliser exclusivement :
avec :
Interdictions :
/bin/sh -c;system();popen();Annulation
Si
ToolProcessretourneTOOL_PROCESS_ERROR_CANCELLED, la fonction doit produire :Aucune version partielle ne doit être retournée.
Code de sortie
Pour une commande de version, un code de sortie non nul est un échec :
Une terminaison par signal produit la même catégorie d’erreur.
La sortie ne doit pas être interprétée lorsque le processus n’a pas terminé normalement avec le code zéro.
Sélection de la sortie
Règle générique :
Cette règle évite une logique spéciale par outil pendant ce premier ticket.
Normalisation
Le catalogue ne doit pas extraire seulement un numéro sémantique.
La version conservée est la première ligne descriptive exploitable, par exemple :
Algorithme :
g_utf8_make_valid();\ret\n;Propriété des données
Les entrées et chaînes du catalogue sont empruntées et statiques.
La chaîne placée dans
*out_versionappartient à l’appelant et doit être libérée avecg_free().ToolCatalogne devient jamais propriétaire du registre.Contraintes de thread
Le catalogue statique est immuable.
tool_catalog_detect_version():ToolInfoaprès la préparation.Le stockage avec
tool_registry_set_version()reste la responsabilité du propriétaire du registre, idéalement dans le thread principal.Tests unitaires obligatoires
Les tests utilisent uniquement de faux exécutables temporaires.
Ils ne doivent pas dépendre des outils réellement installés.
Tests du catalogue
UNKNOWN;Tests de détection
Noms de tests suggérés
Makefile
Ajouter le binaire à
make testetmake clean.Vérifications
Vérification mémoire
Critères d’acceptation
Le ticket est validé lorsque :
ToolProcess;G_IO_ERROR_CANCELLED;Makefile.Démonstration finale
Après validation :
ToolRegistry;tool_catalog_register_defaults();tool_registry_refresh();tool_registry_set_version().Cette démonstration restera hors de l’interface GTK principale.
Suite prévue
Ce ticket devra créer le registre global de l’application, enregistrer le catalogue, rafraîchir les disponibilités hors du thread GTK, détecter les versions et publier une tâche dans
TaskManager.