
access_rights()
***************


FUNKTION
========

   int access_rights(string euid, string file);


DEFINIERT IN
============

   access_rights.c (muss man selber schreiben)


PARAMETER
=========

   euid
       Die euid desjenigen, der auf das Verzeichnis schreiben will
   file
       Name der Datei, auf die zugegriffen werden soll


BESCHREIBUNG
============

   access_rights() wird immer dann aufgerufen, wenn jemand, der nicht
   sowieso schon schreibberechtigt ist, in die Datei/das Verzeichnis file
   schreiben oder loeschen will.

   Anhand von euid kann man dann entscheiden, ob der Schreibzugriff erlaubt
   wird oder nicht.


RUECKGABEWERT
=============

   0, wenn der Zugriff verweigert wird,
   1, wenn der Zugriff erlaubt wird.


BEISPIELE
=========

   /* /d/inseln/wargon/access_rights.c */

   int access_rights(string euid, string file)
   {
     string dir, rest;

     // Catweazle darf auf alles zugreifen (*argl* ;^)
     if (euid == "catweazle")
       return 1;

     // Rechte auf einzelne Verzeichnisse ermitteln:
     if (sscanf(file, "%s/%s", dir, rest) != 2)
       rest = file;

     // Jof und Boing duerfen an Tarko Reub rumpfuschen:
     if (dir == "tarko" && (euid == "jof" || euid == "boing"))
       return 1;

     // Anthea darf die Karten von Aurora und der Piratenhoehle bearbeiten:
     if (dir == "MAPS" &&
         member( ({"Aurora", "Piratenhoehle" }), rest) >= 0 &&
         euid == "anthea")
       return 1;

     // alle anderen duerfen nicht!
     return 0;
   }


BEMERKUNGEN
===========

   file ist immer relativ zu dem Verzeichnis, in dem das access_rights.c
   liegt! Will also jemand auf /d/inseln/wargon/tarko/macros.h schreiben,
   wird file "tarko/macros.h" uebergeben.

   In Verzeichnissen von Magiern mit einem Level >= ELDER_LVL wird das
   access_rights.c NICHT ausgewertet (da damit andere Magier zB. an
   Erzmagierrechte gelangen koennten).

   Es wird immer nur EIN access_rights.c ausgewertet, naemlich das in der
   tiefsten Verzeichnisebene.

   Man kann sowohl in seinen Regionsverzeichnissen als auch in seinen
   Homeverzeichnissen access_rights.c-Dateien anlegen.

   GANZ WICHTIG!!!
   Fuer die Dateien, die evtl. von anderen angelegt werden, ist man immer
   noch selbst verantwortlich! Wenn jemand also ein Gebiet bei Dir an-
   schliesst, muss es erst von den verantwortlichen Regionsmagiern abgesegnet
   sein!
