diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ef07409 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +hesiod-3.0.2.tar.gz +hesiod-3.1.0.tar.gz diff --git a/dead.package b/dead.package deleted file mode 100644 index cd55faa..0000000 --- a/dead.package +++ /dev/null @@ -1 +0,0 @@ -Unmaintained upstream; not used by any other packages diff --git a/hesiod-3.0.2-env.patch b/hesiod-3.0.2-env.patch new file mode 100644 index 0000000..a67149d --- /dev/null +++ b/hesiod-3.0.2-env.patch @@ -0,0 +1,29 @@ +Ignore environment variables in setuid or setgid programs. The glibc-internal +copy of the library already implements a similar check. + +--- hesiod-3.0.2/hesiod.c Wed Oct 3 14:53:37 2001 ++++ hesiod-3.0.2/hesiod.c Wed Oct 3 14:55:02 2001 +@@ -52,6 +52,7 @@ + #include + #include + #include ++#include + #include + #include "hesiod.h" + #include "hesiod_p.h" +@@ -79,13 +80,13 @@ + if (ctx) + { + *context = ctx; +- configname = getenv("HESIOD_CONFIG"); ++ configname = ((getuid() == geteuid()) && (getgid() == getegid())) ? getenv("HESIOD_CONFIG") : NULL; + if (!configname) + configname = SYSCONFDIR "/hesiod.conf"; + if (read_config_file(ctx, configname) >= 0) + { + /* The default rhs can be overridden by an environment variable. */ +- p = getenv("HES_DOMAIN"); ++ p = ((getuid() == geteuid()) && (getgid() == getegid())) ? getenv("HES_DOMAIN") : NULL; + if (p) + { + if (ctx->rhs) diff --git a/hesiod-3.1.0-classes.patch b/hesiod-3.1.0-classes.patch new file mode 100644 index 0000000..b1823b4 --- /dev/null +++ b/hesiod-3.1.0-classes.patch @@ -0,0 +1,161 @@ +Add support for the "classes" configuration file directive back in. + +--- hesiod-3.1.0/hesiod.conf.5 2006-03-30 11:22:11.000000000 -0500 ++++ hesiod-3.1.0/hesiod.conf.5 2006-03-30 16:04:11.000000000 -0500 +@@ -43,7 +43,7 @@ + still used by some sites). You may specify both classes separated by + a comma to try one class first and then the other if no entry is + available in the first class. The default value of the classes +-variable is ``IN,HS''. ++variable is ``IN''. + .SH SEE ALSO + hesiod(3) + .SH BUGS +--- hesiod-3.1.0/hesiod.c 2006-03-30 11:22:11.000000000 -0500 ++++ hesiod-3.1.0/hesiod.c 2006-03-30 16:13:54.000000000 -0500 +@@ -71,12 +71,16 @@ + struct hesiod_p { + char *lhs; /* normally ".ns" */ + char *rhs; /* AKA the default hesiod domain */ ++ int n_classes, *classes; /* query classes */ + }; + + char **hesiod__uidresolve(void *context, const char *uidstr); + static int read_config_file(struct hesiod_p *ctx, const char *filename); + static char **get_txt_records(struct hesiod_p *ctx, const char *name); ++static char **get_txt_records_for_class(struct hesiod_p *ctx, const char *name, ++ int class); + static int cistrcmp(const char *s1, const char *s2); ++static int cistrncmp(const char *s1, const char *s2, size_t n); + + /* This function is called to initialize a hesiod_p. */ + int hesiod_init(void **context) +@@ -133,6 +137,7 @@ + free(ctx->rhs); + if (ctx->lhs) + free(ctx->lhs); ++ free(ctx->classes); + free(ctx); + } + +@@ -252,8 +257,18 @@ + * ctx->rhs which need to be freed by the caller. */ + static int read_config_file(struct hesiod_p *ctx, const char *filename) + { +- char *key, *data, *p, **which; ++ char *key, *data, *p, *q, **which; + char buf[MAXDNAME + 7]; ++ unsigned int i; ++ int *tmpclass; ++ struct { ++ char name[3]; ++ int class; ++ } class_names[] = { ++ {"in", C_IN}, ++ {"hs", C_HS}, ++ {"any", C_ANY}, ++ }; + FILE *fp; + + /* Try to open the configuration file. */ +@@ -263,6 +278,8 @@ + /* Use compiled in default domain names. */ + ctx->lhs = malloc(strlen(DEF_LHS) + 1); + ctx->rhs = malloc(strlen(DEF_RHS) + 1); ++ ctx->n_classes = 0; ++ ctx->classes = NULL; + if (ctx->lhs && ctx->rhs) + { + strcpy(ctx->lhs, DEF_LHS); +@@ -278,6 +295,8 @@ + + ctx->lhs = NULL; + ctx->rhs = NULL; ++ ctx->n_classes = 0; ++ ctx->classes = NULL; + while (fgets(buf, sizeof(buf), fp) != NULL) + { + p = buf; +@@ -308,6 +327,32 @@ + } + strcpy(*which, data); + } ++ if (cistrcmp(key, "classes") == 0) ++ { ++ p = data; ++ while ((p != NULL) && (*p != '\0') && (*p != '#') && ++ (*p != '\r') && (*p != '\n')) ++ { ++ q = p + strcspn(p, ",# \t\r\n"); ++ for (i = 0; i < sizeof(class_names) / sizeof(class_names[0]); i++) ++ { ++ if ((strlen(class_names[i].name) == (q - p)) && ++ (cistrncmp(p, class_names[i].name, q - p) == 0)) ++ { ++ tmpclass = realloc(ctx->classes, ++ (sizeof(int) * ctx->n_classes + 1)); ++ if (tmpclass != NULL) ++ { ++ ctx->classes = tmpclass; ++ ctx->classes[ctx->n_classes] = class_names[i].class; ++ ctx->n_classes++; ++ } ++ break; ++ } ++ } ++ p = q + strspn(q, ", \t\r\n"); ++ } ++ } + } + fclose(fp); + +@@ -326,6 +371,25 @@ + */ + static char **get_txt_records(struct hesiod_p *ctx, const char *name) + { ++ char **tmp; ++ int i; ++ if (ctx->n_classes > 0) ++ { ++ for (i = 0; i < ctx->n_classes; i++) ++ { ++ tmp = get_txt_records_for_class(ctx, name, ctx->classes[i]); ++ if (tmp != NULL) ++ return tmp; ++ } ++ return NULL; ++ } ++ else ++ return get_txt_records_for_class(ctx, name, C_IN); ++} ++ ++static char **get_txt_records_for_class(struct hesiod_p *ctx, const char *name, ++ int class) ++{ + unsigned char qbuf[PACKETSZ], abuf[MAX_HESRESP]; + int n; + +@@ -334,7 +398,7 @@ + return NULL; + + /* Construct the query. */ +- n = res_mkquery(QUERY, name, C_IN, T_TXT, NULL, 0, NULL, qbuf, PACKETSZ); ++ n = res_mkquery(QUERY, name, class, T_TXT, NULL, 0, NULL, qbuf, PACKETSZ); + if (n < 0) + { + errno = EMSGSIZE; +@@ -471,3 +534,14 @@ + } + return tolower(*s1) - tolower(*s2); + } ++ ++static int cistrncmp(const char *s1, const char *s2, size_t n) ++{ ++ while (*s1 && *s2 && (tolower(*s1) == tolower(*s2)) && (n > 0)) ++ { ++ s1++; ++ s2++; ++ n--; ++ } ++ return n ? (tolower(*s1) - tolower(*s2)) : 0; ++} diff --git a/hesiod-3.1.0-dnsparse.patch b/hesiod-3.1.0-dnsparse.patch new file mode 100644 index 0000000..edeb88b --- /dev/null +++ b/hesiod-3.1.0-dnsparse.patch @@ -0,0 +1,55 @@ +If the response is larger than 1024 bytes, go ahead and retry. + +--- hesiod-3.1.0/hesiod.c 2006-03-30 13:22:57.000000000 -0500 ++++ hesiod-3.1.0/hesiod.c 2006-03-30 13:28:16.000000000 -0500 +@@ -327,7 +327,8 @@ + */ + static char **get_txt_records(struct hesiod_p *ctx, const char *name) + { +- unsigned char qbuf[PACKETSZ], abuf[MAX_HESRESP]; ++ unsigned char qbuf[PACKETSZ], *abuf; ++ char **tmp; +- int n; ++ int n, i, len; + + /* Make sure the resolver is initialized. */ +@@ -343,14 +344,36 @@ + } + + /* Send the query. */ +- n = res_send(qbuf, n, abuf, MAX_HESRESP); +- if (n < 0) ++ abuf = NULL; ++ len = 1024; ++ i = n; ++ do ++ { ++ abuf = realloc(abuf, len); ++ if (abuf == NULL) ++ { ++ n = -1; ++ break; ++ } ++ n = res_send(qbuf, i, abuf, len); ++ if (n < len) ++ { ++ break; ++ } ++ len = n + 1024; ++ } while(1); ++ if (n < (ssize_t) sizeof(HEADER)) + { + errno = ECONNREFUSED; ++ free(abuf); + return NULL; + } + +- return hesiod_parse_result(ctx, abuf, n); ++ tmp = hesiod_parse_result(ctx, abuf, n); ++ ++ free(abuf); ++ ++ return tmp; + } + + char **hesiod_parse_result(void *ctx, const unsigned char *abuf, int alen) diff --git a/hesiod-3.1.0-libresolv.patch b/hesiod-3.1.0-libresolv.patch new file mode 100644 index 0000000..9487b7e --- /dev/null +++ b/hesiod-3.1.0-libresolv.patch @@ -0,0 +1,20 @@ +Try to correctly find res_mkquery in libresolv, even in cases where a +preprocessor-based rename in may screw us up. +--- hesiod-3.1.0/configure.in 2006-03-30 11:22:11.000000000 -0500 ++++ hesiod-3.1.0/configure.in 2006-03-30 13:31:02.000000000 -0500 +@@ -12,7 +12,14 @@ + AC_EGREP_HEADER(pw_change, pwd.h, AC_DEFINE(HAVE_PW_CHANGE)) + AC_EGREP_HEADER(pw_expire, pwd.h, AC_DEFINE(HAVE_PW_EXPIRE)) + +-AC_CHECK_FUNC(res_mkquery, :, [AC_CHECK_LIB(resolv, res_mkquery)]) ++AC_CHECK_FUNC(res_mkquery, :, [AC_CHECK_LIB(resolv, res_mkquery,,[ ++saveLIBS="$LIBS" ++LIBS="-lresolv $LIBS" ++AC_MSG_CHECKING([if res_mkquery is provided by libresolv]) ++AC_TRY_LINK([#include ],[res_mkquery(0,NULL,0,0,NULL,0,NULL,NULL,0);],[AC_DEFINE(HAVE_RES_MKQUERY,1,[Define if your libresolv provides res_mkquery.]) ++AC_MSG_RESULT(yes)],[LIBS="$saveLIBS" ++AC_MSG_RESULT(no)]) ++])]) + + AC_CONFIG_HEADER(config.h) + AC_OUTPUT(Makefile) diff --git a/hesiod-3.1.0-perms.patch b/hesiod-3.1.0-perms.patch new file mode 100644 index 0000000..e8f2776 --- /dev/null +++ b/hesiod-3.1.0-perms.patch @@ -0,0 +1,14 @@ +Let libtool decide the install mode for the libtool archive and the real files +which it tracks. + +--- hesiod-3.1.0/Makefile.in 2006-06-20 14:24:10.000000000 -0400 ++++ hesiod-3.1.0/Makefile.in 2006-06-20 14:24:05.000000000 -0400 +@@ -48,7 +48,7 @@ + ${top_srcdir}/mkinstalldirs ${DESTDIR}${includedir} + ${top_srcdir}/mkinstalldirs ${DESTDIR}${mandir}/man3 + ${top_srcdir}/mkinstalldirs ${DESTDIR}${mandir}/man5 +- ${LIBTOOL} --mode=install ${INSTALL} -m 644 libhesiod.la \ ++ ${LIBTOOL} --mode=install ${INSTALL} libhesiod.la \ + ${DESTDIR}${libdir} + ${INSTALL} -m 444 ${srcdir}/hesiod.h ${DESTDIR}${includedir} + ${INSTALL} -m 444 ${srcdir}/hesiod.3 ${DESTDIR}${mandir}/man3 diff --git a/hesiod-3.1.0-str.patch b/hesiod-3.1.0-str.patch new file mode 100644 index 0000000..f243e85 --- /dev/null +++ b/hesiod-3.1.0-str.patch @@ -0,0 +1,25 @@ +One or both strings is supplied through a configuration file, so we have no +guarantees about its length. + +--- hesiod-3.1.0/hesservbyname.c 2006-03-30 11:22:11.000000000 -0500 ++++ hesiod-3.1.0/hesservbyname.c 2006-03-30 13:13:50.000000000 -0500 +@@ -187,7 +187,7 @@ + + static int cistrcmp(const char *s1, const char *s2) + { +- while (*s1 && tolower(*s1) == tolower(*s2)) ++ while (*s1 && *s2 && tolower(*s1) == tolower(*s2)) + { + s1++; + s2++; +--- hesiod-3.1.0/hesiod.c 2006-03-30 13:13:50.000000000 -0500 ++++ hesiod-3.1.0/hesiod.c 2006-03-30 13:19:03.000000000 -0500 +@@ -465,7 +465,7 @@ + + static int cistrcmp(const char *s1, const char *s2) + { +- while (*s1 && tolower(*s1) == tolower(*s2)) ++ while (*s1 && *s2 && tolower(*s1) == tolower(*s2)) + { + s1++; + s2++; diff --git a/hesiod.spec b/hesiod.spec new file mode 100644 index 0000000..5e70b51 --- /dev/null +++ b/hesiod.spec @@ -0,0 +1,219 @@ +Name: hesiod +Version: 3.1.0 +Release: 10 +Source: ftp://athena-dist.mit.edu/pub/ATHENA/hesiod/hesiod-%{version}.tar.gz +Patch0: hesiod-3.1.0-classes.patch +Patch1: hesiod-3.0.2-env.patch +Patch2: hesiod-3.1.0-str.patch +Patch3: hesiod-3.1.0-dnsparse.patch +Patch4: hesiod-3.1.0-libresolv.patch +Patch5: hesiod-3.1.0-perms.patch +Summary: Hesiod libraries. +Group: System Environment/Libraries +License: MIT +Buildroot: %{_tmppath}/hesiod-root +BuildRequires: autoconf, automake, libtool + +%description +Hesiod is a system which uses existing DNS functionality to provide access +to databases of information that changes infrequently. It is often used to +distribute information kept in the /etc/passwd, /etc/group, and /etc/printcap +files, among others. + +%package devel +Summary: Development libraries and headers for Hesiod +Group: Development/Libraries +Requires: hesiod = %{version}-%{release} + +%description devel +Hesiod is a system which uses existing DNS functionality to provide access +to databases of information that changes infrequently. It is often used to +distribute information which might otherwise kept in the /etc/passwd, +/etc/group, and /etc/printcap files over a network, eliminating the need to +ensure synchronize the files among multiple hosts. This package contains +the header files and libraries required for building programs which use Hesiod. + +%changelog +* Tue Feb 19 2008 Fedora Release Engineering - 3.1.0-10 +- Autorebuild for GCC 4.3 + +* Wed Aug 22 2006 Nalin Dahyabhai - 3.1.0-9 +- rebuild + +* Mon Jul 17 2006 Nalin Dahyabhai - 3.1.0-8 +- rebuild + +* Fri Jul 7 2006 Nalin Dahyabhai - 3.1.0-7 +- use the system libtool to consistently link libhesiod.la with libresolv + +* Fri Jul 7 2006 Nalin Dahyabhai - 3.1.0-6 +- run autoreconf instead of autoconf after untarring so that we get a + config.h.in which suits the changes we make to configure.in (part of #197938) + +* Tue Jun 20 2006 Nalin Dahyabhai - 3.1.0-5 +- don't override libtool's defaults for permissions on its .la file, because + we don't get debuginfo if the execute bit isn't set (pjones, in #190219) + +* Wed Jun 7 2006 Jeremy Katz - 3.1.0-4 +- rebuild for -devel deps + +* Thu Mar 30 2006 Nalin Dahyabhai - 3.1.0-3 +- no, we really did need that patch + +* Thu Mar 30 2006 Nalin Dahyabhai - 3.1.0-2 +- drop a no-longer-needed patch for detecting libresolv properly + +* Thu Mar 30 2006 Nalin Dahyabhai - 3.1.0-1 +- update to 3.1.0 (#187372) + +* Fri Feb 10 2006 Jesse Keating - 3.0.2-31.2.1 +- bump again for double-long bug on ppc(64) + +* Tue Feb 07 2006 Jesse Keating - 3.0.2-31.2 +- rebuilt for new gcc4.1 snapshot and glibc changes + +* Fri Dec 09 2005 Jesse Keating +- rebuilt + +* Wed Mar 16 2005 Nalin Dahyabhai 3.0.2-31 +- rebuild + +* Tue Jun 15 2004 Elliot Lee +- rebuilt + +* Tue Mar 02 2004 Elliot Lee +- rebuilt + +* Fri Feb 13 2004 Elliot Lee +- rebuilt + +* Sun Oct 19 2003 Florian La Roche +- add a %%clean specfile target + +* Mon Jun 16 2003 Nalin Dahyabhai 3.0.2-28 +- rebuild + +* Wed Jun 04 2003 Elliot Lee +- rebuilt + +* Mon Jan 27 2003 Nalin Dahyabhai 3.0.2-26 +- link libhesiod with libresolv on all platforms + +* Wed Jan 22 2003 Tim Powers 3.0.2-25 +- rebuilt + +* Fri Jan 10 2003 Phil Knirsch 3.0.2-24 +- Fixed wrong .so name for s390/s390x. + +* Fri Jan 10 2003 Phil Knirsch 3.0.2-23 +- Build shared lib correctly on s390 and s390x (with gcc -shared -fPIC). + +* Wed Sep 24 2002 Nalin Dahyabhai 3.0.2-22 +- look harder for res_mkquery() in libresolv + +* Wed Aug 21 2002 Nalin Dahyabhai +- don't choke on large response packets + +* Fri Jun 21 2002 Tim Powers +- automated rebuild + +* Sun May 26 2002 Tim Powers +- automated rebuild + +* Thu May 16 2002 Nalin Dahyabhai 3.0.2-19 +- rebuild in new environment + +* Mon Apr 15 2002 Nalin Dahyabhai 3.0.2-18 +- add missing post/postun calls to ldconfig + +* Wed Feb 20 2002 Nalin Dahyabhai 3.0.2-17 +- rebuild in new environment + +* Wed Jan 09 2002 Tim Powers +- automated rebuild + +* Fri Oct 26 2001 Nalin Dahyabhai 3.0.2-15 +- actually set the soname in the shared library (ld doesn't automatically + set the soname to the output file's name, oops) + +* Fri Oct 5 2001 Nalin Dahyabhai 3.0.2-14 +- on second thought, put the shared library back in, using a soversion of 0 + to have a chance at providing compatibility with apps linked dynamically + on other distributions +- make -devel depend on the same version of the main package + +* Wed Oct 3 2001 Nalin Dahyabhai +- remove the shared library patch -- different packages with shared libraries + tend to use different sonames, so we'd run inevitably run into problems + +* Thu Aug 21 2001 Nalin Dahyabhai +- remove pre and post scripts -- authconfig handles that stuff now +- add the hesiod man page back in, as bind-devel doesn't provide it any more + +* Wed Jan 17 2001 Jeremy Katz +- hesiod-devel requires hesiod (bug #128) + +* Thu Sep 14 2000 Jeremy Katz +- remove hesiod man page from hesiod-devel as it conflicts with the one + from bind-devel + +* Thu Sep 14 2000 Jeremy Katz +- use rpm macros where possible and FHS-ify +- split into main and devel packages +- add back requires for nscd + +* Fri Jul 28 2000 Jeremy Katz +- rebuild in new environment + +* Thu Mar 16 2000 Jeremy Katz +- rebuild in new environment + +* Thu Sep 2 1999 Nalin Dahyabhai +- removed dependency on nscd +- changed requires: nscd back to caching-nameserver + +* Mon May 17 1999 Nalin Dahyabhai +- started changelog +- moved addition of hesiod to nsswitch.conf to this package because we + no longer use a separate libnss_hesiod.so +- changed requires: caching-nameserver to nscd +- added post-install script snippet to activate nscd on install + +%prep +%setup -q +#%patch0 -p1 -b .classes +%patch1 -p1 -b .env +%patch2 -p1 -b .str +%patch3 -p1 -b .dnsparse +%patch4 -p1 -b .libresolv +%patch5 -p1 -b .perms +autoreconf + +%build +%configure +make LIBTOOL=libtool + +%install +[ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT +make install DESTDIR=$RPM_BUILD_ROOT +rm -f $RPM_BUILD_ROOT/%{_libdir}/*.la + +%clean +rm -rf $RPM_BUILD_ROOT + +%post -p /sbin/ldconfig + +%postun -p /sbin/ldconfig + +%files +%defattr(-,root,root) +%doc README NEWS +%{_libdir}/libhesiod.so.* +%{_mandir}/man5/* + +%files devel +%defattr(-,root,root) +%{_libdir}/libhesiod.a +%{_libdir}/libhesiod.so +%{_includedir}/hesiod.h +%{_mandir}/man3/* diff --git a/sources b/sources new file mode 100644 index 0000000..a408e3e --- /dev/null +++ b/sources @@ -0,0 +1 @@ +89c785d350e75d6628754659ee4583e8 hesiod-3.1.0.tar.gz