Code

sysdb.git
9 years agoRelease SysDB 0.7.0. sysdb-0.7.0
Sebastian Harl [Sat, 21 Feb 2015 14:03:11 +0000 (15:03 +0100)]
Release SysDB 0.7.0.

9 years agoReleaseNotes: Set 0.7.0 release date to 2015-02-21.
Sebastian Harl [Sat, 21 Feb 2015 14:02:26 +0000 (15:02 +0100)]
ReleaseNotes: Set 0.7.0 release date to 2015-02-21.

9 years agoReleaseNotes: Added draft for the 0.7.0 release.
Sebastian Harl [Thu, 19 Feb 2015 22:06:49 +0000 (23:06 +0100)]
ReleaseNotes: Added draft for the 0.7.0 release.

9 years agostore::network: Reconnect after losing the connection to the remote side.
Sebastian Harl [Wed, 18 Feb 2015 20:32:48 +0000 (21:32 +0100)]
store::network: Reconnect after losing the connection to the remote side.

9 years agostore::network: Added support for SSL configuration options.
Sebastian Harl [Wed, 18 Feb 2015 12:05:24 +0000 (13:05 +0100)]
store::network: Added support for SSL configuration options.

9 years agossl utils: During shutdown, destroy mutexes as the last step.
Sebastian Harl [Mon, 16 Feb 2015 08:04:18 +0000 (09:04 +0100)]
ssl utils: During shutdown, destroy mutexes as the last step.

Even ERR_free_strings() may call CRYPTO_lock.

9 years agostore::network: Use INFO level for an informational message.
Sebastian Harl [Mon, 16 Feb 2015 07:58:38 +0000 (08:58 +0100)]
store::network: Use INFO level for an informational message.

9 years agossl: Register OpenSSL thread-ID and locking callbacks.
Sebastian Harl [Tue, 10 Feb 2015 07:46:41 +0000 (08:46 +0100)]
ssl: Register OpenSSL thread-ID and locking callbacks.

This is required for multi-threaded applications. Else, they "will crash at
random".

9 years agoSSL utils: Added init() and shutdown() functions for global setup/shutdown.
Sebastian Harl [Mon, 9 Feb 2015 17:43:39 +0000 (18:43 +0100)]
SSL utils: Added init() and shutdown() functions for global setup/shutdown.

Use those functions in sysdb and sysdbd instead of calling the OpenSSL
functions directly.

9 years agovalgrind.suppress: Ignore a Memcheck:Cond error in libcrypto.
Sebastian Harl [Tue, 3 Feb 2015 13:26:20 +0000 (14:26 +0100)]
valgrind.suppress: Ignore a Memcheck:Cond error in libcrypto.

This happens with the libssl version on Travis.

9 years agot/integration/: Added simple SSL tests.
Sebastian Harl [Sun, 1 Feb 2015 19:31:14 +0000 (20:31 +0100)]
t/integration/: Added simple SSL tests.

9 years agoparser_test: Added various tests for STORE commands.
Sebastian Harl [Sun, 1 Feb 2015 18:18:51 +0000 (19:18 +0100)]
parser_test: Added various tests for STORE commands.

9 years agoREADME: Add libssl to prerequisites.
Sebastian Harl [Sun, 1 Feb 2015 17:48:04 +0000 (18:48 +0100)]
README: Add libssl to prerequisites.

9 years agosysdb(1), sysdbd(1): Document client authentication.
Sebastian Harl [Sun, 1 Feb 2015 17:44:54 +0000 (18:44 +0100)]
sysdb(1), sysdbd(1): Document client authentication.

9 years agosysdb(1), sysdbd(1): Document files used by the tools by default.
Sebastian Harl [Sun, 1 Feb 2015 16:50:37 +0000 (17:50 +0100)]
sysdb(1), sysdbd(1): Document files used by the tools by default.

9 years agosysdb(1): Document SSL related command line options.
Sebastian Harl [Sun, 1 Feb 2015 16:41:31 +0000 (17:41 +0100)]
sysdb(1): Document SSL related command line options.

9 years agosysdbd.conf(5): Document the Listen SSL options.
Sebastian Harl [Sun, 1 Feb 2015 16:17:59 +0000 (17:17 +0100)]
sysdbd.conf(5): Document the Listen SSL options.

