code:setuid - ikarishinjieva/unixV6-code-analyze-chs GitHub Wiki

Source

  • 设置用户ID
  • 共传入一个参数,设为id
  • id的低字节部分为 欲设置的用户ID
  • 参看权限管理

3438

3439 setuid()

3440 {

3441     register uid;

3442

3443     uid = u.u_ar0[R0].lobyte;

3444     if(u.u_ruid == uid.lobyte || suser()) {
  • 若 真实用户ID==uid 或 当前用户具有超级用户权限,继续进行
  • 此处使用uid.lobyte,为保证uid取低字节8位,让比较正常进行
3445          u.u_uid = uid;

3446          u.u_procp->p_uid = uid;

3447          u.u_ruid = uid;

  • 置以下量 为 uid
    • 用户ID u_uid
    • 进程的用户ID p_uid
    • 真实用户ID u_ruid
  • 参看权限管理
  • 此处赋值 uid 进行了隐式类型转换,传入u_uid、p_uid、u_ruid的实际是uid 的低字节
3448     }

3449 }

3450 /* ------------------------- */

Ref

Param

(setuid = 23.)
(user ID in r0)
sys setuid
⚠️ **GitHub.com Fallback** ⚠️