summaryrefslogtreecommitdiff
path: root/src/util/payto.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2024-02-21 23:10:53 +0100
committerChristian Grothoff <christian@grothoff.org>2024-02-21 23:10:53 +0100
commit04161bb24b693765e053f8189aef9ef7b2b140d8 (patch)
treee117a1769d24bc2467898fabadbdd0aaa11204a3 /src/util/payto.c
parentf27484a6c21a9e02278cf8560aae56b51c0da668 (diff)
downloadexchange-04161bb24b693765e053f8189aef9ef7b2b140d8.tar.gz
exchange-04161bb24b693765e053f8189aef9ef7b2b140d8.tar.bz2
exchange-04161bb24b693765e053f8189aef9ef7b2b140d8.zip
allow port in x-taler-bank
Diffstat (limited to 'src/util/payto.c')
-rw-r--r--src/util/payto.c45
1 files changed, 34 insertions, 11 deletions
diff --git a/src/util/payto.c b/src/util/payto.c
index 4670e35f0..5e0391883 100644
--- a/src/util/payto.c
+++ b/src/util/payto.c
@@ -202,6 +202,7 @@ validate_payto_xtalerbank (const char *account_url)
const char *user;
const char *host;
bool dot_ok;
+ bool post_colon;
#define XTALERBANK_PREFIX "payto://x-taler-bank/"
if (0 != strncasecmp (account_url,
@@ -224,31 +225,53 @@ validate_payto_xtalerbank (const char *account_url)
if (NULL != strchr (user + 1, '/'))
return GNUNET_strdup ("invalid character '/' after account name");
dot_ok = false;
+ post_colon = false;
while (host != user)
{
char c = host[0];
- if ('.' == c)
+ if (':' == c)
{
- if (! dot_ok)
- return GNUNET_strdup ("invalid domain name (misplaced '.')");
- dot_ok = false;
+ post_colon = true;
+ host++;
+ continue;
}
- else
+ if (post_colon)
{
- if (! ( ('-' == c) ||
- ( ('0' <= c) && ('9' >= c) ) ||
- ( ('a' <= c) && ('z' >= c) ) ||
- ( ('A' <= c) && ('Z' >= c) ) ) )
+ if (! ( ('0' <= c) && ('9' >= c) ) )
{
char *err;
GNUNET_asprintf (&err,
- "invalid character '%c' in domain name",
+ "invalid character '%c' in port",
c);
return err;
}
- dot_ok = true;
+ }
+ else
+ {
+ if ('.' == c)
+ {
+ if (! dot_ok)
+ return GNUNET_strdup ("invalid domain name (misplaced '.')");
+ dot_ok = false;
+ }
+ else
+ {
+ if (! ( ('-' == c) ||
+ ( ('0' <= c) && ('9' >= c) ) ||
+ ( ('a' <= c) && ('z' >= c) ) ||
+ ( ('A' <= c) && ('Z' >= c) ) ) )
+ {
+ char *err;
+
+ GNUNET_asprintf (&err,
+ "invalid character '%c' in domain name",
+ c);
+ return err;
+ }
+ dot_ok = true;
+ }
}
host++;
}