Re: UFS neue Verzeichnisse nach RegEx

From: Peter Ross <Peter.Ross(at)alumni.tu-berlin.de>
Date: Tue, 20 Jan 2004 14:25:30 +1100 (EST)

On Tue, 20 Jan 2004, Robert Barten wrote:

> ich möchte gern, dass neue Verzeichnisse (nur Verzeichnisse)
> ausschließlich diesem RegEx ^([-+@\w./]+)$ entsprechen, wie kann ich das
> dem Dateisystem beibringen?

Hacken in den Kernelsourcen bzw. libc?

> Hintergrund: root durchwühlt mittels File::Find (Perl) die Mailfolder,
> um deren Größe zu ermitteln. Das Skript läuft mit -T im Taint-Modus.
> Einige User haben ihre Postfächer "Hans & Klara" u.ä. benannt, ich kann
> nun entweder auf "Hans-Klara" bestehen oder den RegEx erweitern, was mir
> jedoch nicht sicher genug ist.

Ich habe mich auch schon immer gefreut, dass die Applenutzer in der Firma
mir strahlend vorfuehrten, dass ihr Mac "Leerzeichen kann" und ueber
Microsoftianer spaeter, die genauso gern vorfuehren: 'Windows kann das
jetzt auch", allerdings weniger ueber die schwerer zu bearbeitenden
Filenamen, die via Ethershare, CAP, netatalk oder samba auf den Unixen
landeten.

Letztendlich habe ich dann aber die Skripte angepasst. Ueber
Verzeichnisnamen kann es bei den schwerbegeisterten Nutzern ("und KDE kann
das auch!") leicht zu Glaubenskriegen kommen. Zum Schluss kriegst Du nach
einem Dutzend Beschwerden vom Chef 'ne eNTe verpasst, da Microsoft das
eben kann.

So nebenbei habe ich mich wohl beim Sourcensuchen zum mkdir(2)-Ruf
etwas verpeilt und bin auf dieses Stueck gestossen, welches mir geradezu
anstoessig aussieht. Ein mkdir-C-Funktionsruf forkt erst, das Child ruft
dann /bin/mkdir auf und Parent wartet auf das Child und macht
anschliessend ein chmod.

Warum sieht das so kompliziert (und uneffizient) aus?

Gruss
Peter

/contrib/cvs/lib/mkdir.c

/* mkrmdir.c -- BSD compatible directory functions for System V
   Copyright (C) 1988, 1990 Free Software Foundation, Inc.

..

/* mkdir and rmdir adapted from GNU tar. */

/* Make directory DPATH, with permission mode DMODE.
..

int
mkdir (dpath, dmode)
     char *dpath;
     int dmode;
{
..
  cpid = fork ();
  switch (cpid)
    {
..
    case 0: /* Child process. */
      /* Cheap hack to set mode of new directory. Since this child
         process is going away anyway, we zap its umask.
         This won't suffice to set SUID, SGID, etc. on this
         directory, so the parent process calls chmod afterward. */
      status = umask (0); /* Get current umask. */
      umask (status | (0777 & ~dmode)); /* Set for mkdir. */
      execl ("/bin/mkdir", "mkdir", dpath, (char *) 0);
      _exit (1);

    default: /* Parent process. */
      while (wait (&status) != cpid) /* Wait for kid to finish. */
        /* Do nothing. */ ;

      if (status & 0xFFFF)
        {
          errno = EIO; /* /bin/mkdir failed. */
          return -1;
        }
      return chmod (dpath, dmode);
    }
}

To Unsubscribe: send mail to majordomo.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Tue 20 Jan 2004 - 04:27:26 CET

search this site