Algo de Linux: septiembre 2010

sábado, 25 de septiembre de 2010

Filtros de búsqueda LDAP

sHabitualmente usamos ldapsearch con determinados filtros de búsqueda para seleccionar entradas en nuestro servidor de ldap. Por ejemplo: Si quiero buscar en mi árbol de ldap un usuario cuyo cn (common name) sea Esteban Navas, mi filtro de búsqueda sería:

cn=Esteban Navas

Y si quisiera buscar un usuario cuyo sn fuera Santos, el filtro de búsqueda sería:

cn=Santos

Bien. Pues como podemos ver en estos dos ejemplos, la sintaxis básica de un filtro de búsqueda es la siguiente:

atributo operador valor


Operadores en filtros de búsqueda.-
Los operadores que podemos usar en un filtro de búsqueda son:

Tipo de búsqueda Operador Descripción
Igualdad = Este operador nos devuelve aquellas entradas que coincidan exactamente en el valor especificado. Ejemplo: cn=Esteban Navas
Subcadena =*cadena* Devuelve entradas que contengan la subcadena especificada. Ejemplos: cn=Esteban*  cn= *Navas* cn=E*Navas. El asterisco representa cero o más caracteres.
Mayor o igual >= Devuelve entradas que contengan atributos mayores o iguales que el valor especificado. Ejemplo: gidNumber >= 3000
Menor o igual <= Devuelve entradas que contengan atributos menores o iguales que el valor especificado. Ejemplo:  uidNumber >=100
Presencia =* Devuelve entradas que contengan uno o más valores en el atributo especificado. Ejemplo: cn=*
Aproximado ~= Devuelve entradas que contengan el atributo especificado con un valor que es aproximadamente igual al valor de búsqueda. Ejemplo: cn~=cnavas


Operadores booleanos.-

Además de los operadores anteriores, podemos utilizar operadores booleanos, que nos van a permitir combinar varios filtros en uno:

(Operador-booleano(filtro)(filtro)(filtro)...)

Por supuesto, también podemos combinar varios operadores booleanos en una expresión. Por ejemplo:

(Operador-booleano(filtro)((Operador-booleano(filtro)(filtro)))

Las expresiones booleanas se evalúan en el siguiente orden:
  • Primero de dentro hacia afuera en las expresiones con paréntesis.
  • De izquierda a derecha en otro caso.
Los operadores que podemos usar en un filtro de búsqueda son:

Tipo de búsqueda Operador Descripción
AND & La expresión será cierta cuando todos los filtros sean ciertos. Ejemplo: (&(filtro)(filtro)...(filtro))
OR | La expresión será cierta cuando al menos uno de los filtros sea cierto. Ejemplo: (|(filtro)(filtro)...(filtro))
NOT!Permite conseguir la negación del filtro. Ejemplo: (!(filtro))

Y eso es todo. Veamos algunos ejemplos de búsqueda:

El más sencillo. Cuando quiero buscar un elemento que contiene el valor igual a la cadena de búsqueda:

cn=Esteban Navas

Si quisiera buscar entradas que contengan uno o más valores en el atributo memberOf:


memberOf=*

Para buscar por ejemplo todas las entradas que no contengan el valor "teacher" en el atributo cn , haría lo siguiente:


(!(cn=teachers))

Y si quiero buscar entradas que contengan una subcadena en el atributo description:

description=*admin*

Imaginemos que quiero obtener todas las entradas cuyo objectClass=posixGroup y los usuarios son miembros del grupo teachers en la unidad organizacional ou=Group,dc=instituto,dc=extremadura,dc=es:

(&(objectClass=posixGroup)(memberOf=cn=teachers,ou=Group,dc=instituto,dc=extremadura,dc=es)

Y si quierra buscar las entradas  cuyo objectClass=posixGroup y los usuarios no sean miembros del grupo teachers en la unidad organizacional ou=Group,dc=instituto,dc=extremadura,dc=es:

(&(objectClass=posixGroup)(!(memberOf=cn=teachers,ou=Group,dc=instituto,dc=extremadura,dc=es))

Y si por ejemplo, quisiera ver aquellas entradas que no tengan el atributo estructural inetOrgPerson:

(!(objectClass=inetOrgPerson))

martes, 21 de septiembre de 2010

Instalar Dropbox en Debian Lenny

Dropbox es un servicio de "disco virtual" que nos permite guardar 2GB de archivos de forma gratuita. Lo uso en ocasiones para mantener archivos sincronizados. De este modo puedo acceder a ellos esté donde esté y tan sólo con una conexión a internet. Además, me permite compartir fácilmente archivos con otros usuarios.

En los ordenadores que uso habitualmente tengo instalado el cliente que se integra con nautilus y hace más sencilla la transferencia de archivos.
En ordenadores no habituales, siempre podemos acceder a través del navegador identificándonos en la web con nuestro login y password.

Instalarlo en Debian Lenny es sencillo:

# cd /usr/src
# wget https://www.dropbox.com/download?dl=packages/nautilus-dropbox-0.6.3.tar.bz2
# tar -jvxf nautilus-dropbox-0.6.3.tar.bz2
# cd nautilus-dropbox-0.6.3/
# ./configure
# make
# make install

Script para convertir un archivo iso_8859-1 a UTF-8

Después de las vacaciones, volvemos a la carga.

Aquí dejo un script que uso para convertir un fichero con codificación iso_8859-1 a UTF-8. El script toma como parámetro el archivo a convertir y deja el resultado de la conversión en el mismo archivo.

#!/bin/bash
#
# Esteban M. Navas Martín
# Script para convertir un archivo iso_8859-1 a UTF-8
# Ejemplo de uso: $0 archivo

# Comprobamos si se ha introducido un parámetro
if [ $# -eq 0 ]; then
   echo "Script para convertir un archivo iso_8859-1 a UTF-8"
   echo "ERROR: Debe especificar el nombre del archivo a convertir."
   echo "Sintaxis: $0 archivo"
   exit
fi

sed s/"ISO-8859-1"/"UTF-8"/ $1 > tmpfile
iconv -f ISO_8859-1 -t UTF-8 tmpfile > $1
rm -f tmpfile


Y el enlace para descargarlo directamente:
http://dl.dropbox.com/u/5004198/scripts/iso2utf.sh