[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Problem with 'glob' running under FreeBSD 4.3
Thomas Nystrom <thn@saeab.se> writes:
> Hello!
Hi.
> I have found a problem with the use of the function 'glob' in
> Heimdal/ftpd
> running on a FreeBSD 4.3 system:
>
> The defined name GLOB_LIMIT is an errorcode in the FreeBSD
> implementation
> of glob (with the value -3) but the Heimdal ftpd uses this name as a
> flag
> to the glob-function. In the Heimdal roken version of glob this is a
> flag
> to glob limiting memory usage. The FreeBSD version of glob fails when it
> gets the created flags (the ftpd simply crashes with a segmentation
> fault).
>
> By simply removing the GLOB_LIMIT from the flags seems to solve the
> problem.
Thanks for noticing this. The problem turns out to be that NetBSD, OpenBSD,
and FreeBSD adding a limiting flag to glob() at the same time but the
FreeBSD one was named GLOB_MAXPATH instead of GLOB_LIMIT. But
GLOB_LIMIT is the name of the error code in FreeBSD, and therefore
the test `works'.
I've applied the patch below, which should make this work.
/assar
Index: cf/broken-glob.m4
===================================================================
RCS file: /afs/pdc.kth.se/src/packages/kth-krb/SourceRepository/aux/broken-glob.m4,v
retrieving revision 1.3
diff -u -w -r1.3 broken-glob.m4
--- cf/broken-glob.m4 2001/03/26 11:40:24 1.3
+++ cf/broken-glob.m4 2001/06/19 09:07:50
@@ -8,7 +8,13 @@
AC_TRY_LINK([
#include <stdio.h>
#include <glob.h>],[
-glob(NULL, GLOB_BRACE|GLOB_NOCHECK|GLOB_QUOTE|GLOB_TILDE|GLOB_LIMIT,
+glob(NULL, GLOB_BRACE|GLOB_NOCHECK|GLOB_QUOTE|GLOB_TILDE|
+#ifdef GLOB_MAXPATH
+GLOB_MAXPATH
+#else
+GLOB_LIMIT
+#endif
+,
NULL, NULL);
],:,ac_cv_func_glob_working=no,:))
Index: appl/ftp/ftpd/ftpd.c
===================================================================
RCS file: /afs/pdc.kth.se/src/packages/kth-krb/SourceRepository/appl/ftp/ftpd/ftpd.c,v
retrieving revision 1.157
diff -u -w -r1.157 ftpd.c
--- appl/ftp/ftpd/ftpd.c 2001/04/19 14:41:29 1.157
+++ appl/ftp/ftpd/ftpd.c 2001/06/19 09:07:50
@@ -2165,7 +2165,13 @@
char buf[MaxPathLen];
if (strpbrk(whichf, "~{[*?") != NULL) {
- int flags = GLOB_BRACE|GLOB_NOCHECK|GLOB_QUOTE|GLOB_TILDE|GLOB_LIMIT;
+ int flags = GLOB_BRACE|GLOB_NOCHECK|GLOB_QUOTE|GLOB_TILDE|
+#ifdef GLOB_MAXPATH
+ GLOB_MAXPATH
+#else
+ GLOB_LIMIT
+#endif
+ ;
memset(&gl, 0, sizeof(gl));
freeglob = 1;
Index: appl/ftp/ftpd/popen.c
===================================================================
RCS file: /afs/pdc.kth.se/src/packages/kth-krb/SourceRepository/appl/ftp/ftpd/popen.c,v
retrieving revision 1.24
diff -u -w -r1.24 popen.c
--- appl/ftp/ftpd/popen.c 2001/03/26 11:41:02 1.24
+++ appl/ftp/ftpd/popen.c 2001/06/19 09:07:50
@@ -139,7 +139,13 @@
for (gargc = argc = 1; argv[argc] && gargc < MAXGLOBS - 1; argc++) {
glob_t gl;
int flags = GLOB_BRACE|GLOB_NOCHECK|GLOB_QUOTE|GLOB_TILDE
- | GLOB_LIMIT;
+ |
+#ifdef GLOB_MAXPATH
+ GLOB_MAXPATH
+#else
+ GLOB_LIMIT
+#endif
+ ;
memset(&gl, 0, sizeof(gl));
if (no_glob || glob(argv[argc], flags, NULL, &gl))