id.c revision 31061
1/* 2 * $Id: defs.c,v 1.1 1997/10/26 01:02:30 brian Exp $ 3 */ 4 5#include <sys/types.h> 6#include <sys/socket.h> 7 8#include <sys/ioctl.h> 9#include <fcntl.h> 10#include <stdio.h> 11#include <stdlib.h> 12#include <sysexits.h> 13#include <unistd.h> 14 15#include "mbuf.h" 16#include "log.h" 17#include "main.h" 18#ifdef __OpenBSD__ 19#include <util.h> 20#else 21#include <libutil.h> 22#endif 23#include "id.h" 24 25static int uid; 26static int gid; 27static int euid; 28static int egid; 29 30void 31ID0init() 32{ 33 uid = getuid(); 34 gid = getgid(); 35 euid = geteuid(); 36 egid = getegid(); 37} 38 39static void 40ID0setuser() 41{ 42 if (setreuid(euid, uid) == -1) { 43 LogPrintf(LogERROR, "ID0setuser: Unable to setreuid!\n"); 44 Cleanup(EX_NOPERM); 45 } 46} 47 48uid_t 49ID0realuid() 50{ 51 return uid; 52} 53 54static void 55ID0set0() 56{ 57 if (setreuid(uid, euid) == -1) { 58 LogPrintf(LogERROR, "ID0set0: Unable to setreuid!\n"); 59 Cleanup(EX_NOPERM); 60 } 61} 62 63int 64ID0ioctl(int fd, unsigned long req, void *arg) 65{ 66 int ret; 67 68 ID0set0(); 69 ret = ioctl(fd, req, arg); 70 LogPrintf(LogID0, "%d = ioctl(%d, %d, %p)\n", ret, fd, req, arg); 71 ID0setuser(); 72 return ret; 73} 74 75int 76ID0unlink(const char *name) 77{ 78 int ret; 79 80 ID0set0(); 81 ret = unlink(name); 82 LogPrintf(LogID0, "%d = unlink(\"%s\")\n", ret, name); 83 ID0setuser(); 84 return ret; 85} 86 87int 88ID0socket(int domain, int type, int protocol) 89{ 90 int ret; 91 92 ID0set0(); 93 ret = socket(domain, type, protocol); 94 LogPrintf(LogID0, "%d = socket(%d, %d, %d)\n", ret, domain, type, protocol); 95 ID0setuser(); 96 return ret; 97} 98 99FILE * 100ID0fopen(const char *path, const char *mode) 101{ 102 FILE *ret; 103 104 ID0set0(); 105 ret = fopen(path, mode); 106 LogPrintf(LogID0, "%p = fopen(\"%s\", \"%s\")\n", ret, path, mode); 107 ID0setuser(); 108 return ret; 109} 110 111int 112ID0open(const char *path, int flags) 113{ 114 int ret; 115 116 ID0set0(); 117 ret = open(path, flags); 118 LogPrintf(LogID0, "%d = open(\"%s\", %d)\n", ret, path, flags); 119 ID0setuser(); 120 return ret; 121} 122 123int 124ID0uu_lock(const char *ttyname) 125{ 126 int ret; 127 128 ID0set0(); 129 ret = uu_lock(ttyname); 130 LogPrintf(LogID0, "%d = uu_lock(\"%s\")\n", ret, ttyname); 131 ID0setuser(); 132 return ret; 133} 134 135int 136ID0uu_unlock(const char *ttyname) 137{ 138 int ret; 139 140 ID0set0(); 141 ret = uu_unlock(ttyname); 142 LogPrintf(LogID0, "%d = uu_unlock(\"%s\")\n", ret, ttyname); 143 ID0setuser(); 144 return ret; 145} 146