Skip to content

Monthly Archives: June 2012

Nick Kew : "The Apache Modules Book" (ISBN 0-13-240967-4)

mod_uploadchk : Détecter coté serveur le filetype dès le début de l’upload – part 1

Dans le cas où l’on souhaite faire pouvoir uploader de gros fichier, sans avoir un client lourd en java ou flash, il n’y a pas – à ma connaissance – de moyen de faire échouer l’upload aussitôt que le filetype est détecté ; ceci permettrait pourtant de ne pas faire attendre à l’utilisateur la fin de la longue opération pour lui dire :

Le type de fichier que vous tentez d’uploader n’est pas celui attendu

C’est l’occasion pour moi de m’aventurer dans la création d’un nouveau module apache. Je ne sais pas si j’arriverais au (meilleur) résultat voulu, mais quoi qu’il en soit ce sera toujours une expérience d’acquise que j’ai plaisir à partager avec les lecteurs de ce post.

Nick Kew : "The Apache Modules Book" (ISBN 0-13-240967-4)Pour commencer, je me suis penché une bonne heure sur l’excellent livre de Nick Kew : “The Apache Modules Book” (ISBN 0-13-240967-4)

Il à été donc clair qu’il fallait coder un “(input) filter” et non un “handler”. Une fois les premiers octets reçus, il identifiera le “Magic Number” et agira en  fonction de la configuration du module.

J’avais déjà cherché il y a plusieurs mois si un module Apache existant pourrait satisfaire plus ou moins cette problématique, en vain,  mais je suis tout de même allé rejeter un oeil sur https://modules.apache.org/

Je n’ai trouvé aucun module satisfaisant mais, comme je suis assez fainéant, je suis content d’avoir trouvé un module qui pourrait me servir de base structurelle, et de modèle pour les opérations (hooks/filters, buckets/brigade) : mod_upload, développé – par coïncidence – par Nick Kew.

Pour cette première étape, je voulais poser les bases, nous avons donc la piste de travail, un module de référence, et je clôture sur le code du futur module dans sa version la plus light possible, ainsi que le Makefile associé :

#include <httpd.h>
#include <apr_strings.h>
#include <util_filter.h>
#include <http_config.h>
#include <http_log.h>

module AP_MODULE_DECLARE_DATA uploadchk_module ;

module AP_MODULE_DECLARE_DATA uploadchk_module = {
	STANDARD20_MODULE_STUFF,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL,
	NULL
} ;
all: mod_uploadchk install
mod_uploadchk:
        apxs2 -n uploadchk -c mod_uploadchk.c
install:
        apxs2 -n uploadchk -i -a mod_uploadchk.la
        /etc/init.d/apache2 restart
clean:
        rm -rf .libs
        rm -f mod_uploadchk.la mod_uploadchk.lo mod_uploadchk.o mod_uploadchk.slo

La suite dans un prochain post…