#! /usr/bin/gawk -f # Nagios / notify-sms-cgi - Notifications via SMS CGI # Copyright (C) 2007,2008,2009,2010,2011 Matous Jan Fialka # Released under the terms of The MIT License # TODO: url_encode: add missing ASCII Control characters as well # TODO: url_encode: replace non-ASCII 0x80-0xff with 0x20 function url_encode(text) { gsub(/%/, "%25", text); # MUST BE FIRST!!! # ASCII Control characters gsub(/\t/, "%09", text); gsub(/\v/, "%0B", text); gsub(/\f/, "%0C", text); gsub(/\r/, "%0D", text); gsub(/\n/, "%0A", text); # Reserved characters gsub(/\$/, "%24", text); gsub(/&/, "%26", text); gsub(/\+/, "%2B", text); gsub(/,/, "%2C", text); gsub(/\//, "%2F", text); gsub(/:/, "%3A", text); gsub(/;/, "%3B", text); gsub(/=/, "%3D", text); gsub(/\?/, "%3F", text); gsub(/@/, "%40", text); # Unsafe characters gsub(/ /, "%20", text); gsub(/"/, "%22", text); gsub(//, "%3E", text); gsub(/#/, "%23", text); gsub(/{/, "%7B", text); gsub(/}/, "%7D", text); gsub(/\|/, "%7C", text); gsub(/\\/, "%5C", text); gsub(/\^/, "%5E", text); gsub(/~/, "%7E", text); gsub(/\[/, "%5B", text); gsub(/\]/, "%5D", text); gsub(/`/, "%60", text); return text; } BEGIN { if(ARGC != 7) { print "args: "; exit(1) } host = ARGV[1]; port = ARGV[2]; user = ARGV[3]; pass = ARGV[4]; teln = ARGV[5]; text = url_encode(ARGV[6]); service = "/inet/tcp/0/" host "/" port "/"; request = "/cgi-bin/sendsms?username=" user "&password=" pass "&to=" teln "&text=" text printf "GET %s HTTP/1.0\r\n\r\n", request |& service; close(service); exit(0); }