Compare commits

..

3 commits

Author SHA1 Message Date
Fedora Release Engineering
c0abfce6f8 dist-git conversion 2010-07-28 17:42:45 +00:00
Bill Nottingham
2292fb34bf Fix typo that causes a failure to update the common directory. (releng
#2781)
2009-11-26 01:17:46 +00:00
Jesse Keating
6e5f47a585 Initialize branch F-9 for hesiod 2008-04-20 21:50:31 +00:00
10 changed files with 526 additions and 1 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
hesiod-3.0.2.tar.gz
hesiod-3.1.0.tar.gz

View file

@ -1 +0,0 @@
Unmaintained upstream; not used by any other packages

29
hesiod-3.0.2-env.patch Normal file
View file

@ -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 <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <unistd.h>
#include <ctype.h>
#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)

161
hesiod-3.1.0-classes.patch Normal file
View file

@ -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;
+}

View file

@ -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)

View file

@ -0,0 +1,20 @@
Try to correctly find res_mkquery in libresolv, even in cases where a
preprocessor-based rename in <resolv.h> 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 <resolv.h>],[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)

14
hesiod-3.1.0-perms.patch Normal file
View file

@ -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

25
hesiod-3.1.0-str.patch Normal file
View file

@ -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++;

219
hesiod.spec Normal file
View file

@ -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 <rel-eng@fedoraproject.org> - 3.1.0-10
- Autorebuild for GCC 4.3
* Wed Aug 22 2006 Nalin Dahyabhai <nalin@redhat.com> - 3.1.0-9
- rebuild
* Mon Jul 17 2006 Nalin Dahyabhai <nalin@redhat.com> - 3.1.0-8
- rebuild
* Fri Jul 7 2006 Nalin Dahyabhai <nalin@redhat.com> - 3.1.0-7
- use the system libtool to consistently link libhesiod.la with libresolv
* Fri Jul 7 2006 Nalin Dahyabhai <nalin@redhat.com> - 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 <nalin@redhat.com> - 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 <katzj@redhat.com> - 3.1.0-4
- rebuild for -devel deps
* Thu Mar 30 2006 Nalin Dahyabhai <nalin@redhat.com> - 3.1.0-3
- no, we really did need that patch
* Thu Mar 30 2006 Nalin Dahyabhai <nalin@redhat.com> - 3.1.0-2
- drop a no-longer-needed patch for detecting libresolv properly
* Thu Mar 30 2006 Nalin Dahyabhai <nalin@redhat.com> - 3.1.0-1
- update to 3.1.0 (#187372)
* Fri Feb 10 2006 Jesse Keating <jkeating@redhat.com> - 3.0.2-31.2.1
- bump again for double-long bug on ppc(64)
* Tue Feb 07 2006 Jesse Keating <jkeating@redhat.com> - 3.0.2-31.2
- rebuilt for new gcc4.1 snapshot and glibc changes
* Fri Dec 09 2005 Jesse Keating <jkeating@redhat.com>
- rebuilt
* Wed Mar 16 2005 Nalin Dahyabhai <nalin@redhat.com> 3.0.2-31
- rebuild
* Tue Jun 15 2004 Elliot Lee <sopwith@redhat.com>
- rebuilt
* Tue Mar 02 2004 Elliot Lee <sopwith@redhat.com>
- rebuilt
* Fri Feb 13 2004 Elliot Lee <sopwith@redhat.com>
- rebuilt
* Sun Oct 19 2003 Florian La Roche <Florian.LaRoche@redhat.de>
- add a %%clean specfile target
* Mon Jun 16 2003 Nalin Dahyabhai <nalin@redhat.com> 3.0.2-28
- rebuild
* Wed Jun 04 2003 Elliot Lee <sopwith@redhat.com>
- rebuilt
* Mon Jan 27 2003 Nalin Dahyabhai <nalin@redhat.com> 3.0.2-26
- link libhesiod with libresolv on all platforms
* Wed Jan 22 2003 Tim Powers <timp@redhat.com> 3.0.2-25
- rebuilt
* Fri Jan 10 2003 Phil Knirsch <pknirsch@redhat.com> 3.0.2-24
- Fixed wrong .so name for s390/s390x.
* Fri Jan 10 2003 Phil Knirsch <pknirsch@redhat.com> 3.0.2-23
- Build shared lib correctly on s390 and s390x (with gcc -shared -fPIC).
* Wed Sep 24 2002 Nalin Dahyabhai <nalin@redhat.com> 3.0.2-22
- look harder for res_mkquery() in libresolv
* Wed Aug 21 2002 Nalin Dahyabhai <nalin@redhat.com>
- don't choke on large response packets
* Fri Jun 21 2002 Tim Powers <timp@redhat.com>
- automated rebuild
* Sun May 26 2002 Tim Powers <timp@redhat.com>
- automated rebuild
* Thu May 16 2002 Nalin Dahyabhai <nalin@redhat.com> 3.0.2-19
- rebuild in new environment
* Mon Apr 15 2002 Nalin Dahyabhai <nalin@redhat.com> 3.0.2-18
- add missing post/postun calls to ldconfig
* Wed Feb 20 2002 Nalin Dahyabhai <nalin@redhat.com> 3.0.2-17
- rebuild in new environment
* Wed Jan 09 2002 Tim Powers <timp@redhat.com>
- automated rebuild
* Fri Oct 26 2001 Nalin Dahyabhai <nalin@redhat.com> 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 <nalin@redhat.com> 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 <nalin@redhat.com>
- 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 <nalin@redhat.com>
- 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 <jlkatz@eos.ncsu.edu>
- hesiod-devel requires hesiod (bug #128)
* Thu Sep 14 2000 Jeremy Katz <jlkatz@eos.ncsu.edu>
- remove hesiod man page from hesiod-devel as it conflicts with the one
from bind-devel
* Thu Sep 14 2000 Jeremy Katz <jlkatz@eos.ncsu.edu>
- 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 <jlkatz@eos.ncsu.edu>
- rebuild in new environment
* Thu Mar 16 2000 Jeremy Katz <jlkatz@unity.ncsu.edu>
- rebuild in new environment
* Thu Sep 2 1999 Nalin Dahyabhai <nsdahya1@eos.ncsu.edu>
- removed dependency on nscd
- changed requires: nscd back to caching-nameserver
* Mon May 17 1999 Nalin Dahyabhai <nsdahya1@eos.ncsu.edu>
- 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/*

1
sources Normal file
View file

@ -0,0 +1 @@
89c785d350e75d6628754659ee4583e8 hesiod-3.1.0.tar.gz