Ejemplo n.º 1
0
	def setRepeat(self, device, value): #REP_PERIOD
		if self.getDeviceAttribute(device, 'enabled'):
			print "[iInputDevices] setRepeat for device %s to %d ms" % (device,value)
			event = struct.pack('iihhi', 0, 0, 0x14, 0x01, int(value))
			fd = os_open("/dev/input/" + device, O_RDWR)
			os_write(fd, event)
			os_close(fd)
Ejemplo n.º 2
0
 def setDelay(self, device, value):
     if self.getDeviceAttribute(device, 'enabled'):
         print '[iInputDevices] setDelay for device %s to %d ms' % (device, value)
         event = struct.pack('iihhi', 0, 0, 20, 0, int(value))
         fd = os_open('/dev/input/' + device, O_RDWR)
         os_write(fd, event)
         os_close(fd)
Ejemplo n.º 3
0
 def match_or_trust(self, host, der_encoded_certificate):
     base64_encoded_certificate = b64encode(der_encoded_certificate)
     if isfile(self.path):
         with open(self.path) as f_in:
             for line in f_in:
                 known_host, _, known_cert = line.strip().partition(":")
                 known_cert = known_cert.encode("utf-8")
                 if host == known_host:
                     return base64_encoded_certificate == known_cert
     # First use (no hosts match)
     try:
         makedirs(dirname(self.path))
     except OSError:
         pass
     f_out = os_open(self.path, O_CREAT | O_APPEND | O_WRONLY,
                     0o600)  # TODO: Windows
     if isinstance(host, bytes):
         os_write(f_out, host)
     else:
         os_write(f_out, host.encode("utf-8"))
     os_write(f_out, b":")
     os_write(f_out, base64_encoded_certificate)
     os_write(f_out, b"\n")
     os_close(f_out)
     return True
Ejemplo n.º 4
0
	def setRepeat(self, device, value): #REP_PERIOD
		if self.getDeviceAttribute(device, 'enabled') == True:
			print "[iInputDevices] setRepeat for device %s to %d ms" % (device,value)
			event = struct.pack('iihhi', 0, 0, 0x14, 0x01, int(value))
			fd = os_open("/dev/input/" + device, O_RDWR)
			os_write(fd, event)
			os_close(fd)
Ejemplo n.º 5
0
	def setDelay(self, device, value): #REP_DELAY
		if self.getDeviceAttribute(device, 'enabled'):
			print "[iInputDevices] setDelay for device %s to %d ms" % (device,value)
			event = struct.pack('iihhi', 0, 0, 0x14, 0x00, int(value))
			fd = os_open("/dev/input/" + device, O_RDWR)
			os_write(fd, event)
			os_close(fd)
Ejemplo n.º 6
0
 def write(self, bts):
     """Write an IP packet to this TUN device."""
     try:
         os_write(self._fileno_iface_fd, bts)
     except TypeError:
         # write after closing
         pass
Ejemplo n.º 7
0
	def setDelay(self, device, value): #REP_DELAY
		if self.getDeviceAttribute(device, 'enabled') == True:
			print "[iInputDevices] setDelay for device %s to %d ms" % (device,value)
			event = struct.pack('iihhi', 0, 0, 0x14, 0x00, int(value))
			fd = os_open("/dev/input/" + device, O_RDWR)
			os_write(fd, event)
			os_close(fd)
Ejemplo n.º 8
0
 def setDelay(self, device, value):
     if self.getDeviceAttribute(device, 'enabled'):
         print '[iInputDevices] setDelay for device %s to %d ms' % (device,
                                                                    value)
         event = struct.pack('LLHHi', 0, 0, 20, 0, int(value))
         fd = os_open('/dev/input/' + device, O_RDWR)
         os_write(fd, event)
         os_close(fd)
Ejemplo n.º 9
0
 def setDefaults(self, device):
     print '[iInputDevices] setDefaults for device %s' % device
     self.setDeviceAttribute(device, 'configuredName', None)
     event_repeat = struct.pack('LLHHi', 0, 0, 20, 1, 100)
     event_delay = struct.pack('LLHHi', 0, 0, 20, 0, 700)
     fd = os_open('/dev/input/' + device, O_RDWR)
     os_write(fd, event_repeat)
     os_write(fd, event_delay)
     os_close(fd)
