* cygwin.din: Export setreuid32, setreuid, setregid32, setregid.
* syscalls.cc (setreuid32): New function. (setreuid): Ditto. (setregid32): Ditto. (setregid): Ditto. * include/cygwin/version.h: Bump API minor number.
This commit is contained in:
parent
ac4133746e
commit
7d33eefa7b
|
@ -1,3 +1,13 @@
|
||||||
|
2003-01-24 Pierre Humblet <pierre.humblet@ieee.org>
|
||||||
|
Jason Tishler <jason@tishler.net>
|
||||||
|
|
||||||
|
* cygwin.din: Export setreuid32, setreuid, setregid32, setregid.
|
||||||
|
* syscalls.cc (setreuid32): New function.
|
||||||
|
(setreuid): Ditto.
|
||||||
|
(setregid32): Ditto.
|
||||||
|
(setregid): Ditto.
|
||||||
|
* include/cygwin/version.h: Bump API minor number.
|
||||||
|
|
||||||
2003-01-23 Christopher Faylor <cgf@redhat.com>
|
2003-01-23 Christopher Faylor <cgf@redhat.com>
|
||||||
|
|
||||||
* pwdrp.h (pwdgrp::refresh): Lock entire test prior to reading.
|
* pwdrp.h (pwdgrp::refresh): Lock entire test prior to reading.
|
||||||
|
|
|
@ -715,6 +715,12 @@ setlocale
|
||||||
_setlocale = setlocale
|
_setlocale = setlocale
|
||||||
setpgid
|
setpgid
|
||||||
_setpgid = setpgid
|
_setpgid = setpgid
|
||||||
|
setregid
|
||||||
|
_setregid = setregid
|
||||||
|
setregid32
|
||||||
|
setreuid
|
||||||
|
_setreuid = setreuid
|
||||||
|
setreuid32
|
||||||
setrlimit
|
setrlimit
|
||||||
_setrlimit = setrlimit
|
_setrlimit = setrlimit
|
||||||
setsid
|
setsid
|
||||||
|
|
|
@ -170,12 +170,13 @@ details. */
|
||||||
70: Export asprintf, _asprintf_r, vasprintf, _vasprintf_r
|
70: Export asprintf, _asprintf_r, vasprintf, _vasprintf_r
|
||||||
71: Export strerror_r
|
71: Export strerror_r
|
||||||
72: Export nanosleep
|
72: Export nanosleep
|
||||||
|
73: Export setreuid32, setreuid, setregid32, setregid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Note that we forgot to bump the api for ualarm, strtoll, strtoull */
|
/* Note that we forgot to bump the api for ualarm, strtoll, strtoull */
|
||||||
|
|
||||||
#define CYGWIN_VERSION_API_MAJOR 0
|
#define CYGWIN_VERSION_API_MAJOR 0
|
||||||
#define CYGWIN_VERSION_API_MINOR 72
|
#define CYGWIN_VERSION_API_MINOR 73
|
||||||
|
|
||||||
/* There is also a compatibity version number associated with the
|
/* There is also a compatibity version number associated with the
|
||||||
shared memory regions. It is incremented when incompatible
|
shared memory regions. It is incremented when incompatible
|
||||||
|
|
|
@ -2131,6 +2131,31 @@ setuid (__uid16_t uid)
|
||||||
return setuid32 (uid16touid32 (uid));
|
return setuid32 (uid16touid32 (uid));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" int
|
||||||
|
setreuid32 (__uid32_t ruid, __uid32_t euid)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
bool tried = false;
|
||||||
|
__uid32_t old_euid = myself->uid;
|
||||||
|
|
||||||
|
if (ruid != ILLEGAL_UID && cygheap->user.real_uid != ruid && euid != ruid)
|
||||||
|
tried = !(ret = seteuid32 (ruid));
|
||||||
|
if (!ret && euid != ILLEGAL_UID)
|
||||||
|
ret = seteuid32 (euid);
|
||||||
|
if (tried && (ret || euid == ILLEGAL_UID) && seteuid32 (old_euid))
|
||||||
|
system_printf ("Cannot restore original euid %u", old_euid);
|
||||||
|
if (!ret && ruid != ILLEGAL_UID)
|
||||||
|
cygheap->user.real_uid = ruid;
|
||||||
|
debug_printf ("real: %u, effective: %u", cygheap->user.real_uid, myself->uid);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" int
|
||||||
|
setreuid (__uid16_t ruid, __uid16_t euid)
|
||||||
|
{
|
||||||
|
return setreuid32 (uid16touid32 (ruid), uid16touid32 (euid));
|
||||||
|
}
|
||||||
|
|
||||||
/* setegid: from System V. */
|
/* setegid: from System V. */
|
||||||
extern "C" int
|
extern "C" int
|
||||||
setegid32 (__gid32_t gid)
|
setegid32 (__gid32_t gid)
|
||||||
|
@ -2209,6 +2234,31 @@ setgid (__gid16_t gid)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" int
|
||||||
|
setregid32 (__gid32_t rgid, __gid32_t egid)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
bool tried = false;
|
||||||
|
__gid32_t old_egid = myself->gid;
|
||||||
|
|
||||||
|
if (rgid != ILLEGAL_GID && cygheap->user.real_gid != rgid && egid != rgid)
|
||||||
|
tried = !(ret = setegid32 (rgid));
|
||||||
|
if (!ret && egid != ILLEGAL_GID)
|
||||||
|
ret = setegid32 (egid);
|
||||||
|
if (tried && (ret || egid == ILLEGAL_GID) && setegid32 (old_egid))
|
||||||
|
system_printf ("Cannot restore original egid %u", old_egid);
|
||||||
|
if (!ret && rgid != ILLEGAL_GID)
|
||||||
|
cygheap->user.real_gid = rgid;
|
||||||
|
debug_printf ("real: %u, effective: %u", cygheap->user.real_gid, myself->gid);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" int
|
||||||
|
setregid (__gid16_t rgid, __gid16_t egid)
|
||||||
|
{
|
||||||
|
return setregid32 (gid16togid32 (rgid), gid16togid32 (egid));
|
||||||
|
}
|
||||||
|
|
||||||
/* chroot: privileged Unix system call. */
|
/* chroot: privileged Unix system call. */
|
||||||
/* FIXME: Not privileged here. How should this be done? */
|
/* FIXME: Not privileged here. How should this be done? */
|
||||||
extern "C" int
|
extern "C" int
|
||||||
|
|
Loading…
Reference in New Issue