]> git.sur5r.net Git - openldap/log
openldap
25 years agoAllow null dn.
Kurt Zeilenga [Fri, 13 Aug 1999 22:53:11 +0000 (22:53 +0000)]
Allow null dn.

25 years agoFix empty dn.
Kurt Zeilenga [Fri, 13 Aug 1999 22:43:21 +0000 (22:43 +0000)]
Fix empty dn.

25 years agoNeed to type 'make test' to run tests.
Kurt Zeilenga [Fri, 13 Aug 1999 21:41:53 +0000 (21:41 +0000)]
Need to type 'make test' to run tests.

25 years agoForce to LDAPv3 until BIND
Kurt Zeilenga [Fri, 13 Aug 1999 06:09:48 +0000 (06:09 +0000)]
Force to LDAPv3 until BIND

25 years agoRework --without-subdir to remove trailing /
Kurt Zeilenga [Fri, 13 Aug 1999 02:04:32 +0000 (02:04 +0000)]
Rework --without-subdir to remove trailing /

25 years agoAdd DN_INDICES search filter and has_children support. Move id2children
Kurt Zeilenga [Fri, 13 Aug 1999 00:55:08 +0000 (00:55 +0000)]
Add DN_INDICES search filter and has_children support.  Move id2children
behind -UDN_INDICES.

25 years agoAdd LDAPsubentry to allow some structure to be added to subentries
Kurt Zeilenga [Thu, 12 Aug 1999 19:00:20 +0000 (19:00 +0000)]
Add LDAPsubentry to allow some structure to be added to subentries

25 years agoAdd "objectclass: LDAPsubentry" to provide structure to subentries
Kurt Zeilenga [Thu, 12 Aug 1999 18:58:51 +0000 (18:58 +0000)]
Add "objectclass: LDAPsubentry" to provide structure to subentries

25 years agoAdd dn_subtree() (used for subtree index generation)
Kurt Zeilenga [Thu, 12 Aug 1999 04:20:32 +0000 (04:20 +0000)]
Add dn_subtree() (used for subtree index generation)

25 years agoLeft DN_INDICES defines by mistake... it's not ready for prime time yet.
Kurt Zeilenga [Thu, 12 Aug 1999 01:05:33 +0000 (01:05 +0000)]
Left DN_INDICES defines by mistake... it's not ready for prime time yet.
Change prefixes to make eyeballing .dbb files easier

25 years agoImplement DN_PARENT_PREFIX and framework for DN_SUBTREE_PREFIX.
Kurt Zeilenga [Wed, 11 Aug 1999 20:59:28 +0000 (20:59 +0000)]
Implement DN_PARENT_PREFIX and framework for DN_SUBTREE_PREFIX.

25 years agoModify replace_values not to merge in new values when no value is
Kurt Zeilenga [Wed, 11 Aug 1999 19:05:40 +0000 (19:05 +0000)]
Modify replace_values not to merge in new values when no value is
was provided.

25 years agoAdd LDAPsubentry (without OID).
Kurt Zeilenga [Wed, 11 Aug 1999 19:01:05 +0000 (19:01 +0000)]
Add LDAPsubentry (without OID).

25 years agoRemoved redundant dn_normalization(strdup(ndn)) from dn2id codes.
Kurt Zeilenga [Wed, 11 Aug 1999 02:57:07 +0000 (02:57 +0000)]
Removed redundant dn_normalization(strdup(ndn)) from dn2id codes.
Added initial DN_INDICES code behind #ifdef DN_INDICES.
  Generates only equality index.  Will add parent and subtree indices next.

25 years agoForce commit: didn't mean to include in last commit
Kurt Zeilenga [Tue, 10 Aug 1999 17:32:56 +0000 (17:32 +0000)]
Force commit:  didn't mean to include in last commit
Additional of FORCE on -on: rules.

25 years agoDistribute missing for folks who don't have autoconf/automake/libtool
Kurt Zeilenga [Tue, 10 Aug 1999 17:30:25 +0000 (17:30 +0000)]
Distribute missing for folks who don't have autoconf/automake/libtool
installed.

25 years agoFix build dependencies. Last try was not parallel-safe.
Howard Chu [Mon, 9 Aug 1999 23:01:31 +0000 (23:01 +0000)]
Fix build dependencies. Last try was not parallel-safe.

