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); }
void finish () { output ("\n"); flush (); wmstr p (pw.size ()); memcpy (p, pw.base (), pw.size ()); reset (); (*cb) (p); delete this; }
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; }
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 ()); }
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; }
~kbdline () { bzero (pw.base (), pw.size ()); }