Browse code

Fix to cert utils for mac for compatibility with Openssl 1.1.0+ wherein the X509 structure is now opaque and the name cannot be directly referenced.

Micah Snyder authored on 2019/06/27 06:30:09
Showing 5 changed files
... ...
@@ -28,6 +28,8 @@ if VERSIONSCRIPT
28 28
 libfreshclam_la_LDFLAGS += -Wl,@VERSIONSCRIPTFLAG@,@top_srcdir@/libfreshclam/libfreshclam.map
29 29
 endif
30 30
 
31
+AM_LIBTOOLFLAGS = --tag CXX
32
+
31 33
 EXTRA_DIST = libfreshclam.map
32 34
 
33 35
 include_HEADERS = libfreshclam.h
... ...
@@ -251,7 +251,7 @@ libfreshclam_la_OBJECTS = $(am_libfreshclam_la_OBJECTS)
251 251
 AM_V_lt = $(am__v_lt_@AM_V@)
252 252
 am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
253 253
 am__v_lt_0 = --silent
254
-am__v_lt_1 = 
254
+am__v_lt_1 =
255 255
 libfreshclam_la_LINK = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
256 256
 	$(LIBTOOLFLAGS) --mode=link $(OBJCLD) $(AM_OBJCFLAGS) \
257 257
 	$(OBJCFLAGS) $(libfreshclam_la_LDFLAGS) $(LDFLAGS) -o $@
... ...
@@ -262,11 +262,11 @@ am__v_P_1 = :
262 262
 AM_V_GEN = $(am__v_GEN_@AM_V@)
263 263
 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
264 264
 am__v_GEN_0 = @echo "  GEN     " $@;
265
-am__v_GEN_1 = 
265
+am__v_GEN_1 =
266 266
 AM_V_at = $(am__v_at_@AM_V@)
267 267
 am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
268 268
 am__v_at_0 = @
269
-am__v_at_1 = 
269
+am__v_at_1 =
270 270
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) -I$(top_builddir)/libclammspack
271 271
 depcomp = $(SHELL) $(top_srcdir)/config/depcomp
272 272
 am__depfiles_maybe = depfiles
... ...
@@ -280,7 +280,7 @@ LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
280 280
 AM_V_CC = $(am__v_CC_@AM_V@)
281 281
 am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
282 282
 am__v_CC_0 = @echo "  CC      " $@;
283
-am__v_CC_1 = 
283
+am__v_CC_1 =
284 284
 CCLD = $(CC)
285 285
 LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
286 286
 	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
... ...
@@ -288,7 +288,7 @@ LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
288 288
 AM_V_CCLD = $(am__v_CCLD_@AM_V@)
289 289
 am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
290 290
 am__v_CCLD_0 = @echo "  CCLD    " $@;
291
-am__v_CCLD_1 = 
291
+am__v_CCLD_1 =
292 292
 OBJCCOMPILE = $(OBJC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
293 293
 	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_OBJCFLAGS) $(OBJCFLAGS)
294 294
 LTOBJCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
... ...
@@ -298,7 +298,7 @@ LTOBJCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \
298 298
 AM_V_OBJC = $(am__v_OBJC_@AM_V@)
299 299
 am__v_OBJC_ = $(am__v_OBJC_@AM_DEFAULT_V@)
300 300
 am__v_OBJC_0 = @echo "  OBJC    " $@;
301
-am__v_OBJC_1 = 
301
+am__v_OBJC_1 =
302 302
 OBJCLD = $(OBJC)
303 303
 OBJCLINK = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
304 304
 	--mode=link $(OBJCLD) $(AM_OBJCFLAGS) $(OBJCFLAGS) \
... ...
@@ -306,7 +306,7 @@ OBJCLINK = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
306 306
 AM_V_OBJCLD = $(am__v_OBJCLD_@AM_V@)
307 307
 am__v_OBJCLD_ = $(am__v_OBJCLD_@AM_DEFAULT_V@)
308 308
 am__v_OBJCLD_0 = @echo "  OBJCLD  " $@;
309
-am__v_OBJCLD_1 = 
309
+am__v_OBJCLD_1 =
310 310
 SOURCES = $(libfreshclam_la_SOURCES)
