Beispiel #1
0
/**
 * Retrouver un dn
 * @param string $dn
 * @param array $desc
 * @param string $serveur
 * @return array
 */
function auth_ldap_retrouver($dn, $desc = array(), $serveur = '')
{
    // Lire les infos sur l'utilisateur a partir de son DN depuis LDAP
    if (!($ldap = spip_connect_ldap($serveur))) {
        spip_log("ldap {$serveur} injoignable");
        return array();
    }
    $ldap_link = $ldap['link'];
    if (!$desc) {
        $desc = $ldap['attributes'] ? $ldap['attributes'] : $GLOBALS['ldap_attributes'];
        unset($desc['login']);
    }
    $result = @ldap_read($ldap_link, $dn, "objectClass=*", array_values($desc));
    if (!$result) {
        return array();
    }
    // Recuperer les donnees du premier (unique?) compte de l'auteur
    $val = @ldap_get_entries($ldap_link, $result);
    if (!is_array($val) or !is_array($val[0])) {
        return array();
    }
    $val = $val[0];
    // Convertir depuis UTF-8 (jeu de caracteres par defaut)
    include_spip('inc/charsets');
    foreach ($desc as $k => $v) {
        $desc[$k] = importer_charset($val[strtolower($v)][0], 'utf-8');
    }
    return $desc;
}
Beispiel #2
0
/**
 *
 * @param string $login
 * @param string $pw
 * @param string $serveur
 * @return array
 */
function lire_php_auth($login, $pw, $serveur = '')
{
    $row = sql_fetsel('*', 'spip_auteurs', 'login='******'text'), '', '', '', '', $serveur);
    if (!$row) {
        if (spip_connect_ldap($serveur) and $auth_ldap = charger_fonction('ldap', 'auth', true)) {
            return $auth_ldap($login, $pw, $serveur, true);
        }
        return false;
    }
    // su pas de source definie
    // ou auth/xxx introuvable, utiliser 'spip'
    if (!($auth_methode = $row['source']) or !($auth = charger_fonction($auth_methode, 'auth', true))) {
        $auth = charger_fonction('spip', 'auth', true);
    }
    $auteur = '';
    if ($auth) {
        $auteur = $auth($login, $pw, $serveur, true);
    }
    // verifier que ce n'est pas un message d'erreur
    if (is_array($auteur) and count($auteur)) {
        return $auteur;
    }
    return false;
}
Beispiel #3
0
        include_once  _DIR_RESTREINT_ABS.'auth/ldap.php';
        include_once 'config/ldap.php';
        spip_connect();
        ### DBG
        fich_debug("DBG >> login : $login\n");
        // Si l'utilisateur figure deja dans la base, y recuperer les infos
        $result = spip_query("SELECT * FROM spip_auteurs WHERE login="******" AND source='ldap'");
        if (!spip_num_rows($result)) { 
            ### DBG
            fich_debug("DBG >> Login : $login n'est pas dans la base.\n");
            fich_debug("DBG >> statut : ".$GLOBALS['meta']["ldap_statut_import"]."\n");
            fich_debug("DBG >> ldap_base : ".$GLOBALS['ldap_base']."\n");
            // sinon importer les infos depuis LDAP,
            // avec le statut par defaut a l'install
            // Inserer les infos dans la base spip
            spip_connect_ldap();
            auth_ldap_inserer("uid=$login,ou=People,".$GLOBALS['ldap_base'], $GLOBALS['meta']["ldap_statut_import"], $login);
           $result = spip_query("SELECT * FROM spip_auteurs WHERE login="******" AND source='ldap'");
        }
        $row_auteur = spip_fetch_array($result);
        ### DBG
        fich_debug("DBG >> statut :".$row_auteur['statut']."\n");
        if ($row_auteur['statut'] == '0minirezo')
	   $cookie_admin = "@".$session_login;

        $var_f = charger_fonction('session', 'inc');
        $cookie_session = $var_f($row_auteur);
        ### DBG
        fich_debug("DBG >> $cookie_session\n");
        // On poste le cookie de session
        spip_setcookie('spip_session', $cookie_session);
