setegid()

29/03/2008 - 15:23 von christian schaas | Report spam
hi leute ich hab folgenden code:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>

static __inline int setfsuid(uid_t uid) {

int res;

uid_t olduid = geteuid();

res = seteuid(uid);
printf("setegid returned: %d on set uid: %d Error: %s", res,
uid, strerror(errno));

if (errno != EINVAL)
errno = 0;

return olduid;
}

static __inline int setfsgid(gid_t gid) {

int res;

gid_t oldgid = getegid();

res = setegid(gid);
printf("setegid returned: %d on set gid: %d Error: %s", res,
gid, strerror(errno));
if (errno != EINVAL)
errno = 0;

return oldgid;
}

int main() {

int olduid = setfsuid( 1000 );
int oldgid = setfsgid( 1000 );

exit(0);
}


Jetzt mein Problem, das setzen der effektiven uid funktioniert.
Aber beim setzen der effektiven gid bekomm ich immer "Operation
not Permitted".(Programm wird als root gestartet)

Hat da jemand ne idee woran des liegen koennte?

Hab ein Gentoo Linux mit 2.6.24 kern, wenn das von Bedeutung
ist.

gruss

chris
 

Lesen sie die antworten

#1 Achim Peters
29/03/2008 - 16:13 | Warnen spam
christian schaas wrote:
int res;

res = setegid(gid);
printf("setegid returned: %d on set gid: %d Error: %s", res, gid,
strerror(errno));

Aber beim setzen der effektiven gid bekomm ich immer "Operation
not Permitted".(Programm wird als root gestartet)



Und? errno kann beliebige Werte enthalten, wenn kein Fehler aufgetreten
ist. Ob ein Fehler aufgetreten ist, erkennst Du (hier) an res. Ist das
denn != 0?

Bye
Achim

Ähnliche fragen