FANOTIFY_MARK(2)

NOM
fanotify_mark - Ajouter, supprimer ou modifier une marque fanotify sur un objet de système de fichiers

SYNOPSIS
#include <sys/fanotify.h>

int fanotify_mark(int fanotify_fd, unsigned int flags,
                  uint64_t mask, int dirfd, const char *pathname);

DESCRIPTION
Pour un aperçu de l’interface de programmation fanotify, consultez fanotify(7).

fanotify_mark() ajoute, supprime ou modifie une marque fanotify sur un objet de système de fichiers. L’appelant doit avoir le droit de lecture sur l’objet de système de fichiers à marquer.

L’argument fanotify_fd est un descripteur de fichier renvoyé par fanotify_init(2).

flags est un masque binaire décrivant la modification à réaliser. Il doit contenir exactement une des valeurs suivantes.

FAN_MARK_ADD
    Les événements dans mask seront ajoutés au masque de marque (ou au masque ignore). mask doit être non vide sinon l’erreur EINVAL surviendra.

FAN_MARK_REMOVE
    Les événements dans l’argument mask seront supprimés du masque de marque (ou du masque ignore). mask doit être non vide sinon l’erreur EINVAL surviendra.

FAN_MARK_FLUSH
    Supprimer toutes les marques de systèmes de fichiers, de montages, ou de répertoires et fichiers du groupe fanotify. Si flags contient FAN_MARK_MOUNT, toutes les marques de montage seront supprimées du groupe. Si flags contient FAN_MARK_FILESYSTEM, toutes les marques de systèmes de fichiers seront supprimées du groupe. Sinon, toutes les marques des répertoires et fichiers seront supprimées. Aucun autre attribut et au plus l'un des attributs FAN_MARK_MOUNT ou FAN_MARK_FILESYSTEM peut être utilisé avec FAN_MARK_FLUSH. mask est ignoré.

Si aucune des valeurs précédentes n’est indiquée, ou si plus d’une est indiquée, l’appel échoue avec l'erreur EINVAL.

De plus, zéro ou plus des valeurs suivantes peuvent être incluses dans flags (avec un OU binaire).

FAN_MARK_DONT_FOLLOW
    Si pathname est un lien symbolique, marquer le lien lui-même, plutôt que le fichier pointé (par défaut, fanotify_mark() déréférence pathname si c’est un lien symbolique).

FAN_MARK_ONLYDIR
    Si l’objet de système de fichiers à marquer n’est pas un répertoire, l’erreur ENOTDIR surviendra.

FAN_MARK_MOUNT
    Marquer le point de montage indiqué par pathname. Si pathname n’est pas un point de montage lui-même, le point de montage contenant pathname sera marqué. Tous les répertoires, sous-répertoires et fichiers contenus dans le point de montage seront surveillés. Les événements qui exigent que le descripteur de fichier fanotify_fd ait été initialisé avec le drapeau FAN_REPORT_FID, tels que FAN_CREATE, FAN_ATTRIB, FAN_MOVE et FAN_DELETE_SELF ne peuvent pas être fournis comme mask quand flags contient FAN_MARK_MOUNT. Une telle tentative renverra l'erreur EINVAL.

FAN_MARK_FILESYSTEM (depuis Linux 4.20)
    Marquer le système de fichiers indiqué par pathname. Le système de fichiers contenant pathname sera marqué. Tous les fichiers et répertoires contenus dans le système de fichiers issus de n'importe quel point de montage seront surveillés.

FAN_MARK_IGNORED_MASK
    Les événements dans mask seront ajoutés ou supprimés du masque ignore.

FAN_MARK_IGNORED_SURV_MODIFY
    Le masque ignore survivra aux événements de modification. Si cet attribut n’est pas défini, le masque ignore est effacé quand un événement de modification survient pour le fichier ou répertoire ignorés.

mask définit les événements à écouter (ou à ignorer). C’est un masque binaire constitué par les valeurs suivantes :

FAN_ACCESS
    Créer un événement quand un fichier ou un répertoire (mais consultez BOGUES) est accédé (en lecture).

FAN_MODIFY
    Créer un événement quand un fichier est modifié (en écriture).

FAN_CLOSE_WRITE
    Créer un événement quand un fichier modifiable en écriture est fermé.

FAN_CLOSE_NOWRITE
    Créer un événement quand soit un fichier, soit un répertoire, en lecture seule, est fermé.

FAN_OPEN
    Créer un événement quand soit un fichier, soit un répertoire est ouvert.

FAN_OPEN_EXEC (depuis Linux 5.0)
    Créer un événement quand un fichier est ouvert pour être exécuté. Voir les NOTES pour plus de détails.

FAN_ATTRIB (depuis Linux 5.1)
    Créer un événement quand les métadonnées d'un fichier ou d'un répertoire ont changé. Un descripteur de fichier fanotify créé avec FAN_REPORT_FID est nécessaire.

