]> Zhao Yanbai Git Server - minix.git/commitdiff
seteuid() and setegid()
authorBen Gras <ben@minix3.org>
Tue, 13 Dec 2005 09:48:29 +0000 (09:48 +0000)
committerBen Gras <ben@minix3.org>
Tue, 13 Dec 2005 09:48:29 +0000 (09:48 +0000)
commands/simple/df.c
include/minix/callnr.h
include/unistd.h
lib/posix/_setgid.c
lib/posix/_setuid.c
lib/syscall/setgid.s
lib/syscall/setuid.s
servers/fs/table.c
servers/pm/getset.c
servers/pm/table.c

index ef290c2cc7d6d156d185f368ecd2594ef0a6fbff..f1d69e0318d4594eb6195c6726deb8f85b61e382 100755 (executable)
@@ -40,9 +40,6 @@
 #define v12_super_block                super_block
 #define SUPER_V1               SUPER_MAGIC
 
-/* Only setuid() and setgid(). */
-#define seteuid(uid)   setuid(uid)
-#define setegid(gid)   setgid(gid)
 #endif
 
 #define ISDISK(mode)   S_ISBLK(mode)   /* || S_ISCHR for raw device??? */
index cb9891b690a82e288d7723a8dc99a3d93111232d..29dbff2d27eded8a3c3e20f3a9b130c439aba32a 100755 (executable)
@@ -1,4 +1,4 @@
-#define NCALLS           91    /* number of system calls allowed */
+#define NCALLS           93    /* number of system calls allowed */
 
 #define EXIT              1 
 #define FORK              2 
@@ -82,3 +82,5 @@
 #define GETPRIORITY       88   /* to PM */
 #define SETPRIORITY       89   /* to PM */
 #define GETTIMEOFDAY      90   /* to PM */
+#define SETEUID                  91    /* to PM (and PM -> FS) */
+#define SETEGID                  92    /* to PM (and PM -> FS) */
index c45f945003105e2460780ebe242b04dfb29ff451..2b8d45150218b8824b598b4c25422a94beb509fb 100755 (executable)
@@ -124,9 +124,11 @@ _PROTOTYPE( int pipe, (int _fildes[2])                                     );
 _PROTOTYPE( ssize_t read, (int _fd, void *_buf, size_t _n)             );
 _PROTOTYPE( int rmdir, (const char *_path)                             );
 _PROTOTYPE( int setgid, (_mnx_Gid_t _gid)                              );
+_PROTOTYPE( int setegid, (_mnx_Gid_t _gid)                             );
 _PROTOTYPE( int setpgid, (pid_t _pid, pid_t _pgid)                     );
 _PROTOTYPE( pid_t setsid, (void)                                       );
 _PROTOTYPE( int setuid, (_mnx_Uid_t _uid)                              );
+_PROTOTYPE( int seteuid, (_mnx_Uid_t _uid)                             );
 _PROTOTYPE( unsigned int sleep, (unsigned int _seconds)                        );
 _PROTOTYPE( long sysconf, (int _name)                                  );
 _PROTOTYPE( pid_t tcgetpgrp, (int _fd)                                 );
index 8c12f2f606dd9a03d2132a9333913f734b78e285..66270ad15134fab60618c8c4d683f2638ffb03d4 100755 (executable)
@@ -1,5 +1,6 @@
 #include <lib.h>
 #define setgid _setgid
+#define setegid        _setegid
 #include <unistd.h>
 
 PUBLIC int setgid(grp)
@@ -10,3 +11,12 @@ gid_t grp;
   m.m1_i1 = (int) grp;
   return(_syscall(MM, SETGID, &m));
 }
+
+PUBLIC int setegid(grp)
+gid_t grp;
+{
+  message m;
+
+  m.m1_i1 = (int) grp;
+  return(_syscall(MM, SETEGID, &m));
+}
index 3dd3c70fb7aa82eb04b4303f61e258b0a30c5cfb..5eb9b9be955dcd3bb4068b84ffcdd186888478fb 100755 (executable)
@@ -1,5 +1,6 @@
 #include <lib.h>
 #define setuid _setuid
