To protect your privacy: email us with billing or account questions instead of posting here.

Migration from mSecure with MRC-converter

Options
ChrisHa
ChrisHa
Community Member
edited August 2023 in Memberships

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

  • ChrisHa
    ChrisHa
    Community Member
    Options

    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)
    
  • MrC
    MrC
    Volunteer Moderator
    Options

    @ChrisHa

    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'
    
  • MrC
    MrC
    Volunteer Moderator
    Options

    @ChrisHa

    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:

    1. you have not in any way edited the original CSV export?
    2. 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
    
  • ChrisHa
    ChrisHa
    Community Member
    Options

    I tried to export a single entry into the mSecure by filtering within mSecure. I created a new "test site" entry.

    1. I did not edited the file
    2. 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.1pux

  • Tertius3
    Tertius3
    Community Member
    Options

    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.

  • MrC
    MrC
    Volunteer Moderator
    Options

    @ChrisHa

    The semicolon separator is the issue. You can also use this converter's --sepchar option to set the CSV separator:

    perl convert.pl msecure6 -v --sepchar ";" ..\mSecure_2023-08-22.csv
    
  • ChrisHa
    ChrisHa
    Community Member
    Options

    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.xyz

  • MrC
    MrC
    Volunteer Moderator
    edited August 2023
    Options

    @ChrisHa

    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.

  • ChrisHa
    ChrisHa
    Community Member
    Options

    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 --> Telefonkarte

    There are a lot more categories that I did not use in mSecure.

  • MrC
    MrC
    Volunteer Moderator
    Options

    Ok, that's great @ChrisHa

    Enjoy 1Password!

  • @ChrisHa, I'm glad you were able to get things figured out and thank you @MrC for all your help!

This discussion has been closed.