Projet

Général

Profil

horizon-ldap-collisions2.sh

Eric Seigne, 06/12/2019 18:18

Télécharger (5,06 ko)

 
1
#!/bin/bash
2
#
3
# (c) Eric Seigne 2011-2017 <eric.seigne@ryxeo.com>
4
#
5
# script a l'origine pour la migration automatique de 9.08 en 11.08
6
# detourne pour detecter les collisions LDAP et corriger ce qu'il faut
7
#
8
LDAPPASS=`cat /etc/ldap.secret`
9

    
10
if [ -d /etc/abuledu ]; then
11
    LDAPDC="abuledu"
12
fi
13
if [ -d /etc/nouva ]; then
14
    LDAPDC="nouva"
15
fi
16

    
17
function add_line() {
18
  ABEUSER=$1
19
  ABETX=$2
20
  ABEUSERNAME=$3
21
  ABETXNAME=$4
22

    
23
  #echo "arg1 $1 :: $2 :: $3 :: $4 :: $0"
24
  if [ "${ABEUSER}" != "0" -a -n "${ABETX}" ]; then
25
      #grep -v ${ABETX} ${FICRES} > ${FICRES}.tmp
26
      #mv ${FICRES}.tmp ${FICRES}
27
      echo "${ABEUSERNAME} ($ABEUSER) -> ${ABETXNAME} (${ABETX})" >> ${FICRES}
28
  else
29
      if ! grep -w "${ABETX}" ${FICRES} >/dev/null; then
30
	  echo "Poste disponible (waiting) -> ${ABETXNAME} (${ABETX})" >> ${FICRES}
31
      fi
32
  fi
33
}
34

    
35
function next_uid() {
36
    uidarg=$1
37
    typeset -i uidcalcule
38
    typeset -i uidres
39
    typeset -i nbuid
40
    uidcalcule=${uidarg}+1
41
    nbuid=`ldapsearch -x -D "cn=admin,dc=${LDAPDC}" -w${LDAPPASS} -b "ou=utilisateurs,dc=${LDAPDC}" "uidnumber=${uidcalcule}" | grep "^dn:" | wc -l`
42
    if [ "${nbuid}" == "0" ]; then
43
	uidres=${uidcalcule}
44
    else
45
	uidres=$(next_uid $uidcalcule)
46
    fi
47
    echo "${uidres}"
48
}
49

    
50
function next_gid() {
51
    gidarg=$1
52
    if [ "${gidarg}" -lt "199" ]; then
53
	gidarg=200
54
    fi
55
    typeset -i gidcalcule
56
    typeset -i gidres
57
    typeset -i nbgid
58
    gidcalcule=${gidarg}+1
59
    nbgid=`ldapsearch -x -D "cn=admin,dc=${LDAPDC}" -w${LDAPPASS} -b "dc=${LDAPDC}" "gidnumber=${gidcalcule}" | grep "^dn:" | wc -l`
60
    if [ "${nbgid}" == "0" ]; then
61
	gidres=${gidcalcule}
62
    else
63
	gidres=$(next_gid $gidcalcule)
64
    fi
65
    echo "${gidres}"
66
}
67

    
68

    
69
echo "======================== Groupes ==============================="
70
#il ne faut pas avoir de GID identique entre /etc/group et l'annuaire LDAP ...
71
for SEARCHGID in `cat /etc/group | cut -d ":" -f3 | tr '\n' ' '`
72
do
73
    #rm -f /tmp/orig.ldiff
74
    NUMREP=`ldapsearch -x -D "cn=admin,dc=${LDAPDC}" -w${LDAPPASS} -b "ou=groupes,dc=${LDAPDC}" "gidnumber=${SEARCHGID}" | grep ^dn: | wc -l`
75
    if [ "${NUMREP}" -gt "0" ]; then
76
	echo ""
77
	echo "Il y a une collision pour GID ${SEARCHGID}"
78
	NEWGID=$(next_gid ${SEARCHGID})
79
	echo "Proposition de nouveau GID : ${NEWGID}"
80
	#echo "relancez le script pour le suivant ..."
81
	ldapsearch -x -D "cn=admin,dc=${LDAPDC}" -w${LDAPPASS} -b "ou=groupes,dc=${LDAPDC}" "gidnumber=${SEARCHGID}" > /tmp/avant.ldiff
82
	#exit
83
	#, on l'update en ${NEWGID}"
84
	GIDGRP=`grep ^dn /tmp/avant.ldiff | tail -n1`
