summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2001-12-10 00:07:51 +0000
committerAndrew Tridgell <tridge@samba.org>2001-12-10 00:07:51 +0000
commit77c1376456765a7afe90afad96fab819fdcf8af3 (patch)
treef0081ae58b26960c51d1607d419986e5cb3f1037
parentec4c90fd7f56f8870884e5a27622cae71d154eca (diff)
downloadsamba-77c1376456765a7afe90afad96fab819fdcf8af3.tar.gz
explicitly encode NULL strings in the cache
-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);