summaryrefslogtreecommitdiff
path: root/source3/nsswitch
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
commit4ad81e7714bac620ae8c5a3a341548523c7ceada (patch)
treefc425785a92483c564037c3d88663358acdc0f02 /source3/nsswitch
parentcb1195fdef5466b3ee565b03c2fe990a86916c70 (diff)
downloadsamba-4ad81e7714bac620ae8c5a3a341548523c7ceada.tar.gz
samba-4ad81e7714bac620ae8c5a3a341548523c7ceada.tar.bz2
samba-4ad81e7714bac620ae8c5a3a341548523c7ceada.zip
explicitly encode NULL strings in the cache
(This used to be commit 77c1376456765a7afe90afad96fab819fdcf8af3)
Diffstat (limited to 'source3/nsswitch')
-rw-r--r--source3/nsswitch/winbindd_cache.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/source3/nsswitch/winbindd_cache.c b/source3/nsswitch/winbindd_cache.c
index 4221e26ee1..e78410e3a5 100644
--- a/source3/nsswitch/winbindd_cache.c
+++ b/source3/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);