FAN_CREATE (depuis Linux 5.1)
    Créer un événement quand un fichier ou un répertoire a été créé dans un répertoire parent marqué. Un descripteur de fichier fanotify créé avec FAN_REPORT_FID est nécessaire.

FAN_DELETE (depuis Linux 5.1)
    Créer un événement quand un fichier ou un répertoire a été effacé d'un répertoire parent marqué. Un descripteur de fichier fanotify créé avec FAN_REPORT_FID est nécessaire.

FAN_DELETE_SELF (depuis Linux 5.1)
    Créer un événement quand un fichier, ou même un répertoire, marqué est effacé. Un descripteur de fichier fanotify créé avec FAN_REPORT_FID est nécessaire.

FAN_MOVED_FROM (depuis Linux 5.1)
    Créer un événement quand un fichier ou un répertoire a été déplacé depuis un répertoire parent marqué. Un descripteur de fichier fanotify créé avec FAN_REPORT_FID est nécessaire.

FAN_MOVED_TO (depuis Linux 5.1)
    Créer un événement quand un fichier ou un répertoire est déplacé vers un répertoire parent marqué. Un descripteur de fichier fanotify créé avec FAN_REPORT_FID est nécessaire.

FAN_MOVE_SELF (depuis Linux 5.1)
    Créer un événement quand un fichier, ou même un répertoire, marqué a été déplacé. Un descripteur de fichier fanotify créé avec FAN_REPORT_FID est nécessaire.

FAN_OPEN_PERM
    Créer un événement quand une permission d’ouvrir un fichier ou un répertoire est demandée. Un descripteur de fichier fanotify créé avec FAN_CLASS_PRE_CONTENT ou FAN_CLASS_CONTENT est nécessaire.

FAN_OPEN_EXEC_PERM (depuis Linux 5.0)
    Créer un événement quand une permission d’ouvrir un fichier en exécution est demandée. Un descripteur de fichier fanotify créé avec FAN_CLASS_PRE_CONTENT ou FAN_CLASS_CONTENT est nécessaire. Voir les NOTES pour des détails supplémentaires.

FAN_ACCESS_PERM
    Créer un événement quand une permission de lire un fichier ou un répertoire est demandée. Un descripteur de fichier fanotify créé avec FAN_CLASS_PRE_CONTENT ou FAN_CLASS_CONTENT est nécessaire.

FAN_ONDIR
    Créer des événements pour les répertoires - par exemple quand opendir(3), readdir(3) (mais voir BOGUES) et closedir(3) sont appelés. Sans cet attribut, les événements ne sont créés que pour les fichiers. Dans le contexte des événements d'une entrée de répertoire tels que FAN_CREATE, FAN_DELETE, FAN_MOVED_FROM et FAN_MOVED_TO, il est nécessaire d'indiquer le drapeau FAN_ONDIR afin de créer des événements quand des entrées de sous-répertoire sont modifiées (à savoir mkdir(2) ou rmdir(2)).

FAN_EVENT_ON_CHILD
    Des événements pour les enfants directs des répertoires marqués seront créés. L’attribut n’a pas d’effet lors du marquage de montages ou de systèmes de fichiers. Remarquez qu’aucun événement n’est créé pour les enfants des sous-répertoires des répertoires marqués. De manière plus spécifique, les événements de modification d’entrée d'un répertoire FAN_CREATE, FAN_DELETE, FAN_MOVED_FROM et FAN_MOVED_TO ne sont pas générés pour des modifications effectuées dans les sous-répertoires de répertoires marqués. Remarquez que les événements FAN_DELETE_SELF et FAN_MOVE_SELF ne sont pas générés pour les enfants de répertoires marqués. Pour surveiller des arborescences complètes de répertoires, le montage ou le système de fichiers adéquat doit être marqué.

Les valeurs composées suivantes sont définies :

FAN_CLOSE
    Un fichier est fermé (FAN_CLOSE_WRITE|FAN_CLOSE_NOWRITE).

FAN_MOVE
    Un fichier ou un répertoire a été déplacé (FAN_MOVED_FROM|FAN_MOVED_TO).

L’objet de système de fichiers à marquer est déterminé par le descripteur de fichier dirfd et le chemin indiqué dans pathname :

*   si pathname est NULL, dirfd définit l’objet de système de fichiers à marquer ;

*   si pathname est NULL et que dirfd prend la valeur spéciale AT_FDCWD, le répertoire de travail actuel est à marquer ;

*   si pathname est absolu, il définit l’objet de système de fichiers à marquer et dirfd est ignoré ;

*   si pathname est relatif et que dirfd n’a pas la valeur AT_FDCWD, alors l’objet de système de fichiers à marquer est déterminé en interprétant pathname comme relatif au répertoire référencé par dirfd ;

