xref: /freebsd/usr.sbin/ppp/id.c (revision b6e82f33ef84ba5eedb0db2e24525e9d0f661b91)
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