gpt4 book ai didi

linux - 在 linux 系统调用中查找用户名

转载 作者:太空狗 更新时间:2023-10-29 11:08:18 25 4
gpt4 key购买 nike

我在 Linux 内核中添加了一个系统调用,如下所示:

#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/list.h>
#include <linux/cred.h>
#include <asm/uaccess.h>

asmlinkage int sys_os_pid_to_uid(int pid, int* puid)
{
struct task_struct* task;

rcu_read_lock();

for_each_process(task)
{
if (task->pid == (pid_t) pid)
{
copy_to_user(puid, &(task->cred->uid.val), sizeof(task->cred->uid.val));
}
}

rcu_read_unlock();
return 0;
}

它获取进程 ID (pid) 并确定执行它的用户的用户 ID (puid)。

现在,我的问题开始了:我想向这个系统调用添加另一个参数,即 char *username,它将包含 ID 为 puid< 的用户的用户名。我在 cred.h header 中进行了搜索,但找不到与用户名相关的任何信息。谁能帮我解决这个问题?

最佳答案

你没有找到它的原因是因为没有一个:task_struct,而且内核通常不会在内存中保留关于给定用户 ID 对应的用户名的信息.这是完全没有必要的,会增加界面和代码的困惑,并且会消耗内存而没有任何额外的好处:与用户有关的所有内容都用数字用户 ID 表示和存储。比较简单,节省内存。

你不应该/不能在系统调用中这样做。

我建议您编写一个包装器用户空间函数来调用您的系统调用,然后调用 getpwuid(3)getpwuid_r(3) 将用户 ID 转换为用户名。请注意,这是在用户空间而不是内核空间中完成的。

关于linux - 在 linux 系统调用中查找用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31149539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com