25 years agoFix tv.sec typo in last commit. srand(tv.tv_sec * (tv.tv_usec+1))
Kurt Zeilenga [Mon, 9 Aug 1999 19:06:29 +0000 (19:06 +0000)]
Fix tv.sec typo in last commit.  srand(tv.tv_sec * (tv.tv_usec+1))

25 years agolimit maxindirect to 9
Kurt Zeilenga [Mon, 9 Aug 1999 18:51:02 +0000 (18:51 +0000)]
limit maxindirect to 9
ifdef CONT_POSTFIX, swap index and old key in new key.  Not defined as
it would cause more grief than good (but should be enabled on next major
index change).

25 years agoRemove lint.
Kurt Zeilenga [Mon, 9 Aug 1999 18:48:23 +0000 (18:48 +0000)]
Remove lint.

25 years agoWrap prints of DN and other strings in double quotes so user can easily
Kurt Zeilenga [Mon, 9 Aug 1999 18:33:17 +0000 (18:33 +0000)]
Wrap prints of DN and other strings in double quotes so user can easily
determine if string contains leading/trailing whitespace.

25 years agoFix explicit backend dependencies. Wildcard was unreliable.
Howard Chu [Mon, 9 Aug 1999 01:29:27 +0000 (01:29 +0000)]
Fix explicit backend dependencies. Wildcard was unreliable.

25 years agoAdd missing veryclean target
Howard Chu [Mon, 9 Aug 1999 01:27:37 +0000 (01:27 +0000)]
Add missing veryclean target

25 years agoRebuild configure and portable.h.in
Kurt Zeilenga [Sun, 8 Aug 1999 17:17:44 +0000 (17:17 +0000)]
Rebuild configure and portable.h.in

25 years agoldap_op.c: Get LDAP->ld_lberoptions from libldap/ldap-int.h.
Hallvard Furuseth [Sun, 8 Aug 1999 15:18:38 +0000 (15:18 +0000)]
ldap_op.c: Get LDAP->ld_lberoptions from libldap/ldap-int.h.
slurp.h:   #undef ldap_debug before a #define which conflicts with ldap-int.h.

25 years agoSeparate put_nextid() out from next_id_write() in back-ldbm/nextid.c.
Hallvard Furuseth [Sun, 8 Aug 1999 07:28:44 +0000 (07:28 +0000)]
Separate put_nextid() out from next_id_write() in back-ldbm/nextid.c.
Use it in tools/ldif2id2entry.c instead of making the NEXTID file "by hand".

25 years agoRemove bogus free.
Kurt Zeilenga [Sun, 8 Aug 1999 04:30:51 +0000 (04:30 +0000)]
Remove bogus free.

25 years agoFix typo in previous commit as well as integrate bubble move
Kurt Zeilenga [Sun, 8 Aug 1999 00:54:27 +0000 (00:54 +0000)]
Fix typo in previous commit as well as integrate bubble move
replacement.

25 years agoReplace bubble move with SAFEMEMCPY
Kurt Zeilenga [Sun, 8 Aug 1999 00:02:05 +0000 (00:02 +0000)]
Replace bubble move with SAFEMEMCPY

25 years agoEliminate a bubble move.
Kurt Zeilenga [Sat, 7 Aug 1999 23:25:48 +0000 (23:25 +0000)]
Eliminate a bubble move.

25 years agoFail if libtool's libltdl is not present and --enable-modules was given.
Howard Chu [Sat, 7 Aug 1999 22:44:26 +0000 (22:44 +0000)]
Fail if libtool's libltdl is not present and --enable-modules was given.

25 years agoUse a cursor to step through ID_BLOCKS.
Kurt Zeilenga [Sat, 7 Aug 1999 21:14:24 +0000 (21:14 +0000)]
Use a cursor to step through ID_BLOCKS.

25 years agoAdd 'quick start guide' reference.
Kurt Zeilenga [Sat, 7 Aug 1999 19:08:48 +0000 (19:08 +0000)]
Add 'quick start guide' reference.
Update 'hints' reference to point to FAQ.

25 years agoRely on FAQ for up to date hints.
Kurt Zeilenga [Sat, 7 Aug 1999 19:02:35 +0000 (19:02 +0000)]
Rely on FAQ for up to date hints.