9 years agofrontend, client: Properly support IPv6 when handling address strings.
Sebastian Harl [Sun, 1 Feb 2015 16:04:09 +0000 (17:04 +0100)]
frontend, client: Properly support IPv6 when handling address strings.

9 years agoclient: Prefix all log messages with "client:".
Sebastian Harl [Sun, 1 Feb 2015 11:00:12 +0000 (12:00 +0100)]
client: Prefix all log messages with "client:".

9 years agosysdb: Add -A option to specify a CA certificates file.
Sebastian Harl [Sun, 1 Feb 2015 10:55:55 +0000 (11:55 +0100)]
sysdb: Add -A option to specify a CA certificates file.

9 years agoUnload all plugins when shutting down sysdbd.
Sebastian Harl [Sun, 1 Feb 2015 10:31:23 +0000 (11:31 +0100)]
Unload all plugins when shutting down sysdbd.

This will destruct all registered user-data objects, thus properly shutting
down all internal plugin state (e.g. connections to other systems).

9 years agocollectd::unixsock: Fixed a memory leak happening when unloading the module.
Sebastian Harl [Sun, 1 Feb 2015 10:30:09 +0000 (11:30 +0100)]
collectd::unixsock: Fixed a memory leak happening when unloading the module.

9 years agoclient: Check the remote peer name.
Sebastian Harl [Sun, 1 Feb 2015 10:19:54 +0000 (11:19 +0100)]
client: Check the remote peer name.

9 years agosysdbd-syslog(5): Documented LogLevel configuration option.
Sebastian Harl [Sun, 1 Feb 2015 09:45:46 +0000 (10:45 +0100)]
sysdbd-syslog(5): Documented LogLevel configuration option.

9 years agoplugin: Fixed log message for newly registered config callbacks.
Sebastian Harl [Sun, 1 Feb 2015 09:39:55 +0000 (10:39 +0100)]
plugin: Fixed log message for newly registered config callbacks.

9 years agosyslog plugin: Make log-level configurable.
Sebastian Harl [Sun, 1 Feb 2015 09:38:38 +0000 (10:38 +0100)]
syslog plugin: Make log-level configurable.

9 years agoerror utils: Add sdb_error_parse_priority().
Sebastian Harl [Sun, 1 Feb 2015 09:36:18 +0000 (10:36 +0100)]
error utils: Add sdb_error_parse_priority().

9 years agosysdbd: Add SSL{Certificate,CertificateKey,CACertificates} config options.
Sebastian Harl [Sat, 31 Jan 2015 14:54:04 +0000 (15:54 +0100)]
sysdbd: Add SSL{Certificate,CertificateKey,CACertificates} config options.

9 years agofrontend: Support custom SSL options for each listener.
Sebastian Harl [Sat, 31 Jan 2015 14:51:47 +0000 (15:51 +0100)]
frontend: Support custom SSL options for each listener.

9 years agosysdb: Added -K and -C options to specify SSL key and cert files.
Sebastian Harl [Fri, 30 Jan 2015 15:04:48 +0000 (16:04 +0100)]
sysdb: Added -K and -C options to specify SSL key and cert files.

9 years agosysdb: Use SSL keys and certs in ~/.config/sysdb/ssl/ by default.
Sebastian Harl [Fri, 30 Jan 2015 12:43:19 +0000 (13:43 +0100)]
sysdb: Use SSL keys and certs in ~/.config/sysdb/ssl/ by default.

9 years agoutils os: Add sdb_realpath().
Sebastian Harl [Fri, 30 Jan 2015 12:42:27 +0000 (13:42 +0100)]
utils os: Add sdb_realpath().

This function is similar to realpath() but also expands ~/ to the current
user's home directory.

9 years agoSSL utils: Pass a constant options object to all constructors.
Sebastian Harl [Fri, 30 Jan 2015 11:35:20 +0000 (12:35 +0100)]
SSL utils: Pass a constant options object to all constructors.

9 years agosysdb: Add and use sdb_input_reset().
Sebastian Harl [Fri, 30 Jan 2015 11:01:48 +0000 (12:01 +0100)]
sysdb: Add and use sdb_input_reset().

This simplifies cleanup.

9 years agoMove sdb_get_homedir() from tools/sysdb to utils/os.
Sebastian Harl [Fri, 30 Jan 2015 10:49:20 +0000 (11:49 +0100)]
Move sdb_get_homedir() from tools/sysdb to utils/os.

