On Wed, Aug 03, 2011 at 07:36:27PM +0200, Svante Signell wrote:
>Package: acl
>Version: 2.2.51-3
>Severity: important
>Tags: patch
>User: debian-hurd@lists.debian.org
>Usertags: hurd
>
>Hi,
>
>currently acl does not compile on hurd-i386. The problem is a PATH_MAX
>definition which is not supported on GNU/Hurd. Attached are two patches
>which fixes these issues. First patch is conditioned on __GNU__ and will
>not affect other systems, while the second patch is changing behaviour
>for all systems (and assuming getline is available).
>
>Thanks,
>Svante
I don't have a hurd system and would like to know if acl compiled with
the first patch still works correctly on a hurd system.
>--- acl-2.2.51/setfacl/parse.c.orig 2010-01-22 23:00:28.000000000 +0000
>+++ acl-2.2.51/setfacl/parse.c 2011-08-03 17:03:19.000000000 +0000
>@@ -419,7 +419,13 @@
> bytes for "# file: ". Not a good solution but for now it is the
> best I can do without too much impact on the code. [tw]
> */
>+
>+#ifdef __GNU__
>+ char *linebuf;
>+ size_t dummy = 0;
>+#else
> char linebuf[(4*PATH_MAX)+9];
>+#endif
> char *cp;
> char *p;
> int comments_read = 0;
>@@ -449,9 +455,13 @@
> if (line)
> (*line)++;
>
>+#ifdef __GNU__
>+ if (getline(&linebuf, &dummy, file) == -1)
>+ break;
>+#else
> if (fgets(linebuf, sizeof(linebuf), file) == NULL)
> break;
>-
>+#endif
> comments_read = 1;
>
> p = strrchr(linebuf, '\0');
>@@ -473,7 +483,12 @@
> goto fail;
> *path_p = (char*)malloc(strlen(cp)+1);
> if (!*path_p)
>+ {
>+#ifdef __GNU__
>+ free (linebuf);
>+#endif
> return -1;
>+ }
> strcpy(*path_p, cp);
> }
> } else if (strncmp(cp, "owner:", 6) == 0) {
>@@ -522,13 +537,24 @@
> }
> }
> if (ferror(file))
>+ {
>+#ifdef __GNU__
>+ free (linebuf);
>+#endif
> return -1;
>+ }
>+#ifdef __GNU__
>+ free (linebuf);
>+#endif
> return comments_read;
> fail:
> if (path_p && *path_p) {
> free(*path_p);
> *path_p = NULL;
> }
>+#ifdef __GNU__
>+ free (linebuf);
>+#endif
> return -EINVAL;
> }
>
>--- acl-2.2.51/setfacl/parse.c.orig 2010-01-22 23:00:28.000000000 +0000
>+++ acl-2.2.51/setfacl/parse.c 2011-08-03 17:10:24.000000000 +0000
>@@ -419,7 +419,9 @@
> bytes for "# file: ". Not a good solution but for now it is the
> best I can do without too much impact on the code. [tw]
> */
>- char linebuf[(4*PATH_MAX)+9];
>+
>+ char *linebuf;
>+ size_t dummy = 0;
> char *cp;
> char *p;
> int comments_read = 0;
>@@ -449,9 +451,8 @@
> if (line)
> (*line)++;
>
>- if (fgets(linebuf, sizeof(linebuf), file) == NULL)
>+ if (getline(&linebuf, &dummy, file) == -1)
> break;
>-
> comments_read = 1;
>
> p = strrchr(linebuf, '\0');
>@@ -472,8 +473,10 @@
> if (*path_p)
> goto fail;
> *path_p = (char*)malloc(strlen(cp)+1);
>- if (!*path_p)
>- return -1;
>+ if (!*path_p) {
>+ free (linebuf);
>+ return -1;
>+ }
> strcpy(*path_p, cp);
> }
> } else if (strncmp(cp, "owner:", 6) == 0) {
>@@ -521,14 +524,18 @@
> *flags = f;
> }
> }
>- if (ferror(file))
>- return -1;
>+ if (ferror(file)) {
>+ free (linebuf);
>+ return -1;
>+ }
>+ free (linebuf);
> return comments_read;
> fail:
> if (path_p && *path_p) {
> free(*path_p);
> *path_p = NULL;
> }
>+ free (linebuf);
> return -EINVAL;
> }
>
Attachment:
signature.asc
Description: Digital signature