25 years agoUpdate TODO... should be moved to the developer's FAQ.
Kurt Zeilenga [Sat, 7 Aug 1999 18:59:15 +0000 (18:59 +0000)]
Update TODO... should be moved to the developer's FAQ.

25 years agoAdd extensible filter support to -lldap. Need to implement server
Kurt Zeilenga [Sat, 7 Aug 1999 18:54:49 +0000 (18:54 +0000)]
Add extensible filter support to -lldap.  Need to implement server
side (which most is dependent upon having matching rule support).

25 years agoFinal round of module changes
Howard Chu [Sat, 7 Aug 1999 11:37:43 +0000 (11:37 +0000)]
Final round of module changes

25 years agoModified to use libtool's ltdl instead of gmodule. Full Makefile support
Howard Chu [Sat, 7 Aug 1999 07:59:41 +0000 (07:59 +0000)]
Modified to use libtool's ltdl instead of gmodule. Full Makefile support
for building backends as modules.

25 years agoModified to use libtool's ltdl instead of gmodule
Howard Chu [Sat, 7 Aug 1999 07:58:11 +0000 (07:58 +0000)]
Modified to use libtool's ltdl instead of gmodule

25 years agoModified for use with libtool's ltdl instead of gmodule
Howard Chu [Sat, 7 Aug 1999 07:54:45 +0000 (07:54 +0000)]
Modified for use with libtool's ltdl instead of gmodule

25 years agoMinor cleanup:
Hallvard Furuseth [Sat, 7 Aug 1999 05:36:48 +0000 (05:36 +0000)]
Minor cleanup:
Fix Statlog() formats, remove an implicit int, include <ctype.h> for isspace().

25 years agoFix filter escapes. ITS#247
Kurt Zeilenga [Sat, 7 Aug 1999 04:48:16 +0000 (04:48 +0000)]
Fix filter escapes.  ITS#247

25 years agoRemove gmon files
Kurt Zeilenga [Sat, 7 Aug 1999 04:38:33 +0000 (04:38 +0000)]
Remove gmon files

25 years agoPlug memory leaks (parallell to back-ldbm/idl.c version 1.26)
Hallvard Furuseth [Sat, 7 Aug 1999 03:38:24 +0000 (03:38 +0000)]
Plug memory leaks (parallell to back-ldbm/idl.c version 1.26)

25 years agoFix typo in error message: idl_fetch -> bdb2i_idl_fetch
Hallvard Furuseth [Sat, 7 Aug 1999 03:31:46 +0000 (03:31 +0000)]
Fix typo in error message: idl_fetch -> bdb2i_idl_fetch

25 years agoAdd copyright notices.
Kurt Zeilenga [Fri, 6 Aug 1999 23:07:46 +0000 (23:07 +0000)]
Add copyright notices.

25 years agoPreliminary Make rules to allow building backends as modules.
Howard Chu [Fri, 6 Aug 1999 16:15:05 +0000 (16:15 +0000)]
Preliminary Make rules to allow building backends as modules.

25 years agoFor dynamic modules, must explicitly zero BackendInfo structure in
Howard Chu [Fri, 6 Aug 1999 13:16:26 +0000 (13:16 +0000)]
For dynamic modules, must explicitly zero BackendInfo structure in
init_module. Since it's a local var, you have no idea what kind of
garbage is sitting in important function pointers...

25 years agoFactor out ldif entry parsing so all ldif2* tools will read the same format.
Hallvard Furuseth [Fri, 6 Aug 1999 03:01:23 +0000 (03:01 +0000)]
Factor out ldif entry parsing so all ldif2* tools will read the same format.
Valid LDIF files are parsed the same way as before.

25 years agoTypo: s/elineno, elineno/elineno, lineno/ in error message
Hallvard Furuseth [Fri, 6 Aug 1999 02:02:34 +0000 (02:02 +0000)]
Typo: s/elineno, elineno/elineno, lineno/ in error message

25 years agolastmod is on by default.
Kurt Zeilenga [Thu, 5 Aug 1999 23:52:14 +0000 (23:52 +0000)]
lastmod is on by default.

25 years agoAdd missing "\n" in usage statement
Kurt Zeilenga [Thu, 5 Aug 1999 20:50:40 +0000 (20:50 +0000)]
Add missing "\n" in usage statement

