Portál AbcLinuxu, 9. května 2025 23:54

Dotaz: OpenLDAP - zjisteni nejvetsiho uidNumber

9.9.2012 21:05 tuxmartin | skóre: 39 | blog: tuxmartin | Jicin
OpenLDAP - zjisteni nejvetsiho uidNumber
Přečteno: 254×
Odpovědět | Admin

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 :-D).
Jak se to ma spravne resit?

Diky vsem za pomoc :-)

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

9.9.2012 21:12 ewew | skóre: 40 | blog: ewewov_blog
Rozbalit Rozbalit vše Re: OpenLDAP - zjisteni nejvetsiho uidNumber
Odpovědět | | Sbalit | Link | Blokovat | Admin

Neviem či toto pomôže.

Root v linuxe : "Root povedal, linux vykona."
9.9.2012 22:09 VSi | skóre: 28
Rozbalit Rozbalit vše Re: OpenLDAP - zjisteni nejvetsiho uidNumber
Odpovědět | | Sbalit | Link | Blokovat | Admin
Některé LDAP servery umí řazení záznamů a podobné operace na straně serveru, což by se dalo využít, ale úplně standardní funkcionalita to není. Rychlým hledáním jsem zjistil, že OpenLDAP to nějak podporuje od verze 2.4, ale dokumentace zdá se nic moc.

Jinak: Pokud tam nemáte stovky tisíc a víc záznamů, tak zrovna při vytvoření uživatele nebude takové tragédie, když se ze serveru stáhne seznam všech UID. Není nutné seznam řadit, stačí jedním průchodem najít nejvyšší hodnotu, zvládnutelné je to v 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.
15.9.2012 10:15 Jan Včelák | skóre: 28 | blog: Fcelda
Rozbalit Rozbalit vše Re: OpenLDAP - zjisteni nejvetsiho uidNumber

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.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.