Magellan Linux

Contents of /trunk/cyrus-sasl/patches/cyrus-sasl-2.1.26-dont_use_la_files_for_opening_plugins.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2412 - (show annotations) (download)
Mon Mar 3 14:45:58 2014 UTC (10 years, 1 month 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);