Files
munki/code/server/getmanifest.py
Greg Neagle 42cccf24c1 Replaced catalogs examples with manifest examples.
Replaced catalogitems examples with pkginfo examples.
Updated getmanifest.py to refer to manifests directory instead of catalogs.

git-svn-id: http://munki.googlecode.com/svn/trunk@62 a4e17f2e-e282-11dd-95e1-755cbddbdd66
2009-05-11 20:02:55 +00:00

78 lines
2.3 KiB
Python

#!/usr/bin/env python
# encoding: utf-8
# Copyright 2009 Greg Neagle.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
getmanifest.py
Created by Greg Neagle on 2008-10-30.
A simple CGI. Returns a text file of the same name
as the host, or as the arbitrary string passed to it:
http://webserver/cgi-bin/getmanifest.py?arbitrarystring
arbitrarystring could be the hostname, a UUID, a username...
This could be extended to do wildcard matching, or to
read another file that mapped hostnames/strings to catalog
files
"""
import os
import socket
import sys
import cgi
import time
hostname = ""
if 'QUERY_STRING' in os.environ:
hostname = os.environ['QUERY_STRING']
if hostname == "":
ip = os.environ['HTTP_PC_REMOTE_ADDR']
if ip == "":
ip = os.environ['REMOTE_ADDR']
try:
lookup = socket.gethostbyaddr(ip)
hostname = lookup[0]
except:
hostname = ip
# the manifestdir is a local path to wherever you keep the master catalogs;
# must be readable by the webserver process
manifestdir = "/Library/WebServer/Documents/repo/manifests"
manifest = os.path.join(manifestdir, hostname)
if os.path.exists(manifest):
statinfo = os.stat(manifest)
modtime = statinfo.st_mtime
inode = statinfo.st_ino
size = statinfo.st_size
print "Content-type: text/plain"
print "Content-length: %s" % size
print "Last-modified:", time.strftime("%a, %d %b %Y %H:%M:%S GMT",time.gmtime(modtime))
# Generate ETag the same way Apache does on OS X...
print "ETag:", '"%s-%s-%s"' % (hex(int(inode))[2:], hex(int(size))[2:], hex(int(modtime))[2:])
print
f = open(manifest, mode='r', buffering=1)
if f:
for line in f.readlines():
print line.rstrip('\n')
f.close()
else:
print "Content-type: text/plain"
print "Content-length: 0"
print