У меня есть два образца кода:
во-первых, работает правильно:capset терпит неудачу с указателем на структуру
#include <sys/capability.h>
#include <unistd.h>
#include <cstdio>
int main()
{
__user_cap_header_struct *hdr = new __user_cap_header_struct;
__user_cap_data_struct *data = new __user_cap_data_struct;
hdr->pid = getpid();
hdr->version = _LINUX_CAPABILITY_VERSION;
data->effective &= ~CAP_TO_MASK(CAP_IPC_LOCK);
data->permitted &= ~CAP_TO_MASK(CAP_IPC_LOCK);
data->inheritable = 0;
if (capset(hdr, data) < 0)
printf("capset failed: %m");
return 0
}
Во-вторых, fail: Operation not permitted
:
#include <sys/capability.h>
#include <unistd.h>
#include <cstdio>
int main()
{
struct __user_cap_header_struct hdr;
hdr.pid = getpid();
hdr.version = _LINUX_CAPABILITY_VERSION;
struct __user_cap_data_struct data;
data.effective &= ~CAP_TO_MASK(CAP_IPC_LOCK);
data.permitted &= ~CAP_TO_MASK(CAP_IPC_LOCK);
if(capset(&hdr, &data))
printf("capset failed: %m");
return 0;
}
Я думаю, что оба образца кода одинаковы.
Когда я запускаю первый, он выполняется правильно (использует указатель на struct).
Но второй сбой (используется экземпляр struct).
Я не знаю почему. Вы можете мне помочь?
Право. Спасибо, Иоахим! – aviit