* syscalls.cc (setuid): Allow switching user context after
successful call to ImpersonateLogedOnUser (NT only). (setgid): Ditto. (seteuid): Call setuid. (setegid): Call setgid.
This commit is contained in:
		| @@ -1,3 +1,11 @@ | |||||||
|  | Wed Apr 20  0:19:00 2000  Corinna Vinschen <corinna@vinschen.de> | ||||||
|  |  | ||||||
|  |         * syscalls.cc (setuid): Allow switching user context after | ||||||
|  |         successful call to ImpersonateLogedOnUser (NT only). | ||||||
|  |         (setgid): Ditto. | ||||||
|  |         (seteuid): Call setuid. | ||||||
|  |         (setegid): Call setgid. | ||||||
|  |  | ||||||
| Wed Apr 19 22:00:00 2000  Corinna Vinschen <corinna@vinschen.de> | Wed Apr 19 22:00:00 2000  Corinna Vinschen <corinna@vinschen.de> | ||||||
|  |  | ||||||
|         * uinfo.cc (internal_getlogin): Use NetGetDCName() instead |         * uinfo.cc (internal_getlogin): Use NetGetDCName() instead | ||||||
|   | |||||||
| @@ -1689,41 +1689,79 @@ mknod () | |||||||
| } | } | ||||||
|  |  | ||||||
| /* setgid: POSIX 4.2.2.1 */ | /* setgid: POSIX 4.2.2.1 */ | ||||||
| /* FIXME: unimplemented! */ |  | ||||||
| extern "C" | extern "C" | ||||||
| int | int | ||||||
| setgid (gid_t) | setgid (gid_t gid) | ||||||
| { | { | ||||||
|   set_errno (ENOSYS); |   if (os_being_run == winNT) | ||||||
|  |     { | ||||||
|  |       if (gid != (gid_t) -1) | ||||||
|  |         { | ||||||
|  |           if (!getgrgid (gid)) | ||||||
|  |             { | ||||||
|  |               set_errno (EINVAL); | ||||||
|  |               return -1; | ||||||
|  |             } | ||||||
|  |           myself->gid = gid; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |   else | ||||||
|  |     set_errno (ENOSYS); | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | extern char *internal_getlogin (struct pinfo *pi); | ||||||
|  |  | ||||||
| /* setuid: POSIX 4.2.2.1 */ | /* setuid: POSIX 4.2.2.1 */ | ||||||
| /* FIXME: unimplemented! */ |  | ||||||
| extern "C" | extern "C" | ||||||
| int | int | ||||||
| setuid (uid_t) | setuid (uid_t uid) | ||||||
| { | { | ||||||
|   set_errno (ENOSYS); |   if (os_being_run == winNT) | ||||||
|  |     { | ||||||
|  |       if (uid != (uid_t) -1) | ||||||
|  |         { | ||||||
|  |           struct passwd *pw_new = getpwuid (uid); | ||||||
|  |           if (!pw_new) | ||||||
|  |             { | ||||||
|  |               set_errno (EINVAL); | ||||||
|  |               return -1; | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |           struct pinfo pi; | ||||||
|  |           pi.psid = (PSID) pi.sidbuf; | ||||||
|  |           struct passwd *pw_cur = getpwnam (internal_getlogin (&pi)); | ||||||
|  |           if (pw_cur != pw_new) | ||||||
|  |             { | ||||||
|  |               set_errno (EPERM); | ||||||
|  |               return -1; | ||||||
|  |             } | ||||||
|  |           myself->uid = uid; | ||||||
|  |           strcpy (myself->username, pi.username); | ||||||
|  |           CopySid (40, myself->psid, pi.psid); | ||||||
|  |           strcpy (myself->logsrv, pi.logsrv); | ||||||
|  |           strcpy (myself->domain, pi.domain); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |   else | ||||||
|  |     set_errno (ENOSYS); | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| /* seteuid: standards? */ | /* seteuid: standards? */ | ||||||
| extern "C" | extern "C" | ||||||
| int | int | ||||||
| seteuid (uid_t) | seteuid (uid_t uid) | ||||||
| { | { | ||||||
|   set_errno (ENOSYS); |   return setuid (uid); | ||||||
|   return 0; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /* setegid: from System V.  */ | /* setegid: from System V.  */ | ||||||
| extern "C" | extern "C" | ||||||
| int | int | ||||||
| setegid (gid_t) | setegid (gid_t gid) | ||||||
| { | { | ||||||
|   set_errno (ENOSYS); |   return setgid (gid); | ||||||
|   return 0; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| /* chroot: privileged Unix system call.  */ | /* chroot: privileged Unix system call.  */ | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user