Migration from mSecure with MRC-converter
Hi,
I want to migrate from mSecure with the mrc-converter. I did all the steps described in the README.
I get the following errors/warnings. The converter creates a file, that contains only he titles, but no data. I even reduced the source file to 30 entries with the same outputs.
I'm using mSecure 6.1.369.0 on Windows 10.
commandline output:
Desktop\mrc-converter-suite>perl convert.pl -v -d msecure6 "..\mSecure_2023-08-21_2.csv"
main : Running convert.pl from 'C:/Users/Hagi/Desktop/mrc-converter-suite'
main : convert.pl arguments: -v -d msecure6 ..\mSecure_2023-08-21_2.csv
main : Loaded generator: MCS::Generators::PUX
print_fileinfo : Input file info: "..\mSecure_2023-08-21_2.csv"
print_fileinfo : size: 3490
Use of uninitialized value in sprintf at
C:/Users/xxxx/Desktop/mrc-converter-suite/./Converters/Msecure6.pm line 354 (#1)
(W uninitialized) An undefined value was used as if it were already
defined. It was interpreted as a "" or a 0, but maybe it was a mistake.
To suppress this warning assign a defined value to your variables.
To help you figure out what was undefined, perl will try to tell you the name of the variable (if any) that was undefined. In some cases it cannot do this, so it also tells you what operation you used the undefined value in. Note, however, that perl optimizes your program and the operation displayed in the warning may not necessarily appear literally in your program. For example, "that $foo" is usually optimized into "that " . $foo, and the warning will refer to the concatenation (.) operator, even though there is no . in your program.
import : ROW 1 (1 cols):
Use of uninitialized value $tags in string ne at
C:/Users/xxxx/Desktop/mrc-converter-suite/./Converters/Msecure6.pm line 389 (#1)
Thanks for your help.
Chris
Use of uninitialized value $type in string eq at
C:/Users/Hagi/Desktop/mrc-converter-suite/./Converters/Msecure6.pm line 530 (#1)
1Password Version: 8.10.9
Extension Version: Not Provided
OS Version: Windows 10
Browser: Not Provided
Comments
-
When using mrc without debug option I get the following output:
Use of uninitialized value in sprintf at C:/Users/xxxx/Desktop/mrc-converter-suite/./Converters/Msecure6.pm line 354 (#1) (W uninitialized) An undefined value was used as if it were already defined. It was interpreted as a "" or a 0, but maybe it was a mistake. To suppress this warning assign a defined value to your variables. To help you figure out what was undefined, perl will try to tell you the name of the variable (if any) that was undefined. In some cases it cannot do this, so it also tells you what operation you used the undefined value in. Note, however, that perl optimizes your program and the operation displayed in the warning may not necessarily appear literally in your program. For example, "that $foo" is usually optimized into "that " . $foo, and the warning will refer to the concatenation (.) operator, even though there is no . in your program. Use of uninitialized value $tags in string ne at C:/Users/xxxx/Desktop/mrc-converter-suite/./Converters/Msecure6.pm line 389 (#1) Use of uninitialized value $type in string eq at C:/Users/xxxx/Desktop/mrc-converter-suite/./Converters/Msecure6.pm line 530 (#1)
0 -
Let me check version 6.1.369.0 to see if there were any breaking changes. I'm updating my virtual machine now to check. Back shortly...
FYI: the error is indicating to me that the converter is failing parse the CSV data correctly. The error is indicating that the "row" of data (a single entry from the CSV) is undefined. A row should look like (this debugger output):
x $row 0 ARRAY(0x7fe96c370270) 0 'a Bank Account|78883059' 1 'Bank Account' 2 '' 3 '' 4 'Account Number|3|44462362' 5 'PIN|9|999' 6 'Name|0|Some Name' 7 'Branch|0|office #2' 8 'Routing Number|3|8781636' 9 'Account Type|0|Checking' 10 'Phone Number|4|555-1212'
0 -
Sorry for the long delay. The work to update my VMs took longer than expected.
I had no trouble converting a simple stock mSecure 6.1.369.0 export.
Can you confirm a few things for me that:
- you have not in any way edited the original CSV export?
- your orginal CSV export file are separated by commas? Your export data should look like the sample data I shown at the end of this post.
Regarding question 1 above, it is important that you do not edit the original CSV, since mSecure uses a unique encoding within its CSV. The converter relies on the original encoding, so that it can properly adjust for mSecure's behaviors. Also, the CSV export does not contain a UTF-8 BOM, which editing may introduce.
a credit card|1900878010,Credit Card,,"a note\na note line 2 with backslash n \\n\nanding with single quote ""\nsome ""double quotes""\nDONE",Card Number|12|5555-4444-3333-2222,Expiration Date|11|12/2021,Security Code|9|8888,Name on Card|0|Joe Blow,PIN|9|736,Issuing Bank|0|Anybank,Phone Number|4|666222111,"Billing Address|0|1999 Mockingbird Lane, Anytown USA" a FooType record|650270763,FooType,Business,Notes,FooField1|0|Fooval1,FooField2|2|fooval2,FooField3|1|fooval3,cust field1|6|cval1,cust field2|6|cval2 a FooType record 2|132728083,FooType,Business,"""Some Notes",FooField1|0|ff1,FooField2|2|ff2,FooField3|1|ff3 A Login|268959923,Login,Personal,line 1\nline 2\nø π é å ∫ ß\nline 4,Website|2|www.example.com,Username|7|Joe User,"Password|8|supersecret""\\n" A Secure Note|168654422,Secure Note,,a note,num field|6|num field value,username field|7|a username "stress login""\\n|450354972",Login,Business,notes\”,Website|2|website”\x,Username|7|username”\,Password|8|password\”,custfield1|0|cf1 ”\\nEND,custfield2|1|cf2 FooBar
0 -
I tried to export a single entry into the mSecure by filtering within mSecure. I created a new "test site" entry.
- I did not edited the file
- The file is not comma separated, but semicolon separated.
I upgraded my vault from mSecure 4 through mSecure 6, maybe therefore it is semicolon separated?
This is the file:
test site|1213551129;Anmelden;;;Website|2|www.test.com;Benutzername|7|test@mail.com;Kennwort|8|ed§$%&%&$hbetrhbv34f34;App-Name|1|Amazon;Anmelde-URL|2|
And the mcs output for this file:
C:\Users\xxxx\Desktop\mrc-converter-suite>perl convert.pl -v -d msecure6 "..\mSecure_2023-08-23.csv"
main : Running convert.pl from 'C:/Users/xxxx/Desktop/mrc-converter-suite'
main : convert.pl arguments: -v -d msecure6 ..\mSecure_2023-08-23.csv
main : Loaded generator: MCS::Generators::PUX
print_fileinfo : Input file info: "..\mSecure_2023-08-23.csv"
print_fileinfo : size: 153
Use of uninitialized value in sprintf at
C:/Users/xxxx/Desktop/mrc-converter-suite/./Converters/Msecure6.pm line 354 (#1)
(W uninitialized) An undefined value was used as if it were already
defined. It was interpreted as a "" or a 0, but maybe it was a mistake.
To suppress this warning assign a defined value to your variables.To help you figure out what was undefined, perl will try to tell you the name of the variable (if any) that was undefined. In some cases it cannot do this, so it also tells you what operation you used the undefined value in. Note, however, that perl optimizes your program and the operation displayed in the warning may not necessarily appear literally in your program. For example, "that $foo" is usually optimized into "that " . $foo, and the warning will refer to the concatenation (.) operator, even though there is no . in your program.
import : ROW 1 (1 cols):
Use of uninitialized value $tags in string ne at
C:/Users/xxxx/Desktop/mrc-converter-suite/./Converters/Msecure6.pm line 389 (#1)
Use of uninitialized value $type in string eq at
C:/Users/xxxx/Desktop/mrc-converter-suite/./Converters/Msecure6.pm line 530 (#1)
import : Processing type: note
print_record : title: test site
tags:
notes:
Import summary:
1 item discovered
Export summary:
new_item : Title: test site
1 Secure Note item
1 total item
You may now import the file below into 1Password 8:
C:\Users\xxxx\Desktop\MCS_converted.1pux0 -
It might be mSecure uses info from Windows regional settings to build the csv. There is a setting for the list separator. For German (@ChrisHa seems to be German) region settings, this defaults to ; (semicolon) and not comma. Windows exposes these settings in the old system control panel → Region → Additional Settings → List separator.
Excel does the same - it's always a nuisance to get a "comma separated file" not being comma separated but actually semicolon separated.
0 -
Thank you for helping. That was the problem. Now the converter is running.
Is there a chance to do a attribut mapping? The converter is creating only notes. All entries are text only.
normalize_records : field: Website
normalize_records : pushed to notes: Website: https://website.de
normalize_records : field: Benutzername
normalize_records : pushed to notes: Benutzername: Vorname.Name
normalize_records : field: Kennwort
normalize_records : pushed to notes: Kennwort: eriogntbosnbser
normalize_records : field: E-Mail
normalize_records : pushed to notes: E-Mail: mail@mail.xyz0 -
Ok, that's good.
The converter's category matching is done by way of patterns, but the patterns are English strings. I was able to pull translation strings for the older mSecure version 3 & 4 converter, but there were no strings available to me for the version 5 or 6 converter.
Inside the converter (the Converters\Msecure6.pm file), there is a table of categories and their field labels. There are two areas of focus for each of the categories: the category label (pointed to by the yellow arrow below), and the field labels (red arrows). The latter patterns are regular expressions, used to match the field labels. The category string is used to select the category (the field labels are then matched and stored into the proper 1Password fields).
Here's a corresponding Login portion from the CSV export. Note the category and labels in the CSV.
In order to get your German category names and field labels matched, the converter needs its patterns updated correspondingly. The biggest win of course will be Login entries, likely followed by Bank Account, Credit Cards, or whatever other categories you have most of.
I'd be more than happy to help with this customization. Since I don't have sufficient experience with many languages, if this doesn't seem something you're able to accomplish, you can provide me with the category names and field labels for those categories, and I can provide you with a customized version. Then, we can iterate until you're satisfied with the result.
I wish I had a readily available solution for you, but given all the converters I've written and support, the password manager versions, their OS', I'm afraid fully localized converters is the area they fall short. I simply don't have the bandwidth to also create / test exports in various languages. And I don't like to put out code I can't easily test.
Let me know how you'd like to proceed on this.
0 -
Thank you for your help.
I did some manual corrections and could import my passwords from mSecure to 1Password.I did a replace for the following keywords from German to English.
Translation
Membership --> Mitgliedschaft
Login --> Anmelden
Login --> Anmeldung
Secure Note --> Sichere Notiz
Insurance Info --> Versicherungsdaten
Passport --> Personalausweis
Bank Account --> Bankkonto
Email Account --> e-Mail-Account
Combination --> Kombination
Credit Card --> Kreditkarte
Registration Code --> Registrierungscode
Social Security --> Sozialversicherung
Calling Card --> TelefonkarteThere are a lot more categories that I did not use in mSecure.
0 -