X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=kernel%2Furp.c;h=c2c40100d5b0a2644ac0ce393a9764af173e75ac;hb=d7566a5302886d8eff2c9cf6c1609cfc8e012bf3;hp=ff1eaa028592a8c1ca7bc32b92ccc5edd3ea600d;hpb=76221da7b9acbdec5250f9078bc3872749d8fa7a;p=egate.git diff --git a/kernel/urp.c b/kernel/urp.c index ff1eaa0..c2c4010 100644 --- a/kernel/urp.c +++ b/kernel/urp.c @@ -45,7 +45,26 @@ * Europagate, 1995 * * $Log: urp.c,v $ - * Revision 1.39 1995/05/22 14:57:30 adam + * Revision 1.45 1995/07/20 08:20:24 adam + * Minor changes. + * + * Revision 1.44 1995/07/11 12:28:53 adam + * New functions ccl_token_simple and ccl_token_del used. + * + * Revision 1.43 1995/07/11 11:49:13 adam + * LINE_MAX renamed to STR_LINE_MAX. + * + * Revision 1.42 1995/07/03 12:59:29 adam + * New option for eti: -c dir to chdir before start. + * Setting change: gw.max.show defaults to 100. + * + * Revision 1.41 1995/07/03 08:20:18 adam + * More help information and better diagnostics. + * + * Revision 1.40 1995/05/23 08:13:00 adam + * Minor changes. + * + * Revision 1.39 1995/05/22 14:57:30 adam * Next default record position also set by last p=... in show. * * Revision 1.38 1995/05/19 13:26:00 adam @@ -178,7 +197,6 @@ Todo: info/status (other name?) better persistence diagnostics - resource gw.path - use chdir call instead Optional: automatic information about target-aliases: name, query-support, etc. @@ -200,7 +218,7 @@ static void present (const char *set, int offset, int number, struct ccl_token *format_token); -static char line_buf[LINE_MAX+1]; +static char line_buf[STR_LINE_MAX+1]; static void put_esc_str (const char *s) { @@ -258,14 +276,13 @@ struct command_word { char *resource_suffix; }; -static int command_search (struct command_word *tab, struct ccl_token *cmd, -const char *resource_prefix) +static int command_search_str (struct command_word *tab, const char *cmd_name, + int cmd_len, const char *resource_prefix) { int no = 1; assert (resource_prefix); assert (tab); - assert (cmd); while (tab->default_value) { char *cp, command_names[60]; @@ -284,8 +301,8 @@ const char *resource_prefix) if ((split = strchr (cp, ' '))) *split = '\0'; - if (cmd->len == strlen(cp) && - !memcmp (cmd->name, cp, cmd->len)) + if (cmd_len == strlen(cp) && + !memcmp (cmd_name, cp, cmd_len)) return no; if (!split) break; @@ -297,6 +314,12 @@ const char *resource_prefix) return 0; } +static int command_search (struct command_word *tab, struct ccl_token *cmd, + const char *resource_prefix) +{ + return command_search_str (tab, cmd->name, cmd->len, resource_prefix); +} + static struct error_no_struct { int no; char *resource_name; @@ -334,7 +357,7 @@ static int email_header (struct str_queue *sq, { *from_str = '\0'; *subject_str = '\0'; - while (str_queue_deq (sq, line_buf, LINE_MAX)) + while (str_queue_deq (sq, line_buf, STR_LINE_MAX)) { if (line_buf[0] == '\n') return 0; @@ -374,6 +397,12 @@ static int exec_help (struct ccl_token *list) put_esc_str (gw_res_get (info.kernel_res, "gw.help.show", "show - retrieves and displays " "records\n")); + put_esc_str (sep); + put_esc_str (gw_res_get (info.kernel_res, "gw.help.def", + "def sets/gets definitons\n")); + put_esc_str (sep); + put_esc_str (gw_res_get (info.kernel_res, "gw.help.account", + "account sets authentication string\n")); return 0; } @@ -444,7 +473,7 @@ static int exec_find (struct ccl_token *list, const char *search_str) { fprintf (reply_fd, "%s\n", gw_res_get (info.kernel_res, "gw.err.search.fail", - "Search fail. Connection closed")); + "Search fail.")); return -1; } if (p->errcode != -1) @@ -559,7 +588,7 @@ static void present (const char *set, int offset, int number, int max_number; char format_str[16]; - max_number = gw_res_int (info.kernel_res, "gw.max.show", 200); + max_number = gw_res_int (info.kernel_res, "gw.max.show", 100); if (number > max_number) number = max_number; gw_log (GW_LOG_DEBUG, KERNEL_LOG, "present in set %s", set); @@ -570,7 +599,6 @@ static void present (const char *set, int offset, int number, { int i; zass_record *pp; - char path[128]; int record_log_fd = -1; const char *record_log_name; @@ -578,12 +606,11 @@ static void present (const char *set, int offset, int number, NULL); if (record_log_name) { - sprintf (path, "%s/%s", gw_res_get (info.kernel_res, - "gw.path", "."), - record_log_name ); - record_log_fd = open (path, O_WRONLY|O_CREAT|O_APPEND, 0666); + record_log_fd = open (record_log_name, + O_WRONLY|O_CREAT|O_APPEND, 0666); if (record_log_fd == -1) - gw_log (GW_LOG_WARN|GW_LOG_ERRNO, "Cannot open %s", path); + gw_log (GW_LOG_WARN|GW_LOG_ERRNO, "Cannot open %s", + record_log_name); } fprintf (reply_fd, gw_res_get (info.kernel_res, "gw.msg.records", @@ -881,9 +908,7 @@ static int exec_def (struct ccl_token *list) if (info.userid < 0) return -1; - sprintf (fname, "%s/user.%d.r", gw_res_get (info.kernel_res, - "gw.path", "."), - info.userid); + sprintf (fname, "user.%d.r", info.userid); if (list->kind == CCL_TOK_EOL) show_def (); @@ -966,12 +991,16 @@ static int exec_command (const char *str, int *stop_flag) { NULL, NULL } }; - struct ccl_token *cmd = ccl_tokenize (str); + struct ccl_token *cmd; + const char *cp = str; int no; + while (*cp && *cp != ' ' && *cp != '\n' && *cp != '\t' && *cp != '\r') + cp++; + *stop_flag = 0; - if (cmd->kind != CCL_TOK_EOL && - (no = command_search (command_tab, cmd, "ccl.command."))) + no = command_search_str (command_tab, str, cp-str, "ccl.command."); + if (no) { if (no == 1 || no == 2 || no == 3) /* find/show/base? */ { @@ -980,7 +1009,7 @@ static int exec_command (const char *str, int *stop_flag) fprintf (reply_fd, "\n> %s\n", str); if (!info.zass) /* fail? */ { - fprintf (reply_fd, "%s\n", + fprintf (reply_fd, "\n%s\n", gw_res_get (info.kernel_res, "gw.err.no.target", "No connection established - " "command ignored")); @@ -991,33 +1020,50 @@ static int exec_command (const char *str, int *stop_flag) fprintf (reply_fd, "\n> %s\n", str); switch (no) { - case 1: - return exec_find (cmd->next, str); - case 2: - return exec_show (cmd->next); - case 3: - return exec_base (cmd->next); - case 4: - return exec_help (cmd->next); + case 1: /* find */ + cmd = ccl_tokenize (cp); + exec_find (cmd, str); + break; + case 2: /* show */ + cmd = ccl_tokenize (cp); + exec_show (cmd); + break; + case 3: /* base */ + cmd = ccl_token_simple (cp); + exec_base (cmd); + break; + case 4: /* help */ + cmd = ccl_token_simple (cp); + exec_help (cmd); + break; case 6: /* continue */ *stop_flag = 2; return 0; case 7: /* status */ - return exec_status (cmd->next); + exec_status (cmd); + return 0; case 8: /* stop */ *stop_flag = 1; return 0; case 9: /* target */ - return exec_target (cmd->next); + cmd = ccl_token_simple (cp); + exec_target (cmd); + break; case 10: /* def */ - return exec_def (cmd->next); - case 11: - return exec_account (cmd->next); + cmd = ccl_token_simple (cp); + exec_def (cmd); + break; + case 11: /* account */ + cmd = ccl_token_simple (cp); + exec_account (cmd); + break; default: + cmd = NULL; fprintf (reply_fd, "%s\n", gw_res_get (info.kernel_res, "gw.err.unimplemented", "Not implemented yet")); } + ccl_token_del (cmd); } else { @@ -1086,7 +1132,7 @@ int urp_command (struct str_queue *queue) char *cp; int stop_flag; - while (str_queue_deq (queue, line_buf, LINE_MAX)) + while (str_queue_deq (queue, line_buf, STR_LINE_MAX)) { if (line_buf[0] == '\n') if (info.command_no) @@ -1106,7 +1152,7 @@ int urp_command (struct str_queue *queue) if (stop_flag) { info.command_no++; /* prevent help! */ - while (str_queue_deq (queue, line_buf, LINE_MAX)) + while (str_queue_deq (queue, line_buf, STR_LINE_MAX)) ; return stop_flag; }