【问题标题】:Changing SAMBA Password in Java在 Java 中更改 SAMBA 密码
【发布时间】:2015-06-15 02:04:36
【问题描述】:

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

下面是我更改用户密码的代码,因为这更容易测试,一旦我解决了这个问题,我将能够弄清楚另一部分。

-s 标志应该允许使用标准输入。

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);

我需要一些帮助来弄清楚我做错了什么,以及如何正确地解决这个问题。任何帮助表示赞赏。

【问题讨论】:

    标签: java linux passwords samba


    【解决方案1】:

    根据SMBPASSWD(8) 的手册页:

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

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

    【讨论】:

    • 好的,有道理。我不知道它也让它沉默了。这是否意味着删除读取应该使其工作?另外,如果输出是静默的,我将如何告诉用户密码是否已成功更改。
    • 我怀疑您用于执行进程的 Java API 存储了返回值。 smbpasswd 成功时返回 0,失败返回 1。
    • 我想通了,这是读取的组合,并且使用了错误的写入器。在最后一次写入之后我只需要一次读取,并且我需要使用 PrintWriter。生成的代码可以正常工作并执行我希望它执行的操作。感谢您的帮助!
    猜你喜欢
    • 2013-11-17
    • 1970-01-01
    • 2014-12-05
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多