Contents of /trunk/cyrus-sasl/patches/cyrus-sasl-2.1.26-dont_use_la_files_for_opening_plugins.patch
Parent Directory | Revision Log
Revision 2412 -
(show annotations)
(download)
Mon Mar 3 14:45:58 2014 UTC (10 years, 6 months ago) by niro
File size: 3414 byte(s)
Mon Mar 3 14:45:58 2014 UTC (10 years, 6 months ago) by niro
File size: 3414 byte(s)
-patches for cyrus-sasl-2.1.26
1 | --- a/lib/dlopen.c |
2 | +++ b/lib/dlopen.c |
3 | @@ -247,105 +247,6 @@ static int _sasl_plugin_load(char *plugi |
4 | return result; |
5 | } |
6 | |
7 | -/* this returns the file to actually open. |
8 | - * out should be a buffer of size PATH_MAX |
9 | - * and may be the same as in. */ |
10 | - |
11 | -/* We'll use a static buffer for speed unless someone complains */ |
12 | -#define MAX_LINE 2048 |
13 | - |
14 | -static int _parse_la(const char *prefix, const char *in, char *out) |
15 | -{ |
16 | - FILE *file; |
17 | - size_t length; |
18 | - char line[MAX_LINE]; |
19 | - char *ntmp = NULL; |
20 | - |
21 | - if(!in || !out || !prefix || out == in) return SASL_BADPARAM; |
22 | - |
23 | - /* Set this so we can detect failure */ |
24 | - *out = '\0'; |
25 | - |
26 | - length = strlen(in); |
27 | - |
28 | - if (strcmp(in + (length - strlen(LA_SUFFIX)), LA_SUFFIX)) { |
29 | - if(!strcmp(in + (length - strlen(SO_SUFFIX)),SO_SUFFIX)) { |
30 | - /* check for a .la file */ |
31 | - strcpy(line, prefix); |
32 | - strcat(line, in); |
33 | - length = strlen(line); |
34 | - *(line + (length - strlen(SO_SUFFIX))) = '\0'; |
35 | - strcat(line, LA_SUFFIX); |
36 | - file = fopen(line, "r"); |
37 | - if(file) { |
38 | - /* We'll get it on the .la open */ |
39 | - fclose(file); |
40 | - return SASL_FAIL; |
41 | - } |
42 | - } |
43 | - strcpy(out, prefix); |
44 | - strcat(out, in); |
45 | - return SASL_OK; |
46 | - } |
47 | - |
48 | - strcpy(line, prefix); |
49 | - strcat(line, in); |
50 | - |
51 | - file = fopen(line, "r"); |
52 | - if(!file) { |
53 | - _sasl_log(NULL, SASL_LOG_WARN, |
54 | - "unable to open LA file: %s", line); |
55 | - return SASL_FAIL; |
56 | - } |
57 | - |
58 | - while(!feof(file)) { |
59 | - if(!fgets(line, MAX_LINE, file)) break; |
60 | - if(line[strlen(line) - 1] != '\n') { |
61 | - _sasl_log(NULL, SASL_LOG_WARN, |
62 | - "LA file has too long of a line: %s", in); |
63 | - return SASL_BUFOVER; |
64 | - } |
65 | - if(line[0] == '\n' || line[0] == '#') continue; |
66 | - if(!strncmp(line, "dlname=", sizeof("dlname=") - 1)) { |
67 | - /* We found the line with the name in it */ |
68 | - char *end; |
69 | - char *start; |
70 | - size_t len; |
71 | - end = strrchr(line, '\''); |
72 | - if(!end) continue; |
73 | - start = &line[sizeof("dlname=")-1]; |
74 | - len = strlen(start); |
75 | - if(len > 3 && start[0] == '\'') { |
76 | - ntmp=&start[1]; |
77 | - *end='\0'; |
78 | - /* Do we have dlname="" ? */ |
79 | - if(ntmp == end) { |
80 | - _sasl_log(NULL, SASL_LOG_DEBUG, |
81 | - "dlname is empty in .la file: %s", in); |
82 | - return SASL_FAIL; |
83 | - } |
84 | - strcpy(out, prefix); |
85 | - strcat(out, ntmp); |
86 | - } |
87 | - break; |
88 | - } |
89 | - } |
90 | - if(ferror(file) || feof(file)) { |
91 | - _sasl_log(NULL, SASL_LOG_WARN, |
92 | - "Error reading .la: %s\n", in); |
93 | - fclose(file); |
94 | - return SASL_FAIL; |
95 | - } |
96 | - fclose(file); |
97 | - |
98 | - if(!(*out)) { |
99 | - _sasl_log(NULL, SASL_LOG_WARN, |
100 | - "Could not find a dlname line in .la file: %s", in); |
101 | - return SASL_FAIL; |
102 | - } |
103 | - |
104 | - return SASL_OK; |
105 | -} |
106 | #endif /* DO_DLOPEN */ |
107 | |
108 | /* loads a plugin library */ |
109 | @@ -499,18 +400,18 @@ int _sasl_load_plugins(const add_plugin_ |
110 | if (length + pos>=PATH_MAX) continue; /* too big */ |
111 | |
112 | if (strcmp(dir->d_name + (length - strlen(SO_SUFFIX)), |
113 | - SO_SUFFIX) |
114 | - && strcmp(dir->d_name + (length - strlen(LA_SUFFIX)), |
115 | - LA_SUFFIX)) |
116 | + SO_SUFFIX)) |
117 | continue; |
118 | |
119 | + /* We only use .so files for loading plugins */ |
120 | + |
121 | memcpy(name,dir->d_name,length); |
122 | name[length]='\0'; |
123 | |
124 | - result = _parse_la(prefix, name, tmp); |
125 | - if(result != SASL_OK) |
126 | - continue; |
127 | - |
128 | + /* Create full name with path */ |
129 | + strncpy(tmp, prefix, PATH_MAX); |
130 | + strncat(tmp, name, PATH_MAX); |
131 | + |
132 | /* skip "lib" and cut off suffix -- |
133 | this only need be approximate */ |
134 | strcpy(plugname, name + 3); |