liste des utilisateurs des packages esupdev et uPortal-Esup

Archives de la liste Aide


Re: [esup-utilisateurs] horde 3.1.1 et filtres sieve


chronological Discussions 
  • From: LALOT Dominique < >
  • To: bellenger < >
  • Cc: , Sylvain Costard < >, Julien MARCHAL < >
  • Subject: Re: [esup-utilisateurs] horde 3.1.1 et filtres sieve
  • Date: Mon, 24 Apr 2006 15:38:36 +0200

Bonjour,

Désolé d'avoir été silencieux, je ne suis pas abonné à toutes les listes. Il y a bien eu deux versions du patch. Le jour ou j'ai activé ingo via CAS, j'ai eu des problèmes et je m'en suis sorti en re-patchant saslauthd. Le code original distingue un triplet login/service/realm comme clé de hashage. Je n'ai gardé que le login. Quelque soit le service, on compare bien les PT au même endroit. C'est mieux que de patcher le code IMP/ Horde, sans compter que le client sieve peut venir d'une autre appli. Un SSO = un login unique, donc vis à vis de CAS, le distinguo fait dans le code original n'a pas de sens.

Cordialement

Dominique

PS: Je remets le patch sur la liste.

bellenger a écrit :
Bonjour,

Pour info: je suis repartis d'un tar.gz de cyrus-sasl, j'ai appliqué le patch de Dominique Lalot (celui joint au mail du 16.12.2005) puis j'ai recompilé cyrus-sasl et la ca fonctionne.
Pourtant, avant ma recompile, en version horde 3.0, ca fonctionnait et le patch avait bien été appliqué.
Y'a t'il eu plusieurs version du patch?


Merci...

Sylvain Costard a écrit :
Je viens de mettre ingo-h3-1.0.1 a la place dans le réperoire de horde 3.1.1 et cela refonctionne.

Julien MARCHAL a écrit :
Mes test se base sur un php 4 mais je pense enfin j'espere ke ca ne change rien
Par contre tu peux essayer de modifier le fichier horde/ingo/lib/Driver/timsieved.php
Pour ajouter des logs car la je ne vois d'ou peu venir le pb.



Sylvain Costard 
< >
 a Ã©crit:

Julien MARCHAL a écrit :
Je viens de faire le test ici sur mon package de ve ca fonctionne bien.
Le problème se produit quand exactement ?
Arrivé vous a a afficher le script actif ?
dans les logs de horde avez vous des erreurs ?

Normalement si un PT n'est pas bon on va en chercher un second tout de suite derrière mais je ne le vois pas dans vos logs ?

Il se peut qu'un PT ne soit plus bon par contre si c'est systèmatique il y a un pb.
Utilisez vous bien saslautd avec le mode cache (-c au lancement) et avez vous appliquer les modification de dominique lalot sur sasl pour avoir un cache correct?

Merci d'avance pour ces infos.


Le probleme arrive en faisant absences->enregistrer par exemple.
non Je n'arrive pas a voir le script actif
dans horde j'ai uniquement la ligne
Apr 21 17:52:38 HORDE [notice] [ingo] User : costard_s retrieve PT :
PT-854-G5QL2OqwI5d0thxCj10d [on line 316 of
"/applis/Internet/horde-3.1.1/lib/Horde/Auth/cas.php"]
oui salslauthd est bien patché et le cache est lancé

pour info ma version de php est la 5.1.2



Sylvain Costard 
< >
 a Ã©crit:

bellenger a écrit :
Bonjour,
j'ai bien configuré le pam_cas.conf et /etc/pam.d/sieve est identique au /etc/pam.d/imap, ce qui m'etonne le plus c'est que ca fonctionnait en horde 3.0

Damien Berjoan a écrit :
Bonjour,

A tout hasard avez vous bien défini dans pam_cas.conf le proxy pour Ingo et avez vous bien changer le nom du service dans /etc/pam.d/sieve ?



Je viens de me rendre compte que l'on a exactement la même chose sur
notre Webmail depuis la mise à jour horde en 3.1.1

--------------------------------------------------
.oooO Sylvain Costard
(   ) Université de Haute Bretagne - Rennes 2
\ (  CRI/Infra/Unix
 \_) Tel: 02.99.14.13.47 - Fax: 02.99.14.13.50
------------------------------------------------



--Julien Marchal
Equipe réseau - CRI

Pôle Lorrain de Gestion
13, Rue Michel Ney
CO 75
54037 Nancy Cedex

Tel : 03.54.00.11.06 / 03.83.39.64.91
FAX : 03.83.39.64.43



--------------------------------------------------
.oooO Sylvain Costard
(   ) Université de Haute Bretagne - Rennes 2
 \ (  CRI/Infra/Unix
  \_) Tel: 02.99.14.13.47 - Fax: 02.99.14.13.50