9 years agoSSL utils: Include the relevant filename in all error messages.
Sebastian Harl [Fri, 30 Jan 2015 10:27:16 +0000 (11:27 +0100)]
SSL utils: Include the relevant filename in all error messages.

9 years agoSSL utils: Add sdb_ssl_free_options().
Sebastian Harl [Fri, 30 Jan 2015 10:26:49 +0000 (11:26 +0100)]
SSL utils: Add sdb_ssl_free_options().

9 years agoclient: Make SSL options configurable.
Sebastian Harl [Fri, 30 Jan 2015 10:12:12 +0000 (11:12 +0100)]
client: Make SSL options configurable.

9 years agoconfigure: Where available, include version information in the summary.
Sebastian Harl [Wed, 28 Jan 2015 15:35:37 +0000 (16:35 +0100)]
configure: Where available, include version information in the summary.

9 years agofrontend: Log an INFO message about which listener sockets are in use.
Sebastian Harl [Wed, 28 Jan 2015 15:20:19 +0000 (16:20 +0100)]
frontend: Log an INFO message about which listener sockets are in use.

9 years agoclient, sysdb: Let TCP connection use SSL.
Sebastian Harl [Wed, 28 Jan 2015 15:19:24 +0000 (16:19 +0100)]
client, sysdb: Let TCP connection use SSL.

9 years agoclient: Don't use select() before reading from a client connection.
Sebastian Harl [Wed, 28 Jan 2015 15:17:47 +0000 (16:17 +0100)]
client: Don't use select() before reading from a client connection.

This doesn't work well if the connection buffers data (like with the upcoming
SSL support).

9 years agofrontend, sysdbd: Let all TCP connections use SSL.
Sebastian Harl [Wed, 28 Jan 2015 15:14:23 +0000 (16:14 +0100)]
frontend, sysdbd: Let all TCP connections use SSL.

Client certificate checks are enforced and the client cert's common name (CN)
is used as the peer name.

9 years agoSSL utils: Added helper functions for managing OpenSSL servers and clients.
Sebastian Harl [Wed, 28 Jan 2015 15:07:50 +0000 (16:07 +0100)]
SSL utils: Added helper functions for managing OpenSSL servers and clients.

The module provides session management for OpenSSL servers and clients and
helper functions for I/O operations.

9 years agostore::network plugin: Fixed a minor memory leak.
Sebastian Harl [Sun, 25 Jan 2015 05:28:51 +0000 (21:28 -0800)]
store::network plugin: Fixed a minor memory leak.

9 years agovalgrind.suppress: Add a memory leak reported for some dl helper.
Sebastian Harl [Sun, 25 Jan 2015 05:28:01 +0000 (21:28 -0800)]
valgrind.suppress: Add a memory leak reported for some dl helper.

9 years agoRemoved a spammy and now unnecessary debug log message.
Sebastian Harl [Mon, 19 Jan 2015 05:02:31 +0000 (21:02 -0800)]
Removed a spammy and now unnecessary debug log message.

9 years agointegration: Use store::network in the query tests.
Sebastian Harl [Sat, 17 Jan 2015 23:18:36 +0000 (15:18 -0800)]
integration: Use store::network in the query tests.

Set up a second SysDB instance which receives all data from the other
instance. Query the receiver instead of the collector.

9 years agointegration: Split off mock_timeseries from mock_plugin.
Sebastian Harl [Sat, 17 Jan 2015 23:17:09 +0000 (15:17 -0800)]
integration: Split off mock_timeseries from mock_plugin.

9 years agofrontend: Trigger the main thread after putting a connection back in the list.
Sebastian Harl [Sat, 17 Jan 2015 19:24:22 +0000 (11:24 -0800)]
frontend: Trigger the main thread after putting a connection back in the list.

Else, we'd have pauses of up to a second (select timeout) between processing
subsequent requests from a client because the main thread didn't notice that
an open connection was put back into the waiting queue.

9 years agostore::network: Add a store writer plugin sending objects over the network.
Sebastian Harl [Sat, 17 Jan 2015 00:27:07 +0000 (01:27 +0100)]
store::network: Add a store writer plugin sending objects over the network.

The plugin supports sending data to one or more other SysDB instances using
the wire-format of the STORE command.

