亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 8246 | 回復(fù): 6
打印 上一主題 下一主題

調(diào)用 passwd 命令自動修改密碼,非 Expect [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2011-03-04 21:17 |只看該作者 |倒序瀏覽
  1. #!/usr/bin/env perl

  2. use strict;
  3. use warnings;
  4. use IO::Pty;
  5. use IO::Select;
  6. # use Term::ReadKey;

  7. usage() if ($#ARGV < 1);

  8. my $pty = IO::Pty->new();
  9. my $select = IO::Select->new($pty);
  10. my $buffer = "";

  11. my $pid = fork();
  12. die "Fork fail!\n" if (not defined $pid);
  13. if ($pid != 0) {
  14.     my $loop = 1;
  15.     local $SIG{CHLD} = sub { $loop = 0; };
  16.     while ($loop) {
  17.         expect();
  18.     }

  19.     expect();
  20.     waitpid($pid, 0);
  21. }
  22. else {
  23.     my $slave = $pty->slave();
  24.     open(STDIN, "<&", $slave);
  25.     open(STDOUT, ">&", $slave);
  26.     open(STDERR, ">&", $slave);
  27.     close $pty;
  28.     close $slave;
  29.     exec("passwd");
  30.     exit 1;
  31. }

  32. ################################

  33. sub usage {
  34.     print STDERR "$0 Password NewPassword\n";
  35.     exit 0;
  36. }

  37. sub expect {
  38.     my ($r, $w, $e) = IO::Select->select($select, $select, undef, 0.02);
  39.     if ($#$r > -1) {
  40.         if (sysread($pty, my $buf, 8196)) {
  41.             $buffer .= $buf;
  42.             syswrite(STDOUT, $buf);
  43.         }
  44.     }
  45.     else {
  46.         return;
  47.     }
  48.    
  49.     if ($#$w > -1) {
  50.         if ($buffer =~ /\(current\) UNIX password:/) {
  51.             $buffer = "";
  52.             syswrite($pty, "$ARGV[0]\r");
  53.         }
  54.         elsif ($buffer =~ /New UNIX password:/) {
  55.             $buffer = "";
  56.             syswrite($pty, "$ARGV[1]\r");
  57.         }
  58.         elsif ($buffer =~ /Retype new UNIX password:/) {
  59.             $buffer = "";
  60.             syswrite($pty, "$ARGV[1]\r");
  61.         }
  62.         else {
  63.             ;
  64.         }
  65.     }
  66. }
復(fù)制代碼

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
2 [報告]
發(fā)表于 2011-03-05 08:37 |只看該作者
這個其實就是 Expect 的簡易版,
以及 screen 實用工具的主要工作原理。

支持一下,加個精華。

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
3 [報告]
發(fā)表于 2011-03-05 08:42 |只看該作者
發(fā)布代碼時,
如果能夠?qū)Υa的主要意圖加以說明,并且指出一些注意事項,就更加完美了。
就像下面這樣:

http://www.72891.cn/redirec ... 203&pid=8215506
如同標(biāo)題所說,本程序旨在演示如何操縱偽終端和交互式應(yīng)用程序通信,
因此對于 passwd 實用工具的輸出解析并不多,只是做了一些簡單的判斷。

事實上,根據(jù)輸入內(nèi)容的不同,passwd 實用工具的輸出信息多達(dá)十多種,PAM 的到來使得 passwd 的輸出更加復(fù)雜,
因此如果希望能夠自動控制 passwd,那么還是用 expect/perl 等工具較為方便。

另外需要說明的一點(diǎn)是,自動控制交互式應(yīng)用程序運(yùn)行時,盡量運(yùn)行其英文版本,這樣信息會規(guī)范一些從而有利于捕獲并匹配。
中文或者其它語種的信息不僅要考慮到編碼的問題,而且信息用語經(jīng)常會有變化。

通過設(shè)定環(huán)境變量 LANG=C,可以使 passwd 實用工具的輸出變成英文。
flw 發(fā)表于 2008-04-14 19:03

論壇徽章:
0
4 [報告]
發(fā)表于 2011-03-06 08:58 |只看該作者
發(fā)布代碼時,
如果能夠?qū)Υa的主要意圖加以說明,并且指出一些注意事項,就更加完美了。
就像下面這樣: ...
flw 發(fā)表于 2011-03-05 08:42



  flw 說得是

論壇徽章:
1
雙子座
日期:2013-11-06 17:18:01
5 [報告]
發(fā)表于 2011-03-07 11:02 |只看該作者
flw 說得是
黑色陽光_cu 發(fā)表于 2011-03-06 08:58



    請問一下,expect()是什么子例程?是perl內(nèi)建的還是從哪個模塊導(dǎo)入的?

論壇徽章:
0
6 [報告]
發(fā)表于 2011-08-12 23:49 |只看該作者

學(xué)習(xí)!

論壇徽章:
0
7 [報告]
發(fā)表于 2011-10-14 10:42 |只看該作者
支持一下
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP