diff options
Diffstat (limited to 'kmail/kmail-3.1.4-dont-use-UOID-0-for-any-identity.pl')
-rw-r--r-- | kmail/kmail-3.1.4-dont-use-UOID-0-for-any-identity.pl | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/kmail/kmail-3.1.4-dont-use-UOID-0-for-any-identity.pl b/kmail/kmail-3.1.4-dont-use-UOID-0-for-any-identity.pl new file mode 100644 index 000000000..0dba90802 --- /dev/null +++ b/kmail/kmail-3.1.4-dont-use-UOID-0-for-any-identity.pl @@ -0,0 +1,88 @@ +#!/usr/bin/perl -w + +use strict; + +# this script goes through all the config keys that deal with +# identities and replaces UOID 0 (which was erroneously always assigned to the +# first identity) with a non-zero UOID. + +# read the whole config file +my $currentGroup = ""; +my %configFile; +while ( <> ) { + chomp; + next if ( /^$/ ); # skip empty lines + next if ( /^\#/ ); # skip comments + if ( /^\[/ ) { # group begin + $currentGroup = $_; + next; + } elsif ( $currentGroup ne "" ) { # normal entry + my ($key,$value) = split /=/; + $configFile{$currentGroup}{$key}=$value; + } +} + +# filter out identity groups +my @identityGroups = grep { /^\[Identity \#\d+\]/ } keys %configFile; + +# create new UOID for an identity with UOID 0 +my $newUoid = 0; +foreach my $identityGroup (@identityGroups) { + my $oldUoid = $configFile{$identityGroup}{'uoid'}; + if ( $oldUoid eq "0" ) { + $newUoid = int(rand 0x7fFFffFE) + 1; + # change the uoid entry this identity + print "# DELETE ${identityGroup}uoid\n"; + print "${identityGroup}\nuoid=$newUoid\n"; + } +} + +if ( $newUoid != 0 ) { + # change the default identity value if it was 0 + my $tempId = $configFile{'[General]'}{'Default Identity'}; + if ( $tempId eq "0" ) { + print "# DELETE [General]Default Identity\n"; + print "[General]\nDefault Identity=$newUoid\n"; + } + + # [Composer]previous-identity + $tempId = $configFile{'[Composer]'}{'previous-identity'}; + if ( $tempId eq "0" ) { + print "# DELETE [Composer]previous-identity\n"; + print "[Composer]\nprevious-identity=$newUoid\n"; + } + + # Now, go through all [Folder-*] groups and replace all occurrences of + # Identity=0 with Identity=$newUoid + my @folderGroups = grep { /^\[Folder-.*\]/ } keys %configFile; + + foreach my $folderGroup ( @folderGroups ) { + $tempId = $configFile{$folderGroup}{'Identity'}; + if ( $tempId eq "0" ) { + print "# DELETE ${folderGroup}Identity\n"; + print "$folderGroup\nIdentity=$newUoid\n"; + } + } + + # Now, go through all [Filter #n] groups and replace all occurrences of + # UOID 0 as argument to the 'set identity' filter action with the new UOID + my @filterGroups = grep { /^\[Filter \#\d+\]/ } keys %configFile; + + foreach my $filterGroup (@filterGroups) { + my $numActions = +$configFile{$filterGroup}{'actions'}; + # go through all actions in search for "set identity": + for ( my $i = 0 ; $i < $numActions ; ++$i ) { + my $actionName = "action-name-$i"; + my $actionArgs = "action-args-$i"; + if ( $configFile{$filterGroup}{$actionName} eq "set identity" ) { + # found one: + # replace it's argument with the new UOID if necessary + $tempId = $configFile{$filterGroup}{$actionArgs};; + if ( $tempId eq "0" ) { + print "# DELETE $filterGroup$actionArgs\n"; + print "$filterGroup\n$actionArgs=$newUoid\n"; + } + } + } + } +} |