chiark / gitweb /
@@ -1,3 +1,9 @@
[userv-utils.git] / finger / setprefs
diff --git a/finger/setprefs b/finger/setprefs
new file mode 100755 (executable)
index 0000000..53de506
--- /dev/null
@@ -0,0 +1,29 @@
+#!/usr/bin/perl
+
+use POSIX;
+
+@ARGV==3 or die;
+($prefs_file, $new_list, $new_search) = @ARGV;
+
+$new_list =~ m/^(\-|\+[imtlfn]+)$/ or die;  $new_list= $1;
+$new_search =~ m/^([nuy])$/ or die;  $new_search= $1;
+
+$user= $ENV{'USERV_USER'};  length $user or die;
+
+open N, ">$prefs_file.new" or die $!;
+
+if (open P, $prefs_file) {
+    while (<P>) {
+       die unless m/^(\w+) /;
+       next if $1 eq $user;
+       print N or die $!;
+    }
+    close P or die $!;
+} elsif ($! != &ENOENT) {
+    die $!;
+}
+
+print N "$user $new_list $new_search\n" or die $!;
+close N or die $!;
+
+rename "$prefs_file.new", $prefs_file or die $!;