* 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:
parent
c424711199
commit
448a00f1dc
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=234022
@ -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/
|
||||
|
@ -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
|
||||
|
109
sysutils/e2fsprogs/files/patch-uuid-loop
Normal file
109
sysutils/e2fsprogs/files/patch-uuid-loop
Normal 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)
|
||||
{
|
Loading…
Reference in New Issue
Block a user