#!/usr/bin/perl -w # File: UTFtobase64.pl use strict; use warnings; use MIME::Base64; my $ldif_input_fn = 'personal-utf-final.ldif'; my $ldif_output_fn = 'personal-final.ldif'; open (INFILE, $ldif_input_fn) or die "Error opening ".$ldif_input_fn.".\n"; binmode INFILE; my $content = ''; &read_file(\$ldif_input_fn, \$content); ## FIXME: what if the contents is on more than 1 lines # ? previous conversion '\n' -> '%%EOL%%' -> '\n' #$content =~ s/(\w+)(: *)([^\n]*)\n\n/$1.":".$2.encode_base64($3,'')."\n"/ges; ## take the smaller string ... #$content =~ s/(\w+)(: *)(.*?)\n\n/$1.":".$2.encode_base64($3,'')."\n"/ges; ## take the bigger string ... $content =~ s/(\w+)(: *)(.*)\n\n/$1.":".$2.encode_base64($3,'')."\n"/ges; &write_file(\('>'.$ldif_output_fn), \$content); exit(0); # reads a file sub read_file { my ($fn_ptr, $text_ptr) = @_; open (INFILE, $$fn_ptr) or die "Error opening ".$$fn_ptr.".\n"; binmode INFILE; ## read the whole text and convert windows linebreaks(\r\n) to unix ## linebreaks(\n) while (my $line = ) { $line =~ s!\r\n!\n!gs; $$text_ptr .= $line; } close INFILE; return; } # writes a file sub write_file { my ($fn_ptr, $text_ptr) = @_; open (OUTFILE, $$fn_ptr) or die "Error opening ".$$fn_ptr.".\n"; binmode OUTFILE; print OUTFILE $$text_ptr; close OUTFILE; return; } #### dn: cn=toto1,ou=Fournisseurs, ou=People,dc=test,dc=local objectclass: top objectclass: person objectclass: organizationalPerson sn: b cn: a b dn: cn=address_1,cn=toto1,ou=Fournisseurs, ou=People,dc=test,dc=local objectclass: top objectclass: person objectclass: organizationalPerson objectclass: inetOrgPerson givenName: a sn: b cn: a b cn: address_1 mail: toto1@a.com o: o dn: cn=toto2,ou=Fournisseurs, ou=People,dc=test,dc=local objectclass: top objectclass: person objectclass: organizationalPerson sn: b2 cn: a2 b2 dn: cn=address_1,cn=toto2,ou=Fournisseurs, ou=People,dc=test,dc=local objectclass: top objectclass: person objectclass: organizationalPerson objectclass: inetOrgPerson givenName: a2 sn: b2 cn: a2 b2 cn: address_1 mail: toto2@a.com o: o dn: cn=toto3,ou=Fournisseurs, ou=People,dc=test,dc=local objectclass: top objectclass: person objectclass: organizationalPerson sn: b3 cn: a3 b3 dn: cn=address_1,cn=toto3,ou=Fournisseurs, ou=People,dc=test,dc=local objectclass: top objectclass: person objectclass: organizationalPerson objectclass: inetOrgPerson givenName: a3 sn: b3 cn: a3 b3 cn: address_1 mail: a3 b3 title: Responsable Commercial o: OO description: 09/09/2004 reunion pabx/call center dn: cn=toto4,ou=Fournisseurs, ou=People,dc=test,dc=local objectclass: top objectclass: person objectclass: organizationalPerson sn: b4 cn: a4 b4 dn: cn=address_1,cn=toto4,ou=Fournisseurs, ou=People,dc=test,dc=local objectclass: top objectclass: person objectclass: organizationalPerson objectclass: inetOrgPerson givenName: a4 sn: b4 cn: a4 b4 cn: address_1 mail: toto4@a.com description: 09/09/2004 reunion pabx/call center dn: cn=toto5,ou=Fournisseurs, ou=People,dc=test,dc=local objectclass: top objectclass: person objectclass: organizationalPerson sn: b5 cn: a5 b5 dn: cn=address_1,cn=toto5,ou=Fournisseurs, ou=People,dc=test,dc=local objectclass: top objectclass: person objectclass: organizationalPerson objectclass: inetOrgPerson givenName: a5 sn: b5 cn: a5 b5 cn: address_1 mail: toto5@a.com o: o #### $content =~ s/(\w+)(: *)([^\n]*)\n\n/$1.":".$2.encode_base64($3,'')."\n"/ges; #### $content =~ s/(\w+)(: *)(.*)\n\n/$1.":".$2.encode_base64($3,'')."\n"/ges; &write_file(\('>'.$ldif_output_fn), \$content); #### $content =~ s/(\w+)(: *)(.*?)\n\n/$1.":".$2.encode_base64($3,'')."\n"/ges; &write_file(\('>'.$ldif_output_fn), \$content); #### dn:: Y249dG90bzEsb3U9Rm91cm5pc3NldXJzLCBvdT1QZW9wbGUsZGM9YXJsaXMsZGM9bG9jYWwyCm9iamVjdGNsYXNzOiB0b3AKb2JqZWN0Y2xhc3M6IHB lcnNvbgpvYmplY3RjbGFzczogb3JnYW5pemF0aW9uYWxQZXJzb24Kc246IGIKY246IGEgYgoKZG46IGNuPWFkZHJlc3NfMSxjbj10b3RvMSxvdT1Gb3Vybml zc2V1cnMsIG91PVBlb3BsZSxkYz1hcmxpcyxkYz1sb2NhbDIKb2JqZWN0Y2xhc3M6IHRvcApvYmplY3RjbGFzczogcGVyc29uCm9iamVjdGNsYXNzOiBvcmd hbml6YXRpb25hbFBlcnNvbgpvYmplY3RjbGFzczogaW5ldE9yZ1BlcnNvbgpnaXZlbk5hbWU6IGEKc246IGIKY246IGEgYgpjbjogYWRkcmVzc18xCm1haWw 6IHRvdG8xQGEuY29tCm86IG8KCmRuOiBjbj10b3RvMixvdT1Gb3Vybmlzc2V1cnMsIG91PVBlb3BsZSxkYz1hcmxpcyxkYz1sb2NhbDIKb2JqZWN0Y2xhc3M 6IHRvcApvYmplY3RjbGFzczogcGVyc29uCm9iamVjdGNsYXNzOiBvcmdhbml6YXRpb25hbFBlcnNvbgpzbjogYjIKY246IGEyIGIyCgpkbjogY249YWRkcmV zc18xLGNuPXRvdG8yLG91PUZvdXJuaXNzZXVycywgb3U9UGVvcGxlLGRjPWFybGlzLGRjPWxvY2FsMgpvYmplY3RjbGFzczogdG9wCm9iamVjdGNsYXNzOiB wZXJzb24Kb2JqZWN0Y2xhc3M6IG9yZ2FuaXphdGlvbmFsUGVyc29uCm9iamVjdGNsYXNzOiBpbmV0T3JnUGVyc29uCmdpdmVuTmFtZTogYTIKc246IGIyCmN uOiBhMiBiMgpjbjogYWRkcmVzc18xCm1haWw6IHRvdG8yQGEuY29tCm86IG8KCmRuOiBjbj10b3RvMyxvdT1Gb3Vybmlzc2V1cnMsIG91PVBlb3BsZSxkYz1 hcmxpcyxkYz1sb2NhbDIKb2JqZWN0Y2xhc3M6IHRvcApvYmplY3RjbGFzczogcGVyc29uCm9iamVjdGNsYXNzOiBvcmdhbml6YXRpb25hbFBlcnNvbgpzbjo gYjMKY246IGEzIGIzCgpkbjogY249YWRkcmVzc18xLGNuPXRvdG8zLG91PUZvdXJuaXNzZXVycywgb3U9UGVvcGxlLGRjPWFybGlzLGRjPWxvY2FsMgpvYmp lY3RjbGFzczogdG9wCm9iamVjdGNsYXNzOiBwZXJzb24Kb2JqZWN0Y2xhc3M6IG9yZ2FuaXphdGlvbmFsUGVyc29uCm9iamVjdGNsYXNzOiBpbmV0T3JnUGV yc29uCmdpdmVuTmFtZTogYTMKc246IGIzCmNuOiBhMyBiMwpjbjogYWRkcmVzc18xCm1haWw6IGEzIGIzCnRpdGxlOiBSZXNwb25zYWJsZSBDb21tZXJjaWF sCm86IE9PCmRlc2NyaXB0aW9uOiAwOS8wOS8yMDA0CnJldW5pb24gcGFieC9jYWxsIGNlbnRlcg== dn:: Y249dG90bzQsb3U9Rm91cm5pc3NldXJzLCBvdT1QZW9wbGUsZGM9YXJsaXMsZGM9bG9jYWwyCm9iamVjdGNsYXNzOiB0b3AKb2JqZWN0Y2xhc3M6IHB lcnNvbgpvYmplY3RjbGFzczogb3JnYW5pemF0aW9uYWxQZXJzb24Kc246IGI0CmNuOiBhNCBiNAoKZG46IGNuPWFkZHJlc3NfMSxjbj10b3RvNCxvdT1Gb3V ybmlzc2V1cnMsIG91PVBlb3BsZSxkYz1hcmxpcyxkYz1sb2NhbDIKb2JqZWN0Y2xhc3M6IHRvcApvYmplY3RjbGFzczogcGVyc29uCm9iamVjdGNsYXNzOiB vcmdhbml6YXRpb25hbFBlcnNvbgpvYmplY3RjbGFzczogaW5ldE9yZ1BlcnNvbgpnaXZlbk5hbWU6IGE0CnNuOiBiNApjbjogYTQgYjQKY246IGFkZHJlc3N fMQptYWlsOiB0b3RvNEBhLmNvbQpkZXNjcmlwdGlvbjogMDkvMDkvMjAwNApyZXVuaW9uIHBhYngvY2FsbCBjZW50ZXI= dn: cn=toto5,ou=Fournisseurs, ou=People,dc=test,dc=local objectclass: top objectclass: person objectclass: organizationalPerson sn: b5 cn: a5 b5 dn: cn=address_1,cn=toto5,ou=Fournisseurs, ou=People,dc=test,dc=local objectclass: top objectclass: person objectclass: organizationalPerson objectclass: inetOrgPerson givenName: a5 sn: b5 cn: a5 b5 cn: address_1 mail: toto5@a.com o: o