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

Kirim email ke