eUID jetzt statisch.
... naemlich die des erschaffenden Objektes.
Change-Id: Ibf96198083f977550824296c83a8ceea2895f885
diff --git a/obj/playerdata.c b/obj/playerdata.c
index f3c8c4e..a3c9c29 100644
--- a/obj/playerdata.c
+++ b/obj/playerdata.c
@@ -1,6 +1,6 @@
// Dieses Ding kriegt die UID vom Clonenden.
-// Der Master exportiert allerdings per export_uid() ggf. eine UID an dieses
-// Objekt.
+// Spielerladen duerfen nur Objekte, welche die gleiche UID wie der Cloner
+// (also dieses Objekt) haben.
// Abfragen kann es nur das Objekt, welches den Spieler geladen hat.
#pragma no_inherit,no_shadow
@@ -17,7 +17,7 @@
protected void create()
{
::create();
- seteuid(0);
+ seteuid(getuid());
set_next_reset(300);
}
@@ -25,19 +25,20 @@
{
pl = 0;
user = 0;
- // Das Objekt darf keine EUID mehr haben, damit ROOT-Objekte ihm ggf. eine
- // neue UID exportieren koennen, damit es einen neuen Spieler laden kann.
- seteuid(0);
return 1;
}
public int LoadPlayer(string name)
{
+ // Es duerfen nur Objekte mit der gleichen UID wie wir diesen Clone
+ // benutzen! Ansonsten koennten z.B. nicht-ROOT-Objekte einen von einem
+ // ROOT-Objekt erzeugten Clone hiervon nutzen und alles lesen...
+ if (!previous_object()
+ || getuid(previous_object()) != getuid(this_object()))
+ return 0;
if (query_wiz_level(getuid(previous_object())) < WIZARD_LVL)
return 0;
- seteuid(getuid());
-
mixed userinfo=MASTER->get_userinfo(name);
if (!pointerp(userinfo))
return 0;