MCPcopy Create free account
hub / github.com/F-Stack/f-stack / sys_setresuid

Function sys_setresuid

freebsd/kern/kern_prot.c:1019–1092  ·  view source on GitHub ↗

ARGSUSED */

Source from the content-addressed store, hash-verified

1017#endif
1018/* ARGSUSED */
1019int
1020sys_setresuid(struct thread *td, struct setresuid_args *uap)
1021{
1022 struct proc *p = td->td_proc;
1023 struct ucred *newcred, *oldcred;
1024 uid_t euid, ruid, suid;
1025 struct uidinfo *euip, *ruip;
1026 int error;
1027
1028 euid = uap->euid;
1029 ruid = uap->ruid;
1030 suid = uap->suid;
1031 AUDIT_ARG_EUID(euid);
1032 AUDIT_ARG_RUID(ruid);
1033 AUDIT_ARG_SUID(suid);
1034 newcred = crget();
1035 euip = uifind(euid);
1036 ruip = uifind(ruid);
1037 PROC_LOCK(p);
1038 oldcred = crcopysafe(p, newcred);
1039
1040#ifdef MAC
1041 error = mac_cred_check_setresuid(oldcred, ruid, euid, suid);
1042 if (error)
1043 goto fail;
1044#endif
1045
1046 if (((ruid != (uid_t)-1 && ruid != oldcred->cr_ruid &&
1047 ruid != oldcred->cr_svuid &&
1048 ruid != oldcred->cr_uid) ||
1049 (euid != (uid_t)-1 && euid != oldcred->cr_ruid &&
1050 euid != oldcred->cr_svuid &&
1051 euid != oldcred->cr_uid) ||
1052 (suid != (uid_t)-1 && suid != oldcred->cr_ruid &&
1053 suid != oldcred->cr_svuid &&
1054 suid != oldcred->cr_uid)) &&
1055 (error = priv_check_cred(oldcred, PRIV_CRED_SETRESUID)) != 0)
1056 goto fail;
1057
1058 if (euid != (uid_t)-1 && oldcred->cr_uid != euid) {
1059 change_euid(newcred, euip);
1060 setsugid(p);
1061 }
1062 if (ruid != (uid_t)-1 && oldcred->cr_ruid != ruid) {
1063 change_ruid(newcred, ruip);
1064 setsugid(p);
1065 }
1066 if (suid != (uid_t)-1 && oldcred->cr_svuid != suid) {
1067 change_svuid(newcred, suid);
1068 setsugid(p);
1069 }
1070 proc_set_cred(p, newcred);
1071#ifdef RACCT
1072 racct_proc_ucred_changed(p, oldcred, newcred);
1073 crhold(newcred);
1074#endif
1075 PROC_UNLOCK(p);
1076#ifdef RCTL

Callers

nothing calls this directly

Calls 15

crcopysafeFunction · 0.85
mac_cred_check_setresuidFunction · 0.85
change_euidFunction · 0.85
setsugidFunction · 0.85
change_ruidFunction · 0.85
change_svuidFunction · 0.85
proc_set_credFunction · 0.85
racct_proc_ucred_changedFunction · 0.85
rctl_proc_ucred_changedFunction · 0.85
uifreeFunction · 0.85
crgetFunction · 0.70
uifindFunction · 0.70

Tested by

no test coverage detected