id.c revision 31061
131061Sbrian/* 231061Sbrian * $Id: defs.c,v 1.1 1997/10/26 01:02:30 brian Exp $ 331061Sbrian */ 431061Sbrian 531061Sbrian#include <sys/types.h> 631061Sbrian#include <sys/socket.h> 731061Sbrian 831061Sbrian#include <sys/ioctl.h> 931061Sbrian#include <fcntl.h> 1031061Sbrian#include <stdio.h> 1131061Sbrian#include <stdlib.h> 1231061Sbrian#include <sysexits.h> 1331061Sbrian#include <unistd.h> 1431061Sbrian 1531061Sbrian#include "mbuf.h" 1631061Sbrian#include "log.h" 1731061Sbrian#include "main.h" 1831061Sbrian#ifdef __OpenBSD__ 1931061Sbrian#include <util.h> 2031061Sbrian#else 2131061Sbrian#include <libutil.h> 2231061Sbrian#endif 2331061Sbrian#include "id.h" 2431061Sbrian 2531061Sbrianstatic int uid; 2631061Sbrianstatic int gid; 2731061Sbrianstatic int euid; 2831061Sbrianstatic int egid; 2931061Sbrian 3031061Sbrianvoid 3131061SbrianID0init() 3231061Sbrian{ 3331061Sbrian uid = getuid(); 3431061Sbrian gid = getgid(); 3531061Sbrian euid = geteuid(); 3631061Sbrian egid = getegid(); 3731061Sbrian} 3831061Sbrian 3931061Sbrianstatic void 4031061SbrianID0setuser() 4131061Sbrian{ 4231061Sbrian if (setreuid(euid, uid) == -1) { 4331061Sbrian LogPrintf(LogERROR, "ID0setuser: Unable to setreuid!\n"); 4431061Sbrian Cleanup(EX_NOPERM); 4531061Sbrian } 4631061Sbrian} 4731061Sbrian 4831061Sbrianuid_t 4931061SbrianID0realuid() 5031061Sbrian{ 5131061Sbrian return uid; 5231061Sbrian} 5331061Sbrian 5431061Sbrianstatic void 5531061SbrianID0set0() 5631061Sbrian{ 5731061Sbrian if (setreuid(uid, euid) == -1) { 5831061Sbrian LogPrintf(LogERROR, "ID0set0: Unable to setreuid!\n"); 5931061Sbrian Cleanup(EX_NOPERM); 6031061Sbrian } 6131061Sbrian} 6231061Sbrian 6331061Sbrianint 6431061SbrianID0ioctl(int fd, unsigned long req, void *arg) 6531061Sbrian{ 6631061Sbrian int ret; 6731061Sbrian 6831061Sbrian ID0set0(); 6931061Sbrian ret = ioctl(fd, req, arg); 7031061Sbrian LogPrintf(LogID0, "%d = ioctl(%d, %d, %p)\n", ret, fd, req, arg); 7131061Sbrian ID0setuser(); 7231061Sbrian return ret; 7331061Sbrian} 7431061Sbrian 7531061Sbrianint 7631061SbrianID0unlink(const char *name) 7731061Sbrian{ 7831061Sbrian int ret; 7931061Sbrian 8031061Sbrian ID0set0(); 8131061Sbrian ret = unlink(name); 8231061Sbrian LogPrintf(LogID0, "%d = unlink(\"%s\")\n", ret, name); 8331061Sbrian ID0setuser(); 8431061Sbrian return ret; 8531061Sbrian} 8631061Sbrian 8731061Sbrianint 8831061SbrianID0socket(int domain, int type, int protocol) 8931061Sbrian{ 9031061Sbrian int ret; 9131061Sbrian 9231061Sbrian ID0set0(); 9331061Sbrian ret = socket(domain, type, protocol); 9431061Sbrian LogPrintf(LogID0, "%d = socket(%d, %d, %d)\n", ret, domain, type, protocol); 9531061Sbrian ID0setuser(); 9631061Sbrian return ret; 9731061Sbrian} 9831061Sbrian 9931061SbrianFILE * 10031061SbrianID0fopen(const char *path, const char *mode) 10131061Sbrian{ 10231061Sbrian FILE *ret; 10331061Sbrian 10431061Sbrian ID0set0(); 10531061Sbrian ret = fopen(path, mode); 10631061Sbrian LogPrintf(LogID0, "%p = fopen(\"%s\", \"%s\")\n", ret, path, mode); 10731061Sbrian ID0setuser(); 10831061Sbrian return ret; 10931061Sbrian} 11031061Sbrian 11131061Sbrianint 11231061SbrianID0open(const char *path, int flags) 11331061Sbrian{ 11431061Sbrian int ret; 11531061Sbrian 11631061Sbrian ID0set0(); 11731061Sbrian ret = open(path, flags); 11831061Sbrian LogPrintf(LogID0, "%d = open(\"%s\", %d)\n", ret, path, flags); 11931061Sbrian ID0setuser(); 12031061Sbrian return ret; 12131061Sbrian} 12231061Sbrian 12331061Sbrianint 12431061SbrianID0uu_lock(const char *ttyname) 12531061Sbrian{ 12631061Sbrian int ret; 12731061Sbrian 12831061Sbrian ID0set0(); 12931061Sbrian ret = uu_lock(ttyname); 13031061Sbrian LogPrintf(LogID0, "%d = uu_lock(\"%s\")\n", ret, ttyname); 13131061Sbrian ID0setuser(); 13231061Sbrian return ret; 13331061Sbrian} 13431061Sbrian 13531061Sbrianint 13631061SbrianID0uu_unlock(const char *ttyname) 13731061Sbrian{ 13831061Sbrian int ret; 13931061Sbrian 14031061Sbrian ID0set0(); 14131061Sbrian ret = uu_unlock(ttyname); 14231061Sbrian LogPrintf(LogID0, "%d = uu_unlock(\"%s\")\n", ret, ttyname); 14331061Sbrian ID0setuser(); 14431061Sbrian return ret; 14531061Sbrian} 146