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