Portál AbcLinuxu, 9. května 2025 23:54
Zdravim,
mam databazi uzivatelu v ldapu a potrebuji kvuli vytvoreni noveho uzivatele zjistit uzivatele s nejvyssim uidNumber.
Takhle vypada vystup vyhledavani:
root@ubuntu:~# ldapsearch -x -LLL -b dc=example,dc=net 'uid=*' uidNumber dn: uid=ahoj,ou=people,dc=example,dc=net uidNumber: 10000 dn: uid=test,ou=people,dc=example,dc=net uidNumber: 10001 root@ubuntu:~#
Z neho jsem schopny zjistit nejvetsi UID:
root@ubuntu:~# root@ubuntu:~# ldapsearch -x -LLL -b dc=example,dc=net 'uid=*' uidNumber | grep uidNumber | awk '{print $2}' | sort --numeric-sort | tail -n 1 10001 root@ubuntu:~#
A pro vytvoreni noveho uzivatele pouziju UID:
root@ubuntu:~# echo "`ldapsearch -x -LLL -b dc=example,dc=net 'uid=*' uidNumber | grep uidNumber | awk '{print $2}' | sort --numeric-sort | tail -n 1` + 1" | bc 10002 root@ubuntu:~#
Zda se mi to sice funkcni, ale dost neefektivni (velmi slusne receno ).
Jak se to ma spravne resit?
Diky vsem za pomoc
awk
, pokud to má být v rámci shell skriptu.
Další věc je, že často nechceme použitá UID po smazání uživatele hned "recyklovat" někomu dalšímu. V rozsáhlejším prostředí může nějakou dobu trvat, než se třeba smažou/přesunou soubory, které vlastnil smazaný uživatel. A ten nový by k nim mohl na základě stejného UID získat přístup. Možnost je přiřazovat UID sekvenčně podle nějakého čítače, který může být taky uložený v LDAPu. Dělá to tak při určité konfiguraci třeba Samba - atribut sambaNextRid
v doménovém záznamu.
OpenLDAP může záznamy řadit pomocí valsort
overlaye (man slapo-valsort). Myslím, že je i ve verzi 2.3. Ale stejně mi přijde jeho použití zbytečné, protože chybí způsob jak specifikovat, že má server poslat jen poslední záznam. (Jedině řadit uživatele sestupně a pomocí sizelimit
vracet první záznam. Ale sémanticky je to trochu nesmyslné.)
Pokud píšete nějaky vlastní tool na přidávání uživatelů, tak já bych to řešil takhle: Stanovil bych si nějaké vyšší číslo, od kterého se budou záznamy generovat -- třeba 10000. A pak bych hledal pomocí filtru (uidNumber>=10000)
. Z nich vybíral nejvyšší. Jako optimalizaci, pokud by bylo uživatelů opravdu hodně, tak bych si lokálně do nějakého souboru ukládal uidNumber posledního uživatele a při hledání bych pak začínal od této hodnoty.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.