summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Mendoza-Jonas <sam@mendozajonas.com>2018-02-23 15:26:49 +1100
committerSamuel Mendoza-Jonas <sam@mendozajonas.com>2018-02-27 11:43:36 +1100
commit7e0b9da2ae2f96d24c711c0ad4d12bb193ec49c0 (patch)
tree4d5848b0923038e3d0499c8d4f451ee50c70963f
parentd63bacef37d61b46e8db10914d4a7a677ba0775a (diff)
downloadtalos-petitboot-7e0b9da2ae2f96d24c711c0ad4d12bb193ec49c0.zip
talos-petitboot-7e0b9da2ae2f96d24c711c0ad4d12bb193ec49c0.tar.gz
discover/platform-powerpc: Avoid confusing gateway and URL
If we have a static network config with a URL set but not a gateway we can confuse the URL as the gateway due to how we write the network string in NVRAM. To avoid changing the parameter format if we only have one of the two tokens check whether or not it's actually a URL; the gateway and the URL will have distinct formats. Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
-rw-r--r--discover/platform-powerpc.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/discover/platform-powerpc.c b/discover/platform-powerpc.c
index ed5733e..dc4abb8 100644
--- a/discover/platform-powerpc.c
+++ b/discover/platform-powerpc.c
@@ -16,6 +16,7 @@
#include <log/log.h>
#include <process/process.h>
#include <types/types.h>
+#include <url/url.h>
#include "hostboot.h"
#include "platform.h"
@@ -287,7 +288,7 @@ static int parse_one_interface_config(struct config *config,
char *confstr)
{
struct interface_config *ifconf;
- char *tok, *saveptr;
+ char *tok, *tok_gw, *tok_url, *saveptr;
ifconf = talloc_zero(config, struct interface_config);
@@ -320,18 +321,26 @@ static int parse_one_interface_config(struct config *config,
ifconf->static_config.address =
talloc_strdup(ifconf, tok);
- tok = strtok_r(NULL, ",", &saveptr);
- if (tok) {
- ifconf->static_config.gateway =
- talloc_strdup(ifconf, tok);
+ /*
+ * If a url is set but not a gateway, we can accidentally
+ * interpret the url as the gateway. To avoid changing the
+ * parameter format check if the "gateway" is actually a
+ * pb-url if it's the last token.
+ */
+ tok_gw = strtok_r(NULL, ",", &saveptr);
+ tok_url = strtok_r(NULL, ",", &saveptr);
+
+ if (tok_gw) {
+ if (tok_url || !is_url(tok_gw))
+ ifconf->static_config.gateway =
+ talloc_strdup(ifconf, tok_gw);
+ else
+ tok_url = tok_gw;
}
- tok = strtok_r(NULL, ",", &saveptr);
- if (tok) {
+ if (tok_url)
ifconf->static_config.url =
- talloc_strdup(ifconf, tok);
- }
-
+ talloc_strdup(ifconf, tok_url);
} else {
pb_log("Unknown network configuration method %s\n", tok);
goto out_err;
OpenPOWER on IntegriCloud