Merge T3490-proposal1 into master
[gnupg.git] / dirmngr / ldap-parse-uri.c
index 2a341ad..94d4efd 100644 (file)
@@ -14,7 +14,7 @@
  * GNU General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
+ * along with this program; if not, see <https://www.gnu.org/licenses/>.
  */
 
 #include <config.h>
@@ -27,7 +27,7 @@
 # include <ldap.h>
 #endif
 
-#include "util.h"
+#include "../common/util.h"
 #include "http.h"
 
 /* Returns 1 if the string is an LDAP URL (begins with ldap:, ldaps:
@@ -94,7 +94,7 @@ ldap_parse_uri (parsed_uri_t *purip, const char *uri)
   if (result != 0)
     {
       log_error ("Unable to parse LDAP uri '%s'\n", uri);
-      err = GPG_ERR_ASS_GENERAL;
+      err = GPG_ERR_GENERAL;
       goto out;
     }
 
@@ -127,7 +127,7 @@ ldap_parse_uri (parsed_uri_t *purip, const char *uri)
 
   len = 0;
 
-#define add(s) { if (s) len += strlen (s) + 1; }
+#define add(s) do { if (s) len += strlen (s) + 1; } while (0)
 
   add (scheme);
   add (host);
@@ -166,6 +166,11 @@ ldap_parse_uri (parsed_uri_t *purip, const char *uri)
   if (password)
     {
       puri->query = calloc (sizeof (*puri->query), 1);
+      if (!puri->query)
+        {
+          err = gpg_err_code_from_syserror ();
+          goto out;
+        }
       puri->query->name = "password";
       copy (puri->query->value, password);
       puri->query->valuelen = strlen (password) + 1;
@@ -221,7 +226,8 @@ ldap_escape_filter (const char *filter)
          case ')':
          case '\\':
          case '/':
-           sprintf (&escaped[escaped_i], "%%%02x", filter[filter_i]);
+           snprintf (&escaped[escaped_i], 4, "%%%02x",
+                     ((const unsigned char *)filter)[filter_i]);
            escaped_i += 3;
            break;