schema-to-ldif.sh 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #!/bin/bash
  2. # set -x (bash debug) if log level is trace
  3. # https://github.com/osixia/docker-light-baseimage/blob/stable/image/tool/log-helper
  4. log-helper level eq trace && set -x
  5. SCHEMAS=$1
  6. tmpd=`mktemp -d`
  7. pushd ${tmpd} >>/dev/null
  8. echo "include /etc/ldap/schema/core.schema" >> convert.dat
  9. echo "include /etc/ldap/schema/cosine.schema" >> convert.dat
  10. echo "include /etc/ldap/schema/nis.schema" >> convert.dat
  11. echo "include /etc/ldap/schema/inetorgperson.schema" >> convert.dat
  12. for schema in ${SCHEMAS} ; do
  13. echo "include ${schema}" >> convert.dat
  14. done
  15. slaptest -f convert.dat -F .
  16. if [ $? -ne 0 ] ; then
  17. log-helper error "slaptest conversion failed"
  18. exit
  19. fi
  20. for schema in ${SCHEMAS} ; do
  21. fullpath=${schema}
  22. schema_name=`basename ${fullpath} .schema`
  23. schema_dir=`dirname ${fullpath}`
  24. ldif_file=${schema_name}.ldif
  25. find . -name *\}${schema_name}.ldif -exec mv '{}' ./${ldif_file} \;
  26. # TODO: these sed invocations could all be combined
  27. sed -i "/dn:/ c dn: cn=${schema_name},cn=schema,cn=config" ${ldif_file}
  28. sed -i "/cn:/ c cn: ${schema_name}" ${ldif_file}
  29. sed -i '/structuralObjectClass/ d' ${ldif_file}
  30. sed -i '/entryUUID/ d' ${ldif_file}
  31. sed -i '/creatorsName/ d' ${ldif_file}
  32. sed -i '/createTimestamp/ d' ${ldif_file}
  33. sed -i '/entryCSN/ d' ${ldif_file}
  34. sed -i '/modifiersName/ d' ${ldif_file}
  35. sed -i '/modifyTimestamp/ d' ${ldif_file}
  36. # slapd seems to be very sensitive to how a file ends. There should be no blank lines.
  37. sed -i '/^ *$/d' ${ldif_file}
  38. mv ${ldif_file} ${schema_dir}
  39. done
  40. popd >>/dev/null
  41. rm -rf $tmpd