summaryrefslogtreecommitdiff
path: root/source/nsswitch/winbindd_cache.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/nsswitch/winbindd_cache.c')
-rw-r--r--source/nsswitch/winbindd_cache.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/source/nsswitch/winbindd_cache.c b/source/nsswitch/winbindd_cache.c
index 4221e26ee1a..e78410e3a50 100644
--- a/source/nsswitch/winbindd_cache.c
+++ b/source/nsswitch/winbindd_cache.c
@@ -119,6 +119,12 @@ static char *centry_string(struct cache_entry *centry, TALLOC_CTX *mem_ctx)
char *ret;
len = centry_uint32(centry);
+
+ if (len == 0xFFFF) {
+ /* a deliberate NULL string */
+ return NULL;
+ }
+
if (centry->len - centry->ofs < len) {
DEBUG(0,("centry corruption? needed %d bytes, have %d\n",
len, centry->len - centry->ofs));
@@ -267,7 +273,15 @@ static void centry_put_uint32(struct cache_entry *centry, uint32 v)
*/
static void centry_put_string(struct cache_entry *centry, const char *s)
{
- int len = strlen(s);
+ int len;
+
+ if (!s) {
+ /* null strings are marked as len 0xFFFF */
+ centry_put_uint32(centry, 0xFFFF);
+ return;
+ }
+
+ len = strlen(s);
centry_put_uint32(centry, len);
centry_expand(centry, len);
memcpy(centry->data + centry->ofs, s, len);