Skip to content

Instantly share code, notes, and snippets.

@Xophmeister
Created July 5, 2017 09:34
Show Gist options
  • Save Xophmeister/33e6abe5e055e122f5093f1acbc91793 to your computer and use it in GitHub Desktop.
Save Xophmeister/33e6abe5e055e122f5093f1acbc91793 to your computer and use it in GitHub Desktop.
Quick-and-Dirty LDIF to JSON convertor
#!/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 "]"
}
@Xophmeister
Copy link
Author

@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

@jhult
Copy link

jhult commented Apr 14, 2023

If you bump into issues with awk syntax, try installing gawk.

More details on my fork.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment