/* Test one: write the data as method call to a server */
assert_se(socketpair(AF_UNIX, SOCK_STREAM, 0, server_pair) >= 0);
assert_se(sd_varlink_server_new(&s, 0) >= 0);
+ assert_se(sd_varlink_server_set_info(s, "Vendor", "Product", "Version", "URL") >= 0);
assert_se(sd_varlink_server_set_description(s, "myserver") >= 0);
assert_se(sd_varlink_server_attach_event(s, e, 0) >= 0);
assert_se(sd_varlink_server_add_connection(s, server_pair[0], NULL) >= 0);
#include "varlink-internal.h"
#include "varlink-io.systemd.h"
#include "varlink-org.varlink.service.h"
-#include "version.h"
#define VARLINK_DEFAULT_CONNECTIONS_MAX 4096U
#define VARLINK_DEFAULT_CONNECTIONS_PER_UID_MAX 1024U
void *userdata) {
_cleanup_strv_free_ char **interfaces = NULL;
- _cleanup_free_ char *product = NULL;
int r;
assert(link);
+ assert(link->server);
if (sd_json_variant_elements(parameters) != 0)
return sd_varlink_error_invalid_parameter(link, parameters);
- product = strjoin("systemd (", program_invocation_short_name, ")");
- if (!product)
- return -ENOMEM;
-
sd_varlink_interface *interface;
- HASHMAP_FOREACH(interface, ASSERT_PTR(link->server)->interfaces) {
+ HASHMAP_FOREACH(interface, link->server->interfaces) {
r = strv_extend(&interfaces, interface->name);
if (r < 0)
return r;
return sd_varlink_replybo(
link,
- SD_JSON_BUILD_PAIR_STRING("vendor", "The systemd Project"),
- SD_JSON_BUILD_PAIR_STRING("product", product),
- SD_JSON_BUILD_PAIR_STRING("version", PROJECT_VERSION_FULL " (" GIT_VERSION ")"),
- SD_JSON_BUILD_PAIR_STRING("url", "https://systemd.io/"),
+ SD_JSON_BUILD_PAIR_STRING("vendor", strempty(link->server->vendor)),
+ SD_JSON_BUILD_PAIR_STRING("product", strempty(link->server->product)),
+ SD_JSON_BUILD_PAIR_STRING("version", strempty(link->server->version)),
+ SD_JSON_BUILD_PAIR_STRING("url", strempty(link->server->url)),
SD_JSON_BUILD_PAIR_STRV("interfaces", interfaces));
}
sd_event_unref(s->event);
free(s->description);
+ free(s->vendor);
+ free(s->product);
+ free(s->version);
+ free(s->url);
return mfree(s);
}
DEFINE_PUBLIC_TRIVIAL_REF_UNREF_FUNC(sd_varlink_server, sd_varlink_server, varlink_server_destroy);
+_public_ int sd_varlink_server_set_info(
+ sd_varlink_server *s,
+ const char *vendor,
+ const char *product,
+ const char *version,
+ const char *url) {
+
+ assert_return(s, -EINVAL);
+
+ _cleanup_free_ char
+ *a = vendor ? strdup(vendor) : NULL,
+ *b = product ? strdup(product) : NULL,
+ *c = version ? strdup(version) : NULL,
+ *d = url ? strdup(url) : NULL;
+ if ((vendor && !a) || (product && !b) || (version && !c) || (url && !d))
+ return log_oom_debug();
+
+ free_and_replace(s->vendor, a);
+ free_and_replace(s->product, b);
+ free_and_replace(s->version, c);
+ free_and_replace(s->url, d);
+
+ return 0;
+}
+
static int validate_connection(sd_varlink_server *server, const struct ucred *ucred) {
int allowed = -1;