diff options
-rw-r--r-- | misc/e2fsprogs-libuuid/Makefile | 9 | ||||
-rw-r--r-- | misc/e2fsprogs-libuuid/files/uuidd.in | 8 | ||||
-rw-r--r-- | sysutils/e2fsprogs/files/patch-uuid-loop | 109 |
3 files changed, 121 insertions, 5 deletions
diff --git a/misc/e2fsprogs-libuuid/Makefile b/misc/e2fsprogs-libuuid/Makefile index f30c6ace903b..2b1179ea698b 100644 --- a/misc/e2fsprogs-libuuid/Makefile +++ b/misc/e2fsprogs-libuuid/Makefile @@ -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/ diff --git a/misc/e2fsprogs-libuuid/files/uuidd.in b/misc/e2fsprogs-libuuid/files/uuidd.in index ec933ee21e63..7660ff63122f 100644 --- a/misc/e2fsprogs-libuuid/files/uuidd.in +++ b/misc/e2fsprogs-libuuid/files/uuidd.in @@ -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 diff --git a/sysutils/e2fsprogs/files/patch-uuid-loop b/sysutils/e2fsprogs/files/patch-uuid-loop new file mode 100644 index 000000000000..2c5c7b4c7afe --- /dev/null +++ b/sysutils/e2fsprogs/files/patch-uuid-loop @@ -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) + { |