2007-03-21 18:57:07 +03:00
#!/usr/bin/perl
# Bootstrap Samba and run a number of tests against it.
# Copyright (C) 2005-2007 Jelmer Vernooij <jelmer@samba.org>
# Published under the GNU GPL, v3 or later.
package Samba3 ;
use strict ;
2007-04-18 04:12:39 +04:00
use Cwd qw( abs_path ) ;
2007-03-21 18:57:07 +03:00
use FindBin qw( $RealBin ) ;
2007-09-02 03:11:48 +04:00
use POSIX ;
2007-03-21 18:57:07 +03:00
2007-04-18 04:12:39 +04:00
sub binpath ($$)
{
my ( $ self , $ binary ) = @ _ ;
if ( defined ( $ self - > { bindir } ) ) {
my $ path = "$self->{bindir}/$binary" ;
- f $ path or die ( "File $path doesn't exist" ) ;
return $ path ;
}
return $ binary ;
}
sub new ($$) {
my ( $ classname , $ bindir ) = @ _ ;
my $ self = { bindir = > $ bindir } ;
2007-03-21 18:57:07 +03:00
bless $ self ;
return $ self ;
}
2007-04-18 04:12:39 +04:00
sub teardown_env ($$)
2007-03-21 18:57:07 +03:00
{
2007-04-18 04:12:39 +04:00
my ( $ self , $ envvars ) = @ _ ;
2007-03-21 18:57:07 +03:00
2007-09-02 21:47:35 +04:00
my $ smbdpid = read_pid ( $ envvars , "smbd" ) ;
my $ nmbdpid = read_pid ( $ envvars , "nmbd" ) ;
2009-01-28 19:28:51 +03:00
my $ winbinddpid = read_pid ( $ envvars , "winbindd" ) ;
2007-09-02 21:47:35 +04:00
$ self - > stop_sig_term ( $ smbdpid ) ;
$ self - > stop_sig_term ( $ nmbdpid ) ;
2009-01-28 19:28:51 +03:00
$ self - > stop_sig_term ( $ winbinddpid ) ;
2007-09-02 21:47:35 +04:00
$ self - > stop_sig_kill ( $ smbdpid ) ;
$ self - > stop_sig_kill ( $ nmbdpid ) ;
2009-01-28 19:28:51 +03:00
$ self - > stop_sig_kill ( $ winbinddpid ) ;
2007-04-18 04:12:39 +04:00
return 0 ;
}
2007-09-02 03:11:48 +04:00
sub getlog_env_app ($$$)
{
my ( $ self , $ envvars , $ name ) = @ _ ;
my $ title = "$name LOG of: $envvars->{NETBIOSNAME}\n" ;
my $ out = $ title ;
open ( LOG , "<" . $ envvars - > { $ name . "_TEST_LOG" } ) ;
seek ( LOG , $ envvars - > { $ name . "_TEST_LOG_POS" } , SEEK_SET ) ;
while ( <LOG> ) {
$ out . = $ _ ;
}
$ envvars - > { $ name . "_TEST_LOG_POS" } = tell ( LOG ) ;
close ( LOG ) ;
return "" if $ out eq $ title ;
return $ out ;
}
2007-04-18 18:02:26 +04:00
sub getlog_env ($$)
{
my ( $ self , $ envvars ) = @ _ ;
2007-09-30 13:08:10 +04:00
my $ ret = "" ;
2007-04-18 18:02:26 +04:00
2007-09-30 13:08:10 +04:00
$ ret . = $ self - > getlog_env_app ( $ envvars , "SMBD" ) ;
$ ret . = $ self - > getlog_env_app ( $ envvars , "NMBD" ) ;
2009-01-28 19:28:51 +03:00
$ ret . = $ self - > getlog_env_app ( $ envvars , "WINBINDD" ) ;
2007-09-30 13:08:10 +04:00
return $ ret ;
2007-04-18 18:02:26 +04:00
}
2007-04-19 18:54:09 +04:00
sub check_env ($$)
{
my ( $ self , $ envvars ) = @ _ ;
# TODO ...
return 1 ;
}
2007-04-18 04:12:39 +04:00
sub setup_env ($$$)
{
my ( $ self , $ envname , $ path ) = @ _ ;
2007-03-21 18:57:07 +03:00
2007-04-18 04:12:39 +04:00
if ( $ envname eq "dc" ) {
return $ self - > setup_dc ( "$path/dc" ) ;
} else {
2007-09-02 03:11:48 +04:00
return undef ;
2007-04-18 04:12:39 +04:00
}
}
sub setup_dc ($$)
{
my ( $ self , $ path ) = @ _ ;
2007-03-21 18:57:07 +03:00
2007-09-26 23:23:54 +04:00
my $ vars = $ self - > provision ( $ path , "dc" ) ;
2007-04-18 04:12:39 +04:00
2007-09-30 13:08:10 +04:00
$ self - > check_or_start ( $ vars ,
( $ ENV { NMBD_MAXTIME } or 2700 ) ,
( $ ENV { WINBINDD_MAXTIME } or 2700 ) ,
( $ ENV { SMBD_MAXTIME } or 2700 ) ) ;
2007-04-18 04:12:39 +04:00
$ self - > wait_for_start ( $ vars ) ;
return $ vars ;
}
sub stop ($)
{
my ( $ self ) = @ _ ;
}
2007-09-02 21:47:35 +04:00
sub stop_sig_term ($$) {
my ( $ self , $ pid ) = @ _ ;
kill ( "USR1" , $ pid ) or kill ( "ALRM" , $ pid ) or warn ( "Unable to kill $pid: $!" ) ;
}
sub stop_sig_kill ($$) {
my ( $ self , $ pid ) = @ _ ;
kill ( "ALRM" , $ pid ) or warn ( "Unable to kill $pid: $!" ) ;
}
2007-04-18 04:12:39 +04:00
2007-09-02 21:47:35 +04:00
sub write_pid ($$$)
{
my ( $ env_vars , $ app , $ pid ) = @ _ ;
2007-04-18 04:12:39 +04:00
2007-09-02 21:47:35 +04:00
open ( PID , ">$env_vars->{PIDDIR}/timelimit.$app.pid" ) ;
print PID $ pid ;
close ( PID ) ;
2007-04-18 04:12:39 +04:00
}
2007-09-02 21:47:35 +04:00
sub read_pid ($$)
{
my ( $ env_vars , $ app ) = @ _ ;
open ( PID , "<$env_vars->{PIDDIR}/timelimit.$app.pid" ) ;
my $ pid = <PID> ;
close ( PID ) ;
return $ pid ;
2007-04-18 04:12:39 +04:00
}
sub check_or_start ($$$$) {
2007-09-30 13:08:10 +04:00
my ( $ self , $ env_vars , $ nmbd_maxtime , $ winbindd_maxtime , $ smbd_maxtime ) = @ _ ;
2007-04-18 04:12:39 +04:00
unlink ( $ env_vars - > { NMBD_TEST_LOG } ) ;
print "STARTING NMBD..." ;
2007-03-21 18:57:07 +03:00
my $ pid = fork ( ) ;
if ( $ pid == 0 ) {
2007-04-18 04:12:39 +04:00
open STDOUT , ">$env_vars->{NMBD_TEST_LOG}" ;
2007-03-21 18:57:07 +03:00
open STDERR , '>&STDOUT' ;
2007-09-30 13:08:10 +04:00
2009-01-28 19:28:51 +03:00
SocketWrapper:: set_default_iface ( $ env_vars - > { SOCKET_WRAPPER_DEFAULT_IFACE } ) ;
2007-09-30 13:08:10 +04:00
$ ENV { WINBINDD_SOCKET_DIR } = $ env_vars - > { WINBINDD_SOCKET_DIR } ;
2009-01-28 19:28:51 +03:00
$ ENV { NSS_WRAPPER_PASSWD } = $ env_vars - > { NSS_WRAPPER_PASSWD } ;
$ ENV { NSS_WRAPPER_GROUP } = $ env_vars - > { NSS_WRAPPER_GROUP } ;
2007-10-08 16:57:30 +04:00
my @ optargs = ( "-d0" ) ;
if ( defined ( $ ENV { NMBD_OPTIONS } ) ) {
@ optargs = split ( / / , $ ENV { NMBD_OPTIONS } ) ;
}
2007-04-18 04:12:39 +04:00
$ ENV { MAKE_TEST_BINARY } = $ self - > binpath ( "nmbd" ) ;
2007-10-10 21:40:19 +04:00
my @ preargs = ( $ self - > binpath ( "timelimit" ) , $ nmbd_maxtime ) ;
if ( defined ( $ ENV { NMBD_VALGRIND } ) ) {
@ preargs = split ( / / , $ ENV { NMBD_VALGRIND } ) ;
}
exec ( @ preargs , $ self - > binpath ( "nmbd" ) , "-F" , "-S" , "--no-process-group" , "-s" , $ env_vars - > { SERVERCONFFILE } , @ optargs ) or die ( "Unable to start nmbd: $!" ) ;
2007-03-21 18:57:07 +03:00
}
2007-09-02 21:47:35 +04:00
write_pid ( $ env_vars , "nmbd" , $ pid ) ;
2007-03-21 18:57:07 +03:00
print "DONE\n" ;
2009-01-28 11:35:44 +03:00
unlink ( $ env_vars - > { WINBINDD_TEST_LOG } ) ;
print "STARTING WINBINDD..." ;
$ pid = fork ( ) ;
if ( $ pid == 0 ) {
open STDOUT , ">$env_vars->{WINBINDD_TEST_LOG}" ;
open STDERR , '>&STDOUT' ;
2009-01-28 19:28:51 +03:00
SocketWrapper:: set_default_iface ( $ env_vars - > { SOCKET_WRAPPER_DEFAULT_IFACE } ) ;
2009-01-28 11:35:44 +03:00
$ ENV { WINBINDD_SOCKET_DIR } = $ env_vars - > { WINBINDD_SOCKET_DIR } ;
2009-01-28 19:28:51 +03:00
$ ENV { NSS_WRAPPER_PASSWD } = $ env_vars - > { NSS_WRAPPER_PASSWD } ;
$ ENV { NSS_WRAPPER_GROUP } = $ env_vars - > { NSS_WRAPPER_GROUP } ;
2009-01-28 11:35:44 +03:00
my @ optargs = ( "-d0" ) ;
if ( defined ( $ ENV { WINBINDD_OPTIONS } ) ) {
@ optargs = split ( / / , $ ENV { WINBINDD_OPTIONS } ) ;
}
$ ENV { MAKE_TEST_BINARY } = $ self - > binpath ( "winbindd" ) ;
2009-01-28 19:28:51 +03:00
my @ preargs = ( $ self - > binpath ( "timelimit" ) , $ winbindd_maxtime ) ;
if ( defined ( $ ENV { WINBINDD_VALGRIND } ) ) {
@ preargs = split ( / / , $ ENV { WINBINDD_VALGRIND } ) ;
}
exec ( @ preargs , $ self - > binpath ( "winbindd" ) , "-F" , "-S" , "--no-process-group" , "-s" , $ env_vars - > { SERVERCONFFILE } , @ optargs ) or die ( "Unable to start winbindd: $!" ) ;
2009-01-28 11:35:44 +03:00
}
write_pid ( $ env_vars , "winbindd" , $ pid ) ;
print "DONE\n" ;
2007-09-30 13:08:10 +04:00
2007-04-18 04:12:39 +04:00
unlink ( $ env_vars - > { SMBD_TEST_LOG } ) ;
print "STARTING SMBD..." ;
2007-04-18 18:43:05 +04:00
$ pid = fork ( ) ;
2007-04-18 04:12:39 +04:00
if ( $ pid == 0 ) {
open STDOUT , ">$env_vars->{SMBD_TEST_LOG}" ;
open STDERR , '>&STDOUT' ;
2007-09-30 13:08:10 +04:00
2009-01-28 19:28:51 +03:00
SocketWrapper:: set_default_iface ( $ env_vars - > { SOCKET_WRAPPER_DEFAULT_IFACE } ) ;
2007-09-30 13:08:10 +04:00
$ ENV { WINBINDD_SOCKET_DIR } = $ env_vars - > { WINBINDD_SOCKET_DIR } ;
2009-01-28 19:28:51 +03:00
$ ENV { NSS_WRAPPER_PASSWD } = $ env_vars - > { NSS_WRAPPER_PASSWD } ;
$ ENV { NSS_WRAPPER_GROUP } = $ env_vars - > { NSS_WRAPPER_GROUP } ;
2007-04-18 04:12:39 +04:00
$ ENV { MAKE_TEST_BINARY } = $ self - > binpath ( "smbd" ) ;
2007-10-08 16:57:30 +04:00
my @ optargs = ( "-d0" ) ;
if ( defined ( $ ENV { SMBD_OPTIONS } ) ) {
@ optargs = split ( / / , $ ENV { SMBD_OPTIONS } ) ;
}
2007-10-10 21:40:19 +04:00
my @ preargs = ( $ self - > binpath ( "timelimit" ) , $ smbd_maxtime ) ;
if ( defined ( $ ENV { SMBD_VALGRIND } ) ) {
@ preargs = split ( / / , $ ENV { SMBD_VALGRIND } ) ;
}
exec ( @ preargs , $ self - > binpath ( "smbd" ) , "-F" , "-S" , "--no-process-group" , "-s" , $ env_vars - > { SERVERCONFFILE } , @ optargs ) or die ( "Unable to start smbd: $!" ) ;
2007-04-18 04:12:39 +04:00
}
2007-09-02 21:47:35 +04:00
write_pid ( $ env_vars , "smbd" , $ pid ) ;
2007-04-18 04:12:39 +04:00
print "DONE\n" ;
2007-03-21 18:57:07 +03:00
2007-04-18 04:12:39 +04:00
return 0 ;
2007-03-21 18:57:07 +03:00
}
2007-04-18 04:12:39 +04:00
sub create_clientconf ($$$)
2007-03-21 18:57:07 +03:00
{
2007-04-18 04:12:39 +04:00
my ( $ self , $ prefix , $ domain ) = @ _ ;
my $ lockdir = "$prefix/locks" ;
my $ logdir = "$prefix/logs" ;
my $ piddir = "$prefix/pid" ;
my $ privatedir = "$prefix/private" ;
my $ scriptdir = "$RealBin/.." ;
my $ conffile = "$prefix/smb.conf" ;
my $ torture_interfaces = '127.0.0.6/8,127.0.0.7/8,127.0.0.8/8,127.0.0.9/8,127.0.0.10/8,127.0.0.11/8' ;
open ( CONF , ">$conffile" ) ;
print CONF "
[ global ]
workgroup = $ domain
2007-03-21 18:57:07 +03:00
2007-04-18 04:12:39 +04:00
private dir = $ privatedir
pid directory = $ piddir
lock directory = $ lockdir
log file = $ logdir / log . \ % m
log level = 0
name resolve order = bcast
netbios name = TORTURE_6
interfaces = $ torture_interfaces
panic action = $ scriptdir / gdb_backtrace \ % d % \ $ ( MAKE_TEST_BINARY )
passdb backend = tdbsam
" ;
close ( CONF ) ;
2007-03-21 18:57:07 +03:00
}
2007-09-26 23:23:54 +04:00
sub provision ($$$)
2007-03-21 18:57:07 +03:00
{
2007-09-26 23:23:54 +04:00
my ( $ self , $ prefix , $ role ) = @ _ ;
2007-04-18 04:12:39 +04:00
##
## setup the various environment variables we need
##
2007-03-21 18:57:07 +03:00
my % ret = ( ) ;
2007-10-02 19:55:34 +04:00
my $ server = "LOCALHOST2" ;
2007-04-18 04:12:39 +04:00
my $ server_ip = "127.0.0.2" ;
2007-09-30 13:08:10 +04:00
my $ domain = "SAMBA-TEST" ;
2009-01-28 19:28:51 +03:00
my $ unix_name = ( $ ENV { USER } or $ ENV { LOGNAME } or `PATH=/usr/ucb:$ENV{PATH} whoami` ) ;
chomp $ unix_name ;
my $ unix_uid = $> ;
my $ unix_gids_str = $ ) ;
my @ unix_gids = split ( " " , $ unix_gids_str ) ;
2007-04-18 04:12:39 +04:00
my $ password = "test" ;
2007-03-21 18:57:07 +03:00
2007-04-30 00:37:59 +04:00
my $ srcdir = "$RealBin/.." ;
my $ scriptdir = "$srcdir/selftest" ;
2007-04-18 04:12:39 +04:00
my $ prefix_abs = abs_path ( $ prefix ) ;
2009-01-28 19:28:51 +03:00
my $ bindir_abs = abs_path ( $ self - > { bindir } ) ;
2007-09-30 13:08:10 +04:00
my @ dirs = ( ) ;
my $ shrdir = "$prefix_abs/share" ;
push ( @ dirs , $ shrdir ) ;
2007-04-18 04:12:39 +04:00
my $ libdir = "$prefix_abs/lib" ;
2007-09-30 13:08:10 +04:00
push ( @ dirs , $ libdir ) ;
2007-04-18 04:12:39 +04:00
my $ piddir = "$prefix_abs/pid" ;
2007-09-30 13:08:10 +04:00
push ( @ dirs , $ piddir ) ;
2007-04-18 04:12:39 +04:00
my $ privatedir = "$prefix_abs/private" ;
2007-09-30 13:08:10 +04:00
push ( @ dirs , $ privatedir ) ;
2007-04-18 04:12:39 +04:00
my $ lockdir = "$prefix_abs/lockdir" ;
2007-09-30 13:08:10 +04:00
push ( @ dirs , $ lockdir ) ;
2007-04-18 04:12:39 +04:00
my $ logdir = "$prefix_abs/logs" ;
2007-09-30 13:08:10 +04:00
push ( @ dirs , $ logdir ) ;
# this gets autocreated by winbindd
my $ wbsockdir = "$prefix_abs/winbindd" ;
2007-10-02 19:56:33 +04:00
my $ wbsockprivdir = "$lockdir/winbindd_privileged" ;
2007-03-21 18:57:07 +03:00
2007-04-18 04:12:39 +04:00
##
## create the test directory layout
##
2007-04-20 15:40:44 +04:00
mkdir ( $ prefix_abs , 0777 ) ;
2007-04-18 04:12:39 +04:00
print "CREATE TEST ENVIRONMENT IN '$prefix'..." ;
system ( "rm -rf $prefix_abs/*" ) ;
2007-09-30 13:08:10 +04:00
mkdir ( $ _ , 0777 ) foreach ( @ dirs ) ;
my $ conffile = "$libdir/server.conf" ;
2007-03-21 18:57:07 +03:00
2009-01-28 19:28:51 +03:00
my $ nss_wrapper_pl = "$ENV{PERL} $srcdir/../lib/nss_wrapper/nss_wrapper.pl" ;
my $ nss_wrapper_passwd = "$privatedir/passwd" ;
my $ nss_wrapper_group = "$privatedir/group" ;
2007-04-18 04:12:39 +04:00
open ( CONF , ">$conffile" ) or die ( "Unable to open $conffile" ) ;
print CONF "
[ global ]
2009-01-28 19:28:51 +03:00
netbios name = $ server
interfaces = $ server_ip / 8
bind interfaces only = yes
panic action = $ scriptdir / gdb_backtrace % d % \ $ ( MAKE_TEST_BINARY )
2007-04-18 04:12:39 +04:00
workgroup = $ domain
2007-03-21 18:57:07 +03:00
2007-04-18 04:12:39 +04:00
private dir = $ privatedir
pid directory = $ piddir
lock directory = $ lockdir
log file = $ logdir / log . \ % m
log level = 0
2007-03-21 18:57:07 +03:00
2007-04-18 04:12:39 +04:00
name resolve order = bcast
2007-03-21 18:57:07 +03:00
2009-01-28 19:28:51 +03:00
state directory = $ lockdir
cache directory = $ lockdir
2007-04-18 04:12:39 +04:00
passdb backend = tdbsam
2007-09-26 23:23:54 +04:00
" ;
if ( $ role eq "dc" ) {
print CONF "\tdomain master = yes\n" ;
2009-01-28 19:28:51 +03:00
print CONF "\tdomain logons = yes\n" ;
2007-09-26 23:23:54 +04:00
}
print CONF "
2009-01-28 19:28:51 +03:00
time server = yes
add user script = $ nss_wrapper_pl - - path $ nss_wrapper_passwd - - type passwd - - action add - - name % u
add machine script = $ nss_wrapper_pl - - path $ nss_wrapper_passwd - - type passwd - - action add - - name % u
delete user script = $ nss_wrapper_pl - - path $ nss_wrapper_passwd - - type passwd - - action delete - - name % u
kernel oplocks = no
kernel change notify = no
syslog = no
printing = bsd
printcap name = /dev/ null
2007-09-26 23:23:54 +04:00
2007-09-30 13:08:10 +04:00
winbindd:socket dir = $ wbsockdir
2009-01-28 19:28:51 +03:00
idmap uid = 100000 - 200000
idmap gid = 100000 - 200000
# min receivefile size = 4000
2007-09-30 13:08:10 +04:00
2007-04-18 04:12:39 +04:00
read only = no
smbd:sharedelay = 100000
2009-01-28 19:28:51 +03:00
smbd:writetimeupdatedelay = 500000
2007-04-18 04:12:39 +04:00
map hidden = yes
map system = yes
create mask = 755
2009-01-28 19:28:51 +03:00
vfs objects = $ bindir_abs /xattr_tdb.so $bindir_abs/s treams_depot . so
#Include user defined custom parameters if set
$ ENV { INCLUDE_CUSTOM_CONF }
[ tmp ]
path = $ shrdir
2007-04-18 04:12:39 +04:00
[ hideunread ]
copy = tmp
hide unreadable = yes
[ hideunwrite ]
copy = tmp
hide unwriteable files = yes
[ print1 ]
copy = tmp
printable = yes
printing = test
[ print2 ]
copy = print1
[ print3 ]
copy = print1
[ print4 ]
copy = print1
" ;
close ( CONF ) ;
2007-03-21 18:57:07 +03:00
2007-04-18 04:12:39 +04:00
##
## create a test account
##
2009-01-28 19:28:51 +03:00
open ( PASSWD , ">$nss_wrapper_passwd" ) or die ( "Unable to open $nss_wrapper_passwd" ) ;
print PASSWD "
nobody:x:65534:65533:nobody gecos: $ prefix_abs: /bin/ false
$ unix_name:x: $ unix_uid: $ unix_gids [ 0 ] : $ unix_name gecos: $ prefix_abs: /bin/ false
" ;
close ( PASSWD ) ;
open ( GROUP , ">$nss_wrapper_group" ) or die ( "Unable to open $nss_wrapper_group" ) ;
print GROUP "
nobody:x:65533:
nogroup:x:65534:nobody
$ unix_name - group:x: $ unix_gids [ 0 ] :
" ;
close ( GROUP ) ;
$ ENV { NSS_WRAPPER_PASSWD } = $ nss_wrapper_passwd ;
$ ENV { NSS_WRAPPER_GROUP } = $ nss_wrapper_group ;
open ( PWD , "|" . $ self - > binpath ( "smbpasswd" ) . " -c $conffile -L -s -a $unix_name >/dev/null" ) ;
2007-04-18 04:12:39 +04:00
print PWD "$password\n$password\n" ;
close ( PWD ) or die ( "Unable to set password for test account" ) ;
2009-01-28 19:28:51 +03:00
$ ENV { NSS_WRAPPER_PASSWD } = undef ;
$ ENV { NSS_WRAPPER_GROUP } = undef ;
2007-04-18 04:12:39 +04:00
print "DONE\n" ;
$ ret { SERVER_IP } = $ server_ip ;
$ ret { NMBD_TEST_LOG } = "$prefix/nmbd_test.log" ;
2007-09-30 13:08:10 +04:00
$ ret { WINBINDD_TEST_LOG } = "$prefix/winbindd_test.log" ;
2007-04-18 04:12:39 +04:00
$ ret { SMBD_TEST_LOG } = "$prefix/smbd_test.log" ;
$ ret { SERVERCONFFILE } = $ conffile ;
$ ret { CONFIGURATION } = "-s $conffile" ;
$ ret { SERVER } = $ server ;
2009-01-28 19:28:51 +03:00
$ ret { USERNAME } = $ unix_name ;
2007-04-18 04:12:39 +04:00
$ ret { DOMAIN } = $ domain ;
$ ret { NETBIOSNAME } = $ server ;
$ ret { PASSWORD } = $ password ;
$ ret { PIDDIR } = $ piddir ;
2007-09-30 13:08:10 +04:00
$ ret { WINBINDD_SOCKET_DIR } = $ wbsockdir ;
2007-10-02 19:56:33 +04:00
$ ret { WINBINDD_PRIV_PIPE_DIR } = $ wbsockprivdir ;
2009-01-28 19:28:51 +03:00
$ ret { SOCKET_WRAPPER_DEFAULT_IFACE } = > 2 ,
$ ret { NSS_WRAPPER_PASSWD } = $ nss_wrapper_passwd ;
$ ret { NSS_WRAPPER_GROUP } = $ nss_wrapper_group ;
2007-04-18 04:12:39 +04:00
return \ % ret ;
2007-03-21 18:57:07 +03:00
}
2007-04-18 04:12:39 +04:00
sub wait_for_start ($$)
2007-03-21 18:57:07 +03:00
{
2007-04-18 04:12:39 +04:00
my ( $ self , $ envvars ) = @ _ ;
# give time for nbt server to register its names
print "delaying for nbt name registration\n" ;
sleep ( 10 ) ;
# This will return quickly when things are up, but be slow if we need to wait for (eg) SSL init
system ( $ self - > binpath ( "nmblookup" ) . " $envvars->{CONFIGURATION} -U $envvars->{SERVER_IP} __SAMBA__" ) ;
system ( $ self - > binpath ( "nmblookup" ) . " $envvars->{CONFIGURATION} __SAMBA__" ) ;
system ( $ self - > binpath ( "nmblookup" ) . " $envvars->{CONFIGURATION} -U 127.255.255.255 __SAMBA__" ) ;
system ( $ self - > binpath ( "nmblookup" ) . " $envvars->{CONFIGURATION} -U $envvars->{SERVER_IP} $envvars->{SERVER}" ) ;
system ( $ self - > binpath ( "nmblookup" ) . " $envvars->{CONFIGURATION} $envvars->{SERVER}" ) ;
# make sure smbd is also up set
print "wait for smbd\n" ;
system ( $ self - > binpath ( "smbclient" ) . " $envvars->{CONFIGURATION} -L $envvars->{SERVER_IP} -U% -p 139 | head -2" ) ;
system ( $ self - > binpath ( "smbclient" ) . " $envvars->{CONFIGURATION} -L $envvars->{SERVER_IP} -U% -p 139 | head -2" ) ;
2007-04-18 18:02:26 +04:00
2009-01-28 19:28:51 +03:00
print "creating BUILTIN\\Administrators\n" ;
$ ENV { WINBINDD_SOCKET_DIR } = $ envvars - > { WINBINDD_SOCKET_DIR } ;
system ( $ self - > binpath ( "net" ) . " $envvars->{CONFIGURATION} sam createbuiltingroup Administrators" ) ;
$ ENV { WINBINDD_SOCKET_DIR } = undef ;
2007-04-18 18:02:26 +04:00
print $ self - > getlog_env ( $ envvars ) ;
2007-03-21 18:57:07 +03:00
}
1 ;