diff --git a/include/osmocom/core/utils.h b/include/osmocom/core/utils.h
index f1e011f..8928f68 100644
--- a/include/osmocom/core/utils.h
+++ b/include/osmocom/core/utils.h
@@ -125,5 +125,7 @@
 
 const char *osmo_escape_str(const char *str, int len);
 const char *osmo_escape_str_buf(const char *str, int in_len, char *buf, size_t bufsize);
+const char *osmo_quote_str(const char *str, int in_len);
+const char *osmo_quote_str_buf(const char *str, int in_len, char *buf, size_t bufsize);
 
 /*! @} */
diff --git a/src/utils.c b/src/utils.c
index 109aac0..32ea87c 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -554,4 +554,42 @@
 	return osmo_escape_str_buf(str, in_len, namebuf, sizeof(namebuf));
 }
 
+/*! Like osmo_escape_str(), but returns double-quotes around a string, or "NULL" for a NULL string.
+ * This allows passing any char* value and get its C representation as string.
+ * \param[in] str  A string that may contain any characters.
+ * \param[in] len  Pass -1 to print until nul char, or >= 0 to force a length.
+ * \returns buf containing an escaped representation, possibly truncated, or str itself.
+ */
+const char *osmo_quote_str_buf(const char *str, int in_len, char *buf, size_t bufsize)
+{
+	const char *res;
+	int l;
+	if (!str)
+		return "NULL";
+	if (bufsize < 3)
+		return "<buf-too-small>";
+	buf[0] = '"';
+	res = osmo_escape_str_buf(str, in_len, buf + 1, bufsize - 2);
+	/* if osmo_escape_str_buf() returned the str itself, we need to copy it to buf to be able to
+	 * quote it. */
+	if (res == str) {
+		/* max_len = bufsize - two quotes - nul term */
+		int max_len = bufsize - 2 - 1;
+		if (in_len >= 0)
+			max_len = OSMO_MIN(in_len, max_len);
+		/* It is not allowed to pass unterminated strings into osmo_strlcpy() :/ */
+		strncpy(buf + 1, str, max_len);
+		buf[1 + max_len] = '\0';
+	}
+	l = strlen(buf);
+	buf[l] = '"';
+	buf[l+1] = '\0'; /* both osmo_escape_str_buf() and max_len above ensure room for '\0' */
+	return buf;
+}
+
+const char *osmo_quote_str(const char *str, int in_len)
+{
+	return osmo_quote_str_buf(str, in_len, namebuf, sizeof(namebuf));
+}
+
 /*! @} */
diff --git a/tests/utils/utils_test.c b/tests/utils/utils_test.c
index f358e9a..a124352 100644
--- a/tests/utils/utils_test.c
+++ b/tests/utils/utils_test.c
@@ -371,6 +371,60 @@
 	OSMO_ASSERT(out_buf[0] == 0x7f);
 }
 
+static void str_quote_test(void)
+{
+	int i;
+	int j;
+	uint8_t in_buf[32];
+	char out_buf[11];
+	const char *printable = "printable";
+	const char *res;
+
+	printf("\nTesting string quoting\n");
+	printf("- all chars from 0 to 255 in batches of 16:\n");
+	in_buf[16] = '\0';
+	for (j = 0; j < 16; j++) {
+		for (i = 0; i < 16; i++)
+			in_buf[i] = (j << 4) | i;
+		printf("'%s'\n", osmo_quote_str((const char*)in_buf, 16));
+	}
+
+	printf("- nul terminated:\n");
+	printf("'%s'\n", osmo_quote_str("termi\nated", -1));
+
+	printf("- never passthru:\n");
+	res = osmo_quote_str(printable, -1);
+	if (res != printable)
+		printf("NOT passed through. '%s'\n", res);
+	else
+		printf("passed through unchanged '%s'\n", res);
+
+	printf("- zero length:\n");
+	printf("'%s'\n", osmo_quote_str("omitted", 0));
+
+	printf("- truncation when too long:\n");
+	memset(in_buf, 'x', sizeof(in_buf));
+	in_buf[0] = '\a';
+	in_buf[5] = 'E';
+	memset(out_buf, 0x7f, sizeof(out_buf));
+	printf("'%s'\n", osmo_quote_str_buf((const char *)in_buf, sizeof(in_buf), out_buf, 10));
+	OSMO_ASSERT(out_buf[10] == 0x7f);
+
+	printf("- always truncation, even when no escaping needed:\n");
+	memset(in_buf, 'x', sizeof(in_buf));
+	in_buf[6] = 'E'; /* dst has 10, less 2 quotes and nul, leaves 7, i.e. in[6] is last */
+	in_buf[20] = '\0';
+	memset(out_buf, 0x7f, sizeof(out_buf));
+	printf("'%s'\n", osmo_quote_str_buf((const char *)in_buf, -1, out_buf, 10));
+	OSMO_ASSERT(out_buf[0] == '"');
+
+	printf("- try to feed too little buf for quoting:\n");
+	printf("'%s'\n", osmo_quote_str_buf("", -1, out_buf, 2));
+
+	printf("- NULL string becomes a \"NULL\" literal:\n");
+	printf("'%s'\n", osmo_quote_str_buf(NULL, -1, out_buf, 10));
+}
+
 int main(int argc, char **argv)
 {
 	static const struct log_info log_info = {};
@@ -382,5 +436,6 @@
 	test_is_hexstr();
 	bcd_test();
 	str_escape_test();
+	str_quote_test();
 	return 0;
 }
diff --git a/tests/utils/utils_test.ok b/tests/utils/utils_test.ok
index fb1d62e..5bc3896 100644
--- a/tests/utils/utils_test.ok
+++ b/tests/utils/utils_test.ok
@@ -104,3 +104,36 @@
 "\axxxxxxE"
 - passthrough without truncation when no escaping needed:
 "xxxxxxxxxxxxxxxxxxxE"
+
+Testing string quoting
+- all chars from 0 to 255 in batches of 16:
+'"\0\1\2\3\4\5\6\a\b\t\n\v\f\r\14\15"'
+'"\16\17\18\19\20\21\22\23\24\25\26\27\28\29\30\31"'
+'" !\"#$%&'()*+,-./"'
+'"0123456789:;<=>?"'
+'"@ABCDEFGHIJKLMNO"'
+'"PQRSTUVWXYZ[\\]^_"'
+'"`abcdefghijklmno"'
+'"pqrstuvwxyz{|}~\127"'
+'"\128\129\130\131\132\133\134\135\136\137\138\139\140\141\142\143"'
+'"\144\145\146\147\148\149\150\151\152\153\154\155\156\157\158\159"'
+'"\160\161\162\163\164\165\166\167\168\169\170\171\172\173\174\175"'
+'"\176\177\178\179\180\181\182\183\184\185\186\187\188\189\190\191"'
+'"\192\193\194\195\196\197\198\199\200\201\202\203\204\205\206\207"'
+'"\208\209\210\211\212\213\214\215\216\217\218\219\220\221\222\223"'
+'"\224\225\226\227\228\229\230\231\232\233\234\235\236\237\238\239"'
+'"\240\241\242\243\244\245\246\247\248\249\250\251\252\253\254\255"'
+- nul terminated:
+'"termi\nated"'
+- never passthru:
+NOT passed through. '"printable"'
+- zero length:
+'""'
+- truncation when too long:
+'"\axxxxE"'
+- always truncation, even when no escaping needed:
+'"xxxxxxE"'
+- try to feed too little buf for quoting:
+'<buf-too-small>'
+- NULL string becomes a "NULL" literal:
+'NULL'
