unsigned char iobuf[BASEMAXINLINE];
};
+#define MAX_VM_MBOX_ID_LEN (AST_MAX_EXTENSION)
+#define MAX_VM_CONTEXT_LEN (AST_MAX_CONTEXT)
+/* MAX_VM_MAILBOX_LEN allows enough room for the '@' and NULL terminator */
+#define MAX_VM_MAILBOX_LEN (MAX_VM_MBOX_ID_LEN + MAX_VM_CONTEXT_LEN)
+
/*! Structure for linked list of users
* Use ast_vm_user_destroy() to free one of these structures. */
struct ast_vm_user {
- char context[AST_MAX_CONTEXT]; /*!< Voicemail context */
- char mailbox[AST_MAX_EXTENSION]; /*!< Mailbox id, unique within vm context */
+ char context[MAX_VM_CONTEXT_LEN];/*!< Voicemail context */
+ char mailbox[MAX_VM_MBOX_ID_LEN];/*!< Mailbox id, unique within vm context */
char password[80]; /*!< Secret pin code, numbers only */
char fullname[80]; /*!< Full name, for directory app */
char *email; /*!< E-mail address */
char *stringp;
char *s;
struct ast_vm_user *vmu;
- char *mailbox_full;
+ char mailbox_full[MAX_VM_MAILBOX_LEN];
int new = 0, old = 0, urgent = 0;
char secretfn[PATH_MAX] = "";
read_password_from_file(secretfn, vmu->password, sizeof(vmu->password));
}
- mailbox_full = ast_alloca(strlen(box) + strlen(context) + 1);
- strcpy(mailbox_full, box);
- strcat(mailbox_full, "@");
- strcat(mailbox_full, context);
+ snprintf(mailbox_full, MAX_VM_MAILBOX_LEN, "%s%s%s",
+ box,
+ ast_strlen_zero(context) ? "" : "@",
+ context);
inboxcount2(mailbox_full, &urgent, &new, &old);
#ifdef IMAP_STORAGE