Skip to content

Id/Idref QName Namespace Support (read-only)#186

Closed
usrlocalben wants to merge 21 commits intoSTIXProject:masterfrom
usrlocalben:idns
Closed

Id/Idref QName Namespace Support (read-only)#186
usrlocalben wants to merge 21 commits intoSTIXProject:masterfrom
usrlocalben:idns

Conversation

@usrlocalben
Copy link
Contributor

(This pull request is more about receiving feedback -- I don't expect this to be merged as-is)

Here is (read-only) support for dereferencing the namespaces for id/idref QNames.

  • top-level STIX object id's only
  • read-only -- no path to send the id namespace back to the bindings or serialize them

The namespace is read from the nsmap when fetching id/idref, and returned as a (id,namespace) pair.

The high-level object makes this available as id_ns and idref_ns.

It also adds idref_ns as an init parameter for the high-level objects because it's useful in our workflow -- however, it is only an in-memory value.

I can submit the matching patch for python-cybox, but it's the same pattern shown here.

id & idref attributes are QNames, so the associated xmlns entries need
to be resolved properly.

This patches all STIX top-level objects & STIXPackage to read the
namespace info from the parser nsmap, and make it available with
id/idref as a pair.

The api objects from_obj() is modified to retrieve the pair and the
namespace is available as id_ns & idref_ns.

Read-only -- no write support.
High-level object support for setting the idref_ns.

In-memory only -- No serialization support.
Conflicts:
	stix/campaign/__init__.py
	stix/coa/__init__.py
	stix/exploit_target/__init__.py
	stix/incident/__init__.py
	stix/indicator/indicator.py
	stix/threat_actor/__init__.py
	stix/ttp/__init__.py
Since the idgen namespace settings are at the module-level, they could
cause thread-safety issues, depending on the use.

This patch moves the idgen gathering up to the to_xml() and out of
nsparser, and optional by using the include_idgen=T/F parameter to
to_xml.

To implement a thread-safe to_xml() call, the caller should disable the
include_idgen, and provide the needed namespaces using the ns_dict
parameter.
Conflicts:
	stix/campaign/__init__.py
	stix/coa/__init__.py
	stix/core/stix_package.py
	stix/exploit_target/__init__.py
	stix/incident/__init__.py
	stix/indicator/indicator.py
	stix/threat_actor/__init__.py
	stix/ttp/__init__.py
During encode(), some write operations are decorated with
encode(ExternalEncoding), but others are not.

If any unicode strings end up in the non-encoded outputs, the StringIO
buffer accumulates a mix of String and Unicode, which it can't handle.
Conflicts:
	stix/bindings/stix_common.py
	stix/bindings/stix_core.py
	stix/core/stix_package.py
Conflicts:
	stix/base.py
	stix/utils/nsparser.py
@gtback
Copy link
Contributor

gtback commented Jul 15, 2016

This branch has gotten out of date (that's our fault, not yours), and a lot has happened in our namespace code in the mean time. I think it would be easier to reimplement than update this code.

Thanks for the contribution @benjamin9999. This is indeed a cool feature!

@gtback gtback closed this Jul 15, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants