我正在尝试使用下面的代码更改流程的真实UID
int ERN2=setreuid(euid,m_ruid);
printf("something went wrong with setreuid %s\n", strerror(ERN2));
std::cout<<"error no for setrugid"<<ERN2<<"\n";
if ( ERN2 == 0)
{
.....
}
m_ruid
是root(0),euid
是接受的ID,但是当我得到setreuid()
的结果时,它总是-1并且我使用了{{1其中说“操作不允许”添加到我可以更改realGID strerror()
但是更改UID始终失败可以让任何人摆脱一些亮点。
我在FreeBSD上。我想知道为什么它发生了,即使我们将root作为参数之一。
答案 0 :(得分:0)
手册页很清楚:
如果成功,setreuid()函数返回值0;否则返回值-1,并设置全局变量errno以指示错误。
这就是几乎所有系统调用的错误返回方式。他们没有返回errno,他们只是在错误时返回-1
或等价物并设置全局变量errno
。
如果不清楚,请尝试strerror(errno)
,看看你得到了什么。