(*ppdesc) = NULL;
- if (!lp_nt_acl_support())
+ if (!lp_nt_acl_support() || sbuf == NULL)
{
sid_copy(&owner_sid, global_sid_everyone);
sid_copy(&group_sid, global_sid_everyone);
sec_desc_size = make_sec_desc((*ppdesc), 1,
SEC_DESC_SELF_RELATIVE |
- SEC_DESC_DACL_PRESENT,
+ (sbuf?SEC_DESC_DACL_PRESENT:0),
sid_dup(&owner_sid),
sid_dup(&group_sid), NULL, psa);
* Init the parse struct we will marshall into.
*/
- prs_init(&pd, sec_desc_size, 4, MARSHALL);
+ prs_init(&pd, 0, 4, MARSHALL);
+
+ /*
+ * copy the data out of the marshalled structure
+ */
+
+ prs_give_memory( &pd, data, (uint32)sec_desc_size, False);
/*
* Finally, linearize into the outgoing buffer.
return(UNIXERROR(ERRDOS,ERRnoaccess));
}
- /*
- * copy the data out of the marshalled structure
- */
-
- prs_give_memory( &pd, data, (uint32)sec_desc_size, False);
-
/*
* Now we can delete the security descriptor.
*/
{SMBgetmac,"SMBgetmac",NULL,AS_GUEST}
};
+/*******************************************************************
+dump a prs to a file
+ ********************************************************************/
+static void smb_dump(char *name, int type, char *data, ssize_t len)
+{
+ int fd, i;
+ pstring fname;
+ if (DEBUGLEVEL < 50) return;
+
+ if (len < 4) len = smb_buflen(data);
+ for (i=1;i<100;i++) {
+ slprintf(fname,sizeof(fname), "/tmp/%s.%d.%s", name, i,
+ type ? "req" : "resp");
+ fd = open(fname, O_WRONLY|O_CREAT|O_EXCL, 0644);
+ if (fd != -1 || errno != EEXIST) break;
+ }
+ if (fd != -1) {
+ write(fd, data, len);
+ close(fd);
+ DEBUG(0,("created %s len %d\n", fname, len));
+ }
+}
+
/****************************************************************************
do a switch on the message type, and return the response size
if (match == num_smb_messages)
{
DEBUG(0,("Unknown message type %d!\n",type));
+ smb_dump("Unknown", 1, inbuf, size);
outsize = reply_unknown(inbuf,outbuf);
}
else
{
DEBUG(3,("switch message %s (pid %d)\n",smb_messages[match].name,(int)pid));
+ smb_dump(smb_messages[match].name, 1, inbuf, size);
if(global_oplock_break)
{
int flags = smb_messages[match].flags;
}
}
+ smb_dump(smb_messages[match].name, 0, outbuf, outsize);
+
return(outsize);
}