Jason, The patch now correctly checks fp instead of pid-file. Also, the pid-file is now created before forking so that openconnect can be aborted on failure. Steven Allen --- main.c | 22 ++++++++++++++++++++++ openconnect.8 | 9 +++++++++ 2 files changed, 31 insertions(+), 0 deletions(-) diff --git a/main.c b/main.c index bee6502..a5c6c47 100644 --- a/main.c +++ b/main.c @@ -81,6 +81,7 @@ enum { OPT_NO_HTTP_KEEPALIVE, OPT_NO_PASSWD, OPT_NO_PROXY, + OPT_PIDFILE, OPT_PASSWORD_ON_STDIN, OPT_PRINTCOOKIE, OPT_RECONNECT_TIMEOUT, @@ -91,6 +92,7 @@ enum { static struct option long_options[] = { {"background", 0, 0, 'b'}, + {"pid-file", 1, 0, OPT_PIDFILE}, {"certificate", 1, 0, 'c'}, {"sslkey", 1, 0, 'k'}, {"cookie", 1, 0, 'C'}, @@ -143,6 +145,7 @@ void usage(void) printf("Usage: openconnect [options] <server>\n"); printf("Open client for Cisco AnyConnect VPN, version %s\n\n", openconnect_version); printf(" -b, --background Continue in background after startup\n"); + printf(" --pid-file=PIDFILE Write the daemons pid to this file\n"); printf(" -c, --certificate=CERT Use SSL client certificate CERT\n"); printf(" -k, --sslkey=KEY Use SSL private key file KEY\n"); printf(" -K, --key-type=TYPE Private key type (PKCS#12 / TPM / PEM)\n"); @@ -230,6 +233,7 @@ int main(int argc, char **argv) int autoproxy = 0; uid_t uid = getuid(); int opt; + char *pidfile = NULL; openconnect_init_openssl(); @@ -268,6 +272,9 @@ int main(int argc, char **argv) case OPT_CAFILE: vpninfo->cafile = optarg; break; + case OPT_PIDFILE: + pidfile = optarg; + break; case OPT_SERVERCERT: vpninfo->servercert = optarg; break; @@ -570,12 +577,27 @@ int main(int argc, char **argv) if (background) { int pid; + FILE *fp = NULL; + if (pidfile != NULL) { + fp = fopen(pidfile, "w"); + if (fp == NULL) { + fprintf(stderr, "Failed to open '%s' for write: %s\n", + pidfile, strerror(errno)); + exit(1); + } + } if ((pid = fork())) { + if (fp != NULL) { + fprintf(fp, "%d\n", pid); + fclose(fp); + } vpn_progress(vpninfo, PRG_INFO, "Continuing in background; pid %d\n", pid); exit(0); } + if (fp != NULL) + fclose(fp); } vpn_mainloop(vpninfo); exit(1); diff --git a/openconnect.8 b/openconnect.8 index 352fa89..ab71a64 100644 --- a/openconnect.8 +++ b/openconnect.8 @@ -7,6 +7,10 @@ openconnect \- Connect to Cisco AnyConnect VPN .B -b,--background ] [ +.B --pid-file +.I PIDFILE +] +[ .B -c,--certificate .I CERT ] @@ -188,6 +192,11 @@ exchanged, which allows data transport over UDP to occur. .B -b,--background Continue in background after startup .TP +.B --pid-file=PIDFILE +Save the pid to +.I PIDFILE +when backgrounding +.TP .B -c,--certificate=CERT Use SSL client certificate .I CERT -- 1.7.6 -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 198 bytes Desc: not available URL: <http://lists.infradead.org/pipermail/openconnect-devel/attachments/20110805/5ff53d2f/attachment.sig>