Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
ncharles opened this issue Feb 2, 2022 · 27 comments
Open

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

ncharles opened this issue Feb 2, 2022 · 27 comments
Labels
c:agent-rust (>=3.0) Related to agent writen in Rust, so since version 3.0
Milestone

Comments

@ncharles
Copy link

ncharles commented Feb 2, 2022

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

  • force codepage to 65001 in fusioninventory.bat
  • remove encoding in encodeFromRegistry in file Agent/Tool/Win32.pm
  • change the perl version
  • agent version 2.4 and 2.6
  • add use feature 'unicode_strings'; all around the code

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

@ddurieux
Copy link
Member

ddurieux commented Feb 2, 2022

Hello,
I will try with your entries

@ddurieux
Copy link
Member

ddurieux commented Feb 2, 2022

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
Copy link
Author

ncharles commented Feb 2, 2022

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
Copy link
Member

ddurieux commented Feb 2, 2022

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
Copy link
Author

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

@ddurieux
Copy link
Member

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
Copy link
Member

ddurieux commented Mar 8, 2022

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
Copy link
Author

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
Copy link
Member

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

@ncharles
Copy link
Author

Comment peut-on aider ?

@ddurieux
Copy link
Member

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

@ncharles
Copy link
Author

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

@ddurieux
Copy link
Member

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
Copy link
Member

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
Copy link
Member

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
Copy link
Member

ddurieux commented May 2, 2022

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

@ncharles
Copy link
Author

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

@ddurieux
Copy link
Member

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
Copy link
Author

ncharles commented Oct 3, 2022

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

@ddurieux
Copy link
Member

ddurieux commented Oct 5, 2022

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

@fneyron
Copy link

fneyron commented Nov 23, 2022

Bonjour @ddurieux,

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

@ElaadF
Copy link

ElaadF commented Jun 12, 2023

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
Copy link
Author

ncharles commented Aug 7, 2023

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

@ddurieux
Copy link
Member

ddurieux commented Aug 7, 2023

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

@ncharles
Copy link
Author

ncharles commented Aug 7, 2023

je peux te proposer 16h30 si ca te va

@ddurieux
Copy link
Member

ddurieux commented Aug 7, 2023

ok parfait ;)

@ddurieux
Copy link
Member

ddurieux commented Aug 9, 2023

Voici la PR : fusioninventory/fusioninventory-agent#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?

@ddurieux ddurieux transferred this issue from fusioninventory/fusioninventory-agent Sep 2, 2024
@ddurieux ddurieux added the c:agent-rust (>=3.0) Related to agent writen in Rust, so since version 3.0 label Sep 2, 2024
@ddurieux ddurieux added this to the Agent 3.0.0 milestone Sep 2, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
c:agent-rust (>=3.0) Related to agent writen in Rust, so since version 3.0
Projects
None yet
Development

No branches or pull requests

4 participants