Update of /cvsroot/hcoop/domtool2/src/tail In directory sc8-pr-cvs17.sourceforge.net:/tmp/cvs-serv3174/src/tail
Added Files: tail.mlb tail.sml Log Message: domtool-tail --- NEW FILE: tail.sml --- (* HCoop Domtool (http://hcoop.sourceforge.net/) * Copyright (c) 2008, Adam Chlipala * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. *) (* Tailing Apache log files (locally) that you are allowed to see *) fun hostname () = let val inf = TextIO.openIn "/etc/hostname" in case TextIO.inputLine inf of NONE => (TextIO.closeIn inf; raise Fail "No line in /etc/hostname") | SOME line => (TextIO.closeIn inf; String.substring (line, 0, size line - 1)) end fun main args = let val (f, args) = foldl (fn (arg, (f, args)) => case arg of "-f" => (true, args) | _ => (f, arg :: args)) (false, []) args val args = rev args in case args of [vhost] => let val uid = Posix.ProcEnv.getuid () val uname = Posix.SysDB.Passwd.name (Posix.SysDB.getpwuid uid) val proc = Unix.execute ("/usr/local/bin/domtool-admin-sudo-noisy", ["perms", uname]) val inf = Unix.textInstreamOf proc fun allowed () = case TextIO.inputLine inf of NONE => [] | SOME line => case String.tokens Char.isSpace line of "domain:" :: domains => domains | _ => allowed () val domains = allowed () fun inDomains d = List.exists (fn s => s = d) domains fun checker pieces = case pieces of [] => false | _ :: pieces => inDomains (String.concatWith "." pieces) orelse checker pieces val tailArgs = ["/var/log/apache2/user/" ^ String.substring (uname, 0, 1) ^ "/" ^ String.substring (uname, 0, 2) ^ "/" ^ uname ^ "/apache/log/" ^ hostname () ^ "/" ^ vhost] val tailArgs = if f then "-f" :: tailArgs else tailArgs in ignore (Unix.reap proc); if inDomains vhost orelse checker (String.fields (fn ch => ch = #".") vhost) then Posix.Process.exec ("/usr/bin/tail", "/usr/bin/tail" :: tailArgs) else (print "You're not authorized to view the logs for that vhost.\n"; OS.Process.exit OS.Process.failure) end | _ => (print "Invalid arguments\n"; OS.Process.exit OS.Process.failure) end val () = main (CommandLine.arguments ()) --- NEW FILE: tail.mlb --- $(SML_LIB)/basis/basis.mlb tail.sml ------------------------------------------------------------------------- This SF.Net email is sponsored by the Moblin Your Move Developer's challenge Build the coolest Linux based applications with Moblin SDK & win great prizes Grand prize is a trip for two to an Open Source event anywhere in the world http://moblin-contest.org/redirect.php?banner_id=100&url=/ _______________________________________________ hcoop-cvs mailing list hcoop-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hcoop-cvs