]> diplodocus.org Git - nmh/commitdiff
Added etc/rmmproc.messageid, which shows how to try to move
authorDavid Levine <levinedl@acm.org>
Mon, 11 Feb 2013 01:05:37 +0000 (19:05 -0600)
committerDavid Levine <levinedl@acm.org>
Mon, 11 Feb 2013 01:05:37 +0000 (19:05 -0600)
a message or file to a file that's named based on Message-ID.

etc/rmmproc.messageid [new file with mode: 0755]

diff --git a/etc/rmmproc.messageid b/etc/rmmproc.messageid
new file mode 100755 (executable)
index 0000000..3bb7cad
--- /dev/null
@@ -0,0 +1,62 @@
+#! /bin/sh
+##
+ # rmmproc.messageid -- tries to back up a message/file to a file that's
+ #                      named based on Message ID
+ #
+ # This code is Copyright (c) 2013, by the authors of nmh.
+ # See the COPYRIGHT file in the root directory of the nmh
+ # distribution for complete copyright information.
+ #
+ # If called on a message, the current directory is the
+ # message folder and $1 is the message filename.
+ # If called on a file, $1 is the full path to the file.
+ #
+ # The backup directory will be:
+ #   1) If input is a message, the folder of the message.
+ #   2) If input is a file, the directory of the file.
+ #   3) If input is standard input (-), the user's MHPATH directory.
+ #
+ # The backup filename will be:
+ #   1) Message-ID with all / and \ converted to periods.
+ #      Message-IDs should not contain \, but some
+ #      filesystems can't handle them.  Message-IDs should
+ #      be unique, so there should be no need to backup a
+ #      file with the same name, especially if the result of
+ #      malicious action.  If the backup file already
+ #      exists, use 2).
+ #      NOTE: conversion of some characters in the filename
+ #      could result in an unintended name collision.  If
+ #      that is a concern, a program that uses mktemp(3) to
+ #      create a temporary file might be the basis for a
+ #      remedy.
+ #
+ #   2) Concatenation of BACKUP_PREFIX and input filename.
+ #      NOTE: if a file of that name already exists in the
+ #      destination directory, it will be overwritten by the
+ #      mv below.
+ #
+##
+
+if [ "$1" = - ]; then
+    #### Input is stdin; put backup in user's MHPATH directory.
+    dir=`mhparam path`
+    #### If Path is relative, prepend home directory.
+    [ `dirname "$dir"` = . ]  &&  dir="$HOME/$dir"
+else
+    dir=`dirname "$1"`
+fi
+
+#### Extract first Message-Id, remove <>, substitute / and \.
+messageid=`sed -n '
+    /^$/q; /^[Mm][Ee][Ss][Ss][Aa][Gg][Ee]-[Ii][Dd]:/!d
+    s/>.*//; s/.*<//; y#/\\\#..#; p
+    ' "$1"`
+
+if [ "$messageid"  -a  ! -f "$dir/$messageid" ]; then
+    filename="$dir/$messageid"
+else
+    filename="$dir"/`mhparam sbackup``basename "$1"`
+fi
+
+#### If unable to backup the message, exit with status 1.
+mv "$1" "$filename"