@ -1797,7 +1797,7 @@ static void vm_change_password(struct ast_vm_user *vmu, const char *newpassword)
struct ast_config * cfg = NULL ;
struct ast_variable * var = NULL ;
struct ast_category * cat = NULL ;
char * category = NULL , * value = NULL , * new = NULL ;
char * category = NULL ;
const char * tmp = NULL ;
struct ast_flags config_flags = { CONFIG_FLAG_WITHCOMMENTS } ;
char secretfn [ PATH_MAX ] = " " ;
@ -1824,24 +1824,28 @@ static void vm_change_password(struct ast_vm_user *vmu, const char *newpassword)
if ( ( cfg = ast_config_load ( VOICEMAIL_CONFIG , config_flags ) ) & & valid_config ( cfg ) ) {
while ( ( category = ast_category_browse ( cfg , category ) ) ) {
if ( ! strcasecmp ( category , vmu - > context ) ) {
char * value = NULL ;
char * new = NULL ;
if ( ! ( tmp = ast_variable_retrieve ( cfg , category , vmu - > mailbox ) ) ) {
ast_log ( AST_LOG_WARNING , " We could not find the mailbox. \n " ) ;
break ;
}
value = strstr ( tmp , " , " ) ;
if ( ! value ) {
new = ast_ alloca ( strlen ( newpassword ) + 1 ) ;
new = ast_ m alloc( strlen ( newpassword ) + 1 ) ;
sprintf ( new , " %s " , newpassword ) ;
} else {
new = ast_ alloca ( ( strlen ( value ) + strlen ( newpassword ) + 1 ) ) ;
new = ast_ m alloc( ( strlen ( value ) + strlen ( newpassword ) + 1 ) ) ;
sprintf ( new , " %s%s " , newpassword , value ) ;
}
if ( ! ( cat = ast_category_get ( cfg , category , NULL ) ) ) {
ast_log ( AST_LOG_WARNING , " Failed to get category structure. \n " ) ;
ast_free ( new ) ;
break ;
}
ast_variable_update ( cat , vmu - > mailbox , new , NULL , 0 ) ;
found = 1 ;
ast_free ( new ) ;
}
}
/* save the results */
@ -1865,13 +1869,14 @@ static void vm_change_password(struct ast_vm_user *vmu, const char *newpassword)
for ( category = ast_category_browse ( cfg , NULL ) ; category ; category = ast_category_browse ( cfg , category ) ) {
ast_debug ( 4 , " users.conf: %s \n " , category ) ;
if ( ! strcasecmp ( category , vmu - > mailbox ) ) {
char new [ strlen ( newpassword ) + 1 ] ;
if ( ! ast_variable_retrieve ( cfg , category , " vmsecret " ) ) {
ast_debug ( 3 , " looks like we need to make vmsecret! \n " ) ;
var = ast_variable_new ( " vmsecret " , newpassword , " " ) ;
} else {
var = NULL ;
}
new = ast_alloca ( strlen ( newpassword ) + 1 ) ;
sprintf ( new , " %s " , newpassword ) ;
if ( ! ( cat = ast_category_get ( cfg , category , NULL ) ) ) {
ast_debug ( 4 , " failed to get category! \n " ) ;
@ -2194,7 +2199,6 @@ static int imap_retrieve_greeting(const char *dir, const int msgnum, struct ast_
struct vm_state * vms_p ;
char * file , * filename ;
char dest [ PATH_MAX ] ;
char * attachment ;
int i ;
BODY * body ;
int ret = 0 ;
@ -2247,21 +2251,26 @@ static int imap_retrieve_greeting(const char *dir, const int msgnum, struct ast_
mail_fetchstructure ( vms_p - > mailstream , i + 1 , & body ) ;
/* We have the body, now we extract the file name of the first attachment. */
if ( body - > nested . part & & body - > nested . part - > next & & body - > nested . part - > next - > body . parameter - > value ) {
attachment = ast_strdupa ( body - > nested . part - > next - > body . parameter - > value ) ;
char * attachment = body - > nested . part - > next - > body . parameter - > value ;
char copy [ strlen ( attachment ) + 1 ] ;
strcpy ( copy , attachment ) ; /* safe */
attachment = copy ;
filename = strsep ( & attachment , " . " ) ;
if ( ! strcmp ( filename , file ) ) {
ast_copy_string ( vms_p - > fn , dir , sizeof ( vms_p - > fn ) ) ;
vms_p - > msgArray [ vms_p - > curmsg ] = i + 1 ;
create_dirpath ( dest , sizeof ( dest ) , vmu - > context , vms_p - > username , " " ) ;
save_body ( body , vms_p , " 2 " , attachment , 0 ) ;
ret = 0 ;
break ;
}
} else {
ast_log ( AST_LOG_ERROR , " There is no file attached to this IMAP message. \n " ) ;
ret = - 1 ;
break ;
}
filename = strsep ( & attachment , " . " ) ;
if ( ! strcmp ( filename , file ) ) {
ast_copy_string ( vms_p - > fn , dir , sizeof ( vms_p - > fn ) ) ;
vms_p - > msgArray [ vms_p - > curmsg ] = i + 1 ;
create_dirpath ( dest , sizeof ( dest ) , vmu - > context , vms_p - > username , " " ) ;
save_body ( body , vms_p , " 2 " , attachment , 0 ) ;
ret = 0 ;
break ;
}
}
if ( curr_mbox ! = - 1 ) {
@ -8141,10 +8150,12 @@ static void queue_mwi_event(const char *channel_id, const char *box, int urgent,
aliases = ao2_find ( mailbox_alias_mappings , box , OBJ_SEARCH_KEY | OBJ_MULTIPLE ) ;
while ( ( mapping = ao2_iterator_next ( aliases ) ) ) {
char alias [ strlen ( mapping - > alias ) + 1 ] ;
strcpy ( alias , mapping - > alias ) ; /* safe */
mailbox = NULL ;
context = NULL ;
ast_debug ( 3 , " Found alias mapping: %s -> %s \n " , mapping - > alias , box ) ;
separate_mailbox ( ast_strdupa ( mapping - > alias ) , & mailbox , & context ) ;
separate_mailbox ( alias , & mailbox , & context ) ;
ast_publish_mwi_state_channel ( mailbox , context , new + urgent , old , channel_id ) ;
ao2_ref ( mapping , - 1 ) ;
}
@ -8364,12 +8375,12 @@ static int forward_message(struct ast_channel *chan, char *context, struct vm_st
directory_app = pbx_findapp ( " Directory " ) ;
if ( directory_app ) {
char vmcontext [ 256 ] ;
char * old_context ;
char * old_exten ;
char old_context [ strlen ( ast_channel_context ( chan ) ) + 1 ] ;
char old_exten [ strlen ( ast_channel_exten ( chan ) ) + 1 ] ;
int old_priority ;
/* make backup copies */
old_context = ast_strdupa ( ast_channel_context ( chan ) ) ;
old_exten = ast_strdupa ( ast_channel_exten ( chan ) ) ;
strcpy ( old_context , ast_channel_context ( chan ) ) ; /* safe */
strcpy ( old_exten , ast_channel_exten ( chan ) ) ; /* safe */
old_priority = ast_channel_priority ( chan ) ;
/* call the Directory, changes the channel */
@ -9050,7 +9061,6 @@ static int imap_remove_file(char *dir, int msgnum)
static int imap_delete_old_greeting ( char * dir , struct vm_state * vms )
{
char * file , * filename ;
char * attachment ;
char arg [ 11 ] ;
int i ;
BODY * body ;
@ -9079,17 +9089,22 @@ static int imap_delete_old_greeting (char *dir, struct vm_state *vms)
mail_fetchstructure ( vms - > mailstream , i + 1 , & body ) ;
/* We have the body, now we extract the file name of the first attachment. */
if ( body - > nested . part - > next & & body - > nested . part - > next - > body . parameter - > value ) {
attachment = ast_strdupa ( body - > nested . part - > next - > body . parameter - > value ) ;
char * attachment = body - > nested . part - > next - > body . parameter - > value ;
char copy [ strlen ( attachment ) + 1 ] ;
strcpy ( copy , attachment ) ; /* safe */
attachment = copy ;
filename = strsep ( & attachment , " . " ) ;
if ( ! strcmp ( filename , file ) ) {
snprintf ( arg , sizeof ( arg ) , " %d " , i + 1 ) ;
mail_setflag ( vms - > mailstream , arg , " \\ DELETED " ) ;
}
} else {
ast_log ( AST_LOG_ERROR , " There is no file attached to this IMAP message. \n " ) ;
ast_mutex_unlock ( & vms - > lock ) ;
return - 1 ;
}
filename = strsep ( & attachment , " . " ) ;
if ( ! strcmp ( filename , file ) ) {
snprintf ( arg , sizeof ( arg ) , " %d " , i + 1 ) ;
mail_setflag ( vms - > mailstream , arg , " \\ DELETED " ) ;
}
}
mail_expunge ( vms - > mailstream ) ;
@ -13705,26 +13720,30 @@ static void load_zonemessages(struct ast_config *cfg)
var = ast_variable_browse ( cfg , " zonemessages " ) ;
while ( var ) {
struct vm_zone * z ;
char * msg_format , * tzone ;
z = ast_malloc ( sizeof ( * z ) ) ;
if ( ! z ) {
return ;
}
if ( var - > value ) {
struct vm_zone * z ;
char * msg_format , * tzone ;
char storage [ strlen ( var - > value ) + 1 ] ;
z = ast_malloc ( sizeof ( * z ) ) ;
if ( ! z ) {
return ;
}
msg_format = ast_strdupa ( var - > value ) ;
tzone = strsep ( & msg_format , " |, " ) ;
if ( msg_format ) {
ast_copy_string ( z - > name , var - > name , sizeof ( z - > name ) ) ;
ast_copy_string ( z - > timezone , tzone , sizeof ( z - > timezone ) ) ;
ast_copy_string ( z - > msg_format , msg_format , sizeof ( z - > msg_format ) ) ;
AST_LIST_LOCK ( & zones ) ;
AST_LIST_INSERT_HEAD ( & zones , z , list ) ;
AST_LIST_UNLOCK ( & zones ) ;
} else {
ast_log ( AST_LOG_WARNING , " Invalid timezone definition at line %d \n " , var - > lineno ) ;
ast_free ( z ) ;
strcpy ( storage , var - > value ) ; /* safe */
msg_format = storage ;
tzone = strsep ( & msg_format , " |, " ) ;
if ( msg_format ) {
ast_copy_string ( z - > name , var - > name , sizeof ( z - > name ) ) ;
ast_copy_string ( z - > timezone , tzone , sizeof ( z - > timezone ) ) ;
ast_copy_string ( z - > msg_format , msg_format , sizeof ( z - > msg_format ) ) ;
AST_LIST_LOCK ( & zones ) ;
AST_LIST_INSERT_HEAD ( & zones , z , list ) ;
AST_LIST_UNLOCK ( & zones ) ;
} else {
ast_log ( AST_LOG_WARNING , " Invalid timezone definition at line %d \n " , var - > lineno ) ;
ast_free ( z ) ;
}
}
var = var - > next ;
}