Created
July 5, 2017 09:34
-
-
Save Xophmeister/33e6abe5e055e122f5093f1acbc91793 to your computer and use it in GitHub Desktop.
Quick-and-Dirty LDIF to JSON convertor
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env awk -f | |
# Convert LDIF into JSON | |
# MIT License | |
# Copyright (c) 2017 Christopher Harrison | |
function json_string(str) { | |
# Convert a string into an escaped JSON string, with enclosing quotes | |
return "\"" gensub(/"/, "\\\\\"", "g", str) "\"" | |
} | |
BEGIN { | |
FS = "::? " | |
ORS = "" | |
in_dn = 0 | |
first_dn = 0 | |
# Array of results | |
print "[" | |
} | |
/^#/ || $1 == "version" || $1 == "search" || $1 == "result" { | |
# Skip comments, version and ldapsearch result entities | |
next | |
} | |
$1 == "dn" { | |
# We've found an entity | |
if (first_dn) print "," | |
print "{" | |
in_dn = 1 | |
first_dn = 1 | |
# Reset attributes | |
delete attributes | |
} | |
in_dn { | |
if (NF == 2) { | |
# New attribute | |
last_attr = $1 | |
attr_index = 1 | |
if (last_attr in attributes) attr_index = length(attributes[last_attr]) + 1 | |
value = $2 | |
} else { | |
# Continuation of previous attribute | |
attr_index = length(attributes[last_attr]) | |
value = attributes[last_attr][attr_index] gensub(/^ /, "", 1) | |
} | |
attributes[last_attr][attr_index] = value | |
} | |
in_dn && /^$/ { | |
# Write attributes | |
first_attr = 0 | |
for (attr in attributes) { | |
if (first_attr) print "," | |
print json_string(attr) ":" | |
first_attr = 1 | |
if (length(attributes[attr]) == 1) { | |
# Scalar attribute | |
print json_string(attributes[attr][1]) | |
} else { | |
# Array attribute | |
print "[" | |
first_arr = 0 | |
for (i in attributes[attr]) { | |
if (first_arr) print "," | |
print json_string(attributes[attr][i]) | |
first_arr = 1 | |
} | |
print "]" | |
} | |
} | |
# End of entity | |
print "}" | |
in_dn = 0 | |
} | |
END { | |
# End of array | |
print "]" | |
} |
@ericsopa IIRC, you need GNU Awk 4, or later. Also note that the shebang will need to be changed in Linux, as it only allows one argument.
@mohankumaru Save the script somewhere in your path and make it executable, then pipe the contents of ldapsearch
into it. For example:
ldapsearch '(uid=mohankumaru)' | ldif2json
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This doesn't work on Mac or Amazon Linux.
Linux
=====
Linux errors:
Mac
====
Mac errors: