diff options
author | Darren Tucker <dtucker@zip.com.au> | 2015-10-29 10:48:23 +1100 |
---|---|---|
committer | Darren Tucker <dtucker@zip.com.au> | 2015-10-29 10:48:23 +1100 |
commit | 8db134e7f457bcb069ec72bc4ee722e2af557c69 (patch) | |
tree | a0d16eb42cc7d97396504b75163b812468811269 | |
parent | 86c10dbbef6a5800d2431a66cf7f41a954bb62b5 (diff) |
Prevent name collisions with system glob (bz#2463)
Move glob.h from includes.h to the only caller (sftp) and override the
names for the symbols. This prevents name collisions with the system glob
in the case where something other than ssh uses it (eg kerberos). With
jjelen at redhat.com, ok djm@
-rw-r--r-- | defines.h | 7 | ||||
-rw-r--r-- | includes.h | 6 | ||||
-rw-r--r-- | openbsd-compat/glob.c | 1 | ||||
-rw-r--r-- | openbsd-compat/glob.h | 8 | ||||
-rw-r--r-- | openbsd-compat/openbsd-compat.h | 1 | ||||
-rw-r--r-- | sftp-client.h | 6 |
6 files changed, 20 insertions, 9 deletions
@@ -850,4 +850,11 @@ struct winsize { | |||
850 | # endif /* gcc version */ | 850 | # endif /* gcc version */ |
851 | #endif /* __predict_true */ | 851 | #endif /* __predict_true */ |
852 | 852 | ||
853 | #if defined(HAVE_GLOB_H) && defined(GLOB_HAS_ALTDIRFUNC) && \ | ||
854 | defined(GLOB_HAS_GL_MATCHC) && defined(GLOB_HAS_GL_STATV) && \ | ||
855 | defined(HAVE_DECL_GLOB_NOMATCH) && HAVE_DECL_GLOB_NOMATCH != 0 && \ | ||
856 | !defined(BROKEN_GLOB) | ||
857 | # define USE_SYSTEM_GLOB | ||
858 | #endif | ||
859 | |||
853 | #endif /* _DEFINES_H */ | 860 | #endif /* _DEFINES_H */ |
diff --git a/includes.h b/includes.h index 2893a54cd..497a038b2 100644 --- a/includes.h +++ b/includes.h | |||
@@ -32,12 +32,6 @@ | |||
32 | #ifdef HAVE_BSTRING_H | 32 | #ifdef HAVE_BSTRING_H |
33 | # include <bstring.h> | 33 | # include <bstring.h> |
34 | #endif | 34 | #endif |
35 | #if defined(HAVE_GLOB_H) && defined(GLOB_HAS_ALTDIRFUNC) && \ | ||
36 | defined(GLOB_HAS_GL_MATCHC) && defined(GLOB_HAS_GL_STATV) && \ | ||
37 | defined(HAVE_DECL_GLOB_NOMATCH) && HAVE_DECL_GLOB_NOMATCH != 0 && \ | ||
38 | !defined(BROKEN_GLOB) | ||
39 | # include <glob.h> | ||
40 | #endif | ||
41 | #ifdef HAVE_ENDIAN_H | 35 | #ifdef HAVE_ENDIAN_H |
42 | # include <endian.h> | 36 | # include <endian.h> |
43 | #endif | 37 | #endif |
diff --git a/openbsd-compat/glob.c b/openbsd-compat/glob.c index 742b4b954..7c97e67f5 100644 --- a/openbsd-compat/glob.c +++ b/openbsd-compat/glob.c | |||
@@ -59,6 +59,7 @@ | |||
59 | */ | 59 | */ |
60 | 60 | ||
61 | #include "includes.h" | 61 | #include "includes.h" |
62 | #include "glob.h" | ||
62 | 63 | ||
63 | #include <sys/types.h> | 64 | #include <sys/types.h> |
64 | #include <sys/stat.h> | 65 | #include <sys/stat.h> |
diff --git a/openbsd-compat/glob.h b/openbsd-compat/glob.h index f8a7fa5ff..f069a05dc 100644 --- a/openbsd-compat/glob.h +++ b/openbsd-compat/glob.h | |||
@@ -42,11 +42,15 @@ | |||
42 | !defined(HAVE_DECL_GLOB_NOMATCH) || HAVE_DECL_GLOB_NOMATCH == 0 || \ | 42 | !defined(HAVE_DECL_GLOB_NOMATCH) || HAVE_DECL_GLOB_NOMATCH == 0 || \ |
43 | defined(BROKEN_GLOB) | 43 | defined(BROKEN_GLOB) |
44 | 44 | ||
45 | #ifndef _GLOB_H_ | 45 | #ifndef _COMPAT_GLOB_H_ |
46 | #define _GLOB_H_ | 46 | #define _COMPAT_GLOB_H_ |
47 | 47 | ||
48 | #include <sys/stat.h> | 48 | #include <sys/stat.h> |
49 | 49 | ||
50 | # define glob_t _ssh_compat_glob_t | ||
51 | # define glob(a, b, c, d) _ssh__compat_glob(a, b, c, d) | ||
52 | # define globfree(a) _ssh__compat_globfree(a) | ||
53 | |||
50 | struct stat; | 54 | struct stat; |
51 | typedef struct { | 55 | typedef struct { |
52 | int gl_pathc; /* Count of total paths so far. */ | 56 | int gl_pathc; /* Count of total paths so far. */ |
diff --git a/openbsd-compat/openbsd-compat.h b/openbsd-compat/openbsd-compat.h index 1ff7114ef..8cc8a11b7 100644 --- a/openbsd-compat/openbsd-compat.h +++ b/openbsd-compat/openbsd-compat.h | |||
@@ -39,7 +39,6 @@ | |||
39 | /* OpenBSD function replacements */ | 39 | /* OpenBSD function replacements */ |
40 | #include "base64.h" | 40 | #include "base64.h" |
41 | #include "sigact.h" | 41 | #include "sigact.h" |
42 | #include "glob.h" | ||
43 | #include "readpassphrase.h" | 42 | #include "readpassphrase.h" |
44 | #include "vis.h" | 43 | #include "vis.h" |
45 | #include "getrrsetbyname.h" | 44 | #include "getrrsetbyname.h" |
diff --git a/sftp-client.h b/sftp-client.h index f814b07d6..14a3b8182 100644 --- a/sftp-client.h +++ b/sftp-client.h | |||
@@ -21,6 +21,12 @@ | |||
21 | #ifndef _SFTP_CLIENT_H | 21 | #ifndef _SFTP_CLIENT_H |
22 | #define _SFTP_CLIENT_H | 22 | #define _SFTP_CLIENT_H |
23 | 23 | ||
24 | #ifdef USE_SYSTEM_GLOB | ||
25 | # include <glob.h> | ||
26 | #else | ||
27 | # include "openbsd-compat/glob.h" | ||
28 | #endif | ||
29 | |||
24 | typedef struct SFTP_DIRENT SFTP_DIRENT; | 30 | typedef struct SFTP_DIRENT SFTP_DIRENT; |
25 | 31 | ||
26 | struct SFTP_DIRENT { | 32 | struct SFTP_DIRENT { |