def CreateTgz(Archive, Filelist): """Create a .tgz of the listed files, but take care with ../ files. Return 0 on success, error code on error.""" if not Util.CanWrite(os.environ["HOME"], os.geteuid(), os.getegid(), 0): CgiUtil.TermError("Can't write.", "No write permissions.", "create backup", CgiUtil.FileDetails("home directory", os.environ["HOME"]), "Check file permissions in home directory.") Files = [] Parents = [] for Filename in Filelist: SrcFn = os.path.join(os.environ["HOME"], Filename) if os.path.isfile(SrcFn): if (Filename[:len(Dict["Parent"])] == Dict["Parent"]) and \ (Filename[:len(Dict["Home"])] != Dict["Home"]): try: os.mkdir(os.path.join(os.environ["HOME"], "%(Parent)s")) except OSError: pass NewFilename = "%(Parent)s" + Filename[len(Dict["Parent"]):] DstFn = os.path.join(os.environ["HOME"], NewFilename) Parents.append((SrcFn, DstFn)) os.rename(SrcFn, DstFn) Files.append(NewFilename) else: Files.append(Filename) TarCmd = [PVars[("NoOverride", "WhichTar")], "-C", os.environ["HOME"], "-czf", Archive] + Files try: Util.RunTask(TarCmd) except OSError, ( eno, estr ): CgiUtil.TermError("CreateTgz failed.", "Error: %s (%d)" % (estr, eno), "create backup", " ".join(TarCmd), "Check file permissions in home directory.")
def Show(): "Handle installation." from TMDA import Util # Make a substitution dictionary if os.environ.has_key( "USER" ): user = os.environ["USER"] elif os.environ.has_key( "LOGNAME" ): user = os.environ["LOGNAME"] global Dict Dict = \ { "Base": os.path.abspath(os.environ["TMDA_BASE_DIR"]), "CryptKey": KeyGen(), "Domain": Util.gethostname(), "Home": os.environ["HOME"], "Name": repr(PVars["NAME"]), "Parent": "..", "RealHome": pwd.getpwuid(os.geteuid())[5], "UrlDomain": os.environ["SERVER_NAME"], "User": user, "VPop": PVars[("NoOverride", "VPop")], "VPopBin": PVars[("NoOverride", "VPopBin")] } Dict["ShortUrlDom"] = re.sub("^www\.", "", Dict["UrlDomain"], re.I) Dict["qUser"] = re.sub("\.", ":", Dict["User"]) Match = re.search(".*/([^\./]+\.[^/]+)/[^/]+/?$", Dict["Home"]) if Match: Dict["Domain"] = Match.group(1) # Load the display template if Form["cmd"].value == "conf-example": TemplateFN = "conf-example.html" elif Form["cmd"].value == "faq": TemplateFN = "faq.html" elif Form["cmd"].value == "install": if not Util.CanWrite(os.environ["HOME"]): CgiUtil.TermError("Can't write to home dir.", "No write permissions.", "installing", CgiUtil.FileDetails("home directory", os.environ["HOME"]), "Check file permissions in home directory.") Install() # Does not return. elif Form["cmd"].value == "restore": Restore() # Does not return. elif Form["cmd"].value == "uninstall": if PVars[("NoOverride", "MayInstall")][0].lower() == "n": CgiUtil.TermError("No permission.", "Uninstallation disabled by sysadmin.", "uninstall", "", "Contact system administrator.") if Form.has_key("subcmd"): try: ReleaseAndDelete(Form["release"].value) except Errors.QueueError: pass Uninstall() # Does not return. else: TemplateFN = "uninstall.html" elif Form["cmd"].value == "welcome": TemplateFN = "welcome.html" else: # Have they installed before? if Util.CanRead(os.path.join(os.environ["HOME"], PVars[("NoOverride", "UninstallBackupTGZ")]), os.geteuid(), os.getegid()): TemplateFN = "re-enroll.html" else: TemplateFN = "welcome.html" # Load template T = Template.Template(TemplateFN) # Javascript confirmation? if PVars.has_key(["General", "UseJSConfirm"]) and \ PVars[("General", "UseJSConfirm")] == "Yes": T["OnSubmit"] = 'onSubmit="return JSConfirm()"' else: T["OnSubmit"] = "" # Display template print T