summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkash Aggarwal <quic_akasagga@quicinc.com>2022-06-27 16:57:36 +0530
committerAkash Aggarwal <quic_akasagga@quicinc.com>2022-08-19 21:10:54 +0530
commit811cb3bd6a1e9cdef1a471ff5e01a0b6b8d09721 (patch)
tree268da77fca024bd1ef1076031ce1cbdac0bb19e5
parent82f879b57c5750c10d0db9328466f5bc76d67518 (diff)
libqmi-glib: allow hiding personal info while logging
During qmi logging, some of the information like simIccId, username, password need to be hidden from displaying in the logs to protect some of the user information.
-rw-r--r--build-aux/qmi-codegen/Field.py8
-rw-r--r--build-aux/qmi-codegen/Message.py7
-rw-r--r--build-aux/qmi-codegen/Variable.py11
-rw-r--r--build-aux/qmi-codegen/VariableArray.py5
-rw-r--r--build-aux/qmi-codegen/VariableInteger.py32
-rw-r--r--build-aux/qmi-codegen/VariableSequence.py5
-rw-r--r--build-aux/qmi-codegen/VariableString.py29
-rw-r--r--build-aux/qmi-codegen/VariableStruct.py5
-rw-r--r--data/qmi-service-dms.json142
-rw-r--r--data/qmi-service-uim.json13
-rw-r--r--data/qmi-service-voice.json98
-rw-r--r--data/qmi-service-wds.json12
-rw-r--r--data/qmi-service-wms.json15
-rw-r--r--docs/reference/libqmi-glib/libqmi-glib-common.sections2
-rw-r--r--src/libqmi-glib/qmi-device.c19
-rw-r--r--src/libqmi-glib/qmi-message.c7
-rw-r--r--src/libqmi-glib/qmi-utils.c14
-rw-r--r--src/libqmi-glib/qmi-utils.h23
-rw-r--r--src/qmicli/qmicli.c26
19 files changed, 325 insertions, 148 deletions
diff --git a/build-aux/qmi-codegen/Field.py b/build-aux/qmi-codegen/Field.py
index 446c13a..b1e455b 100644
--- a/build-aux/qmi-codegen/Field.py
+++ b/build-aux/qmi-codegen/Field.py
@@ -16,6 +16,7 @@
#
# Copyright (C) 2012 Lanedo GmbH
# Copyright (C) 2012-2022 Aleksander Morgado <aleksander@aleksander.es>
+# Copyright (c) 2022 Qualcomm Innovation Center, Inc.
#
import string
@@ -91,6 +92,11 @@ class Field:
else:
raise RuntimeError('Common type \'%s\' not found' % prerequisite_dictionary['name'])
+ if 'personal-info' in dictionary:
+ self.personal_info = True;
+ else:
+ self.personal_info = False;
+
@property
def mandatory(self):
@@ -473,7 +479,7 @@ class Field:
f.write(string.Template(template).substitute(translations))
# Now, read the contents of the buffer into the printable representation
- self.variable.emit_get_printable(f, ' ')
+ self.variable.emit_get_printable(f, ' ', self.personal_info)
template = (
'\n'
diff --git a/build-aux/qmi-codegen/Message.py b/build-aux/qmi-codegen/Message.py
index f0fdcd4..c60e459 100644
--- a/build-aux/qmi-codegen/Message.py
+++ b/build-aux/qmi-codegen/Message.py
@@ -16,6 +16,7 @@
#
# Copyright (C) 2012 Lanedo GmbH
# Copyright (C) 2012-2022 Aleksander Morgado <aleksander@aleksander.es>
+# Copyright (c) 2022 Qualcomm Innovation Center, Inc.
#
import string
@@ -347,7 +348,11 @@ class Message:
' } else {\n'
' g_autofree gchar *value_hex = NULL;\n'
'\n'
- ' value_hex = qmi_helpers_str_hex (value, length, \':\');\n'
+ ' if (qmi_utils_get_show_personal_info ())\n'
+ ' value_hex = qmi_helpers_str_hex (value, length, \':\');\n'
+ ' else\n'
+ ' value_hex = g_strdup ("###...");\n'
+ '\n'
' g_string_append_printf (ctx->printable,\n'
' "%sTLV:\\n"\n'
' "%s type = \\"%s\\" (0x%02x)\\n"\n'
diff --git a/build-aux/qmi-codegen/Variable.py b/build-aux/qmi-codegen/Variable.py
index bb4fb02..65bca8d 100644
--- a/build-aux/qmi-codegen/Variable.py
+++ b/build-aux/qmi-codegen/Variable.py
@@ -16,6 +16,7 @@
#
# Copyright (C) 2012 Lanedo GmbH
# Copyright (C) 2012-2022 Aleksander Morgado <aleksander@aleksander.es>
+# Copyright (c) 2022 Qualcomm Innovation Center, Inc.
#
import string
@@ -108,6 +109,14 @@ class Variable:
self.new_method_gir = ''
self.free_method_gir = ''
+ """
+ Whether the variable is personal info or not
+ """
+ if 'personal-info' in dictionary:
+ self.personal_info = True;
+ else:
+ self.personal_info = False;
+
"""
Emits the code to declare specific new types required by the variable.
"""
@@ -131,7 +140,7 @@ class Variable:
"""
Emits the code to get the contents of the given variable as a printable string.
"""
- def emit_get_printable(self, f, line_prefix):
+ def emit_get_printable(self, f, line_prefix, is_personal):
pass
"""
diff --git a/build-aux/qmi-codegen/VariableArray.py b/build-aux/qmi-codegen/VariableArray.py
index 607865f..074f471 100644
--- a/build-aux/qmi-codegen/VariableArray.py
+++ b/build-aux/qmi-codegen/VariableArray.py
@@ -16,6 +16,7 @@
#
# Copyright (C) 2012 Lanedo GmbH
# Copyright (C) 2012-2022 Aleksander Morgado <aleksander@aleksander.es>
+# Copyright (c) 2022 Qualcomm Innovation Center, Inc.
#
import string
@@ -220,7 +221,7 @@ class VariableArray(Variable):
f.write(string.Template(template).substitute(translations))
- def emit_get_printable(self, f, line_prefix):
+ def emit_get_printable(self, f, line_prefix, is_personal):
common_var_prefix = utils.build_underscore_name(self.name)
translations = { 'lp' : line_prefix,
'common_var_prefix' : common_var_prefix }
@@ -272,7 +273,7 @@ class VariableArray(Variable):
'${lp} g_string_append_printf (printable, " [%u] = \'", ${common_var_prefix}_i);\n')
f.write(string.Template(template).substitute(translations))
- self.array_element.emit_get_printable(f, line_prefix + ' ');
+ self.array_element.emit_get_printable(f, line_prefix + ' ', self.personal_info or is_personal);
template = (
'${lp} g_string_append (printable, " \'");\n'
diff --git a/build-aux/qmi-codegen/VariableInteger.py b/build-aux/qmi-codegen/VariableInteger.py
index 3076d1c..11c51a2 100644
--- a/build-aux/qmi-codegen/VariableInteger.py
+++ b/build-aux/qmi-codegen/VariableInteger.py
@@ -16,6 +16,7 @@
#
# Copyright (C) 2012 Lanedo GmbH
# Copyright (C) 2012-2022 Aleksander Morgado <aleksander@aleksander.es>
+# Copyright (c) 2022 Qualcomm Innovation Center, Inc.
#
import string
@@ -157,7 +158,7 @@ class VariableInteger(Variable):
f.write(string.Template(template).substitute(translations))
- def emit_get_printable(self, f, line_prefix):
+ def emit_get_printable(self, f, line_prefix, is_personal):
common_format = ''
common_cast = ''
@@ -214,30 +215,43 @@ class VariableInteger(Variable):
'${lp} if (!qmi_message_tlv_read_${private_format} (message, init_offset, &offset,${endian} &tmp, &error))\n'
'${lp} goto out;\n')
+ if self.personal_info or is_personal:
+ translations['if_show_field'] = 'if (qmi_utils_get_show_personal_info ()) '
+ else:
+ translations['if_show_field'] = ''
+
+ template += (
+ '${lp} ${if_show_field}{\n')
if self.public_format == 'gboolean':
template += (
- '${lp} g_string_append_printf (printable, "%s", tmp ? "yes" : "no");\n')
+ '${lp} g_string_append_printf (printable, "%s", tmp ? "yes" : "no");\n')
elif self.public_format != self.private_format:
translations['public_type_underscore'] = utils.build_underscore_name_from_camelcase(self.public_format)
translations['public_type_underscore_upper'] = utils.build_underscore_name_from_camelcase(self.public_format).upper()
template += (
'#if defined __${public_type_underscore_upper}_IS_ENUM__\n'
- '${lp} g_string_append_printf (printable, "%s", ${public_type_underscore}_get_string ((${public_format})tmp));\n'
+ '${lp} g_string_append_printf (printable, "%s", ${public_type_underscore}_get_string ((${public_format})tmp));\n'
'#elif defined __${public_type_underscore_upper}_IS_FLAGS__\n'
- '${lp} {\n'
- '${lp} g_autofree gchar *flags_str = NULL;\n'
+ '${lp} {\n'
+ '${lp} g_autofree gchar *flags_str = NULL;\n'
'\n'
- '${lp} flags_str = ${public_type_underscore}_build_string_from_mask ((${public_format})tmp);\n'
- '${lp} g_string_append_printf (printable, "%s", flags_str);\n'
- '${lp} }\n'
+ '${lp} flags_str = ${public_type_underscore}_build_string_from_mask ((${public_format})tmp);\n'
+ '${lp} g_string_append_printf (printable, "%s", flags_str);\n'
+ '${lp} }\n'
'#else\n'
'# error unexpected public format: ${public_format}\n'
'#endif\n')
else:
template += (
- '${lp} g_string_append_printf (printable, "${common_format}", ${common_cast}tmp);\n')
+ '${lp} g_string_append_printf (printable, "${common_format}", ${common_cast}tmp);\n')
+
+ if self.personal_info or is_personal:
+ template += (
+ '${lp} } else {\n'
+ '${lp} g_string_append_printf (printable, "\'###\'");\n')
template += (
+ '${lp} }\n'
'${lp}}\n')
f.write(string.Template(template).substitute(translations))
diff --git a/build-aux/qmi-codegen/VariableSequence.py b/build-aux/qmi-codegen/VariableSequence.py
index bee40df..4343d67 100644
--- a/build-aux/qmi-codegen/VariableSequence.py
+++ b/build-aux/qmi-codegen/VariableSequence.py
@@ -16,6 +16,7 @@
#
# Copyright (C) 2012 Lanedo GmbH
# Copyright (C) 2012-2022 Aleksander Morgado <aleksander@aleksander.es>
+# Copyright (c) 2022 Qualcomm Innovation Center, Inc.
#
import string
@@ -77,7 +78,7 @@ class VariableSequence(Variable):
member['object'].emit_buffer_write(f, line_prefix, tlv_name, variable_name + '_' + member['name'])
- def emit_get_printable(self, f, line_prefix):
+ def emit_get_printable(self, f, line_prefix, is_personal):
translations = { 'lp' : line_prefix }
template = (
@@ -90,7 +91,7 @@ class VariableSequence(Variable):
'${lp}g_string_append (printable, " ${variable_name} = \'");\n')
f.write(string.Template(template).substitute(translations))
- member['object'].emit_get_printable(f, line_prefix)
+ member['object'].emit_get_printable(f, line_prefix, self.personal_info or is_personal)
template = (
'${lp}g_string_append (printable, "\'");\n')
diff --git a/build-aux/qmi-codegen/VariableString.py b/build-aux/qmi-codegen/VariableString.py
index eb47a63..b0526ab 100644
--- a/build-aux/qmi-codegen/VariableString.py
+++ b/build-aux/qmi-codegen/VariableString.py
@@ -16,6 +16,7 @@
#
# Copyright (C) 2012 Lanedo GmbH
# Copyright (C) 2012-2022 Aleksander Morgado <aleksander@aleksander.es>
+# Copyright (c) 2022 Qualcomm Innovation Center, Inc.
#
import string
@@ -128,7 +129,7 @@ class VariableString(Variable):
f.write(string.Template(template).substitute(translations))
- def emit_get_printable(self, f, line_prefix):
+ def emit_get_printable(self, f, line_prefix, is_personal):
translations = { 'lp' : line_prefix }
if self.is_fixed_size:
@@ -141,9 +142,7 @@ class VariableString(Variable):
'\n'
'${lp} if (!qmi_message_tlv_read_fixed_size_string (message, init_offset, &offset, ${fixed_size}, &tmp[0], &error))\n'
'${lp} goto out;\n'
- '${lp} tmp[${fixed_size}] = \'\\0\';\n'
- '${lp} g_string_append (printable, tmp);\n'
- '${lp}}\n')
+ '${lp} tmp[${fixed_size}] = \'\\0\';\n')
else:
translations['n_size_prefix_bytes'] = self.n_size_prefix_bytes
translations['max_size'] = self.max_size if self.max_size != '' else '0'
@@ -153,9 +152,25 @@ class VariableString(Variable):
'${lp} g_autofree gchar *tmp = NULL;\n'
'\n'
'${lp} if (!qmi_message_tlv_read_string (message, init_offset, &offset, ${n_size_prefix_bytes}, ${max_size}, &tmp, &error))\n'
- '${lp} goto out;\n'
- '${lp} g_string_append (printable, tmp);\n'
- '${lp}}\n')
+ '${lp} goto out;\n')
+
+ if self.personal_info or is_personal:
+ translations['if_show_field'] = 'if (qmi_utils_get_show_personal_info ()) '
+ else:
+ translations['if_show_field'] = ''
+
+ template += (
+ '${lp} ${if_show_field}{\n'
+ '${lp} g_string_append (printable, tmp);\n')
+
+ if self.personal_info or is_personal:
+ template += (
+ '${lp} } else {\n'
+ '${lp} g_string_append_printf (printable, "\'###\'");\n')
+
+ template += (
+ '${lp} }\n'
+ '${lp}}\n')
f.write(string.Template(template).substitute(translations))
diff --git a/build-aux/qmi-codegen/VariableStruct.py b/build-aux/qmi-codegen/VariableStruct.py
index 5148804..0d08480 100644
--- a/build-aux/qmi-codegen/VariableStruct.py
+++ b/build-aux/qmi-codegen/VariableStruct.py
@@ -16,6 +16,7 @@
#
# Copyright (C) 2012 Lanedo GmbH
# Copyright (C) 2012-2022 Aleksander Morgado <aleksander@aleksander.es>
+# Copyright (c) 2022 Qualcomm Innovation Center, Inc.
#
import string
@@ -247,7 +248,7 @@ class VariableStruct(Variable):
member['object'].emit_buffer_write(f, line_prefix, tlv_name, variable_name + '.' + member['name'])
- def emit_get_printable(self, f, line_prefix):
+ def emit_get_printable(self, f, line_prefix, is_personal):
translations = { 'lp' : line_prefix }
template = (
@@ -260,7 +261,7 @@ class VariableStruct(Variable):
'${lp}g_string_append (printable, " ${variable_name} = \'");\n')
f.write(string.Template(template).substitute(translations))
- member['object'].emit_get_printable(f, line_prefix)
+ member['object'].emit_get_printable(f, line_prefix, self.personal_info or is_personal)
template = (
'${lp}g_string_append (printable, "\'");\n')
diff --git a/data/qmi-service-dms.json b/data/qmi-service-dms.json
index bd28cae..a45a7b5 100644
--- a/data/qmi-service-dms.json
+++ b/data/qmi-service-dms.json
@@ -245,25 +245,27 @@
"id" : "0x0025",
"since" : "1.0",
"output" : [ { "common-ref" : "Operation Result" },
- { "name" : "Esn",
- "id" : "0x10",
- "type" : "TLV",
- "since" : "1.0",
- "format" : "string",
- "prerequisites": [ { "common-ref" : "Success" } ] },
- { "name" : "Imei",
- "id" : "0x11",
- "type" : "TLV",
- "since" : "1.0",
- "format" : "string",
- "max-size" : "15",
- "prerequisites": [ { "common-ref" : "Success" } ] },
- { "name" : "Meid",
- "id" : "0x12",
- "type" : "TLV",
- "since" : "1.0",
- "format" : "string",
- "prerequisites": [ { "common-ref" : "Success" } ] },
+ { "name" : "Esn",
+ "id" : "0x10",
+ "type" : "TLV",
+ "since" : "1.0",
+ "format" : "string",
+ "prerequisites" : [ { "common-ref" : "Success" } ] },
+ { "name" : "Imei",
+ "id" : "0x11",
+ "type" : "TLV",
+ "since" : "1.0",
+ "format" : "string",
+ "max-size" : "15",
+ "personal-info" : "true",
+ "prerequisites" : [ { "common-ref" : "Success" } ] },
+ { "name" : "Meid",
+ "id" : "0x12",
+ "type" : "TLV",
+ "since" : "1.0",
+ "format" : "string",
+ "personal-info" : "true",
+ "prerequisites" : [ { "common-ref" : "Success" } ] },
{ "name" : "Imei Software Version",
"id" : "0x13",
"type" : "TLV",
@@ -306,8 +308,9 @@
{ "name" : "Protection Enabled",
"format" : "guint8",
"public-format" : "gboolean" },
- { "name" : "PIN",
- "format" : "string" } ] } ],
+ { "name" : "PIN",
+ "format" : "string",
+ "personal-info" : "true" } ] } ],
"output" : [ { "common-ref" : "Operation Result" },
{ "name" : "Pin Retries Status",
"id" : "0x10",
@@ -334,8 +337,9 @@
"contents" : [ { "name" : "Pin ID",
"format" : "guint8",
"public-format" : "QmiDmsUimPinId" },
- { "name" : "PIN",
- "format" : "string" } ] } ],
+ { "name" : "PIN",
+ "format" : "string",
+ "personal-info" : "true" } ] } ],
"output" : [ { "common-ref" : "Operation Result" },
{ "name" : "Pin Retries Status",
"id" : "0x10",
@@ -362,10 +366,12 @@
"contents" : [ { "name" : "Pin ID",
"format" : "guint8",
"public-format" : "QmiDmsUimPinId" },
- { "name" : "PUK",
- "format" : "string" },
- { "name" : "New PIN",
- "format" : "string" } ] } ],
+ { "name" : "PUK",
+ "format" : "string",
+ "personal-info" : "true" },
+ { "name" : "New PIN",
+ "format" : "string",
+ "personal-info" : "true" } ] } ],
"output" : [ { "common-ref" : "Operation Result" },
{ "name" : "Pin Retries Status",
"id" : "0x10",
@@ -392,10 +398,12 @@
"contents" : [ { "name" : "Pin ID",
"format" : "guint8",
"public-format" : "QmiDmsUimPinId" },
- { "name" : "Old PIN",
- "format" : "string" },
- { "name" : "New PIN",
- "format" : "string" } ] } ],
+ { "name" : "Old PIN",
+ "format" : "string",
+ "personal-info" : "true" },
+ { "name" : "New PIN",
+ "format" : "string",
+ "personal-info" : "true" } ] } ],
"output" : [ { "common-ref" : "Operation Result" },
{ "name" : "Pin Retries Status",
"id" : "0x10",
@@ -587,37 +595,40 @@
"service" : "DMS",
"id" : "0x0033",
"since" : "1.0",
- "input" : [ { "name" : "Info",
- "id" : "0x01",
- "type" : "TLV",
+ "input" : [ { "name" : "Info",
+ "id" : "0x01",
+ "type" : "TLV",
// API updated in 1.6
- "since" : "1.6",
- "format" : "sequence",
- "contents" : [ { "name" : "Service Programming Code",
- "format" : "string",
- "fixed-size" : "6" },
- { "name" : "System Identification Number",
- "format" : "guint16" },
- { "name" : "Mobile Directory Number",
- "format" : "string",
- "max-size" : "15" },
- { "name" : "Mobile Identification Number",
- "format" : "string",
- "max-size" : "15" } ] },
+ "since" : "1.6",
+ "format" : "sequence",
+ "contents" : [ { "name" : "Service Programming Code",
+ "format" : "string",
+ "fixed-size" : "6" },
+ { "name" : "System Identification Number",
+ "format" : "guint16" },
+ { "name" : "Mobile Directory Number",
+ "format" : "string",
+ "max-size" : "15" },
+ { "name" : "Mobile Identification Number",
+ "format" : "string",
+ "max-size" : "15" } ],
+ "personal-info" : "true" },
{ "name" : "MN HA key",
"id" : "0x11",
"type" : "TLV",
"since" : "1.0",
"format" : "string",
"max-size" : "16",
- "size-prefix-format" : "guint8" },
+ "size-prefix-format" : "guint8",
+ "personal-info" : "true" },
{ "name" : "MN AAA key",
"id" : "0x12",
"type" : "TLV",
"since" : "1.0",
"format" : "string",
"max-size" : "16",
- "size-prefix-format" : "guint8" },
+ "size-prefix-format" : "guint8",
+ "personal-info" : "true" },
{ "name" : "PRL",
"id" : "0x13",
"type" : "TLV",
@@ -661,9 +672,10 @@
"contents" : [ { "name" : "Enabled",
"format" : "guint8",
"public-format" : "gboolean" },
- { "name" : "Lock Code",
- "format" : "string",
- "fixed-size" : "4" } ] } ],
+ { "name" : "Lock Code",
+ "format" : "string",
+ "fixed-size" : "4",
+ "personal-info" : "true" } ] } ],
"output" : [ { "common-ref" : "Operation Result" } ] },
// *********************************************************************************
@@ -767,12 +779,13 @@
"id" : "0x003C",
"since" : "1.0",
"output" : [ { "common-ref" : "Operation Result" },
- { "name" : "ICCID",
- "id" : "0x01",
- "type" : "TLV",
- "since" : "1.0",
- "format" : "string",
- "prerequisites": [ { "common-ref" : "Success" } ] } ] },
+ { "name" : "ICCID",
+ "id" : "0x01",
+ "type" : "TLV",
+ "since" : "1.0",
+ "format" : "string",
+ "personal-info" : "true",
+ "prerequisites" : [ { "common-ref" : "Success" } ] } ] },
// *********************************************************************************
{ "name" : "Set Firmware ID",
@@ -872,12 +885,13 @@
"id" : "0x0043",
"since" : "1.0",
"output" : [ { "common-ref" : "Operation Result" },
- { "name" : "IMSI",
- "id" : "0x01",
- "type" : "TLV",
- "since" : "1.0",
- "format" : "string",
- "prerequisites": [ { "common-ref" : "Success" } ] } ] },
+ { "name" : "IMSI",
+ "id" : "0x01",
+ "type" : "TLV",
+ "since" : "1.0",
+ "format" : "string",
+ "personal-info" : "true",
+ "prerequisites" : [ { "common-ref" : "Success" } ] } ] },
// *********************************************************************************
{ "name" : "UIM Get State",
diff --git a/data/qmi-service-uim.json b/data/qmi-service-uim.json
index 1b6d2a4..02f376d 100644
--- a/data/qmi-service-uim.json
+++ b/data/qmi-service-uim.json
@@ -127,7 +127,8 @@
{ "name" : "ICCID",
"format" : "array",
"size-prefix-format" : "guint8",
- "array-element" : { "format" : "guint8" } } ] } },
+ "array-element" : { "format" : "guint8" },
+ "personal-info" : "true" } ] } },
// *********************************************************************************
{ "common-ref" : "Physical Slot Information",
@@ -165,7 +166,9 @@
"contents" : [ { "name" : "EID",
"format" : "array",
"size-prefix-format" : "guint8",
- "array-element" : { "format" : "guint8" } } ] } },
+ "array-element" : { "format" : "guint8" },
+
+ "personal-info" : "true" } ] } },
// *********************************************************************************
{ "name" : "Reset",
@@ -247,6 +250,7 @@
"format" : "array",
"size-prefix-format" : "guint16",
"array-element" : { "format" : "guint8" },
+ "personal-info" : "true",
"prerequisites" : [ { "common-ref" : "Success" } ] },
{ "name" : "Response In Indication Token",
"id" : "0x12",
@@ -317,6 +321,7 @@
"format" : "array",
"size-prefix-format" : "guint16",
"array-element" : { "format" : "guint8" },
+ "personal-info" : "true",
"prerequisites" : [ { "common-ref" : "Success" } ] },
{ "name" : "Additional Read Result",
"id" : "0x12",
@@ -325,6 +330,7 @@
"format" : "array",
"size-prefix-format" : "guint16",
"array-element" : { "format" : "guint8" },
+ "personal-info" : "true",
"prerequisites" : [ { "common-ref" : "Success" } ] },
{ "name" : "Response In Indication Token",
"id" : "0x13",
@@ -823,7 +829,8 @@
"format" : "guint8",
"public-format" : "QmiUimDepersonalizationOperation" },
{ "name" : "Control Key",
- "format" : "string" } ] },
+ "format" : "string",
+ "personal-info" : "true" } ] },
{ "name" : "Slot",
"id" : "0x10",
"type" : "TLV",
diff --git a/data/qmi-service-voice.json b/data/qmi-service-voice.json
index f975a68..db17cc3 100644
--- a/data/qmi-service-voice.json
+++ b/data/qmi-service-voice.json
@@ -130,7 +130,8 @@
"id" : "0x01",
"type" : "TLV",
"since" : "1.14",
- "format" : "string" } ],
+ "format" : "string",
+ "personal-info" : "true" } ],
"output" : [ { "common-ref" : "Operation Result" },
{ "name" : "Call ID",
"id" : "0x10",
@@ -222,7 +223,8 @@
"format" : "guint8",
"public-format" : "QmiVoicePresentation" },
{ "name" : "Type",
- "format" : "string" } ] } } ] },
+ "format" : "string" } ] },
+ "personal-info" : "true" } ] },
// *********************************************************************************
{ "name" : "Get All Call Info",
"type" : "Message",
@@ -275,6 +277,7 @@
"public-format" : "QmiVoicePresentation" },
{ "name" : "Type",
"format" : "string" } ] },
+ "personal-info" : "true",
"prerequisites" : [ { "common-ref" : "Success" } ] } ] },
// *********************************************************************************
@@ -380,7 +383,8 @@
{ "name" : "Data",
"format" : "array",
"size-prefix-format" : "guint8",
- "array-element" : { "format" : "guint8" } } ] } ],
+ "array-element" : { "format" : "guint8" },
+ "personal-info" : "true" } ] } ],
"output" : [ { "common-ref" : "Operation Result" },
{ "name" : "Failure Cause",
"id" : "0x10",
@@ -399,7 +403,8 @@
{ "name" : "Alpha",
"format" : "array",
"size-prefix-format" : "guint8",
- "array-element" : { "format" : "guint8" } } ] },
+ "array-element" : { "format" : "guint8" },
+ "personal-info" : "true" } ] },
{ "name" : "USS Data",
"id" : "0x12",
"type" : "TLV",
@@ -411,7 +416,8 @@
{ "name" : "Data",
"format" : "array",
"size-prefix-format" : "guint8",
- "array-element" : { "format" : "guint8" } } ] },
+ "array-element" : { "format" : "guint8" },
+ "personal-info" : "true" } ] },
{ "name" : "Call Control Result Type",
"id" : "0x13",
"type" : "TLV",
@@ -435,7 +441,8 @@
"since" : "1.26",
"format" : "array",
"size-prefix-format" : "guint8",
- "array-element" : { "format" : "guint16" } } ] },
+ "array-element" : { "format" : "guint16" },
+ "personal-info" : "true" } ] },
// *********************************************************************************
{ "name" : "Answer USSD",
@@ -454,7 +461,8 @@
{ "name" : "Data",
"format" : "array",
"size-prefix-format" : "guint8",
- "array-element" : { "format" : "guint8" } } ] } ],
+ "array-element" : { "format" : "guint8" },
+ "personal-info" : "true" } ] } ],
"output" : [ { "common-ref" : "Operation Result" } ] },
// *********************************************************************************
@@ -495,14 +503,16 @@
{ "name" : "Data",
"format" : "array",
"size-prefix-format" : "guint8",
- "array-element" : { "format" : "guint8" } } ] },
+ "array-element" : { "format" : "guint8" },
+ "personal-info" : "true" } ] },
{ "name" : "USS Data UTF16",
"id" : "0x11",
"type" : "TLV",
"since" : "1.26",
"format" : "array",
"size-prefix-format" : "guint8",
- "array-element" : { "format" : "guint16" } } ] },
+ "array-element" : { "format" : "guint16" },
+ "personal-info" : "true" } ] },
// *********************************************************************************
{ "name" : "Get Config",
@@ -655,7 +665,8 @@
{ "name" : "Data",
"format" : "array",
"size-prefix-format" : "guint8",
- "array-element" : { "format" : "guint8" } } ] } ],
+ "array-element" : { "format" : "guint8" },
+ "personal-info" : "true" } ] } ],
"output" : [ { "common-ref" : "Operation Result" } ] },
{ "name" : "Originate USSD No Wait",
@@ -685,7 +696,8 @@
{ "name" : "Data",
"format" : "array",
"size-prefix-format" : "guint8",
- "array-element" : { "format" : "guint8" } } ] },
+ "array-element" : { "format" : "guint8" },
+ "personal-info" : "true" } ] },
{ "name" : "Alpha Identifier",
"id" : "0x13",
"type" : "TLV",
@@ -697,14 +709,16 @@
{ "name" : "Alpha",
"format" : "array",
"size-prefix-format" : "guint8",
- "array-element" : { "format" : "guint8" } } ] },
+ "array-element" : { "format" : "guint8" },
+ "personal-info" : "true" } ] },
{ "name" : "USS Data UTF16",
"id" : "0x14",
"type" : "TLV",
"since" : "1.26",
"format" : "array",
"size-prefix-format" : "guint8",
- "array-element" : { "format" : "guint16" } } ] },
+ "array-element" : { "format" : "guint16" },
+ "personal-info" : "true" } ] },
// *********************************************************************************
{ "name" : "Burst DTMF",
@@ -712,61 +726,67 @@
"service" : "VOICE",
"id" : "0x0028",
"since" : "1.32",
- "input" : [ { "name" : "Data",
- "id" : "0x01",
- "type" : "TLV",
- "since" : "1.32",
- "format" : "sequence",
- "contents" : [ { "name" : "Call ID",
- "format" : "guint8" },
- { "name" : "Digit Buffer",
- "format" : "string",
- "size-prefix-format" : "guint8" } ] } ],
+ "input" : [ { "name" : "Data",
+ "id" : "0x01",
+ "type" : "TLV",
+ "since" : "1.32",
+ "format" : "sequence",
+ "contents" : [ { "name" : "Call ID",
+ "format" : "guint8" },
+ { "name" : "Digit Buffer",
+ "format" : "string",
+ "size-prefix-format" : "guint8" } ],
+ "personal-info" : "true" } ],
"output" : [ { "common-ref" : "Operation Result" },
{ "name" : "Call ID",
"id" : "0x10",
"type" : "TLV",
"since" : "1.32",
"format" : "guint8",
+ "personal-info" : "true",
"prerequisites" : [ { "common-ref" : "Success" } ] } ] },
{ "name" : "Start Continuous DTMF",
"type" : "Message",
"service" : "VOICE",
"id" : "0x0029",
"since" : "1.32",
- "input" : [ { "name" : "Data",
- "id" : "0x01",
- "type" : "TLV",
- "since" : "1.32",
- "format" : "sequence",
- "contents" : [ { "name" : "Call ID",
- "format" : "guint8" },
- { "name" : "Digit",
- "format" : "guint8" } ] } ],
+ "input" : [ { "name" : "Data",
+ "id" : "0x01",
+ "type" : "TLV",
+ "since" : "1.32",
+ "format" : "sequence",
+ "contents" : [ { "name" : "Call ID",
+ "format" : "guint8" },
+ { "name" : "Digit",
+ "format" : "guint8" } ],
+ "personal-info" : "true" } ],
"output" : [ { "common-ref" : "Operation Result" },
{ "name" : "Call ID",
"id" : "0x10",
"type" : "TLV",
"since" : "1.32",
"format" : "guint8",
+ "personal-info" : "true",
"prerequisites" : [ { "common-ref" : "Success" } ] } ] },
{ "name" : "Stop Continuous DTMF",
"type" : "Message",
"service" : "VOICE",
"id" : "0x002A",
"since" : "1.32",
- "input" : [ { "name" : "Data",
- "id" : "0x01",
- "type" : "TLV",
- "since" : "1.32",
- "format" : "sequence",
- "contents" : [ { "name" : "Call ID",
- "format" : "guint8" } ] } ],
+ "input" : [ { "name" : "Data",
+ "id" : "0x01",
+ "type" : "TLV",
+ "since" : "1.32",
+ "format" : "sequence",
+ "contents" : [ { "name" : "Call ID",
+ "format" : "guint8" } ],
+ "personal-info" : "true" } ],
"output" : [ { "common-ref" : "Operation Result" },
{ "name" : "Call ID",
"id" : "0x10",
"type" : "TLV",
"since" : "1.32",
"format" : "guint8",
+ "personal-info" : "true",
"prerequisites" : [ { "common-ref" : "Success" } ] } ] }
]
diff --git a/data/qmi-service-wds.json b/data/qmi-service-wds.json
index 15e6757..3936847 100644
--- a/data/qmi-service-wds.json
+++ b/data/qmi-service-wds.json
@@ -195,13 +195,15 @@
"name" : "Username",
"id" : "0x1B",
"type" : "TLV",
- "format" : "string" },
+ "format" : "string",
+ "personal-info" : "true" },
{ "common-ref" : "WDS Password",
"name" : "Password",
"id" : "0x1C",
"type" : "TLV",
- "format" : "string" },
+ "format" : "string",
+ "personal-info" : "true" },
{ "common-ref" : "WDS Authentication",
"name" : "Authentication",
@@ -793,12 +795,14 @@
"id" : "0x17",
"type" : "TLV",
"since" : "1.0",
- "format" : "string" },
+ "format" : "string",
+ "personal-info" : "true" },
{ "name" : "Password",
"id" : "0x18",
"type" : "TLV",
"since" : "1.0",
- "format" : "string" },
+ "format" : "string",
+ "personal-info" : "true" },
{ "name" : "IP Family Preference",
"id" : "0x19",
"type" : "TLV",
diff --git a/data/qmi-service-wms.json b/data/qmi-service-wms.json
index 766dd04..3af6d0d 100644
--- a/data/qmi-service-wms.json
+++ b/data/qmi-service-wms.json
@@ -72,7 +72,8 @@
{ "name" : "Raw Data",
"format" : "array",
"size-prefix-format" : "guint16",
- "array-element" : { "format" : "guint8" } } ] },
+ "array-element" : { "format" : "guint8" },
+ "personal-info" : "true" } ] },
{ "name" : "Message Mode",
"id" : "0x12",
"type" : "TLV",
@@ -90,7 +91,8 @@
{ "name" : "Raw Data",
"format" : "array",
"size-prefix-format" : "guint16",
- "array-element" : { "format" : "guint8" } } ] },
+ "array-element" : { "format" : "guint8" },
+ "personal-info" : "true" } ] },
{ "name" : "ETWS PLMN Information",
"id" : "0x14",
"type" : "TLV",
@@ -145,7 +147,8 @@
{ "name" : "Raw Data",
"format" : "array",
"size-prefix-format" : "guint16",
- "array-element" : { "format" : "guint8" } } ] },
+ "array-element" : { "format" : "guint8" },
+ "personal-info" : "true" } ] },
{ "name" : "CDMA Force On DC",
"id" : "0x10",
"type" : "TLV",
@@ -258,7 +261,8 @@
{ "name" : "Raw Data",
"format" : "array",
"size-prefix-format" : "guint16",
- "array-element" : { "format" : "guint8" } } ] } ],
+ "array-element" : { "format" : "guint8" },
+ "personal-info" : "true" } ] } ],
"output" : [ { "common-ref" : "Operation Result" },
{ "name" : "Memory Index",
"id" : "0x01",
@@ -310,7 +314,8 @@
{ "name" : "Raw Data",
"format" : "array",
"size-prefix-format" : "guint16",
- "array-element" : { "format" : "guint8" } } ],
+ "array-element" : { "format" : "guint8" },
+ "personal-info" : "true" } ],
"prerequisites" : [ { "common-ref" : "Success" } ] } ] },
// *********************************************************************************
diff --git a/docs/reference/libqmi-glib/libqmi-glib-common.sections b/docs/reference/libqmi-glib/libqmi-glib-common.sections
index a1bb41c..8d31dde 100644
--- a/docs/reference/libqmi-glib/libqmi-glib-common.sections
+++ b/docs/reference/libqmi-glib/libqmi-glib-common.sections
@@ -1705,6 +1705,8 @@ qmi_message_context_get_type
<TITLE>Common utilities</TITLE>
qmi_utils_get_traces_enabled
qmi_utils_set_traces_enabled
+qmi_utils_set_show_personal_info
+qmi_utils_get_show_personal_info
</SECTION>
<SECTION>
diff --git a/src/libqmi-glib/qmi-device.c b/src/libqmi-glib/qmi-device.c
index 9689f10..69a9b44 100644
--- a/src/libqmi-glib/qmi-device.c
+++ b/src/libqmi-glib/qmi-device.c
@@ -19,6 +19,7 @@
*
* Copyright (C) 2012 Lanedo GmbH
* Copyright (C) 2012-2021 Aleksander Morgado <aleksander@aleksander.es>
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc.
*/
#include <config.h>
@@ -73,6 +74,10 @@
# include "qmi-net-port-manager-rmnet.h"
#endif
+/* maximum number of printed data bytes when personal info
+ * should be hidden */
+#define MAX_PRINTED_BYTES 12
+
static void async_initable_iface_init (GAsyncInitableIface *iface);
G_DEFINE_TYPE_EXTENDED (QmiDevice, qmi_device, G_TYPE_OBJECT, 0,
@@ -1682,9 +1687,17 @@ trace_message (QmiDevice *self,
action_str = "received";
}
- printable = qmi_helpers_str_hex (((GByteArray *)message)->data,
- ((GByteArray *)message)->len,
- ':');
+ if (qmi_utils_get_show_personal_info () || (((GByteArray *)message)->len < MAX_PRINTED_BYTES)) {
+ printable = qmi_helpers_str_hex (((GByteArray *)message)->data,
+ ((GByteArray *)message)->len,
+ ':');
+ } else {
+ g_autofree gchar *tmp = NULL;
+
+ tmp = qmi_helpers_str_hex (((GByteArray *)message)->data, MAX_PRINTED_BYTES, ':');
+ printable = g_strdup_printf ("%s...", tmp);
+ }
+
g_debug ("[%s] %s message...\n"
"%sRAW:\n"
"%s length = %u\n"
diff --git a/src/libqmi-glib/qmi-message.c b/src/libqmi-glib/qmi-message.c
index d92a14b..d2df087 100644
--- a/src/libqmi-glib/qmi-message.c
+++ b/src/libqmi-glib/qmi-message.c
@@ -25,6 +25,7 @@
* Boston, MA 02110-1301 USA.
*
* Copyright (C) 2012-2019 Aleksander Morgado <aleksander@aleksander.es>
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc.
*/
#include <glib.h>
@@ -1546,7 +1547,11 @@ qmi_message_get_tlv_printable (QmiMessage *self,
g_return_val_if_fail (line_prefix != NULL, NULL);
g_return_val_if_fail (raw != NULL, NULL);
- value_hex = qmi_helpers_str_hex (raw, raw_length, ':');
+ if (qmi_utils_get_show_personal_info ())
+ value_hex = qmi_helpers_str_hex (raw, raw_length, ':');
+ else
+ value_hex = g_strdup ("###...");
+
printable = g_strdup_printf ("%sTLV:\n"
"%s type = 0x%02x\n"
"%s length = %" G_GSIZE_FORMAT "\n"
diff --git a/src/libqmi-glib/qmi-utils.c b/src/libqmi-glib/qmi-utils.c
index 8b50466..ff81b73 100644
--- a/src/libqmi-glib/qmi-utils.c
+++ b/src/libqmi-glib/qmi-utils.c
@@ -20,6 +20,7 @@
*
* Copyright (C) 2012-2020 Dan Williams <dcbw@redhat.com>
* Copyright (C) 2012-2020 Aleksander Morgado <aleksander@aleksander.es>
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc.
*/
#include <config.h>
@@ -28,6 +29,7 @@
/*****************************************************************************/
static volatile gint __traces_enabled = FALSE;
+static volatile gint __hide_personal_info = FALSE;
gboolean
qmi_utils_get_traces_enabled (void)
@@ -40,3 +42,15 @@ qmi_utils_set_traces_enabled (gboolean enabled)
{
g_atomic_int_set (&__traces_enabled, enabled);
}
+
+void
+qmi_utils_set_show_personal_info (gboolean hide_personal_info)
+{
+ g_atomic_int_set (&__hide_personal_info, hide_personal_info);
+}
+
+gboolean
+qmi_utils_get_show_personal_info (void)
+{
+ return (gboolean) g_atomic_int_get (&__hide_personal_info);
+} \ No newline at end of file
diff --git a/src/libqmi-glib/qmi-utils.h b/src/libqmi-glib/qmi-utils.h
index 2982a6a..97a6174 100644
--- a/src/libqmi-glib/qmi-utils.h
+++ b/src/libqmi-glib/qmi-utils.h
@@ -23,7 +23,7 @@
* Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
* Copyright (C) 2000 Wim Taymans <wtay@chello.be>
* Copyright (C) 2002 Thomas Vander Stichele <thomas@apestaart.org>
-
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc.
*/
#ifndef _LIBQMI_GLIB_QMI_UTILS_H_
@@ -69,6 +69,27 @@ gboolean qmi_utils_get_traces_enabled (void);
*/
void qmi_utils_set_traces_enabled (gboolean enabled);
+/**
+ * qmi_utils_set_show_personal_info:
+ * @show_personal_info: %TRUE to show personal info in traces, %FALSE otherwise.
+ *
+ * Sets whether personal info is printed when traces are enabled.
+ *
+ * Since: 1.32
+ */
+void qmi_utils_set_show_personal_info (gboolean show_personal_info);
+
+/**
+ * qmi_utils_get_show_personal_info:
+ *
+ * Checks whether personal info should be hidden when traces are enabled.
+ *
+ * Returns: %TRUE to show personal info in trace, %FALSE otherwise.
+ *
+ * Since: 1.32
+ */
+gboolean qmi_utils_get_show_personal_info (void);
+
G_END_DECLS
#endif /* _LIBQMI_GLIB_QMI_UTILS_H_ */
diff --git a/src/qmicli/qmicli.c b/src/qmicli/qmicli.c
index 76d0565..7641186 100644
--- a/src/qmicli/qmicli.c
+++ b/src/qmicli/qmicli.c
@@ -16,6 +16,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* Copyright (C) 2012-2017 Aleksander Morgado <aleksander@aleksander.es>
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc.
*/
#include "config.h"
@@ -68,6 +69,7 @@ static gboolean device_open_auto_flag;
static gchar *client_cid_str;
static gboolean client_no_release_cid_flag;
static gboolean verbose_flag;
+static gboolean verbose_full_flag;
static gboolean silent_flag;
static gboolean version_flag;
@@ -129,6 +131,10 @@ static GOptionEntry main_entries[] = {
"Run action with verbose logs, including the debug ones",
NULL
},
+ { "verbose-full", 0, 0, G_OPTION_ARG_NONE, &verbose_full_flag,
+ "Run action with verbose logs, including the debug ones and personal info",
+ NULL
+ },
{ "silent", 0, 0, G_OPTION_ARG_NONE, &silent_flag,
"Run action with no logs; not even the error/warning ones",
NULL
@@ -210,7 +216,7 @@ log_handler (const gchar *log_domain,
g_assert_not_reached ();
}
- if (!verbose_flag && !err)
+ if (!verbose_flag && !verbose_full_flag && !err)
return;
g_fprintf (err ? stderr : stdout,
@@ -1018,14 +1024,28 @@ int main (int argc, char **argv)
g_log_set_handler (NULL, G_LOG_LEVEL_MASK, log_handler, NULL);
g_log_set_handler ("Qmi", G_LOG_LEVEL_MASK, log_handler, NULL);
- if (verbose_flag)
+
+ if (verbose_flag && verbose_full_flag) {
+ g_printerr ("error: cannot specify --verbose and --verbose-full at the same time\n");
+ exit (EXIT_FAILURE);
+ } else if (verbose_flag) {
qmi_utils_set_traces_enabled (TRUE);
+ qmi_utils_set_show_personal_info (FALSE);
+ } else if (verbose_full_flag) {
+ qmi_utils_set_traces_enabled (TRUE);
+ qmi_utils_set_show_personal_info (TRUE);
+ }
#if QMI_MBIM_QMUX_SUPPORTED
/* libmbim logging */
g_log_set_handler ("Mbim", G_LOG_LEVEL_MASK, log_handler, NULL);
- if (verbose_flag)
+ if (verbose_flag) {
mbim_utils_set_traces_enabled (TRUE);
+ mbim_utils_set_show_personal_info (FALSE);
+ } else if (verbose_full_flag) {
+ mbim_utils_set_traces_enabled (TRUE);
+ mbim_utils_set_show_personal_info (TRUE);
+ }
#endif
#if QMI_QRTR_SUPPORTED