PERFORCE change 103527 for review

Michael Bushkov bushman at FreeBSD.org
Wed Aug 9 18:45:04 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=103527

Change 103527 by bushman at bushman_nss_ldap_cached on 2006/08/09 18:44:06

	Strings unescaping routine added, a bug in groups and in services fixed.

Affected files ...

.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldap_group.c#10 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldap_serv.c#8 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldapsearch.c#10 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldaputil.c#11 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldaputil.h#11 edit
.. //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/nss_ldap.c#11 edit

Differences ...

==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldap_group.c#10 (text+ko) ====


==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldap_serv.c#8 (text+ko) ====

@@ -248,10 +248,10 @@
 
 	if (proto != NULL)	
 	    __nss_ldap_format_filter(fmt, NSS_LDAP_FILTER_ARGS_INT_STR, filter,
-		sizeof(filter), port, proto);
+		sizeof(filter), htons(port), proto);
 	else
 	    __nss_ldap_format_filter(fmt, NSS_LDAP_FILTER_ARGS_INT_ANY, filter,
-		sizeof(filter), port);
+		sizeof(filter), htons(port));
 	
 	memset(&mdata, 0, sizeof(struct services_mdata));
 	mdata.serv = serv;
@@ -262,6 +262,7 @@
 		(void *)&mdata, buffer, bufsize,
 		nss_ldap_parse_servent);
 	
+	printf("== %d\n", rv);
 	if (rv == NS_SUCCESS)
 		*result = serv;
 	
@@ -288,7 +289,7 @@
 	rv = __nss_ldap_getent(NSS_LDAP_MAP_SERVICES, filter, (void *)&mdata, 
 		buffer, bufsize, nss_ldap_parse_servent,
 		nss_ldap_destroy_servent);
-	
+		
 	if (rv == NS_SUCCESS)
 		*result = serv;
 	

==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldapsearch.c#10 (text+ko) ====

@@ -324,8 +324,8 @@
 	memcpy(buf, cstr, size + 1);
 	*str = buf;
 	*len = size + 1;
-	
-	return (NSS_LDAP_SUCCESS);	
+			
+	return (__nss_ldap_unescape_string(buf, buf, size + 1));	
 }
 
 int

==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldaputil.c#11 (text+ko) ====

@@ -91,6 +91,69 @@
 }
 
 int
+__nss_ldap_unescape_string(char const *str, char *buffer, size_t bufsize)
+{
+	char cmp_buf[3];
+	char const *sp;
+	char *bp;
+	int prev_slash, slash_mod;
+
+	cmp_buf[2] = '\0';
+	prev_slash = 0;
+	slash_mod = 0;
+	sp = str;
+	bp = buffer;	
+	do {
+		if (*sp == '\\') {
+			if (prev_slash == 0) {
+				prev_slash = 1;
+				slash_mod = 1;
+			} else {
+				if (slash_mod == 1) {
+					*bp = '\\';
+					++bp;
+					slash_mod = 0;
+				} else
+					slash_mod = 1;
+			}
+		} else if ((prev_slash == 1) && (*sp != '\0')) {
+			if (slash_mod == 1 ) {
+				cmp_buf[0] = *sp;
+				cmp_buf[1] = *(sp + 1);
+				if (strncasecmp(cmp_buf, "2a", 2) == 0) {
+					*bp = '*';
+				} else if (strncasecmp(cmp_buf, "2b", 2) == 0) {
+					*bp = '+';
+				} else if (strncasecmp(cmp_buf, "28", 2) == 0) {
+					*bp = '(';
+				} else if (strncasecmp(cmp_buf, "29", 2) == 0) {
+					*bp = ')';
+				} else if (strncasecmp(cmp_buf, "5c", 2) == 0) {
+					*bp = '\\';
+				} else
+					return (NSS_LDAP_PARSE_ERROR);
+				
+				++bp;
+
+				if (cmp_buf[1] != '\0')
+					++sp;
+				else
+					*bp = '\0';									
+			}
+			
+			prev_slash = 0;
+			slash_mod = 0;
+		} else {
+			*bp = *sp;
+			++bp;
+		}
+		
+	} while (*(sp++) != '\0');
+	
+	return (NSS_LDAP_SUCCESS);
+}
+
+int
 __nss_ldap_format_filter(char const *fmt, int type, char *buffer,
 	size_t bufsize, ...)
 {

==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/ldaputil.h#11 (text+ko) ====

@@ -39,6 +39,7 @@
 #define NSS_LDAP_FILTER_ARGS_INT_ANY 7
 
 extern int __nss_ldap_escape_string(char const *, char *, size_t);
+extern int __nss_ldap_unescape_string(char const *, char *, size_t);
 extern int __nss_ldap_format_filter(char const *, int, char *, size_t, ...);
 
 #endif /* _LDAPUTILS_H_ */

==== //depot/projects/soc2006/nss_ldap_cached/src/lib/nss_ldap/nss_ldap.c#11 (text+ko) ====

@@ -70,13 +70,13 @@
         {NSDB_PASSWD_COMPAT, "setpwent", __ldap_setpwent, (void *)nss_set_ent},
 	
         {NSDB_GROUP, "getgrnam_r", __ldap_group, (void *)nss_lt_name},
-        {NSDB_GROUP, "getgruid_r", __ldap_group, (void *)nss_lt_id},
+        {NSDB_GROUP, "getgrgid_r", __ldap_group, (void *)nss_lt_id},
         {NSDB_GROUP, "getgrent_r", __ldap_group, (void *)nss_lt_all},
         {NSDB_GROUP, "endgrent", __ldap_setgrent, (void *)nss_end_ent},
         {NSDB_GROUP, "setgrent", __ldap_setgrent, (void *)nss_set_ent},        
 
         {NSDB_GROUP_COMPAT, "getgrnam_r", __ldap_group, (void *)nss_lt_name},
-        {NSDB_GROUP_COMPAT, "getgruid_r", __ldap_group, (void *)nss_lt_id},
+        {NSDB_GROUP_COMPAT, "getgrgid_r", __ldap_group, (void *)nss_lt_id},
         {NSDB_GROUP_COMPAT, "getgrent_r", __ldap_group, (void *)nss_lt_all},
         {NSDB_GROUP_COMPAT, "endgrent", __ldap_setgrent, (void *)nss_end_ent},
         {NSDB_GROUP_COMPAT, "setgrent", __ldap_setgrent, (void *)nss_set_ent},


More information about the p4-projects mailing list