<p>lynxis lazus <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/19142">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, but someone else must approve
  neels: Looks good to me, approved
  pespin: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">sockaddr_str: add osmo_sockaddr_str_from_str2() which doesn't set the port<br><br>In case the port isn't known at the time osmo_sockaddr_str_from_str2()<br>parse only the ip and don't touch the port.<br>This is the case when a user has different vty commands for ip and port.<br><br>Change-Id: Ifd4e282586b8bd40b912a9f1c25f9e8208420106<br>---<br>M include/osmocom/core/sockaddr_str.h<br>M src/sockaddr_str.c<br>2 files changed, 34 insertions(+), 14 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/core/sockaddr_str.h b/include/osmocom/core/sockaddr_str.h</span><br><span>index e42216a..d96b743 100644</span><br><span>--- a/include/osmocom/core/sockaddr_str.h</span><br><span>+++ b/include/osmocom/core/sockaddr_str.h</span><br><span>@@ -74,6 +74,7 @@</span><br><span> int osmo_sockaddr_str_cmp(const struct osmo_sockaddr_str *a, const struct osmo_sockaddr_str *b);</span><br><span> </span><br><span> int osmo_sockaddr_str_from_str(struct osmo_sockaddr_str *sockaddr_str, const char *ip, uint16_t port);</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_sockaddr_str_from_str2(struct osmo_sockaddr_str *sockaddr_str, const char *ip);</span><br><span> </span><br><span> int osmo_sockaddr_str_from_in_addr(struct osmo_sockaddr_str *sockaddr_str, const struct in_addr *addr, uint16_t port);</span><br><span> int osmo_sockaddr_str_from_in6_addr(struct osmo_sockaddr_str *sockaddr_str, const struct in6_addr *addr, uint16_t port);</span><br><span>diff --git a/src/sockaddr_str.c b/src/sockaddr_str.c</span><br><span>index c38a05c..f5508a0 100644</span><br><span>--- a/src/sockaddr_str.c</span><br><span>+++ b/src/sockaddr_str.c</span><br><span>@@ -188,6 +188,34 @@</span><br><span>        return AF_UNSPEC;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Safely copy the given ip string to sockaddr_str, classify to AF_INET or AF_INET6.</span><br><span style="color: hsl(120, 100%, 40%);">+ * Data will be written to sockaddr_str even if an error is returned.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[out] sockaddr_str  The instance to copy to.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \param[in] ip  Valid IP address string.</span><br><span style="color: hsl(120, 100%, 40%);">+ * \return 0 on success, negative if copying the address string failed (e.g. too long), if the address family could</span><br><span style="color: hsl(120, 100%, 40%);">+ *         not be detected (i.e. if osmo_ip_str_type() returned AF_UNSPEC), or if sockaddr_str is NULL.</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+int osmo_sockaddr_str_from_str2(struct osmo_sockaddr_str *sockaddr_str, const char *ip)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+    int rc;</span><br><span style="color: hsl(120, 100%, 40%);">+       if (!sockaddr_str)</span><br><span style="color: hsl(120, 100%, 40%);">+            return -ENOSPC;</span><br><span style="color: hsl(120, 100%, 40%);">+       if (!ip)</span><br><span style="color: hsl(120, 100%, 40%);">+              ip = "";</span><br><span style="color: hsl(120, 100%, 40%);">+    sockaddr_str->af = osmo_ip_str_type(ip);</span><br><span style="color: hsl(120, 100%, 40%);">+   /* to be compatible with previous behaviour, zero the full IP field.</span><br><span style="color: hsl(120, 100%, 40%);">+   * Allow the usage of memcmp(&sockaddr_str, ...) */</span><br><span style="color: hsl(120, 100%, 40%);">+       memset(sockaddr_str->ip, 0x0, sizeof(sockaddr_str->ip));</span><br><span style="color: hsl(120, 100%, 40%);">+        rc = osmo_strlcpy(sockaddr_str->ip, ip, sizeof(sockaddr_str->ip));</span><br><span style="color: hsl(120, 100%, 40%);">+      if (rc <= 0)</span><br><span style="color: hsl(120, 100%, 40%);">+               return -EIO;</span><br><span style="color: hsl(120, 100%, 40%);">+  if (rc >= sizeof(sockaddr_str->ip))</span><br><span style="color: hsl(120, 100%, 40%);">+             return -ENOSPC;</span><br><span style="color: hsl(120, 100%, 40%);">+       if (sockaddr_str->af == AF_UNSPEC)</span><br><span style="color: hsl(120, 100%, 40%);">+         return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+       return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /*! Safely copy the given ip string to sockaddr_str, classify to AF_INET or AF_INET6, and set the port.</span><br><span>  * Data will be written to sockaddr_str even if an error is returned.</span><br><span>  * \param[out] sockaddr_str  The instance to copy to.</span><br><span>@@ -201,20 +229,11 @@</span><br><span>  int rc;</span><br><span>      if (!sockaddr_str)</span><br><span>           return -ENOSPC;</span><br><span style="color: hsl(0, 100%, 40%);">- if (!ip)</span><br><span style="color: hsl(0, 100%, 40%);">-                ip = "";</span><br><span style="color: hsl(0, 100%, 40%);">-      *sockaddr_str = (struct osmo_sockaddr_str){</span><br><span style="color: hsl(0, 100%, 40%);">-             .af = osmo_ip_str_type(ip),</span><br><span style="color: hsl(0, 100%, 40%);">-             .port = port,</span><br><span style="color: hsl(0, 100%, 40%);">-   };</span><br><span style="color: hsl(0, 100%, 40%);">-      rc = osmo_strlcpy(sockaddr_str->ip, ip, sizeof(sockaddr_str->ip));</span><br><span style="color: hsl(0, 100%, 40%);">-        if (rc <= 0)</span><br><span style="color: hsl(0, 100%, 40%);">-         return -EIO;</span><br><span style="color: hsl(0, 100%, 40%);">-    if (rc >= sizeof(sockaddr_str->ip))</span><br><span style="color: hsl(0, 100%, 40%);">-               return -ENOSPC;</span><br><span style="color: hsl(0, 100%, 40%);">- if (sockaddr_str->af == AF_UNSPEC)</span><br><span style="color: hsl(0, 100%, 40%);">-           return -EINVAL;</span><br><span style="color: hsl(0, 100%, 40%);">- return 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   rc = osmo_sockaddr_str_from_str2(sockaddr_str, ip);</span><br><span style="color: hsl(120, 100%, 40%);">+   sockaddr_str->port = port;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       return rc;</span><br><span> }</span><br><span> </span><br><span> /*! Convert IPv4 address to osmo_sockaddr_str, and set port.</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/19142">change 19142</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/+/19142"/><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: Ifd4e282586b8bd40b912a9f1c25f9e8208420106 </div>
<div style="display:none"> Gerrit-Change-Number: 19142 </div>
<div style="display:none"> Gerrit-PatchSet: 12 </div>
<div style="display:none"> Gerrit-Owner: lynxis lazus <lynxis@fe80.eu> </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-Reviewer: lynxis lazus <lynxis@fe80.eu> </div>
<div style="display:none"> Gerrit-Reviewer: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>