Репозитории ALT
Группа :: Система/Основа
Пакет: nss_ldap
Главная Изменения Спек Патчи Sources Загрузить Gear Bugs and FR Repocop
Патч: nss_ldap-210-explode_rdn-alt.patch
Скачать
Скачать
--- nss_ldap-210/util.c.original 2003-07-21 15:02:54 +0300
+++ nss_ldap-210/util.c 2003-09-04 19:53:42 +0300
@@ -367,6 +367,7 @@
if (strncasecmp (*p, rdnava, rdnavalen) == 0)
{
char *r = *p + rdnavalen;
+ int i,j;
rdnlen = strlen (r);
if (*buflen <= rdnlen)
@@ -376,7 +377,32 @@
return NSS_TRYAGAIN;
}
rdnvalue = *buffer;
- strncpy (rdnvalue, r, rdnlen);
+ i = 0; j = 0;
+ while (i < rdnlen) {
+ if (*(r+i) == '\\') {
+ unsigned char ch1 = *(r+i+1);
+ int code1 = (((ch1 >= '0') && (ch1 <= '9')) ? ch1-'0' : -1) +
+ (((ch1 >= 'A') && (ch1 <= 'F')) ? ch1-'A'+10 : -1) +
+ (((ch1 >= 'a') && (ch1 <= 'f')) ? ch1-'a'+10 : -1) + 3;
+ if (code1 != 0) {
+ unsigned char ch2 = *(r+i+2);
+ int code2 = (((ch2 >= '0') && (ch2 <= '9')) ? ch2-'0' : -1) +
+ (((ch2 >= 'A') && (ch2 <= 'F')) ? ch2-'A'+10 : -1) +
+ (((ch2 >= 'a') && (ch2 <= 'f')) ? ch2-'a'+10 : -1) + 3;
+ if (code2 != 0) {
+ *(rdnvalue+j) = ((code1-1) << 4)+(code2-1);
+ i += 3; j++;
+ continue;
+ }
+ }
+ *(rdnvalue+j) = ch1;
+ i+=2; j++;
+ continue;
+ }
+ *(rdnvalue+j) = *(r+i);
+ i++; j++;
+ }
+ rdnlen = j;
break;
}
}