From fb5b3a0df2911157396b924e664163eaa1eb33b7 Mon Sep 17 00:00:00 2001 From: "Devin J. Pohly" Date: Fri, 4 Feb 2011 21:51:40 +0000 Subject: [PATCH] ITS#6826 conversion scripts These were provided as part of the original ITS but not previously committed. Perl scripts to convert between Apache and OpenLDAP hash formats. --- contrib/slapd-modules/passwd/apr1-atol.pl | 29 +++++++++++++++++++++ contrib/slapd-modules/passwd/apr1-ltoa.pl | 31 +++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 contrib/slapd-modules/passwd/apr1-atol.pl create mode 100644 contrib/slapd-modules/passwd/apr1-ltoa.pl diff --git a/contrib/slapd-modules/passwd/apr1-atol.pl b/contrib/slapd-modules/passwd/apr1-atol.pl new file mode 100644 index 0000000000..d6eaee77a6 --- /dev/null +++ b/contrib/slapd-modules/passwd/apr1-atol.pl @@ -0,0 +1,29 @@ +#!/usr/bin/perl -w + +# Apache $apr1$ to OpenLDAP {APR1} hash converter +# (C) 2011 Devin J. Pohly +# You may use this code freely. It would be nice to be credited. + +use MIME::Base64; + +while (<>) { + ($user, $hash) = split(/:/, $_); + unless ($hash =~ /^\$apr1\$/) { + print STDERR "Not an Apache MD5 hash\n"; + exit 1; + } + + chomp $hash; + ($_,$_,$salt,$hash) = split(/\$/, $hash); + + $hash =~ tr|./0-9A-Za-z|A-Za-z0-9+/|; + $hash .= "AA"; + $hash =~ s/(.)(.)(.)(.)/$4$3$2$1/gs; + $hash = decode_base64($hash); + $hash =~ s/(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)..(.)/$1$4$7$10$13$15$2$5$8$11$14$16$3$6$9$12/s; + $hash .= $salt; + $hash = encode_base64($hash); + chop $hash; + + print "$user:{APR1}$hash\n"; +} \ No newline at end of file diff --git a/contrib/slapd-modules/passwd/apr1-ltoa.pl b/contrib/slapd-modules/passwd/apr1-ltoa.pl new file mode 100644 index 0000000000..ee628ec84a --- /dev/null +++ b/contrib/slapd-modules/passwd/apr1-ltoa.pl @@ -0,0 +1,31 @@ +#!/usr/bin/perl -w + +# OpenLDAP {APR1} to Apache $apr1$ hash converter +# (C) 2011 Devin J. Pohly +# You may use this code freely. It would be nice to be credited. + +use MIME::Base64; + +while (<>) { + ($user, $hash) = split(/:/, $_); + unless ($hash =~ /^{APR1}/) { + print STDERR "Not an Apache MD5 hash\n"; + next; + } + + chomp $hash; + $hash = decode_base64(substr($hash, 6)); + ($hash, $salt) = (substr($hash, 0, 16), substr($hash, 16)); + $hash = $hash; + $hash =~ s/(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)/$1$7$13$2$8$14$3$9$15$4$10$16$5$11$6\0\0$12/s; + $hash = encode_base64($hash); + chomp $hash; + $hash =~ s/(.)(.)(.)(.)/$4$3$2$1/gs; + unless ($hash =~ /AA$/) { + #print "Problem with hash\n"; + next; + } + $hash =~ s/AA$//; + $hash =~ tr|A-Za-z0-9+/|./0-9A-Za-z|; + print "$user:\$apr1\$$salt\$$hash\n" +} \ No newline at end of file -- 2.39.5