Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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中更改SAMBA密码_Java_Linux_Passwords_Samba - Fatal编程技术网

在Java中更改SAMBA密码

在Java中更改SAMBA密码,java,linux,passwords,samba,Java,Linux,Passwords,Samba,我有一个在linux上运行的Java程序,它需要能够设置用户的初始samba密码,然后允许他们更改密码,而不允许他们访问终端 下面是我更改用户密码的代码,因为这更容易测试,一旦我解决了这个问题,我将能够找出其他部分 -s标志应该允许使用stdin String cmd = "smbpasswd -s -U user"; Process p = Runtime.getRuntime().exec(cmd); OutputStreamWriter Out = new OutputStreamWrit

我有一个在linux上运行的Java程序,它需要能够设置用户的初始samba密码,然后允许他们更改密码,而不允许他们访问终端

下面是我更改用户密码的代码,因为这更容易测试,一旦我解决了这个问题,我将能够找出其他部分

-s标志应该允许使用stdin

String cmd = "smbpasswd -s -U user";
Process p = Runtime.getRuntime().exec(cmd);
OutputStreamWriter Out = new OutputStreamWriter(p.getOutputStream());
InputStreamReader In = new InputStreamReader(p.getInputStream());
BufferedWriter Write = new BufferedWriter(Out);
BufferedReader Read = new BufferedReader(In);
char[] output = null;

//I write all of the output lines to the log, but nothing is written, and the password doesn't change.
Read.read(output);
Write.write(OldPass);
Read.read(Output);
Write.write(NewPass);
Read.read(Output);
Write.write(NewPass);
Read.read(Output);

我需要一些帮助来找出我做错了什么,以及我将如何正确处理这件事。非常感谢您的帮助。

根据
SMBPASSWD(8)
的手册页:

-s:此选项使smbpasswd保持静默(即不发出提示)并从标准输入读取其旧密码和新密码,而不是 来自/dev/tty(就像passwd(1)程序一样)。这一选择是为了提供帮助 编写脚本以驱动smbpasswd的人


强调“不发布提示”。如果我正确地阅读了您的代码,那么您似乎在等待实用程序的提示,而该提示不会出现(从命令行测试)。但是我可能误解了您的Java代码。

好的,这是有道理的。我不知道它也让它安静了。这是否意味着删除读取应该使其工作?另外,如果输出是静默的,我如何告诉用户密码是否成功更改。我怀疑用于执行进程的Java API存储了返回值。当smbpasswd成功时,它返回0。失败返回1。我发现,这是读操作和使用错误的编写器的组合。在最后一次写入之后,我只需要一次读取,并且我需要使用PrintWriter。生成的代码可以正常工作并执行我希望它执行的操作。谢谢你的帮助!