1#!/usr/bin/perl -w 2 3# Apache $apr1$ to OpenLDAP {APR1} hash converter 4# (C) 2011 Devin J. Pohly 5# You may use this code freely. It would be nice to be credited. 6 7use MIME::Base64; 8 9while (<>) { 10 ($user, $hash) = split(/:/, $_); 11 unless ($hash =~ /^\$apr1\$/) { 12 print STDERR "Not an Apache MD5 hash\n"; 13 exit 1; 14 } 15 16 chomp $hash; 17 ($_,$_,$salt,$hash) = split(/\$/, $hash); 18 19 $hash =~ tr|./0-9A-Za-z|A-Za-z0-9+/|; 20 $hash .= "AA"; 21 $hash =~ s/(.)(.)(.)(.)/$4$3$2$1/gs; 22 $hash = decode_base64($hash); 23 $hash =~ s/(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)..(.)/$1$4$7$10$13$15$2$5$8$11$14$16$3$6$9$12/s; 24 $hash .= $salt; 25 $hash = encode_base64($hash); 26 chop $hash; 27 28 print "$user:{APR1}$hash\n"; 29}