3 # Copyright 2005 Princeton University
5 # autofs(5) executable map for /var/pl_sshd/keys/
17 print >>sys.stderr, msg
20 if len(sys.argv) != 2:
21 print >>sys.stderr, "usage:\n %s <slicename>" % sys.argv[0]
26 (name, passwd, uid, gid, comment, home, sh) = pwd.getpwnam(slice)
28 abort("no such user: " + slice)
30 result = "--bind,-r :"
32 sshdir = home + "/.ssh"
33 keyfile = sshdir + "/authorized_keys"
35 # check whether authorized_keys exists in the real home dir
36 if os.access(keyfile, os.R_OK):
40 # no - look in the vserver
41 # try to get keys from KeySensor
42 sys.stderr.write("Retrieving SSH keys for %s... " % slice)
43 pycurl.global_init(pycurl.GLOBAL_ALL)
45 c.setopt(pycurl.URL, "http://localhost:815/keys?slice=" + slice)
46 out = cStringIO.StringIO()
47 c.setopt(pycurl.WRITEFUNCTION, out.write)
48 c.setopt(pycurl.NOSIGNAL, 1)
49 c.setopt(pycurl.TIMEOUT, 1)
52 rc = c.getinfo(pycurl.HTTP_CODE)
54 abort("HTTP error: " + str(rc))
55 except pycurl.error, ex:
56 if ex[0] == 28: # XXX - pycurl doesn't define error constants
58 abort("curl error: " + ex[1])
59 keydata = out.getvalue()
61 # try to update keyfile
62 vsbase = "/vservers/" + slice
66 if not os.path.isdir(sshdir):
67 os.mkdir(sshdir, 0700)
69 f = file(keyfile, "w")
72 os.chmod(keyfile, 0600)
73 result += vsbase + sshdir
74 print >>sys.stderr, "succeeded."