Change internal gid datatype from __gid16_t to __gid32_t

throughout.
	* cygwin.din: Export new symbols chown32, fchown32, getegid32,
	getgid32, getgrgid32, getgrnam32, getgroups32, initgroups32, lchown32,
	setgid32, setegid32, getgrent32.
	* grp.cc (grp32togrp16): New static function.
	(getgrgid32): New function.
	(getgrnam32): Ditto.
	(getgrent32): Ditto.
	(getgroups32): Change name of internal function from getgroups.
	(getgroups32): New function.
	(initgroups32): Ditto.
	* syscalls.cc (chown32): Ditto.
	(lchown32): Ditto.
	(fchown32): Ditto.
	(setegid32): Ditto.
	(setgid32): Ditto.
	* uinfo.cc (getgid32): Ditto.
	(getegid32): Ditto.
	* include/cygwin/grp.h: Remove declaration of getgrgid() and getgrnam().
	Declare getgrgid32() and getgrnam32() instead.  Declare getgid32().
This commit is contained in:
Corinna Vinschen
2002-05-28 14:10:55 +00:00
parent f542ad4e14
commit 5719640581
15 changed files with 235 additions and 74 deletions

View File

@@ -750,11 +750,11 @@ done:
* systems, it is only a stub that always returns zero.
*/
static int
chown_worker (const char *name, unsigned fmode, __uid16_t uid, __gid16_t gid)
chown_worker (const char *name, unsigned fmode, __uid16_t uid, __gid32_t gid)
{
int res;
__uid16_t old_uid;
__gid16_t old_gid;
__gid32_t old_gid;
if (check_null_empty_str_errno (name))
return -1;
@@ -815,21 +815,35 @@ done:
}
extern "C" int
chown (const char * name, __uid16_t uid, __gid16_t gid)
chown32 (const char * name, __uid16_t uid, __gid32_t gid)
{
sigframe thisframe (mainthread);
return chown_worker (name, PC_SYM_FOLLOW, uid, gid);
}
extern "C" int
lchown (const char * name, __uid16_t uid, __gid16_t gid)
chown (const char * name, __uid16_t uid, __gid16_t gid)
{
sigframe thisframe (mainthread);
return chown_worker (name, PC_SYM_FOLLOW, uid, (__gid32_t) gid);
}
extern "C" int
lchown32 (const char * name, __uid16_t uid, __gid32_t gid)
{
sigframe thisframe (mainthread);
return chown_worker (name, PC_SYM_NOFOLLOW, uid, gid);
}
extern "C" int
fchown (int fd, __uid16_t uid, __gid16_t gid)
lchown (const char * name, __uid16_t uid, __gid16_t gid)
{
sigframe thisframe (mainthread);
return chown_worker (name, PC_SYM_NOFOLLOW, uid, (__gid32_t) gid);
}
extern "C" int
fchown32 (int fd, __uid16_t uid, __gid32_t gid)
{
sigframe thisframe (mainthread);
cygheap_fdget cfd (fd);
@@ -853,6 +867,12 @@ fchown (int fd, __uid16_t uid, __gid16_t gid)
return chown_worker (path, PC_SYM_FOLLOW, uid, gid);
}
extern "C" int
fchown (int fd, __uid16_t uid, __gid16_t gid)
{
return fchown32 (fd, uid, (__gid32_t) gid);
}
/* umask: POSIX 5.3.3.1 */
extern "C" mode_t
umask (mode_t mask)
@@ -895,7 +915,7 @@ chmod (const char *path, mode_t mode)
SetFileAttributes (win32_path, (DWORD) win32_path & ~FILE_ATTRIBUTE_READONLY);
__uid16_t uid;
__gid16_t gid;
__gid32_t gid;
if (win32_path.isdir ())
mode |= S_IFDIR;
@@ -1912,16 +1932,6 @@ mkfifo (const char *_path, mode_t mode)
return -1;
}
/* setgid: POSIX 4.2.2.1 */
extern "C" int
setgid (__gid16_t gid)
{
int ret = setegid (gid);
if (!ret)
cygheap->user.real_gid = myself->gid;
return ret;
}
/* setuid: POSIX 4.2.2.1 */
extern "C" int
setuid (__uid16_t uid)
@@ -1966,7 +1976,7 @@ seteuid (__uid16_t uid)
pw_new = getpwuid (uid);
if (!usersid.getfrompw (pw_new) ||
(!pgrpsid.getfromgr (getgrgid (myself->gid))))
(!pgrpsid.getfromgr (getgrgid32 (myself->gid))))
{
set_errno (EINVAL);
return -1;
@@ -2137,7 +2147,7 @@ seteuid (__uid16_t uid)
/* setegid: from System V. */
extern "C" int
setegid (__gid16_t gid)
setegid32 (__gid32_t gid)
{
if ((!wincap.has_security ()) ||
(gid == ILLEGAL_GID))
@@ -2147,7 +2157,7 @@ setegid (__gid16_t gid)
cygsid gsid;
HANDLE ptok;
if (!(gsid.getfromgr (getgrgid (gid))))
if (!(gsid.getfromgr (getgrgid32 (gid))))
{
set_errno (EINVAL);
return -1;
@@ -2184,6 +2194,31 @@ setegid (__gid16_t gid)
return 0;
}
extern "C" int
setegid (__gid16_t gid)
{
return setegid32 ((__gid32_t) gid);
}
/* setgid: POSIX 4.2.2.1 */
extern "C" int
setgid32 (__gid32_t gid)
{
int ret = setegid32 (gid);
if (!ret)
cygheap->user.real_gid = myself->gid;
return ret;
}
extern "C" int
setgid (__gid16_t gid)
{
int ret = setegid32 ((__gid32_t) gid);
if (!ret)
cygheap->user.real_gid = myself->gid;
return ret;
}
/* chroot: privileged Unix system call. */
/* FIXME: Not privileged here. How should this be done? */
extern "C" int