* misc/e2fsprogs-libuuid:

- bump revision, as we're changing files and fixing a bug even for
  those who had successfully built libuuid before
- patch one more source file to make sure the clock.txt state file
  gets saved to the right directory
- try to run the newly-build uuidd for our self-test (ignoring
  failures, as they are non-fatal)
- (the actual build fix is inherited from the other port)

* sysutils/e2fsprogs:

- add files/patch-uuid-loop to actually fix the "self-test does not
  terminate" bug. What causes the client to see EOF prematurely or the
  server to fail to send a response remains unknown, but we'll fix the
  worse part of the issue: loop on EOF (read returning 0).

PR:		134156
Submitted by:	Matthias Andree <matthias.andree@gmx.de> (maintainer)
This commit is contained in:
Martin Wilke 2009-05-16 22:36:57 +00:00
parent c424711199
commit 448a00f1dc
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=234022
3 changed files with 121 additions and 5 deletions

View File

@ -5,7 +5,7 @@
# $FreeBSD$
#
PORTREVISION= 0
PORTREVISION= 1
CATEGORIES= misc devel
PKGNAMESUFFIX= -libuuid
@ -38,14 +38,17 @@ PKGDIR= ${.CURDIR}
post-patch::
${REINPLACE_CMD} -e 's,/var/lib/libuuid,/var/run/libuuid,g' \
-e 's,/usr/sbin/uuidd,${PREFIX}/sbin/uuidd,' \
${WRKSRC}/lib/uuid/uuidd.h
${WRKSRC}/lib/uuid/*.[ch]
pre-build:
${MKDIR} ${WRKSRC}/lib/uuid/elfshared
# ulimit guards against runaway tests
# failure to launch uuidd is fine (one might be running, or we may lack
# privileges); if it works, it'll quit after 50 seconds
post-build:
cd ${WRKSRC}/misc && ${MAKE} uuidgen uuidgen.1 uuidd uuidd.8
cd ${INSTALL_WRKSRC} && ${MAKE} check
( ulimit -t 5 ; cd ${INSTALL_WRKSRC} && { ../../misc/uuidd -T50 || true ; ${MAKE} check ; } )
post-install:
${INSTALL_PROGRAM} ${WRKSRC}/misc/uuidgen ${PREFIX}/bin/

View File

@ -1,9 +1,13 @@
#!/bin/sh
#
# rcNG script to start uuidd at boot-time on rcNG-enabled systems,
# such as FreeBSD.
# such as FreeBSD. Note: Starting uuidd at boot-time is not strictly
# necessary, the library will - as of 1.41.5 - silently launch an
# instance of uuidd that exits after 300 seconds; for most accurate
# time-based uuids generated from unprivileged user accounts it may be
# useful to run it system-wide.
#
# (C) 2008 by Matthias Andree.
# (C) 2008, 2009 by Matthias Andree.
# Licensed under the modified (= 2-clause) BSD license.
# PROVIDE: uuidd

View File

@ -0,0 +1,109 @@
--- /dev/null
+++ b/lib/read_all.h
@@ -0,0 +1,32 @@
+/*
+ * read_all - a read variant that masks EAGAIN and EINTR.
+ * This function tries hard to make sure to read the complete requested
+ * length, and if it hits EOF while reading, it returns 0.
+ *
+ * Originally written by Theodore Y. Ts'o.
+ * Factored out from misc/uuidd.c and lib/uuid/gen_uuid.c
+ * and bugfixed by Matthias Andree, 2009.
+ */
+
+ssize_t read_all(int fd, char *buf, size_t count)
+{
+ ssize_t ret;
+ ssize_t c = 0;
+
+ memset(buf, 0, count);
+ while (count > 0) {
+ ret = read(fd, buf, count);
+ if (ret == -1) {
+ if ((errno == EAGAIN) || (errno == EINTR))
+ continue;
+ return -1;
+ }
+ if (ret == 0) {
+ return c;
+ }
+ count -= ret;
+ buf += ret;
+ c += ret;
+ }
+ return c;
+}
--- a/lib/uuid/Makefile.in
+++ b/lib/uuid/Makefile.in
@@ -190,7 +190,7 @@ clear.o: $(srcdir)/clear.c $(srcdir)/uuidP.h $(srcdir)/uuid.h
compare.o: $(srcdir)/compare.c $(srcdir)/uuidP.h $(srcdir)/uuid.h
copy.o: $(srcdir)/copy.c $(srcdir)/uuidP.h $(srcdir)/uuid.h
gen_uuid.o: $(srcdir)/gen_uuid.c $(srcdir)/uuidP.h $(srcdir)/uuid.h \
- $(srcdir)/uuidd.h
+ $(srcdir)/uuidd.h $(top_srcdir)/lib/read_all.h
isnull.o: $(srcdir)/isnull.c $(srcdir)/uuidP.h $(srcdir)/uuid.h
pack.o: $(srcdir)/pack.c $(srcdir)/uuidP.h $(srcdir)/uuid.h
parse.o: $(srcdir)/parse.c $(srcdir)/uuidP.h $(srcdir)/uuid.h
--- a/lib/uuid/gen_uuid.c
+++ b/lib/uuid/gen_uuid.c
@@ -415,25 +415,11 @@ try_again:
return 0;
}
-static ssize_t read_all(int fd, char *buf, size_t count)
-{
- ssize_t ret;
- ssize_t c = 0;
-
- memset(buf, 0, count);
- while (count > 0) {
- ret = read(fd, buf, count);
- if (ret < 0) {
- if ((errno == EAGAIN) || (errno == EINTR))
- continue;
- return -1;
- }
- count -= ret;
- buf += ret;
- c += ret;
- }
- return c;
-}
+/*
+ * Import read_all function and make it static.
+ */
+static
+#include "read_all.h"
/*
* Close all file descriptors
--- a/misc/uuidd.c
+++ b/misc/uuidd.c
@@ -85,25 +85,8 @@ static void create_daemon(void)
die("setreuid");
}
-static int read_all(int fd, char *buf, size_t count)
-{
- ssize_t ret;
- int c = 0;
-
- memset(buf, 0, count);
- while (count > 0) {
- ret = read(fd, buf, count);
- if (ret < 0) {
- if ((errno == EAGAIN) || (errno == EINTR))
- continue;
- return -1;
- }
- count -= ret;
- buf += ret;
- c += ret;
- }
- return c;
-}
+static
+#include "read_all.h"
static int write_all(int fd, char *buf, size_t count)
{