Deutsch   English   Français   Italiano  
<5ffe5345$0$16187$426a34cc@news.free.fr>

View for Bookmarking (what is this?)
Look up another Usenet article

X-Received: by 2002:adf:90e3:: with SMTP id i90mr1565426wri.248.1610502981077;
        Tue, 12 Jan 2021 17:56:21 -0800 (PST)
Path: ...!news-out.google.com!nntp.google.com!feeder1-2.proxad.net!proxad.net!feeder1-1.proxad.net!cleanfeed1-b.proxad.net!nnrp1-1.free.fr!not-for-mail
Subject: =?UTF-8?Q?Re=3a_Fichier_binaire_d=27un_daemon_writable_ssi_le_damon?=
 =?UTF-8?Q?_est_stopp=c3=a9?=
Newsgroups: fr.comp.os.bsd
References: <5ffca81a$0$6449$426a74cc@news.free.fr>
 <slrnrvpiav.ofa.naddy@lorvorc.mips.inka.de>
 <5ffcf526$0$6458$426a74cc@news.free.fr>
 <slrnrvre0o.1bha.naddy@lorvorc.mips.inka.de>
 <5ffdeaa9$0$4026$426a74cc@news.free.fr>
 <slrnrvs1rb.1j81.naddy@lorvorc.mips.inka.de>
From: Francois Lafont <francois.lafont@nospam.invalid>
Date: Wed, 13 Jan 2021 02:56:20 +0100
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.10.0
MIME-Version: 1.0
In-Reply-To: <slrnrvs1rb.1j81.naddy@lorvorc.mips.inka.de>
Lines: 68
Message-ID: <5ffe5345$0$16187$426a34cc@news.free.fr>
Organization: Guest of ProXad - France
NNTP-Posting-Date: 13 Jan 2021 02:56:21 CET
NNTP-Posting-Host: 86.247.215.236
X-Trace: 1610502981 news-4.free.fr 16187 86.247.215.236:57656
X-Complaints-To: abuse@proxad.net
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Language: fr
Content-Transfer-Encoding: 8bit
Bytes: 4355

Re,

On 1/12/21 9:32 PM, Christian Weisgerber wrote:

>> Ce n'est pas ce que je constate sur ma Ubuntu 18.04 (une petite VM de test) :
>>
>> # C'est bête évidemment mais c'est juste pour modifier (n'importe comment)
>> # le fichier.
>> ~# vim /usr/sbin/apache2
> 
> Essaie quelque chose de simple.
> 
> # echo fdfdjjdf > /usr/sbin/apache2
> 
> Je ne sais pas ce que vim fait. Peut-être il invoque rename(2) ou
> unlink(2) et crée un nouveau fichier après.

Bien vu, merci beaucoup. En effet, j'aurais dû le tester. Je ne vais pas
copier/coller les commandes à nouveau mais avec un « ls -li » sur le binaire
pour afficher le numéro d'inode avant et après le vim, on peut constater qu'il
change. Donc tu as raison, vim doit faire un rename ou un unlink. Et si je
regarde les fichiers ouverts par les processus apache2 avec la commande lsof
après modification avec vim, on voit bien le fichier /usr/sbin/apache2 ouvert
mais en deleted. Le fichier n'est donc plus référencé dans l'aborescence du
filesystem mais existe toujours et n'a pas été modifié.

Et enfin, avec un echo comme tu le suggères, j'ai bien comme toi :

~# echo AAAAAAAAA > /usr/sbin/apache2
-bash: /usr/sbin/apache2: Text file busy

Et le echo fonctionne si le service apache2 est stoppé donc.


Bon, ben c'est cool, j'ai appris un truc « système » même si c'est un truc vieux
de 40 ans :). Du coup, comme tu le disais, dans la question qui me préoccupe dans
ce fil, la seule différence est bien au niveau de access() :

1. sur un Linux (en tout cas sur ma Ubuntu 18.04) access() ne renvoie pas d'erreur
sur un ETXTBSY (même si la page man access(2) de ma Ubuntu ne le mentionne nulle
part et mentionne même clairement le contraire).
2. sur une FreeBSD, access() renvoie bien une erreur sur un ETXTBSY.

Par facile de trouver une doc de référence là-dessus. La seule chose que j'ai
trouvée (mais j'ai peut-être mal cherché) c'est cette page
https://pubs.opengroup.org/onlinepubs/9699919799/ où il y a juste à la fin la
mention elliptique suivante :

-----------------------------------------------------
Issue 6

The following new requirements on POSIX implementations derive from alignment
with the Single UNIX Specification:

* The [ELOOP] mandatory error condition is added.
* A second [ENAMETOOLONG] is added as an optional error condition.
* The [ETXTBSY] optional error condition is added. <= Là !
-----------------------------------------------------


J'ai encore une dernière petite interrogation si possible : la vérité ultime
c'est donc que le binaire n'est pas modifiable quand il est en cours d'exécution
(sur un Unix), mais alors pourquoi diable sur Linux les développeurs ont-ils
voulu implémenter une fonction access() qui ne dit pas la vérité (elle dit que
c'est modifiable alors que c'est faux) ? J'avoue que la logique m'échappe un peu.

-- 
François Lafont