my @transfer = qw(
timestamp:%t:timestamp
-login:%u:text
+login:%m:text
port:$port:int
+auth:%u:text
+host:%h:text
pid:%p:int
perms:%B:text
itemize:%i:text
$login =~ s{^.+/([^/]+)$}{$1};
if ( -d $path && -d "$path/blob" && -f "$path/secrets" ) {
- print "INFO: user $login added\n";
+ my @secrets = map { chomp; $_ } read_file "$path/secrets";
+ my $auth_users = join(', ', map { s/:.+$//; $_ } @secrets );
$rsync_config .= <<__RSYNC_MODULE__;
[$login]
path = $dir/users/$login/blob
- auth users = $login
+ auth users = $auth_users
secrets file = $dir/users/$login/secrets
read only = false
__RSYNC_MODULE__
+ print "INFO: added $login = $auth_users\n";
+
} else {
warn "skipped $login: $!";
}
chomp($pid);
if ( kill 0, $pid ) {
warn "found rsync pid $pid";
+ kill 2, $pid;
+ while ( -e $pid_file ) {
+ warn "waiting for rsync to die...";
+ sleep 1;
+ }
} else {
unlink $pid_file;
}
warn "# reading log output from $log_fifo\n";
open(my $fifo, '<', $log_fifo);
while( my $line = <$fifo> ) {
+ die $line if $line =~ /rsync error:/;
chomp $line;
print $line, $/;
+
if ( $line =~ /transfer-log:(.+)/ ) {
my $transfer = $1;
$transfer =~ s|(\d\d\d\d)/(\d\d)/(\d\d)[-\s](\d\d:\d\d:\d\d)|$1-$2-$3T$4|g;
my ( $yyyy,$mm,$dd,undef,$login,undef ) = split( /[\-T\|]/, $transfer, 6 );
+ my $host = $1 if $login =~ s/\+(.+)//;
my $path = "users/$login/log";
mkdir $path unless -d $path;
print $log "$transfer\n";
close $log;
-
my @v = split(/\|/,$transfer,$#transfer + 1);
my %data;
@data{@transfer_names} = @v ; # FIXME validate?