15106c671SBrian Somers /* 2b6e82f33SBrian Somers * $Id: id.c,v 1.2 1997/11/13 17:31:52 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 15b6e82f33SBrian Somers #include "command.h" 165106c671SBrian Somers #include "mbuf.h" 175106c671SBrian Somers #include "log.h" 185106c671SBrian Somers #include "main.h" 195106c671SBrian Somers #ifdef __OpenBSD__ 205106c671SBrian Somers #include <util.h> 215106c671SBrian Somers #else 225106c671SBrian Somers #include <libutil.h> 235106c671SBrian Somers #endif 245106c671SBrian Somers #include "id.h" 255106c671SBrian Somers 265106c671SBrian Somers static int uid; 275106c671SBrian Somers static int gid; 285106c671SBrian Somers static int euid; 295106c671SBrian Somers static int egid; 305106c671SBrian Somers 315106c671SBrian Somers void 325106c671SBrian Somers ID0init() 335106c671SBrian Somers { 345106c671SBrian Somers uid = getuid(); 355106c671SBrian Somers gid = getgid(); 365106c671SBrian Somers euid = geteuid(); 375106c671SBrian Somers egid = getegid(); 385106c671SBrian Somers } 395106c671SBrian Somers 405106c671SBrian Somers static void 41b6e82f33SBrian Somers ID0setuser(void) 425106c671SBrian Somers { 439fecb4e6SBrian Somers if (seteuid(uid) == -1) { 449fecb4e6SBrian Somers LogPrintf(LogERROR, "ID0setuser: Unable to seteuid!\n"); 455106c671SBrian Somers Cleanup(EX_NOPERM); 465106c671SBrian Somers } 475106c671SBrian Somers } 485106c671SBrian Somers 495106c671SBrian Somers uid_t 505106c671SBrian Somers ID0realuid() 515106c671SBrian Somers { 525106c671SBrian Somers return uid; 535106c671SBrian Somers } 545106c671SBrian Somers 555106c671SBrian Somers static void 56b6e82f33SBrian Somers ID0set0(void) 575106c671SBrian Somers { 589fecb4e6SBrian Somers if (seteuid(euid) == -1) { 599fecb4e6SBrian Somers LogPrintf(LogERROR, "ID0set0: Unable to seteuid!\n"); 605106c671SBrian Somers Cleanup(EX_NOPERM); 615106c671SBrian Somers } 625106c671SBrian Somers } 635106c671SBrian Somers 645106c671SBrian Somers int 655106c671SBrian Somers ID0ioctl(int fd, unsigned long req, void *arg) 665106c671SBrian Somers { 675106c671SBrian Somers int ret; 685106c671SBrian Somers 695106c671SBrian Somers ID0set0(); 705106c671SBrian Somers ret = ioctl(fd, req, arg); 715106c671SBrian Somers LogPrintf(LogID0, "%d = ioctl(%d, %d, %p)\n", ret, fd, req, arg); 725106c671SBrian Somers ID0setuser(); 735106c671SBrian Somers return ret; 745106c671SBrian Somers } 755106c671SBrian Somers 765106c671SBrian Somers int 775106c671SBrian Somers ID0unlink(const char *name) 785106c671SBrian Somers { 795106c671SBrian Somers int ret; 805106c671SBrian Somers 815106c671SBrian Somers ID0set0(); 825106c671SBrian Somers ret = unlink(name); 835106c671SBrian Somers LogPrintf(LogID0, "%d = unlink(\"%s\")\n", ret, name); 845106c671SBrian Somers ID0setuser(); 855106c671SBrian Somers return ret; 865106c671SBrian Somers } 875106c671SBrian Somers 885106c671SBrian Somers int 895106c671SBrian Somers ID0socket(int domain, int type, int protocol) 905106c671SBrian Somers { 915106c671SBrian Somers int ret; 925106c671SBrian Somers 935106c671SBrian Somers ID0set0(); 945106c671SBrian Somers ret = socket(domain, type, protocol); 955106c671SBrian Somers LogPrintf(LogID0, "%d = socket(%d, %d, %d)\n", ret, domain, type, protocol); 965106c671SBrian Somers ID0setuser(); 975106c671SBrian Somers return ret; 985106c671SBrian Somers } 995106c671SBrian Somers 1005106c671SBrian Somers FILE * 1015106c671SBrian Somers ID0fopen(const char *path, const char *mode) 1025106c671SBrian Somers { 1035106c671SBrian Somers FILE *ret; 1045106c671SBrian Somers 1055106c671SBrian Somers ID0set0(); 1065106c671SBrian Somers ret = fopen(path, mode); 1075106c671SBrian Somers LogPrintf(LogID0, "%p = fopen(\"%s\", \"%s\")\n", ret, path, mode); 1085106c671SBrian Somers ID0setuser(); 1095106c671SBrian Somers return ret; 1105106c671SBrian Somers } 1115106c671SBrian Somers 1125106c671SBrian Somers int 1135106c671SBrian Somers ID0open(const char *path, int flags) 1145106c671SBrian Somers { 1155106c671SBrian Somers int ret; 1165106c671SBrian Somers 1175106c671SBrian Somers ID0set0(); 1185106c671SBrian Somers ret = open(path, flags); 1195106c671SBrian Somers LogPrintf(LogID0, "%d = open(\"%s\", %d)\n", ret, path, flags); 1205106c671SBrian Somers ID0setuser(); 1215106c671SBrian Somers return ret; 1225106c671SBrian Somers } 1235106c671SBrian Somers 1245106c671SBrian Somers int 125b6e82f33SBrian Somers ID0uu_lock(const char *basettyname) 1265106c671SBrian Somers { 1275106c671SBrian Somers int ret; 1285106c671SBrian Somers 1295106c671SBrian Somers ID0set0(); 130b6e82f33SBrian Somers ret = uu_lock(basettyname); 131b6e82f33SBrian Somers LogPrintf(LogID0, "%d = uu_lock(\"%s\")\n", ret, basettyname); 1325106c671SBrian Somers ID0setuser(); 1335106c671SBrian Somers return ret; 1345106c671SBrian Somers } 1355106c671SBrian Somers 1365106c671SBrian Somers int 137b6e82f33SBrian Somers ID0uu_unlock(const char *basettyname) 1385106c671SBrian Somers { 1395106c671SBrian Somers int ret; 1405106c671SBrian Somers 1415106c671SBrian Somers ID0set0(); 142b6e82f33SBrian Somers ret = uu_unlock(basettyname); 143b6e82f33SBrian Somers LogPrintf(LogID0, "%d = uu_unlock(\"%s\")\n", ret, basettyname); 1445106c671SBrian Somers ID0setuser(); 1455106c671SBrian Somers return ret; 1465106c671SBrian Somers } 147