Jeremy.
char *lp_domain_guest_group(void);
char *lp_domain_admin_users(void);
char *lp_domain_guest_users(void);
-char *lp_nt_forms(void);
-char *lp_nt_drivers_file(void);
char *lp_winbind_uid(void);
char *lp_winbind_gid(void);
char *lp_template_homedir(void);
void init_buffer3_bytes(BUFFER3 *str, uint8 *buf, int len);
BOOL smb_io_buffer3(char *desc, BUFFER3 *buf3, prs_struct *ps, int depth);
BOOL smb_io_buffer5(char *desc, BUFFER5 *buf5, prs_struct *ps, int depth);
+void free_buffer5(BUFFER5 *buf5);
void init_buffer2(BUFFER2 *str, uint8 *buf, int len);
BOOL smb_io_buffer2(char *desc, BUFFER2 *buf2, uint32 buffer, prs_struct *ps, int depth);
void init_buf_unistr2(UNISTR2 *str, uint32 *ptr, const char *buf);
BOOL spoolss_io_r_addprinterex(char *desc, SPOOL_R_ADDPRINTEREX *r_u, prs_struct *ps, int depth);
BOOL spool_io_printer_driver_info_level_3(char *desc, SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 **q_u,
prs_struct *ps, int depth);
+void free_spool_printer_driver_info_level_3(SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 **q_u);
BOOL spool_io_printer_driver_info_level_6(char *desc, SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 **q_u,
prs_struct *ps, int depth);
+void free_spool_printer_driver_info_level_6(SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 **q_u);
BOOL smb_io_unibuffer(char *desc, UNISTR2 *buffer, prs_struct *ps, int depth);
BOOL spool_io_printer_driver_info_level(char *desc, SPOOL_PRINTER_DRIVER_INFO_LEVEL *il, prs_struct *ps, int depth);
+void free_spool_printer_driver_info_level(SPOOL_PRINTER_DRIVER_INFO_LEVEL *il);
BOOL spoolss_io_q_addprinterdriver(char *desc, SPOOL_Q_ADDPRINTERDRIVER *q_u, prs_struct *ps, int depth);
+void free_spoolss_q_addprinterdriver(SPOOL_Q_ADDPRINTERDRIVER *q_u);
BOOL spoolss_io_r_addprinterdriver(char *desc, SPOOL_R_ADDPRINTERDRIVER *q_u, prs_struct *ps, int depth);
BOOL uni_2_asc_printer_driver_3(SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 *uni,
NT_PRINTER_DRIVER_INFO_LEVEL_3 **asc);
uint32 free_a_printer_driver(NT_PRINTER_DRIVER_INFO_LEVEL driver, uint32 level)
{
uint32 success;
- NT_PRINTER_DRIVER_INFO_LEVEL_3 *info3;
switch (level)
{
case 3:
{
+ NT_PRINTER_DRIVER_INFO_LEVEL_3 *info3;
if (driver.info_3 != NULL)
{
info3=driver.info_3;
safe_free(info3->dependentfiles);
- safe_free(info3);
ZERO_STRUCTP(info3);
+ safe_free(info3);
+ success=0;
+ }
+ else
+ {
+ success=4;
+ }
+ break;
+ }
+ case 6:
+ {
+ NT_PRINTER_DRIVER_INFO_LEVEL_3 *info6;
+ if (driver.info_6 != NULL)
+ {
+ info6=driver.info_6;
+ safe_free(info6->dependentfiles);
+ ZERO_STRUCTP(info6);
+ safe_free(info6);
success=0;
}
else
return True;
}
+/*******************************************************************
+ Frees a BUFFER5 structure (just the malloced part).
+********************************************************************/
+
+void free_buffer5(BUFFER5 *buf5)
+{
+ safe_free(buf5->buffer);
+}
+
/*******************************************************************
Inits a BUFFER2 structure.
********************************************************************/
return False;
if (il->dependentfiles_ptr)
- smb_io_buffer5("", &(il->dependentfiles), ps, depth);
+ smb_io_buffer5("", &il->dependentfiles, ps, depth);
return True;
}
+void free_spool_printer_driver_info_level_3(SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 **q_u)
+{
+ SPOOL_PRINTER_DRIVER_INFO_LEVEL_3 *il = *q_u;
+
+ if (il == NULL)
+ return;
+
+ free_buffer5(&il->dependentfiles);
+
+ safe_free(q_u);
+}
/*******************************************************************
parse a SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 structure
return True;
}
+void free_spool_printer_driver_info_level_6(SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 **q_u)
+{
+ SPOOL_PRINTER_DRIVER_INFO_LEVEL_6 *il = *q_u;
+
+ if (il == NULL)
+ return;
+
+ free_buffer5(&il->dependentfiles);
+ free_buffer5(&il->previousnames);
+
+ safe_free(q_u);
+}
+
/*******************************************************************
convert a buffer of UNICODE strings null terminated
switch (il->level) {
case 3:
- if(!spool_io_printer_driver_info_level_3("", &(il->info_3), ps, depth))
+ if(!spool_io_printer_driver_info_level_3("", &il->info_3, ps, depth))
return False;
break;
case 6:
- if(!spool_io_printer_driver_info_level_6("", &(il->info_6), ps, depth))
+ if(!spool_io_printer_driver_info_level_6("", &il->info_6, ps, depth))
return False;
break;
default:
return True;
}
+void free_spool_printer_driver_info_level(SPOOL_PRINTER_DRIVER_INFO_LEVEL *il)
+{
+ if (il->ptr==0)
+ return;
+
+ switch (il->level) {
+ case 3:
+ free_spool_printer_driver_info_level_3(&il->info_3);
+ break;
+ case 6:
+ free_spool_printer_driver_info_level_6(&il->info_6);
+ break;
+ }
+}
+
/*******************************************************************
********************************************************************/
BOOL spoolss_io_q_addprinterdriver(char *desc, SPOOL_Q_ADDPRINTERDRIVER *q_u, prs_struct *ps, int depth)
return True;
}
+/*******************************************************************
+ Free the dynamic parts of a printer driver.
+********************************************************************/
+
+void free_spoolss_q_addprinterdriver(SPOOL_Q_ADDPRINTERDRIVER *q_u)
+{
+ free_spool_printer_driver_info_level(&q_u->info);
+}
+
/*******************************************************************
********************************************************************/
BOOL spoolss_io_r_addprinterdriver(char *desc, SPOOL_R_ADDPRINTERDRIVER *q_u, prs_struct *ps, int depth)
if(!spoolss_io_r_addprinterdriver("", &r_u, rdata, 0)) {
DEBUG(0,("spoolss_io_r_addprinterdriver: unable to marshall SPOOL_R_ADDPRINTERDRIVER.\n"));
+ free_spoolss_q_addprinterdriver(&q_u);
return False;
}
+ free_spoolss_q_addprinterdriver(&q_u);
+
return True;
}
#ifdef RELIES_ON_SMBD_FUNCTIONS_LINKED_INTO_SPOOLSSD
if ((err = modify_driver_heirarchy(&driver, level)) != 0) {
- safe_free(driver.info_3);
- safe_free(driver.info_6);
+ free_a_printer_driver(driver, level);
return err;
}
#endif
- safe_free(driver.info_3);
- safe_free(driver.info_6);
+ free_a_printer_driver(driver, level);
return NT_STATUS_NO_PROBLEMO;
}