Bruno-L <bruno@bluesilk.be.invalid> wrote:
> quelqu'un voit il un moyen d'interdire le renomage de répertoire tout en
> y autorisant l'ajout de fichiers ?
Je ferais un petit programme en C qui serait set-UID sur un usager
adequat pour ajouter des fichiers au repertoire et qui appellera cp en
sous main après avoir validé que l'UID réel a bien le droit de lire le
fichier qu'il veut deplacer, que ce fichier en est bien un, et tout ce
genre de chose...
Un truc du genre ca (pas compilé, pas testé. Y'aura peut être un
problème à prévoir avec le repertoire courrant)
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <err.h>
#include <sysexits.h>
#include <sys/stat.h>
#define OUTPUT_DIR "/var/tmp/truc"
#define _BIN_CP "/bin/cp"
int
main(argc, argv)
int argc;
char **argv;
{
struct stat st;
char *ap[] = { _BIN_CP, NULL, OUTPUT_DIR, NULL };
char *ep[] = { NULL };
if (argc != 2)
errx(EX_USAGE, "usage: %s filename", argv[0]);
if (access(argv[1], R_OK) != 0)
err(EX_NOPERM, "unable to read \"%s\"", argv[1]);
if (stat(argv[1], &st) != 0)
err(EX_OSERR, "stat failed on \"%s\"", argv[1]);
if (st.st_mode & S_IFMT != S_IFREG)
errx(EX_NOPERM, "\"%s\" is not a plain file", argv[1]);
ap[1] = argv[1];
(void)execve(_BIN_CP, ap, ep);
err(EX_OSERR, "%s %s %s failed", _BIN_CP, argv[1], OUTPUT_DIR);
/* NOTREACHED */
return EX_SOFTWARE;
}
--
Emmanuel Dreyfus
Publicité subliminale: achetez ce livre!
http://www.eyrolles.com/Informatique.../livre-bsd.php
manu@netbsd.org