encontra nome de usuário através do campo nome completo / gecos?

0

Dado um sistema em que os dados do usuário são provenientes de, e. um banco de dados OpenLDAP e não está no arquivo /etc/passwd . É possível pesquisar o banco de dados getent passwd e procurar o id / nome do usuário especificando (uma parte) o nome completo?

Por exemplo getent passwd newbie me dá a seguinte entrada

newbie:x:1000:1000:firstname lastname:/home/newbie:/bin/zsh

Como posso encontrar todos os usuários com "sobrenome"? Existe algo como getpwnam para o campo gecos?

Nota: Eu não posso usar apenas getent passwd (sem nome de usuário) e depois analisar isso já que meu banco de dados é muito grande.

    
por Stefan 19.04.2018 / 04:47

3 respostas

2

Não encontrei uma maneira de pesquisar no banco de dados, mas pesquisar entradas no OpenLDAP funciona diretamente para mim.

$ ldapsearch -x -h ldap.example.com -ZZ \
             -D cn=lookup,dc=example,dc=com -W \
             -b ou=People,dc=example,dc=com -LLL \
             sn=lastname uid
dn: uid=newbie,ou=People,dc=example,dc=com  
uid: newbie

$
    
por 19.04.2018 / 04:47
1

Você pode usar o awk na saída de getent passwd :

getent passwd | awk -F: '$5 ~ /lastname/ {print $1}'
    
por 19.04.2018 / 05:30
1

Você pode usar algo como o seguinte comando sed :

$ SURNAME=Smith
$ getent passwd | sed -n '/'$SURNAME'/s/^\([^:]*\):\([^:]*\):\([^:]*\):\([^:]*\):\([[:alpha:]]\+ '$SURNAME'\):\([^:]*\):\([^:]*\)$/ ()/p'
$ fps (Finnbarr Smith)
  jms (James Smith)
$

O regex 'sed' acima assume que o campo GECOS contém exatamente < FIRSTNAME < SPACE < LASTNAME & gt ;, por ex. "James Smith", como por sua pergunta. Ele pode ser facilmente modificado para acomodar outros layouts de campo GECOS.

    
por 19.04.2018 / 07:31