Vorbereitungen fuer leight-weight objects
UID-Vergabe durch den Master
Support durch seteuid()
Support in Fehlerbehandlung
Anpassungen simul_efuns
Change-Id: I37b49708440209b3ace693afc4613c1287c41064
diff --git a/secure/simul_efun/seteuid.c b/secure/simul_efun/seteuid.c
index 516a759..1318b8d 100644
--- a/secure/simul_efun/seteuid.c
+++ b/secure/simul_efun/seteuid.c
@@ -8,19 +8,38 @@
int seteuid(string str)
{
- object ob = efun::previous_object();
-
- if (!str)
+ object|lwobject ob = efun::previous_object();
+ if(objectp(ob))
{
- efun::configure_object(ob, OC_EUID, 0);
+ if (!str)
+ {
+ efun::configure_object(ob, OC_EUID, 0);
+ return 1;
+ }
+
+ if (efun::call_direct(__MASTER_OBJECT__, "valid_seteuid", ob, str) != 1)
+ return 0;
+
+ efun::configure_object(ob, OC_EUID, str);
return 1;
}
+ else if (lwobjectp(ob))
+ {
+ if (!str)
+ {
+ efun::configure_lwobject(ob, LC_EUID, 0);
+ return 1;
+ }
- if (efun::call_direct(__MASTER_OBJECT__, "valid_seteuid", ob, str) != 1)
- return 0;
+ if (efun::call_direct(__MASTER_OBJECT__, "privilege_violation",
+ "configure_lwobject", ob, ob, LC_EUID, str) != 1)
+ return 0;
- efun::configure_object(ob, OC_EUID, str);
- return 1;
+ efun::configure_lwobject(ob, LC_EUID, str);
+ return 1;
+
+ }
+ return 0;
}
#endif