const char *cli_errstr(struct cli_state *cli)
{
- static fstring cli_error_message;
+ fstring cli_error_message;
uint32 flgs2 = SVAL(cli->inbuf,smb_flg2), errnum;
uint8 errclass;
int i;
+ char *result;
if (!cli->initialised) {
fstrcpy(cli_error_message, "[Programmer's error] cli_errstr called on unitialized cli_stat struct!\n");
- return cli_error_message;
+ goto done;
}
/* Was it server socket error ? */
"Unknown error code %d\n", cli->smb_rw_error );
break;
}
- return cli_error_message;
+ goto done;
}
/* Case #1: RAP error */
slprintf(cli_error_message, sizeof(cli_error_message) - 1, "RAP code %d",
cli->rap_error);
- return cli_error_message;
+ goto done;
}
/* Case #2: 32-bit NT errors */
/* Case #3: SMB error */
return cli_smb_errstr(cli);
+
+ done:
+ result = talloc_strdup(talloc_tos(), cli_error_message);
+ SMB_ASSERT(result);
+ return result;
}
const char *nt_errstr(NTSTATUS nt_code)
{
- static pstring msg;
int idx = 0;
+ char *result;
#ifdef HAVE_LDAP
if (NT_STATUS_TYPE(nt_code) == NT_STATUS_TYPE_LDAP) {
}
#endif
- slprintf(msg, sizeof(msg), "NT code 0x%08x", NT_STATUS_V(nt_code));
-
while (nt_errs[idx].nt_errstr != NULL) {
if (NT_STATUS_EQUAL(nt_errs[idx].nt_errcode, nt_code)) {
return nt_errs[idx].nt_errstr;
idx++;
}
- return msg;
+ result = talloc_asprintf(talloc_tos(), "NT code 0x%08x",
+ NT_STATUS_V(nt_code));
+ SMB_ASSERT(result != NULL);
+ return result;
}
/************************************************************************
const char *get_nt_error_c_code(NTSTATUS nt_code)
{
- static pstring out;
+ char *result;
int idx = 0;
while (nt_errs[idx].nt_errstr != NULL) {
idx++;
}
- slprintf(out, sizeof(out), "NT_STATUS(0x%08x)", NT_STATUS_V(nt_code));
-
- return out;
+ result = talloc_asprintf(talloc_tos(), "NT_STATUS(0x%08x)",
+ NT_STATUS_V(nt_code));
+ SMB_ASSERT(result);
+ return result;
}
/*****************************************************************************
****************************************************************************/
const char *smb_dos_err_name(uint8 e_class, uint16 num)
{
- static pstring ret;
+ char *result;
int i,j;
for (i=0;err_classes[i].e_class;i++)
return err[j].name;
}
}
- slprintf(ret, sizeof(ret) - 1, "%d",num);
- return ret;
+ result = talloc_asprintf(talloc_tos(), "%d", num);
+ SMB_ASSERT(result != NULL);
+ return result;
}
- slprintf(ret, sizeof(ret) - 1, "Error: Unknown error class (%d,%d)",e_class,num);
- return(ret);
+ result = talloc_asprintf(talloc_tos(), "Error: Unknown error class "
+ "(%d,%d)", e_class,num);
+ SMB_ASSERT(result != NULL);
+ return result;
}
/* Return a string for a DOS error */
****************************************************************************/
const char *smb_dos_err_class(uint8 e_class)
{
- static pstring ret;
+ char *result;
int i;
-
+
for (i=0;err_classes[i].e_class;i++) {
if (err_classes[i].code == e_class) {
return err_classes[i].e_class;
}
}
-
- slprintf(ret, sizeof(ret) - 1, "Error: Unknown class (%d)",e_class);
- return(ret);
+
+ result = talloc_asprintf(talloc_tos(), "Error: Unknown class (%d)",
+ e_class);
+ SMB_ASSERT(result != NULL);
+ return result;
}
/****************************************************************************
****************************************************************************/
char *smb_dos_errstr(char *inbuf)
{
- static pstring ret;
+ char *result;
int e_class = CVAL(inbuf,smb_rcls);
int num = SVAL(inbuf,smb_err);
int i,j;
-
+
for (i=0;err_classes[i].e_class;i++)
if (err_classes[i].code == e_class) {
if (err_classes[i].err_msgs) {
for (j=0;err[j].name;j++)
if (num == err[j].code) {
if (DEBUGLEVEL > 0)
- slprintf(ret, sizeof(ret) - 1, "%s - %s (%s)",
- err_classes[i].e_class,
- err[j].name,err[j].message);
+ result = talloc_asprintf(
+ talloc_tos(), "%s - %s (%s)",
+ err_classes[i].e_class,
+ err[j].name,err[j].message);
else
- slprintf(ret, sizeof(ret) - 1, "%s - %s",
- err_classes[i].e_class,err[j].name);
- return ret;
+ result = talloc_asprintf(
+ talloc_tos(), "%s - %s",
+ err_classes[i].e_class,
+ err[j].name);
+ goto done;
}
}
-
- slprintf(ret, sizeof(ret) - 1, "%s - %d",err_classes[i].e_class,num);
- return ret;
+
+ result = talloc_asprintf(talloc_tos(), "%s - %d",
+ err_classes[i].e_class, num);
+ goto done;
}
-
- slprintf(ret, sizeof(ret) - 1, "Error: Unknown error (%d,%d)",e_class,num);
- return(ret);
+
+ result = talloc_asprintf(talloc_tos(), "Error: Unknown error (%d,%d)",
+ e_class, num);
+ done:
+ SMB_ASSERT(result != NULL);
+ return result;
}
/*****************************************************************************