]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
selftest: Add ad member with idmap_autorid backend
authorAndreas Schneider <asn@samba.org>
Tue, 15 Feb 2022 08:44:34 +0000 (09:44 +0100)
committerAndreas Schneider <asn@cryptomilk.org>
Wed, 23 Feb 2022 10:57:28 +0000 (10:57 +0000)
Signed-off-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Guenther Deschner <gd@samba.org>
selftest/target/Samba.pm
selftest/target/Samba3.pm

index b6e6acf290ac8f381f22437670ca6f9367f40371..4245db2703a0d2482b021a5dd7bab9dd741fa6c2 100644 (file)
@@ -620,6 +620,7 @@ sub get_interface($)
                s2kmember         => 59,
                admemidmapnss     => 60,
                localadmember2    => 61,
+               admemautorid      => 62,
 
                rootdnsforwarder  => 64,
 
index 2cc2d13d9e06edd70d0350726ee4b2370ba84191..8c271d80ff060efa60d6e1974a86168594752c29 100755 (executable)
@@ -247,6 +247,7 @@ sub check_env($$)
        ad_member           => ["ad_dc", "fl2008r2dc", "fl2003dc"],
        ad_member_rfc2307   => ["ad_dc_ntvfs"],
        ad_member_idmap_rid => ["ad_dc"],
+       admem_idmap_autorid => ["ad_dc"],
        ad_member_idmap_ad  => ["fl2008r2dc"],
        ad_member_fips      => ["ad_dc_fips"],
        ad_member_offlogon  => ["ad_dc"],
@@ -1110,6 +1111,102 @@ sub setup_ad_member_rfc2307
        return $ret;
 }
 
+sub setup_admem_idmap_autorid
+{
+       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_autorid config...";
+
+       my $member_options = "
+       security = ads
+       workgroup = $dcvars->{DOMAIN}
+       realm = $dcvars->{REALM}
+       idmap config * : backend = autorid
+       idmap config * : range = 1000000-19999999
+       idmap config * : rangesize = 1000000
+
+       # Prevent overridding the provisioned lib/krb5.conf which sets certain
+       # values required for tests to succeed
+       create krb5 conf = no
+";
+
+       my $ret = $self->provision(
+           prefix => $prefix,
+           domain => $dcvars->{DOMAIN},
+           realm => $dcvars->{REALM},
+           server => "ADMEMAUTORID",
+           password => "loCalMemberPass",
+           extra_options => $member_options,
+           resolv_conf => $dcvars->{RESOLV_CONF});
+
+       $ret or return undef;
+
+       $ret->{DOMAIN} = $dcvars->{DOMAIN};
+       $ret->{REALM} = $dcvars->{REALM};
+       $ret->{DOMSID} = $dcvars->{DOMSID};
+
+       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");
+       # Add hosts file for name lookups
+       my $cmd = "NSS_WRAPPER_HOSTS='$ret->{NSS_WRAPPER_HOSTS}' ";
+       $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 .= "RESOLV_CONF=\"$ret->{RESOLV_CONF}\" ";
+       $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(
+               env_vars => $ret,
+               nmbd => "yes",
+               winbindd => "yes",
+               smbd => "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};
+
+       return $ret;
+}
+
 sub setup_ad_member_idmap_rid
 {
        my ($self, $prefix, $dcvars) = @_;
@@ -3935,4 +4032,4 @@ sub wait_for_start_ctdb($$)
        return 1;
 }
 
-1;
+1;
\ No newline at end of file