[gelöst] ldapadd file.ldif - add NEUE und replace VORHANDENE Einträge

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
joe2017
Beiträge: 229
Registriert: 07.08.2017 14:29:51

[gelöst] ldapadd file.ldif - add NEUE und replace VORHANDENE Einträge

Beitrag von joe2017 » 09.08.2018 16:15:05

Hallo zusammen,

ich habe ein schönes Script geschrieben, welche vieleicht einige in Ihre Sammlung aufnehmen könnten. Ich habe jedoch ein kleines Problem damit und komme nicht weiter. Vielleicht sieht es von euch jemand auf den ersten Blick. Aktuell habe ich mein Script so geschrieben, dass alle Benutzer wleche noch nicht existieren, aus der CSV Datei gelesen und in meinem LDAP angelegt werden.

Code: Alles auswählen

function func-addusersldap2018 {
 echo "" > add_contentu.ldif
 while IFS=, read VARgivenname VARsurename VARuserid VARuseridn VARgroupidn VARpassword VARo VARstreet VARl VARst VARzip VARphone1 VARphone2 VARmobile VARmail
 do

if [ -z "$VARmail" ]; then mail="#"; else mail="mail: $VARmail"; fi
if [ -z "$VARmobile" ]; then mobile="#"; else mobile="mobile: $VARmobile"; fi
if [ -z "$VARphone1" ]; then telephoneNumber="#"; else telephoneNumber="telephoneNumber: $VARphone1"; fi
if [ -z "$VARphone2" ]; then pager="#"; else pager="pager: $VARphone2"; fi

cat >> add_contentu.ldif << EOF
dn: cn=$VARgivenname $VARsurename,ou=Users,dc=domain,dc=net
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: top
uid: $VARuserid
givenname: $VARgivenname
sn: $VARsurename
cn: $VARgivenname $VARsurename
uidnumber: $VARuseridn
gidnumber: $VARgroupidn
userpassword: $VARpassword
$mail
$mobile
l: $VARl
o: $VARo
postalCode: $VARzip
st: $VARst
street: $VARstreet
$telephoneNumber
$pager
homedirectory: /home/users/$VARuserid


EOF
 done < var_ldap_users2018.csv
 ldapadd -x -c -D cn=admin,dc=domain,dc=net -W -f add_contentu.ldif
}
Ich möchte jedoch, dass Benutzer welche Bereits in meinem LDAP Server vorhanden sind mit den Inhalten aus der CSV aktuallisiert werden. Sind diese nicht vorhanden, sollen diese wie bisher angelegt werden.
Ich habe das ganze so getestet. Jedoch erhalte ich immer wieder Fehler? Sieht jemand meinen Fehler?

Code: Alles auswählen

function func-addusersldap2018 {
 echo "" > add_contentu.ldif
 while IFS=, read VARgivenname VARsurename VARuserid VARuseridn VARgroupidn VARpassword VARo VARstreet VARl VARst VARzip VARphone1 VARphone2 VARmobile VARmail
 do

if [ -z "$VARmail" ]; then mail="#"; else mail="mail: $VARmail"; fi
if [ -z "$VARmobile" ]; then mobile="#"; else mobile="mobile: $VARmobile"; fi
if [ -z "$VARphone1" ]; then telephoneNumber="#"; else telephoneNumber="telephoneNumber: $VARphone1"; fi
if [ -z "$VARphone2" ]; then pager="#"; else pager="pager: $VARphone2"; fi

cat >> add_contentu.ldif << EOF
dn: cn=$VARgivenname $VARsurename,ou=Users,dc=domain,dc=net
changetype: modify
replace: objectclass
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: top
replace: uid
uid: $VARuserid
replace: givenname
givenname: $VARgivenname
replace: sn
sn: $VARsurename
replace: cn
cn: $VARgivenname $VARsurename
replace: uidnumber
uidnumber: $VARuseridn
replace: gidnumber
gidnumber: $VARgroupidn
userpassword: $VARpassword
replace: mail
$mail
replace: mobile
$mobile
replace: l
l: $VARl
replace: o
o: $VARo
replace: postalCode
postalCode: $VARzip
replace: st
st: $VARst
replace: street
street: $VARstreet
replace: telephoneNumber
$telephoneNumber
replace: pager
$pager
homedirectory: /home/users/$VARuserid


EOF
 done < var_ldap_users2018.csv
 ldapmodify -x -c -D cn=admin,dc=domain,dc=net -W -f add_contentu.ldif
}
Oder sollte ich dies besser in zwei getrennten Funktionen machen? Aber dann müsste ich ja trotzdem ein replace/modify einbauen. Daher dachte ich, dass man das auch gleich in einer Funktion machen kann.
PS. Die Passwörter sollten nicht verändert werden.
Zuletzt geändert von joe2017 am 10.08.2018 10:24:59, insgesamt 1-mal geändert.

