1#include "base.h" 2#include "log.h" 3#include "buffer.h" 4 5#include "plugin.h" 6 7#include <ctype.h> 8#include <stdlib.h> 9#include <string.h> 10#include <dlinklist.h> 11 12#if EMBEDDED_EANBLE 13#ifndef APP_IPKG 14#include "disk_share.h" 15#endif 16#endif 17 18#define DBE 0 19 20typedef struct { 21 array *access_deny; 22} plugin_config; 23 24typedef struct { 25 PLUGIN_DATA; 26 27 plugin_config **config_storage; 28 29 plugin_config conf; 30} plugin_data; 31 32INIT_FUNC(mod_craete_captcha_image_init) { 33 plugin_data *p; 34 35 p = calloc(1, sizeof(*p)); 36 37 return p; 38} 39 40FREE_FUNC(mod_craete_captcha_image_free) { 41 plugin_data *p = p_d; 42 43 UNUSED(srv); 44 45 if (!p) return HANDLER_GO_ON; 46 47 if (p->config_storage) { 48 size_t i; 49 for (i = 0; i < srv->config_context->used; i++) { 50 plugin_config *s = p->config_storage[i]; 51 52 array_free(s->access_deny); 53 54 free(s); 55 } 56 free(p->config_storage); 57 } 58 59 free(p); 60 61 return HANDLER_GO_ON; 62} 63 64SETDEFAULTS_FUNC(mod_craete_captcha_image_set_defaults) { 65 plugin_data *p = p_d; 66 size_t i = 0; 67 68 config_values_t cv[] = { 69 { "url.access-deny", NULL, T_CONFIG_ARRAY, T_CONFIG_SCOPE_CONNECTION }, 70 { NULL, NULL, T_CONFIG_UNSET, T_CONFIG_SCOPE_UNSET } 71 }; 72 73 p->config_storage = calloc(1, srv->config_context->used * sizeof(specific_config *)); 74 75 for (i = 0; i < srv->config_context->used; i++) { 76 plugin_config *s; 77 78 s = calloc(1, sizeof(plugin_config)); 79 s->access_deny = array_init(); 80 81 cv[0].destination = s->access_deny; 82 83 p->config_storage[i] = s; 84 85 if (0 != config_insert_values_global(srv, ((data_config *)srv->config_context->data[i])->value, cv, i == 0 ? T_CONFIG_SCOPE_SERVER : T_CONFIG_SCOPE_CONNECTION)) { 86 return HANDLER_ERROR; 87 } 88 } 89 90 return HANDLER_GO_ON; 91} 92 93#define PATCH(x) \ 94 p->conf.x = s->x; 95static int mod_craete_captcha_image_patch_connection(server *srv, connection *con, plugin_data *p) { 96 size_t i, j; 97 plugin_config *s = p->config_storage[0]; 98 99 PATCH(access_deny); 100 101 /* skip the first, the global context */ 102 for (i = 1; i < srv->config_context->used; i++) { 103 data_config *dc = (data_config *)srv->config_context->data[i]; 104 s = p->config_storage[i]; 105 106 /* condition didn't match */ 107 if (!config_check_cond(srv, con, dc)) continue; 108 109 /* merge config */ 110 for (j = 0; j < dc->value->used; j++) { 111 data_unset *du = dc->value->data[j]; 112 113 if (buffer_is_equal_string(du->key, CONST_STR_LEN("url.access-deny"))) { 114 PATCH(access_deny); 115 } 116 } 117 } 118 119 return 0; 120} 121#undef PATCH 122 123URIHANDLER_FUNC(mod_craete_captcha_image_physical_handler){ 124 plugin_data *p = p_d; 125 int s_len; 126 size_t k; 127 128 if (con->mode != SMB_BASIC&&con->mode != DIRECT) return HANDLER_GO_ON; 129 if (con->uri.path->used == 0) return HANDLER_GO_ON; 130 Cdbg(DBE, "mod_create_captcha_image %s", con->request.uri->ptr); 131 if( strncmp( con->request.uri->ptr, "/GetCaptchaImage", 16 ) != 0 ) 132 return HANDLER_GO_ON; 133 134 con->http_status = 200; 135 136 response_header_overwrite(srv, con, CONST_STR_LEN("Content-Type"), CONST_STR_LEN("text/xml; charset=\"utf-8\"")); 137 138 buffer *b = chunkqueue_get_append_buffer(con->write_queue); 139 140 char* img_cap[] = { 141 "data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAHgAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAEAsLCwwLEAwMEBcPDQ8XGxQQEBQbHxcXFxcXHx4XGhoaGhceHiMlJyUjHi8vMzMvL0BAQEBAQEBAQEBAQEBAQAERDw8RExEVEhIVFBEUERQaFBYWFBomGhocGhomMCMeHh4eIzArLicnJy4rNTUwMDU1QEA/QEBAQEBAQEBAQEBA/8AAEQgAKAAoAwEiAAIRAQMRAf/EAH4AAQACAwAAAAAAAAAAAAAAAAADBQIEBgEBAQEBAAAAAAAAAAAAAAAAAQACBBAAAgIBAwMCAwcFAAAAAAAAAQIDBAUAERIhMRNBIlGBBvBhkcEyIxSxkiQ0FREAAAUDBAIDAQAAAAAAAAAAAAERISICEjIxQVFC8GFxkbEj/9oADAMBAAIRAxEAPwDUyuVykeUuRx3J0RJ5VVVlcAAOwAADaXMrlFr0GW5OC8DM5ErgsfPOu593XoANMrcrrlLitQgcieUF2afdiHbqeM4HX7hrYGUpVRQmmxsEq/x3KJvJsp88wAHkeQbdN+oJ107FEcDrVNPvkRwX81JibUyWbLmOaEmQSSHinCfn7t+g347/AC1HjcrlHsOr3J2AgssAZXI3WCRlP6vQjfXRQZl8l9OZCeWvEscO6JAOQTjsp2biyn19Ntc7jbldrDgUIEPgsncNPvsIJCR7pz37f00E5VRCZIdCVqvzyGKyuUkylOOS5O6PPErK0rkEF1BBBbTTFXK7ZSmq0IEJniAdWn3Ul16jlOR0+8aaWu02Ap2ZdvYZWPFnKXDJYnVzPLyVYEYA823AJsLv+GlyPF/x6HKxOAIG4EQISR55+p/yBt13+P5aZXG2Hylx1eABp5SA1mBTsXburSAj56kmw1+1Fj4a4illFdhwWeEk/vzt7f3PcNj3H5alJCcSGtUf3kWmJSiPpjJCOaVoSx5u0Sq49q/pQSsD/cNU+NjxYsPwsTk+CzuDAgG3gk5H/YPYfYd9X+MwmTg+nchSlh42Z2JiTmh5dFHcNsO3qdU9XAZWlYLW4khDwWVXnNENyYJB09/pv1+Hc9NZIylIbqpq/nDQuDZxBio8WMpTMdidnE8XFWgRQTzXYEiw234aaYrG2EylN2eAhZ4iQtmBjsHXsqyEn5aa012uwwh2Y9vYZXFZSTKXJI6c7o88rKyxOQQXYgghdZ2MfmY4qDV61lZI67KxSOQMpM852PEbjow001SQtBQWrLwxLHF9R/8ANnBS75vPBwBEvLjwn57eu2/Hf5awp087JYY2oLbqILIUypIQGeCRQByHcnYaaaHfELRz8MRYrFZSPKU5JKc6Ik8TMzROAAHUkkldNNNMrttAQs7ZD//Z", 142 "data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAHgAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAEAsLCwwLEAwMEBcPDQ8XGxQQEBQbHxcXFxcXHx4XGhoaGhceHiMlJyUjHi8vMzMvL0BAQEBAQEBAQEBAQEBAQAERDw8RExEVEhIVFBEUERQaFBYWFBomGhocGhomMCMeHh4eIzArLicnJy4rNTUwMDU1QEA/QEBAQEBAQEBAQEBA/8AAEQgAKAAoAwEiAAIRAQMRAf/EAHsAAQADAQEAAAAAAAAAAAAAAAADBAUCAQEBAQEBAAAAAAAAAAAAAAAAAgABBBAAAgIBBAECBAQHAAAAAAAAAQIDBAUAESESEzFBYYEiBlGRUhRxwdEyYiQVEQABAwMEAwEBAAAAAAAAAAABABECITESQVEiMvBhQnGR/9oADAMBAAIRAxEAPwCplcrlI8pcjjuToiTyqqrK4AAdgAAG0uZXKLXoFbk4Z4GZyJXBY+eddz9XPAA0ytyuuUuK1CByJ5QXZp92IduT1nA5+A1ZXLwURQsrQgMgrOYuZD0bzzqNu8jce/4/Ea6dBxXA9ZPNv7ukUn3I2LnkDXS/mhMbbyk9Ok/fqf079d/lqvjsrlWsuslywwEFk9Wlc7MsEjA8t6gjfWon3lk2pTWjFB5I5oYwNpOu0izE8eT/AAGrWYNRbVa6KkRlu1LMkhYyBvprs2x6Oo5DbE7b/HRe4MRXZNgQDGZ4s7+ysDFZXKSZSnHJcndHniVlaVyCC6gggtppirldspTVaECEzxAOrT7qS68jtORx8RppUytog5w7fXtMrHizlLhksTq5nl7KsCMAe7bgE2F3/LS5Hi/29DtYnAEDdCIEJI88/J/2Btzv+P8ALTK42w+UuOrwANPKQGswKdi7eqtICPnrRofbkmRagk0iCvBXPm8ciSMd55yAvjZvXf19PX3GpwAC6hEmUgI3/d17hMPjrdGeSSeVaUc0UsrzRLErCJZQUVllf9fJ/rwtZPHZXKNMs0yRx1rEcUXhXqqCCXswPmHPuPpHsOPXV/NY/MXaL0KdLwVYZYhXjDxguirL3Zvr2/u68H+OsSrgcnSsn93GkPevZCh5oQTvBIvA8noN+T7e+iCC5JroEyDHGIiWo5Y7qHFR4sZSmY7E7OJ4uqtAignuuwJFhtvy00xWNsJlKbs8BCzxEhbMDHYOvoqyEn5aaVMr6IMcOv17TK4rKSZS5JHTndHnlZWWJyCC7EEELqWalnIq9IVoLUbCuVkEaSKQfPOwDdR+Db6aaqsLK4vJsvCu44vuP/mzgpd83ng6AiXt16T99vfbfrv8tcU6Wckss1qC04FeyqmVJDsXgkUAdh7nYaaaq16racXz8KixWKykeUpySU50RJ4mZmicAAOpJJK6aaauWWllnDD67L//2Q==", 143 "data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAHgAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAEAsLCwwLEAwMEBcPDQ8XGxQQEBQbHxcXFxcXHx4XGhoaGhceHiMlJyUjHi8vMzMvL0BAQEBAQEBAQEBAQEBAQAERDw8RExEVEhIVFBEUERQaFBYWFBomGhocGhomMCMeHh4eIzArLicnJy4rNTUwMDU1QEA/QEBAQEBAQEBAQEBA/8AAEQgAKAAoAwEiAAIRAQMRAf/EAH0AAQADAQEAAAAAAAAAAAAAAAACBAUBAwEAAwEBAAAAAAAAAAAAAAAAAAECAwQQAAICAQMCBAUDBQAAAAAAAAECAwQFABESITFBIhMGUWGBMhSRQiShUiMVFhEAAQMCBQUBAAAAAAAAAAAAAQARAiESMUFRIjJhcYGxQvD/2gAMAwEAAhEDEQA/AKmVyuUjylyOO5OiJPKqqsrgAB2AAAbXbeUyogoencsc5IGLcZX3ZvXnXc7HqdgBrmVuV1ylxWoQORPKC7NPuxDt1PGcDr8hr3/3P4Ax9qvTgWUV34EmY8N5p1IAMp6ePX499dOQ2rgesnn71Ull9yJirEkj3VcTQlXYyg+nwn5kE/t347/TVbG5XKPYdXuTsBBZYAyuRusEjKfu8CN9bNH3dkZojK8URP5MEJVQ/wBswlLbbuevkG2uZf8ACqZ+WOKpCS9WeV33kDcjBKWGySKvmA69N+vx66T4gxHhWwaMozLAgV7rHxWVykmUpxyXJ3R54lZWlcgguoIILaaYq5XbKU1WhAhM8QDq0+6kuvUcpyOnzGmnS7DJQ5s5fXVMrHizlLhksTq5nl5KsCMAebbgE2F3/TUrKYkQ48yT2CghOwECbsv5E2+/8jynfcePx+Wo5XG2Hylx1eABp5SA1mBTsXburSAj66s/8/evV6iV2haSGsx4CaNi38ib7eDN/d37eG++hww3IYkyaHvVauJu+144pJKkbVSJYlWSyOarMyy+k2wdu3m+Gql7HrVzMpv25prE1ew/qCBAhQwSqeP+f9o7Db+nXXlW9q5lqUtWWERNLPA3JnQgIizq7eVj25jWhmQtnIRRVpYZEq1LMTMZ4g3NoZF2Kl+XTbqdumopcWLuC+a0qYC6LMQ1Gz0WDio8WMpTMdidnE8XFWgRQTzXYEiw236aaYrG2EylN2eAhZ4iQtmBjsHXsqyEn6aaul2OSzY2cfrqmVxWUkylySOnO6PPKyssTkEF2IIIXU58fmY4se1etZSWOBlZo45Ayn1522PEbjoQdNNG5hgjY8uX4qwR7mlxdiOZbrOZoQqssvIpwn5+G5G/Hf6aqY3FZRLDs9OdQYLKgmJwN2gkVR9viTtppoqxa1Ms8Xv890xWKykeUpySU50RJ4mZmicAAOpJJK6aaaN12WCWyz65L//Z", 144 "data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAHgAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAEAsLCwwLEAwMEBcPDQ8XGxQQEBQbHxcXFxcXHx4XGhoaGhceHiMlJyUjHi8vMzMvL0BAQEBAQEBAQEBAQEBAQAERDw8RExEVEhIVFBEUERQaFBYWFBomGhocGhomMCMeHh4eIzArLicnJy4rNTUwMDU1QEA/QEBAQEBAQEBAQEBA/8AAEQgAKAAoAwEiAAIRAQMRAf/EAHoAAQADAQEAAAAAAAAAAAAAAAACBAUBBgEBAQADAAAAAAAAAAAAAAAAAgABAwQQAAICAgIBAgQGAwAAAAAAAAECAwQRBQAhEjETQVFhInGBkUIjFKE0BhEAAQMDBAIDAQAAAAAAAAAAAQARAiExEkFhIjLwQlFxseH/2gAMAwEAAhEDEQA/AKm12u0j2lyOO5OiJPKqqsrgAB2AAAbi5tdotegy3JwXgZnIlcFj7865P3d9ADja3K67S4rUIHInlBdmnyxDt2fGcDv6Di5crivQJoQMGgYgFp8KPfnGBicfLPfOmjCi4CS8uX78qdbYbmbXWPatWZJhPAE8ZJGfxKWCwGDnH2jP4c5R2O4FuSKxashlgsko8kmQywSMpwx9QcEc9JpVTV0q871Y4LGynijEcZkPireXiW92RyD4+XpzM2NmFf8Ao7sZqQsywzkyky+TYqucHxlC9+nQ/wA98LgmQZMxIESZVcBvuqzNVtdpJtKcclyd0eeJWVpXIILqCCC3HGquV22lNVoQITPEA6tPlSXXseU5HX1HHFTK2iDnDt7bptY9WdpcMlidXM8vkqwIwB82yATYXP6c19bp6FmKnfkeWSnSgZirxBRJiadvH7ZH7z+3B6x33jmRtdbYfaXHV4AGnlIDWYFOC7eqtICPz5fS1vaFGlXpWoIoxEzMpmqkFzNN2DIxz1j06/PPMGwYpRYSkZRLbDdaEM67G/8A23NkZuVTHG8AUIEWfxXPun7ez5N8/h31V2VeqN/clkedWaKcHECmP/VfPjIZhk+Pfp9Pry1qdlvpSv8AZtQyA2YEPjJWb+NhL7i/xn1OFx8fl8eR20uzsbWzVeeE0o45zFEZYFZWNWRQSPISfuPr+Ppw1BNuqZYxBaR56j+rC1UerG0pmOxOzieLxVoEUE+a4BIsNj9OONVrbCbSm7PAQs8RIWzAxwHX0VZCT+XHHTK+i1McOvtum11W0k2lySOnO6PPKyssTkEF2IIIXi5qto1egq05yUgZXAiclT787YP29dEHjjlyYWUcHl28KlBrNvHrZwlSwk39iu6YjcPhUsZZes9ZHFHXbg25JbFWyWaCyC7xyZLNBIqjLD1JwBxxyrWyhjx7eFR1Wq2ke0pySU50RJ4mZmicAAOpJJK8cccuWWllcMPbsv/Z", 145 "data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAHgAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAEAsLCwwLEAwMEBcPDQ8XGxQQEBQbHxcXFxcXHx4XGhoaGhceHiMlJyUjHi8vMzMvL0BAQEBAQEBAQEBAQEBAQAERDw8RExEVEhIVFBEUERQaFBYWFBomGhocGhomMCMeHh4eIzArLicnJy4rNTUwMDU1QEA/QEBAQEBAQEBAQEBA/8AAEQgAKAAoAwEiAAIRAQMRAf/EAHkAAQEBAQEAAAAAAAAAAAAAAAAEBQIDAQADAQEAAAAAAAAAAAAAAAAAAQIDBBAAAgICAgECBAUFAAAAAAAAAQIDBBEFABIhMUGBIhMGUWGRIxRx0TJCFREAAgEDAgcBAAAAAAAAAAAAAREAIQISMUHwUWFxIjJCgf/aAAwDAQACEQMRAD8Ak2u12ke0uRx3J0RJ5VVVlcAAOwAADc6sbHcPDr1gtWWklgYkJJIWdhPOM+DknC852tyuu0uK1CByJ5QXZp8sQ7eT1nA8/kOaeoswtstMq1IULwuVZTLlP3bAwvaUj2/2B9f6Y6TQArhThDNxGWpW/OSRy/cf/NnJe79b68HQky9uvSfvj3xnrn4c8qV/dJbeKzZtKf49hwkjyA5WCVlbDH2IyObl/wC6tjVN4Rxwn+LZSCPsreVcTElsOPP7Y5kx7x9lfae1UgaYVrA7j6qnqsErdcCbHn09M8QaLtEZxBtAvub37ybVbXaSbSnHJcndHniVlaVyCC6gggtxxqrldtpTVaECEzxAOrT5Ul18jtOR4/MccdMtNpLOHt9dY2serO0uGSxOrmeXsqwIwB7tkAmwuf05XXtavXz6q40s8ghhcoghQFgZrA8n6/y+Sfx/tJtdbYfaXHV4AGnlIDWYFOC7eqtICPjz2fR3rkdGGAwtIlZ/lE8TFsTzN8vVzn19fT2zwogzAZZXK2u2vObLbn7Wu15pZqbrE80azsUVSZHEpVyUfPgK368jt6TX6vYnrPL9OetZeICNXAT6Egb5/qrkgeR8v4effnlV+1Ny1OWrLCITLPA/ZnRgERZw7fIx9O45obkLYvwwVpIXjqVLMRYzxBu7QSJgqXDeMDJx49+RQFWmlXNKm132osKi3rMHVR6sbSmY7E7OJ4uqtAignuuASLDY/TjjVa2wm0puzwELPESFswMcB19FWQk/Djl0y12maOHr9dY2uq2km0uSR053R55WVlicgguxBBC87n1+5ji17161lJYoGBaOOQMjfXnbBKjIOCDxxw8kNIeDu9uDKCPuaXV2I5lus5mhCqyy9inSfv7ZIz1z8OSa3VbRLDs9OdQYLKgmJwMtBIqj/H3JxxxwqisYyna8/wB7xqtVtI9pTkkpzoiTxMzNE4AAdSSSV4444eWW2kXhh9e0/9k=", 146 "data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAHgAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAEAsLCwwLEAwMEBcPDQ8XGxQQEBQbHxcXFxcXHx4XGhoaGhceHiMlJyUjHi8vMzMvL0BAQEBAQEBAQEBAQEBAQAERDw8RExEVEhIVFBEUERQaFBYWFBomGhocGhomMCMeHh4eIzArLicnJy4rNTUwMDU1QEA/QEBAQEBAQEBAQEBA/8AAEQgAKAAoAwEiAAIRAQMRAf/EAHsAAQACAwEAAAAAAAAAAAAAAAAEBQECBgMBAAMBAQAAAAAAAAAAAAAAAAABAgQDEAACAgEEAQIGAgMAAAAAAAABAgMEBQARIRIxQSJRYYGhEwaRMiMzFBEAAQIFAwQDAAAAAAAAAAAAAQARITECEiJBYTJRcUID8JGh/9oADAMBAAIRAxEAPwCJlcrlI8pcjjuToiTyqqrK4AAdgAAG0uZXKLXoMtycF4GZyJXBY/nnXc+7ngAaZW5XXKXFahA5E8oLs0+7EO3J6zgc/IasKEFfJ2cZVajD+N67vIQ0/sjWefcL/m9T8d+T8ONaYAAkLBkaqgKp9+qi1LeetYyw1ea3PKs8ABjaR2C9J+23Uk7b9d/prWndzkVt4rdi0jCvZYJK8gO6wSsrbMfQjcauLf7O1WCzHjYYlrU5oq8QIbZgyzF29jL6x8arY89Lk7ne3VgaSOtYVXH5Qeoglbr/ALdufB9dKMcQyosLQKyT+TUXFZXKSZSnHJcndHniVlaVyCC6gggtppirldspTVaECEzxAOrT7qS68jtORx8xppwulopc2cvLdMrHizlLhksTq5nl7KsCMAe7bgE2F3/jXR/q8VTvC1eWRnFMqpeNU9rWZjvxI/PYePv6DnMrjbD5S46vAA08pAazAp2Lt5VpAR9dXOCZsdaotPJAsL1Hikb/AKIeCbEzqRtJ7vhxv9tTVxmr9cPYSaWjOPVekGV/WalOVIaplrwyxxys8SSNMzLL1fdpBv8A1Pnxv4540uYrExvFlKjPDXuV7G0SIHA3ryMx5kXr7d/b8RtxqPP+p5SKC3VrxiWN7ELwv3Ubxqs4JPYjx3G/21YX4RDVqYmKWKSSrXsfnJljQhzWkUe13Dbe7fxwOTpQeBnP6VNURlSAzNDV9FzuKjxYylMx2J2cTxdVaBFBPddgSLDbfxppisbYTKU3Z4CFniJC2YGOwdfCrISfppq4XT0XJjZx8t0yuKykmUuSR053R55WVlicgguxBBC6XMVlGr0FWnOSkDK4ETkqfzztsfbxwQdNNGTCSDY9XL4VKgT9lixU0SJdRhNCI1CyhhH0m79fXrv132+Wo2OxeVWzI8lOwO0FkdmiflmglUDcjySdNNEcmtTxeh79n7rGKxWUjylOSSnOiJPEzM0TgAB1JJJXTTTRldpJLCzy5L//2Q==", 147 "data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAHgAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAEAsLCwwLEAwMEBcPDQ8XGxQQEBQbHxcXFxcXHx4XGhoaGhceHiMlJyUjHi8vMzMvL0BAQEBAQEBAQEBAQEBAQAERDw8RExEVEhIVFBEUERQaFBYWFBomGhocGhomMCMeHh4eIzArLicnJy4rNTUwMDU1QEA/QEBAQEBAQEBAQEBA/8AAEQgAKAAoAwEiAAIRAQMRAf/EAHoAAQACAwEAAAAAAAAAAAAAAAADBQECBAYBAQEBAAAAAAAAAAAAAAAAAAACBBAAAgICAgAEBAUFAQAAAAAAAQIDBBEFABIhMYETQVFhBnGRIjIUocEjJDQVEQABAwMEAwEAAAAAAAAAAAABABECITESQWEiMvBRQrH/2gAMAwEAAhEDEQA/AOTa7XaR7S5HHcnREnlVVWVwAA7AAANyWa5vZa9Jq09uQmAtKY3kY59+dQW6n5Lj05FtblddpcVqEDkTyguzT5Yh28T1nA8foOdkf3HY1deoaVaCMTwZYH3WACT2AAO0p+ZPr+HNOgaKwA8pPMts/tRxy/cf/mzkvd9734OhJl7dek/fHxxnrn05pTt76Odv5U1tEMFkr7ryAdlgkYEdj5gjPLaj917i7ERHDB75sQQIOr9cSrKWJ/yfD2x/Xku920b7Y0PZjmWtWsMzMXGHNeRmX9DqMFcA/Hzxg8ly5BiFbRYSE5UIFdarz+q2u0k2lOOS5O6PPErK0rkEF1BBBbjjVXK7bSmq0IEJniAdWnypLr4jtOR4fUccqmVtFDnDt9bptY9WdpcMlidXM8vZVgRgD3bIBNhc/lxcj1f8eh2sTgCBuhECEke/P4n/AGBjxz8/7cbXW2H2lx1eABp5SA1mBTgu3mrSAj15m3rLL16Cq0GVgZTmzAMkzzn9OZPHz+H4efFGFUILy4/vtXP2suuqVLux7yyQ1yr9pI1jw6JIMJ1lkycSY+Hnypqvr7F+ew1md5ZYrTvmBFH6oZSx/wCg+Q8h6eHLna66Sl9swayF40nLo1oPLHHnuHfzkZR+5cD54+h5Ra3W2EsOS8BBgsjwswMctBIo8FkPz9PM8kMcpPdXIEYQxtU3uU1UerG0pmOxOzieLqrQIoJ7rgEiw2Py441WtsJtKbs8BCzxEhbMDHAdfJVkJPpxyqZX0UMcOv1um11W0k2lySOnO6PPKyssTkEF2IIIXmber2vsUPbp2O8cBDdYnyre/OwzgeBwQeOOOTCyHB5dvCtjQ3U2tsCetakmaeuV7pIzlVSxnHYZwOw/Pmmt1W0Sw7PTnUGCyoJicDLQSKo/b8SccccVY2Ti8e3hTVaraR7SnJJTnREniZmaJwAA6kkkrxxxxyy0snDD67L/2Q==", 148 "data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAHgAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAEAsLCwwLEAwMEBcPDQ8XGxQQEBQbHxcXFxcXHx4XGhoaGhceHiMlJyUjHi8vMzMvL0BAQEBAQEBAQEBAQEBAQAERDw8RExEVEhIVFBEUERQaFBYWFBomGhocGhomMCMeHh4eIzArLicnJy4rNTUwMDU1QEA/QEBAQEBAQEBAQEBA/8AAEQgAKAAoAwEiAAIRAQMRAf/EAHsAAQACAwAAAAAAAAAAAAAAAAAEBQEDBgEAAwEBAAAAAAAAAAAAAAAAAAECAwQQAAICAQQABAUEAwAAAAAAAAECAwQFABEhEjGBExRRYSJCBkGRMiPwUhYRAAEDAwMEAwAAAAAAAAAAAAEAEQIhMRJBIjJRYXFC8IGh/9oADAMBAAIRAxEAPwCJlcrlI8pcjjuToiTyqqrK4AAdgAAG0uZXKLXoMtycF4GZyJXBY+vOu5+rngAaZW5XXKXFahA5E8oLs0+7EO3J6zgc/Iat8GtK7dx0c1OFQKryx7GU9WWxMAoDysCPu5B10lgAWXCATIgSv56qBBL+RyYqeVXuuxmhMbgyk+n0n79T/rv138taMdlcq1l1kuWGAgsnq0rnZlgkYHlvEEb6urH5Zk41tsIIg9eykCIwf+LCf+Q7jn6B/m2tmc9pDk45PaRGxYqWZJuxcMOsEnB9ORV52Kk7b/PUvcGIr0VYihjM7SHfyqDFZXKSZSnHJcndHniVlaVyCC6gggtppirldspTVaECEzxAOrT7qS68jtORx8xpqqZW0UOcOXt3TKx4s5S4ZLE6uZ5eyrAjAHu24BNhd/21YY+ilmzjBj7U8c8cDOkvoJsqCefdn/v45O23O/ntqvyuNsPlLjq8ADTykBrMCnYu3irSAjz10P45GK/owTSxI81Qxxus0Tt39xO2yBHJbhvEccbeOlItEMVUIvMgxYPevVTmyOAWd2naJrMUkSTWfT2j9x1l9NjyfDZud+Pj8KfJUPb5ZpshblmlsVrJR0gUR9BBIGC/3/aD4bc/HnfUb/lc0lKzWEIdmsQsjB06siLOrNywP3jx51a5OErDSx4liknq1bCzFpY1YE1nQfS7Btj8f0HJ1NAaF1ocpDdHFiCL3f8AVzmKjxYylMx2J2cTxdVaBFBPddgSLDbftppisbYTKU3Z4CFniJC2YGOwdfBVkJPlpq6ZX0WLHDj7d0yuKykmUuSR053R55WVlicgguxBBC6zcxWVNegEp2C0cDBgIn3VvXnbY/TwdiDppo3MLIODy5fCpUf/AE4xc6EXRIJoRGNpe/p9Zu+369d+u/lqLjsXlhakeWnYHaCyOzRPyzQSqBuR4knbTTRWrYp0eL5/flYxWKykeUpySU50RJ4mZmicAAOpJJK6aaaN2WlktmHtyX//2Q==", 149 "data:image/jpeg;base64,/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAHgAA/+4ADkFkb2JlAGTAAAAAAf/bAIQAEAsLCwwLEAwMEBcPDQ8XGxQQEBQbHxcXFxcXHx4XGhoaGhceHiMlJyUjHi8vMzMvL0BAQEBAQEBAQEBAQEBAQAERDw8RExEVEhIVFBEUERQaFBYWFBomGhocGhomMCMeHh4eIzArLicnJy4rNTUwMDU1QEA/QEBAQEBAQEBAQEBA/8AAEQgAKAAoAwEiAAIRAQMRAf/EAHcAAQEBAQEAAAAAAAAAAAAAAAAFBAMCAQADAQEAAAAAAAAAAAAAAAAAAQIDBBAAAgIBAwMDBAMBAAAAAAAAAQIDBAUAERIhMSITFAZBUWGBkTJCUhEAAQMDAwQDAAAAAAAAAAAAAQARAiExEkEiMlFhcULwgbH/2gAMAwEAAhEDEQA/AMmVyuUjylyOO5OiJPKqqsrgAB2AAAbS5lcotegy3JwXgZnIlcFj6867ny69ABplbldcpcVqEDkTyguzT7sQ7dTxnA6/gauYOGjb9vZnpxBKlUyqFMhKt7ifYAPIwI8SeoPX666CQACy4QDKUgJX89VLim+Rtip5ed0t60JR95SfT4T8+J/5347/AK1nxuVyj2XV7k7AQWW2aVz1WCRlPVvoRvqsvzPItUntCGEGOaKNV2f+kizMd/Pv4DWjKJTSxXyMNSIrkKlmVmYyBtxXd9iEkVfIHY9N+/XfSe4MRVUwLGMycWd/Kg4rK5STKU45Lk7o88SsrSuQQXUEEFtNMVcrtlKarQgQmeIB1afdSXXqOU5HT8jTVUytooc4cvbumVjxZylwyWJ1czy8lWBGAPNtwCbC7/xqvisni8Z7RZZZXgsVjGeUSqNvcT+T8ZWI7sNgD9/xqRlcbYfKXHV4AGnlIDWYFOxdu6tICP3rrJhL9uKjDX9KSRKzeCzxEnaeZvHZzv379tIsQASmMhKREa/fVVW+OYlKc+2UjFOSaKXn4txWNZQE5c+pIf7fTtrblWx7U8eqNJHAa1k19kDH0hVYdeTp/k7j7/jvqRR+KZRqsta2grI88MjOXRto41nDkcGbr5jWnJt7zJLHUeA0qtSxDDtYh3JavIu/H1NwOw6/bc9NTc8nZ/xaCkeGLsGr1UbFR4sZSmY7E7OJ4uKtAignmuwJFhtv400xWNsJlKbs8BCzxEhbMDHYOvZVkJP601dMr6LJjhx9u6ZXFZSTKXJI6c7o88rKyxOQQXYgghde56Gaiix7161lJYoGUtHHIGQmedtiVG46EHTTRVhZG15cvhXaSP5HZxU8dmO5I5mh4o6SElOE/Ppt2347/rWbG4rKJYdnpzqDBZUExOBu0EiqP6/UnbTTRVi2KNrxfN+/lMVispHlKcklOdESeJmZonAADqSSSummmjdlpZGzD25L/9k=" 150 }; 151 152 int captcha_num[4]; 153 154 captcha_num[0] = (rand() % 9); 155 captcha_num[1] = (rand() % 9); 156 captcha_num[2] = (rand() % 9); 157 captcha_num[3] = (rand() % 9); 158 159 char captcha_code[10]; 160 sprintf(captcha_code,"%d%d%d%d", captcha_num[0]+1, captcha_num[1]+1, captcha_num[2]+1, captcha_num[3]+1); 161 162 buffer_copy_string_len(b, CONST_STR_LEN("<?xml version=\"1.0\" encoding=\"utf-8\"?>")); 163 buffer_append_string_len(b,CONST_STR_LEN("<result>")); 164 buffer_append_string_len(b,CONST_STR_LEN("<enable>")); 165 166 #if EMBEDDED_EANBLE 167 #ifndef APP_IPKG 168 buffer_append_string(b,nvram_get_enable_webdav_captcha()); 169 #else 170 char *enable_webdav_captcha = nvram_get_enable_webdav_captcha(); 171 buffer_append_string(b,enable_webdav_captcha); 172 free(enable_webdav_captcha); 173 #endif 174 #else 175 buffer_append_string(b,"0"); 176 #endif 177 178 buffer_append_string_len(b,CONST_STR_LEN("</enable>")); 179 buffer_append_string_len(b,CONST_STR_LEN("<img1>")); 180 buffer_append_string(b,img_cap[captcha_num[0]]); 181 buffer_append_string_len(b,CONST_STR_LEN("</img1>")); 182 buffer_append_string_len(b,CONST_STR_LEN("<img2>")); 183 buffer_append_string(b,img_cap[captcha_num[1]]); 184 buffer_append_string_len(b,CONST_STR_LEN("</img2>")); 185 buffer_append_string_len(b,CONST_STR_LEN("<img3>")); 186 buffer_append_string(b,img_cap[captcha_num[2]]); 187 buffer_append_string_len(b,CONST_STR_LEN("</img3>")); 188 buffer_append_string_len(b,CONST_STR_LEN("<img4>")); 189 buffer_append_string(b,img_cap[captcha_num[3]]); 190 buffer_append_string_len(b,CONST_STR_LEN("</img4>")); 191 buffer_append_string_len(b,CONST_STR_LEN("<code>")); 192 buffer_append_string(b,captcha_code); 193 buffer_append_string_len(b,CONST_STR_LEN("</code>")); 194 buffer_append_string_len(b,CONST_STR_LEN("</result>")); 195 196 con->file_finished = 1; 197 return HANDLER_FINISHED; 198 199 /* not found */ 200 //return HANDLER_GO_ON; 201} 202#ifndef APP_IPKG 203int mod_create_captcha_image_plugin_init(plugin *p); 204int mod_create_captcha_image_plugin_init(plugin *p) { 205 p->version = LIGHTTPD_VERSION_ID; 206 p->name = buffer_init_string("create_captcha_image"); 207 208 p->init = mod_craete_captcha_image_init; 209 p->set_defaults = mod_craete_captcha_image_set_defaults; 210 p->handle_physical = mod_craete_captcha_image_physical_handler; 211 p->cleanup = mod_craete_captcha_image_free; 212 213 p->data = NULL; 214 215 return 0; 216} 217#else 218int aicloud_mod_create_captcha_image_plugin_init(plugin *p); 219int aicloud_mod_create_captcha_image_plugin_init(plugin *p) { 220 p->version = LIGHTTPD_VERSION_ID; 221 p->name = buffer_init_string("create_captcha_image"); 222 223 p->init = mod_craete_captcha_image_init; 224 p->set_defaults = mod_craete_captcha_image_set_defaults; 225 p->handle_physical = mod_craete_captcha_image_physical_handler; 226 p->cleanup = mod_craete_captcha_image_free; 227 228 p->data = NULL; 229 230 return 0; 231} 232#endif