Ejemplo n.º 10
0
	def setDefaults(self, device):
		print "[iInputDevices] setDefaults for device %s" % (device)
		self.setDeviceAttribute(device, 'configuredName', None)
		event_repeat = struct.pack('iihhi', 0, 0, 0x14, 0x01, 100)
		event_delay = struct.pack('iihhi', 0, 0, 0x14, 0x00, 700)
		fd = os_open("/dev/input/" + device, O_RDWR)
		os_write(fd, event_repeat)
		os_write(fd, event_delay)
		os_close(fd)
Ejemplo n.º 11
0
 def setDefaults(self, device):
     print "[iInputDevices] setDefaults for device %s" % device
     self.setDeviceAttribute(device, 'configuredName', None)
     event_repeat = struct.pack('iihhi', 0, 0, 0x14, 0x01, 100)
     event_delay = struct.pack('iihhi', 0, 0, 0x14, 0x00, 700)
     fd = os_open("/dev/input/" + device, O_RDWR)
     os_write(fd, event_repeat)
     os_write(fd, event_delay)
     os_close(fd)
Ejemplo n.º 12
0
 def setDefaults(self, device):
     print '[InputDevice] setDefaults for device %s' % device
     self.setDeviceAttribute(device, 'configuredName', None)
     event_repeat = struct.pack('iihhi', 0, 0, 20, 1, 100)
     event_delay = struct.pack('iihhi', 0, 0, 20, 0, 700)
     fd = os_open('/dev/input/' + device, O_RDWR)
     os_write(fd, event_repeat)
     os_write(fd, event_delay)
     os_close(fd)
     return
Ejemplo n.º 13
0
	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"))
Ejemplo n.º 14
0
    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"
Ejemplo n.º 15
0
	def render_POST(self, req):
		req.setResponseCode(http.OK)
		req.setHeader('Content-type', 'application/xhtml+xml;' )
		req.setHeader('charset', 'UTF-8')	
		data = req.args['file'][0]
		if not data:
			result = """<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n
				<e2simplexmlresult>\n
					<e2state>False</e2state>
					<e2statetext>Filesize was 0, not uploaded</e2statetext>
				</e2simplexmlresult>\n"""
			return result
		fd = os_open( self.FILENAME, os_O_WRONLY|os_O_CREAT )
		if fd:
			cnt = os_write(fd, data)
			os_close(fd)
		if cnt <= 0:
			try:
				os_remove(FILENAME)
			except OSError as oe:
				pass
			result = """<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n
				<e2simplexmlresult>\n
					<e2state>False</e2state>
					<e2statetext>Error writing to disk, not uploaded</e2statetext>
				</e2simplexmlresult>\n"""
		else:
			result = """<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n
				<e2simplexmlresult>\n
					<e2state>True</e2state>
					<e2statetext>%s</e2statetext>
				</e2simplexmlresult>\n""" % self.FILENAME
		return result
Ejemplo n.º 16
0
	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"
Ejemplo n.º 17
0
 def choose():
     self.dir_name = filedialog.askdirectory(initialdir="")
     dda = DEFAULT_DIR_ADDRESS
     dn = self.dir_name
     if dn:
         try:
             dd = os_open(dda, O_CREAT | O_RDWR)
         except PermissionError:
             showerror(title="错误", message="请确保C盘用户文件夹有读写权限哦")
         else:
             if path.exists(dda):
                 os_close(dd)
                 os_remove(dda)
                 dd = os_open(dda, O_CREAT | O_RDWR)
             os_write(dd, str.encode(dn))
             os_close(dd)
             self.lb.config(text="已选择存储地址:%s" % dn, fg="#00FA9A", font=("simsun", "9"))
     else:
         self.lb.config(text="未选择存储地址", justify=LEFT, fg="#FA8072", font=("simsun", "9"))
Ejemplo n.º 18
0
def os_write_all(ofd, data):
    while True:
        try:
            n = os_write(ofd, data)
        except OSError as e: # This may happen if we fill-up the output pipe's buffer.
            if e.errno != errno.EAGAIN:
                raise
            n = 0
        if n == len(data):
            return
        data = data[n:]
Ejemplo n.º 19
0
def os_write_all(ofd, data):
    while True:
        try:
            n = os_write(ofd, data)
        except OSError as e:  # This may happen if we fill-up the output pipe's buffer.
            if e.errno != errno.EAGAIN:
                raise
            n = 0
        if n == len(data):
            return
        data = data[n:]
