#!/usr/bin/perl
use strict;
use warnings;
use IO::File;
use IO::Pipe;
use feature 'switch';

my ($filename, $fh, %conf);

$filename = '/boot/firmware/sysconf.txt';
exit 0 unless -f $filename;

logger('info', "Applying the system configuration settings in $filename");

$fh = IO::File->new($filename, 'r');
while (my $line = $fh->getline) {
    my ($key, $value);
    # Allow for comments, and properly ignore them
    $line =~ s/#.+//;
    if ( ($key, $value) = ($line =~ m/^\s*([^=]+)\s*=\s*(.*)\s*$/)) {
	$key = lc($key);
	if (exists($conf{$key})) {
	    logger('warn',
		   "Repeated configuration key: $key. " .
		   "Overwriting with new value ($value)");
	}
	$conf{$key} = $value;
    }
}

if (my $pass = delete($conf{root_pw})) {
    my $pipe;
    open($pipe, '|-', '/usr/sbin/chpasswd') or die $!;
    print $pipe "root:$pass";
    close($pipe);
}

if (scalar keys %conf) {
    logger('warn', 'Unprocessed keys left in $filename: ' .
	   join(', ', sort keys %conf));
}

exit 0;

sub logger {
    my ($prio, $msg) = @_;
    system('/bin/logger', '-p', "daemon.$prio",
	   '-t', 'rpi-set-sysconf', $msg);
}
