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: [email protected]
>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

Reply via email to