15106c671SBrian Somers /* 25106c671SBrian Somers * $Id: defs.c,v 1.1 1997/10/26 01:02:30 brian Exp $ 35106c671SBrian Somers */ 45106c671SBrian Somers 55106c671SBrian Somers #include <sys/types.h> 65106c671SBrian Somers #include <sys/socket.h> 75106c671SBrian Somers 85106c671SBrian Somers #include <sys/ioctl.h> 95106c671SBrian Somers #include <fcntl.h> 105106c671SBrian Somers #include <stdio.h> 115106c671SBrian Somers #include <stdlib.h> 125106c671SBrian Somers #include <sysexits.h> 135106c671SBrian Somers #include <unistd.h> 145106c671SBrian Somers 155106c671SBrian Somers #include "mbuf.h" 165106c671SBrian Somers #include "log.h" 175106c671SBrian Somers #include "main.h" 185106c671SBrian Somers #ifdef __OpenBSD__ 195106c671SBrian Somers #include <util.h> 205106c671SBrian Somers #else 215106c671SBrian Somers #include <libutil.h> 225106c671SBrian Somers #endif 235106c671SBrian Somers #include "id.h" 245106c671SBrian Somers 255106c671SBrian Somers static int uid; 265106c671SBrian Somers static int gid; 275106c671SBrian Somers static int euid; 285106c671SBrian Somers static int egid; 295106c671SBrian Somers 305106c671SBrian Somers void 315106c671SBrian Somers ID0init() 325106c671SBrian Somers { 335106c671SBrian Somers uid = getuid(); 345106c671SBrian Somers gid = getgid(); 355106c671SBrian Somers euid = geteuid(); 365106c671SBrian Somers egid = getegid(); 375106c671SBrian Somers } 385106c671SBrian Somers 395106c671SBrian Somers static void 405106c671SBrian Somers ID0setuser() 415106c671SBrian Somers { 425106c671SBrian Somers if (setreuid(euid, uid) == -1) { 435106c671SBrian Somers LogPrintf(LogERROR, "ID0setuser: Unable to setreuid!\n"); 445106c671SBrian Somers Cleanup(EX_NOPERM); 455106c671SBrian Somers } 465106c671SBrian Somers } 475106c671SBrian Somers 485106c671SBrian Somers uid_t 495106c671SBrian Somers ID0realuid() 505106c671SBrian Somers { 515106c671SBrian Somers return uid; 525106c671SBrian Somers } 535106c671SBrian Somers 545106c671SBrian Somers static void 555106c671SBrian Somers ID0set0() 565106c671SBrian Somers { 575106c671SBrian Somers if (setreuid(uid, euid) == -1) { 585106c671SBrian Somers LogPrintf(LogERROR, "ID0set0: Unable to setreuid!\n"); 595106c671SBrian Somers Cleanup(EX_NOPERM); 605106c671SBrian Somers } 615106c671SBrian Somers } 625106c671SBrian Somers 635106c671SBrian Somers int 645106c671SBrian Somers ID0ioctl(int fd, unsigned long req, void *arg) 655106c671SBrian Somers { 665106c671SBrian Somers int ret; 675106c671SBrian Somers 685106c671SBrian Somers ID0set0(); 695106c671SBrian Somers ret = ioctl(fd, req, arg); 705106c671SBrian Somers LogPrintf(LogID0, "%d = ioctl(%d, %d, %p)\n", ret, fd, req, arg); 715106c671SBrian Somers ID0setuser(); 725106c671SBrian Somers return ret; 735106c671SBrian Somers } 745106c671SBrian Somers 755106c671SBrian Somers int 765106c671SBrian Somers ID0unlink(const char *name) 775106c671SBrian Somers { 785106c671SBrian Somers int ret; 795106c671SBrian Somers 805106c671SBrian Somers ID0set0(); 815106c671SBrian Somers ret = unlink(name); 825106c671SBrian Somers LogPrintf(LogID0, "%d = unlink(\"%s\")\n", ret, name); 835106c671SBrian Somers ID0setuser(); 845106c671SBrian Somers return ret; 855106c671SBrian Somers } 865106c671SBrian Somers 875106c671SBrian Somers int 885106c671SBrian Somers ID0socket(int domain, int type, int protocol) 895106c671SBrian Somers { 905106c671SBrian Somers int ret; 915106c671SBrian Somers 925106c671SBrian Somers ID0set0(); 935106c671SBrian Somers ret = socket(domain, type, protocol); 945106c671SBrian Somers LogPrintf(LogID0, "%d = socket(%d, %d, %d)\n", ret, domain, type, protocol); 955106c671SBrian Somers ID0setuser(); 965106c671SBrian Somers return ret; 975106c671SBrian Somers } 985106c671SBrian Somers 995106c671SBrian Somers FILE * 1005106c671SBrian Somers ID0fopen(const char *path, const char *mode) 1015106c671SBrian Somers { 1025106c671SBrian Somers FILE *ret; 1035106c671SBrian Somers 1045106c671SBrian Somers ID0set0(); 1055106c671SBrian Somers ret = fopen(path, mode); 1065106c671SBrian Somers LogPrintf(LogID0, "%p = fopen(\"%s\", \"%s\")\n", ret, path, mode); 1075106c671SBrian Somers ID0setuser(); 1085106c671SBrian Somers return ret; 1095106c671SBrian Somers } 1105106c671SBrian Somers 1115106c671SBrian Somers int 1125106c671SBrian Somers ID0open(const char *path, int flags) 1135106c671SBrian Somers { 1145106c671SBrian Somers int ret; 1155106c671SBrian Somers 1165106c671SBrian Somers ID0set0(); 1175106c671SBrian Somers ret = open(path, flags); 1185106c671SBrian Somers LogPrintf(LogID0, "%d = open(\"%s\", %d)\n", ret, path, flags); 1195106c671SBrian Somers ID0setuser(); 1205106c671SBrian Somers return ret; 1215106c671SBrian Somers } 1225106c671SBrian Somers 1235106c671SBrian Somers int 1245106c671SBrian Somers ID0uu_lock(const char *ttyname) 1255106c671SBrian Somers { 1265106c671SBrian Somers int ret; 1275106c671SBrian Somers 1285106c671SBrian Somers ID0set0(); 1295106c671SBrian Somers ret = uu_lock(ttyname); 1305106c671SBrian Somers LogPrintf(LogID0, "%d = uu_lock(\"%s\")\n", ret, ttyname); 1315106c671SBrian Somers ID0setuser(); 1325106c671SBrian Somers return ret; 1335106c671SBrian Somers } 1345106c671SBrian Somers 1355106c671SBrian Somers int 1365106c671SBrian Somers ID0uu_unlock(const char *ttyname) 1375106c671SBrian Somers { 1385106c671SBrian Somers int ret; 1395106c671SBrian Somers 1405106c671SBrian Somers ID0set0(); 1415106c671SBrian Somers ret = uu_unlock(ttyname); 1425106c671SBrian Somers LogPrintf(LogID0, "%d = uu_unlock(\"%s\")\n", ret, ttyname); 1435106c671SBrian Somers ID0setuser(); 1445106c671SBrian Somers return ret; 1455106c671SBrian Somers } 146