Kernel/LibC: Add setsid()
This commit is contained in:
		
							parent
							
								
									f08d429851
								
							
						
					
					
						commit
						ad645f31d0
					
				|  | @ -85,6 +85,7 @@ namespace Kernel | |||
| 
 | ||||
| 		BAN::ErrorOr<long> sys_setuid(uid_t); | ||||
| 		BAN::ErrorOr<long> sys_setgid(gid_t); | ||||
| 		BAN::ErrorOr<long> sys_setsid(); | ||||
| 		BAN::ErrorOr<long> sys_seteuid(uid_t); | ||||
| 		BAN::ErrorOr<long> sys_setegid(gid_t); | ||||
| 		BAN::ErrorOr<long> sys_setreuid(uid_t, uid_t); | ||||
|  |  | |||
|  | @ -2001,6 +2001,20 @@ namespace Kernel | |||
| 		return BAN::Error::from_errno(EPERM); | ||||
| 	} | ||||
| 
 | ||||
| 	BAN::ErrorOr<long> Process::sys_setsid() | ||||
| 	{ | ||||
| 		LockGuard _(m_process_lock); | ||||
| 
 | ||||
| 		if (is_session_leader() || m_pid == m_pgrp) | ||||
| 			return BAN::Error::from_errno(EPERM); | ||||
| 
 | ||||
| 		m_sid = m_pid; | ||||
| 		m_pgrp = m_pid; | ||||
| 		m_controlling_terminal.clear(); | ||||
| 
 | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	BAN::ErrorOr<long> Process::sys_seteuid(uid_t uid) | ||||
| 	{ | ||||
| 		if (uid < 0 || uid >= 1'000'000'000) | ||||
|  |  | |||
|  | @ -25,6 +25,7 @@ __BEGIN_DECLS | |||
| 	O(SYS_READ_DIR,			readdir)		\ | ||||
| 	O(SYS_SET_UID,			setuid)			\ | ||||
| 	O(SYS_SET_GID,			setgid)			\ | ||||
| 	O(SYS_SET_SID,			setsid)			\ | ||||
| 	O(SYS_SET_EUID,			seteuid)		\ | ||||
| 	O(SYS_SET_EGID,			setegid)		\ | ||||
| 	O(SYS_SET_REUID,		setreuid)		\ | ||||
|  |  | |||
|  | @ -475,6 +475,11 @@ int setgid(gid_t gid) | |||
| 	return syscall(SYS_SET_GID, gid); | ||||
| } | ||||
| 
 | ||||
| int setsid(void) | ||||
| { | ||||
| 	return syscall(SYS_SET_SID); | ||||
| } | ||||
| 
 | ||||
| int setreuid(uid_t ruid, uid_t euid) | ||||
| { | ||||
| 	return syscall(SYS_SET_REUID, ruid, euid); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue