Annotation of embedaddon/lighttpd/src/mod_cml_funcs.c, revision 1.1

1.1     ! misho       1: #include "buffer.h"
        !             2: #include "server.h"
        !             3: #include "log.h"
        !             4: #include "plugin.h"
        !             5: #include "response.h"
        !             6: 
        !             7: #include "mod_cml.h"
        !             8: #include "mod_cml_funcs.h"
        !             9: 
        !            10: #include <sys/stat.h>
        !            11: #include <time.h>
        !            12: 
        !            13: #include <stdlib.h>
        !            14: #include <string.h>
        !            15: #include <errno.h>
        !            16: #include <unistd.h>
        !            17: #include <dirent.h>
        !            18: #include <stdio.h>
        !            19: 
        !            20: #include "md5.h"
        !            21: 
        !            22: #define HASHLEN 16
        !            23: typedef unsigned char HASH[HASHLEN];
        !            24: #define HASHHEXLEN 32
        !            25: typedef char HASHHEX[HASHHEXLEN+1];
        !            26: #ifdef USE_OPENSSL
        !            27: #define IN const
        !            28: #else
        !            29: #define IN
        !            30: #endif
        !            31: #define OUT
        !            32: 
        !            33: #ifdef HAVE_LUA_H
        !            34: 
        !            35: int f_crypto_md5(lua_State *L) {
        !            36:        li_MD5_CTX Md5Ctx;
        !            37:        HASH HA1;
        !            38:        buffer b;
        !            39:        char hex[33];
        !            40:        int n = lua_gettop(L);
        !            41: 
        !            42:        b.ptr = hex;
        !            43:        b.used = 0;
        !            44:        b.size = sizeof(hex);
        !            45: 
        !            46:        if (n != 1) {
        !            47:                lua_pushstring(L, "md5: expected one argument");
        !            48:                lua_error(L);
        !            49:        }
        !            50: 
        !            51:        if (!lua_isstring(L, 1)) {
        !            52:                lua_pushstring(L, "md5: argument has to be a string");
        !            53:                lua_error(L);
        !            54:        }
        !            55: 
        !            56:        li_MD5_Init(&Md5Ctx);
        !            57:        li_MD5_Update(&Md5Ctx, (unsigned char *)lua_tostring(L, 1), lua_strlen(L, 1));
        !            58:        li_MD5_Final(HA1, &Md5Ctx);
        !            59: 
        !            60:        buffer_copy_string_hex(&b, (char *)HA1, 16);
        !            61: 
        !            62:        lua_pushstring(L, b.ptr);
        !            63: 
        !            64:        return 1;
        !            65: }
        !            66: 
        !            67: 
        !            68: int f_file_mtime(lua_State *L) {
        !            69:        struct stat st;
        !            70:        int n = lua_gettop(L);
        !            71: 
        !            72:        if (n != 1) {
        !            73:                lua_pushstring(L, "file_mtime: expected one argument");
        !            74:                lua_error(L);
        !            75:        }
        !            76: 
        !            77:        if (!lua_isstring(L, 1)) {
        !            78:                lua_pushstring(L, "file_mtime: argument has to be a string");
        !            79:                lua_error(L);
        !            80:        }
        !            81: 
        !            82:        if (-1 == stat(lua_tostring(L, 1), &st)) {
        !            83:                lua_pushnil(L);
        !            84:                return 1;
        !            85:        }
        !            86: 
        !            87:        lua_pushnumber(L, st.st_mtime);
        !            88: 
        !            89:        return 1;
        !            90: }
        !            91: 
        !            92: static int f_dir_files_iter(lua_State *L) {
        !            93:        DIR *d;
        !            94:        struct dirent *de;
        !            95: 
        !            96:        d = lua_touserdata(L, lua_upvalueindex(1));
        !            97: 
        !            98:        if (NULL == (de = readdir(d))) {
        !            99:                /* EOF */
        !           100:                closedir(d);
        !           101: 
        !           102:                return 0;
        !           103:        } else {
        !           104:                lua_pushstring(L, de->d_name);
        !           105:                return 1;
        !           106:        }
        !           107: }
        !           108: 
        !           109: int f_dir_files(lua_State *L) {
        !           110:        DIR *d;
        !           111:        int n = lua_gettop(L);
        !           112: 
        !           113:        if (n != 1) {
        !           114:                lua_pushstring(L, "dir_files: expected one argument");
        !           115:                lua_error(L);
        !           116:        }
        !           117: 
        !           118:        if (!lua_isstring(L, 1)) {
        !           119:                lua_pushstring(L, "dir_files: argument has to be a string");
        !           120:                lua_error(L);
        !           121:        }
        !           122: 
        !           123:        /* check if there is a valid DIR handle on the stack */
        !           124:        if (NULL == (d = opendir(lua_tostring(L, 1)))) {
        !           125:                lua_pushnil(L);
        !           126:                return 1;
        !           127:        }
        !           128: 
        !           129:        /* push d into registry */
        !           130:        lua_pushlightuserdata(L, d);
        !           131:        lua_pushcclosure(L, f_dir_files_iter, 1);
        !           132: 
        !           133:        return 1;
        !           134: }
        !           135: 
        !           136: int f_file_isreg(lua_State *L) {
        !           137:        struct stat st;
        !           138:        int n = lua_gettop(L);
        !           139: 
        !           140:        if (n != 1) {
        !           141:                lua_pushstring(L, "file_isreg: expected one argument");
        !           142:                lua_error(L);
        !           143:        }
        !           144: 
        !           145:        if (!lua_isstring(L, 1)) {
        !           146:                lua_pushstring(L, "file_isreg: argument has to be a string");
        !           147:                lua_error(L);
        !           148:        }
        !           149: 
        !           150:        if (-1 == stat(lua_tostring(L, 1), &st)) {
        !           151:                lua_pushnil(L);
        !           152:                return 1;
        !           153:        }
        !           154: 
        !           155:        lua_pushnumber(L, S_ISREG(st.st_mode));
        !           156: 
        !           157:        return 1;
        !           158: }
        !           159: 
        !           160: int f_file_isdir(lua_State *L) {
        !           161:        struct stat st;
        !           162:        int n = lua_gettop(L);
        !           163: 
        !           164:        if (n != 1) {
        !           165:                lua_pushstring(L, "file_isreg: expected one argument");
        !           166:                lua_error(L);
        !           167:        }
        !           168: 
        !           169:        if (!lua_isstring(L, 1)) {
        !           170:                lua_pushstring(L, "file_isreg: argument has to be a string");
        !           171:                lua_error(L);
        !           172:        }
        !           173: 
        !           174:        if (-1 == stat(lua_tostring(L, 1), &st)) {
        !           175:                lua_pushnil(L);
        !           176:                return 1;
        !           177:        }
        !           178: 
        !           179:        lua_pushnumber(L, S_ISDIR(st.st_mode));
        !           180: 
        !           181:        return 1;
        !           182: }
        !           183: 
        !           184: 
        !           185: 
        !           186: #ifdef HAVE_MEMCACHE_H
        !           187: int f_memcache_exists(lua_State *L) {
        !           188:        char *r;
        !           189:        int n = lua_gettop(L);
        !           190:        struct memcache *mc;
        !           191: 
        !           192:        if (!lua_islightuserdata(L, lua_upvalueindex(1))) {
        !           193:                lua_pushstring(L, "where is my userdata ?");
        !           194:                lua_error(L);
        !           195:        }
        !           196: 
        !           197:        mc = lua_touserdata(L, lua_upvalueindex(1));
        !           198: 
        !           199:        if (n != 1) {
        !           200:                lua_pushstring(L, "expected one argument");
        !           201:                lua_error(L);
        !           202:        }
        !           203: 
        !           204:        if (!lua_isstring(L, 1)) {
        !           205:                lua_pushstring(L, "argument has to be a string");
        !           206:                lua_error(L);
        !           207:        }
        !           208: 
        !           209:        if (NULL == (r = mc_aget(mc,
        !           210:                                 (char*) lua_tostring(L, 1), lua_strlen(L, 1)))) {
        !           211: 
        !           212:                lua_pushboolean(L, 0);
        !           213:                return 1;
        !           214:        }
        !           215: 
        !           216:        free(r);
        !           217: 
        !           218:        lua_pushboolean(L, 1);
        !           219:        return 1;
        !           220: }
        !           221: 
        !           222: int f_memcache_get_string(lua_State *L) {
        !           223:        char *r;
        !           224:        int n = lua_gettop(L);
        !           225: 
        !           226:        struct memcache *mc;
        !           227: 
        !           228:        if (!lua_islightuserdata(L, lua_upvalueindex(1))) {
        !           229:                lua_pushstring(L, "where is my userdata ?");
        !           230:                lua_error(L);
        !           231:        }
        !           232: 
        !           233:        mc = lua_touserdata(L, lua_upvalueindex(1));
        !           234: 
        !           235: 
        !           236:        if (n != 1) {
        !           237:                lua_pushstring(L, "expected one argument");
        !           238:                lua_error(L);
        !           239:        }
        !           240: 
        !           241:        if (!lua_isstring(L, 1)) {
        !           242:                lua_pushstring(L, "argument has to be a string");
        !           243:                lua_error(L);
        !           244:        }
        !           245: 
        !           246:        if (NULL == (r = mc_aget(mc,
        !           247:                                 (char*) lua_tostring(L, 1), lua_strlen(L, 1)))) {
        !           248:                lua_pushnil(L);
        !           249:                return 1;
        !           250:        }
        !           251: 
        !           252:        lua_pushstring(L, r);
        !           253: 
        !           254:        free(r);
        !           255: 
        !           256:        return 1;
        !           257: }
        !           258: 
        !           259: int f_memcache_get_long(lua_State *L) {
        !           260:        char *r;
        !           261:        int n = lua_gettop(L);
        !           262: 
        !           263:        struct memcache *mc;
        !           264: 
        !           265:        if (!lua_islightuserdata(L, lua_upvalueindex(1))) {
        !           266:                lua_pushstring(L, "where is my userdata ?");
        !           267:                lua_error(L);
        !           268:        }
        !           269: 
        !           270:        mc = lua_touserdata(L, lua_upvalueindex(1));
        !           271: 
        !           272: 
        !           273:        if (n != 1) {
        !           274:                lua_pushstring(L, "expected one argument");
        !           275:                lua_error(L);
        !           276:        }
        !           277: 
        !           278:        if (!lua_isstring(L, 1)) {
        !           279:                lua_pushstring(L, "argument has to be a string");
        !           280:                lua_error(L);
        !           281:        }
        !           282: 
        !           283:        if (NULL == (r = mc_aget(mc,
        !           284:                                 (char*) lua_tostring(L, 1), lua_strlen(L, 1)))) {
        !           285:                lua_pushnil(L);
        !           286:                return 1;
        !           287:        }
        !           288: 
        !           289:        lua_pushnumber(L, strtol(r, NULL, 10));
        !           290: 
        !           291:        free(r);
        !           292: 
        !           293:        return 1;
        !           294: }
        !           295: #endif
        !           296: 
        !           297: #endif

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>