summaryrefslogtreecommitdiff
path: root/usr/src/cmd/svc
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/cmd/svc')
-rw-r--r--usr/src/cmd/svc/startd/method.c27
1 files changed, 27 insertions, 0 deletions
diff --git a/usr/src/cmd/svc/startd/method.c b/usr/src/cmd/svc/startd/method.c
index 7c4e389845..6fc05ed49a 100644
--- a/usr/src/cmd/svc/startd/method.c
+++ b/usr/src/cmd/svc/startd/method.c
@@ -516,6 +516,33 @@ exec_method(const restarter_inst_t *inst, int type, const char *method,
exit(SMF_EXIT_ERR_CONFIG);
}
+ if (errf != NULL && strcmp(errf, "chdir") == 0) {
+ switch (rsmc_errno) {
+ case EACCES:
+ case EFAULT:
+ case EIO:
+ case ELOOP:
+ case ENAMETOOLONG:
+ case ENOENT:
+ case ENOLINK:
+ case ENOTDIR:
+ log_instance(inst, B_FALSE, "%s: %s (\"%s\")",
+ errf,
+ strerror(rsmc_errno), mcp->working_dir);
+ break;
+
+ default:
+#ifndef NDEBUG
+ uu_warn("%s:%d: Bad error %d for function %s "
+ "in restarter_set_method_context().\n",
+ __FILE__, __LINE__, rsmc_errno, errf);
+#endif
+ abort();
+ }
+
+ exit(SMF_EXIT_ERR_CONFIG);
+ }
+
if (errf != NULL) {
errno = rsmc_errno;
perror(errf);