///////////////////////////////////////////////////////////////////////////////////////// // File HiPi::Utils // Description: C Utilities for HiPi::Utils // Copyright: Copyright (c) 2013-2017 Mark Dootson // License: This is free software; you can redistribute it and/or modify it under // the same terms as the Perl 5 programming language system itself. ///////////////////////////////////////////////////////////////////////////////////////// #include "EXTERN.h" #include "perl.h" #include "XSUB.h" #include "mylib/include/ppport.h" #include "mylib/include/compat.h" #include #include #include #if HIPI_PERL_VERSION_GE( 5, 16, 0 ) int PL_gid; int PL_egid; int PL_uid; int PL_euid; #endif MODULE = HiPi::Utils PACKAGE = HiPi::Utils void _drop_permissions_id(touid, togid = -1) int touid int togid PREINIT: int ruid, euid, suid, rgid, egid, sgid; CODE: if( togid != -1) { if (setresgid(togid,togid,togid) < 0) croak("Failed in call to drop gid privileges."); if (getresgid(&rgid, &egid, &sgid) < 0) croak("gid privilege check failed."); if (rgid != togid || egid != togid || sgid != togid) croak("Failed to drop gid privileges."); PL_gid = togid; PL_egid = togid; } if (setresuid(touid,touid,touid) < 0) croak("Failed in call to drop uid privileges"); if (getresuid(&ruid, &euid, &suid) < 0) croak("uid privilege check failed"); if (ruid != touid || euid != touid || suid != touid) croak("Failed to drop uid privileges."); PL_uid = touid; PL_euid = touid;