Ejemplo n.º 20
0
    def start(self):
        oldPlayTimeHr = -1
        oldPlayTimeMin = -1
        oldPlayTimeSec = -1
        oldTime = -1
        logger.info("Service started...")
        while True:
            clock = True
            clientConnected = self.__checkAndConnectToMpd()
            if clientConnected:
                try:
                    clientStatus = self._mpdclient.status()
                except Exception as e:
                    logger.error("Failed to obtain MPD status!", exc_info=True)
                    clientStatus = None

                if clientStatus is not None and "state" in clientStatus and clientStatus[
                        "state"] == "play" and "elapsed" in clientStatus:  # Show play time
                    currentPlayTime = float(clientStatus["elapsed"])
                    currentPlayTimeHr = min(int(currentPlayTime / 3600), 99)
                    if currentPlayTimeHr == 99:
                        currentPlayTimeMin = min(
                            int((currentPlayTime - 356400) / 60), 99)
                        currentPlayTimeSec = 0
                    else:
                        currentPlayTimeMin = int((currentPlayTime % 3600) / 60)
                        currentPlayTimeSec = int(currentPlayTime % 60)
                    clock = False
                    if currentPlayTimeHr == 0 and (
                            oldPlayTimeMin != currentPlayTimeMin
                            or oldPlayTimeSec != currentPlayTimeSec):
                        oldPlayTimeHr = -1
                        oldPlayTimeMin = currentPlayTimeMin
                        oldPlayTimeSec = currentPlayTimeSec
                        bytePlayTime = struct.pack(b"bbbb", currentPlayTimeMin,
                                                   currentPlayTimeSec, 0, 1)
                        os_write(self._vfd_dev, bytePlayTime)
                    elif currentPlayTimeHr > 0 and (
                            oldPlayTimeHr != currentPlayTimeHr
                            or oldPlayTimeMin != currentPlayTimeMin):
                        oldPlayTimeHr = currentPlayTimeHr
                        oldPlayTimeMin = currentPlayTimeMin
                        oldPlayTimeSec = -1
                        bytePlayTime = struct.pack(b"bbbb", currentPlayTimeHr,
                                                   currentPlayTimeMin, 0, 1)
                        os_write(self._vfd_dev, bytePlayTime)

            if clock:
                currentTime = datetime.now().time().hour + datetime.now().time(
                ).minute
                if (oldTime != currentTime):
                    oldTime = currentTime
                    byteTime = struct.pack(b"bbbb",
                                           datetime.now().time().hour,
                                           datetime.now().time().minute,
                                           datetime.now().time().second, 1)
                    os_write(self._vfd_dev, byteTime)

            time.sleep(0.2)
Ejemplo n.º 21
0
    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)
Ejemplo n.º 22
0
 def match_or_trust(self, host, der_encoded_certificate):
     base64_encoded_certificate = b64encode(der_encoded_certificate)
     if isfile(self.path):
         with open(self.path) as f_in:
             for line in f_in:
                 known_host, _, known_cert = line.strip().partition(":")
                 known_cert = known_cert.encode("utf-8")
                 if host == known_host:
                     return base64_encoded_certificate == known_cert
     # First use (no hosts match)
     try:
         makedirs(dirname(self.path))
     except OSError:
         pass
     f_out = os_open(self.path, O_CREAT | O_APPEND | O_WRONLY, 0o600)  # TODO: Windows
     if isinstance(host, bytes):
         os_write(f_out, host)
     else:
         os_write(f_out, host.encode("utf-8"))
     os_write(f_out, b":")
     os_write(f_out, base64_encoded_certificate)
     os_write(f_out, b"\n")
     os_close(f_out)
     return True
Ejemplo n.º 23
0
    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"
Ejemplo n.º 24
0
    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"
Ejemplo n.º 25
0
    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"))