*   si pathname est relatif et que dirfd a la valeur AT_FDCWD, alors l’objet de système de fichiers à marquer est déterminé en interprétant pathname comme relatif au répertoire de travail actuel.

VALEUR RENVOYÉE
S'il réussit, fanotify_mark() renvoie 0. En cas d'erreur, il renvoie -1 et remplit errno avec la valeur d'erreur.

ERREURS

EBADF
    Un descripteur de fichier incorrect a été passé dans fanotify_fd.

EINVAL
    Une valeur incorrecte a été passée dans flags ou mask, ou fanotify_fd n'était pas un descripteur de fichier fanotify.

EINVAL
    Le descripteur de fichier fanotify a été ouvert avec FAN_CLASS_NOTIF ou FAN_REPORT_FID et le masque contient un attribut pour des événements de permission (FAN_OPEN_PERM ou FAN_ACCESS_PERM).

ENODEV
    Le système de fichiers indiqué par pathname n'est associé à aucun système de fichiers prenant en charge fsid (comme tmpfs(5)). Cette erreur ne peut être renvoyée que quand un descripteur de fichier fanotify renvoyé par fanotify_init(2) a été créé avec FAN_REPORT_FID.

ENOENT
    L’objet de système de fichiers indiqué par dirfd et pathname n’existe pas. Cette erreur survient aussi lors d’une tentative de supprimer un masque d’un objet qui n’est pas marqué.

ENOMEM
    La mémoire nécessaire n’a pas pu être allouée.

ENOSPC
    Le nombre de marques dépasse la limite de 8192 et l’attribut FAN_UNLIMITED_MARKS n’était pas indiqué quand le descripteur de fichier fanotify a été créé avec fanotify_init(2).

ENOSYS
    Ce noyau n’implémente pas fanotify_mark(). L’interface de programmation fanotify n'est disponible que si le noyau a été configuré avec CONFIG_FANOTIFY.

ENOTDIR
    flags contient FAN_MARK_ONLYDIR, et dirfd et pathname n’indiquent pas de répertoire.

EOPNOTSUPP
    L'objet indiqué par pathname est associé à un système de fichiers qui ne gère pas l'encodage de gestion de fichiers. Cette erreur ne peut être renvoyée que lorsqu'un descripteur de fichier fanotify renvoyé par fanotify_init(2) a été créé avec FAN_REPORT_FID.

EXDEV
    Le système de fichiers indiqué par pathname se trouve dans un sous-volume de système de fichiers (comme btrfs(5)) qui utilise un fsid différent de son superbloc racine. Cette erreur ne peut être renvoyée que lorsqu'un descripteur de fichier fanotify renvoyé par fanotify_init(2) a été créé avec FAN_REPORT_FID.

VERSIONS
fanotify_mark() a été introduit dans la version 2.6.36 du noyau Linux et activé dans la version 2.6.37.

CONFORMITÉ
Cet appel système est spécifique à Linux.

NOTES

  FAN_OPEN_EXEC et FAN_OPEN_EXEC_PERM
Quand on utilise FAN_OPEN_EXEC ou FAN_OPEN_EXEC_PERM dans le mask, des événements de ces types ne seront renvoyés que lorsque l'exécution directe d'un programme se produit. Plus particulièrement, cela signifie que les événements de ces types seront créés pour les fichiers ouverts en utilisant execve(2), execveat(2), ou uselib(2). Les événements de ces types n'apparaîtront pas quand un interpréteur est passé pour interprétation d'un fichier (ou s'il est en cours de lecture).

De plus, si une marque a aussi été placée sur l'éditeur de liens dynamiques de Linux, un utilisateur doit s'attendre aussi à recevoir un événement associé quand un objet ELF a été ouvert avec succès en utilisant execve(2) ou execveat(2).

Par exemple, si le binaire ELF suivant devait être appelé et si une marque FAN_OPEN_EXEC a été placée sur / :

    $ /bin/echo toto

Dans ce cas, l'application à l'écoute devrait recevoir des événements FAN_OPEN_EXEC, respectivement pour le binaire ELF et pour l'interpréteur :

    /bin/echo
    /lib64/ld-linux-x86-64.so.2

BOGUES
Les bogues suivants étaient présents dans les noyaux Linux avant la version 3.16 :

*   si flags contient FAN_MARK_FLUSH, dirfd et pathname doivent indiquer un objet de système de fichiers valable, même si cet objet n’est pas utilisé ;

*   readdir(2) ne crée pas d’événement FAN_ACCESS ;

*   Si fanotify_mark() est appelé avec FAN_MARK_FLUSH, les valeurs incorrectes de flags ne sont pas vérifiées.

VOIR AUSSI
fanotify_init(2), fanotify(7)

COLOPHON
Cette page fait partie de la publication 5.08 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page, peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

TRADUCTION
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Philippe MENGUAL <jpmengual@debian.org> Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE. Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à <debian-l10n-french@lists.debian.org>.