+#define seteuid        _seteuid
 #include <unistd.h>
 
 PUBLIC int setuid(usr)
@@ -10,3 +11,12 @@ _mnx_Uid_t usr;
   m.m1_i1 = usr;
   return(_syscall(MM, SETUID, &m));
 }
+
+PUBLIC int seteuid(usr)
+_mnx_Uid_t usr;
+{
+  message m;
+
+  m.m1_i1 = usr;
+  return(_syscall(MM, SETEUID, &m));
+}
index 12aa77755048f8bede84535bf6580f516baf786b..03c76ec8f5fc35e13a9e4306e370ed12e644a179 100755 (executable)
@@ -1,7 +1,11 @@
 .sect .text
 .extern        __setgid
 .define        _setgid
+.define        _setegid
 .align 2
 
 _setgid:
        jmp     __setgid
+
+_setegid:
+       jmp     __setegid
index 85e87c36a8afe4f870750dce98670e010623b36e..fb5549f9084a8a50c1386c0b7216578b949a4d48 100755 (executable)
@@ -1,7 +1,11 @@
 .sect .text
 .extern        __setuid
 .define        _setuid
+.define        _seteuid
 .align 2
 
 _setuid:
        jmp     __setuid
+
+_seteuid:
+       jmp     __seteuid
index 41dda3c7aecb12244a56fa751bd1e789ada4a204..538128bf223c3baaef8d19221a22572a7d7c2af6 100644 (file)
@@ -108,6 +108,8 @@ PUBLIC _PROTOTYPE (int (*call_vec[]), (void) ) = {
        no_sys,         /* 88 = getpriority */
        no_sys,         /* 89 = setpriority */
        no_sys,         /* 90 = gettimeofday */
+       no_sys,         /* 91 = seteuid */
+       no_sys,         /* 92 = setegid */
 };
 /* This should not fail with "array size is negative": */
 extern int dummy[sizeof(call_vec) == NCALLS * sizeof(call_vec[0]) ? 1 : -1];
index 20810574bf51be40302bf0a92f966c8638e5c593..d59bdb78d12879fb2805a63133de07b6646b46ea 100644 (file)
@@ -42,21 +42,23 @@ PUBLIC int do_getset()
                        rmp->mp_reply.reply_res3 = mproc[m_in.procnr].mp_pid;
                break;
 
+       case SETEUID:
        case SETUID:
                if (rmp->mp_realuid != (uid_t) m_in.usr_id && 
                                rmp->mp_effuid != SUPER_USER)
                        return(EPERM);
-               rmp->mp_realuid = (uid_t) m_in.usr_id;
+               if(call_nr == SETUID) rmp->mp_realuid = (uid_t) m_in.usr_id;
                rmp->mp_effuid = (uid_t) m_in.usr_id;
                tell_fs(SETUID, who, rmp->mp_realuid, rmp->mp_effuid);
                r = OK;
                break;
 
+       case SETEGID:
        case SETGID:
                if (rmp->mp_realgid != (gid_t) m_in.grp_id && 
                                rmp->mp_effuid != SUPER_USER)
                        return(EPERM);
-               rmp->mp_realgid = (gid_t) m_in.grp_id;
+               if(call_nr == SETGID) rmp->mp_realgid = (gid_t) m_in.grp_id;
                rmp->mp_effgid = (gid_t) m_in.grp_id;
                tell_fs(SETGID, who, rmp->mp_realgid, rmp->mp_effgid);
                r = OK;
index 6b0aeafdc618b7d8d265505e135a5bd73b3de66b..53e9630ebc5e416efc2768ec79758e605a8aa20d 100644 (file)
@@ -107,6 +107,8 @@ _PROTOTYPE (int (*call_vec[NCALLS]), (void) ) = {
        do_getsetpriority,      /* 88 = getpriority */
        do_getsetpriority,      /* 89 = setpriority */
        do_time,        /* 90 = gettimeofday */
+       do_getset,      /* 91 = seteuid */
+       do_getset       /* 92 = setegid */
 };
 /* This should not fail with "array size is negative": */
 extern int dummy[sizeof(call_vec) == NCALLS * sizeof(call_vec[0]) ? 1 : -1];