SVN: nagios-notify/trunk/nagios-notify

glen glen at pld-linux.org
Sat Oct 11 17:00:04 CEST 2008


Author: glen
Date: Sat Oct 11 17:00:04 2008
New Revision: 9899

Modified:
   nagios-notify/trunk/nagios-notify
Log:
- add $(encode_mime_header:CHARSET,DATA)

Modified: nagios-notify/trunk/nagios-notify
==============================================================================
--- nagios-notify/trunk/nagios-notify	(original)
+++ nagios-notify/trunk/nagios-notify	Sat Oct 11 17:00:04 2008
@@ -16,6 +16,16 @@
 template_subst() {
 	local tmpl="$1"
 	awk '
+	# escape string for shell arg
+	function escape_shell_arg(string) {
+		q = sprintf("%c", 39);
+		qq = "\"";
+		s = q qq q qq q;
+		gsub(q, s, string);
+		return q string q
+	}
+
+	# base64 encode a file
 	function base64(file) {
 		cmd = "base64 " file;
 		out = ""
@@ -25,6 +35,24 @@
 		close(cmd);
 		return out;
 	}
+
+	# base64 encode a string
+	function base64_string(data) {
+		# if i knew how to make two way pipes, i would do that here
+		cmd = "echo -n " escape_shell_arg(data) " | base64";
+		out = ""
+		while ((cmd | getline) > 0) {
+			out = out $0;
+		}
+		close(cmd);
+		return out;
+	}
+
+	# encode email header as rfc2047 (using base64 encoding)
+	function encode_mime_header(charset, data) {
+		return "=?" charset "?b?" base64_string(data) "?="
+	}
+
 	{
 		# replace environ variables
 		for (var in ENVIRON) {
@@ -35,14 +63,26 @@
 			}
 		}
 
-		# replace special: base64 handler
+		# $(base64:/path/to/file)
 		if (match($0, /\$\(base64:(.*)\)/)) {
-			file = substr($0, RSTART + 9, RLENGTH - 10);
+			pos = length("$(base64:")
+			file = substr($0, RSTART + pos, RLENGTH - pos - 1);
 			left = substr($0, 0, RSTART);
 			right = substr($0, RSTART + RLENGTH);
 			$0 = left base64(file) right;
 		}
 
+		# $(encode_mime_header:CHARSET,DATA)
+		if (match($0, /\$\(encode_mime_header:([^,]*,.*)\)/)) {
+			pos = length("$(encode_mime_header:")
+			params = substr($0, RSTART + pos, RLENGTH - pos - 1);
+			left = substr($0, 0, RSTART);
+			right = substr($0, RSTART + RLENGTH);
+			charset = substr(params, 1, index(params, ",") - 1)
+			data = substr(params, index(params, ",") + 1)
+			$0 = left encode_mime_header(charset, data) right;
+		}
+
 		# print out
 		print
 	}


More information about the pld-cvs-commit mailing list