Ejemplos de JavaScript para escribir políticas de adopción

Un administrador de IBM® Security Identity Manager, y puede utilizar ejemplos de JavaScript para escribir políticas de adopción.

Ejemplo 1

El ejemplo siguiente muestra un script simple en el que el ID de usuario de la cuenta coincide con el campo alias de la persona.

var ps = new PersonSearch();
return ps.searchByFilter("","(eraliases="+subject.eruid[0]+")",2); 

Ejemplo 2

Este ejemplo es más complicado y lo puede utilizar para la adopción de cuentas huérfanas. Este script utiliza las tres estrategias siguientes para deducir un propietario para una cuenta:
  1. Localice a una única persona con una entrada eraliases que coincida con el campo de cuenta eruid.
  2. En esta acción se obtienen varias coincidencias y la entrada nueva tiene un campo cn, compruebe la lista de coincidencias en busca de una con un campo cn que coincida con el campo cn de cuenta.
  3. Si no se obtienen coincidencias en el primer paso, busque una cuenta que coincida (la misma eruid) en el servicio maestro, como por ejemplo el servicio de Active Directory de Windows. Si esta cuenta tiene un propietario, utilice esa persona. Si fallan las tres estrategias, se devuelve nulo, lo que provoca una cuenta huérfana.
    Nota: Los mensajes de registro se escriben en el registro de mensajes con la categoría script.

var entryUid = subject.eruid[0];
Enrole.log("script", "Starting script for eruid=" + entryUid);
/* cambie el valor siguiente al nombre del servicio maestro: */
/* var masterServiceName = "Master AD Service";
*/
var masterServiceName = "NT4 (local)";
/* cambie el valor siguiente al nombre de perfil de servicio del servicio maestro: 
    El cambio solo es necesario si el perfil del servicio maestro y el perfil del
    servicio para el que se define la política de adopción son diferentes */
/* var serviceProfileNameOfMasterService = "ADProfile";
*/
var scriptResult = null;
var personsearch = new PersonSearch();
var filter = "(eraliases=" + entryUid + ")";
var psResult = personsearch.searchByFilter("", filter,2);
if (psResult.length == 1) {
	/* encontrada una persona con alias coincidente */
	Enrole.log("script", "single match for eraliases=" + entryUid);
	scriptResult = psResult;
}
else if (psResult.length > 1) {
	/* más de una persona ha coincidido con el alias.
	 * si la cuenta tiene un valor de atributo "cn", compruebe si este coincide con 
el "cn" de uno de ellos
	 */
	Enrole.log("script", "multiple matchs for eraliases=" + entryUid);
	var entryCn = subject.cn;
	if (typeof entryCn != "undefined") {
		Enrole.log("script", "checking cn=" + entryCn[0]);
		for (idx=0; idx<psResult.length; ++idx) {
			var cn1 = psResult[idx].getProperty("cn");
			if (cn1.length != 0 && cn1[0] == entryCn[0]) {
				/* encontrada una coincidencia para el cn */
				scriptResult = psResult[idx];
				break;
			}
		}
	}
	else {
		Enrole.log("script", "cn field not defined for eruid=" + entryUid);
	}
}
else {
	/* ninguna persona coincide con el alias especificado.
	    Compruebe si hay un ID de usuario de cuenta que coincida en el Active
     Directory de la empresa */
	var acctSearch = new AccountSearch();
	 /* Usamos acctSearch.searchByUidAndService(entryUid, masterServiceName)
       si el perfil del servicio maestro es el mismo que el perfil del servicio 
       para el que se define la política de adopción.
       Si el perfil del servicio maestro y el perfil del servicio para el que
       se define la política de adopción son diferentes, el nombre de perfil 
       maestro se pasa al método searchByUidAndService() de la siguiente manera–
       var asResult = acctSearch.searchByUidAndService(entryUid, masterServiceName,
       serviceProfileNameOfMasterService); */
   var asResult = acctSearch.searchByUidAndService(entryUid, masterServiceName);
   if (asResult != null && asResult.length == 1) {
		/* se ha encontrado una cuenta de AD que coincide -- utilice estos propietarios
     de cuenta, 
si no es huérfana */
		var owner = asResult[0].getProperty("owner");
		if (owner.length == 1) {
			var owner_dn = owner[0];
			Enrole.log("script", "single match for service " + masterServiceName + " uid=" 
       + entryUid + ", returning person with dn=" + owner_dn);
			scriptResult = new Person(owner_dn);
		}
		else {
			Enrole.log("script", "service " + masterServiceName + " uid=" 
       + entryUid + " is an orphan");
		}
	}
	else {
		Enrole.log("script", "No match or more than one match for uid=" + entryUid 
     + " on master service " + masterServiceName);
	}
}
return scriptResult;
/* fin del script */ 

Ejemplo 3

El ejemplo siguiente comprueba si un nombre de persona, el campo gecos en Linux, coincide con su nombre completo en IBM Security Identity Manager, y .

/*
 * OrphanAdoption JavaScript
 */

if (subject["gecos"] == null) {
    return null;
} else {
    var buf = "(|";
 
    for (i = 0; i < subject["gecos"].length; i++) {
        buf += "(cn=" + subject["gecos"][i] + ")";
    }

    buf += ")";

    var ps = new PersonSearch();
    /* Tiene que utilizar un tipo de búsqueda de subárbol (2) */
    return ps.searchByFilter("Person", buf, 2);
}

Ejemplo 4

Este ejemplo utiliza la nueva ExtendedPerson de API de JavaScript para adoptar una cuenta "root" como la cuenta "System" y adoptar otras cuentas como cuentas "Individual".
/*
 * OrphanAdoption JavaScript
 */

if ((subject[ "eruid"]==null)){
    return null;
} else if (subject["eruid"]!=null){
    var buff='(|'; 
    for (i=0;i<subject["eruid"].length;i++){
        buff+='(uid='+subject["eruid"][i]+')';
    }
    buff+=')';

    var ps = new PersonSearch(); 
    var searchResult = ps.searchByFilter("",buff, 2);
    if (searchResult!=null && searchResult.length==1) {
        var person = searchResult[0];

        // Si se trata de una cuenta "root", adóptela como una cuenta "System";
        // de lo contrario, adóptela como una cuenta "Individual" de
        // forma predeterminada.
        if (subject.eruid[0] == "root") {
            return new ExtendedPerson(person, "System"); 
        } else {
            return person;
        }
    } else if (searchResult!=null && searchResult.length>1) {
        return searchResult;
    } else {
        return null;
    }
}