Annotation of embedaddon/lighttpd/src/mod_cml_funcs.c, revision 1.1.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>