fusioninventory / FusionInventory

Open and follow issues about the project (agent, plugin for GSIT, website and documentation)
1 stars 0 forks source link

Windows Inventory don't return correctly non-ascii characters #17

Open ncharles opened 2 years ago

ncharles commented 2 years ago

If there are Windows softwares with non-ascii characters, they show up as ??? ???? in the inventory

To reproduce, you may create dummy entries with cyrilic characters

$baseReg = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
$softwares = @(
     @{ Path = "${baseReg}\{90150000-001F-0403-1000-0000000FF1CE}"; Name = "Microsoft Office Proofing Tools 2013 – български"; Version = "15.0.4569.1506"}
)
for ($i=0; $i -lt $softwares.length; $i++) {
  $current = $softwares[$i]
  write-output "Adding dummy software $($current.Name)"
  New-Item -Path $current.Path -Force
  New-ItemProperty -Path $current.Path -Name "DisplayName" -Value $current.Name -Type "String"
  New-ItemProperty -Path $current.Path -Name "DisplayVersion" -Value $current.Version -Type "String"
}

esulting inventory will return <NAME>Microsoft Office Proofing Tools 2013 <C3><82><C2><96> ?????????</NAME>

I've tried to

And i'm a bit stuck there... do you know what I could do ?

ddurieux commented 2 years ago

Hello, I will try with your entries

ddurieux commented 2 years ago

The problem is that we use the operating system for convert (source) to utf-8. I'm trying a method to identify the encoding of string, will require couple days before have answer

ncharles commented 2 years ago

I've been trying to remove the convertion without success Apparently TieRegistry only uses Ansi methods rather than Unicode (and it goes a long way of being like that https://www.perlmonks.org/?node_id=456194 )

ddurieux commented 2 years ago

My idea is to detect the encoding with https://metacpan.org/pod/Encode::Detect::Detector, the complete string or perhaps for each character. Not sure it can works, but perhaps :D

ncharles commented 2 years ago

Hi, Is there anything I can do to help on this issue?

ddurieux commented 2 years ago

Hi, I tried my idea and not fix the problem, but have part of interessing information. Need a little more time to find a solution ^_^

ddurieux commented 2 years ago

Bon ça a l'air de venir de la récupération des données, car elles sont remplacées par des ??? directement. Le support des charsets est vraiment mal foutu dans Windows.

Je cherche des possibilités de contourner ces problèmes pour avoir des données fiables. Je te tiens au courant ;)

ncharles commented 2 years ago

Les charsets ne sont pas supportés par les méthodes sous-jacentes dans TieRegistry qui appellent Win32API::Registry en mode ANSI, donc les infos sont perdus à ce moment là

ddurieux commented 2 years ago

Oui c'est ce que j'ai vu, donc la seule solution serait de changer de lib et pas mal de code :(

ncharles commented 2 years ago

Comment peut-on aider ?

ddurieux commented 2 years ago

En première étape : identifier une lib perl qui permettrai d'interroger le registre sans altération de l'encodage.

ncharles commented 2 years ago

A priori, juste retirer la lib pour utiliser les methodes sous-jacentes devrait fonctionner

ddurieux commented 2 years ago

Oui j'ai regardé ce matin, je vais faire un test avec la lib de bas niveau utilisé par tieregistry, Je te fait un retour ce soir certainement ;)

ddurieux commented 2 years ago

J'ai pris quelques heures pour lire la doc et faire des tests. Il y a des avancées, j'arrive à récupérer la valeur; alors elle est encore encodée, je dois la décoder de la bonne façon (mais c'est toujours mieux que les ???? :p)

je continuerai vendredi mes tests.

ddurieux commented 2 years ago

Merci à @peckpeck / Normation pour l'aide sur la problématique d'encodage. La correction est fonctionnelle, je dois modifier le code pour utiliser la nouvele fonction ;)

ddurieux commented 2 years ago

Les modifications sont en cours dans toute la partie windows, ça devrait être prêt dans le courant de la semaine ;)

ncharles commented 2 years ago

Salut @ddurieux As-tu besoin d'aide pour avancer? Merci !

ddurieux commented 2 years ago

j'ai pris du retard :( il me faudra tester quand ça sera prêt, car il risque d'y avoir des effets de bords (même si j'essaye de les corriger lors des modifications de code.

ncharles commented 2 years ago

@ddurieux comment peut on aider ? Si tu veux, on peut tester ce que tu as fait?

ddurieux commented 2 years ago

Oui je veux bien pour les test, je prépare une archive ce week end afin que vous puissiez tester lundi ;)

fneyron commented 2 years ago

Bonjour @ddurieux,

As-tu une archive à nous transmettre afin que l'on puisse tester ?

ElaadF commented 1 year ago

Bonjour @ddurieux je me permets de te relancer concernant l'archive, n'hésite pas à nous faire savoir si tu as besoin d'aide, nous serons ravis de pouvoir t'aider !

ncharles commented 1 year ago

Bonjour ! Est-ce qu'on peut aider pour résoudre ce ticket ?

ddurieux commented 1 year ago

On peut se faire un point vocal discord demain à partir de 14h ?

ncharles commented 1 year ago

je peux te proposer 16h30 si ca te va

ddurieux commented 1 year ago

ok parfait ;)

ddurieux commented 1 year ago

Voici la PR : https://github.com/fusioninventory/fusioninventory-agent/pull/1047

Tu peux faire un test (génération d'un export local) avec la version actuelle et un test avec ces fichiers là (génération d'un export local) et comparer les 2 fichiers?