Wipe (some) secrets from memory after use
[tinc] / src / meson.build
index af2410d..f84fb4d 100644 (file)
@@ -73,8 +73,11 @@ endif
 check_functions = [
   'asprintf',
   'daemon',
+  'explicit_bzero',
+  'explicit_memset',
   'fchmod',
   'gettimeofday',
+  'memset_s',
   'mlockall',
   'putenv',
   'strsignal',
@@ -106,8 +109,10 @@ src_lib_common = [
   'dropin.c',
   'keys.c',
   'list.c',
+  'logger.c',
   'names.c',
   'netutl.c',
+  'pidfile.c',
   'script.c',
   'splay_tree.c',
   'sptps.c',
@@ -115,7 +120,6 @@ src_lib_common = [
   'utils.c',
   'version.c',
   'xoshiro.c',
-  'logger.c',
 ]
 
 src_tinc = [
@@ -163,6 +167,10 @@ deps_common = []
 deps_tinc = []
 deps_tincd = [cc.find_library('m', required: false)]
 
+if os_name != 'windows'
+  src_lib_common += 'random.c'
+endif
+
 if os_name in ['linux', 'android']
   subdir('linux')
 elif os_name.endswith('bsd') or os_name in ['dragonfly', 'darwin']
@@ -216,8 +224,10 @@ foreach type : check_types
   endif
 endforeach
 
+src_getopt = []
 if not cdata.has('HAVE_GETOPT_H') or not cc.has_function('getopt_long', prefix: have_prefix, args: cc_defs)
-  src_lib_common += ['getopt.c', 'getopt1.c']
+  src_getopt = ['getopt.c', 'getopt1.c']
+  src_lib_common += src_getopt
 endif
 
 if not opt_miniupnpc.disabled()
@@ -328,6 +338,10 @@ endif
 
 subdir(opt_crypto)
 
+if opt_crypto != 'openssl'
+  src_lib_crypto += 'crypto.c'
+endif
+
 if opt_crypto != 'nolegacy'
   src_lib_crypto += ['cipher.c', 'digest.c']
 endif
@@ -403,7 +417,7 @@ exe_tincd = executable(
 
 exe_sptps_test = executable(
   'sptps_test',
-  sources: 'sptps_test.c',
+  sources: [src_getopt, 'sptps_test.c'],
   dependencies: deps_lib_common,
   link_with: lib_common,
   implicit_include_directories: false,
@@ -413,7 +427,7 @@ exe_sptps_test = executable(
 
 exe_sptps_keypair = executable(
   'sptps_keypair',
-  sources: 'sptps_keypair.c',
+  sources: [src_getopt, 'sptps_keypair.c'],
   dependencies: deps_lib_common,
   link_with: lib_common,
   implicit_include_directories: false,