IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

Réalisation d'un filtre ISAPI


Sujet :

MFC

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Points : 12
    Points
    12
    Par défaut Réalisation d'un filtre ISAPI
    Bonjour

    Je souhaite réaliser un filtre ISAPI en C++.
    Ce filtre aura pour but d'empecher lors de l'edition d'un document sur un serveur (par l'OCX OpenDocument de Sharepoint) à l'utilisateur de remonter dans l'arborescence du serveur.

    Je cherche tout element qui pourrait m'apporter une quelconque aide à savoir tutorial, codes ...

    Merci d'avance pour votre aide

  2. #2
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    bonjour

    Alors j'ai vu la partie de la FAQ de Visual qui concernait justement les filtres ISAPI. En fait c'est deja ce que je savais.

    Pour la question "comment récuperer l'adresse IP (et d'autres infos) du poste client qui fait une requête HTTP sur ma DLL Extenstion ISAPI ?"

    on montre un exemple utilisant REMOTE_ADDR
    Mon but actuel est d'intercepter la methode PROPFIND qui est utilisée pour remonter dans une arborescence.
    or quand je remplace REMOTE_ADDR par le REQUEST_METHOD seul un GET apparait alors que dans le fichier log on voit bien les PROPFIND effectué par Word

    Je suppose donc qu'il existe une autre valeur pour intercepter les methode de requete HTTP/1.1. (dont PROPFIND fait parti)

    De toute evidence REQUEST_METHOD ne recupère que les REQUETE HTTP/1.0

    Merci pour l'aide que vous pourrez m'apporter

  3. #3
    Membre éclairé
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Points : 668
    Points
    668
    Par défaut
    Ben écoute je sais pas trop quelle est la version de HTTP gérée, mais sache que si tu fait GetServerVariable avec ALL_HTTP, il te retourne tout ce qui n'est pas récupérable dans les variable de base...

  4. #4
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    Non malheureusement, on ne voit pas apparaitre les PROPFIND avec ALL_HTTP

    Mais ne faut-il pas faire un filtre pour attraper le PROPFIND et non une simple extension ? et si oui y'a-t-il un tutoriel sur developpez.com ou ailleurs car celui que j'ai trouvé est un tutoriel sur les extensions ISAPI

  5. #5
    Membre éprouvé
    Avatar de Gabrielly
    Inscrit en
    Juin 2004
    Messages
    722
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 722
    Points : 1 128
    Points
    1 128
    Par défaut
    As-tu jeter un oeil dans l'msdn.

    tu as les types de notifications de filtres
    http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/vccore/html/_core_isapi_extensions.3a_.filters.asp
    Création d'un filtre ISAPI type
    http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/vccore/html/_core_steps_to_create_a_typical_isapi_filter.asp

  6. #6
    Membre éclairé
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Points : 668
    Points
    668
    Par défaut
    voici quelque liens dont je me suis servi :
    http://msdn.microsoft.com/library/fr...dlldefined.asp
    http://www.bnt.com/inetsdk/default.htm
    http://www.microsoft.com/mind/0396/ISAPI/ISAPI.asp
    http://www.codeguru.com/Cpp/I-N/isapi/
    http://www.15seconds.com/faq/ISAPI/default.htm
    http://www.15seconds.com/faq/ISAPI/default.htm et notemment ces liens pour choisir ente Extension et filtre ISAPI :http://www.15seconds.com/faq/ISAPI%20Extensions/333.htm
    http://msdn.microsoft.com/library/de...rammingFAQ.asp
    Différence entre un Filtre et une extensions ISAPI :
    Une Extension ISAPI et appellée uniquement sur requête directe sur la DLL.
    Un Filtre ISAPI et appellé à chaque requête sur le Site

    Juste une question à quoi sert le PROPFIND ?

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    la methode PROPFIND c'est la méthode qui permet a Word par exemple de savoir s'il peut remonter dans l'arborescence lors d'un enregistrer sous ou d'un open

    Mon objectif c d'empecher l'utilisateur de se balader un peu partout sur le serveur et de faire son enregistrement la ou il veut

    Je veux que lors de l'édition il ne puisse plus enregistrer que dans le dossier ou se trouve deja le document.

    Merci sinon pour les docs (je crois que je vais avoir de la lecture la )

  8. #8
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    J'ai encore une question :

    que faut-il faire pour passer d'une extension ISAPI à un filtre ISAPI ?

  9. #9
    Membre éclairé
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Points : 668
    Points
    668
    Par défaut
    Citation Envoyé par cyrille2k5
    J'ai encore une question :

    que faut-il faire pour passer d'une extension ISAPI à un filtre ISAPI ?
    Ben quand tu génère ton worspace ISAPI, normalement tu peut cocher ISAPI Fileter et/ou Extension et il te génère les classes dérivées correpsondantes.

    Ce que je comprend pas c'est que tu donne accès au disque dur de ton serveur par WORD ?

    Parce que quand je fais un download d'un fichier WORD et que je fais enregistrer sous, c'est eur le poste client et pas sur le serveur ?

  10. #10
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    justement nous on fait pas un download mais une mise à jour du fichier en ligne par l'intermédiaire d'un OCX donc on enregistre direct sur le serveur (d'ou le risque evident si l'utilisateur peut se balader comme il le veut)

    Sinon je crois que j'ai peut etre mal posé ma question :

    Est-il possible à partir du code de l'extension ISAPI, de faire le code du filtre ISAPI ou est-ce completement different ?

  11. #11
    Membre éclairé
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Points : 668
    Points
    668
    Par défaut
    je t'avoue que j'ai jamais essayé, mais tous les deux héritent de CHttpServer, donc il suffit de transférer ton code vers la classe Filtre.

    Par contre j'ai jamais fais de filtre donc je peut pas trop t'aider...

  12. #12
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    OK pas grave

    merci quand meme tu m'as deja beaucoup aidé.

  13. #13
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    Bon cette fois-ci j'y suis presque apparament, j'ai donc créer un filtre à partir de Visual C++ et j'ai mis en place les deux fonctions suivantes :


    static void write_options_response(PHTTP_FILTER_CONTEXT pfc)
    {
    char crlf[3] = { (char)13, (char)10, '\0' };
    static const char ops[] = "OPTIONS, GET, HEAD, POST, DELETE, TRACE, PROPFIND, PROPPATCH, COPY, MOVE, LOCK, UNLOCK";
    //char server[30];
    int opslen = strlen(ops);
    char allow[255];
    sprintf(allow, "%s%s%s%s", "Allow: ",ops, crlf, crlf);

    /* send options back down */
    pfc->AddResponseHeaders(pfc, "Content-Length:0\r\n",0);
    pfc->AddResponseHeaders(pfc, "Cache-Control:no-cache\r\n",0);
    pfc->AddResponseHeaders(pfc, "MS-Author-ViaAV\r\n",0);
    pfc->AddResponseHeaders(pfc, "DAV: 1, 2, slide, access-control\r\n",0);
    pfc->AddResponseHeaders(pfc, allow,0);
    pfc->ServerSupportFunction(pfc, SF_REQ_SEND_RESPONSE_HEADER,NULL,(DWORD)crlf,(DWORD)crlf);
    }



    DWORD CIsapi_filter::HttpFilterProc(PHTTP_FILTER_CONTEXT pfc, DWORD dwNotificationType, LPVOID pvNotification)
    {
    write_options_response(pfc);
    return SF_STATUS_REQ_FINISHED;
    }

    A la sortie il me met une erreur 500 quand je tente d'ouvrir le fichier doc (sachant que dans IIS j'ai mis le dll du filtre en Executable Path donc il passe par le filtre avant de tenter l'ouverture).

    y'a-t-il qq'un qui peut me dire ce qu'il manque pour que ça marche ?

  14. #14
    Membre éclairé
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Points : 668
    Points
    668
    Par défaut
    si mes souvenirs sont bon l'erreur 500 c'est Internal Server Error et moi en développant des extensions, c'était un plantage mémoire...

  15. #15
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    ta mémoire est bonne en effet ... et tu vois pas ce qui pourrait manquer dans le code ?

  16. #16
    Membre éclairé
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Points : 668
    Points
    668
    Par défaut
    ben a part le sprintf supérieur à la capacité de allow !!!

    sinon, je te conseille de dbugger en local.
    Regarde ce lien, il doit marcher aussi pour les filtres ISAPI...

    http://c.developpez.com/faq/vc/?page...#ISAPIDebugDLL

  17. #17
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    ok je vais essayer bon apparament deja ca vient pas du sprintf mais bon c'etait une bonne remarque

  18. #18
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    malheureusement ca n'a l'air de fonctionner que pour les extensions ISAPI pas pour les filtres

  19. #19
    Membre éclairé
    Avatar de matazz
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    471
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 471
    Points : 668
    Points
    668
    Par défaut
    tu a essayer d'ajouter ton filtre à ton site par défaut en local ?

  20. #20
    Membre à l'essai
    Inscrit en
    Avril 2005
    Messages
    34
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 34
    Points : 12
    Points
    12
    Par défaut
    c'est ce que j'essaye de faire

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Charger un filtre ISAPI
    Par Tiber_le_vrai dans le forum IIS
    Réponses: 0
    Dernier message: 21/10/2009, 10h01
  2. Réponses: 1
    Dernier message: 23/04/2008, 11h39
  3. Réalisation d'un filtre
    Par toune84 dans le forum Macros et VBA Excel
    Réponses: 42
    Dernier message: 26/11/2007, 22h46
  4. URL Rewriting via un filtre ISAPI
    Par CREZ59 dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 21/08/2007, 15h11
  5. [XSLT] Réalisation d'un filtre
    Par enael dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 25/05/2007, 15h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo