Sat, 24 Mar 2012 21:40:49 +0100
Introduce many changes to the buildconf and source code including:
(01) clean up, update, and partially update default config files,
(02) seems that Melware is unable to perform release engineering so
update chan_capi to new daily snapshot to solve echo problems,
(03) correct Asterisk inadequate hard coded gmime version check,
(04) force postgresql pthreads linkage to solve build problem,
(05) remove buggy hard coded LibXML configure definitions,
(06) remove local architecture specification to allow GCC
internal logic to determine proper CPU type instead,
(07) remove vendor sound install target causing uncontrolled
downloads and non RPM managed file installation,
(08) solve long outstanding bug in tcptls causing Asterisk
to ignore any intermediate CA certificate signatures,
(09) back out Digium engineering team's bright idea of replacing the
very portable and pervasive POSIX rand(1) with ast_random(), and
then not even implementing it causing all references to fail in
platforms not providing the very new POSIX.1-2008 mkdtemp(3)
function only distributed by BSD and some Linux,
(10) withdraw advanced linker symbol manipulations from SVR5 builds
until either Binutils supports hybrid versioned and anonymous
linker scripts or GCC stops hard coding versioned linker scripts,
(11) correct missing library linkage, some tailored to a specific OS,
(12) remove outdated logic for the no longer distributed gmime-config(1),
(13) remove local gmime buildconf hacks now that Asterisk has corrected
their own build configuration to almost portably support gmime,
(14) solve build problems relating to undetected LibXML paths,
(15) correct erroneous out of tree include definitions,
(16) improve some variable and comment naming,
(17) simplify sound language path hierarchy creation,
and correct australian english installation logic.
1 Index: main.c
2 diff -Nau main.c.orig main.c
3 --- main.c.orig 2012-03-21.orig 10:29:31.458420799 +0100
4 +++ main.c 2012-03-21 10:30:52.034994020 +0100
5 @@ -1025,6 +1025,10 @@
6 ret=-1;
7 my_argc=argc; my_argv=argv;
9 + /* if (!log_stderr), that's not usable yet! '/
10 + /* ...so unconditionally log to syslog for now */
11 + openlog(argv[0], LOG_PID|LOG_CONS, log_facility);
12 +
13 /*init pkg mallocs (before parsing cfg or cmd line !)*/
14 if (init_pkg_mallocs()==-1)
15 goto error00;
16 @@ -1357,6 +1361,11 @@
18 /* init_daemon? */
19 if (!dont_fork){
20 + /* shortly after main() we called openlog(3) to log */
21 + /* the initialization, but since daemonize() has its */
22 + /* own syslog(3) handling, we need to close the log first */
23 + closelog(); /* close the initialization logging logic */
24 +
25 if ( daemonize((log_name==0)?argv[0]:log_name, &own_pgid) <0 )
26 goto error;
27 }
28 Index: Makefile.defs
29 diff -Nau Makefile.defs.orig Makefile.defs
30 --- Makefile.defs.orig 2012-03-21.orig 10:29:31.252995930 +0100
31 +++ Makefile.defs 2012-03-21 10:30:52.038327356 +0100
32 @@ -220,7 +220,7 @@
33 else
34 doc-dir = doc/$(MAIN_NAME)/
35 man-dir = man/
36 - data-dir = $(MAIN_NAME)/
37 + data-dir = share/$(MAIN_NAME)/
38 LOCALBASE ?= $(SYSBASE)/local
39 endif
40 endif
41 @@ -1432,6 +1432,10 @@
42 LIBS+= -lsctp
43 endif
45 +#conditionally add libfsl
46 +LDFLAGS += -L$(prefix)/lib
47 +LIBS += -lfsl
48 +
49 ifneq ($(found_lock_method), yes)
50 $(warning No locking method found so far, trying SYS V sems)
51 DEFS+= -DUSE_SYSV_SEM # try sys v sems
52 Index: scripts/opensipsctl.8
53 diff -Nau scripts/opensipsctl.8.orig scripts/opensipsctl.8
54 --- scripts/opensipsctl.8.orig 2012-03-21.orig 10:29:31.357825870 +0100
55 +++ scripts/opensipsctl.8 2012-03-21 10:30:52.039349015 +0100
56 @@ -20,8 +20,6 @@
58 .SH FILES
59 .PD 0
60 -.I /etc/opensips/.opensipsctlrc
61 -.br
62 .I /usr/local/etc/opensips/.opensipsctlrc
63 .br
64 .I ~/.opensipsctlrc
65 Index: scripts/osipsconsole
66 diff -Nau scripts/osipsconsole.orig scripts/osipsconsole
67 --- scripts/osipsconsole.orig 2012-03-21.orig 10:29:31.335460757 +0100
68 +++ scripts/osipsconsole 2012-03-21 10:30:52.050666821 +0100
69 @@ -30,7 +30,6 @@
70 use Term::ReadLine;
71 use DBI;
72 use POSIX;
73 -use Frontier::RPC2;
74 use IO::Socket;
75 use Socket;
76 #use Net::IP;
77 @@ -378,6 +377,12 @@
78 }
79 }
81 + if ( $MD5 eq "" ) {
82 + if ( $arr[0] =~ /^\s*MD5/ ) {
83 + $MD5 = $arr[1];
84 + }
85 + }
86 +
87 if ( $AWK eq "" ) {
88 if ( $arr[0] =~ /^\s*AWK/ ) {
89 $AWK = $arr[1];
90 Index: modules/permissions/parse_config.c
91 diff -Nau modules/permissions/parse_config.c.orig modules/permissions/parse_config.c
92 --- modules/permissions/parse_config.c.orig 2012-03-21.orig 10:29:32.047580003 +0100
93 +++ modules/permissions/parse_config.c 2012-03-21 10:30:52.052696686 +0100
94 @@ -114,8 +114,11 @@
95 except = strstr(str, " EXCEPT ");
96 if (except) {
97 /* exception found */
98 - strncpy(str2, str, except-str);
99 - str2[except-str] = '\0';
100 + int l = except - str;
101 + if (l > sizeof(str2) - 1)
102 + l = sizeof(str2) - 1;
103 + strncpy(str2, str, l);
104 + str2[l] = '\0';
105 /* except+8 points to the exception */
106 if (parse_expression_list(except+8, e_exceptions)) {
107 /* error */
108 @@ -124,7 +127,8 @@
109 }
110 } else {
111 /* no exception */
112 - strcpy(str2, str);
113 + strncpy(str2, str, sizeof(str2)-1);
114 + str2[sizeof(str2)-1] = '\0';
115 *e_exceptions = NULL;
116 }
118 Index: parser/sdp/sdp_helpr_funcs.c
119 diff -Nau parser/sdp/sdp_helpr_funcs.c.orig parser/sdp/sdp_helpr_funcs.c
120 --- parser/sdp/sdp_helpr_funcs.c.orig 2012-03-21.orig 10:29:31.444187545 +0100
121 +++ parser/sdp/sdp_helpr_funcs.c 2012-03-21 10:30:52.057616045 +0100
122 @@ -396,7 +396,7 @@
124 cp1 = NULL;
125 for (cp = body->s; (len = body->s + body->len - cp) > 0;) {
126 - cp1 = (char*)ser_memmem(cp, line, len, 2);
127 + cp1 = (char*)ser_memmem(cp, line, len, strlen(line));
128 if (cp1 == NULL || cp1[-1] == '\n' || cp1[-1] == '\r')
129 break;
130 cp = cp1 + 2;
131 Index: modules/nathelper/nathelper.c
132 diff -Nau modules/nathelper/nathelper.c.orig modules/nathelper/nathelper.c
133 --- modules/nathelper/nathelper.c.orig 2012-03-21.orig 10:29:31.795178267 +0100
134 +++ modules/nathelper/nathelper.c 2012-03-21 10:30:52.055610362 +0100
135 @@ -289,6 +289,9 @@
136 return 0;
137 }
139 +/* MSvB macros */
140 +#define OPENSIPS_NOOP ((void)0)
141 +
145 @@ -813,6 +816,7 @@
146 #define FIX_MEDIP 0x02
147 #define ADD_ANORTPPROXY 0x04
148 #define FIX_ORGIP 0x08
149 +#define FIX_RTCPIP 0x10
151 #define ADIRECTION "a=direction:active"
152 #define ADIRECTION_LEN (sizeof(ADIRECTION) - 1)
153 @@ -829,7 +833,9 @@
154 {
155 char *buf;
156 int offset;
157 + int binlump;
158 struct lump* anchor;
159 + struct lump* templump;
160 str omip, nip, oip;
162 /* check that updating mediaip is really necessary */
163 @@ -860,7 +866,19 @@
164 memcpy(buf, CRLF, CRLF_LEN);
165 memcpy(buf + CRLF_LEN, omip.s, omip.len);
166 memcpy(buf + CRLF_LEN + omip.len, oldip->s, oldip->len);
167 - if (insert_new_lump_after(anchor, buf,
168 +
169 + /* if the oldmediaip string is already */
170 + /* in the body then don't add it again */
171 + binlump = 0;
172 + for (templump = msg->body_lumps; templump; templump = templump->next)
173 + if (templump->op == LUMP_ADD && strstr(templump->u.value, buf))
174 + binlump = 1;
175 + for (templump = msg->add_rm; templump; templump = templump->next)
176 + if (templump->op == LUMP_ADD && strstr(templump->u.value, buf))
177 + binlump = 1;
178 + if (strstr(body->s, buf) || binlump)
179 + pkg_free(buf);
180 + else if (insert_new_lump_after(anchor, buf,
181 omip.len + oldip->len + CRLF_LEN, 0) == NULL) {
182 LM_ERR("insert_new_lump_after failed\n");
183 pkg_free(buf);
184 @@ -1046,6 +1064,12 @@
185 p= p->next;
186 }
188 + if (level & FIX_RTCPIP) {
189 + /* Iterate all a=rtcp: and replace ips in them. */
190 + if (replace_sdp_ip(msg, &body, "a=rtcp:", str2?&ip:0)==-1)
191 + return -1;
192 + }
193 +
194 return 1;
195 }