joe2017
Beiträge: 229
Registriert: 07.08.2017 14:29:51

Re: ldapadd file.ldif - add NEUE und replace VORHANDENE Einträge

Beitrag von joe2017 » 09.08.2018 17:12:21

Ich habe schon einen erfolgreichen Test mit einem neuen Script durchgeführt. Leider bin ich auf dem Sprung und werde dies erst morgen früh posten.

joe2017
Beiträge: 229
Registriert: 07.08.2017 14:29:51

Re: ldapadd file.ldif - add NEUE und replace VORHANDENE Einträge

Beitrag von joe2017 » 10.08.2018 10:24:10

Anbei wie versprochen das funktionierende Script. Viel Spaß damit. :-)
Das menu und meine anderen Funktionen hab ich hier jetzt nicht eingefügt. Bei Interesse kann ich das aber gerne bereitstellen.

Code: Alles auswählen

read -s -p "Please enter the LDAP admin password: " LDAPpwd

function func-addusersldap2018 {
 echo "" > add_contentu.ldif
 while IFS=, read VARgivenname VARsurename VARuserid VARuseridn VARgroupidn VARpassword VARo VARstreet VARl VARst VARzip VARphone1 VARphone2 VARmobile VARmail
 do

if [ -z "$VARmail" ]; then mail="#"; else mail="mail: $VARmail"; fi
if [ -z "$VARmobile" ]; then mobile="#"; else mobile="mobile: $VARmobile"; fi
if [ -z "$VARphone1" ]; then telephoneNumber="#"; else telephoneNumber="telephoneNumber: $VARphone1"; fi
if [ -z "$VARphone2" ]; then pager="#"; else pager="pager: $VARphone2"; fi

cat >> add_contentu.ldif << EOF
dn: cn=$VARgivenname $VARsurename,ou=Users,dc=domain,dc=net
objectclass: inetOrgPerson
objectclass: posixAccount
objectclass: top
uid: $VARuserid
givenname: $VARgivenname
sn: $VARsurename
cn: $VARgivenname $VARsurename
uidnumber: $VARuseridn
gidnumber: $VARgroupidn
userpassword: $VARpassword
$mail
$mobile
l: $VARl
o: $VARo
postalCode: $VARzip
st: $VARst
street: $VARstreet
$telephoneNumber
$pager
homedirectory: /home/users/$VARuserid


EOF
 done < var_ldap_users2018.csv
 ldapadd -x -c -D cn=admin,dc=domain,dc=net -w $LDAPpwd -f add_contentu.ldif

########################################################################################################

 echo "" > add_contentu-mod.ldif
 while IFS=, read VARgivenname VARsurename VARuserid VARuseridn VARgroupidn VARpassword VARo VARstreet VARl VARst VARzip VARphone1 VARphone2 VARmobile VARmail
 do

if [ -z "$VARmail" ]; then mail="#"; else mail="mail: $VARmail"; fi
if [ -z "$VARmobile" ]; then mobile="#"; else mobile="mobile: $VARmobile"; fi
if [ -z "$VARphone1" ]; then telephoneNumber="#"; else telephoneNumber="telephoneNumber: $VARphone1"; fi
if [ -z "$VARphone2" ]; then pager="#"; else pager="pager: $VARphone2"; fi

cat >> add_contentu-mod.ldif << EOF
dn: cn=$VARgivenname $VARsurename,ou=Users,dc=domain,dc=net
changetype: modify
#replace: givenname
#givenname: $VARgivenname
#-
#replace: sn
#sn: $VARsurename
#-
#replace: cn
#cn: $VARgivenname $VARsurename
#-
replace: mail
$mail
-
replace: mobile
$mobile
-
replace: l
l: $VARl
-
replace: o
o: $VARo
-
replace: postalCode
postalCode: $VARzip
-
replace: st
st: $VARst
-
replace: street
street: $VARstreet
-
replace: telephoneNumber
$telephoneNumber
-
replace: pager
$pager


EOF
 done < var_ldap_users2018.csv
 ldapmodify -x -c -D cn=admin,dc=domain,dc=net -w $LDAPpwd -f add_contentu-mod.ldif
}

Antworten