25 years agocreate SASL_LIBS to hold -lsasl
Kurt Zeilenga [Thu, 5 Aug 1999 02:25:19 +0000 (02:25 +0000)]
create SASL_LIBS to hold -lsasl
create SECURITY_LIBS (top.mk) to order $SASL_LIBS $KRB_LIBS $TLS_LIBS
use $SECURITY_LIBS in Makefile.in's instead of $KRB_LIBS $TLS_LIBS

25 years agoAdd basic configure support of --enable-quipu
Kurt Zeilenga [Thu, 5 Aug 1999 01:23:04 +0000 (01:23 +0000)]
Add basic configure support of --enable-quipu

25 years agobase64 encode userPassword
Kurt Zeilenga [Thu, 5 Aug 1999 00:56:54 +0000 (00:56 +0000)]
base64 encode userPassword

25 years agobase64 encode userPassword
Kurt Zeilenga [Thu, 5 Aug 1999 00:30:45 +0000 (00:30 +0000)]
base64 encode userPassword

25 years agoUpdate projects to use ldif2common.*
Kurt Zeilenga [Thu, 5 Aug 1999 00:08:26 +0000 (00:08 +0000)]
Update projects to use ldif2common.*
Remove lint

25 years agoAdd copyright notice.
Kurt Zeilenga [Wed, 4 Aug 1999 23:59:53 +0000 (23:59 +0000)]
Add copyright notice.

25 years agoAdd copyright notice and a few comments here and there
Kurt Zeilenga [Wed, 4 Aug 1999 23:59:13 +0000 (23:59 +0000)]
Add copyright notice and a few comments here and there

25 years agoAdd copyright notices
Kurt Zeilenga [Wed, 4 Aug 1999 23:57:27 +0000 (23:57 +0000)]
Add copyright notices

25 years agoAdd KEEPALIVE support.
Kurt Zeilenga [Wed, 4 Aug 1999 23:56:37 +0000 (23:56 +0000)]
Add KEEPALIVE support.

25 years agoAdd setup.dsp to workspace
Kurt Zeilenga [Wed, 4 Aug 1999 23:56:01 +0000 (23:56 +0000)]
Add setup.dsp to workspace

25 years agoAdd copyright notices.
Kurt Zeilenga [Wed, 4 Aug 1999 23:55:45 +0000 (23:55 +0000)]
Add copyright notices.

25 years agoForced commit: last log entry not applicable, instead:
Kurt Zeilenga [Wed, 4 Aug 1999 18:35:53 +0000 (18:35 +0000)]
Forced commit: last log entry not applicable, instead:
minor cleanup of parse table

25 years agoForced commit: last log not applicable, instead:
Kurt Zeilenga [Wed, 4 Aug 1999 18:34:58 +0000 (18:34 +0000)]
Forced commit: last log not applicable, instead:
put digest code behind #ifdef DIGEST_MD5 (for now)

25 years agoUse -llber set_nonblock implementation.
Kurt Zeilenga [Wed, 4 Aug 1999 18:32:38 +0000 (18:32 +0000)]
Use -llber set_nonblock implementation.
Use ldap_int_tblsize instead of s+1 in select.
Need to eliminate all to read(2).

25 years agoProvide set_nonblock code which acts upon ber_socket_t and use this
Kurt Zeilenga [Wed, 4 Aug 1999 18:29:59 +0000 (18:29 +0000)]
Provide set_nonblock code which acts upon ber_socket_t and use this
as in sockbuf_set_nonblock code.  Allows -llber and -lldap to share
a common implementation.

25 years agoUse LDAP_P in prototype for ldap_pvt_inet_aton
Kurt Zeilenga [Wed, 4 Aug 1999 18:27:15 +0000 (18:27 +0000)]
Use LDAP_P in prototype for ldap_pvt_inet_aton

25 years agoif urls is NULL, default to ldap:///
Gary Williams [Wed, 4 Aug 1999 18:26:19 +0000 (18:26 +0000)]
if urls is NULL, default to ldap:///

25 years agodon't force debug to 65535
Gary Williams [Wed, 4 Aug 1999 18:13:46 +0000 (18:13 +0000)]
don't force debug to 65535

