#include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "ppport.h" #include #include #define UUSAGE "Usage: Unix::SavedIDs::setresuid(int ruid,int euid,int suid)" #define GUSAGE "Usage: Unix::SavedIDs::setresgid(int rgid,int egid,int sgid)" MODULE = Unix::SavedIDs PACKAGE = Unix::SavedIDs void getresuid() INIT: int err; uid_t ruid; uid_t euid; uid_t suid; PPCODE: err = getresuid(&ruid,&euid,&suid); if ( err ) { croak("%s",strerror(errno)); } XPUSHs(sv_2mortal(newSVuv(ruid))); XPUSHs(sv_2mortal(newSVuv(euid))); XPUSHs(sv_2mortal(newSVuv(suid))); void getresgid() INIT: int err; gid_t rgid; gid_t egid; gid_t sgid; PPCODE: err = getresgid(&rgid,&egid,&sgid); if ( err ) { croak("%s",strerror(errno)); } XPUSHs(sv_2mortal(newSVuv(rgid))); XPUSHs(sv_2mortal(newSVuv(egid))); XPUSHs(sv_2mortal(newSVuv(sgid))); void _setresuid(ruid,euid,suid) uid_t ruid uid_t euid uid_t suid CODE: if ( setresuid(ruid,euid,suid) ) { croak("%s",strerror(errno)); } CLEANUP: PL_uid = getuid(); PL_euid = geteuid(); void _setresgid(rgid,egid,sgid) uid_t rgid uid_t egid uid_t sgid CODE: if ( setresgid(rgid,egid,sgid) ) { croak("%s",strerror(errno)); } CLEANUP: PL_gid = getgid(); PL_egid = getegid();