#!/bin/sh # Copyright (C) 2023 by Mike Gabriel # This script is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This script is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the # Free Software Foundation, Inc., # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. OUTPUT_CMD=${OUTPUT_CMD:-cat} set -e ldapsearch -xLLL "(&(uid=*)(objectClass=posixAccount)(!(objectClass=gosaUserTemplate)))" \ dn uid 2>/dev/null | perl -p0e 's/\n //g' | \ while read KEY VALUE ; do case "$KEY" in dn:) UID=; USERDN="$VALUE" ;; dn::) UID=; USERDN="$(echo $VALUE | base64 -d)" ;; uid:) UID="$VALUE" ;; "") ldapsearch -xLLL "(&(cn=$UID)(objectClass=posixGroup))" \ dn 2>/dev/null | perl -p0e 's/\n //g' | \ while read G_KEY G_VALUE ; do case "$G_KEY" in dn:) GROUPDN="$G_VALUE" ;; dn::) GROUPDN="$(echo $G_VALUE | base64 -d)" ;; "") U_BASEDN=$(echo $USERDN | cut -d"," -f3-) G_BASEDN=$(echo $GROUPDN | cut -d"," -f3-) if [ "${U_BASEDN}" != "${G_BASEDN}" ]; then ( echo "${USERDN}"; \ echo "${GROUPDN} -> ${U_BASEDN}"; \ echo; ) | ${OUTPUT_CMD} fi ;; esac done ;; esac done exit 0