SS is less exit happy on syntax errors now

This commit is contained in:
Pentium44 2021-04-08 17:47:24 -07:00
parent 3c0b614f37
commit 7077c03e4f
4 changed files with 268 additions and 72 deletions

View File

@ -56,19 +56,26 @@ char *process_line(char *line)
char *parsed;
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
syn_error("ss:error:print syntax error, missing quote?");
{
syn_warn("ss:warn:print syntax error, missing quote?");
return NULL;
}
parsed = parse_vars(tok_srch);
if(parsed != NULL)
{
if(strtok(NULL, "\"") == NULL)
syn_error("ss:error:print syntax error, missing end quote?");
{
syn_warn("ss:warn:print syntax error, missing end quote?");
return NULL;
}
return parsed;
}
else
{
syn_error("ss:error:print compulation error!");
syn_warn("ss:warn:print compulation error, no argument?");
return NULL;
}
}
@ -77,10 +84,16 @@ char *process_line(char *line)
{
tok_srch = strtok(NULL, " ");
if(tok_srch == NULL)
syn_error("ss:error:sleep syntax error, need trailing integer for operation");
{
syn_warn("ss:warn:sleep syntax error, need trailing integer for operation");
return NULL;
}
if(strcmp(tok_srch, "\n") == 0 || strcmp(tok_srch, " \n") == 0)
syn_error("ss:error:sleep syntax error, need trailing integer for operation");
{
syn_warn("ss:warn:sleep syntax error, need trailing integer for operation");
return NULL;
}
/* if there is a new line, remove it */
if(tok_srch[strlen(tok_srch)-1] == '\n')
@ -97,13 +110,22 @@ char *process_line(char *line)
char *expr_return;
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
syn_error("ss:error:calc syntax error, missing quotes around equation?");
{
syn_warn("ss:warn:calc syntax error, missing quotes around equation");
return NULL;
}
if(strcmp(tok_srch, "\n") == 0 || (strcmp(tok_srch, " \n") == 0))
syn_error("ss:error:calc syntax error, missing quotes around equation?");
{
syn_warn("ss:warn:calc syntax error, missing equation?");
return NULL;
}
if(strtok(NULL, "\"") == NULL)
syn_error("ss:error:calc missing end quote");
{
syn_warn("ss:warn:calc syntax error, missing ending quote?");
return NULL;
}
expr_return = ss_expr(parse_vars(tok_srch));
@ -117,10 +139,16 @@ char *process_line(char *line)
char port[7]; // Should never be more than 6 characters
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
syn_error("ss:error:netlisten syntax error, missing quote?");
{
syn_warn("ss:warn:netlisten syntax error, missing beginning quote");
return NULL;
}
if(strcmp(tok_srch, "\n") == 0 || strcmp(tok_srch, " \n") == 0)
syn_error("ss:error:netlisten syntax error, missing quote?");
{
syn_warn("ss:warn:netlisten syntax error, missing address?");
return NULL;
}
if(strlen(parse_vars(tok_srch)) < 7)
{
@ -128,20 +156,29 @@ char *process_line(char *line)
}
else
{
syn_error("ss:error:network listen port too long");
syn_warn("ss:warn:netlisten syntax error, port too long?");
return NULL;
}
/* strtok to the content that will be written to file */
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
syn_error("ss:error:netlisten syntax error, missing quote?");
{
syn_warn("ss:warn:netlisten syntax error, missing quote?");
return NULL;
}
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
syn_error("ss:error:netlisten syntax error, missing quote?");
{
syn_warn("ss:warn:netlisten syntax error, missing quote?");
return NULL;
}
if(strcmp(tok_srch, "\n") == 0 || strcmp(tok_srch, " \n") == 0) {
syn_error("ss:error:netlisten syntax error, missing quote?");
if(strcmp(tok_srch, "\n") == 0 || strcmp(tok_srch, " \n") == 0)
{
syn_warn("ss:warn:netlisten syntax error, missing search string?");
return NULL;
}
strcpy(srch, parse_vars(tok_srch));
@ -149,18 +186,29 @@ char *process_line(char *line)
/* strtok to the socket response */
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
syn_error("ss:error:netlisten syntax error, missing quote?");
{
syn_warn("ss:warn:netlisten syntax error, missing quote?");
return NULL;
}
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
syn_error("ss:error:netlisten syntax error, missing quote?");
{
syn_warn("ss:warn:netlisten syntax error, missing quote?");
return NULL;
}
if(strcmp(tok_srch, "\n") == 0 || strcmp(tok_srch, " \n") == 0) {
syn_error("ss:error:netconnect syntax error on data entry (are you quoted?)");
if(strcmp(tok_srch, "\n") == 0 || strcmp(tok_srch, " \n") == 0)
{
syn_warn("ss:warn:netlisten syntax error, missing return string?");
return NULL;
}
if(strtok(NULL, "\"") == NULL)
syn_error("ss:error:netconnect syntax error, missing end quote");
{
syn_warn("ss:warn:netlisten syntax error, missing end quote?");
return NULL;
}
snet_listen(atoi(port), srch, parse_vars(tok_srch));
return NULL;
@ -172,10 +220,16 @@ char *process_line(char *line)
char port[7]; // Should never be more than 6 characters
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
syn_error("ss:error:nethttp syntax error, missing quote?");
{
syn_warn("ss:warn:nethttp syntax error, missing quote?");
return NULL;
}
if(strcmp(tok_srch, "\n") == 0 || strcmp(tok_srch, " \n") == 0)
syn_error("ss:error:netlisten syntax error, missing quote?");
{
syn_warn("ss:warn:nethttp syntax error, missing port value?");
return NULL;
}
if(strlen(parse_vars(tok_srch)) < 7)
{
@ -183,20 +237,31 @@ char *process_line(char *line)
}
else
{
syn_error("ss:error:nethttp listen port too long");
syn_warn("ss:warn:nethttp syntax error, missing quote?");
return NULL;
}
/* strtok to the content that will be written to file */
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
syn_error("ss:error:nethttp syntax error, missing quote?");
{
syn_warn("ss:warn:nethttp syntax error, missing quote?");
return NULL;
}
tok_srch = strtok(NULL, "\"");
if(strcmp(tok_srch, "\n") == 0 || strcmp(tok_srch, " \n") == 0)
syn_error("ss:error:nethttp syntax error on data entry (are you quoted?)");
{
syn_warn("ss:warn:nethttp syntax error, missing quote?");
return NULL;
}
if(strtok(NULL, "\"") == NULL)
syn_error("ss:error:nethttp syntax error, missing end quote");
{
syn_warn("ss:warn:nethttp syntax error, missing quote?");
return NULL;
}
if(atoi(parse_vars(tok_srch)) == 1 || atoi(parse_vars(tok_srch)) == 0)
{
@ -204,9 +269,11 @@ char *process_line(char *line)
}
else
{
syn_error("ss:error:nethttp incorrect fork value, 0=nofork, 1=fork");
syn_warn("ss:warn:nethttp syntax error, fork = 1, not 0");
return NULL;
}
return NULL;
}
@ -219,11 +286,18 @@ char *process_line(char *line)
/* strtok to filename of function */
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
syn_error("ss:error:nettoss syntax error, missing quote?");
{
syn_warn("ss:warn:nettoss syntax error, missing quote?");
return NULL;
}
/* Check to see if syntax is correct */
if(strcmp(tok_srch, "\n") == 0 || strcmp(tok_srch, " \n") == 0)
syn_error("ss:error:nettoss syntax error, missing quote?");
{
syn_warn("ss:warn:nettoss syntax error, missig address?");
return NULL;
}
/* open file */
strcpy(address, parse_vars(tok_srch));
@ -231,29 +305,51 @@ char *process_line(char *line)
/* strtok to the content that will be written to file */
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
syn_error("ss:error:nettoss syntax error, missing quote?");
{
syn_warn("ss:warn:nettoss syntax error, missing quote?");
return NULL;
}
tok_srch = strtok(NULL, "\"");
if(strcmp(tok_srch, "\n") == 0 || strcmp(tok_srch, " \n") == 0)
syn_error("ss:error:nettoss syntax error on data entry (are you quoted?)");
{
syn_warn("ss:warn:nettoss syntax error, missing quote?");
return NULL;
}
if(strlen(parse_vars(tok_srch)) > 6)
syn_error("ss:error:nettoss port too long");
{
syn_warn("ss:warn:nettoss syntax error, port too long");
return NULL;
}
strcpy(port, parse_vars(tok_srch));
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
syn_error("ss:error:nettoss syntax error, missing quote?");
{
syn_warn("ss:warn:nettoss syntax error, missing quote?");
return NULL;
}
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
syn_error("ss:error:nettoss syntax error, missing quote?");
{
syn_warn("ss:warn:nettoss syntax error, missing quote?");
return NULL;
}
if(strcmp(tok_srch, "\n") == 0 || strcmp(tok_srch, " \n") == 0)
syn_error("ss:error:nettoss syntax error, missing quote?");
{
syn_warn("ss:warn:nettoss syntax error, send string");
return NULL;
}
if(strtok(NULL, "\"") == NULL)
syn_error("ss:error:nettoss syntax error, missing end quote");
{
syn_warn("ss:warn:nettoss syntax error, missing end quote?");
return NULL;
}
strcpy(data, parse_vars(tok_srch));
@ -262,15 +358,22 @@ char *process_line(char *line)
}
/* ss encrypt function */
else if(strncmp("encrypt",tok_srch,7) == 0 || strncmp("encode", tok_srch,6) == 0)
else if(strncmp("encode", tok_srch,6) == 0)
{
char *var_conv;
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
syn_error("ss:error:encode syntax error, requires data in quotes");
{
syn_warn("ss:warn:encode syntax error, missing quote?");
return NULL;
}
if(strcmp(tok_srch, "\n") == 0 || strcmp(tok_srch, " \n") == 0)
syn_error("ss:error:encode syntax error, requires data in quotes");
{
syn_warn("ss:warn:encode syntax error, encode string?");
return NULL;
}
var_conv = parse_vars(tok_srch);
if(var_conv != NULL)
@ -279,18 +382,31 @@ char *process_line(char *line)
encrp = ss_encrypt(var_conv);
return encrp;
}
else
{
syn_warn("ss:warn:encode returned NULL!");
return NULL;
}
}
/* ss decrypt function */
else if(strncmp("decrypt",tok_srch,7) == 0 || strncmp("decode", tok_srch,6) == 0)
else if(strncmp("decode", tok_srch,6) == 0)
{
char *var_conv;
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
syn_error("ss:error:decode syntax error, requires data in quotes");
{
syn_warn("ss:warn:decode syntax error, missing quote?");
return NULL;
}
if(strcmp(tok_srch, "\n") == 0 || strcmp(tok_srch, " \n") == 0)
syn_error("ss:error:decode syntax error, requires data in quotes");
{
syn_warn("ss:warn:decode syntax error, missing decode data?");
return NULL;
}
var_conv = parse_vars(tok_srch);
if(var_conv != NULL)
@ -299,6 +415,11 @@ char *process_line(char *line)
decrp = ss_decrypt(var_conv);
return decrp;
}
else
{
syn_warn("ss:warn:decode returned NULL!");
return NULL;
}
}
/* builtin md5 function */
@ -308,10 +429,16 @@ char *process_line(char *line)
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
syn_error("ss:error:md5 syntax error, requires a file argument in quotes");
{
syn_warn("ss:warn:md5 syntax error, missing quote?");
return NULL;
}
if(strcmp(tok_srch, "\n") == 0 || strcmp(tok_srch, " \n") == 0)
syn_error("ss:error:md5 syntax error, requires a file argument in quotes");
{
syn_warn("ss:warn:md5 syntax error, need filename");
return NULL;
}
file_line = parse_vars(tok_srch);
file_md5_val = md5_file(file_line);
@ -325,6 +452,7 @@ char *process_line(char *line)
else
{
free(catfile);
syn_warn("ss:warn:md5 returned NULL!");
return NULL;
}
}
@ -336,20 +464,30 @@ char *process_line(char *line)
int return_val;
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
syn_error("ss:error:exec syntax error, requires a file argument in quotes");
{
syn_warn("ss:warn:exec syntax error, missing quote?");
return NULL;
}
if(strcmp(tok_srch, "\n") == 0 || strcmp(tok_srch, " \n") == 0)
syn_error("ss:error:exec syntax error, requires argument in quotes");
{
syn_warn("ss:warn:md5 syntax error, missing execution switch?");
return NULL;
}
if(strtok(NULL, "\"") == NULL)
syn_error("ss:error:exec syntax error, missing end quote");
{
syn_warn("ss:warn:md5 syntax error, missing quote?");
return NULL;
}
cmd_line = parse_vars(tok_srch);
return_val = system(cmd_line);
if(return_val != 0)
{
printf("ss:warning:%s exited with error code %d\n", cmd_line, return_val);
syn_warn("ss:warn:md5 syntax error, missing quote?");
}
return NULL;
}
@ -362,12 +500,17 @@ char *process_line(char *line)
/* strtok to filename of function */
tok_srch = strtok(NULL, "\"");
//if(tok_srch == NULL)
// syn_error("ss:error:write syntax error, requires a file argument in quotes");
{
syn_warn("ss:warn:write syntax error, missing quote?");
return NULL;
}
/* Check to see if syntax is correct */
if(strcmp(tok_srch, "\n") == 0 || strcmp(tok_srch, " \n") == 0)
syn_error("ss:error:write syntax error, requires filename followed by data; both in quotes");
{
syn_warn("ss:warn:write syntax error, missing filename");
return NULL;
}
/* open file */
filename = parse_vars(tok_srch);
@ -375,20 +518,37 @@ char *process_line(char *line)
/* Check if file exists and can be opened */
if(write_file == NULL)
{
syn_error("ss:error:write, cannot write to file specified");
syn_warn("ss:warn:write syntax error, missing quote?");
return NULL;
}
/* strtok to the content that will be written to file */
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
{
syn_warn("ss:warn:write syntax error, missing quote?");
return NULL;
}
tok_srch = strtok(NULL, "\"");
if(strcmp(tok_srch, "\n") == 0 ||
strcmp(tok_srch, " \n") == 0 || tok_srch == NULL) {
if(tok_srch == NULL)
{
syn_warn("ss:warn:write syntax error, missing quote?");
return NULL;
}
if(strcmp(tok_srch, "\n") == 0 || strcmp(tok_srch, " \n") == 0)
{
fclose(write_file);
syn_error("ss:error:write syntax error on data entry (are you quoted?)");
syn_warn("ss:warn:write syntax error, missing write data?");
return NULL;
}
if(strtok(NULL, "\"") == NULL)
syn_error("ss:error:write syntax error, missing end quote");
{
syn_warn("ss:warn:write syntax error, missing quote?");
return NULL;
}
file_content = parse_vars(tok_srch);
fprintf(write_file, "%s\n", file_content);
@ -407,13 +567,22 @@ char *process_line(char *line)
/* strtok to filename of function */
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
syn_error("ss:error:read syntax error, requires a file argument in quotes");
{
syn_warn("ss:warn:write syntax error, missing quote?");
return NULL;
}
if(strcmp(tok_srch, "\n") == 0 || strcmp(tok_srch, " \n") == 0)
syn_error("ss:error:read syntax error, missing filename / in quotes");
{
syn_warn("ss:warn:write syntax error, missing quote?");
return NULL;
}
if(strtok(NULL, "\"") == NULL)
syn_error("ss:error:read syntax error, missing end quote");
{
syn_warn("ss:warn:write syntax error, missing quote?");
return NULL;
}
/* Pull any variables out of the file name
that may be, and BAM, variable fill! */
@ -432,7 +601,9 @@ char *process_line(char *line)
/* Check if file was opened successfully */
if(read_file == NULL)
{
syn_error("ss:error:read, failed to read from file");
free(dynfile);
syn_warn("ss:warn:write, failed open");
return NULL;
}
while(fgets(read_line, sizeof(read_line), read_file) != NULL)
@ -446,9 +617,13 @@ char *process_line(char *line)
}
else
{
syn_error("ss:error:read, file too large, 2MB max");
fclose(read_file);
free(dynfile);
syn_warn("ss:warn:write, file too large (2MB max)");
return NULL;
}
fclose(read_file);
// For now print to test //
@ -461,13 +636,22 @@ char *process_line(char *line)
char *del_filename;
tok_srch = strtok(NULL, "\"");
if(tok_srch == NULL)
syn_error("ss:error:delete syntax error, missing end quote");
{
syn_warn("ss:warn:delete syntax error, missing quote?");
return NULL;
}
if(strcmp(tok_srch, "\n") == 0 || strcmp(tok_srch, " \n") == 0)
syn_error("ss:error:delete syntax error, missing file argument");
{
syn_warn("ss:warn:delete syntax error, missing filename");
return NULL;
}
if(strtok(NULL, "\"") == NULL)
syn_error("ss:error:delete syntax error, missing end quote");
{
syn_warn("ss:warn:delete syntax error, missing quote?");
return NULL;
}
/* Pull variables out of filename if any */
del_filename = parse_vars(tok_srch);
@ -480,12 +664,15 @@ char *process_line(char *line)
}
else
{
syn_error("ss:error:delete, file is not accessible");
syn_warn("ss:warn:delete, file not accessible");
return NULL;
}
}
else
{
syn_error("ss:error:delete, file not found");
syn_warn("ss:warn:delete, file not found");
return NULL;
}
}
@ -501,7 +688,7 @@ char *process_line(char *line)
char *bq_check;
tok_srch = strtok(NULL, "=");
// Check for back quotes, return string with backquotes processed
bq_check = strip_nl(parse_bq(tok_srch));
bq_check = strip_nl(parse_bq(parse_vars(tok_srch)));
// Don't check if variable is blank, if so let it fly!
set_var(varc, varname_tmp, bq_check);
/* printf("ss: var '%s' -> %s", varname_tmp, get_var_data(varname_tmp)); */

