我在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);
我需要一些帮助来弄清楚我做错了什么,以及我将如何正确地解决这个问题。任何帮助表示赞赏。
答案 0 :(得分:0)
根据SMBPASSWD(8)
的手册页:
-s:此选项导致smbpasswd 保持沉默(即不发出提示)并从标准输入读取旧密码和新密码,而不是 来自/ dev / tty(就像passwd(1)程序一样)。这个选项是为了帮助 人们编写脚本来驱动smbpasswd
强调"不发出提示"。如果我正确地读取您的代码,您似乎正在等待来自该实用程序的提示,该提示不会来(从命令行测试它)。但我可能误解了你的Java代码。