av[ac++] = op;
}
if (run_mode & STATIC_HOSTNAME) {
- av[ac++] = "-N";
+ av[ac++] = "-v";
av[ac++] = MY_NAME;
}
av[ac] = NULL;
- fprintf(stderr, "%s: -N deprecated, consider using /usr/sbin/sm-notify directly\n",
- name_p);
execv(av[0], av);
fprintf(stderr, "%s: failed to run %s\n", name_p, av[0]);
exit(2);
exit(-1);
}
- if (run_mode & MODE_NOTIFY_ONLY)
+ if (run_mode & MODE_NOTIFY_ONLY) {
+ fprintf(stderr, "%s: -N deprecated, consider using /usr/sbin/sm-notify directly\n",
+ name_p);
run_sm_notify(out_port);
+ }
if (!(run_mode & MODE_NODAEMON)) {
waitpid(pid, NULL, 0);
}
- drop_privs();
+ /* Make sure we have a privilege port for calling into the kernel */
+ statd_get_socket();
- for (;;) {
- pmap_unset (SM_PROG, SM_VERS);
+ /* If sm-notify didn't take all the state files, load
+ * state information into our notify-list so we can
+ * pass on any SM_NOTIFY that arrives
+ */
+ load_state();
- /* If we got this far, we have successfully started, so notify parent */
- if (pipefds[1] > 0) {
- status = 0;
- write(pipefds[1], &status, 1);
- close(pipefds[1]);
- pipefds[1] = -1;
- }
+ pmap_unset (SM_PROG, SM_VERS);
+
+ /* this registers both UDP and TCP services */
+ rpc_init("statd", SM_PROG, SM_VERS, sm_prog_1, port);
+
+ /* If we got this far, we have successfully started, so notify parent */
+ if (pipefds[1] > 0) {
+ status = 0;
+ write(pipefds[1], &status, 1);
+ close(pipefds[1]);
+ pipefds[1] = -1;
+ }
- /* this registers both UDP and TCP services */
- rpc_init("statd", SM_PROG, SM_VERS, sm_prog_1, port);
+ drop_privs();
+ for (;;) {
/*
* Handle incoming requests: SM_NOTIFY socket requests, as
* well as callbacks from lockd.