def render_POST(self, req): data = req.args['file'][0] print "[filename req.args]", req.args['filename'][0] filename = mbasename(req.args['filename'][0]) print "[filename]", filename if not filename.endswith(".ipk"): return self.res % (_("wrong filetype!") ,_("Close"), _("Add")) if not data: req.setResponseCode(http.OK) return self.res % ( _("filesize was 0, not uploaded") , _("Close"), _("Add") ) fd,fn = mkstemp(dir = "/tmp/") cnt = os_write(fd, data) os_close(fd) os_chmod(fn, 0755) if cnt <= 0: # well, actually we should check against len(data) but lets assume we fail big time or not at all try: os_unlink(fn) except OSError, oe: pass req.setResponseCode(http.OK) return self.res % (_("error writing to disk, not uploaded"),_("Close"), _("Add"))
def purgeDirs(path=os_curdir, verbose=True, dry_run=False): """Purge orphaned .pyc/.pyo files and remove emptied directories""" for dirname, dirs, files in os_walk(path, topdown=False): to_purge = [ f for f in files if (f.endswith('.pyc') or f.endswith('.pyo')) and f[:-1] not in files # don't purge if it has a .py ] for f in to_purge: filename = os_path.join(dirname, f) if verbose: print "deleting", filename if not dry_run: os_unlink(filename) if to_purge and files==to_purge: for d in dirs: # Do any of the subdirectories still exist? if os_path.exists(os_path.join(dirname, d)): # If so, we've done all we can break else: # Go ahread and remove the current directory if verbose: print "removing ", dirname if not dry_run: os_removedirs(dirname)
def saveXML(self): try: fp = file(self.filename, 'w') fp.write("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n") fp.write("<ci>\n") fp.write("\t<slot>\n") fp.write("\t\t<id>%s</id>\n" % self.ci_slot) for item in self.selectedcaid: if len(self.selectedcaid): fp.write("\t\t<caid id=\"%s\" />\n" % item[0]) for item in self.servicelist: if len(self.servicelist): psname = xml_escape(item[0]) psattr = xml_escape(item[3]) if item[2]==1: fp.write("\t\t<provider name=\"%s\" dvbnamespace=\"%s\" />\n" % (psname, psattr)) else: fp.write("\t\t<service name=\"%s\" ref=\"%s\" />\n" % (psname, psattr)) fp.write("\t</slot>\n") fp.write("</ci>\n") fp.flush() fsync(fp.fileno()) fp.close() except: print "[CI_Config_CI%d] xml not written" %self.ci_slot os_unlink(self.filename)
def render_POST(self, req): uploaddir = self.default_uploaddir if req.args['path'][0]: if os_path.isdir(req.args['path'][0]): uploaddir = req.args['path'][0] if uploaddir[-1] != "/": uploaddir += "/" else: req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "path '%s' to upload not existing!" % req.args['path'][0] data = req.args['file'][0] if not data: req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "filesize was 0, not uploaded" fd, fn = mkstemp(dir = uploaddir) cnt = os_write(fd, data) os_close(fd) os_chmod(fn, 0755) if cnt <= 0: # well, actually we should check against len(data) but lets assume we fail big time or not at all try: os_unlink(fn) except OSError, oe: pass req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "error writing to disk, not uploaded"
def saveXML(self): try: fp = file(self.filename, 'w') fp.write("<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n") fp.write("<ci>\n") fp.write("\t<slot>\n") fp.write("\t\t<id>%s</id>\n" % self.ci_slot) for item in self.selectedcaid: if len(self.selectedcaid): fp.write("\t\t<caid id=\"%s\" />\n" % item[0]) for item in self.servicelist: if len(self.servicelist): psname = xml_escape(item[0]) psattr = xml_escape(item[3]) if item[2] == 1: fp.write( "\t\t<provider name=\"%s\" dvbnamespace=\"%s\" />\n" % (psname, psattr)) else: fp.write("\t\t<service name=\"%s\" ref=\"%s\" />\n" % (psname, psattr)) fp.write("\t</slot>\n") fp.write("</ci>\n") fp.flush() fsync(fp.fileno()) fp.close() except: print "[CI_Config_CI%d] xml not written" % self.ci_slot os_unlink(self.filename)
def deleteConfirmed(self, ret): if not ret: return if self.currlist == "remote": absRemoteFile, fileName, fileSize = self.getRemoteFile() if not fileName: return def callback(ret=None): AddPopup( _("Removed %s.") % (fileName), MessageBox.TYPE_INFO, -1) def errback(ret=None): AddPopup( _("Could not delete %s.") % (fileName), MessageBox.TYPE_ERROR, -1) self.ftpclient.removeFile(absRemoteFile).addCallback( callback).addErrback(errback) else: assert (self.currlist == "local") absLocalFile, fileName = self.getLocalFile() if not fileName: return try: os_unlink(absLocalFile) except OSError as oe: AddPopup( _("Could not delete %s.") % (fileName), MessageBox.TYPE_ERROR, -1) else: AddPopup( _("Removed %s.") % (fileName), MessageBox.TYPE_INFO, -1)
def deleteConfirmed(self, ret): if not ret: return if self.currlist == "remote": absRemoteFile, fileName, fileSize = self.getRemoteFile() if not fileName: return def callback(ret = None): AddPopup(_("Removed %s.") % (fileName), MessageBox.TYPE_INFO, -1) def errback(ret = None): AddPopup(_("Could not delete %s.") % (fileName), MessageBox.TYPE_ERROR, -1) self.ftpclient.removeFile(absRemoteFile).addCallback(callback).addErrback(errback) else: assert(self.currlist == "local") absLocalFile, fileName = self.getLocalFile() if not fileName: return try: os_unlink(absLocalFile) except OSError as oe: AddPopup(_("Could not delete %s.") % (fileName), MessageBox.TYPE_ERROR, -1) else: AddPopup(_("Removed %s.") % (fileName), MessageBox.TYPE_INFO, -1)
def moveNextSuffBG(self, retval): if self.sufflst and not retval: fr = self.ele[2] + self.sufflst[0] to = self.ele[3] + self.sufflst[0] self.sufflst = self.sufflst[1:] print("Moving %s to %s" % (fr, to)) if os_path.exists(fr): self.container.execute("/bin/cp", "/bin/cp", fr, to) else: self.moveNextSuffBG(0) elif retval: for suff in self.sufflst2: if os_path.exists(self.ele[3] + suff) and os_path.exists(self.ele[2] + suff): os_unlink(self.ele[3] + suff) mess = _("Failed to move the movie %s to %s in the background") % ( self.ele[2], self.ele[3]) self.message(self.ele[0], self.ele[1], None, mess) self.runDone(1) else: for suff in self.sufflst2: if os_path.exists(self.ele[2] + suff) and os_path.exists(self.ele[3] + suff): os_unlink(self.ele[2] + suff) mess = _("Successfully moved the movie %s") % (self.ele[2]) self.message(self.ele[0], self.ele[1], None, mess) self.runDone(0)
def unlink(path): """os.unlink but ignoring errors due to the path already not existing.""" try: os_unlink(path) except OSError as err: if err.errno != ENOENT: raise
def render_POST(self, req): uploaddir = self.default_uploaddir if req.args['path'][0]: if os_path.isdir(req.args['path'][0]): uploaddir = req.args['path'][0] if uploaddir[-1] != "/": uploaddir += "/" else: req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "path '%s' to upload not existing!" % req.args['path'][0] data = req.args['file'][0] if not data: req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "filesize was 0, not uploaded" fd, fn = mkstemp(dir=uploaddir) cnt = os_write(fd, data) os_close(fd) os_chmod(fn, 0755) if cnt <= 0: # well, actually we should check against len(data) but lets assume we fail big time or not at all try: os_unlink(fn) except OSError, oe: pass req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "error writing to disk, not uploaded"
def run(self): versions = get_versions(verbose=True) _build.run(self) # now locate _version.py in the new build/ directory and replace it with an updated value target_versionfile = path_join(self.build_lib, versionfile_build) print('UPDATING {}'.format(target_versionfile)) os_unlink(target_versionfile) with open(target_versionfile, 'w') as file_: file_.write(SHORT_VERSION_PY % versions)
def make_release_tree(self, base_dir, files): _sdist.make_release_tree(self, base_dir, files) # now locate _version.py in the new base_dir directory (remembering that it may be a hardlink) and replace it with an # updated value target_versionfile = path_join(base_dir, versionfile_source) print('UPDATING {}'.format(target_versionfile)) os_unlink(target_versionfile) with open(target_versionfile, 'w') as f: f.write(SHORT_VERSION_PY % self._versioneer_generated_versions)
def make_graph(self, fname, ftype='png'): """ Create the dependency graph as a file named fname of the type ftype @param self @param string fname name of the graphics file to create. If no path is specified, the current directory is used. If a path is specified, it should already exist! @param string ftype graphics type. Must be supported by the used graphviz module! Defaults to 'png'. @return string error stderr from graphviz (if any - otherwise empty string) """ if not is_str(ftype): logger.error( _('%(func)s was called with wrong parameter type: required: [%(req)s], given: [%(got)s]' ), { 'func': 'depgraph.make_graph', 'req': 'str', 'got': ','.join(is_what(ftype)) }) return if not is_str(fname): logger.error( _('%(func)s was called with wrong parameter type: required: [%(req)s], given: [%(got)s]' ), { 'func': 'depgraph.make_graph', 'req': 'str', 'got': ','.join(is_what(fname)) }) return if self.graph == '': logger.error(_('make_graph() called on an empty graph!')) return # Write graph information to a temporary file tmpname = fname + '.tmp' outfile = fopen(tmpname, 'w') outfile.write('digraph ' + self.name + '{\n' + self.graph + '\n}\n') outfile.close() # Call graphviz to generate the image props = ' -T' + ftype + ' -Nstyle=filled' parms = ' -o ' + fname + ' ' + tmpname if self.fontname != '': props += ' -Nfontname="' + self.fontname + '"' if self.fontsize != '': props += ' -Nfontsize="' + self.fontsize + '"' if self.size != '': props += ' -Gsize="' + self.size + '"' if self.mod == 'fdp' and self.len_fdp != '': props += ' -Elen=' + self.len_fdp elif self.mod == 'neato' and self.len_neato != '': props += ' -Elen=' + self.len_neato elif self.mod == 'dot' and self.ranksep_dot != '': props += ' -Granksep=' + self.ranksep_dot elif self.mod == 'twopi' and self.ranksep_twopi != '': props += ' -Granksep=' + self.ranksep_twopi elif self.mod == 'circo' and self.mindist_circo != '': props += ' -Gmindist=' + self.mindist_twopi if self.charset != '': props += ' -Gcharset="' + self.charset + '"' out, err = popen(self.bin + props + parms) logger.debug('calling "' + self.bin + props + parms + '"') if self.deltmp: os_unlink(tmpname) return err
def make_graph(self, fname, ftype="png"): """ Create the dependency graph as a file named fname of the type ftype @param self @param string fname name of the graphics file to create. If no path is specified, the current directory is used. If a path is specified, it should already exist! @param string ftype graphics type. Must be supported by the used graphviz module! Defaults to 'png'. @return string error stderr from graphviz (if any - otherwise empty string) """ if not is_str(ftype): logger.error( _("%(func)s was called with wrong parameter type: required: [%(req)s], given: [%(got)s]"), {"func": "depgraph.make_graph", "req": "str", "got": ",".join(is_what(ftype))}, ) return if not is_str(fname): logger.error( _("%(func)s was called with wrong parameter type: required: [%(req)s], given: [%(got)s]"), {"func": "depgraph.make_graph", "req": "str", "got": ",".join(is_what(fname))}, ) return if self.graph == "": logger.error(_("make_graph() called on an empty graph!")) return # Write graph information to a temporary file tmpname = fname + ".tmp" outfile = fopen(tmpname, "w") outfile.write("digraph " + self.name + "{\n" + self.graph + "\n}\n") outfile.close() # Call graphviz to generate the image props = " -T" + ftype + " -Nstyle=filled" parms = " -o " + fname + " " + tmpname if self.fontname != "": props += ' -Nfontname="' + self.fontname + '"' if self.fontsize != "": props += ' -Nfontsize="' + self.fontsize + '"' if self.size != "": props += ' -Gsize="' + self.size + '"' if self.mod == "fdp" and self.len_fdp != "": props += " -Elen=" + self.len_fdp elif self.mod == "neato" and self.len_neato != "": props += " -Elen=" + self.len_neato elif self.mod == "dot" and self.ranksep_dot != "": props += " -Granksep=" + self.ranksep_dot elif self.mod == "twopi" and self.ranksep_twopi != "": props += " -Granksep=" + self.ranksep_twopi elif self.mod == "circo" and self.mindist_circo != "": props += " -Gmindist=" + self.mindist_twopi if self.charset != "": props += ' -Gcharset="' + self.charset + '"' out, err = popen(self.bin + props + parms) logger.debug('calling "' + self.bin + props + parms + '"') if self.deltmp: os_unlink(tmpname) return err
def unlink(path): """ Just like os.unlink but ignoring errors due to the path already not existing. :param path: The path to unlink. """ try: os_unlink(path) except OSError, err: if err.errno != ENOENT: raise
def render_POST(self, req): isXml = 'xml' in req.args and req.args['xml'][0] == 'True' uploaddir = self.default_uploaddir if req.args['path'][0]: if os_path.isdir(req.args['path'][0]): uploaddir = req.args['path'][0] if uploaddir[-1] != "/": uploaddir += "/" else: return self.out_POST( req, False, "path '%s' to upload not existing!" % req.args['path'][0], isXml) data = req.args['file'][0] if not data: return self.out_POST(req, False, "filesize was 0, not uploaded", isXml) # allw to overwrite files (if the user requests it), but not in critical directories overwrite = 'overwrite' in req.args and req.args['overwrite'][ 0] == 'True' if overwrite and uploaddir in self.restricted_paths: overwrite = False try: matches = search('.*?filename="(.*?)"\r\n.*?', req.content.getvalue()) fn = os_path.join(uploaddir, matches.group(1)) except Exception as e: fn = None # NOTE: we only accept the given filename if no such file exists yet or the user requested it AND we think its safe if fn and (overwrite or not os_path.exists(fn)): fd = os_open(fn, O_WRONLY | O_CREAT) else: fd, fn = mkstemp(dir=uploaddir) cnt = os_write(fd, data) os_close(fd) os_chmod(fn, 0o755) if cnt <= 0: # well, actually we should check against len(data) but lets assume we fail big time or not at all try: os_unlink(fn) except OSError as oe: pass return self.out_POST(req, False, "error writing to disk, not uploaded", isXml) else: statetext = fn if isXml else "uploaded to %s" % fn return self.out_POST(req, True, statetext, isXml)
def app(request): """ Define app used by tests """ settings_override = { 'TESTING': True, 'SQLALCHEMY_DATABASE_URI': TEST_DATABASE_URI, 'UPLOADS_DEFAULT_DEST': '/tmp/test_upload', 'SQLALCHEMY_TRACK_MODIFICATIONS': False } flask_app = create_app(settings_override) with flask_app.app_context(): if os_path.exists(TESTDB_PATH): os_unlink(TESTDB_PATH) create_db() return flask_app
def render_POST(self, req): uploaddir = self.default_uploaddir print "[UploadTextResource] req.args ", req.args if req.args['path'][0]: if os_path.isdir(req.args['path'][0]): uploaddir = req.args['path'][0] if uploaddir[-1] != "/": uploaddir += "/" else: print "[UploadTextResource] not a dir", req.args['path'][0] req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "path '%s' to upload not existing!" % req.args['path'][0] if uploaddir[: 10] == "/etc/opkg/" or uploaddir[: 12] == "/usr/script/": pass else: req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "illegal upload directory: " + req.args['path'][0] data = req.args['text'][0].replace('\r\n', '\n') if not data: req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "filesize was 0, not uploaded" else: print "[UploadTextResource] text:", data filename = req.args['filename'][0] fd, fn = mkstemp(dir=uploaddir) cnt = os_write(fd, data) os_close(fd) os_chmod(fn, 0755) if cnt <= 0: # well, actually we should check against len(data) but lets assume we fail big time or not at all try: os_unlink(fn) except OSError, oe: pass req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "error writing to disk, not uploaded"
def render_POST(self, req): uploaddir = self.default_uploaddir print "[UploadTextResource] req.args ", req.args if req.args["path"][0]: if os_path.isdir(req.args["path"][0]): uploaddir = req.args["path"][0] if uploaddir[-1] != "/": uploaddir += "/" else: print "[UploadTextResource] not a dir", req.args["path"][0] req.setResponseCode(http.OK) req.setHeader("Content-type", "text/html") return "path '%s' to upload not existing!" % req.args["path"][0] if uploaddir[:10] == "/etc/opkg/" or uploaddir[:12] == "/usr/script/": pass else: req.setResponseCode(http.OK) req.setHeader("Content-type", "text/html") return "illegal upload directory: " + req.args["path"][0] data = req.args["text"][0].replace("\r\n", "\n") if not data: req.setResponseCode(http.OK) req.setHeader("Content-type", "text/html") return "filesize was 0, not uploaded" else: print "[UploadTextResource] text:", data filename = req.args["filename"][0] fd, fn = mkstemp(dir=uploaddir) cnt = os_write(fd, data) os_close(fd) os_chmod(fn, 0755) if cnt <= 0: # well, actually we should check against len(data) but lets assume we fail big time or not at all try: os_unlink(fn) except OSError, oe: pass req.setResponseCode(http.OK) req.setHeader("Content-type", "text/html") return "error writing to disk, not uploaded"
def render_POST(self, req): data = req.args['file'][0] print("[filename req.args]", req.args['filename'][0]) filename = mbasename(req.args['filename'][0]) print("[filename]", filename) if not filename.endswith(".ipk"): return self.res % (_("wrong filetype!"), _("Close"), _("Add")) if not data: req.setResponseCode(http.OK) return self.res % (_("filesize was 0, not uploaded"), _("Close"), _("Add")) fd, fn = mkstemp(dir="/tmp/") cnt = os_write(fd, data) os_close(fd) os_chmod(fn, 0o755) if cnt <= 0: # well, actually we should check against len(data) but lets assume we fail big time or not at all try: os_unlink(fn) except OSError as oe: pass req.setResponseCode(http.OK) return self.res % (_("error writing to disk, not uploaded"), _("Close"), _("Add")) else: file = "/tmp/" + filename os_rename(fn, (file)) if file is not None: out = os_popen("opkg install %s" % file) debug = "" for line in out: debug += line else: return self.res % (_("error writing to disk, not uploaded"), _("Close"), _("Add")) req.setResponseCode(http.OK) return self.res % ((debug), _("Close"), _("Add"))
def doServiceScan(self): self["scan_state"].setText(_('Scanning %s...') % (self.providerName)) self["scan_progress"].setValue(0) self.scan = eFastScan(self.scanPid, self.providerName, self.transponderParameters, self.keepNumbers, self.keepSettings) self.scan.scanCompleted.get().append(self.scanCompleted) self.scan.scanProgress.get().append(self.scanProgress) fstfile = None fntfile = None for root, dirs, files in os_walk('/tmp/'): for f in files: if f.endswith('.bin'): if '_FST' in f: fstfile = os_path.join(root, f) elif '_FNT' in f: fntfile = os_path.join(root, f) if fstfile and fntfile: self.scan.startFile(fntfile, fstfile) os_unlink(fstfile) os_unlink(fntfile) else: self.scan.start(self.scanTuner)
def execBegin(self): self.text.setText(_("Scanning %s...") % (self.providerName)) self.progressbar.setValue(0) self.scan = eFastScan(self.scanPid, self.providerName, self.keepNumbers, self.keepSettings) self.scan.scanCompleted.get().append(self.scanCompleted) self.scan.scanProgress.get().append(self.scanProgress) fstfile = None fntfile = None for root, dirs, files in os_walk("/tmp/"): for f in files: if f.endswith(".bin"): if "_FST" in f: fstfile = os_path.join(root, f) elif "_FNT" in f: fntfile = os_path.join(root, f) if fstfile and fntfile: self.scan.startFile(fntfile, fstfile) os_unlink(fstfile) os_unlink(fntfile) else: self.scan.start(self.scanTuner)
def run(self): versions = get_versions(verbose=True) target_versionfile = versionfile_source print('UPDATING {}'.format(target_versionfile)) os_unlink(target_versionfile) with open(target_versionfile, 'w') as f: f.write(SHORT_VERSION_PY % versions) _build_exe.run(self) os_unlink(target_versionfile) # noinspection PyTypeChecker with open(versionfile_source, 'w') as f: assert VCS is not None, 'please set versioneer.VCS' # noinspection PyPep8Naming LONG = LONG_VERSION_PY[VCS] f.write(LONG % { 'DOLLAR': '$', 'TAG_PREFIX': tag_prefix, 'PARENTDIR_PREFIX': parentdir_prefix, 'VERSIONFILE_SOURCE': versionfile_source, })
def run(self): versions = get_versions(verbose=True) target_versionfile = versionfile_source print('UPDATING {}'.format(target_versionfile)) os_unlink(target_versionfile) with open(target_versionfile, 'w') as f: f.write(SHORT_VERSION_PY % versions) _build_exe.run(self) os_unlink(target_versionfile) # noinspection PyTypeChecker with open(versionfile_source, 'w') as f: assert VCS is not None, 'please set versioneer.VCS' # noinspection PyPep8Naming LONG = LONG_VERSION_PY[VCS] f.write( LONG % { 'DOLLAR': '$', 'TAG_PREFIX': tag_prefix, 'PARENTDIR_PREFIX': parentdir_prefix, 'VERSIONFILE_SOURCE': versionfile_source, })
def moveNextSuffBG(self, retval): if self.sufflst and not retval: fr = self.ele[2] + self.sufflst[0] to = self.ele[3] + self.sufflst[0] self.sufflst = self.sufflst[1:] print "Moving %s to %s" % (fr, to) if os_path.exists(fr): self.container.execute("/bin/cp", "/bin/cp", fr, to) else: self.moveNextSuffBG(0) elif retval: for suff in self.sufflst2: if os_path.exists(self.ele[3] + suff) and os_path.exists(self.ele[2] + suff): os_unlink(self.ele[3] + suff) mess = _("Failed to move the movie %s to %s in the background") % (self.ele[2], self.ele[3]) self.message(self.ele[0], self.ele[1], None, mess) self.runDone(1) else: for suff in self.sufflst2: if os_path.exists(self.ele[2] + suff) and os_path.exists(self.ele[3] + suff): os_unlink(self.ele[2] + suff) mess = _("Successfully moved the movie %s") % (self.ele[2]) self.message(self.ele[0], self.ele[1], None, mess) self.runDone(0)
class UploadResource(resource.Resource): default_uploaddir = "/tmp/" restricted_paths = frozenset( ("/bin/", "/boot/", "/dev/", "/etc/", "/lib/", "/proc/", "/sbin/", "/sys/", "/usr/", "/var/")) def out_POST(self, req, state, statetext, isXml): req.setResponseCode(http.OK) if isXml: req.setHeader('Content-type', 'application/xhtml+xml;') req.setHeader('charset', 'UTF-8') return """<?xml version="1.0" encoding="UTF-8" ?> <e2simplexmlresult> <e2state>%s</e2state> <e2statetext>%s</e2statetext> </e2simplexmlresult>""" % ('True' if state else 'False', statetext) else: req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return statetext def render_POST(self, req): isXml = 'xml' in req.args and req.args['xml'][0] == 'True' uploaddir = self.default_uploaddir if req.args['path'][0]: if os_path.isdir(req.args['path'][0]): uploaddir = req.args['path'][0] if uploaddir[-1] != "/": uploaddir += "/" else: return self.out_POST( req, False, "path '%s' to upload not existing!" % req.args['path'][0], isXml) data = req.args['file'][0] if not data: return self.out_POST(req, False, "filesize was 0, not uploaded", isXml) # allw to overwrite files (if the user requests it), but not in critical directories overwrite = 'overwrite' in req.args and req.args['overwrite'][ 0] == 'True' if overwrite and uploaddir in self.restricted_paths: overwrite = False try: matches = search('.*?filename="(.*?)"\r\n.*?', req.content.getvalue()) fn = os_path.join(uploaddir, matches.group(1)) except Exception, e: fn = None # NOTE: we only accept the given filename if no such file exists yet or the user requested it AND we think its safe if fn and (overwrite or not os_path.exists(fn)): fd = os_open(fn, O_WRONLY | O_CREAT) else: fd, fn = mkstemp(dir=uploaddir) cnt = os_write(fd, data) os_close(fd) os_chmod(fn, 0755) if cnt <= 0: # well, actually we should check against len(data) but lets assume we fail big time or not at all try: os_unlink(fn) except OSError, oe: pass return self.out_POST(req, False, "error writing to disk, not uploaded", isXml)
def removeFile(self): if os_path.exists("/etc/rc3.d/S30rcsetup"): os_unlink("/etc/rc3.d/S30rcsetup")
def unlink(_path): if is_dir(_path): return rmtree(_path) if is_file(_path): return os_unlink(_path)
def render_POST(self, req): uploaddir = self.default_uploaddir print("[UploadTextResource] req.args ", req.args) if req.args['path'][0]: if os_path.isdir(req.args['path'][0]): uploaddir = req.args['path'][0] if uploaddir[-1] != "/": uploaddir += "/" else: print("[UploadTextResource] not a dir", req.args['path'][0]) req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "path '%s' to upload not existing!" % req.args['path'][0] if uploaddir[: 10] == "/etc/opkg/" or uploaddir[: 12] == "/usr/script/": pass else: req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "illegal upload directory: " + req.args['path'][0] data = req.args['text'][0].replace('\r\n', '\n') if not data: req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "filesize was 0, not uploaded" else: print("[UploadTextResource] text:", data) filename = req.args['filename'][0] fd, fn = mkstemp(dir=uploaddir) cnt = os_write(fd, data) os_close(fd) os_chmod(fn, 0755) if cnt <= 0: # well, actually we should check against len(data) but lets assume we fail big time or not at all try: os_unlink(fn) except OSError as oe: pass req.setResponseCode(http.OK) req.setHeader('Content-type', 'text/html') return "error writing to disk, not uploaded" else: file = uploaddir + filename os_rename(fn, file) return """ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta content="text/html; charset=UTF-8" http-equiv="content-type"> <link href="/web-data/tpl/default/style.min.css" type="text/css" rel="stylesheet"> <link rel="shortcut icon" type="image/x-icon" href="/web-data/img/favicon.ico"> </head> <body onunload="javascript:opener.location.reload()" > <hr> <p align="left"> uploaded to %s </p> <hr> <form> <input type="button" value="%s" onClick="window.close();"> </form> </body> </html>""" % (file, _("Close"))