#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"
#include <unistd.h>
#include <string.h>
#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));
}
#if PERL_REVISION < 5 || ( PERL_REVISION == 5 && PERL_VERSION < 15 ) || ( PERL_REVISON == 5 && PERL_VERSION == 15 && PERL_SUBVERSION < 9 )
CLEANUP:
PL_uid = getuid();
PL_euid = geteuid();
#endif
void
_setresgid(rgid,egid,sgid)
uid_t rgid
uid_t egid
uid_t sgid
CODE:
if ( setresgid(rgid,egid,sgid) ) {
croak("%s",strerror(errno));
}
#if PERL_REVISION < 5 || ( PERL_REVISION == 5 && PERL_VERSION < 15 ) || ( PERL_REVISON == 5 && PERL_VERSION == 15 && PERL_SUBVERSION < 9 )
CLEANUP:
PL_gid = getgid();
PL_egid = getegid();
#endif