From 46061a7783ce90be2369ba3710bdb6ffed2f01cc Mon Sep 17 00:00:00 2001 From: cn Date: Fri, 28 Feb 2020 16:44:27 +0100 Subject: [PATCH] dyndnsd: handle potential nil cases detected by sorbet - including review suggestions from @jgraichen --- lib/dyndnsd.rb | 10 ++++++++-- lib/dyndnsd/database.rb | 2 +- lib/dyndnsd/helper.rb | 2 +- lib/dyndnsd/updater/command_with_bind_zone.rb | 4 ++-- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/dyndnsd.rb b/lib/dyndnsd.rb index aadab3a..93620d9 100755 --- a/lib/dyndnsd.rb +++ b/lib/dyndnsd.rb @@ -96,8 +96,14 @@ module Dyndnsd # drop priviliges as soon as possible # NOTE: first change group than user - Process::Sys.setgid(Etc.getgrnam(config['group']).gid) if config['group'] - Process::Sys.setuid(Etc.getpwnam(config['user']).uid) if config['user'] + if config['group'] + group = Etc.getgrnam(config['group']) + Process::Sys.setgid(group.gid) if group + end + if config['user'] + user = Etc.getpwnam(config['user']) + Process::Sys.setuid(user.uid) if user + end setup_traps diff --git a/lib/dyndnsd/database.rb b/lib/dyndnsd/database.rb index e3a9886..8ba00af 100644 --- a/lib/dyndnsd/database.rb +++ b/lib/dyndnsd/database.rb @@ -14,7 +14,7 @@ module Dyndnsd def load if File.file?(@db_file) - @db = JSON.parse(File.open(@db_file, 'r', &:read)) + @db = JSON.parse(File.read(@db_file, mode: 'r')) else @db = {} end diff --git a/lib/dyndnsd/helper.rb b/lib/dyndnsd/helper.rb index dbf548a..4c762ad 100644 --- a/lib/dyndnsd/helper.rb +++ b/lib/dyndnsd/helper.rb @@ -42,7 +42,7 @@ module Dyndnsd 'error.kind': e.class.to_s, 'error.object': e, message: e.message, - stack: e.backtrace.join("\n") + stack: e.backtrace&.join("\n") || '' ) raise ensure diff --git a/lib/dyndnsd/updater/command_with_bind_zone.rb b/lib/dyndnsd/updater/command_with_bind_zone.rb index 4fb561c..5fbd6a4 100644 --- a/lib/dyndnsd/updater/command_with_bind_zone.rb +++ b/lib/dyndnsd/updater/command_with_bind_zone.rb @@ -11,7 +11,7 @@ module Dyndnsd def update(db) Helper.span('updater_update') do |span| - span.set_tag('dyndnsd.updater.name', self.class.name.split('::').last) + span.set_tag('dyndnsd.updater.name', self.class.name&.split('::')&.last || 'None') # write zone file in bind syntax File.open(@zone_file, 'w') { |f| f.write(@generator.generate(db)) } @@ -21,7 +21,7 @@ module Dyndnsd end # detach so children don't become zombies - Process.detach(pid) + Process.detach(pid) if pid end end end