Date: Tue, 25 Apr 2006 13:32:52 GMT From: soc-bushman <soc-bushman@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 96060 for review Message-ID: <200604251332.k3PDWq1b008227@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=96060 Change 96060 by soc-bushman@soc-bushman_stinger on 2006/04/25 13:32:06 several small fixes to make this code committable Affected files ... .. //depot/projects/soc2005/nsswitch_cached/src/etc/rc.d/cached#2 edit .. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/gen/getgrent.c#9 edit .. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/gen/getpwent.c#12 edit .. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/Makefile.inc#8 edit .. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/getaddrinfo.c#13 edit .. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/gethostnamadr.c#11 edit .. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/getnetnamadr.c#4 edit .. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/getproto.c#6 edit .. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/getprotoent.c#11 edit .. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/getprotoname.c#6 edit .. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/name6.c#11 edit .. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/nsdispatch.c#17 edit .. //depot/projects/soc2005/nsswitch_cached/src/lib/libc/rpc/getrpcent.c#11 edit .. //depot/projects/soc2005/nsswitch_cached/src/usr.sbin/cached/agents/Makefile.inc#2 edit .. //depot/projects/soc2005/nsswitch_cached/src/usr.sbin/cached/agents/hosts.c#2 delete .. //depot/projects/soc2005/nsswitch_cached/src/usr.sbin/cached/agents/hosts.h#2 delete .. //depot/projects/soc2005/nsswitch_cached/src/usr.sbin/cached/cached.c#3 edit Differences ... ==== //depot/projects/soc2005/nsswitch_cached/src/etc/rc.d/cached#2 (text+ko) ==== @@ -4,9 +4,8 @@ # # PROVIDE: cached -# REQUIRE: mountcritlocal +# REQUIRE: DAEMON # BEFORE: LOGIN -# KEYWORD: FreeBSD # # Add the following lines to /etc/rc.conf to enable cached: @@ -29,4 +28,3 @@ load_rc_config $name run_rc_command "$1" - ==== //depot/projects/soc2005/nsswitch_cached/src/lib/libc/gen/getgrent.c#9 (text+ko) ==== @@ -57,7 +57,9 @@ #include "un-namespace.h" #include "libc_private.h" #include "nss_tls.h" +#ifdef NS_CACHING #include "nscache.h" +#endif enum constants { GRP_STORAGE_INITIAL = 1 << 10, /* 1 KByte */ ==== //depot/projects/soc2005/nsswitch_cached/src/lib/libc/gen/getpwent.c#12 (text+ko) ==== @@ -61,7 +61,9 @@ #include "libc_private.h" #include "pw_scan.h" #include "nss_tls.h" +#ifdef NS_CACHING #include "nscache.h" +#endif #ifndef CTASSERT #define CTASSERT(x) _CTASSERT(x, __LINE__) ==== //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/Makefile.inc#8 (text+ko) ==== @@ -13,10 +13,13 @@ getservbyport.c getservent.c \ if_indextoname.c if_nameindex.c if_nametoindex.c \ ip6opt.c linkaddr.c map_v4v6.c name6.c \ - nscache.c nscachedcli.c nsdispatch.c nslexer.c\ - nsparser.c nss_compat.c \ + nsdispatch.c nslexer.c nsparser.c nss_compat.c \ rcmd.c rcmdsh.c recv.c rthdr.c send.c sockatmark.c vars.c +.if !defined(NO_NS_CACHING) +SRCS+= nscache.c nscachedcli.c +.endif + # for binary backward compatibility against FreeBSD 6.X and earlier SRCS+= res_mkupdate.c res_update.c @@ -121,4 +124,3 @@ SRCS+= hesiod.c MAN+= hesiod.3 .endif - ==== //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/getaddrinfo.c#13 (text+ko) ==== @@ -103,7 +103,9 @@ #include <nsswitch.h> #include "un-namespace.h" #include "libc_private.h" +#ifdef NS_CACHING #include "nscache.h" +#endif #if defined(__KAME__) && defined(INET6) # define FAITH ==== //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/gethostnamadr.c#11 (text+ko) ==== @@ -44,7 +44,9 @@ #include <resolv.h> /* XXX hack for _res */ #include "un-namespace.h" #include "netdb_private.h" +#ifdef NS_CACHING #include "nscache.h" +#endif extern int _ht_gethostbyname(void *, void *, va_list); extern int _dns_gethostbyname(void *, void *, va_list); ==== //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/getnetnamadr.c#4 (text+ko) ==== @@ -42,6 +42,9 @@ #include <nsswitch.h> #include "un-namespace.h" #include "netdb_private.h" +#ifdef NS_CACHING +#include "nscache.h" +#endif extern int _ht_getnetbyname(void *, void *, va_list); extern int _dns_getnetbyname(void *, void *, va_list); @@ -60,6 +63,220 @@ NETDB_THREAD_ALLOC(netent_data) NETDB_THREAD_ALLOC(netdata) +#ifdef NS_CACHING +static int +net_id_func(char *buffer, size_t *buffer_size, va_list ap, void *cache_mdata) +{ + char *name; + uint32_t net; + int type; + + size_t desired_size, size; + enum nss_lookup_type lookup_type; + int res = NS_UNAVAIL; + + lookup_type = (enum nss_lookup_type)cache_mdata; + switch (lookup_type) { + case nss_lt_name: + name = va_arg(ap, char *); + + size = strlen(name); + desired_size = sizeof(enum nss_lookup_type) + size + 1; + if (desired_size > *buffer_size) { + res = NS_RETURN; + goto fin; + } + + memcpy(buffer, &lookup_type, sizeof(enum nss_lookup_type)); + memcpy(buffer + sizeof(enum nss_lookup_type), name, size + 1); + + res = NS_SUCCESS; + break; + case nss_lt_id: + net = va_arg(ap, uint32_t); + type = va_arg(ap, int); + + desired_size = sizeof(enum nss_lookup_type) + sizeof(uint32_t) + + sizeof(int); + if (desired_size > *buffer_size) { + res = NS_RETURN; + goto fin; + } + + memcpy(buffer, &lookup_type, sizeof(enum nss_lookup_type)); + memcpy(buffer + sizeof(enum nss_lookup_type), &net, + sizeof(uint32_t)); + memcpy(buffer + sizeof(enum nss_lookup_type) + sizeof(uint32_t), + &type, sizeof(int)); + + res = NS_SUCCESS; + break; + default: + /* should be unreachable */ + return (NS_UNAVAIL); + } + +fin: + *buffer_size = desired_size; + return (res); +} + + +static int +net_marshal_func(char *buffer, size_t *buffer_size, void *retval, va_list ap, + void *cache_mdata) +{ + char *name; + uint32_t net; + int type; + struct netent *ne; + char *orig_buf; + size_t orig_buf_size; + + struct netent new_ne; + size_t desired_size, size, aliases_size; + char *p; + char **alias; + + switch ((enum nss_lookup_type)cache_mdata) { + case nss_lt_name: + name = va_arg(ap, char *); + break; + case nss_lt_id: + net = va_arg(ap, uint32_t); + type = va_arg(ap, int); + break; + case nss_lt_all: + break; + default: + /* should be unreachable */ + return (NS_UNAVAIL); + } + + ne = va_arg(ap, struct netent *); + orig_buf = va_arg(ap, char *); + orig_buf_size = va_arg(ap, size_t); + + desired_size = _ALIGNBYTES + sizeof(struct netent) + sizeof(char *); + if (ne->n_name != NULL) + desired_size += strlen(proto->n_name) + 1; + + if (ne->n_aliases != NULL) { + aliases_size = 0; + for (alias = ne->n_aliases; *alias; ++alias) { + desired_size += strlen(*alias) + 1; + ++aliases_size; + } + + desired_size += _ALIGNBYTES + (aliases_size + 1) * + sizeof(char *); + } + + if (*buffer_size < desired_size) { + /* this assignment is here for future use */ + *buffer_size = desired_size; + return (NS_RETURN); + } + + memcpy(&new_ne, ne, sizeof(struct netent)); + + *buffer_size = desired_size; + memset(buffer, 0, desired_size); + p = buffer + sizeof(struct netent) + sizeof(char *); + memcpy(buffer + sizeof(struct netent), &p, sizeof(char *)); + p = (char *)_ALIGN(p); + + if (new_ne.n_name != NULL) { + size = strlen(new_ne.n_name); + memcpy(p, new_ne.n_name, size); + new_ne.n_name = p; + p += size + 1; + } + + if (new_proto.p_aliases != NULL) { + p = (char *)_ALIGN(p); + memcpy(p, new_proto.p_aliases, sizeof(char *) * aliases_size); + new_proto.p_aliases = (char **)p; + p += sizeof(char *) * (aliases_size + 1); + + for (alias = new_proto.p_aliases; *alias; ++alias) { + size = strlen(*alias); + memcpy(p, *alias, size); + *alias = p; + p += size + 1; + } + } + + memcpy(buffer, &new_ne, sizeof(struct netent)); + return (NS_SUCCESS); +} + +static int +proto_unmarshal_func(char *buffer, size_t buffer_size, void *retval, va_list ap, + void *cache_mdata) +{ + char *name; + uint32_t net; + int type; + struct netent *ne; + char *orig_buf; + size_t orig_buf_size; + int *ret_errno; + + char *p; + char **alias; + + switch ((enum nss_lookup_type)cache_mdata) { + case nss_lt_name: + name = va_arg(ap, char *); + break; + case nss_lt_id: + net = va_arg(ap, uint32_t); + type = va_arg(ap, int); + break; + case nss_lt_all: + break; + default: + /* should be unreachable */ + return (NS_UNAVAIL); + } + + ne = va_arg(ap, struct netent *); + orig_buf = va_arg(ap, char *); + orig_buf_size = va_arg(ap, size_t); + ret_errno = va_arg(ap, int *); + + if (orig_buf_size < buffer_size - sizeof(struct netent) - + sizeof(char *)) { + *ret_errno = ERANGE; + return (NS_RETURN); + } + + memcpy(ne, buffer, sizeof(struct netent)); + memcpy(&p, buffer + sizeof(struct netent), sizeof(char *)); + + orig_buf = (char *)_ALIGN(orig_buf); + memcpy(orig_buf, buffer + sizeof(struct netent) + sizeof(char *) + + _ALIGN(p) - (size_t)p, + buffer_size - sizeof(struct netent) - sizeof(char *) - + _ALIGN(p) + (size_t)p); + p = (char *)_ALIGN(p); + + NS_APPLY_OFFSET(ne->n_name, orig_buf, p, char *); + if (ne->n_aliases != NULL) { + NS_APPLY_OFFSET(ne->n_aliases, orig_buf, p, char **); + + for (alias = ne->n_aliases; *alias; ++alias) + NS_APPLY_OFFSET(*alias, orig_buf, p, char *); + } + + if (retval != NULL) + *((struct netent **)retval) = ne; + + return (NS_SUCCESS); +} +#endif /* NS_CACHING */ + static void netent_data_free(void *ptr) { @@ -128,14 +345,24 @@ getnetbyname_r(const char *name, struct netent *ne, char *buffer, size_t buflen, struct netent **result, int *h_errorp) { - int rval, ret_errno; - +#ifdef NS_CACHING + static const nss_cache_info cache_info = + NS_COMMON_CACHE_INFO_INITIALIZER( + networks, (void *)nss_lt_name, + net_id_func, net_marshal_func, net_unmarshal_func); +#endif + static const ns_dtab dtab[] = { NS_FILES_CB(_ht_getnetbyname, NULL) { NSSRC_DNS, _dns_getnetbyname, NULL }, NS_NIS_CB(_nis_getnetbyname, NULL) /* force -DHESIOD */ +#ifdef NS_CACHING + NS_CACHE_CB(&cache_info) +#endif { 0 } - }; + }; + + int rval, ret_errno; rval = _nsdispatch((void *)result, dtab, NSDB_NETWORKS, "getnetbyname_r", default_src, name, ne, buffer, buflen, @@ -148,15 +375,25 @@ getnetbyaddr_r(uint32_t addr, int af, struct netent *ne, char *buffer, size_t buflen, struct netent **result, int *h_errorp) { - int rval, ret_errno; - +#ifdef NS_CACHING + static const nss_cache_info cache_info = + NS_COMMON_CACHE_INFO_INITIALIZER( + networks, (void *)nss_lt_id, + net_id_func, net_marshal_func, net_unmarshal_func); +#endif + static const ns_dtab dtab[] = { NS_FILES_CB(_ht_getnetbyaddr, NULL) { NSSRC_DNS, _dns_getnetbyaddr, NULL }, NS_NIS_CB(_nis_getnetbyaddr, NULL) /* force -DHESIOD */ +#ifdef NS_CACHING + NS_CACHE_CB(&cache_info) +#endif { 0 } }; + int rval, ret_errno; + rval = _nsdispatch((void *)result, dtab, NSDB_NETWORKS, "getnetbyaddr_r", default_src, addr, af, ne, buffer, buflen, &ret_errno, h_errorp); ==== //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/getproto.c#6 (text+ko) ==== @@ -56,8 +56,8 @@ extern int __proto_unmarshal_func(char *, size_t, void *, va_list, void *); #endif -int -__files_getprotobynumber(void *retval, void *mdata, va_list ap) +static int +files_getprotobynumber(void *retval, void *mdata, va_list ap) { struct protoent pe; struct protoent_data *ped; @@ -111,7 +111,7 @@ #endif static const ns_dtab dtab[] = { - { NSSRC_FILES, __files_getprotobynumber, NULL }, + { NSSRC_FILES, files_getprotobynumber, NULL }, #ifdef NS_CACHING NS_CACHE_CB(&cache_info) #endif ==== //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/getprotoent.c#11 (text+ko) ==== @@ -411,8 +411,8 @@ return (0); } -int -__files_getprotoent_r(void *retval, void *mdata, va_list ap) +static int +files_getprotoent_r(void *retval, void *mdata, va_list ap) { struct protoent pe; struct protoent_data *ped; @@ -428,7 +428,7 @@ errnop = va_arg(ap, int *); if ((ped = __protoent_data_init()) == NULL) - return (-1); + return (-1); if (__getprotoent_p(&pe, ped) != 0) { *errnop = errno; @@ -444,8 +444,8 @@ return (NS_SUCCESS); } -int -__files_setprotoent(void *retval, void *mdata, va_list ap) +static int +files_setprotoent(void *retval, void *mdata, va_list ap) { struct protoent_data *ped; int f; @@ -458,8 +458,8 @@ return (NS_UNAVAIL); } -int -__files_endprotoent(void *retval, void *mdata, va_list ap) +static int +files_endprotoent(void *retval, void *mdata, va_list ap) { struct protoent_data *ped; @@ -481,7 +481,7 @@ #endif static const ns_dtab dtab[] = { - { NSSRC_FILES, __files_getprotoent_r, (void *)nss_lt_all }, + { NSSRC_FILES, files_getprotoent_r, (void *)nss_lt_all }, #ifdef NS_CACHING NS_CACHE_CB(&cache_info) #endif @@ -512,7 +512,7 @@ #endif static const ns_dtab dtab[] = { - { NSSRC_FILES, __files_setprotoent, NULL }, + { NSSRC_FILES, files_setprotoent, NULL }, #ifdef NS_CACHING NS_CACHE_CB(&cache_info) #endif @@ -533,7 +533,7 @@ #endif static const ns_dtab dtab[] = { - { NSSRC_FILES, __files_endprotoent, NULL }, + { NSSRC_FILES, files_endprotoent, NULL }, #ifdef NS_CACHING NS_CACHE_CB(&cache_info) #endif ==== //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/getprotoname.c#6 (text+ko) ==== @@ -57,8 +57,8 @@ extern int __proto_unmarshal_func(char *, size_t, void *, va_list, void *); #endif -int -__files_getprotobyname(void *retval, void *mdata, va_list ap) +static int +files_getprotobyname(void *retval, void *mdata, va_list ap) { struct protoent pe; struct protoent_data *ped; @@ -120,7 +120,7 @@ #endif static const ns_dtab dtab[] = { - { NSSRC_FILES, __files_getprotobyname, NULL }, + { NSSRC_FILES, files_getprotobyname, NULL }, #ifdef NS_CACHING NS_CACHE_CB(&cache_info) #endif ==== //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/name6.c#11 (text+ko) ==== @@ -123,7 +123,9 @@ #include "netdb_private.h" #include "res_config.h" #include "res_private.h" +#ifdef NS_CACHING #include "nscache.h" +#endif #ifndef _PATH_HOSTS #define _PATH_HOSTS "/etc/hosts" ==== //depot/projects/soc2005/nsswitch_cached/src/lib/libc/net/nsdispatch.c#17 (text+ko) ==== @@ -86,9 +86,10 @@ #include <syslog.h> #include <unistd.h> #include "un-namespace.h" +#ifdef NS_CACHING #include "nscache.h" +#endif - enum _nss_constants { /* Number of elements allocated when we grow a vector */ ELEMSPERCHUNK = 8 @@ -638,7 +639,7 @@ cache_flag = 0; #endif for (i = 0; i < srclistsize; i++) { - result = NS_NOTFOUND; + result = NS_NOTFOUND; method = nss_method_lookup(srclist[i].name, database, method_name, disp_tab, &mdata); @@ -676,7 +677,7 @@ #else /* NS_CACHING */ va_start(ap, defaults); result = method(retval, mdata, ap); - va_end(ap); + va_end(ap); #endif /* NS_CACHING */ if (result & (srclist[i].flags)) ==== //depot/projects/soc2005/nsswitch_cached/src/lib/libc/rpc/getrpcent.c#11 (text+ko) ==== @@ -63,7 +63,9 @@ #include "un-namespace.h" #include "libc_private.h" #include "nss_tls.h" +#ifdef NS_CACHING #include "nscache.h" +#endif #define RPCDB "/etc/rpc" @@ -127,20 +129,20 @@ int number; }; -static int wrap_getrpcbyname_r(union key, struct rpcent *, char *, +static int wrap_getrpcbyname_r(union key, struct rpcent *, char *, size_t, struct rpcent **); -static int wrap_getrpcbynumber_r(union key, struct rpcent *, char *, +static int wrap_getrpcbynumber_r(union key, struct rpcent *, char *, size_t, struct rpcent **); -static int wrap_getrpcent_r(union key, struct rpcent *, char *, +static int wrap_getrpcent_r(union key, struct rpcent *, char *, size_t, struct rpcent **); -static struct rpcent *getrpc(int (*fn)(union key, struct rpcent *, char *, +static struct rpcent *getrpc(int (*fn)(union key, struct rpcent *, char *, size_t, struct rpcent **), union key); #ifdef NS_CACHING -static int rpc_id_func(char *, size_t *, va_list, void *); -static int rpc_marshal_func(char *, size_t *, void *, va_list, void *); -static int rpc_unmarshal_func(char *, size_t, void *, va_list, void *); -#endif /* NS_CACHING */ +static int rpc_id_func(char *, size_t *, va_list, void *); +static int rpc_marshal_func(char *, size_t *, void *, va_list, void *); +static int rpc_unmarshal_func(char *, size_t, void *, va_list, void *); +#endif static int rpcent_unpack(char *p, struct rpcent *rpc, char **r_aliases, @@ -797,7 +799,7 @@ /* get**_r functions implementation */ -int +static int getrpcbyname_r(const char *name, struct rpcent *rpc, char *buffer, size_t bufsize, struct rpcent **result) { @@ -832,7 +834,7 @@ return (ret_errno); } -int +static int getrpcbynumber_r(int number, struct rpcent *rpc, char *buffer, size_t bufsize, struct rpcent **result) { @@ -866,7 +868,7 @@ return (ret_errno); } -int +static int getrpcent_r(struct rpcent *rpc, char *buffer, size_t bufsize, struct rpcent **result) { @@ -899,53 +901,6 @@ return (ret_errno); } -void -setrpcent(int stayopen) -{ -#ifdef NS_CACHING - static const nss_cache_info cache_info = NS_MP_CACHE_INFO_INITIALIZER( - rpc, (void *)nss_lt_all, - NULL, NULL); -#endif - - static const ns_dtab dtab[] = { - { NSSRC_FILES, files_setrpcent, (void *)SETRPCENT }, -#ifdef YP - { NSSRC_NIS, nis_setrpcent, (void *)SETRPCENT }, -#endif -#ifdef NS_CACHING - NS_CACHE_CB(&cache_info) -#endif - { NULL, NULL, NULL } - }; - - (void)nsdispatch(NULL, dtab, NSDB_RPC, "setrpcent", defaultsrc, - stayopen); -} - -void -endrpcent() -{ -#ifdef NS_CACHING - static const nss_cache_info cache_info = NS_MP_CACHE_INFO_INITIALIZER( - rpc, (void *)nss_lt_all, - NULL, NULL); -#endif - - static const ns_dtab dtab[] = { - { NSSRC_FILES, files_setrpcent, (void *)ENDRPCENT }, -#ifdef YP - { NSSRC_NIS, nis_setrpcent, (void *)ENDRPCENT }, -#endif -#ifdef NS_CACHING - NS_CACHE_CB(&cache_info) -#endif - { NULL, NULL, NULL } - }; - - (void)nsdispatch(NULL, dtab, NSDB_SERVICES, "endrpcent", defaultsrc); -} - /* get** wrappers for get**_r functions implementation */ static void rpcent_endstate(void *p) @@ -1048,3 +1003,50 @@ return (getrpc(wrap_getrpcent_r, key)); } + +void +setrpcent(int stayopen) +{ +#ifdef NS_CACHING + static const nss_cache_info cache_info = NS_MP_CACHE_INFO_INITIALIZER( + rpc, (void *)nss_lt_all, + NULL, NULL); +#endif + + static const ns_dtab dtab[] = { + { NSSRC_FILES, files_setrpcent, (void *)SETRPCENT }, +#ifdef YP + { NSSRC_NIS, nis_setrpcent, (void *)SETRPCENT }, +#endif +#ifdef NS_CACHING + NS_CACHE_CB(&cache_info) +#endif + { NULL, NULL, NULL } + }; + + (void)nsdispatch(NULL, dtab, NSDB_RPC, "setrpcent", defaultsrc, + stayopen); +} + +void +endrpcent() +{ +#ifdef NS_CACHING + static const nss_cache_info cache_info = NS_MP_CACHE_INFO_INITIALIZER( + rpc, (void *)nss_lt_all, + NULL, NULL); +#endif + + static const ns_dtab dtab[] = { + { NSSRC_FILES, files_setrpcent, (void *)ENDRPCENT }, +#ifdef YP + { NSSRC_NIS, nis_setrpcent, (void *)ENDRPCENT }, +#endif +#ifdef NS_CACHING + NS_CACHE_CB(&cache_info) +#endif + { NULL, NULL, NULL } + }; + + (void)nsdispatch(NULL, dtab, NSDB_SERVICES, "endrpcent", defaultsrc); +} ==== //depot/projects/soc2005/nsswitch_cached/src/usr.sbin/cached/agents/Makefile.inc#2 (text+ko) ==== @@ -1,3 +1,3 @@ # $FreeBSD -SRCS += passwd.c group.c hosts.c services.c +SRCS += passwd.c group.c services.c ==== //depot/projects/soc2005/nsswitch_cached/src/usr.sbin/cached/cached.c#3 (text+ko) ==== @@ -46,7 +46,6 @@ #include "agents/passwd.h" #include "agents/group.h" #include "agents/services.h" -#include "agents/hosts.h" #include "cachedcli.h" #include "cachelib.h" #include "config.h"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200604251332.k3PDWq1b008227>