mirror of
https://github.com/samba-team/samba.git
synced 2025-02-08 05:57:51 +03:00
s3-pdbtest: only test trusted domains when pdb backends offers trusted domain support.
Guenther
This commit is contained in:
parent
c3f9e011ed
commit
4c03f08c0d
@ -230,6 +230,90 @@ static bool samu_correct(struct samu *s1, struct samu *s2)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool test_trusted_domains(TALLOC_CTX *ctx,
|
||||||
|
struct pdb_methods *pdb,
|
||||||
|
bool *error)
|
||||||
|
{
|
||||||
|
NTSTATUS rv;
|
||||||
|
/* test trustdom calls */
|
||||||
|
struct pdb_trusted_domain *td;
|
||||||
|
struct pdb_trusted_domain *new_td;
|
||||||
|
struct trustAuthInOutBlob taiob;
|
||||||
|
struct AuthenticationInformation aia;
|
||||||
|
enum ndr_err_code ndr_err;
|
||||||
|
|
||||||
|
td = talloc_zero(ctx ,struct pdb_trusted_domain);
|
||||||
|
if (!td) {
|
||||||
|
fprintf(stderr, "talloc failed\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
td->domain_name = talloc_strdup(td, TRUST_DOM);
|
||||||
|
td->netbios_name = talloc_strdup(td, TRUST_DOM);
|
||||||
|
if (!td->domain_name || !td->netbios_name) {
|
||||||
|
fprintf(stderr, "talloc failed\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
td->trust_auth_incoming = data_blob_null;
|
||||||
|
|
||||||
|
ZERO_STRUCT(taiob);
|
||||||
|
ZERO_STRUCT(aia);
|
||||||
|
taiob.count = 1;
|
||||||
|
taiob.current.count = 1;
|
||||||
|
taiob.current.array = &aia;
|
||||||
|
unix_to_nt_time(&aia.LastUpdateTime, time(NULL));
|
||||||
|
aia.AuthType = TRUST_AUTH_TYPE_CLEAR;
|
||||||
|
aia.AuthInfo.clear.password = (uint8_t *) talloc_strdup(ctx, TRUST_PWD);
|
||||||
|
aia.AuthInfo.clear.size = strlen(TRUST_PWD);
|
||||||
|
|
||||||
|
taiob.previous.count = 0;
|
||||||
|
taiob.previous.array = NULL;
|
||||||
|
|
||||||
|
ndr_err = ndr_push_struct_blob(&td->trust_auth_outgoing,
|
||||||
|
td, &taiob,
|
||||||
|
(ndr_push_flags_fn_t) ndr_push_trustAuthInOutBlob);
|
||||||
|
if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
|
||||||
|
fprintf(stderr, "ndr_push_struct_blob failed.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
td->trust_direction = LSA_TRUST_DIRECTION_OUTBOUND;
|
||||||
|
td->trust_type = LSA_TRUST_TYPE_DOWNLEVEL;
|
||||||
|
td->trust_attributes = 0;
|
||||||
|
td->trust_forest_trust_info = data_blob_null;
|
||||||
|
|
||||||
|
rv = pdb->set_trusted_domain(pdb, TRUST_DOM, td);
|
||||||
|
if (!NT_STATUS_IS_OK(rv)) {
|
||||||
|
fprintf(stderr, "Error in set_trusted_domain %s\n",
|
||||||
|
get_friendly_nt_error_msg(rv));
|
||||||
|
*error = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
rv = pdb->get_trusted_domain(pdb, ctx, TRUST_DOM, &new_td);
|
||||||
|
if (!NT_STATUS_IS_OK(rv)) {
|
||||||
|
fprintf(stderr, "Error in set_trusted_domain %s\n",
|
||||||
|
get_friendly_nt_error_msg(rv));
|
||||||
|
*error = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!strequal(td->domain_name, new_td->domain_name) ||
|
||||||
|
!strequal(td->netbios_name, new_td->netbios_name) ||
|
||||||
|
!dom_sid_equal(&td->security_identifier,
|
||||||
|
&new_td->security_identifier) ||
|
||||||
|
td->trust_direction != new_td->trust_direction ||
|
||||||
|
td->trust_type != new_td->trust_type ||
|
||||||
|
td->trust_attributes != new_td->trust_attributes ||
|
||||||
|
td->trust_auth_incoming.length != new_td->trust_auth_incoming.length ||
|
||||||
|
td->trust_forest_trust_info.length != new_td->trust_forest_trust_info.length ||
|
||||||
|
data_blob_cmp(&td->trust_auth_outgoing, &new_td->trust_auth_outgoing) != 0) {
|
||||||
|
fprintf(stderr, "Old and new trusdet domain data do not match\n");
|
||||||
|
*error = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
@ -255,13 +339,6 @@ int main(int argc, char **argv)
|
|||||||
POPT_TABLEEND
|
POPT_TABLEEND
|
||||||
};
|
};
|
||||||
|
|
||||||
/* test trustdom calls */
|
|
||||||
struct pdb_trusted_domain *td;
|
|
||||||
struct pdb_trusted_domain *new_td;
|
|
||||||
struct trustAuthInOutBlob taiob;
|
|
||||||
struct AuthenticationInformation aia;
|
|
||||||
enum ndr_err_code ndr_err;
|
|
||||||
|
|
||||||
load_case_tables();
|
load_case_tables();
|
||||||
|
|
||||||
pc = poptGetContext("pdbtest", argc, (const char **) argv,
|
pc = poptGetContext("pdbtest", argc, (const char **) argv,
|
||||||
@ -381,73 +458,11 @@ int main(int argc, char **argv)
|
|||||||
get_friendly_nt_error_msg(rv));
|
get_friendly_nt_error_msg(rv));
|
||||||
}
|
}
|
||||||
|
|
||||||
td = talloc_zero(ctx ,struct pdb_trusted_domain);
|
if (pdb_capabilities() & PDB_CAP_TRUSTED_DOMAINS_EX) {
|
||||||
if (!td) {
|
if (!test_trusted_domains(ctx, pdb, &error)) {
|
||||||
fprintf(stderr, "talloc failed\n");
|
fprintf(stderr, "failed testing trusted domains.\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
td->domain_name = talloc_strdup(td, TRUST_DOM);
|
|
||||||
td->netbios_name = talloc_strdup(td, TRUST_DOM);
|
|
||||||
if (!td->domain_name || !td->netbios_name) {
|
|
||||||
fprintf(stderr, "talloc failed\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
td->trust_auth_incoming = data_blob_null;
|
|
||||||
|
|
||||||
ZERO_STRUCT(taiob);
|
|
||||||
ZERO_STRUCT(aia);
|
|
||||||
taiob.count = 1;
|
|
||||||
taiob.current.count = 1;
|
|
||||||
taiob.current.array = &aia;
|
|
||||||
unix_to_nt_time(&aia.LastUpdateTime, time(NULL));
|
|
||||||
aia.AuthType = TRUST_AUTH_TYPE_CLEAR;
|
|
||||||
aia.AuthInfo.clear.password = (uint8_t *) talloc_strdup(ctx, TRUST_PWD);
|
|
||||||
aia.AuthInfo.clear.size = strlen(TRUST_PWD);
|
|
||||||
|
|
||||||
taiob.previous.count = 0;
|
|
||||||
taiob.previous.array = NULL;
|
|
||||||
|
|
||||||
ndr_err = ndr_push_struct_blob(&td->trust_auth_outgoing,
|
|
||||||
td, &taiob,
|
|
||||||
(ndr_push_flags_fn_t) ndr_push_trustAuthInOutBlob);
|
|
||||||
if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
|
|
||||||
fprintf(stderr, "ndr_push_struct_blob failed.\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
td->trust_direction = LSA_TRUST_DIRECTION_OUTBOUND;
|
|
||||||
td->trust_type = LSA_TRUST_TYPE_DOWNLEVEL;
|
|
||||||
td->trust_attributes = 0;
|
|
||||||
td->trust_forest_trust_info = data_blob_null;
|
|
||||||
|
|
||||||
rv = pdb->set_trusted_domain(pdb, TRUST_DOM, td);
|
|
||||||
if (!NT_STATUS_IS_OK(rv)) {
|
|
||||||
fprintf(stderr, "Error in set_trusted_domain %s\n",
|
|
||||||
get_friendly_nt_error_msg(rv));
|
|
||||||
error = True;
|
|
||||||
}
|
|
||||||
|
|
||||||
rv = pdb->get_trusted_domain(pdb, ctx, TRUST_DOM, &new_td);
|
|
||||||
if (!NT_STATUS_IS_OK(rv)) {
|
|
||||||
fprintf(stderr, "Error in set_trusted_domain %s\n",
|
|
||||||
get_friendly_nt_error_msg(rv));
|
|
||||||
error = True;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!strequal(td->domain_name, new_td->domain_name) ||
|
|
||||||
!strequal(td->netbios_name, new_td->netbios_name) ||
|
|
||||||
!dom_sid_equal(&td->security_identifier,
|
|
||||||
&new_td->security_identifier) ||
|
|
||||||
td->trust_direction != new_td->trust_direction ||
|
|
||||||
td->trust_type != new_td->trust_type ||
|
|
||||||
td->trust_attributes != new_td->trust_attributes ||
|
|
||||||
td->trust_auth_incoming.length != new_td->trust_auth_incoming.length ||
|
|
||||||
td->trust_forest_trust_info.length != new_td->trust_forest_trust_info.length ||
|
|
||||||
data_blob_cmp(&td->trust_auth_outgoing, &new_td->trust_auth_outgoing) != 0) {
|
|
||||||
fprintf(stderr, "Old and new trusdet domain data do not match\n");
|
|
||||||
error = True;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TALLOC_FREE(ctx);
|
TALLOC_FREE(ctx);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user