Beispiel #4
0
function ecrire_acces() {
	$htaccess = _DIR_RESTREINT . _ACCESS_FILE_NAME;
	$htpasswd = _DIR_TMP . _AUTH_USER_FILE;

	// Cette variable de configuration peut etre posee par un plugin
	// par exemple acces_restreint ;
	// si .htaccess existe, outrepasser spip_meta
	if (($GLOBALS['meta']['creer_htpasswd'] != 'oui')
	AND !@file_exists($htaccess)) {
		spip_unlink($htpasswd);
		spip_unlink($htpasswd."-admin");
		return;
	}

	# remarque : ici on laisse passer les "nouveau" de maniere a leur permettre
	# de devenir redacteur le cas echeant (auth http)... a nettoyer
	// attention, il faut au prealable se connecter a la base (necessaire car utilise par install)

	if (spip_connect_ldap()) return;
	$p1 = ''; // login:htpass pour tous
	$p2 = ''; // login:htpass pour les admins
	$s = sql_select("login, htpass, statut", "spip_auteurs", sql_in("statut",  array('1comite','0minirezo','nouveau')));
	while ($t = sql_fetch($s)) {
		if (strlen($t['login']) AND strlen($t['htpass'])) {
			$p1 .= $t['login'].':'.$t['htpass']."\n";
			if ($t['statut'] == '0minirezo')
				$p2 .= $t['login'].':'.$t['htpass']."\n";
		}
	}
	if ($p1) {
	  ecrire_fichier($htpasswd, $p1);
	  ecrire_fichier($htpasswd.'-admin', $p2);
	  spip_log("Ecriture de $htpasswd et $htpasswd-admin");
	}
}
Beispiel #5
0
 function lire()
 {
     // read
     global $ldap_link, $ldap_base, $flag_utf8_decode;
     $this->nom = $this->email = $this->pass = $this->statut = '';
     if (!$this->login) {
         return false;
     }
     // If the author exists in the database, fetch his infos
     $query = "SELECT * FROM spip_auteurs WHERE login='******' AND source='ldap'";
     $result = lcm_query($query);
     if ($row = lcm_fetch_array($result)) {
         $this->nom = $row['nom'];
         $this->email = $row['email'];
         $this->statut = $row['statut'];
         $this->bio = $row['bio'];
         return true;
     }
     // Read the info on the author from LDAP
     $result = @ldap_read($ldap_link, $this->user_dn, "objectClass=*", array("uid", "cn", "mail", "description"));
     // If the user cannot read his informations, reconnect with the main account
     if (!$result) {
         if (spip_connect_ldap()) {
             $result = @ldap_read($ldap_link, $this->user_dn, "objectClass=*", array("uid", "cn", "mail", "description"));
         } else {
             return false;
         }
     }
     if (!$result) {
         return false;
     }
     // Fetch the author's data
     $info = @ldap_get_entries($ldap_link, $result);
     if (!is_array($info)) {
         return false;
     }
     for ($i = 0; $i < $info["count"]; $i++) {
         $val = $info[$i];
         if (is_array($val)) {
             if (!$this->nom) {
                 $this->nom = $val['cn'][0];
             }
             if (!$this->email) {
                 $this->email = $val['mail'][0];
             }
             if (!$this->login) {
                 $this->login = $val['uid'][0];
             }
             if (!$this->bio) {
                 $this->bio = $val['description'][0];
             }
         }
     }
     // Convert from UTF-8 (default encoding)
     if ($flag_utf8_decode) {
         $this->nom = utf8_decode($this->nom);
         $this->email = utf8_decode($this->email);
         $this->login = utf8_decode($this->login);
         $this->bio = utf8_decode($this->bio);
     }
     return true;
 }