--------------------- PatchSet 11738 Date: 2007/11/15 04:43:54 Author: adrian Branch: HEAD Tag: (none) Log: Initial patch to support rewriting the URL used for store operations * break out the redirector code from store_client.c into an external file * create a placeholder file for the new store url rewriter (which will borrow heavily from the rewriter code) * copy the redirector code (suitably renamed) to serve as a base for the store url rewriter. Members: src/HttpRequest.c:1.42->1.43 src/Makefile.am:1.63->1.64 src/Makefile.in:1.291->1.292 src/cf.data.pre:1.439->1.440 src/client_side.c:1.743->1.744 src/client_side_rewrite.c:INITIAL->1.1 src/client_side_storeurl_rewrite.c:INITIAL->1.1 src/main.c:1.401->1.402 src/protos.h:1.539->1.540 src/redirect.c:1.99->1.100 src/store_rewrite.c:INITIAL->1.1 src/structs.h:1.529->1.530 src/auth/Makefile.in:1.42->1.43 src/fs/Makefile.in:1.45->1.46 src/repl/Makefile.in:1.42->1.43 Index: squid/src/HttpRequest.c =================================================================== RCS file: /cvsroot/squid/squid/src/HttpRequest.c,v retrieving revision 1.42 retrieving revision 1.43 diff -u -r1.42 -r1.43 --- squid/src/HttpRequest.c 21 Jan 2007 12:53:56 -0000 1.42 +++ squid/src/HttpRequest.c 15 Nov 2007 04:43:54 -0000 1.43 @@ -1,6 +1,6 @@ /* - * $Id: HttpRequest.c,v 1.42 2007/01/21 12:53:56 adrian Exp $ + * $Id: HttpRequest.c,v 1.43 2007/11/15 04:43:54 adrian Exp $ * * DEBUG: section 73 HTTP Request * AUTHOR: Duane Wessels @@ -59,6 +59,7 @@ requestAbortBody(req); if (req->auth_user_request) authenticateAuthUserRequestUnlock(req->auth_user_request); + safe_free(req->store_url); safe_free(req->canonical); safe_free(req->vary_hdr); safe_free(req->vary_headers); Index: squid/src/Makefile.am =================================================================== RCS file: /cvsroot/squid/squid/src/Makefile.am,v retrieving revision 1.63 retrieving revision 1.64 diff -u -r1.63 -r1.64 --- squid/src/Makefile.am 23 Sep 2007 13:55:18 -0000 1.63 +++ squid/src/Makefile.am 15 Nov 2007 04:43:54 -0000 1.64 @@ -1,7 +1,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.am,v 1.63 2007/09/23 13:55:18 adrian Exp $ +# $Id: Makefile.am,v 1.64 2007/11/15 04:43:54 adrian Exp $ # # Uncomment and customize the following to suit your needs: # @@ -156,6 +156,8 @@ cbdata.c \ client_db.c \ client_side.c \ + client_side_rewrite.c \ + client_side_storeurl_rewrite.c \ comm.c \ $(COMMLOOP_SOURCE) \ debug.c \ @@ -223,6 +225,7 @@ peer_userhash.c \ protos.h \ redirect.c \ + store_rewrite.c \ referer.c \ refresh.c \ send-announce.c \ Index: squid/src/Makefile.in =================================================================== RCS file: /cvsroot/squid/squid/src/Makefile.in,v retrieving revision 1.291 retrieving revision 1.292 diff -u -r1.291 -r1.292 --- squid/src/Makefile.in 12 Nov 2007 01:14:21 -0000 1.291 +++ squid/src/Makefile.in 15 Nov 2007 04:43:54 -0000 1.292 @@ -17,7 +17,7 @@ # # Makefile for the Squid Object Cache server # -# $Id: Makefile.in,v 1.291 2007/11/12 01:14:21 hno Exp $ +# $Id: Makefile.in,v 1.292 2007/11/15 04:43:54 adrian Exp $ # # Uncomment and customize the following to suit your needs: # @@ -89,29 +89,31 @@ pinger_DEPENDENCIES = am__squid_SOURCES_DIST = access_log.c acl.c asn.c authenticate.c \ cache_cf.c CacheDigest.c cache_manager.c carp.c cbdata.c \ - client_db.c client_side.c comm.c comm_devpoll.c comm_epoll.c \ - comm_kqueue.c comm_poll.c comm_select_simple.c comm_select.c \ - comm_select_win32.c debug.c defines.h delay_pools.c disk.c \ - dns_internal.c dns.c enums.h errorpage.c event.c errormap.c \ - external_acl.c fd.c filemap.c forward.c fqdncache.c ftp.c \ - globals.h gopher.c helper.c htcp.c http.c HttpStatusLine.c \ - HttpHdrCc.c HttpHdrRange.c HttpHdrContRange.c HttpHeader.c \ - HttpHeaderTools.c HttpBody.c HttpMsg.c HttpReply.c \ - HttpRequest.c icmp.c icp_v2.c icp_v3.c ident.c internal.c \ - ipc.c ipc_win32.c ipcache.c leakfinder.c locrewrite.c \ - logfile.c logfile_mod_daemon.c logfile_mod_daemon.h \ - logfile_mod_stdio.c logfile_mod_stdio.h logfile_mod_syslog.c \ - logfile_mod_syslog.h logfile_mod_udp.c logfile_mod_udp.h \ - main.c mem.c MemPool.c MemBuf.c mime.c multicast.c neighbors.c \ - net_db.c Packer.c pconn.c peer_digest.c peer_monitor.c \ - peer_select.c peer_sourcehash.c peer_userhash.c protos.h \ - redirect.c referer.c refresh.c send-announce.c snmp_core.c \ - snmp_agent.c squid.h ssl.c ssl_support.c stat.c StatHist.c \ - String.c stmem.c store.c store_io.c store_client.c \ - store_digest.c store_dir.c store_key_md5.c store_log.c \ - store_rebuild.c store_swapin.c store_swapmeta.c \ - store_swapout.c structs.h tools.c typedefs.h unlinkd.c url.c \ - urn.c useragent.c wccp.c wccp2.c whois.c win32.c + client_db.c client_side.c client_side_rewrite.c \ + client_side_storeurl_rewrite.c comm.c comm_devpoll.c \ + comm_epoll.c comm_kqueue.c comm_poll.c comm_select_simple.c \ + comm_select.c comm_select_win32.c debug.c defines.h \ + delay_pools.c disk.c dns_internal.c dns.c enums.h errorpage.c \ + event.c errormap.c external_acl.c fd.c filemap.c forward.c \ + fqdncache.c ftp.c globals.h gopher.c helper.c htcp.c http.c \ + HttpStatusLine.c HttpHdrCc.c HttpHdrRange.c HttpHdrContRange.c \ + HttpHeader.c HttpHeaderTools.c HttpBody.c HttpMsg.c \ + HttpReply.c HttpRequest.c icmp.c icp_v2.c icp_v3.c ident.c \ + internal.c ipc.c ipc_win32.c ipcache.c leakfinder.c \ + locrewrite.c logfile.c logfile_mod_daemon.c \ + logfile_mod_daemon.h logfile_mod_stdio.c logfile_mod_stdio.h \ + logfile_mod_syslog.c logfile_mod_syslog.h logfile_mod_udp.c \ + logfile_mod_udp.h main.c mem.c MemPool.c MemBuf.c mime.c \ + multicast.c neighbors.c net_db.c Packer.c pconn.c \ + peer_digest.c peer_monitor.c peer_select.c peer_sourcehash.c \ + peer_userhash.c protos.h redirect.c store_rewrite.c referer.c \ + refresh.c send-announce.c snmp_core.c snmp_agent.c squid.h \ + ssl.c ssl_support.c stat.c StatHist.c String.c stmem.c store.c \ + store_io.c store_client.c store_digest.c store_dir.c \ + store_key_md5.c store_log.c store_rebuild.c store_swapin.c \ + store_swapmeta.c store_swapout.c structs.h tools.c typedefs.h \ + unlinkd.c url.c urn.c useragent.c wccp.c wccp2.c whois.c \ + win32.c @USE_DEVPOLL_FALSE@@USE_EPOLL_FALSE@@USE_KQUEUE_FALSE@@USE_POLL_FALSE@@USE_SELECT_FALSE@@USE_SELECT_SIMPLE_FALSE@@USE_SELECT_WIN32_TRUE@am__objects_1 = comm_select_win32.$(OBJEXT) @USE_DEVPOLL_FALSE@@USE_EPOLL_FALSE@@USE_KQUEUE_FALSE@@USE_POLL_FALSE@@USE_SELECT_SIMPLE_FALSE@@USE_SELECT_TRUE@am__objects_1 = comm_select.$(OBJEXT) @USE_DEVPOLL_FALSE@@USE_EPOLL_FALSE@@USE_KQUEUE_FALSE@@USE_POLL_FALSE@@USE_SELECT_SIMPLE_TRUE@am__objects_1 = comm_select_simple.$(OBJEXT) @@ -136,13 +138,15 @@ authenticate.$(OBJEXT) cache_cf.$(OBJEXT) \ CacheDigest.$(OBJEXT) cache_manager.$(OBJEXT) carp.$(OBJEXT) \ cbdata.$(OBJEXT) client_db.$(OBJEXT) client_side.$(OBJEXT) \ - comm.$(OBJEXT) $(am__objects_1) debug.$(OBJEXT) \ - $(am__objects_2) disk.$(OBJEXT) $(am__objects_3) \ - errorpage.$(OBJEXT) event.$(OBJEXT) errormap.$(OBJEXT) \ - external_acl.$(OBJEXT) fd.$(OBJEXT) filemap.$(OBJEXT) \ - forward.$(OBJEXT) fqdncache.$(OBJEXT) ftp.$(OBJEXT) \ - gopher.$(OBJEXT) helper.$(OBJEXT) $(am__objects_4) \ - http.$(OBJEXT) HttpStatusLine.$(OBJEXT) HttpHdrCc.$(OBJEXT) \ + client_side_rewrite.$(OBJEXT) \ + client_side_storeurl_rewrite.$(OBJEXT) comm.$(OBJEXT) \ + $(am__objects_1) debug.$(OBJEXT) $(am__objects_2) \ + disk.$(OBJEXT) $(am__objects_3) errorpage.$(OBJEXT) \ + event.$(OBJEXT) errormap.$(OBJEXT) external_acl.$(OBJEXT) \ + fd.$(OBJEXT) filemap.$(OBJEXT) forward.$(OBJEXT) \ + fqdncache.$(OBJEXT) ftp.$(OBJEXT) gopher.$(OBJEXT) \ + helper.$(OBJEXT) $(am__objects_4) http.$(OBJEXT) \ + HttpStatusLine.$(OBJEXT) HttpHdrCc.$(OBJEXT) \ HttpHdrRange.$(OBJEXT) HttpHdrContRange.$(OBJEXT) \ HttpHeader.$(OBJEXT) HttpHeaderTools.$(OBJEXT) \ HttpBody.$(OBJEXT) HttpMsg.$(OBJEXT) HttpReply.$(OBJEXT) \ @@ -157,11 +161,12 @@ neighbors.$(OBJEXT) net_db.$(OBJEXT) Packer.$(OBJEXT) \ pconn.$(OBJEXT) peer_digest.$(OBJEXT) peer_monitor.$(OBJEXT) \ peer_select.$(OBJEXT) peer_sourcehash.$(OBJEXT) \ - peer_userhash.$(OBJEXT) redirect.$(OBJEXT) referer.$(OBJEXT) \ - refresh.$(OBJEXT) send-announce.$(OBJEXT) $(am__objects_7) \ - ssl.$(OBJEXT) $(am__objects_8) stat.$(OBJEXT) \ - StatHist.$(OBJEXT) String.$(OBJEXT) stmem.$(OBJEXT) \ - store.$(OBJEXT) store_io.$(OBJEXT) store_client.$(OBJEXT) \ + peer_userhash.$(OBJEXT) redirect.$(OBJEXT) \ + store_rewrite.$(OBJEXT) referer.$(OBJEXT) refresh.$(OBJEXT) \ + send-announce.$(OBJEXT) $(am__objects_7) ssl.$(OBJEXT) \ + $(am__objects_8) stat.$(OBJEXT) StatHist.$(OBJEXT) \ + String.$(OBJEXT) stmem.$(OBJEXT) store.$(OBJEXT) \ + store_io.$(OBJEXT) store_client.$(OBJEXT) \ store_digest.$(OBJEXT) store_dir.$(OBJEXT) \ store_key_md5.$(OBJEXT) store_log.$(OBJEXT) \ store_rebuild.$(OBJEXT) store_swapin.$(OBJEXT) \ @@ -259,7 +264,6 @@ EXEEXT = @EXEEXT@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ FALSE = @FALSE@ -GREP = @GREP@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ @@ -350,6 +354,8 @@ XTRA_LIBS = @XTRA_LIBS@ XTRA_OBJS = @XTRA_OBJS@ ac_ct_CC = @ac_ct_CC@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ @@ -364,31 +370,24 @@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ -htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ -localedir = @localedir@ localstatedir = @localstatedir@ makesnmplib = @makesnmplib@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ -psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ @@ -467,6 +466,8 @@ cbdata.c \ client_db.c \ client_side.c \ + client_side_rewrite.c \ + client_side_storeurl_rewrite.c \ comm.c \ $(COMMLOOP_SOURCE) \ debug.c \ @@ -534,6 +535,7 @@ peer_userhash.c \ protos.h \ redirect.c \ + store_rewrite.c \ referer.c \ refresh.c \ send-announce.c \ @@ -801,6 +803,8 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cf_gen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/client_db.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/client_side.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/client_side_rewrite.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/client_side_storeurl_rewrite.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comm_devpoll.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comm_epoll.Po@am__quote@ @@ -879,6 +883,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/store_log.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/store_modules.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/store_rebuild.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/store_rewrite.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/store_swapin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/store_swapmeta.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/store_swapout.Po@am__quote@ Index: squid/src/cf.data.pre =================================================================== RCS file: /cvsroot/squid/squid/src/cf.data.pre,v retrieving revision 1.439 retrieving revision 1.440 diff -u -r1.439 -r1.440 --- squid/src/cf.data.pre 6 Nov 2007 22:36:20 -0000 1.439 +++ squid/src/cf.data.pre 15 Nov 2007 04:43:55 -0000 1.440 @@ -1,6 +1,6 @@ # -# $Id: cf.data.pre,v 1.439 2007/11/06 22:36:20 wessels Exp $ +# $Id: cf.data.pre,v 1.440 2007/11/15 04:43:55 adrian Exp $ # # SQUID Web Proxy Cache http://www.squid-cache.org/ # ---------------------------------------------------------- @@ -2548,6 +2548,30 @@ ----------------------------------------------------------------------------- COMMENT_END +NAME: storeurl_rewrite_program +TYPE: programline +LOC: Config.Program.store_rewrite.command +DEFAULT: none +DOC_START + +DOC_END + +NAME: storeurl_rewrite_children +TYPE: int +DEFAULT: 5 +LOC: Config.Program.store_rewrite.children +DOC_START + +DOC_END + +NAME: storeurl_rewrite_concurrency +TYPE: int +DEFAULT: 0 +LOC: Config.Program.store_rewrite.concurrency +DOC_START + +DOC_END + NAME: url_rewrite_program redirect_program TYPE: programline LOC: Config.Program.url_rewrite.command @@ -2624,6 +2648,14 @@ are sent. DOC_END +NAME: storeurl_access +TYPE: acl_access +DEFAULT: none +LOC: Config.accessList.storeurl_rewrite +DOC_START + +DOC_END + NAME: redirector_bypass TYPE: onoff LOC: Config.onoff.redirector_bypass Index: squid/src/client_side.c =================================================================== RCS file: /cvsroot/squid/squid/src/client_side.c,v retrieving revision 1.743 retrieving revision 1.744 diff -u -r1.743 -r1.744 --- squid/src/client_side.c 8 Oct 2007 15:05:47 -0000 1.743 +++ squid/src/client_side.c 15 Nov 2007 04:43:55 -0000 1.744 @@ -1,6 +1,6 @@ /* - * $Id: client_side.c,v 1.743 2007/10/08 15:05:47 hno Exp $ + * $Id: client_side.c,v 1.744 2007/11/15 04:43:55 adrian Exp $ * * DEBUG: section 33 Client-side Routines * AUTHOR: Duane Wessels @@ -119,8 +119,7 @@ static void clientBuildReplyHeader(clientHttpRequest * http, HttpReply * rep); static clientHttpRequest *parseHttpRequestAbort(ConnStateData * conn, const char *uri); static clientHttpRequest *parseHttpRequest(ConnStateData *, HttpMsgBuf *, method_t *, int *); -static void clientRedirectStart(clientHttpRequest * http); -static RH clientRedirectDone; + static void clientCheckNoCache(clientHttpRequest *); static void clientCheckNoCacheDone(int answer, void *data); static STHCB clientHandleIMSReply; @@ -140,7 +139,6 @@ static void clientSetKeepaliveFlag(clientHttpRequest *); static void clientPackRangeHdr(const HttpReply * rep, const HttpHdrRangeSpec * spec, String boundary, MemBuf * mb); static void clientPackTermBound(String boundary, MemBuf * mb); -static void clientInterpretRequestHeaders(clientHttpRequest *); static void clientProcessRequest(clientHttpRequest *); static void clientProcessExpired(clientHttpRequest *); static void clientProcessOnlyIfCachedMiss(clientHttpRequest * http); @@ -155,7 +153,6 @@ static void clientEatRequestBody(clientHttpRequest *); static void clientAccessCheck(void *data); static void clientAccessCheckDone(int answer, void *data); -static void clientAccessCheck2(void *data); static void clientAccessCheckDone2(int answer, void *data); static BODY_HANDLER clientReadBody; static void clientAbortBody(request_t * req); @@ -202,7 +199,7 @@ #endif -static aclCheck_t * +aclCheck_t * clientAclChecklistCreate(const acl_access * acl, const clientHttpRequest * http) { aclCheck_t *ch; @@ -383,7 +380,7 @@ aclNBCheck(http->acl_checklist, clientAccessCheckDone, http); } -static void +void clientAccessCheck2(void *data) { clientHttpRequest *http = data; @@ -556,123 +553,6 @@ } static void -clientRedirectAccessCheckDone(int answer, void *data) -{ - clientHttpRequest *http = data; - http->acl_checklist = NULL; - if (answer == ACCESS_ALLOWED) - redirectStart(http, clientRedirectDone, http); - else - clientRedirectDone(http, NULL); -} - -static void -clientRedirectStart(clientHttpRequest * http) -{ - debug(33, 5) ("clientRedirectStart: '%s'\n", http->uri); - if (Config.Program.url_rewrite.command == NULL) { - clientRedirectDone(http, NULL); - return; - } - if (Config.accessList.url_rewrite) { - http->acl_checklist = clientAclChecklistCreate(Config.accessList.url_rewrite, http); - aclNBCheck(http->acl_checklist, clientRedirectAccessCheckDone, http); - } else { - redirectStart(http, clientRedirectDone, http); - } -} - -static void -clientRedirectDone(void *data, char *result) -{ - clientHttpRequest *http = data; - request_t *new_request = NULL; - request_t *old_request = http->request; - const char *urlgroup = http->conn->port->urlgroup; - debug(33, 5) ("clientRedirectDone: '%s' result=%s\n", http->uri, - result ? result : "NULL"); - assert(http->redirect_state == REDIRECT_PENDING); - http->redirect_state = REDIRECT_DONE; - if (result) { - http_status status; - if (*result == '!') { - char *t; - if ((t = strchr(result + 1, '!')) != NULL) { - urlgroup = result + 1; - *t++ = '\0'; - result = t; - } else { - debug(33, 1) ("clientRedirectDone: bad input: %s\n", result); - } - } - status = (http_status) atoi(result); - if (status == HTTP_MOVED_PERMANENTLY - || status == HTTP_MOVED_TEMPORARILY - || status == HTTP_SEE_OTHER - || status == HTTP_TEMPORARY_REDIRECT) { - char *t = result; - if ((t = strchr(result, ':')) != NULL) { - http->redirect.status = status; - http->redirect.location = xstrdup(t + 1); - goto redirect_parsed; - } else { - debug(33, 1) ("clientRedirectDone: bad input: %s\n", result); - } - } else if (strcmp(result, http->uri)) - new_request = urlParse(old_request->method, result); - } - redirect_parsed: - if (new_request) { - safe_free(http->uri); - http->uri = xstrdup(urlCanonical(new_request)); - new_request->http_ver = old_request->http_ver; - httpHeaderAppend(&new_request->header, &old_request->header); - new_request->client_addr = old_request->client_addr; - new_request->client_port = old_request->client_port; -#if FOLLOW_X_FORWARDED_FOR - new_request->indirect_client_addr = old_request->indirect_client_addr; -#endif /* FOLLOW_X_FORWARDED_FOR */ - new_request->my_addr = old_request->my_addr; - new_request->my_port = old_request->my_port; - new_request->flags = old_request->flags; - new_request->flags.redirected = 1; - if (old_request->auth_user_request) { - new_request->auth_user_request = old_request->auth_user_request; - authenticateAuthUserRequestLock(new_request->auth_user_request); - } - if (old_request->body_reader) { - new_request->body_reader = old_request->body_reader; - new_request->body_reader_data = old_request->body_reader_data; - old_request->body_reader = NULL; - old_request->body_reader_data = NULL; - } - new_request->content_length = old_request->content_length; - if (strBuf(old_request->extacl_log)) - new_request->extacl_log = stringDup(&old_request->extacl_log); - if (old_request->extacl_user) - new_request->extacl_user = xstrdup(old_request->extacl_user); - if (old_request->extacl_passwd) - new_request->extacl_passwd = xstrdup(old_request->extacl_passwd); - requestUnlink(old_request); - http->request = requestLink(new_request); - } else { - /* Don't mess with urlgroup on internal request */ - if (old_request->flags.internal) - urlgroup = NULL; - } - safe_free(http->request->urlgroup); /* only paranoia. should not happen */ - if (urlgroup && *urlgroup) - http->request->urlgroup = xstrdup(urlgroup); - clientInterpretRequestHeaders(http); -#if HEADERS_LOG - headersLog(0, 1, request->method, request); -#endif - /* XXX This really should become a ref-counted string type pointer, not a copy! */ - fd_note(http->conn->fd, http->uri); - clientAccessCheck2(http); -} - -static void clientCheckNoCache(clientHttpRequest * http) { if (Config.accessList.noCache && http->request->flags.cachable) { @@ -1362,7 +1242,7 @@ #endif } -static void +void clientInterpretRequestHeaders(clientHttpRequest * http) { request_t *request = http->request; --- /dev/null Thu Nov 15 04:52:26 2007 +++ squid/src/client_side_rewrite.c Thu Nov 15 04:52:26 2007 @@ -0,0 +1,156 @@ + +/* + * $Id: client_side_rewrite.c,v 1.1 2007/11/15 04:43:55 adrian Exp $ + * + * DEBUG: section 33 Client-side Routines - URL Rewriter + * AUTHOR: Duane Wessels; Adrian Chadd + * + * SQUID Web Proxy Cache http://www.squid-cache.org/ + * ---------------------------------------------------------- + * + * Squid is the result of efforts by numerous individuals from + * the Internet community; see the CONTRIBUTORS file for full + * details. Many organizations have provided support for Squid's + * development; see the SPONSORS file for full details. Squid is + * Copyrighted (C) 2001 by the Regents of the University of + * California; see the COPYRIGHT file for full details. Squid + * incorporates software developed and/or copyrighted by other + * sources; see the CREDITS file for full details. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. + * + */ + +#include "squid.h" + + +/* Local functions */ + +void +clientRedirectAccessCheckDone(int answer, void *data) +{ + clientHttpRequest *http = data; + http->acl_checklist = NULL; + if (answer == ACCESS_ALLOWED) + redirectStart(http, clientRedirectDone, http); + else + clientRedirectDone(http, NULL); +} + +void +clientRedirectStart(clientHttpRequest * http) +{ + debug(33, 5) ("clientRedirectStart: '%s'\n", http->uri); + if (Config.Program.url_rewrite.command == NULL) { + clientRedirectDone(http, NULL); + return; + } + if (Config.accessList.url_rewrite) { + http->acl_checklist = clientAclChecklistCreate(Config.accessList.url_rewrite, http); + aclNBCheck(http->acl_checklist, clientRedirectAccessCheckDone, http); + } else { + redirectStart(http, clientRedirectDone, http); + } +} + +void +clientRedirectDone(void *data, char *result) +{ + clientHttpRequest *http = data; + request_t *new_request = NULL; + request_t *old_request = http->request; + const char *urlgroup = http->conn->port->urlgroup; + debug(33, 5) ("clientRedirectDone: '%s' result=%s\n", http->uri, + result ? result : "NULL"); + assert(http->redirect_state == REDIRECT_PENDING); + http->redirect_state = REDIRECT_DONE; + if (result) { + http_status status; + if (*result == '!') { + char *t; + if ((t = strchr(result + 1, '!')) != NULL) { + urlgroup = result + 1; + *t++ = '\0'; + result = t; + } else { + debug(33, 1) ("clientRedirectDone: bad input: %s\n", result); + } + } + status = (http_status) atoi(result); + if (status == HTTP_MOVED_PERMANENTLY + || status == HTTP_MOVED_TEMPORARILY + || status == HTTP_SEE_OTHER + || status == HTTP_TEMPORARY_REDIRECT) { + char *t = result; + if ((t = strchr(result, ':')) != NULL) { + http->redirect.status = status; + http->redirect.location = xstrdup(t + 1); + goto redirect_parsed; + } else { + debug(33, 1) ("clientRedirectDone: bad input: %s\n", result); + } + } else if (strcmp(result, http->uri)) + new_request = urlParse(old_request->method, result); + } + redirect_parsed: + if (new_request) { + safe_free(http->uri); + http->uri = xstrdup(urlCanonical(new_request)); + new_request->http_ver = old_request->http_ver; + httpHeaderAppend(&new_request->header, &old_request->header); + new_request->client_addr = old_request->client_addr; + new_request->client_port = old_request->client_port; +#if FOLLOW_X_FORWARDED_FOR + new_request->indirect_client_addr = old_request->indirect_client_addr; +#endif /* FOLLOW_X_FORWARDED_FOR */ + new_request->my_addr = old_request->my_addr; + new_request->my_port = old_request->my_port; + new_request->flags = old_request->flags; + new_request->flags.redirected = 1; + if (old_request->auth_user_request) { + new_request->auth_user_request = old_request->auth_user_request; + authenticateAuthUserRequestLock(new_request->auth_user_request); + } + if (old_request->body_reader) { + new_request->body_reader = old_request->body_reader; + new_request->body_reader_data = old_request->body_reader_data; + old_request->body_reader = NULL; + old_request->body_reader_data = NULL; + } + new_request->content_length = old_request->content_length; + if (strBuf(old_request->extacl_log)) + new_request->extacl_log = stringDup(&old_request->extacl_log); + if (old_request->extacl_user) + new_request->extacl_user = xstrdup(old_request->extacl_user); + if (old_request->extacl_passwd) + new_request->extacl_passwd = xstrdup(old_request->extacl_passwd); + requestUnlink(old_request); + http->request = requestLink(new_request); + } else { + /* Don't mess with urlgroup on internal request */ + if (old_request->flags.internal) + urlgroup = NULL; + } + safe_free(http->request->urlgroup); /* only paranoia. should not happen */ + if (urlgroup && *urlgroup) + http->request->urlgroup = xstrdup(urlgroup); + clientInterpretRequestHeaders(http); +#if HEADERS_LOG + headersLog(0, 1, request->method, request); +#endif + /* XXX This really should become a ref-counted string type pointer, not a copy! */ + fd_note(http->conn->fd, http->uri); + clientAccessCheck2(http); +} Index: squid/src/main.c =================================================================== RCS file: /cvsroot/squid/squid/src/main.c,v retrieving revision 1.401 retrieving revision 1.402 diff -u -r1.401 -r1.402 --- squid/src/main.c 8 Oct 2007 18:23:23 -0000 1.401 +++ squid/src/main.c 15 Nov 2007 04:43:55 -0000 1.402 @@ -1,6 +1,6 @@ /* - * $Id: main.c,v 1.401 2007/10/08 18:23:23 serassio Exp $ + * $Id: main.c,v 1.402 2007/11/15 04:43:55 adrian Exp $ * * DEBUG: section 1 Startup and Main Loop * AUTHOR: Harvest Derived @@ -396,6 +396,7 @@ idnsShutdown(); #endif redirectShutdown(); + storeurlShutdown(); locationRewriteShutdown(); authenticateShutdown(); externalAclShutdown(); @@ -425,6 +426,7 @@ idnsInit(); #endif redirectInit(); + storeurlInit(); locationRewriteInit(); authenticateInit(&Config.authConfig); externalAclInit(); @@ -478,6 +480,7 @@ dnsInit(); #endif redirectInit(); + storeurlInit(); locationRewriteInit(); authenticateInit(&Config.authConfig); externalAclInit(); @@ -576,6 +579,7 @@ idnsInit(); #endif redirectInit(); + storeurlInit(); locationRewriteInit(); errorMapInit(); authenticateInit(&Config.authConfig); Index: squid/src/protos.h =================================================================== RCS file: /cvsroot/squid/squid/src/protos.h,v retrieving revision 1.539 retrieving revision 1.540 diff -u -r1.539 -r1.540 --- squid/src/protos.h 25 Sep 2007 00:54:33 -0000 1.539 +++ squid/src/protos.h 15 Nov 2007 04:43:55 -0000 1.540 @@ -1,6 +1,6 @@ /* - * $Id: protos.h,v 1.539 2007/09/25 00:54:33 hno Exp $ + * $Id: protos.h,v 1.540 2007/11/15 04:43:55 adrian Exp $ * * * SQUID Web Proxy Cache http://www.squid-cache.org/ @@ -747,6 +747,10 @@ extern void redirectInit(void); extern void redirectShutdown(void); +extern void storeurlStart(clientHttpRequest *, RH *, void *); +extern void storeurlInit(void); +extern void storeurlShutdown(void); + extern void locationRewriteStart(HttpReply *, clientHttpRequest *, RH *, void *); extern void locationRewriteInit(void); extern void locationRewriteShutdown(void); @@ -1441,5 +1445,15 @@ extern const char *xinet_ntoa(const struct in_addr addr); +/* client_side.c */ +extern aclCheck_t *clientAclChecklistCreate(const acl_access * acl, const clientHttpRequest * http); +extern void clientInterpretRequestHeaders(clientHttpRequest * http); +extern void clientAccessCheck2(void *data); + +/* client_side_redirect.c */ +extern void clientRedirectAccessCheckDone(int answer, void *data); +extern void clientRedirectStart(clientHttpRequest * http); +extern void clientRedirectDone(void *data, char *result); + #endif /* SQUID_PROTOS_H */ Index: squid/src/redirect.c =================================================================== RCS file: /cvsroot/squid/squid/src/redirect.c,v retrieving revision 1.99 retrieving revision 1.100 diff -u -r1.99 -r1.100 --- squid/src/redirect.c 6 Nov 2007 22:36:20 -0000 1.99 +++ squid/src/redirect.c 15 Nov 2007 04:43:55 -0000 1.100 @@ -1,9 +1,9 @@ /* - * $Id: redirect.c,v 1.99 2007/11/06 22:36:20 wessels Exp $ + * $Id: redirect.c,v 1.100 2007/11/15 04:43:55 adrian Exp $ * - * DEBUG: section 61 Redirector - * AUTHOR: Duane Wessels + * DEBUG: section 85 Store URL Redirector + * AUTHOR: Adrian Chadd; based on redirect.c by Duane Wessels * * SQUID Web Proxy Cache http://www.squid-cache.org/ * ---------------------------------------------------------- --- /dev/null Thu Nov 15 04:52:26 2007 +++ squid/src/store_rewrite.c Thu Nov 15 04:52:27 2007 @@ -0,0 +1,183 @@ + +/* + * $Id: store_rewrite.c,v 1.1 2007/11/15 04:43:55 adrian Exp $ + * + * DEBUG: section 61 Redirector + * AUTHOR: Duane Wessels + * + * SQUID Web Proxy Cache http://www.squid-cache.org/ + * ---------------------------------------------------------- + * + * Squid is the result of efforts by numerous individuals from + * the Internet community; see the CONTRIBUTORS file for full + * details. Many organizations have provided support for Squid's + * development; see the SPONSORS file for full details. Squid is + * Copyrighted (C) 2001 by the Regents of the University of + * California; see the COPYRIGHT file for full details. Squid + * incorporates software developed and/or copyrighted by other + * sources; see the CREDITS file for full details. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. + * + */ + +#include "squid.h" + +typedef struct { + void *data; + char *orig_url; + struct in_addr client_addr; + const char *client_ident; + const char *method_s; + RH *handler; +} storeurlStateData; + +static HLPCB storeurlHandleReply; +static void storeurlStateFree(storeurlStateData * r); +static helper *storeurlors = NULL; +static OBJH storeurlStats; +static int n_bypassed = 0; +CBDATA_TYPE(storeurlStateData); + +static void +storeurlHandleReply(void *data, char *reply) +{ + storeurlStateData *r = data; + int valid; + char *t; + debug(61, 5) ("storeurlHandleRead: {%s}\n", reply ? reply : ""); + if (reply) { + if ((t = strchr(reply, ' '))) + *t = '\0'; + if (*reply == '\0') + reply = NULL; + } + valid = cbdataValid(r->data); + cbdataUnlock(r->data); + if (valid) + r->handler(r->data, reply); + storeurlStateFree(r); +} + +static void +storeurlStateFree(storeurlStateData * r) +{ + safe_free(r->orig_url); + cbdataFree(r); +} + +static void +storeurlStats(StoreEntry * sentry) +{ + storeAppendPrintf(sentry, "Redirector Statistics:\n"); + helperStats(sentry, storeurlors); + if (Config.onoff.storeurl_bypass) + storeAppendPrintf(sentry, "\nNumber of requests bypassed " + "because all store url bypassers were busy: %d\n", n_bypassed); +} + +/**** PUBLIC FUNCTIONS ****/ + +void +storeurlStart(clientHttpRequest * http, RH * handler, void *data) +{ + ConnStateData *conn = http->conn; + storeurlStateData *r = NULL; + const char *fqdn; + char *urlgroup = conn->port->urlgroup; + char buf[8192]; + char claddr[20]; + char myaddr[20]; + assert(http); + assert(handler); + debug(61, 5) ("storeurlStart: '%s'\n", http->uri); + if (Config.onoff.storeurl_bypass && storeurlors->stats.queue_size) { + /* Skip storeurlor if there is one request queued */ + n_bypassed++; + handler(data, NULL); + return; + } + r = cbdataAlloc(storeurlStateData); + r->orig_url = xstrdup(http->uri); + r->client_addr = conn->log_addr; + r->client_ident = NULL; + if (http->request->auth_user_request) + r->client_ident = authenticateUserRequestUsername(http->request->auth_user_request); + else if (http->request->extacl_user) { + r->client_ident = http->request->extacl_user; + } + if (!r->client_ident && conn->rfc931[0]) + r->client_ident = conn->rfc931; +#if USE_SSL + if (!r->client_ident) + r->client_ident = sslGetUserEmail(fd_table[conn->fd].ssl); +#endif + if (!r->client_ident) + r->client_ident = dash_str; + r->method_s = RequestMethods[http->request->method].str; + r->handler = handler; + r->data = data; + cbdataLock(r->data); + if ((fqdn = fqdncache_gethostbyaddr(r->client_addr, 0)) == NULL) + fqdn = dash_str; + xstrncpy(claddr, inet_ntoa(r->client_addr), 20); + xstrncpy(myaddr, inet_ntoa(http->request->my_addr), 20); + snprintf(buf, 8191, "%s %s/%s %s %s %s myip=%s myport=%d", + r->orig_url, + claddr, + fqdn, + r->client_ident[0] ? rfc1738_escape(r->client_ident) : dash_str, + r->method_s, + urlgroup ? urlgroup : "-", + myaddr, + http->request->my_port); + debug(61, 6) ("storeurlStart: sending '%s' to the helper\n", buf); + strcat(buf, "\n"); + helperSubmit(storeurlors, buf, storeurlHandleReply, r); +} + +void +storeurlInit(void) +{ + static int init = 0; + if (!Config.Program.store_rewrite.command) + return; + if (storeurlors == NULL) + storeurlors = helperCreate("store_rewriter"); + storeurlors->cmdline = Config.Program.store_rewrite.command; + storeurlors->n_to_start = Config.Program.store_rewrite.children; + storeurlors->concurrency = Config.Program.store_rewrite.concurrency; + storeurlors->ipc_type = IPC_STREAM; + helperOpenServers(storeurlors); + if (!init) { + cachemgrRegister("store_rewriter", + "URL Rewriter Stats", + storeurlStats, 0, 1); + init = 1; + CBDATA_INIT_TYPE(storeurlStateData); + } +} + +void +storeurlShutdown(void) +{ + if (!storeurlors) + return; + helperShutdown(storeurlors); + if (!shutting_down) + return; + helperFree(storeurlors); + storeurlors = NULL; +} Index: squid/src/structs.h =================================================================== RCS file: /cvsroot/squid/squid/src/structs.h,v retrieving revision 1.529 retrieving revision 1.530 diff -u -r1.529 -r1.530 --- squid/src/structs.h 25 Sep 2007 00:54:33 -0000 1.529 +++ squid/src/structs.h 15 Nov 2007 04:43:55 -0000 1.530 @@ -1,6 +1,6 @@ /* - * $Id: structs.h,v 1.529 2007/09/25 00:54:33 hno Exp $ + * $Id: structs.h,v 1.530 2007/11/15 04:43:55 adrian Exp $ * * * SQUID Web Proxy Cache http://www.squid-cache.org/ @@ -549,6 +549,11 @@ wordlist *command; int children; int concurrency; + } store_rewrite; + struct { + wordlist *command; + int children; + int concurrency; } location_rewrite; #if USE_ICMP char *pinger; @@ -652,6 +657,7 @@ int nonhierarchical_direct; int strip_query_terms; int redirector_bypass; + int storeurl_bypass; int ignore_unknown_nameservers; int client_pconns; int server_pconns; @@ -700,6 +706,7 @@ acl_access *identLookup; #endif acl_access *url_rewrite; + acl_access *storeurl_rewrite; acl_access *location_rewrite; acl_access *reply; acl_address *outgoing_address; @@ -1884,6 +1891,7 @@ u_short port; String urlpath; char *canonical; + char *store_url; /* rewritten URL for store lookup/storage; if NULL use canonical */ int link_count; /* free when zero */ request_flags flags; HttpHdrCc *cache_control; Index: squid/src/auth/Makefile.in =================================================================== RCS file: /cvsroot/squid/squid/src/auth/Makefile.in,v retrieving revision 1.42 retrieving revision 1.43 diff -u -r1.42 -r1.43 --- squid/src/auth/Makefile.in 12 Nov 2007 01:14:25 -0000 1.42 +++ squid/src/auth/Makefile.in 15 Nov 2007 04:43:56 -0000 1.43 @@ -128,7 +128,6 @@ EXEEXT = @EXEEXT@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ FALSE = @FALSE@ -GREP = @GREP@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ @@ -219,6 +218,8 @@ XTRA_LIBS = @XTRA_LIBS@ XTRA_OBJS = @XTRA_OBJS@ ac_ct_CC = @ac_ct_CC@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ @@ -233,31 +234,24 @@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ -htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ -localedir = @localedir@ localstatedir = @localstatedir@ makesnmplib = @makesnmplib@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ -psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ @@ -265,7 +259,7 @@ # Makefile for authentication modules in the Squid Object Cache server # -# $Id: Makefile.in,v 1.42 2007/11/12 01:14:25 hno Exp $ +# $Id: Makefile.in,v 1.43 2007/11/15 04:43:56 adrian Exp $ # AUTOMAKE_OPTIONS = subdir-objects EXTRA_LIBRARIES = libbasic.a libdigest.a libntlm.a libnegotiate.a Index: squid/src/fs/Makefile.in =================================================================== RCS file: /cvsroot/squid/squid/src/fs/Makefile.in,v retrieving revision 1.45 retrieving revision 1.46 diff -u -r1.45 -r1.46 --- squid/src/fs/Makefile.in 12 Nov 2007 01:14:26 -0000 1.45 +++ squid/src/fs/Makefile.in 15 Nov 2007 04:43:57 -0000 1.46 @@ -16,7 +16,7 @@ # Makefile for storage modules in the Squid Object Cache server # -# $Id: Makefile.in,v 1.45 2007/11/12 01:14:26 hno Exp $ +# $Id: Makefile.in,v 1.46 2007/11/15 04:43:57 adrian Exp $ # @@ -160,7 +160,6 @@ EXEEXT = @EXEEXT@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ FALSE = @FALSE@ -GREP = @GREP@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ @@ -251,6 +250,8 @@ XTRA_LIBS = @XTRA_LIBS@ XTRA_OBJS = @XTRA_OBJS@ ac_ct_CC = @ac_ct_CC@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ @@ -265,31 +266,24 @@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ -htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ -localedir = @localedir@ localstatedir = @localstatedir@ makesnmplib = @makesnmplib@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ -psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ Index: squid/src/repl/Makefile.in =================================================================== RCS file: /cvsroot/squid/squid/src/repl/Makefile.in,v retrieving revision 1.42 retrieving revision 1.43 diff -u -r1.42 -r1.43 --- squid/src/repl/Makefile.in 12 Nov 2007 01:14:27 -0000 1.42 +++ squid/src/repl/Makefile.in 15 Nov 2007 04:44:03 -0000 1.43 @@ -16,7 +16,7 @@ # Makefile for storage modules in the Squid Object Cache server # -# $Id: Makefile.in,v 1.42 2007/11/12 01:14:27 hno Exp $ +# $Id: Makefile.in,v 1.43 2007/11/15 04:44:03 adrian Exp $ # srcdir = @srcdir@ @@ -124,7 +124,6 @@ EXEEXT = @EXEEXT@ EXTERNAL_ACL_HELPERS = @EXTERNAL_ACL_HELPERS@ FALSE = @FALSE@ -GREP = @GREP@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ @@ -215,6 +214,8 @@ XTRA_LIBS = @XTRA_LIBS@ XTRA_OBJS = @XTRA_OBJS@ ac_ct_CC = @ac_ct_CC@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__include = @am__include@ @@ -229,31 +230,24 @@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ -htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ -localedir = @localedir@ localstatedir = @localstatedir@ makesnmplib = @makesnmplib@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ -psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@