9 years agostore: Don't report an error in scan() if the store is still empty.
Sebastian Harl [Sat, 17 Jan 2015 00:26:07 +0000 (01:26 +0100)]
store: Don't report an error in scan() if the store is still empty.

9 years agosysdb: Simplified prompt used for continuation lines.
Sebastian Harl [Sat, 17 Jan 2015 00:22:34 +0000 (01:22 +0100)]
sysdb: Simplified prompt used for continuation lines.

9 years agofrontend/store: Free dynamically allocated memory of attribute values.
Sebastian Harl [Sat, 17 Jan 2015 00:19:47 +0000 (01:19 +0100)]
frontend/store: Free dynamically allocated memory of attribute values.

9 years agofrontend/store: Fixed parsing of STORE attribute commands.
Sebastian Harl [Sat, 17 Jan 2015 00:08:06 +0000 (01:08 +0100)]
frontend/store: Fixed parsing of STORE attribute commands.

In this case, the object type is a bit-wise OR of the parent type and the
attribute type.

9 years agofrontend/store: Fixed parsing of STORE command.
Sebastian Harl [Fri, 16 Jan 2015 23:57:45 +0000 (00:57 +0100)]
frontend/store: Fixed parsing of STORE command.

After parsing the type, keep it still around in the current buffer. The
sdb_proto_unmarshal_<type> functions expect to find it as well.

9 years agoplugin: Let store writer plugin object inherit from generic plugin objects.
Sebastian Harl [Fri, 16 Jan 2015 23:46:23 +0000 (00:46 +0100)]
plugin: Let store writer plugin object inherit from generic plugin objects.

Else, we cannot use them in the same way.

9 years agoclient: Use sdb_client_rpc in sdb_client_connect.
Sebastian Harl [Fri, 16 Jan 2015 22:46:25 +0000 (23:46 +0100)]
client: Use sdb_client_rpc in sdb_client_connect.

9 years agoclient: Added sdb_client_rpc.
Sebastian Harl [Fri, 16 Jan 2015 22:45:23 +0000 (23:45 +0100)]
client: Added sdb_client_rpc.

This function handles a full RPC call: it sends a message to the server and
waits for the reply. While doing so, it handles all asynchronous log messages.
That is, it'll return the actual result status of the command.

9 years agostore: Pass on all stored objects to store writer plugins.
Sebastian Harl [Fri, 16 Jan 2015 21:10:46 +0000 (22:10 +0100)]
store: Pass on all stored objects to store writer plugins.

9 years agocore: Add the store writer plugin type.
Sebastian Harl [Fri, 16 Jan 2015 21:03:52 +0000 (22:03 +0100)]
core: Add the store writer plugin type.

A plugin may now provide an implementation of a store by providing a set of
callbacks. For now, this is only about writing to a store. Queries are not
supported through this interface.

9 years agoplugin: Reload time-series fetcher callbacks as well.
Sebastian Harl [Fri, 16 Jan 2015 20:30:29 +0000 (21:30 +0100)]
plugin: Reload time-series fetcher callbacks as well.

9 years agointegration/config.sh: Add a test to load and reload a plugin.
Sebastian Harl [Fri, 16 Jan 2015 20:26:17 +0000 (21:26 +0100)]
integration/config.sh: Add a test to load and reload a plugin.

9 years agot/integration: Add a simple time-series fetcher test.
Sebastian Harl [Fri, 16 Jan 2015 20:22:06 +0000 (21:22 +0100)]
t/integration: Add a simple time-series fetcher test.

9 years agoconnection_test: Updated according to latest changes.
Sebastian Harl [Fri, 16 Jan 2015 20:15:20 +0000 (21:15 +0100)]
connection_test: Updated according to latest changes.

9 years agosysdbql(7): Document the STORE commands.
Sebastian Harl [Fri, 16 Jan 2015 13:52:27 +0000 (14:52 +0100)]
sysdbql(7): Document the STORE commands.

9 years agoconnection: Log peer information after accepting a connection.
Sebastian Harl [Fri, 16 Jan 2015 13:31:42 +0000 (14:31 +0100)]
connection: Log peer information after accepting a connection.

9 years agosysdb: Use the current user's homedir rather than the SysDB user.
Sebastian Harl [Fri, 16 Jan 2015 13:16:12 +0000 (14:16 +0100)]
sysdb: Use the current user's homedir rather than the SysDB user.