311 311
 DIST_SOURCES = $(am__libfreshclam_la_SOURCES_DIST)
312 312
 am__can_run_installinfo = \
... ...
@@ -588,6 +588,7 @@ libfreshclam_la_LDFLAGS = @CURL_LDFLAGS@ @SSL_LDFLAGS@ @TH_SAFE@ \
588 588
 	@JSON_LDFLAGS@ @ICONV_LDFLAGS@ $(XML_LIBS) -version-info \
589 589
 	@LIBFRESHCLAM_VERSION@ -no-undefined $(am__append_1) \
590 590
 	$(am__append_2)
591
+AM_LIBTOOLFLAGS = --tag CXX
591 592
 EXTRA_DIST = libfreshclam.map
592 593
 include_HEADERS = libfreshclam.h
593 594
 libfreshclam_la_SOURCES = $(top_srcdir)/shared/output.c \
... ...
@@ -675,7 +676,7 @@ clean-libLTLIBRARIES:
675 675
 	  rm -f $${locs}; \
676 676
 	}
677 677
 
678
-libfreshclam.la: $(libfreshclam_la_OBJECTS) $(libfreshclam_la_DEPENDENCIES) $(EXTRA_libfreshclam_la_DEPENDENCIES) 
678
+libfreshclam.la: $(libfreshclam_la_OBJECTS) $(libfreshclam_la_DEPENDENCIES) $(EXTRA_libfreshclam_la_DEPENDENCIES)
679 679
 	$(AM_V_OBJCLD)$(libfreshclam_la_LINK) -rpath $(libdir) $(libfreshclam_la_OBJECTS) $(libfreshclam_la_LIBADD) $(LIBS)
680 680
 
681 681
 mostlyclean-compile:
... ...
@@ -249,7 +249,7 @@ done:
249 249
     return !rc;
250 250
 }
251 251
 
252
-static cl_error_t x509_get_cert_name(X509 *cert, char **name)
252
+cl_error_t x509_get_cert_name(X509 *cert, char **name)
253 253
 {
254 254
     int rc = CL_EMEM;
255 255
 
... ...
@@ -77,4 +77,17 @@ void cert_store_free_cert_list_int(cert_list_t *cert_list);
77 77
  */
78 78
 cl_error_t cert_store_set_trusted_int(X509 **trusted_certs, size_t trusted_cert_count);
79 79
 
80
+/**
81
+ * @brief Get the name from an X509 certificate.
82
+ * Required if OPENSSL_VERSION_NUMBER >= 0x10100000L ( 1.1.0+ )
83
+ * because the X509 structure is now opaque.
84
+ *
85
+ * The name must be free()'d by the caller.
86
+ *
87
+ * @param[in] cert - The cert in question.
88
+ * @param[out] name - The NULL terminated name.
89
+ * @return cl_error_t CL_SUCCESS on success.
90
+ */
91
+cl_error_t x509_get_cert_name(X509 *cert, char **name);
92
+
80 93
 #endif
... ...
@@ -332,17 +332,27 @@ cl_error_t cert_store_load(X509 **trusted_certs, size_t trusted_cert_count)
332 332
                     const unsigned char *der = CFDataGetBytePtr(cert_data);
333 333
                     CFIndex length           = CFDataGetLength(cert_data);
334 334
 
335
+                    char *name = NULL;
335 336
                     X509 *x509 = d2i_X509(NULL, &der, length);
336 337
 
338
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
339
+                    x509_get_cert_name(x509, &name);
340
+#else
341
+                    name = x509->name;
342
+#endif
343
+
337 344
                     if (x509) {
338 345
                         mprintf("*Found %s trusted certificate %s\n",
339 346
                                 kc_info.name,
340
-                                (x509->name ? x509->name : "<no name>"));
347
+                                (name ? name : "<no name>"));
341 348
 
342 349
                         store->system_certs.certificates[store->system_certs.count++] = x509;
343 350
                     } else {
344 351
                         mprintf("!Failed conversion of DER format to X.509\n");
345 352
                     }
353
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
354
+                    free(name);
355
+#endif
346 356
 
347 357
                     CFRelease(cert_data);
348 358
                     cert_data = NULL;