selftest: add ad_member_idmap_ad server
authorRalph Boehme <slow@samba.org>
Mon, 10 Jul 2017 14:19:18 +0000 (16:19 +0200)
committerRalph Boehme <slow@samba.org>
Wed, 12 Jul 2017 07:01:17 +0000 (09:01 +0200)
Add a member server that uses idmap_ad. Gets used in the next commit.

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
selftest/target/Samba.pm
selftest/target/Samba3.pm
selftest/target/Samba4.pm

index 1600ed8..5968772 100644 (file)
@@ -346,6 +346,7 @@ sub get_interface($)
 
     # 11-16 used by selftest.pl for client interfaces
 
+    $interfaces{"idmapadmember"} = 19;
     $interfaces{"idmapridmember"} = 20;
     $interfaces{"localdc"} = 21;
     $interfaces{"localvampiredc"} = 22;
index 79b1a53..54da52b 100755 (executable)
@@ -689,6 +689,95 @@ sub setup_ad_member_idmap_rid($$$$)
        return $ret;
 }
 
+sub setup_ad_member_idmap_ad($$$$)
+{
+       my ($self, $prefix, $dcvars) = @_;
+
+       # If we didn't build with ADS, pretend this env was never available
+       if (not $self->have_ads()) {
+               return "UNKNOWN";
+       }
+
+       print "PROVISIONING S3 AD MEMBER WITH idmap_ad config...";
+
+       my $member_options = "
+       security = ads
+       workgroup = $dcvars->{DOMAIN}
+       realm = $dcvars->{REALM}
+       password server = $dcvars->{SERVER}
+       idmap config * : backend = tdb
+       idmap config * : range = 1000000-1999999
+       idmap config $dcvars->{DOMAIN} : backend = ad
+       idmap config $dcvars->{DOMAIN} : range = 2000000-2999999
+";
+
+       my $ret = $self->provision($prefix, $dcvars->{DOMAIN},
+                                  "IDMAPADMEMBER",
+                                  "loCalMemberPass",
+                                  $member_options,
+                                  $dcvars->{SERVER_IP},
+                                  $dcvars->{SERVER_IPV6});
+
+       $ret or return undef;
+
+       close(USERMAP);
+       $ret->{DOMAIN} = $dcvars->{DOMAIN};
+       $ret->{REALM} = $dcvars->{REALM};
+
+       my $ctx;
+       my $prefix_abs = abs_path($prefix);
+       $ctx = {};
+       $ctx->{krb5_conf} = "$prefix_abs/lib/krb5.conf";
+       $ctx->{domain} = $dcvars->{DOMAIN};
+       $ctx->{realm} = $dcvars->{REALM};
+       $ctx->{dnsname} = lc($dcvars->{REALM});
+       $ctx->{kdc_ipv4} = $dcvars->{SERVER_IP};
+       $ctx->{kdc_ipv6} = $dcvars->{SERVER_IPV6};
+       $ctx->{krb5_ccname} = "$prefix_abs/krb5cc_%{uid}";
+       Samba::mk_krb5_conf($ctx, "");
+
+       $ret->{KRB5_CONFIG} = $ctx->{krb5_conf};
+
+       my $net = Samba::bindir_path($self, "net");
+       my $cmd = "";
+       $cmd .= "SOCKET_WRAPPER_DEFAULT_IFACE=\"$ret->{SOCKET_WRAPPER_DEFAULT_IFACE}\" ";
+       if (defined($ret->{RESOLV_WRAPPER_CONF})) {
+               $cmd .= "RESOLV_WRAPPER_CONF=\"$ret->{RESOLV_WRAPPER_CONF}\" ";
+       } else {
+               $cmd .= "RESOLV_WRAPPER_HOSTS=\"$ret->{RESOLV_WRAPPER_HOSTS}\" ";
+       }
+       $cmd .= "KRB5_CONFIG=\"$ret->{KRB5_CONFIG}\" ";
+       $cmd .= "SELFTEST_WINBINDD_SOCKET_DIR=\"$ret->{SELFTEST_WINBINDD_SOCKET_DIR}\" ";
+       $cmd .= "$net join $ret->{CONFIGURATION}";
+       $cmd .= " -U$dcvars->{USERNAME}\%$dcvars->{PASSWORD}";
+
+       if (system($cmd) != 0) {
+           warn("Join failed\n$cmd");
+           return undef;
+       }
+
+       # We need world access to this share, as otherwise the domain
+       # administrator from the AD domain provided by Samba4 can't
+       # access the share for tests.
+       chmod 0777, "$prefix/share";
+
+       if (not $self->check_or_start($ret, "yes", "yes", "yes")) {
+               return undef;
+       }
+
+       $ret->{DC_SERVER} = $dcvars->{SERVER};
+       $ret->{DC_SERVER_IP} = $dcvars->{SERVER_IP};
+       $ret->{DC_SERVER_IPV6} = $dcvars->{SERVER_IPV6};
+       $ret->{DC_NETBIOSNAME} = $dcvars->{NETBIOSNAME};
+       $ret->{DC_USERNAME} = $dcvars->{USERNAME};
+       $ret->{DC_PASSWORD} = $dcvars->{PASSWORD};
+
+       # Special case, this is called from Samba4.pm but needs to use the Samba3 check_env and get_log_env
+       $ret->{target} = $self;
+
+       return $ret;
+}
+
 sub setup_simpleserver($$)
 {
        my ($self, $path) = @_;
index 772f982..205e281 100755 (executable)
@@ -2130,6 +2130,12 @@ sub setup_env($$$)
                }
                return $target3->setup_ad_member_idmap_rid("$path/ad_member_idmap_rid",
                                                           $self->{vars}->{ad_dc});
+       } elsif ($envname eq "ad_member_idmap_ad") {
+               if (not defined($self->{vars}->{ad_dc})) {
+                       $self->setup_ad_dc("$path/ad_dc");
+               }
+               return $target3->setup_ad_member_idmap_ad("$path/ad_member_idmap_ad",
+                                                         $self->{vars}->{ad_dc});
        } elsif ($envname eq "none") {
                return $self->setup_none("$path/none");
        } else {