X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2Fcmd_neonserv_extscript.c;h=fc9dc5ab5efb7bd47dacf8bab5f325eee3c7aaab;hb=c575e458c6257e75b97884847143b20965a5dfda;hp=53b173dfb5254d1231f4e7ae493679b82bcc6377;hpb=09378f3830dc76e8c02b7a5eb515ae4875395b48;p=NeonServV5.git diff --git a/src/cmd_neonserv_extscript.c b/src/cmd_neonserv_extscript.c index 53b173d..fc9dc5a 100644 --- a/src/cmd_neonserv_extscript.c +++ b/src/cmd_neonserv_extscript.c @@ -1,4 +1,4 @@ -/* cmd_neonserv_extscript.c - NeonServ v5.1 +/* cmd_neonserv_extscript.c - NeonServ v5.2 * Copyright (C) 2011 Philipp Kreil (pk910) * * This program is free software: you can redistribute it and/or modify @@ -32,6 +32,7 @@ CMD_BIND(neonserv_cmd_extscript) { int commandpos = 0; char part[MAXLEN]; int partpos; + int escape_param; int answere_channel = 0; //check first arg if(argc && !stricmp(argv[0], "toys")) { @@ -66,6 +67,7 @@ CMD_BIND(neonserv_cmd_extscript) { commandpos = sprintf(command, "%s", argv[0]); for(i = 1; i < argc-1; i++) { partpos = 0; + escape_param = 1; if(argv[i][0] == '$') { argv[i]++; if(argv[i][strlen(argv[i])-1] == '-') { @@ -88,20 +90,24 @@ CMD_BIND(neonserv_cmd_extscript) { } } else { partpos = sprintf(part, "%s", argv[i]); + escape_param = 0; } //escape shell argument command[commandpos++] = ' '; - command[commandpos++] = '\''; - for(j = 0; j < partpos; j++) { - if(part[j] == '\'') { - command[commandpos++] = '\''; - command[commandpos++] = '\\'; - command[commandpos++] = '\''; - command[commandpos++] = '\''; - } else - command[commandpos++] = part[j]; - } - command[commandpos++] = '\''; + if(escape_param) { + command[commandpos++] = '\''; + for(j = 0; j < partpos; j++) { + if(part[j] == '\'') { + command[commandpos++] = '\''; + command[commandpos++] = '\\'; + command[commandpos++] = '\''; + command[commandpos++] = '\''; + } else + command[commandpos++] = part[j]; + } + command[commandpos++] = '\''; + } else + commandpos += sprintf(command + commandpos, " %s", part); } command[commandpos] = '\0'; //we should now have a valid command