Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- static void php_ldap_do_escape(const unsigned char *value, const int valuelen, const unsigned char *map, unsigned char **result, int *resultlen)
- {
- char hex[] = "0123456789abcdef";
- int i, p;
- size_t len;
- for (i = len = 0; i < valuelen; i++) {
- len += map[value[i]] ? 3 : 1;
- }
- (*result) = (unsigned char *) malloc(len + 1);
- (*resultlen) = (int) len;
- for (i = p = 0; i < valuelen; i++) {
- if (map[value[i]]) {
- (*result)[p++] = 92;
- (*result)[p++] = hex[value[i] >> 4];
- (*result)[p++] = hex[value[i] & 0x0f];
- } else {
- (*result)[p++] = value[i];
- }
- }
- (*result)[p] = '\0';
- }
- static void php_ldap_make_escape_map(unsigned char **map, const unsigned char *ignores, const int ignoreslen, const unsigned char *chars, const int charslen)
- {
- int i;
- if (!*map) {
- (*map) = (unsigned char *)calloc(256, sizeof(char));
- if (!chars) {
- for (i = 0; i < 256; i++) {
- (*map)[i] = 1;
- }
- return;
- }
- }
- if (chars) {
- for (i = 0; i < charslen; i++) {
- (*map)[chars[i]] = 1;
- }
- }
- if (ignores) {
- for (i = 0; i < ignoreslen; i++) {
- (*map)[ignores[i]] = 0;
- }
- }
- }
- int main(char **argv) {
- unsigned char *value, *ignores, *map, *result;
- int valuelen, ignoreslen, resultlen;
- long flags;
- value = "#()*+=<foo>=+*()#";
- valuelen = strlen(value)+1;
- ignores = "()<>=";
- ignoreslen = strlen(ignores)+1;
- map = NULL;
- php_ldap_make_escape_map(&map, ignores, ignoreslen - 1, "\\*()\0", sizeof("\\*()\0") - 1);
- php_ldap_make_escape_map(&map, ignores, ignoreslen - 1, "\\,=+<>;\"#", sizeof("\\,=+<>;\"#") - 1);
- php_ldap_make_escape_map(&map, ignores, ignoreslen - 1, NULL, 0);
- php_ldap_do_escape(
- value, valuelen - 1, map, &result, &resultlen);
- printf("result: %s\n", result);
- free(map);
- free(result);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement