aboutsummaryrefslogtreecommitdiffstats
path: root/src/client/rspamc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/rspamc.c')
-rw-r--r--src/client/rspamc.c46
1 files changed, 40 insertions, 6 deletions
diff --git a/src/client/rspamc.c b/src/client/rspamc.c
index 5280914b9..8f7f463bb 100644
--- a/src/client/rspamc.c
+++ b/src/client/rspamc.c
@@ -67,12 +67,17 @@ static GList *children;
g_queue_push_tail ((o), nh); \
} while (0)
+static gboolean rspamc_password_callback (const gchar *option_name,
+ const gchar *value,
+ gpointer data,
+ GError **error);
+
static GOptionEntry entries[] =
{
{ "connect", 'h', 0, G_OPTION_ARG_STRING, &connect_str,
"Specify host and port", NULL },
- { "password", 'P', 0, G_OPTION_ARG_STRING, &password,
- "Specify control password", NULL },
+ { "password", 'P', G_OPTION_FLAG_OPTIONAL_ARG, G_OPTION_ARG_CALLBACK,
+ &rspamc_password_callback, "Specify control password", NULL },
{ "classifier", 'c', 0, G_OPTION_ARG_STRING, &classifier,
"Classifier to learn spam or ham", NULL },
{ "weight", 'w', 0, G_OPTION_ARG_INT, &weight,
@@ -292,6 +297,31 @@ struct rspamc_callback_data {
gdouble start;
};
+gboolean
+rspamc_password_callback (const gchar *option_name,
+ const gchar *value,
+ gpointer data,
+ GError **error)
+{
+ guint plen = 8192;
+
+ if (value != NULL) {
+ password = g_strdup (value);
+ }
+ else {
+ /* Read password from console */
+ password = g_malloc0 (plen);
+ plen = rspamd_read_passphrase (password, plen, 0, NULL);
+ }
+
+ if (plen == 0) {
+ rspamd_fprintf (stderr, "Invalid password\n");
+ exit (EXIT_FAILURE);
+ }
+
+ return TRUE;
+}
+
/*
* Parse command line
*/
@@ -1208,12 +1238,16 @@ rspamc_client_cb (struct rspamd_client_connection *conn,
}
else {
if (cmd->need_input) {
- rspamd_fprintf (out, "Results for file: %s (%.3f seconds)\n",
- cbdata->filename, diff);
+ if (!compact) {
+ rspamd_fprintf (out, "Results for file: %s (%.3f seconds)\n",
+ cbdata->filename, diff);
+ }
}
else {
- rspamd_fprintf (out, "Results for command: %s (%.3f seconds)\n",
- cmd->name, diff);
+ if (!compact) {
+ rspamd_fprintf (out, "Results for command: %s (%.3f seconds)\n",
+ cmd->name, diff);
+ }
}
if (result != NULL) {