[master] 4e2942a Rewrite CLI/Telnet in terms of suckaddrs
Poul-Henning Kamp
phk at FreeBSD.org
Thu Mar 12 00:59:16 CET 2015
commit 4e2942a6e2132fef3bbd9506a65d3f42d39a5963
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Wed Mar 11 23:58:59 2015 +0000
Rewrite CLI/Telnet in terms of suckaddrs
diff --git a/bin/varnishd/mgt/mgt_cli.c b/bin/varnishd/mgt/mgt_cli.c
index 53747ed..3920468 100644
--- a/bin/varnishd/mgt/mgt_cli.c
+++ b/bin/varnishd/mgt/mgt_cli.c
@@ -512,51 +512,51 @@ mgt_cli_secret(const char *S_arg)
secret_file = S_arg;
}
-void
-mgt_cli_telnet(const char *T_arg)
+static int __match_proto__(vss_resolver_f)
+mct_callback(void *priv, const struct suckaddr *sa)
{
- struct vss_addr **ta;
- int i, n, sock, good;
- struct telnet *tn;
- struct vsb *vsb;
+ int sock;
+ struct vsb *vsb = priv;
+ const char *err;
char abuf[VTCP_ADDRBUFSIZE];
char pbuf[VTCP_PORTBUFSIZE];
+ struct telnet *tn;
- AN(T_arg);
- n = VSS_resolve(T_arg, NULL, &ta);
- if (n == 0) {
- REPORT(LOG_ERR, "-T %s Could not be resolved\n", T_arg);
- exit(2);
- }
- good = 0;
- vsb = VSB_new_auto();
- XXXAN(vsb);
- for (i = 0; i < n; ++i) {
- VJ_master(JAIL_MASTER_HIGH);
- sock = VSS_listen(ta[i], 10);
- VJ_master(JAIL_MASTER_LOW);
- if (sock < 0)
- continue;
+ VJ_master(JAIL_MASTER_HIGH);
+ sock = VTCP_listen(sa, 10, &err);
+ VJ_master(JAIL_MASTER_LOW);
+ if (sock > 0) {
VTCP_myname(sock, abuf, sizeof abuf, pbuf, sizeof pbuf);
VSB_printf(vsb, "%s %s\n", abuf, pbuf);
- good++;
tn = telnet_new(sock);
tn->ev = vev_new();
- XXXAN(tn->ev);
+ AN(tn->ev);
tn->ev->fd = sock;
tn->ev->fd_flags = POLLIN;
tn->ev->callback = telnet_accept;
tn->ev->priv = tn;
AZ(vev_add(mgt_evb, tn->ev));
- free(ta[i]);
- ta[i] = NULL;
- }
- free(ta);
- if (good == 0) {
- REPORT(LOG_ERR, "-T %s could not be listened on.", T_arg);
- exit(2);
}
+ return (0);
+}
+
+void
+mgt_cli_telnet(const char *T_arg)
+{
+ int error;
+ const char *err;
+ struct vsb *vsb;
+
+ AN(T_arg);
+ vsb = VSB_new_auto();
+ AN(vsb);
+ error = VSS_resolver(T_arg, NULL, mct_callback, vsb, &err);
+ if (err != NULL)
+ ARGV_ERR("Could resolve -T argument to address\n\t%s\n", err);
+ AZ(error);
AZ(VSB_finish(vsb));
+ if (VSB_len(vsb) == 0)
+ ARGV_ERR("-T %s could not be listened on.", T_arg);
/* Save in shmem */
mgt_SHM_static_alloc(VSB_data(vsb), VSB_len(vsb) + 1, "Arg", "-T", "");
VSB_delete(vsb);
More information about the varnish-commit
mailing list