<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/20472">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  laforge: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">vty/command: restrict the use of '.', '!', and '@' as flags<br><br>Change-Id: Icb4acbab0a15de2b0ed7b88fb0e227675317146a<br>Related: SYS#4937<br>---<br>M include/osmocom/vty/vty.h<br>M src/vty/command.c<br>M src/vty/vty.c<br>M tests/vty/vty_test.c<br>M tests/vty/vty_test.err<br>5 files changed, 27 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/vty/vty.h b/include/osmocom/vty/vty.h</span><br><span>index 9cadb7a..4e83b1b 100644</span><br><span>--- a/include/osmocom/vty/vty.h</span><br><span>+++ b/include/osmocom/vty/vty.h</span><br><span>@@ -30,6 +30,9 @@</span><br><span> </span><br><span> /* Number of application / library specific VTY attributes */</span><br><span> #define VTY_CMD_USR_ATTR_NUM 32</span><br><span style="color: hsl(120, 100%, 40%);">+/* Flag characters reserved for global VTY attributes */</span><br><span style="color: hsl(120, 100%, 40%);">+#define VTY_CMD_ATTR_FLAGS_RESERVED \</span><br><span style="color: hsl(120, 100%, 40%);">+    { '.', '!', '@' }</span><br><span> </span><br><span> /*! VTY events */</span><br><span> enum event {</span><br><span>diff --git a/src/vty/command.c b/src/vty/command.c</span><br><span>index d64902b..d71f686 100644</span><br><span>--- a/src/vty/command.c</span><br><span>+++ b/src/vty/command.c</span><br><span>@@ -4309,6 +4309,11 @@</span><br><span>                 if (cmd_lib_attr_letters[i] == '\0')</span><br><span>                         continue;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+         /* Some flag characters are reserved for global attributes */</span><br><span style="color: hsl(120, 100%, 40%);">+         const char rafc[] = VTY_CMD_ATTR_FLAGS_RESERVED;</span><br><span style="color: hsl(120, 100%, 40%);">+              for (j = 0; j < ARRAY_SIZE(rafc); j++)</span><br><span style="color: hsl(120, 100%, 40%);">+                     OSMO_ASSERT(cmd_lib_attr_letters[i] != rafc[j]);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>           /* Only upper case flag letters are allowed for libraries */</span><br><span>                 OSMO_ASSERT(cmd_lib_attr_letters[i] >= 'A');</span><br><span>              OSMO_ASSERT(cmd_lib_attr_letters[i] <= 'Z');</span><br><span>diff --git a/src/vty/vty.c b/src/vty/vty.c</span><br><span>index d12efa0..f4e8e80 100644</span><br><span>--- a/src/vty/vty.c</span><br><span>+++ b/src/vty/vty.c</span><br><span>@@ -1810,6 +1810,15 @@</span><br><span>            if (app_info->usr_attr_letters[i] == '\0')</span><br><span>                        continue;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+         /* Some flag characters are reserved for global attributes */</span><br><span style="color: hsl(120, 100%, 40%);">+         const char rafc[] = VTY_CMD_ATTR_FLAGS_RESERVED;</span><br><span style="color: hsl(120, 100%, 40%);">+              for (j = 0; j < ARRAY_SIZE(rafc); j++) {</span><br><span style="color: hsl(120, 100%, 40%);">+                   if (app_info->usr_attr_letters[i] != rafc[j])</span><br><span style="color: hsl(120, 100%, 40%);">+                              continue;</span><br><span style="color: hsl(120, 100%, 40%);">+                     fprintf(stderr, "Attribute flag character '%c' is reserved "</span><br><span style="color: hsl(120, 100%, 40%);">+                                "for globals! Please fix.\n", app_info->usr_attr_letters[i]);</span><br><span style="color: hsl(120, 100%, 40%);">+            }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>          /* Upper case flag letters are reserved for libraries */</span><br><span>             if (app_info->usr_attr_letters[i] >= 'A' &&</span><br><span>                app_info->usr_attr_letters[i] <= 'Z') {</span><br><span>diff --git a/tests/vty/vty_test.c b/tests/vty/vty_test.c</span><br><span>index 3a69e13..1db0d5c 100644</span><br><span>--- a/tests/vty/vty_test.c</span><br><span>+++ b/tests/vty/vty_test.c</span><br><span>@@ -521,6 +521,9 @@</span><br><span>         VTY_TEST_ATTR_FOO_DUP,</span><br><span>       VTY_TEST_ATTR_ZOO_DUP,</span><br><span>       VTY_TEST_ATTR_UPPER,</span><br><span style="color: hsl(120, 100%, 40%);">+  VTY_TEST_ATTR_RAFC_DOT,</span><br><span style="color: hsl(120, 100%, 40%);">+       VTY_TEST_ATTR_RAFC_EXCL,</span><br><span style="color: hsl(120, 100%, 40%);">+      VTY_TEST_ATTR_RAFC_AT,</span><br><span> };</span><br><span> </span><br><span> int main(int argc, char **argv)</span><br><span>@@ -538,6 +541,10 @@</span><br><span>                   [VTY_TEST_ATTR_ZOO_DUP] = 'z',</span><br><span>                       /* Reserved for libraries */</span><br><span>                         [VTY_TEST_ATTR_UPPER]   = 'X',</span><br><span style="color: hsl(120, 100%, 40%);">+                        /* Reserved for global attribues */</span><br><span style="color: hsl(120, 100%, 40%);">+                   [VTY_TEST_ATTR_RAFC_DOT]        '.',</span><br><span style="color: hsl(120, 100%, 40%);">+                  [VTY_TEST_ATTR_RAFC_EXCL]       '!',</span><br><span style="color: hsl(120, 100%, 40%);">+                  [VTY_TEST_ATTR_RAFC_AT]         '@',</span><br><span>                 },</span><br><span>   };</span><br><span> </span><br><span>diff --git a/tests/vty/vty_test.err b/tests/vty/vty_test.err</span><br><span>index a85b129..1cb4190 100644</span><br><span>--- a/tests/vty/vty_test.err</span><br><span>+++ b/tests/vty/vty_test.err</span><br><span>@@ -1,6 +1,9 @@</span><br><span> Found duplicate flag letter 'f' in application specific attributes (index 0 vs 3)! Please fix.</span><br><span> Found duplicate flag letter 'z' in application specific attributes (index 2 vs 4)! Please fix.</span><br><span> Attribute flag letter 'X' is reserved for libraries! Please fix.</span><br><span style="color: hsl(120, 100%, 40%);">+Attribute flag character '.' is reserved for globals! Please fix.</span><br><span style="color: hsl(120, 100%, 40%);">+Attribute flag character '!' is reserved for globals! Please fix.</span><br><span style="color: hsl(120, 100%, 40%);">+Attribute flag character '@' is reserved for globals! Please fix.</span><br><span> Got VTY event: 2</span><br><span> Got VTY event: 2</span><br><span> Got VTY event: 2</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/20472">change 20472</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/libosmocore/+/20472"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Icb4acbab0a15de2b0ed7b88fb0e227675317146a </div>
<div style="display:none"> Gerrit-Change-Number: 20472 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>