From 6994ad63f2db76403bdd40d6d9a9b20f909c23b1 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Thu, 26 Sep 2002 18:27:19 +0000 Subject: [PATCH] Recognize not only user names, but also passwords. --- lib/url.c | 22 +++++++++++++++++----- lib/url.h | 3 ++- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/lib/url.c b/lib/url.c index 1078e17f..0f4a5019 100644 --- a/lib/url.c +++ b/lib/url.c @@ -1,7 +1,7 @@ /* * Sherlock Library -- URL Functions (according to RFC 1738 and 1808) * - * (c) 1997--2001 Martin Mares + * (c) 1997--2002 Martin Mares * (c) 2001 Robert Spalek * * This software may be freely distributed and used according to the terms @@ -206,6 +206,11 @@ url_split(byte *s, struct url *u, byte *d) { *w++ = 0; u->user = q; + if (e = strchr(q, ':')) + { + *e++ = 0; + u->pass = e; + } } else w = q; @@ -358,6 +363,7 @@ url_normalize(struct url *u, struct url *b) if (url_proto_path_flags[u->protoid] && !u->host || u->host && !*u->host || !u->host && u->user || + !u->user && u->pass || !u->rest) return URL_SYNTAX_ERROR; @@ -374,6 +380,7 @@ url_normalize(struct url *u, struct url *b) { u->host = b->host; u->user = b->user; + u->pass = b->pass; u->port = b->port; if (err = relpath_merge(u, b)) return err; @@ -461,6 +468,11 @@ url_pack(struct url *u, byte *d) if (u->user) { d = append(d, u->user, e); + if (u->pass) + { + d = append(d, ":", e); + d = append(d, u->pass, e); + } d = append(d, "@", e); } d = append(d, u->host, e); @@ -555,7 +567,7 @@ int main(int argc, char **argv) printf("split: error %d\n", err); return 1; } - printf("split: @%s@%s@%s@%d@%s\n", url.protocol, url.user, url.host, url.port, url.rest); + printf("split: @%s@%s@%s@%s@%d@%s\n", url.protocol, url.user, url.pass, url.host, url.port, url.rest); if (err = url_split("http://mj@www.hell.org/123/sub_dir/index.html;param?query&zzz/subquery#fragment", &url0, buf3)) { printf("split base: error %d\n", err); @@ -566,19 +578,19 @@ int main(int argc, char **argv) printf("normalize base: error %d\n", err); return 1; } - printf("base: @%s@%s@%s@%d@%s\n", url0.protocol, url0.user, url0.host, url0.port, url0.rest); + printf("base: @%s@%s@%s@%s@%d@%s\n", url0.protocol, url0.user, url0.pass, url0.host, url0.port, url0.rest); if (err = url_normalize(&url, &url0)) { printf("normalize: error %d\n", err); return 1; } - printf("normalize: @%s@%s@%s@%d@%s\n", url.protocol, url.user, url.host, url.port, url.rest); + printf("normalize: @%s@%s@%s@%s@%d@%s\n", url.protocol, url.user, url.pass, url.host, url.port, url.rest); if (err = url_canonicalize(&url)) { printf("canonicalize: error %d\n", err); return 1; } - printf("canonicalize: @%s@%s@%s@%d@%s\n", url.protocol, url.user, url.host, url.port, url.rest); + printf("canonicalize: @%s@%s@%s@%s@%d@%s\n", url.protocol, url.user, url.pass, url.host, url.port, url.rest); if (err = url_pack(&url, buf4)) { printf("pack: error %d\n", err); diff --git a/lib/url.h b/lib/url.h index 44c9bc2c..c01c1693 100644 --- a/lib/url.h +++ b/lib/url.h @@ -1,7 +1,7 @@ /* * Sherlock Library -- URL Functions * - * (c) 1997 Martin Mares + * (c) 1997--2002 Martin Mares * (c) 2001 Robert Spalek * * This software may be freely distributed and used according to the terms @@ -38,6 +38,7 @@ struct url { byte *protocol; uns protoid; byte *user; + byte *pass; byte *host; uns port; /* ~0 if unspec */ byte *rest; -- 2.39.2