Author: jerry Date: 2005-09-02 15:46:36 +0000 (Fri, 02 Sep 2005) New Revision: 9961
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=9961 Log: * memory management cleanup in the EventlogInfo structure. (use talloc_strdup() rather than fstring) * create a new ctx for the info pointer rather than using the p->mem_ctx. Modified: trunk/source/rpc_server/srv_eventlog_nt.c Changeset: Modified: trunk/source/rpc_server/srv_eventlog_nt.c =================================================================== --- trunk/source/rpc_server/srv_eventlog_nt.c 2005-09-02 15:45:13 UTC (rev 9960) +++ trunk/source/rpc_server/srv_eventlog_nt.c 2005-09-02 15:46:36 UTC (rev 9961) @@ -24,9 +24,9 @@ #define DBGC_CLASS DBGC_RPC_SRV typedef struct { - fstring logname; - fstring servername; - fstring handle_string; + char *logname; + char *servername; + char *handle_string; uint32 num_records; uint32 oldest_entry; uint32 flags; @@ -86,10 +86,11 @@ /******************************************************************** ********************************************************************/ -void policy_handle_to_string(POLICY_HND *handle, fstring *dest) +char* policy_handle_to_string( void *ctx, POLICY_HND *handle ) { - memset(dest, 0, sizeof(*dest)); - snprintf((char *)dest, sizeof(*dest), "%08X-%08X-%04X-%04X-%02X%02X%02X%02X%02X", + char *handle_string; + + handle_string = talloc_asprintf( ctx, "%08X-%08X-%04X-%04X-%02X%02X%02X%02X%02X", handle->data1, handle->data2, handle->data3, @@ -98,7 +99,12 @@ handle->data5[1], handle->data5[2], handle->data5[3], - handle->data5[4]); + handle->data5[4] ); + + if ( !handle_string ) + DEBUG(0,("policy_handle_to_string: talloc_asprintf() failed!\n")); + + return handle_string; } /******************************************************************** @@ -845,22 +851,24 @@ WERROR _eventlog_open_eventlog(pipes_struct *p, EVENTLOG_Q_OPEN_EVENTLOG *q_u, EVENTLOG_R_OPEN_EVENTLOG *r_u) { EventlogInfo *info = NULL; + fstring str; - if ( !(info = TALLOC_ZERO_P(p->mem_ctx, EventlogInfo)) ) + if ( !(info = TALLOC_ZERO_P(NULL, EventlogInfo)) ) return WERR_NOMEM; - fstrcpy(info->servername, global_myname()); - fstrcpy(info->logname, "Application"); - + fstrcpy( str, global_myname() ); if ( q_u->servername.string ) { - rpcstr_pull( info->servername, q_u->servername.string->buffer, - sizeof(info->servername), q_u->servername.string->uni_str_len*2, 0 ); + rpcstr_pull( str, q_u->servername.string->buffer, + sizeof(str), q_u->servername.string->uni_str_len*2, 0 ); } + info->servername = talloc_strdup( info, str ); + fstrcpy( str, "Application" ); if ( q_u->logname.string ) { - rpcstr_pull( info->logname, q_u->logname.string->buffer, - sizeof(info->logname), q_u->logname.string->uni_str_len*2, 0 ); + rpcstr_pull( str, q_u->logname.string->buffer, + sizeof(str), q_u->logname.string->uni_str_len*2, 0 ); } + info->logname = talloc_strdup( info, str ); DEBUG(10, ("_eventlog_open_eventlog: Using [%s] as the server name.\n", info->servername)); DEBUG(10, ("_eventlog_open_eventlog: Using [%s] as the source log file.\n", info->logname)); @@ -870,7 +878,10 @@ return WERR_NOMEM; } - policy_handle_to_string(&r_u->handle, &info->handle_string); + if ( !(info->handle_string = policy_handle_to_string( info, &r_u->handle )) ) { + close_policy_hnd(p, &r_u->handle); + return WERR_BADFILE; + } if ( !(open_eventlog_hook(info)) ) { close_policy_hnd(p, &r_u->handle);
