diff --git a/lib/modules/Protocols.pmod/LDAP.pmod/client.pike b/lib/modules/Protocols.pmod/LDAP.pmod/client.pike
index 3d3246cf8e08b9b526f1c2dfc793cca244dae744..95e9910d809840e9904c530e8aa54b62f5f3feb4 100644
--- a/lib/modules/Protocols.pmod/LDAP.pmod/client.pike
+++ b/lib/modules/Protocols.pmod/LDAP.pmod/client.pike
@@ -1,6 +1,6 @@
 // LDAP client protocol implementation for Pike.
 //
-// $Id: client.pike,v 1.14 2000/02/17 17:59:53 hop Exp $
+// $Id: client.pike,v 1.15 2000/07/14 15:29:39 hop Exp $
 //
 // Honza Petrous, hop@unibase.cz
 //
@@ -48,6 +48,8 @@
 //
 //	v1.14 2000-02-17 - added decoding of UTF8 strings for v3 protocol
 //
+//	newer versions - see CVS at roxen.com (hop)
+//
 // Specifications:
 //
 //	RFC 1558			  (search filter representations)
@@ -941,4 +943,52 @@
   } // modify
 
 
+  // API function
+  //
+  // parse_url(string ldapuri)
+  //
+  //	ldapuri:	LDAP URL
+  mapping|int parse_url (string ldapuri) {
+
+  // ldap://machine.at.home.cz:123/c=cz?attr1,attr2,attr3?sub?(uid=*)?!bindname=uid=hop,dc=unibase,dc=cz"
+
+  string url=ldapuri, s, scheme;
+  array ar;
+  mapping res;
+
+    s = (url / ":")[0];
+    url = url[sizeof(s)..];
+
+    res = ([ "scheme" : s ]);
+
+#ifdef LDAP_URL_STRICT
+    if (url[..2] != "://")
+      return(-1);
+#endif
+
+    s = (url[3..] / "/")[0];
+    url = url[sizeof(s)+4..];
+
+    res += ([ "host" : (s / ":")[0] ]);
+
+    if(sizeof(s / ":") > 1)
+      res += ([ "port" : (s / ":")[1] ]);
+
+    ar = url / "?";
+
+    switch (sizeof(ar)) {
+      case 5: res += ([ "ext" : ar[4] ]);
+      case 4: res += ([ "filter" : ar[3] ]);
+      case 3: res += ([ "scope" : ar[2] ]);
+      case 2: res += sizeof(ar[1]) ? ([ "attributes" : ar[1] / "," ]) : ([]);
+      case 1: res += ([ "dn" : ar[0] ]);
+    }
+
+    //write("DEB: mapping: [%O] \n", res);
+
+    return (res);
+
+  } //parse_uri
+
+
 #endif