id.c revision 31061
131061Sbrian/*
231061Sbrian * $Id: defs.c,v 1.1 1997/10/26 01:02:30 brian Exp $
331061Sbrian */
431061Sbrian
531061Sbrian#include <sys/types.h>
631061Sbrian#include <sys/socket.h>
731061Sbrian
831061Sbrian#include <sys/ioctl.h>
931061Sbrian#include <fcntl.h>
1031061Sbrian#include <stdio.h>
1131061Sbrian#include <stdlib.h>
1231061Sbrian#include <sysexits.h>
1331061Sbrian#include <unistd.h>
1431061Sbrian
1531061Sbrian#include "mbuf.h"
1631061Sbrian#include "log.h"
1731061Sbrian#include "main.h"
1831061Sbrian#ifdef __OpenBSD__
1931061Sbrian#include <util.h>
2031061Sbrian#else
2131061Sbrian#include <libutil.h>
2231061Sbrian#endif
2331061Sbrian#include "id.h"
2431061Sbrian
2531061Sbrianstatic int uid;
2631061Sbrianstatic int gid;
2731061Sbrianstatic int euid;
2831061Sbrianstatic int egid;
2931061Sbrian
3031061Sbrianvoid
3131061SbrianID0init()
3231061Sbrian{
3331061Sbrian  uid = getuid();
3431061Sbrian  gid = getgid();
3531061Sbrian  euid = geteuid();
3631061Sbrian  egid = getegid();
3731061Sbrian}
3831061Sbrian
3931061Sbrianstatic void
4031061SbrianID0setuser()
4131061Sbrian{
4231061Sbrian  if (setreuid(euid, uid) == -1) {
4331061Sbrian    LogPrintf(LogERROR, "ID0setuser: Unable to setreuid!\n");
4431061Sbrian    Cleanup(EX_NOPERM);
4531061Sbrian  }
4631061Sbrian}
4731061Sbrian
4831061Sbrianuid_t
4931061SbrianID0realuid()
5031061Sbrian{
5131061Sbrian  return uid;
5231061Sbrian}
5331061Sbrian
5431061Sbrianstatic void
5531061SbrianID0set0()
5631061Sbrian{
5731061Sbrian  if (setreuid(uid, euid) == -1) {
5831061Sbrian    LogPrintf(LogERROR, "ID0set0: Unable to setreuid!\n");
5931061Sbrian    Cleanup(EX_NOPERM);
6031061Sbrian  }
6131061Sbrian}
6231061Sbrian
6331061Sbrianint
6431061SbrianID0ioctl(int fd, unsigned long req, void *arg)
6531061Sbrian{
6631061Sbrian  int ret;
6731061Sbrian
6831061Sbrian  ID0set0();
6931061Sbrian  ret = ioctl(fd, req, arg);
7031061Sbrian  LogPrintf(LogID0, "%d = ioctl(%d, %d, %p)\n", ret, fd, req, arg);
7131061Sbrian  ID0setuser();
7231061Sbrian  return ret;
7331061Sbrian}
7431061Sbrian
7531061Sbrianint
7631061SbrianID0unlink(const char *name)
7731061Sbrian{
7831061Sbrian  int ret;
7931061Sbrian
8031061Sbrian  ID0set0();
8131061Sbrian  ret = unlink(name);
8231061Sbrian  LogPrintf(LogID0, "%d = unlink(\"%s\")\n", ret, name);
8331061Sbrian  ID0setuser();
8431061Sbrian  return ret;
8531061Sbrian}
8631061Sbrian
8731061Sbrianint
8831061SbrianID0socket(int domain, int type, int protocol)
8931061Sbrian{
9031061Sbrian  int ret;
9131061Sbrian
9231061Sbrian  ID0set0();
9331061Sbrian  ret = socket(domain, type, protocol);
9431061Sbrian  LogPrintf(LogID0, "%d = socket(%d, %d, %d)\n", ret, domain, type, protocol);
9531061Sbrian  ID0setuser();
9631061Sbrian  return ret;
9731061Sbrian}
9831061Sbrian
9931061SbrianFILE *
10031061SbrianID0fopen(const char *path, const char *mode)
10131061Sbrian{
10231061Sbrian  FILE *ret;
10331061Sbrian
10431061Sbrian  ID0set0();
10531061Sbrian  ret = fopen(path, mode);
10631061Sbrian  LogPrintf(LogID0, "%p = fopen(\"%s\", \"%s\")\n", ret, path, mode);
10731061Sbrian  ID0setuser();
10831061Sbrian  return ret;
10931061Sbrian}
11031061Sbrian
11131061Sbrianint
11231061SbrianID0open(const char *path, int flags)
11331061Sbrian{
11431061Sbrian  int ret;
11531061Sbrian
11631061Sbrian  ID0set0();
11731061Sbrian  ret = open(path, flags);
11831061Sbrian  LogPrintf(LogID0, "%d = open(\"%s\", %d)\n", ret, path, flags);
11931061Sbrian  ID0setuser();
12031061Sbrian  return ret;
12131061Sbrian}
12231061Sbrian
12331061Sbrianint
12431061SbrianID0uu_lock(const char *ttyname)
12531061Sbrian{
12631061Sbrian  int ret;
12731061Sbrian
12831061Sbrian  ID0set0();
12931061Sbrian  ret = uu_lock(ttyname);
13031061Sbrian  LogPrintf(LogID0, "%d = uu_lock(\"%s\")\n", ret, ttyname);
13131061Sbrian  ID0setuser();
13231061Sbrian  return ret;
13331061Sbrian}
13431061Sbrian
13531061Sbrianint
13631061SbrianID0uu_unlock(const char *ttyname)
13731061Sbrian{
13831061Sbrian  int ret;
13931061Sbrian
14031061Sbrian  ID0set0();
14131061Sbrian  ret = uu_unlock(ttyname);
14231061Sbrian  LogPrintf(LogID0, "%d = uu_unlock(\"%s\")\n", ret, ttyname);
14331061Sbrian  ID0setuser();
14431061Sbrian  return ret;
14531061Sbrian}
146