summaryrefslogtreecommitdiff
path: root/Build/source/utils/dialog/dialog-1.1-20080819/samples/copifuncs/copi.ifman2
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/utils/dialog/dialog-1.1-20080819/samples/copifuncs/copi.ifman2')
-rwxr-xr-xBuild/source/utils/dialog/dialog-1.1-20080819/samples/copifuncs/copi.ifman2137
1 files changed, 137 insertions, 0 deletions
diff --git a/Build/source/utils/dialog/dialog-1.1-20080819/samples/copifuncs/copi.ifman2 b/Build/source/utils/dialog/dialog-1.1-20080819/samples/copifuncs/copi.ifman2
new file mode 100755
index 00000000000..0b6dbb77ded
--- /dev/null
+++ b/Build/source/utils/dialog/dialog-1.1-20080819/samples/copifuncs/copi.ifman2
@@ -0,0 +1,137 @@
+if ( getpwuid($<) ne $ifowner ) { print "You must be owner of ifmail\n"; exit 1; }
+
+if ( (@ARGV < 3) || $ARGV[0] eq "-?" || $ARGV[0] eq "-h" ) {
+ &usage;
+}
+
+$ARGV[0] =~ tr/A-Z/a-z/;
+$ARGV[3] =~ tr/A-Z/a-z/;
+
+&parsecfg;
+
+if ( $logfile ne "" ) {
+ open(LOG, ">>".$logfile) || die "Can't open logfile";
+}
+
+if (substr($ARGV[1], 0, 1) ne "/") {
+ $cwd=`pwd`;
+ chop $cwd;
+ $ARGV[1] = $cwd."/".$ARGV[1];
+}
+
+if ($ARGV[3] eq "" || $ARGV[3] eq "normal") {
+ $flavour = 'f';
+} elsif ($ARGV[3] eq "crash") {
+ $flavour = 'c';
+} elsif ($ARGV[3] eq "hold") {
+ $flavour = 'h';
+} else {
+ print "Unknown flavour, assuming normal\n";
+ $flavour = 'f';
+}
+
+if ($ARGV[0] eq "send") {
+ &attach($ARGV[1], $ARGV[2]);
+} elsif ($ARGV[0] eq "get") {
+ &request($ARGV[1], $ARGV[2]);
+} else {
+ print "Unknown command, try ifman -h\n";
+ exit 1;
+}
+
+close(LOG);
+
+exit 0;
+
+#######################################################################
+
+sub attach {
+ local($fspec, $address) = @_;
+
+ $floname = &resolve($address);
+
+ open(FLO, ">>".$outbound."/".$floname) || die "Can't open flo-file $outbound/$floname";
+ open(FIND, "find $fspec -print |") || die "Can't generate list of files";
+
+ if ( eof(FIND) ) {
+ print "No matching files, nothing to send\n";
+ exit 1;
+ }
+
+ while (<FIND>) {
+
+ chop;
+ $datestamp = `date \"+%D %T\"`;
+ chop $datestamp;
+ printf LOG "%s %s %s\n", $datestamp, $$, "ifman: sending $_ to $address";
+ printf FLO "%s\n", $_;
+ }
+
+ close(FLO);
+ close(FIND);
+}
+
+sub request {
+ local($fspec, $address) = @_;
+
+ $reqname = &resolve($address);
+
+ $reqname =~ s/\.[fch]lo/\.req/;
+
+ open(REQ, ">>".$outbound."/".$reqname) || die "Can't open req-file";
+
+ $datestamp = `date \"+%D %T\"`;
+ chop $datestamp;
+ printf LOG "%s %s %s\n", $datestamp, $$, "ifman: requesting $fspec from $address";
+ printf REQ "%s\n", $fspec;
+
+ close(REQ);
+}
+
+sub resolve {
+ local($addr) = @_;
+
+ if ( index($addr, ":") >=0 ) {
+ print "I cannot resolve addresses with zones!\n";
+ exit 1;
+ } elsif ( index($addr, "/") == -1 ) {
+ print "Not a valid address!\n";
+ exit 1;
+ }
+
+ ($net, $node, $point) = split(/\/|\./, $addr);
+
+ if ( defined $point ) {
+ $pointdir = sprintf("%04x%04x.pnt", $net, $node);
+ if ( ! -e $outbound."/".$pointdir ) {
+ mkdir ($outbound."/".$pointdir, 0755) || die "Can't create point directory";
+ }
+ $flo = sprintf("0000%04x.%01slo", $point, $flavour);
+ return $pointdir."/".$flo;
+ } else {
+ $flo = sprintf("%04x%04x.%01slo", $net, $node, $flavour);
+ return $flo;
+ }
+}
+
+sub usage {
+ print "ifmail manager script\n";
+ print "usage: ifman <cmd> <filespec> <address> [flavour]\n";
+ print " commands: send, get\n";
+ print " flavours: normal, crash, hold. Default is normal.\n";
+ print "Only 2d addresses with points are supported - no zones!\n";
+ exit 1;
+}
+
+sub parsecfg {
+ open(CFG, $cfgfile) || die "Can't open ifmail config file";
+
+ while (<CFG>) {
+ chop;
+ if (/^#/) { next; }
+ if (/^outbound\s+(\S+)/) { $outbound = $1; }
+ if (/^logfile\s+(\S+)/) { $logfile = $1; }
+ }
+
+ close(CFG);
+}