Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java c++;在爪哇_Java_C++_Unix_Pwd - Fatal编程技术网

Java c++;在爪哇

Java c++;在爪哇,java,c++,unix,pwd,Java,C++,Unix,Pwd,我发现了一个例子,说明了在用户的uid中基于pwd的用法 在java中,我有一个类似的需求,即作为需要这种实现的不同用户运行脚本 > C++中的代码片段如下: static void su(const char* user) { struct passwd* pwentry=getpwnam(user); if(!pwentry) COUT<<"su:getpwnam:couldnot get pwd entry for user %s",user;

我发现了一个例子,说明了在用户的uid中基于pwd的用法

在java中,我有一个类似的需求,即作为需要这种实现的不同用户运行脚本

<> > C++中的代码片段如下:

static void su(const char* user)
{
    struct passwd* pwentry=getpwnam(user);
    if(!pwentry)
        COUT<<"su:getpwnam:couldnot get pwd entry for user %s",user;
    uid_t new_uid=pwentry->pw_uid;
    struct passwd* pwentry_nmsadm=getpwnam("nmsadm");
    if(!pwentry_nmsadm)
        cout<<"su:getpwnam:could not get pwd for nmsadm");
    gid_t new_gid=pwentry->pw_gid;
    if(chdir(pwentry->pw_dir)<0)
        cout<<"su:chdir";
    uid_t current_uid=geteuid();
    gid_t current_gid=getegid();
    if(current_gid!=new_gid)
    {
        if(setgid(new_gid)<0)
        cout<<"su:setgid";
    }
    if(current_uid!=new_uid)
    {
        if(setuid(new_uid)<0)
        cout<<"su: setuid";
    }
static void su(const char*user)
{
结构passwd*pwentry=getpwnam(用户);
如果(!pwentry)

COUTJava没有提供这种现成的功能,因为它既依赖于系统,又会破坏Java的安全概念

一些可能的解决办法可以是:

  • 使用JNI包装器调用C++方法,这样您就可以在C++
  • 中做所有需要的事情
  • 使用
    ssh
    以不同的用户身份启动脚本
  • 使用
    sudo
    以其他用户身份启动脚本
另见

  • (特定于Windows,但有一个答案提到了JNI方法)

感谢您的指导,但我不能使用ssh或sudo,因为我无法将pwd传递给它们以执行所需的操作