dua komentar,
pertama, 'useradd' bukan program interaktif. jadi sebetulnya ngga
perlu pake Expect. cukup pake suid root script, execute 'useradd'
dan tangkap output dan exit code-nya. seperti di bawah:
>>>>>
#!/usr/bin/perl
$ENV{PATH}="/usr/sbin";
$ENV{BASH_ENV}="";
($user) = $ARGV[0] =~ /^([A-Z][A-Z0-9\-_]*)$/i or die "Invalid username";
$hasil = qx(useradd '$user');
print "Exit code: $?\n";
print "Output: $hasil\n";
# silakan interpretasi sendiri...
<<<<<
nanti, di tahap mengganti password ('passwd' program interaktif),
barulah Expect dipakai.
kedua, hati-hati menginterpretasi keluaran program dengan expect.
misalnya, jika suid script tidak menyala dan 'useradd' menghasilkan
keluaran 'could not lock /etc/passwd file', maka program Anda akan
salah mengambil kesimpulan bahwa 'useradd' berhasil!
coba nyalakan debug flag ($Expect::Debug=1) di awal script, mungkin
itu bisa membantu.
At 19:11 25-08-99 +0700, you wrote:
>ini anehnya ya kalo saya jalankan perlscript spuseradd.pl ini make
>wrapper.c yang dibawahnya baik user root maupun user biasa sukses
>jalanin
>spawn useradd ini make expect , tapi kalo jalanin script spuseradd.pl
>ini aja (tanpa make wrapper.c) make root sukses, tapi kalo make user
>biasa script ini tidak berhasil
>(tidak berhasilnya disini bukan spawn `useradd ` tapi gagal di expect
>gitu
>mis:(lihat bawah) $eksis=$t->expect(30,'-re',".*exists.*") || die
>"timeout";
>pasti "timeout" )
>kenapa ya ?
>
>
>
>drwxr-xr-x 2 root root 4096 Jul 21 01:53 /usr/sbin
>-rwxr-xr-x 1 root root 47592 Apr 16 07:03
>/usr/sbin/useradd
>-rwxr-xr-x 1 root root 31700 Apr 16 07:03
>/usr/sbin/userdel
>-rwsr-xr-x 1 root root 10708 Apr 12 22:29
>/usr/sbin/userhelper
>-rwxr-xr-x 1 root root 47800 Apr 16 07:03
>/usr/sbin/usermod
>-rwsr-xr-x 1 root root 5736 Apr 20 02:39
>/usr/sbin/usernetctl
>-rwsr-sr-x 1 root root 12067 Aug 25 15:41
>/tmp/root/wrapper
>-rwsr-sr-x 1 root root 1456 Aug 25 16:09
>/tmp/root/sptelnet.pl
>
>#!/usr/bin/perl
>#spuseradd.pl
>use Expect;
>$user=$ARGV[0];
>$password=$ARGV[1];
>$<=$>;
>$(=$);
>
># ada yang tau nggak cara men"die" spawn bila gagal spawn ? soalnya
>script #dibawah ini bila diganti dengan command yang kagak ada
>disistem kan harusnya #jalanin die "gagal tambah" kan ? tapi kok
>jadinya si program "diem" terus nih ?
>#tapi ini nggak begitu penting sih
>($t=Expect->spawn("/usr/sbin/useradd $user")) || die "gagal tambah
>user\n";
>#$t->log_stdout(0);
>print "uid:$<\neuid:$>\n";
>print "gid:$(\negid:$)\n";
>#kondisi bila user $user udah ada
>#jika $eksis udah ada $kondisi=1
>#jika $eksis belon ada $kondisi=undef or 0
>$eksis=$t->expect(30,'-re',".*exists.*")
>if ($eksis) {
> print "udah ada";
> die "\n";
>}
>$unable=$t->expect(30,'-re',".*unable.*");
>if ($unable) {
> print "unable";
> die "\n";
>}
>#udah sejauh ini berarti sukses `useradd` nya
>print ("sukses add");
>$t->soft_close;
>
>/*wrapper*/
>#include <unistd.h>
>main(argc,argv,y)
>int argc;
>char *argv[];
>char y;
>{
> setuid(0);
> setgid(0);
> printf(argv[1],argv[2]);
> y = *argv[1];
> execlp("/tmp/root/spuseradd.pl","\0",argv[1],"\0",argv[2],"\0");
>}
>
>
>
>
>---------------------------------------------------------------------------
-----
>Utk berhenti langganan, kirim email ke
[EMAIL PROTECTED]
>Informasi arsip di http://www.linux.or.id/milis.php3
>Pengelola dapat dihubungi lewat [EMAIL PROTECTED]
>Hosted by http://www.Indoglobal.com
>
>
--
mailto:[EMAIL PROTECTED]
http://steven.haryan.to
Bandung Perl Mongers: http://bandung.pm.org
--------------------------------------------------------------------------------
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3
Pengelola dapat dihubungi lewat [EMAIL PROTECTED]
Hosted by http://www.Indoglobal.com