85
	rm -f /tmp/modify.ldiff
86
	cat >> /tmp/modify.ldiff <<EOF
87
${GIDGRP}
88
changetype: modify
89
replace: gidNumber
90
gidNumber: ${NEWGID}
91
EOF
92
	ldapmodify -x -D "cn=admin,dc=${LDAPDC}" -w${LDAPPASS} -f /tmp/modify.ldiff
93
	rm -f /tmp/modify.ldiff /tmp/avant.ldiff
94
    else
95
	echo -n "."
96
    fi
97
done
98

    
99
echo "======================== Groupes doublons de GID ? ============="
100
# a tout hasard si on a des groupes LDAP qui ont le même guid ... pas bon !
101
ldapsearch -x -D "cn=admin,dc=${LDAPDC}" -w${LDAPPASS} -b "ou=groupes,dc=${LDAPDC}" "objectClass: posixGroup" "gidNumber" | grep gidNumber | cut -d ":" -f2 | tr -d " " | sort > /tmp/search_sort
102
cat /tmp/search_sort | sort -u > /tmp/search_sort_unique
103
for SEARCHGID in `seq 10 199`
104
do
105
    TESTCOLLISION=`grep -w "${SEARCHGID}" /tmp/search_sort_unique`
106
    if [ -n "${TESTCOLLISION}" ]; then
107
	echo "on a une collision (doublon) dans l'annuaire pour ${SEARCHGID} ..."
108
	NEWGID=$(next_gid ${SEARCHGID})
109
	echo "on propose de le remplacer par ${NEWGID} pour ${nomgroupe} ..."
110

    
111
	ldapsearch -x -D "cn=admin,dc=${LDAPDC}" -w${LDAPPASS} -b "ou=groupes,dc=${LDAPDC}" "gidnumber=${SEARCHGID}" > /tmp/avant.ldiff
112
	GIDGRP=`grep ^dn /tmp/avant.ldiff | tail -n1`
113
	rm -f /tmp/modify.ldiff
114
	cat >> /tmp/modify.ldiff <<EOF
115
${GIDGRP}
116
changetype: modify
117
replace: gidNumber
118
gidNumber: ${NEWGID}
119
EOF
120
    ldapmodify -x -D "cn=admin,dc=${LDAPDC}" -w${LDAPPASS} -f /tmp/modify.ldiff
121
    rm -f /tmp/modify.ldiff /tmp/avant.ldiff
122
    fi
123
done
124
exit
125

    
126
echo ""
127

    
128
echo ""
129
echo ""
130
echo "S'il y a eu des corrections de GID pensez a relancer un check group"
131
echo "commande: horizon-check group -a -b"
132
echo ""
133
echo ""
134
echo "======================== Utilisateurs ==============================="
135

    
136

    
137
for SEARCHUID in `get users -a | cut -d ":" -f3`
138
do
139
    #rm -f /tmp/orig.ldiff
140
    NUMREP=`ldapsearch -x -D "cn=admin,dc=${LDAPDC}" -w${LDAPPASS} -b "ou=utilisateurs,dc=${LDAPDC}" "uidnumber=${SEARCHUID}" | grep "^dn:" | wc -l`
141
    if [ "${NUMREP}" -gt "1" ]; then
142
	echo ""
143
	echo -n "Il y a une collision pour UID ${SEARCHUID}"
144
	#NEWUID=$(next_uid ${SEARCHUID})
145
	#echo "Il y a une collision pour ${SEARCHUID}, on l'update en ${NEWUID} :: "
146
	#ldapsearch -x -D "cn=admin,dc=${LDAPDC}" -w${LDAPPASS} -b "ou=utilisateurs,dc=${LDAPDC}" "uidnumber=${SEARCHUID}" > /tmp/orig.ldiff
147
	#UIDUSER=`grep ^dn /tmp/orig.ldiff`
148
	#rm -f /tmp/modify.ldiff
149
	#cat >> /tmp/modify.ldiff <<EOF
150
#${UIDUSER}
151
#changetype: modify
152
#replace: uidNumber
153
#uidNumber: $NEWUID
154
#EOF
155
	#ldapmodify -x -D "cn=admin,dc=${LDAPDC}" -w${LDAPPASS} -f /tmp/modify.ldiff
156
	#echo -n "propagating rights update due to LDAP collision (${SEARCHUID} -> ${NEWUID} ... "
157
    else
158
	echo -n "."
159
   fi
160
done
161

    
162
echo ""
Redmine Appliance - Powered by TurnKey Linux