Annotation of /trunk/cyrus-sasl/patches/cyrus-sasl-2.1.26-dont_use_la_files_for_opening_plugins.patch
Parent Directory | Revision Log
Revision 2412 -
(hide 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 | niro | 2412 | --- 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); |