setreuid()失败,不允许操作

时间:2016-09-26 12:59:51

标签: c++ c kernel freebsd user-permissions

我正在尝试使用下面的代码更改流程的真实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作为参数之一。

1 个答案:

答案 0 :(得分:0)

手册页很清楚:

  

如果成功,setreuid()函数返回值0;否则返回值-1,并设置全局变量errno以指示错误。

这就是几乎所有系统调用的错误返回方式。他们没有返回errno,他们只是在错误时返回-1或等价物并设置全局变量errno

如果不清楚,请尝试strerror(errno),看看你得到了什么。