9 years agoconnection: Let sdb_connection_accept() handle all connection setup.
Sebastian Harl [Thu, 15 Jan 2015 08:05:57 +0000 (09:05 +0100)]
connection: Let sdb_connection_accept() handle all connection setup.

… rather than having it split up between the caller and accept().

9 years agoclient: Add support for TCP connections.
Sebastian Harl [Wed, 14 Jan 2015 21:51:38 +0000 (22:51 +0100)]
client: Add support for TCP connections.

9 years agofrontend: Add support for TCP connections.
Sebastian Harl [Wed, 14 Jan 2015 21:47:10 +0000 (22:47 +0100)]
frontend: Add support for TCP connections.

This is the new default listener type (unless the listen address starts with a
slash in which case a UNIXSOCK connection is used).

This does not support any kind of peer lookup yet. Instead, it'll fully trust
the client for now and accept any username. In the future, this will be
configurable and multiple mechanisms (e.g. ident, SSL cert) will be supported.

9 years agofrontend: Make peer detection more flexible.
Sebastian Harl [Wed, 14 Jan 2015 21:36:38 +0000 (22:36 +0100)]
frontend: Make peer detection more flexible.

It's now a property of a listener implementation.

Moved the unixsock implementation over from frontend/connection to
frontend/sock.

9 years agoos utils: Fixed a typo in the UDP resolver implementation.
Sebastian Harl [Wed, 14 Jan 2015 21:02:31 +0000 (22:02 +0100)]
os utils: Fixed a typo in the UDP resolver implementation.

9 years agofrontend/sock: Simplified internal address handling.
Sebastian Harl [Wed, 14 Jan 2015 21:01:03 +0000 (22:01 +0100)]
frontend/sock: Simplified internal address handling.

Strip the <type>: prefix early. Else, we'd have to strip it off over and over
again when working with the address string.

9 years agoconnection: Update the connection name as early as possible.
Sebastian Harl [Wed, 14 Jan 2015 20:56:22 +0000 (21:56 +0100)]
connection: Update the connection name as early as possible.

This is just to avoid weird error messages if setting up the connection
failed.

9 years agoos utils: Added sdb_resolve().
Sebastian Harl [Mon, 12 Jan 2015 17:43:35 +0000 (18:43 +0100)]
os utils: Added sdb_resolve().

This is a convenient wrapper around getaddrinfo().

9 years agoclient: Make I/O handling more flexible.
Sebastian Harl [Sun, 11 Jan 2015 13:43:14 +0000 (14:43 +0100)]
client: Make I/O handling more flexible.

9 years agofrontend: Make connection I/O handling more flexible.
Sebastian Harl [Sat, 10 Jan 2015 15:28:20 +0000 (16:28 +0100)]
frontend: Make connection I/O handling more flexible.

That'll allow to create connection objects which require special I/O
operations.

9 years agosysdb: Accept status=OK after sending a query.
Sebastian Harl [Sat, 10 Jan 2015 13:03:36 +0000 (14:03 +0100)]
sysdb: Accept status=OK after sending a query.

OK is sent back on successful STORE commands.

9 years agofrontend/grammar: Added 'STORE host|service|metric [attribute]' commands.
Sebastian Harl [Sat, 10 Jan 2015 13:02:31 +0000 (14:02 +0100)]
frontend/grammar: Added 'STORE host|service|metric [attribute]' commands.

This implements the STORE command in SysQL.

9 years agofrontend: Add support for SDB_CONNECTION_STORE.
Sebastian Harl [Sat, 10 Jan 2015 13:00:14 +0000 (14:00 +0100)]
frontend: Add support for SDB_CONNECTION_STORE.

The front-end now supports parsing and executing STORE commands.

9 years agostore: Let store_metric() accept non-NULL but empty metric-store.
Sebastian Harl [Sat, 10 Jan 2015 12:33:13 +0000 (13:33 +0100)]
store: Let store_metric() accept non-NULL but empty metric-store.

9 years agoproto: Added support for unmarshaling hosts/services/metrics/attributes.
Sebastian Harl [Fri, 2 Jan 2015 16:52:52 +0000 (17:52 +0100)]
proto: Added support for unmarshaling hosts/services/metrics/attributes.