Ejemplo n.º 26
0
	def render_POST(self, req):
		req.setResponseCode(http.OK)
		req.setHeader('Content-type', 'application/xhtml+xml;' )
		req.setHeader('charset', 'UTF-8')	
		data = req.args['file'][0]
		if not data:
			result = """<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n
				<e2simplexmlresult>\n
					<e2state>False</e2state>
					<e2statetext>Filesize was 0, not uploaded</e2statetext>
				</e2simplexmlresult>\n"""
			return result
		fd = os_open( self.FILENAME, os_O_WRONLY|os_O_CREAT )
		if fd:
			cnt = os_write(fd, data)
			os_close(fd)
		if cnt <= 0:
			try:
				os_remove(FILENAME)
			except OSError, oe:
				pass
			result = """<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n
Ejemplo n.º 27
0
def generate_ephemeral_certificate(return_as_strings=False):
    """ Create ephemeral self-signed certificate and return it with key.

    Based on http://www.web2pyslices.com/slice/show/1507/generate-ssl-self-signed-certificate-and-key-enable-https-encryption-in-web2py

    Args:
        return_as_strings - Boolean.  If True, will return strings containing file content. If False, will
                                        return path to each file

    Returns:
        tuple of str - either path_to_certfile, path_to_keyfile or certfile_content, keyfile_content

    """
    from OpenSSL import crypto, rand
    from socket import gethostname
    from tempfile import mkstemp
    from os import write as os_write, unlink

    # create a key pair
    k = crypto.PKey()
    k.generate_key(crypto.TYPE_RSA, 4096)

    # poor effort at providing a random serial number for the cert
    randbytes = rand.bytes(4)
    cert_serial = ord(randbytes[0])
    for c in randbytes[1:]:
        cert_serial = cert_serial * ord(c)

    # create a self-signed cert
    cert = crypto.X509()
    cert.get_subject().C = "GB"
    cert.get_subject().ST = "State"
    cert.get_subject().L = "City"
    cert.get_subject().O = "Company"
    cert.get_subject().OU = "Organization"
    cert.get_subject().CN = gethostname()
    cert.set_serial_number(cert_serial)
    cert.gmtime_adj_notBefore(0)
    cert.gmtime_adj_notAfter(10*365*24*60*60)
    cert.set_issuer(cert.get_subject())
    cert.set_pubkey(k)
    cert.sign(k, 'sha256')

    # we have to write a file to disk as Python's ssl implementation calls C code that expects an actual file
    cfile, cfile_path = mkstemp()
    kfile, kfile_path = mkstemp()
    os_write(cfile, crypto.dump_certificate(crypto.FILETYPE_PEM, cert))
    os_write(kfile, crypto.dump_privatekey(crypto.FILETYPE_PEM, k))

    if return_as_strings:
        cert_data = ''.join(open(cfile_path, 'r').readlines())
        key_data = ''.join(open(kfile_path, 'r').readlines())
        try:
            unlink(cfile_path)
            unlink(kfile_path)
        except:
            pass
        return cert_data, key_data

    else:
        return cfile_path, kfile_path
Ejemplo n.º 28
0
 def write(b):
     os_write(fd, b)
Ejemplo n.º 29
0
            if (now - start) > self.server.config['ReadTimeout']:
                print 'Connection Timeout'
                self.connection.send('stream: ERROR timeout\n')
                ok = False
                break
            if r:
                try:
                    d = conn.recv(4096)
                    if not d: break
                    bytes = bytes + len(d)
                    if bytes > self.server.config['StreamMaxLength']:
                        print 'ScanStream: StreamMaxLength reached (max: %s)' % self.server.config['StreamMaxLength']
                        self.connection.send('stream: ERROR StreamMaxLength reached\n')
                        ok = False
                        break
                    os_write(f, d)
                    start = now
                except Exception, error:
                    print 'Error Recv', error
                    self.connection.send('stream: ERROR %s\n' % error)
                    ok = False
                    break
            if e:
                print 'Error select()'
                self.connection.send('stream: Socket ERROR\n')
                ok = False
                break

        conn.close()
        os_close(f)
        stream.close()
Ejemplo n.º 30
0
def li_write(args):
    return os_write(args[0].val, args[1].val)
Ejemplo n.º 31
0
                self.connection.send('stream: ERROR timeout\n')
                ok = False
                break
            if r:
                try:
                    d = conn.recv(4096)
                    if not d: break
                    bytes = bytes + len(d)
                    if bytes > self.server.config['StreamMaxLength']:
                        print 'ScanStream: StreamMaxLength reached (max: %s)' % self.server.config[
                            'StreamMaxLength']
                        self.connection.send(
                            'stream: ERROR StreamMaxLength reached\n')
                        ok = False
                        break
                    os_write(f, d)
                    start = now
                except Exception, error:
                    print 'Error Recv', error
                    self.connection.send('stream: ERROR %s\n' % error)
                    ok = False
                    break
            if e:
                print 'Error select()'
                self.connection.send('stream: Socket ERROR\n')
                ok = False
                break

        conn.close()
        os_close(f)
        stream.close()
Ejemplo n.º 32
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)
Ejemplo n.º 33
0
    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"))