------------------------------------------------



--Julien Marchal
Equipe réseau - CRI

Pôle Lorrain de Gestion
13, Rue Michel Ney
CO 75
54037 Nancy Cedex

Tel : 03.54.00.11.06 / 03.83.39.64.91
FAX : 03.83.39.64.43





--
Dominique LALOT
Ingenieur Systeme et Reseaux
http://annuaire.univmed.fr/showuser.php?uid=lalot

--- cache.c     2005-10-17 16:27:14.042507000 +0200
+++ cache.new.c 2005-10-17 16:26:58.767829104 +0200
@@ -204,10 +204,9 @@ int cache_lookup(const char *user, const
         * Get the offset into the hash table and the md5 sum of
         * the password.
         **************************************************************/
-
        strlcpy(userrealmserv, user, sizeof(userrealmserv));
-       strlcat(userrealmserv, realm, sizeof(userrealmserv));
-       strlcat(userrealmserv, service, sizeof(userrealmserv));
+       //DOM strlcat(userrealmserv, realm, sizeof(userrealmserv));
+       //DOM strlcat(userrealmserv, service, sizeof(userrealmserv));
 
        hash_offset = cache_pjwhash(userrealmserv);
 
@@ -242,11 +241,20 @@ int cache_lookup(const char *user, const
        high_bucket = low_bucket + CACHE_MAX_BUCKETS_PER;
 
        for (ref_bucket = low_bucket; ref_bucket < high_bucket; ref_bucket++) 
{
-               if (strcmp(user, ref_bucket->creds + ref_bucket->user_offt) 
== 0 && \
-                   strcmp (realm, ref_bucket->creds + 
ref_bucket->realm_offt) == 0 && \
-                   strcmp(service, ref_bucket->creds + 
ref_bucket->service_offt) == 0) {
-                       read_bucket = ref_bucket;
-                       break;
+                /* ignore obsolete entry */
+               if(ref_bucket->created <  epoch_timeout){
+                       continue;
+               }
+               /* Do not compare service just 

 and passw */
+               if (strcmp(user, ref_bucket->creds + ref_bucket->user_offt) 
== 0 ) {
+                       if (memcmp(pwd_digest, ref_bucket->pwd_digest, 16) == 
0) {
+                               if (flags & VERBOSE)
+                                       logger(L_DEBUG, L_FUNC, debug, user, 
realm, service, "found with valid passwd");
+                               cache_un_lock(hash_offset);
+                               table_stats->hits++;
+                               return CACHE_OK;
+                       }
+
                }
        }
 
@@ -259,30 +267,10 @@ int cache_lookup(const char *user, const
         * best bucket to place the new entry (CACHE_FLUSH_WITH_RESCAN).
         **************************************************************/
 
-       if (read_bucket != NULL && read_bucket->created > epoch_timeout) {
-
-               if (memcmp(pwd_digest, read_bucket->pwd_digest, 16) == 0) {
-
-                       if (flags & VERBOSE)
-                               logger(L_DEBUG, L_FUNC, debug, user, realm, 
service, "found with valid passwd");
-
-                       cache_un_lock(hash_offset);
-                       table_stats->hits++;
-                       return CACHE_OK;
-               }
-
-               if (flags & VERBOSE)
-                       logger(L_DEBUG, L_FUNC, debug, user, realm, service, 
"found with invalid passwd, update pending");
-
-               result->status = CACHE_FLUSH;
-
-       } else {
-
                if (flags & VERBOSE)
                        logger(L_DEBUG, L_FUNC, debug, user, realm, service, 
"not found, update pending");
 
                result->status = CACHE_FLUSH_WITH_RESCAN;
-       }
 
        result->hash_offset = hash_offset;
        result->read_bucket = read_bucket;
@@ -314,6 +302,7 @@ void cache_commit(struct cache_result *r
        struct bucket           *ref_bucket;
        struct bucket           *low_bucket;
        struct bucket           *high_bucket;
+       time_t oldest;
 
        if (!(flags & CACHE_ENABLED))
                return;
@@ -338,9 +327,16 @@ void cache_commit(struct cache_result *r
                high_bucket = low_bucket + CACHE_MAX_BUCKETS_PER;
                write_bucket = low_bucket;
 
+               oldest=write_bucket->created;
                for (ref_bucket = low_bucket; ref_bucket < high_bucket; 
ref_bucket++) {
-                       if (ref_bucket->created < write_bucket->created) 
+                       if (ref_bucket->created + table_timeout < 
write_bucket->created) {
                                write_bucket = ref_bucket;
+                               break;
+                       } 
+                       if (ref_bucket->created < oldest){ 
+                               write_bucket = ref_bucket;
+                               oldest=ref_bucket->created;
+                       }
                }
        }
 



Archives gérées par MhonArc 2.6.10.

§