9 years agoproto: Let unmarshaled string/binary data point into the provided buffer.
Sebastian Harl [Fri, 2 Jan 2015 15:09:14 +0000 (16:09 +0100)]
proto: Let unmarshaled string/binary data point into the provided buffer.

The caller may decide whether to keep a copy or not.

9 years agoutils unixsock: Avoid memory allocations in common cases.
Sebastian Harl [Fri, 2 Jan 2015 14:53:54 +0000 (15:53 +0100)]
utils unixsock: Avoid memory allocations in common cases.

9 years agodata: Let sdb_data_parse() accept a const string and copy it if necessary.
Sebastian Harl [Fri, 2 Jan 2015 14:47:24 +0000 (15:47 +0100)]
data: Let sdb_data_parse() accept a const string and copy it if necessary.

Given that we need a copy for regex values anyway, this is more consistent.

9 years agofrontend/scanner: Pass the right size to strncat.
Sebastian Harl [Fri, 2 Jan 2015 11:56:14 +0000 (12:56 +0100)]
frontend/scanner: Pass the right size to strncat.

Thanks to clang for identifying this :-)

9 years agosysdb/scanner.l: Include ctype.h; needed for isspace().
Sebastian Harl [Fri, 2 Jan 2015 11:55:53 +0000 (12:55 +0100)]
sysdb/scanner.l: Include ctype.h; needed for isspace().

9 years agoLink librt into libsysdbclient.
Sebastian Harl [Fri, 2 Jan 2015 11:44:03 +0000 (12:44 +0100)]
Link librt into libsysdbclient.

That's required for clock_gettime.

9 years agoproto: Added sdb_proto_unmarshal_data().
Sebastian Harl [Fri, 2 Jan 2015 11:35:28 +0000 (12:35 +0100)]
proto: Added sdb_proto_unmarshal_data().

This function decodes a datum from the wire format.

9 years agodata: Free binary and regex array values as well.
Sebastian Harl [Fri, 2 Jan 2015 11:33:50 +0000 (12:33 +0100)]
data: Free binary and regex array values as well.

9 years agodata: Let sdb_data_cmp() support all array types.
Sebastian Harl [Fri, 2 Jan 2015 10:51:37 +0000 (11:51 +0100)]
data: Let sdb_data_cmp() support all array types.

9 years agoproto: Let unmarshal functions return the number of bytes processed.
Sebastian Harl [Mon, 29 Dec 2014 15:53:44 +0000 (16:53 +0100)]
proto: Let unmarshal functions return the number of bytes processed.

That's a more flexible and straight-forward interface allowing callers to not
care about the size of the expected data.

9 years agoproto: Added support for marshaling attribute objects.
Sebastian Harl [Thu, 25 Dec 2014 17:21:02 +0000 (18:21 +0100)]
proto: Added support for marshaling attribute objects.

9 years agoproto: Use hton instead of ntoh functions in marshal functions.
Sebastian Harl [Wed, 24 Dec 2014 15:49:55 +0000 (16:49 +0100)]
proto: Use hton instead of ntoh functions in marshal functions.

D'oh!

9 years agoproto: Define a wire format for host/service/metric and add marshal functions.
Sebastian Harl [Wed, 24 Dec 2014 15:47:18 +0000 (16:47 +0100)]
proto: Define a wire format for host/service/metric and add marshal functions.

9 years agoproto: Don't include a string's length in the wire format.
Sebastian Harl [Wed, 24 Dec 2014 15:40:29 +0000 (16:40 +0100)]
proto: Don't include a string's length in the wire format.

That's not necessary given that all strings are null-terminated.

9 years agoAdd a suffix to integer marshal/unmarshal functions specifying the int size.
Sebastian Harl [Wed, 24 Dec 2014 11:58:02 +0000 (12:58 +0100)]
Add a suffix to integer marshal/unmarshal functions specifying the int size.

9 years agoproto: Add support for marshaling all data types.
Sebastian Harl [Tue, 23 Dec 2014 17:47:21 +0000 (18:47 +0100)]
proto: Add support for marshaling all data types.

9 years agoproto: Add support for marshaling regex types.
Sebastian Harl [Tue, 23 Dec 2014 17:25:57 +0000 (18:25 +0100)]
proto: Add support for marshaling regex types.

That is, marshal the regex's raw string to be recompiled by the receiver.