/* test whether myldap_escape() handles buffer overlows correctly */ static void test_escape(void) { char buffer[1024]; assert(myldap_escape("test",buffer,4)!=0); assert(myldap_escape("t*st",buffer,5)!=0); assert(myldap_escape("t*st",buffer,20)==0); assertstreq(buffer,"t\\2ast"); }
static int mkfilter_rpc_byname(const char *name, char *buffer, size_t buflen) { char safename[BUFLEN_SAFENAME]; /* escape attribute */ if (myldap_escape(name, safename, sizeof(safename))) return -1; /* build filter */ return mysnprintf(buffer, buflen, "(&%s(%s=%s))", rpc_filter, attmap_rpc_cn, safename); }
static int mkfilter_network_byaddr(const char *addrname, char *buffer,size_t buflen) { char safeaddr[64]; /* escape attribute */ if (myldap_escape(addrname,safeaddr,sizeof(safeaddr))) return -1; /* build filter */ return mysnprintf(buffer,buflen, "(&%s(%s=%s))", network_filter, attmap_network_ipNetworkNumber,safeaddr); }
/* create a search filter for searching a network entry by name, return -1 on errors */ static int mkfilter_network_byname(const char *name, char *buffer,size_t buflen) { char safename[1024]; /* escape attribute */ if (myldap_escape(name,safename,sizeof(safename))) return -1; /* build filter */ return mysnprintf(buffer,buflen, "(&%s(%s=%s))", network_filter, attmap_network_cn,safename); }
static int mkfilter_shadow_byname(const char *name, char *buffer, size_t buflen) { char safename[BUFLEN_SAFENAME]; /* escape attribute */ if (myldap_escape(name, safename, sizeof(safename))) { log_log(LOG_ERR, "mkfilter_shadow_byname(): safename buffer too small"); return -1; } /* build filter */ return mysnprintf(buffer, buflen, "(&%s(%s=%s))", shadow_filter, attmap_shadow_uid, safename); }