diff options
| author | Andreas Oberritter <obi@saftware.de> | 2009-08-15 18:32:30 +0200 |
|---|---|---|
| committer | Andreas Oberritter <obi@saftware.de> | 2009-08-15 18:32:30 +0200 |
| commit | 6d3b1b7d7daa7d6383a7c02275d8b410f822e4d2 (patch) | |
| tree | 409475ebd68f2c94f94f2a9af8aa2e72a13946a4 /lib/network/http_file.cpp | |
| parent | 4836d9ebbfbfde987c7f1f907a679c6c1d262ab2 (diff) | |
| download | enigma2-6d3b1b7d7daa7d6383a7c02275d8b410f822e4d2.tar.gz enigma2-6d3b1b7d7daa7d6383a7c02275d8b410f822e4d2.zip | |
remove unused lib/network
Diffstat (limited to 'lib/network/http_file.cpp')
| -rw-r--r-- | lib/network/http_file.cpp | 241 |
1 files changed, 0 insertions, 241 deletions
diff --git a/lib/network/http_file.cpp b/lib/network/http_file.cpp deleted file mode 100644 index 6c6abc83..00000000 --- a/lib/network/http_file.cpp +++ /dev/null @@ -1,241 +0,0 @@ -#include <lib/network/http_file.h> -#include <unistd.h> -#include <fcntl.h> -#include <errno.h> -#include <string> -#include <shadow.h> -#include <pwd.h> - -DEFINE_REF(eHTTPFile); - -eHTTPFile::eHTTPFile(eHTTPConnection *c, int _fd, int method, const char *mime): eHTTPDataSource(c), method(method) -{ - fd=_fd; - if (method == methodGET) - { - c->local_header["Content-Type"]=std::string(mime); - size=lseek(fd, 0, SEEK_END); - char asize[10]; - snprintf(asize, 10, "%d", size); - lseek(fd, 0, SEEK_SET); - c->local_header["Content-Length"]=std::string(asize); - } - connection->code_descr="OK"; - connection->code=200; -} - -int eHTTPFile::doWrite(int bytes) -{ - if (method == methodGET) - { - char buff[bytes]; - if (!size) - return -1; - int len=bytes; - if (len>size) - len=size; - len=read(fd, buff, len); - if (len<=0) - return -1; - size-=connection->writeBlock(buff, len); - if (!size) - return -1; - else - return 1; - } else - return -1; -} - -void eHTTPFile::haveData(void *data, int len) -{ - if (method != methodPUT) - return; - ::write(fd, data, len); -} - -eHTTPFile::~eHTTPFile() -{ - close(fd); -} - -eHTTPFilePathResolver::eHTTPFilePathResolver() -{ -} - - -static char _base64[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - -static int unbase64(std::string &dst, const std::string string) -{ - dst=""; - char c[4]; - int pos=0; - unsigned int i=0; - - while (1) - { - if (i == string.size()) - break; - char *ch=strchr(_base64, string[i++]); - if (!ch) - { - i++; - continue; - } - c[pos++]=ch-_base64; - if (pos == 4) - { - char d[3]; - d[0]=c[0]<<2; - d[0]|=c[1]>>4; - d[1]=c[1]<<4; - d[1]|=c[2]>>2; - d[2]=c[2]<<6; - d[2]|=c[3]; - - dst+=d[0]; - if (c[2] != 64) - dst+=d[1]; - if (c[3] != 64) - dst+=d[2]; - pos=0; - } - } - return pos; -} - -int CheckUnixPassword(const char *user, const char *pass) -{ - passwd *pwd=getpwnam(user); - if (!pwd) - return -1; - char *cpwd=pwd->pw_passwd; - if (pwd && (!strcmp(pwd->pw_passwd, "x"))) - { - spwd *sp=getspnam(user); - if (!sp) // no shadow password defined. - return -1; - cpwd=sp->sp_pwdp; - } - if (!cpwd) - return -1; - if ((*cpwd=='!')||(*cpwd=='*')) // disabled user - return -2; - char *cres=crypt(pass, cpwd); - return !!strcmp(cres, cpwd); -} - -static int checkAuth(const std::string cauth) -{ - std::string auth; - if (cauth.substr(0, 6) != "Basic ") - return -1; - if (unbase64(auth, cauth.substr(6))) - return -1; - std::string username=auth.substr(0, auth.find(":")); - std::string password=auth.substr(auth.find(":")+1); - if (CheckUnixPassword(username.c_str(), password.c_str())) - return -1; - return 0; -} - -DEFINE_REF(eHTTPFilePathResolver); - -RESULT eHTTPFilePathResolver::getDataSource(eHTTPDataSourcePtr &ptr, std::string request, std::string path, eHTTPConnection *conn) -{ - int method; - eDebug("request = %s, path = %s", request.c_str(), path.c_str()); - if (request == "GET") - method=eHTTPFile::methodGET; - else if (request == "PUT") - method=eHTTPFile::methodPUT; - else - { - ptr = new eHTTPError(conn, 405); // method not allowed - return 0; - } - if (path.find("../")!=std::string::npos) // evil hax0r - { - ptr = new eHTTPError(conn, 403); - return 0; - } - if (path[0] != '/') // prepend '/' - path.insert(0,"/"); - if (path[path.length()-1]=='/') - path+="index.html"; - - eHTTPDataSource *data=0; - for (ePtrList<eHTTPFilePath>::iterator i(translate); i != translate.end(); ++i) - { - if (i->root==path.substr(0, i->root.length())) - { - std::string newpath=i->path+path.substr(i->root.length()); - if (newpath.find('?')) - newpath=newpath.substr(0, newpath.find('?')); - eDebug("translated %s to %s", path.c_str(), newpath.c_str()); - - if (i->authorized & ((method==eHTTPFile::methodGET)?1:2)) - { - std::map<std::string, std::string>::iterator i=conn->remote_header.find("Authorization"); - if ((i == conn->remote_header.end()) || checkAuth(i->second)) - { - conn->local_header["WWW-Authenticate"]="Basic realm=\"dreambox\""; - ptr = new eHTTPError(conn, 401); // auth req'ed - return 0; - } - } - - int fd=open(newpath.c_str(), (method==eHTTPFile::methodGET)?O_RDONLY:(O_WRONLY|O_CREAT|O_TRUNC), 0644); - - if (fd==-1) - { - switch (errno) - { - case ENOENT: - data=new eHTTPError(conn, 404); - break; - case EACCES: - data=new eHTTPError(conn, 403); - break; - default: - data=new eHTTPError(conn, 403); // k.a. - break; - } - break; - } - - std::string ext=path.substr(path.rfind('.')); - const char *mime="text/unknown"; - if ((ext==".html") || (ext==".htm")) - mime="text/html"; - else if ((ext==".jpeg") || (ext==".jpg")) - mime="image/jpeg"; - else if (ext==".gif") - mime="image/gif"; - else if (ext==".css") - mime="text/css"; - else if (ext==".png") - mime="image/png"; - else if (ext==".xml") - mime="text/xml"; - else if (ext==".xsl") - mime="text/xsl"; - - data=new eHTTPFile(conn, fd, method, mime); - break; - } - } - if (!data) - return -1; - ptr = data; - return 0; -} - -void eHTTPFilePathResolver::addTranslation(std::string path, std::string root, int authorized) -{ - if (path[path.length()-1]!='/') - path+='/'; - if (root[root.length()-1]!='/') - root+='/'; - translate.push_back(new eHTTPFilePath(path, root, authorized)); -} |
