static void
restart ()
{
  if (hup_lock)
    return;
  hup_lock = true;

  warn ("version %s, pid %d, restarted with SIGHUP\n", VERSION,
	int (getpid ()));
  server *s, *ns;
  for (s = serverlist.first; s; s = ns) {
    ns = serverlist.next (s);
    serverlist.remove (s);
    delete s;
  }
  for (sfssrv *nsp, *sp = services.first; sp; sp = nsp) {
    nsp = services.next (sp);
    delete sp;
  }

  for (sockaddr **sap = listenaddrs.base (); sap < listenaddrs.lim (); sap++)
    xfree (*sap);
  listenaddrs.clear ();
  listeners.clear ();

  parseconfig ();
  delaycb (0, 100000000, wrap (launchservers));
}
bool
extension::covered (const vec<str> &ev)
{
  bhash<str> eh;
  for (const str *ep = ev.base (); ep < ev.lim (); ep++)
    eh.insert (*ep);
  return covered (eh);
}
Example #3
0
 void finish () {
   output ("\n");
   flush ();
   wmstr p (pw.size ());
   memcpy (p, pw.base (), pw.size ());
   reset ();
   (*cb) (p);
   delete this;
 }
Example #4
0
str
join (str sep, const vec<str> &v)
{
  strbuf sb;
  const str *sp = v.base ();
  if (sp < v.lim ()) {
    sb.cat (*sp++);
    while (sp < v.lim ())
      sb.cat (sep).cat (*sp++);
  }
  return sb;
}
Example #5
0
void
rex_mksecretid (vec<char> &secretid, rpc_bytes<> &ksc, rpc_bytes<> &kcs)
{
    sfs_sessinfo si;
    si.type = SFS_SESSINFO_SECRETID;
    si.ksc = ksc;
    si.kcs = kcs;

    sfs_hash dummy_hash;
    secretid.setsize (dummy_hash.size ());

    sha1_hashxdr (secretid.base (), si, true);
    bzero (si.kcs.base (), si.kcs.size ());
    bzero (si.ksc.base (), si.ksc.size ());
}
Example #6
0
void
ifchgcb_test ()
{
  vec<in_addr> newaddrs;
  if (!myipaddrs (&newaddrs))
    return;
  if (newaddrs.size () == ifchg_addrs.size ()
      && !memcmp (newaddrs.base (), ifchg_addrs.base (),
		  ifchg_addrs.size () * sizeof (in_addr)))
    return;
  ifchg_addrs.swap (newaddrs);
  ++ifchg_count;
  list<ifchgcb_t, &ifchgcb_t::link> olist;
  chglist.swap (olist);
  while (ifchgcb_t *chg = olist.first) {
    olist.remove (chg);
    chglist.insert_head (chg);
    (*chg->cb) ();
  }
}
static void
dolisten ()
{
  for (sockaddr **sp = listenaddrs.base (); sp < listenaddrs.lim (); sp++) {
    sockaddr_in *sinp = reinterpret_cast<sockaddr_in *> (*sp);
    int fd = inetsocket (SOCK_STREAM, ntohs (sinp->sin_port),
			 ntohl (sinp->sin_addr.s_addr));
    if (fd < 0)
      warn ("could not bind TCP port %d: %m\n", ntohs (sinp->sin_port));
    else {
      if (sinp->sin_addr.s_addr == htonl (INADDR_ANY))
	warn ("listening on TCP port %d\n", ntohs (sinp->sin_port));
      else
	warn ("listening on %s TCP port %d\n",
	      inet_ntoa (sinp->sin_addr), ntohs (sinp->sin_port));
      listeners.push_back (New refcounted<listener> (fd));
    }
  }

  if (listeners.empty ())
    fatal ("no TCP ports to listen on\n");

  hup_lock = false;
}
Example #8
0
 ~kbdline () { bzero (pw.base (), pw.size ()); }