25 years agos/return 0/return EXIT_SUCCESS/ in main(), #include <ac/stdlib.h> to get EXIT_*
Hallvard Furuseth [Wed, 4 Aug 1999 06:05:05 +0000 (06:05 +0000)]
s/return 0/return EXIT_SUCCESS/ in main(), #include <ac/stdlib.h> to get EXIT_*

25 years agoAlign somewhat with ldif2ldbm: Obey HAVE_SYS_PARAM_H, cast strcasecmp to AVL_CMP
Hallvard Furuseth [Wed, 4 Aug 1999 05:53:50 +0000 (05:53 +0000)]
Align somewhat with ldif2ldbm: Obey HAVE_SYS_PARAM_H, cast strcasecmp to AVL_CMP

25 years agoFactor out ldif2* intialization to ldif2common.c
Hallvard Furuseth [Wed, 4 Aug 1999 05:49:36 +0000 (05:49 +0000)]
Factor out ldif2* intialization to ldif2common.c

25 years agoSilence libtool if `make -s' is running
Hallvard Furuseth [Wed, 4 Aug 1999 03:42:31 +0000 (03:42 +0000)]
Silence libtool if `make -s' is running

25 years agoAdd sasl.c
Kurt Zeilenga [Wed, 4 Aug 1999 00:44:02 +0000 (00:44 +0000)]
Add sasl.c

25 years agonon-blocking connect needs special handling under Winsock.
Kurt Zeilenga [Wed, 4 Aug 1999 00:40:03 +0000 (00:40 +0000)]
non-blocking connect needs special handling under Winsock.

25 years agoDon't have time to finish SASL right now... this is a work in progress
Kurt Zeilenga [Wed, 4 Aug 1999 00:11:22 +0000 (00:11 +0000)]
Don't have time to finish SASL right now...  this is a work in progress
but is safely tucked away behind --with-cyrus-sasl.

25 years agoForced commit: last log message incorrect.
Kurt Zeilenga [Tue, 3 Aug 1999 23:25:22 +0000 (23:25 +0000)]
Forced commit:  last log message incorrect.
Change was to support __res_search in -lbind

25 years agoList supportedSASLmechanisms based upon what sasl_listmech() returns.
Kurt Zeilenga [Tue, 3 Aug 1999 23:23:05 +0000 (23:23 +0000)]
List supportedSASLmechanisms based upon what sasl_listmech() returns.

