r5123 - in trunk/varnish-cache/bin: varnishadm varnishd
phk at varnish-cache.org
phk at varnish-cache.org
Wed Aug 25 10:49:27 CEST 2010
Author: phk
Date: 2010-08-25 10:49:27 +0200 (Wed, 25 Aug 2010)
New Revision: 5123
Modified:
trunk/varnish-cache/bin/varnishadm/varnishadm.c
trunk/varnish-cache/bin/varnishd/mgt_cli.c
Log:
The -T argument can be specified as :0 which will just find one or
two (IPv4/6) available sockets. In this case, writing the :0 into
the VSM will not tell varnishadm where to look.
Write the actual socket addresses, one per line instead, and have
varnishadm try them all.
Make -n mutually exclusive with -S and -T on varnishadm.
Modified: trunk/varnish-cache/bin/varnishadm/varnishadm.c
===================================================================
--- trunk/varnish-cache/bin/varnishadm/varnishadm.c 2010-08-25 08:42:45 UTC (rev 5122)
+++ trunk/varnish-cache/bin/varnishadm/varnishadm.c 2010-08-25 08:49:27 UTC (rev 5123)
@@ -79,21 +79,23 @@
sock = VSS_open(T_arg, timeout);
if (sock < 0) {
- fprintf(stderr, "Connection failed\n");
- exit(1);
+ fprintf(stderr, "Connection failed (%s)\n", T_arg);
+ return (-1);
}
(void)cli_readres(sock, &status, &answer, timeout);
if (status == CLIS_AUTH) {
if (S_arg == NULL) {
fprintf(stderr, "Authentication required\n");
- exit(1);
+ AZ(close(sock));
+ return(-1);
}
fd = open(S_arg, O_RDONLY);
if (fd < 0) {
fprintf(stderr, "Cannot open \"%s\": %s\n",
S_arg, strerror(errno));
- exit (1);
+ AZ(close(sock));
+ return (-1);
}
CLI_response(fd, answer, buf);
AZ(close(fd));
@@ -106,7 +108,8 @@
}
if (status != CLIS_OK) {
fprintf(stderr, "Rejected %u\n%s\n", status, answer);
- exit(1);
+ AZ(close(sock));
+ return (-1);
}
free(answer);
@@ -114,10 +117,12 @@
(void)cli_readres(sock, &status, &answer, timeout);
if (status != CLIS_OK || strstr(answer, "PONG") == NULL) {
fprintf(stderr, "No pong received from server\n");
- exit(1);
+ AZ(close(sock));
+ return(-1);
}
free(answer);
+ fprintf(stderr, "CLI connected to %s\n", T_arg);
return (sock);
}
@@ -205,19 +210,61 @@
usage(void)
{
fprintf(stderr,
- "usage: varnishadm [-t timeout] [-S secretfile] "
+ "usage: varnishadm [-n ident] [-t timeout] [-S secretfile] "
"-T [address]:port command [...]\n");
+ fprintf(stderr, "\t-n is mutually exlusive with -S and -T\n");
exit(1);
}
+static int
+n_arg_sock(const char *n_arg)
+{
+ char *T_arg = NULL;
+ char *S_arg = NULL;
+ struct VSM_data *vsd;
+ char *p;
+ int sock;
+
+ vsd = VSM_New();
+ assert(VSL_Arg(vsd, 'n', n_arg));
+ if (VSM_Open(vsd, 1)) {
+ fprintf(stderr, "Could not open shared memory\n");
+ return (-1);
+ }
+ if (T_arg == NULL) {
+ p = VSM_Find_Chunk(vsd, "Arg", "-T", "", NULL);
+ if (p == NULL) {
+ fprintf(stderr, "No -T arg in shared memory\n");
+ return (-1);
+ }
+ T_arg = strdup(p);
+ }
+ if (S_arg == NULL) {
+ p = VSM_Find_Chunk(vsd, "Arg", "-S", "", NULL);
+ if (p != NULL)
+ S_arg = strdup(p);
+ }
+ sock = -1;
+ while (*T_arg) {
+ p = strchr(T_arg, '\n');
+ AN(p);
+ *p = '\0';
+ sock = cli_sock(T_arg, S_arg);
+ if (sock >= 0)
+ break;
+ T_arg = p + 1;
+ }
+ free(T_arg);
+ free(S_arg);
+ return (sock);
+}
+
int
main(int argc, char * const *argv)
{
const char *T_arg = NULL;
const char *S_arg = NULL;
const char *n_arg = NULL;
- struct VSM_data *vsd;
- char *p;
int opt, sock;
while ((opt = getopt(argc, argv, "n:S:T:t:")) != -1) {
@@ -243,30 +290,19 @@
argv += optind;
if (n_arg != NULL) {
- vsd = VSM_New();
- assert(VSL_Arg(vsd, 'n', n_arg));
- if (!VSM_Open(vsd, 1)) {
- if (T_arg == NULL) {
- p = VSM_Find_Chunk(vsd, "Arg", "-T", "", NULL);
- if (p != NULL) {
- T_arg = strdup(p);
- }
- }
- if (S_arg == NULL) {
- p = VSM_Find_Chunk(vsd, "Arg", "-S", "", NULL);
- if (p != NULL) {
- S_arg = strdup(p);
- }
- }
+ if (T_arg != NULL || S_arg != NULL) {
+ usage();
}
+ sock = n_arg_sock(n_arg);
+ if (sock < 0)
+ exit(2);
+ } else if (T_arg == NULL) {
+ usage();
+ } else {
+ assert(T_arg != NULL);
+ sock = cli_sock(T_arg, S_arg);
}
- if (T_arg == NULL)
- usage();
-
- assert(T_arg != NULL);
- sock = cli_sock(T_arg, S_arg);
-
if (argc > 0)
do_args(sock, argc, argv);
else
Modified: trunk/varnish-cache/bin/varnishd/mgt_cli.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/mgt_cli.c 2010-08-25 08:42:45 UTC (rev 5122)
+++ trunk/varnish-cache/bin/varnishd/mgt_cli.c 2010-08-25 08:49:27 UTC (rev 5123)
@@ -545,23 +545,24 @@
int i, n, sock, good;
struct telnet *tn;
char *p;
+ struct vsb *vsb;
+ char abuf[TCP_ADDRBUFSIZE];
+ char pbuf[TCP_PORTBUFSIZE];
- /* Save in shmem */
- i = strlen(T_arg);
- p = VSM_Alloc(i + 1, "Arg", "-T", "");
- AN(p);
- strcpy(p, T_arg);
-
n = VSS_resolve(T_arg, NULL, &ta);
if (n == 0) {
- fprintf(stderr, "Could not open management port\n");
+ REPORT(LOG_ERR, "-T %s Could not be resolved\n", T_arg);
exit(2);
}
good = 0;
+ vsb = vsb_newauto();
+ XXXAN(vsb);
for (i = 0; i < n; ++i) {
sock = VSS_listen(ta[i], 10);
if (sock < 0)
continue;
+ TCP_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();
@@ -578,6 +579,13 @@
REPORT(LOG_ERR, "-T %s could not be listened on.", T_arg);
exit(2);
}
+ vsb_finish(vsb);
+ AZ(vsb_overflowed(vsb));
+ /* Save in shmem */
+ p = VSM_Alloc(vsb_len(vsb) + 1, "Arg", "-T", "");
+ AN(p);
+ strcpy(p, vsb_data(vsb));
+ vsb_delete(vsb);
}
/* Reverse CLI ("Master") connections --------------------------------*/
More information about the varnish-commit
mailing list