X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=pppd%2Fauth.c;h=590a265eda7b3cb646493d8fbc812a5a3ed25162;hb=f6330ec2a89df650cd6bfeaa6538b8053aeb45c7;hp=883b7f5bb8aedfec061daa37b7bb2e4eabf15de8;hpb=04c4348108d847e034dd91066cc6843f60d71731;p=ppp.git diff --git a/pppd/auth.c b/pppd/auth.c index 883b7f5..590a265 100644 --- a/pppd/auth.c +++ b/pppd/auth.c @@ -100,6 +100,10 @@ #endif #include +#ifdef SYSTEMD +#include +#endif + #include "pppd.h" #include "fsm.h" #include "lcp.h" @@ -426,6 +430,7 @@ setupapfile(argv) euid = geteuid(); if (seteuid(getuid()) == -1) { option_error("unable to reset uid before opening %s: %m", fname); + free(fname); return 0; } ufile = fopen(fname, "r"); @@ -433,6 +438,7 @@ setupapfile(argv) fatal("unable to regain privileges: %m"); if (ufile == NULL) { option_error("unable to open user login data file %s", fname); + free(fname); return 0; } check_access(ufile, fname); @@ -443,6 +449,7 @@ setupapfile(argv) || fgets(p, MAXSECRETLEN - 1, ufile) == NULL) { fclose(ufile); option_error("unable to read user login data file %s", fname); + free(fname); return 0; } fclose(ufile); @@ -464,6 +471,7 @@ setupapfile(argv) explicit_passwd = 1; } + free(fname); return (1); } @@ -553,13 +561,11 @@ link_required(unit) void start_link(unit) int unit; { - char *msg; - + status = EXIT_CONNECT_FAILED; new_phase(PHASE_SERIALCONN); hungup = 0; devfd = the_channel->connect(); - msg = "Connect script failed"; if (devfd < 0) goto fail; @@ -572,7 +578,6 @@ void start_link(unit) * gives us. Thus we don't need the tdb_writelock/tdb_writeunlock. */ fd_ppp = the_channel->establish_ppp(devfd); - msg = "ppp establishment failed"; if (fd_ppp < 0) { status = EXIT_FATAL_ERROR; goto disconnect; @@ -669,9 +674,11 @@ link_terminated(unit) (*the_channel->cleanup)(); if (doing_multilink && multilink_master) { - if (!bundle_terminating) + if (!bundle_terminating) { new_phase(PHASE_MASTER); - else + if (master_detach && !detached) + detach(); + } else mp_bundle_terminated(); } else new_phase(PHASE_DEAD); @@ -1100,8 +1107,15 @@ np_up(unit, proto) /* * Detach now, if the updetach option was given. */ - if (updetach && !nodetach) + if (updetach && !nodetach) { + dbglog("updetach is set. Now detaching."); detach(); +#ifdef SYSTEMD + } else if (nodetach && up_sdnotify) { + dbglog("up_sdnotify is set. Now notifying systemd: READY=1"); + sd_notify(0, "READY=1"); +#endif + } } ++num_np_up; }