25 years agoAdd multimaster replication support (ITS#170) based upon
Kurt Zeilenga [Tue, 3 Aug 1999 22:15:19 +0000 (22:15 +0000)]
Add multimaster replication support (ITS#170) based upon
updated patch submitted Philipp Klaus <ldapml@internet.access.ch>
Can be enabled using --enable-multimaster.  TODO:
Replication test likely should be adjusted to test multimaster environment.

25 years agoUpdate the sleep to 10 seconds (last commit only changed the echo)
Kurt Zeilenga [Tue, 3 Aug 1999 21:47:35 +0000 (21:47 +0000)]
Update the sleep to 10 seconds (last commit only changed the echo)

25 years ago5 seconds just isn't long enough
Kurt Zeilenga [Tue, 3 Aug 1999 21:46:44 +0000 (21:46 +0000)]
5 seconds just isn't long enough

25 years agoUpdate default access usage comment.
Kurt Zeilenga [Tue, 3 Aug 1999 21:35:53 +0000 (21:35 +0000)]
Update default access usage comment.

25 years agochange order of tag and err in logging (only). Does not effect encoding.
Kurt Zeilenga [Tue, 3 Aug 1999 20:28:16 +0000 (20:28 +0000)]
change order of tag and err in logging (only).  Does not effect encoding.

25 years agoInitial inet_aton() detection.
Kurt Zeilenga [Tue, 3 Aug 1999 20:02:44 +0000 (20:02 +0000)]
Initial inet_aton() detection.

25 years agoLDAP_OPT_NETWORK_TIMEOUT feature (ITS#239) from Lars Uffmann.
Kurt Zeilenga [Tue, 3 Aug 1999 19:27:22 +0000 (19:27 +0000)]
LDAP_OPT_NETWORK_TIMEOUT feature (ITS#239) from Lars Uffmann.
Needs a bit more work.
- global net/api timeouts are not inherited on session creation.
- need configure check for inet_aton() (coming soon)
- ioctl/fcntl portability issues (should share implementation
with lber routines)

25 years agoNeeds ldap_config.h to get LDAP_DIRSEP
Julio Sánchez Fernández [Tue, 3 Aug 1999 19:04:02 +0000 (19:04 +0000)]
Needs ldap_config.h to get LDAP_DIRSEP

25 years agoNeeds <ac/stdlib.h> for EXIT_*
Kurt Zeilenga [Tue, 3 Aug 1999 18:41:55 +0000 (18:41 +0000)]
Needs <ac/stdlib.h> for EXIT_*

25 years agos/exit(1)/exit(EXIT_FAILURE)/
Kurt Zeilenga [Tue, 3 Aug 1999 18:14:24 +0000 (18:14 +0000)]
s/exit(1)/exit(EXIT_FAILURE)/
s/exit(0)/exit(EXIT_SUCCESS)/
add <ac/stdlib.h> where needed and other minor header adjustments

25 years agoAddition to previous log: Also killed 2-digit year numbers in the example.
Hallvard Furuseth [Tue, 3 Aug 1999 10:57:04 +0000 (10:57 +0000)]
Addition to previous log: Also killed 2-digit year numbers in the example.

25 years agos/OpenLDAP-bugs/OpenLDAP-its/
Hallvard Furuseth [Tue, 3 Aug 1999 10:08:49 +0000 (10:08 +0000)]
s/OpenLDAP-bugs/OpenLDAP-its/

25 years agoReplace @umich bugreport/support addresses with @openldap
Hallvard Furuseth [Tue, 3 Aug 1999 10:07:58 +0000 (10:07 +0000)]
Replace @umich bugreport/support addresses with @openldap

25 years agoLdaptcl package version 1.2:
Randy Kunkee [Tue, 3 Aug 1999 07:23:03 +0000 (07:23 +0000)]
Ldaptcl package version 1.2:

- Filter no longer a required controlArray member, defaults to objectclass=*.
- Sets errorCode with LDAP macro string value (better to test than the more
  human readable values).
- Shorten minimum required characters for search scope definitions: now allows
  "base", "one", and "sub".  For the latter two, additional characters are
  ignored.
- Now compiles successfully with -devel branch (though less tested).
- Client cache management code enabled for OpenLDAP versions <= 1.2.4.  (This
  code is relatively untested and feedback is welcome.)
- More installation cleanups to work easily as a dynamically loadable Tcl
  package.

25 years agos/*vlenp = NULL;/*vlenp = 0;/
Hallvard Furuseth [Tue, 3 Aug 1999 04:02:16 +0000 (04:02 +0000)]
s/*vlenp = NULL;/*vlenp = 0;/

25 years agoGrow buffer[] declaration to make space for " $ " separators
Hallvard Furuseth [Tue, 3 Aug 1999 03:58:49 +0000 (03:58 +0000)]
Grow buffer[] declaration to make space for " $ " separators

25 years agoAdd a little SASL framework and remove old X-DIGEST-MD5 hardcode.
Kurt Zeilenga [Tue, 3 Aug 1999 02:37:42 +0000 (02:37 +0000)]
Add a little SASL framework and remove old X-DIGEST-MD5 hardcode.
This code is not called (yet).

25 years agoReplace NULLBER with NULL
Hallvard Furuseth [Tue, 3 Aug 1999 02:31:29 +0000 (02:31 +0000)]
Replace NULLBER with NULL
Replace `lber_int_debug = ...' with `ber_set_option( ... )'

25 years agoRemove obsolete 7th arg (opatts) from send_search_entry() calls.
Hallvard Furuseth [Tue, 3 Aug 1999 01:38:43 +0000 (01:38 +0000)]
Remove obsolete 7th arg (opatts) from send_search_entry() calls.
Add missing arg (refs or ctrls) to send_ldap_result() calls.
NOTE: Did not implement referral/ldapcontrol support in back-tcl.

25 years agoAdd HAVE_CYRUS_SASL define
Kurt Zeilenga [Tue, 3 Aug 1999 00:50:52 +0000 (00:50 +0000)]
Add HAVE_CYRUS_SASL define

25 years agoAdd detection for Cyrus SASL library.
Kurt Zeilenga [Mon, 2 Aug 1999 23:35:03 +0000 (23:35 +0000)]
Add detection for Cyrus SASL library.
Improve detection of FreeBSD FetchURL library.