Commandes LDAP avec PHP

De NCad Wiki
Version datée du 8 avril 2025 à 17:20 par Cacheln (discussion | contributions) (→‎Rechercher un utilisateur dans l'annuaire)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

Rechercher un utilisateur dans l'annuaire

La fonction attend les informations suivantes :

  • Nom de la personne recherchée.
  • Prénom de la personne recherchée.

La fonction retournera le résultats suivant en fonction des conditions suivantes :

  • L'utilisateur a été trouvé : retourne un tableau avec les informations de l'utilisateur.
  • L'utilisateur n'a pas été trouvé : retourne le code d'erreur 404.
  • La requête n'a pas aboutie : retourne le code d'erreur 500.
  • La requête est interdite : retourne le code d'erreur 403.
<?php

# CONFIG. CONNECTEUR AD
# ------------------------------
# À renseigner

# Domaine ActiveDirectory
define("LDAP_DOMAIN","ncad.fr");

# Serveur ActiveDirectory
define("LDAP_SERVER_NAME","ldaps://".LDAP_DOMAIN);

# Compte AD utilisé pour exécuter la commande
define("LDAP_SERVER_LOGIN","JOB0001-NCAD");

# Mot de passe du compte AD
define("LDAP_SERVER_PASSWORD","M0n#P45-sW0rDSuQ3Rc0pl!qu3");

# OU recherche comptes utilisateurs
define("LDAP_DN","OU=FIGEAC,DC=ncad,DC=fr");

# FONCTION ldap_search_user
# ------------------------------
 
function ldap_search_user($firstname, $lastname)
{

	if ($ldap_connection=@ldap_connect(LDAP_SERVER_NAME)) {
		$ldapBind = ldap_bind($ldap_connection,LDAP_SERVER_LOGIN."@".LDAP_DOMAIN,LDAP_SERVER_PASSWORD);
		ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3) or die('Unable to set LDAP protocol version');
		ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, 0); // We need this for doing an LDAP search.
		$ldap_base_dn = LDAP_DN;
		$search_filter = "(&(sn=$firstname)(givenname=$lastname))";
		$attributes = array();
		$attributes[] = 'givenname';
		$attributes[] = 'mail';
		$attributes[] = 'samaccountname';
		$attributes[] = 'sn';
		$attributes[] = 'department';
		$result = ldap_search($ldap_connection, $ldap_base_dn, $search_filter, $attributes);
		if (FALSE !== $result){
			$entries = ldap_get_entries($ldap_connection, $result);
			if ($entries['count'] >= 1) {
				$result = $entries;
			} else {
				$result = "404";
			}
		} else {
			$result = "403";
		}
		ldap_unbind($ldap_connection); // Clean up after ourselves.		
	} else {
		$result = "500";
	}
	return $result;
}

# TEST DE LA FONCTION
# ------------------------------
 
$ldap_search_result = ldap_search_user(
	"CACHELOU",
	"Nicolas"
);

print_r($ldap_search_result);

?>


Modifier la valeur d'un attribut pour un compte donné

La fonction attend les informations suivantes :

  • Nom d'utilisateur Windows de la personne recherchée.

La fonction retournera le résultats suivant en fonction des conditions suivantes :

  • Le compte a été trouvé : retourne un tableau avec les informations de l'utilisateur.
  • Le compte n'a pas été trouvé : retourne le code d'erreur 404.
  • La requête n'a pas aboutie (serveur indisponible ou requête interdite) : retourne le code d'erreur 403.
<?php

# CONFIG. CONNECTEUR AD
# ------------------------------
# À renseigner

# Domaine ActiveDirectory
define("LDAP_DOMAIN","ncad.fr");

# Serveur ActiveDirectory
define("LDAP_SERVER_NAME","ldaps://".LDAP_DOMAIN);

# Compte AD utilisé pour exécuter la commande
define("LDAP_SERVER_LOGIN","JOB0001-NCAD");

# Mot de passe du compte AD
define("LDAP_SERVER_PASSWORD","M0n#P45-sW0rDSuQ3Rc0pl!qu3");

# OU recherche comptes utilisateurs
define("LDAP_DN","OU=FIGEAC,DC=ncad,DC=fr");

# FONCTION ldap_update_attribute
# ------------------------------

function ldap_update_attribute($user, $attribute_name, $value) {

	error_reporting(0);
	$ldap_connection = ldap_connect(LDAP_SERVER_NAME);
	ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3);
	ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, 0); // We need this for doing an LDAP search.
	ldap_bind($ldap_connection,LDAP_SERVER_LOGIN."@".LDAP_DOMAIN,LDAP_SERVER_PASSWORD);
	
	$user_search = ldap_search($ldap_connection,LDAP_DN,"(&(sAMAccountName=$user))");
	$user_get = ldap_get_entries($ldap_connection, $user_search);
	$user_entry = ldap_first_entry($ldap_connection, $user_search);
	$user_dn = ldap_get_dn($ldap_connection, $user_entry);
	
	if (!$user_get) {
		return 404;
	}
	
	$attribute[$attribute_name] = array($value);
	
	$replace=ldap_mod_replace($ldap_connection, $user_dn, $attribute);
	
	$message[]=$user_dn;
	
	ldap_close($ldap_connection);

}

?>