コード例 #1
0
ファイル: internal_dns.c プロジェクト: AIdrifter/samba
static struct dns_connection *setup_connection(struct torture_context *tctx)
{
	DNS_ERROR err;
	struct dns_connection *conn;

	err = dns_open_connection(getenv("DC_SERVER_IP"), DNS_TCP, tctx, &conn);
	if (!ERR_DNS_IS_OK(err)) {
		printf("Failed to open connection to DNS server\n");
		return NULL;
	}

	return conn;
}
コード例 #2
0
ファイル: dnsgss.c プロジェクト: amitay/samba
DNS_ERROR dns_negotiate_sec_ctx( const char *target_realm,
				 const char *servername,
				 const char *keyname,
				 gss_ctx_id_t *gss_ctx,
				 enum dns_ServerType srv_type )
{
	OM_uint32 major, minor;

	char *upcaserealm, *targetname;
	DNS_ERROR err;

	gss_buffer_desc input_name;
	struct dns_connection *conn;

	gss_name_t targ_name;

	gss_OID_desc nt_host_oid_desc =
		{10, (const char *)"\x2a\x86\x48\x86\xf7\x12\x01\x02\x02\x01"};

	TALLOC_CTX *mem_ctx;

	if (!(mem_ctx = talloc_init("dns_negotiate_sec_ctx"))) {
		return ERROR_DNS_NO_MEMORY;
	}

	err = dns_open_connection( servername, DNS_TCP, mem_ctx, &conn );
	if (!ERR_DNS_IS_OK(err)) goto error;

	if (!(upcaserealm = talloc_strdup(mem_ctx, target_realm))) {
		err = ERROR_DNS_NO_MEMORY;
		goto error;
	}

	strupr(upcaserealm);

	if (!(targetname = talloc_asprintf(mem_ctx, "dns/%s@%s",
					   servername, upcaserealm))) {
		err = ERROR_DNS_NO_MEMORY;
		goto error;
	}

	input_name.value = targetname;
	input_name.length = strlen(targetname);

	major = gss_import_name( &minor, &input_name,
				 &nt_host_oid_desc, &targ_name );

	if (major) {
		err = ERROR_DNS_GSS_ERROR;
		goto error;
	}

	err = dns_negotiate_gss_ctx_int(mem_ctx, conn, keyname, 
					targ_name, gss_ctx, srv_type );
	
	gss_release_name( &minor, &targ_name );

 error:
	TALLOC_FREE(mem_ctx);

	return err;
}