[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: slapcat generate extra "space" characters in LDIF output

Mark J. Reed writes:
> FWIW, I use this script to undo the line-folding of LDIF.  Just pipe
> the output of slapcat or ldapsearch or whatever through it and you'll
> get something that's no longer RFC-compliant LDIF but is more amenable
> to processing with text-based tools.
> (..snip..)

This one-liner is sufficient to undo the line folding:

      perl -p00e 's/\r?\n //g'

For people _reading_ an LDIF, remember you may need further decoding:
The LDIF may contain "attrtype:: base64-encoded value" or
"attrtype:< URL of value".

> Refolding is a one-liner, something like this:
>     perl -pe 's/^(.{76})(..*)$/$1\n $2/'

The LDIF RFC doesn't require that, but it doens't hurt either.

However your snippet fails if you need to fold into more than 2 lines.
Also you should avoid folding in the middle of an UTF-8 sequence.

#!/usr/bin/perl -wp
# Fold LDIF lines > 76 chars (Note, not an LDIF requirement)

# Match {71 to 76} chars 1st time, then {70 to 75} since we prepended a space
# Accept either CRLF or LF as line endings.  But always folds with just LF.
# Avoid splitting in the middle of an UTF-8 char, i.e. before [\200-\277].
s/\G ((?: \A[^\r\n] | (?!\A)) [^\r\n]{70,75}) (?=[^\r\n\200-\277]) /$1\n /gx;