2
我正在寫一個套接字過濾器kext,我想忽略作爲根作出的任何連接。 OS X Lion中之前,下面的代碼工作得十分完美:如何確定進程在網絡內核擴展中是否具有root權限?
static boolean_t is_root() {
proc_t p = proc_self();
boolean_t isRoot = proc_suser(p);
proc_rele(p);
return isRoot;
}
但是現在有了獅子和山獅子,is_root()
函數總是返回true。在雪豹中,它的工作原理與我想象的一樣。
以下是我測試插座過濾器事件處理程序內的函數的例子:
int debugPid = proc_selfpid();
if (is_root()) {
printf("%u (root)\n", debugPid);
} else {
printf("%u (user)\n", debugPid);
}
但產量總是說「根」,例如:
2012-11-15 3:48:00.000 PM kernel[0]: 29879 (root)
當應用程序製作該連接是Twitter(通過PID確認)。 Twitter以普通用戶權限運行,而不是root用戶。
是否有更好/正確的方式來確定套接字連接後面的進程是否具有root權限?
謝謝。不知道我如何誤讀。當我安裝Snow Leopard時,我也可以發誓說代碼能夠正常工作。 – jjs
'proc_xxx()'funcs不一致,例如'proc_exiting()'返回布爾值(1/0)。 – trojanfoe