View File

@ -134,7 +134,8 @@ void snet_toss(char *address, int port, char *string)
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd == -1)
{
syn_error("ss:error:network failed to create socket");
syn_warn("ss:warn:network, failed to create socket");
return;
}
bzero(&servaddr, sizeof(servaddr));
@ -147,7 +148,9 @@ void snet_toss(char *address, int port, char *string)
// connect the client socket to server socket
if (connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) != 0)
{
syn_error("ss:error:network failled to connect");
syn_warn("ss:warn:network, failed to connect to socket");
close(sockfd);
return;
}
else
{
@ -155,7 +158,7 @@ void snet_toss(char *address, int port, char *string)
}
// If write reports -1, exit on error.
if(write(sockfd, string, strlen(string)) < 0) syn_error("ss:net:socket write error!");
if(write(sockfd, string, strlen(string)) < 0) syn_warn("ss:warn:network, socket write error!");
// close the socket after pushing content
close(sockfd);

View File

@ -17,6 +17,11 @@ void syn_error(char *message)
exit(1);
}
void syn_warn(char *message)
{
printf("%s\n", message);
}
char *strip_nl (char *string)
{
int n = strlen (string);

View File

@ -6,6 +6,7 @@
*/
void syn_error(char *message);
void syn_warn(char *message);
char *strip_nl(char *string);
int file_exists(char *path);
int is_dir(char *path);