Browse Source

Closes #80 Guard NEW and DUPLICATE against existing session names.

tags/v1.6.0
Nils 3 years ago
parent
commit
79f2a16890
1 changed files with 42 additions and 1 deletions
  1. +42
    -1
      src/nsmd.cpp

+ 42
- 1
src/nsmd.cpp View File

@@ -433,6 +433,23 @@ path_is_valid ( const char *path )
return r;
}

int
session_already_exists ( const char * session_name)
{
//A session is defined as a path with the file session.nsm
struct stat st_session_exists_check;
char * path;
asprintf( &path, "%s/%s/session.nsm", session_root, session_name );
if ( stat (path, &st_session_exists_check) == 0) {
free( path );
return 0; // Already exists
}
else {
free( path );
return -1; // All good
}
}

int
mkpath ( const char *path, bool create_final_directory )
{
@@ -1590,6 +1607,17 @@ OSC_HANDLER( duplicate )
goto done;
}

if ( session_already_exists(&argv[0]->s) == 0) {

osc_server->send( sender_addr, "/error", path,
ERR_CREATE_FAILED,
"Session name already exists." );

pending_operation = COMMAND_NONE;

return 0;
}

command_all_clients_to_save();

if ( clients_have_errors() )
@@ -1636,6 +1664,7 @@ OSC_HANDLER( duplicate )
ERR_NO_SUCH_FILE,
"No such file." );
free(spath);
pending_operation = COMMAND_NONE;
return -1;
}

@@ -1678,7 +1707,19 @@ OSC_HANDLER( new )
return 0;
}

if ( session_path )
if ( session_already_exists(&argv[0]->s) == 0) {

osc_server->send( sender_addr, "/error", path,
ERR_CREATE_FAILED,
"Session name already exists." );

pending_operation = COMMAND_NONE;

return 0;
}


if ( session_path ) //Already a session running?
{
command_all_clients_to_save();



Loading…
Cancel
Save