svn commit: samba r20279 - in branches: SAMBA_3_0/source/nsswitch
SAMBA_3_0_24/source/nsswitch
gd at samba.org
gd at samba.org
Wed Dec 20 14:23:42 GMT 2006
Author: gd
Date: 2006-12-20 14:23:41 +0000 (Wed, 20 Dec 2006)
New Revision: 20279
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=20279
Log:
Fix winbind segfault in winbindd_getsidaliases.
Jeremy: sidstr formerly could be NULL (when num_aliases was 0), since we
strdup here it needs to exist.
Guenther
Modified:
branches/SAMBA_3_0/source/nsswitch/winbindd_async.c
branches/SAMBA_3_0_24/source/nsswitch/winbindd_async.c
Changeset:
Modified: branches/SAMBA_3_0/source/nsswitch/winbindd_async.c
===================================================================
--- branches/SAMBA_3_0/source/nsswitch/winbindd_async.c 2006-12-20 13:05:13 UTC (rev 20278)
+++ branches/SAMBA_3_0/source/nsswitch/winbindd_async.c 2006-12-20 14:23:41 UTC (rev 20279)
@@ -1084,7 +1084,7 @@
{
DOM_SID *sids = NULL;
size_t num_sids = 0;
- char *sidstr;
+ char *sidstr = NULL;
ssize_t len;
size_t i;
uint32 num_aliases;
@@ -1094,8 +1094,13 @@
DEBUG(3, ("[%5lu]: getsidaliases\n", (unsigned long)state->pid));
sidstr = state->request.extra_data.data;
- if (sidstr == NULL)
+ if (sidstr == NULL) {
sidstr = talloc_strdup(state->mem_ctx, "\n"); /* No SID */
+ if (!sidstr) {
+ DEBUG(0, ("Out of memory\n"));
+ return WINBINDD_ERROR;
+ }
+ }
DEBUG(10, ("Sidlist: %s\n", sidstr));
@@ -1121,6 +1126,7 @@
num_sids = 0;
sids = NULL;
+ sidstr = NULL;
DEBUG(10, ("Got %d aliases\n", num_aliases));
@@ -1141,9 +1147,14 @@
return WINBINDD_ERROR;
}
- state->response.extra_data.data = SMB_STRDUP(sidstr);
+ state->response.extra_data.data = NULL;
- if (state->response.extra_data.data != NULL) {
+ if (sidstr) {
+ state->response.extra_data.data = SMB_STRDUP(sidstr);
+ if (!state->response.extra_data.data) {
+ DEBUG(0, ("Out of memory\n"));
+ return WINBINDD_ERROR;
+ }
DEBUG(10, ("aliases_list: %s\n",
(char *)state->response.extra_data.data));
state->response.length += len+1;
Modified: branches/SAMBA_3_0_24/source/nsswitch/winbindd_async.c
===================================================================
--- branches/SAMBA_3_0_24/source/nsswitch/winbindd_async.c 2006-12-20 13:05:13 UTC (rev 20278)
+++ branches/SAMBA_3_0_24/source/nsswitch/winbindd_async.c 2006-12-20 14:23:41 UTC (rev 20279)
@@ -945,7 +945,7 @@
{
DOM_SID *sids = NULL;
size_t num_sids = 0;
- char *sidstr;
+ char *sidstr = NULL;
ssize_t len;
size_t i;
uint32 num_aliases;
@@ -955,8 +955,13 @@
DEBUG(3, ("[%5lu]: getsidaliases\n", (unsigned long)state->pid));
sidstr = state->request.extra_data.data;
- if (sidstr == NULL)
+ if (sidstr == NULL) {
sidstr = talloc_strdup(state->mem_ctx, "\n"); /* No SID */
+ if (!sidstr) {
+ DEBUG(0, ("Out of memory\n"));
+ return WINBINDD_ERROR;
+ }
+ }
DEBUG(10, ("Sidlist: %s\n", sidstr));
@@ -982,6 +987,7 @@
num_sids = 0;
sids = NULL;
+ sidstr = NULL;
DEBUG(10, ("Got %d aliases\n", num_aliases));
@@ -1002,9 +1008,14 @@
return WINBINDD_ERROR;
}
- state->response.extra_data.data = SMB_STRDUP(sidstr);
+ state->response.extra_data.data = NULL;
- if (state->response.extra_data.data != NULL) {
+ if (sidstr) {
+ state->response.extra_data.data = SMB_STRDUP(sidstr);
+ if (!state->response.extra_data.data) {
+ DEBUG(0, ("Out of memory\n"));
+ return WINBINDD_ERROR;
+ }
DEBUG(10, ("aliases_list: %s\n",
(char *)state->response.extra_data.data));
state->response.length += len+1;
More information about the samba-cvs
mailing list