serv_checkstdoutexit();
}
+void bisexec_help(const char *const *argv) {
+ const char *const *pp;
+
+ fputs("recognised builtin services:\n",stdout);
+ for (pp= builtinservicehelpstrings; *pp; pp++) printf(" %s\n",*pp);
+ serv_checkstdoutexit();
+}
+
void bisexec_version(const char *const *argv) {
const unsigned char *p;
int i;
serv_checkstdoutexit();
}
+void bisexec_shutdown(const char *const *argv) {
+ /* This is only reached if the serviceuser_uid test in
+ * process.c:servicerequest() fails (we have to handle the
+ * shutdown request there, unfortunately).
+ */
+ fputs("uservd: builtin service shutdown: permission denied\n",stderr);
+ _exit(-1);
+}
+
static void serv_resetsignal(int signo) {
struct sigaction sig;
if (sigaction(signo,&sig,0)) serv_syscallfail("reset signal handler");
}
-static const char *see_logname(void) { return serviceuser; }
+static const char *see_loginname(void) { return serviceuser; }
static const char *see_home(void) { return serviceuser_dir; }
static const char *see_shell(void) { return serviceuser_shell; }
static const char *see_service(void) { return service; }
static const char *see_c_cwd(void) { return cwd; }
-static const char *see_c_logname(void) { return logname; }
+static const char *see_c_loginname(void) { return loginname; }
static const char *see_c_uid(void) {
static char buf[CHAR_BIT*sizeof(uid_t)/3+4];
snyprintf(buf,sizeof(buf),"%lu",(unsigned long)request_mbuf.callinguid);
const char *name;
const char *(*fn)(void);
} serv_envinfos[]= {
- { "USER", see_logname },
- { "LOGNAME", see_logname },
- { "HOME", see_home },
- { "SHELL", see_shell },
- { "PATH", defaultpath },
- { "USERV_SERVICE", see_service },
- { "USERV_CWD", see_c_cwd },
- { "USERV_USER", see_c_logname },
- { "USERV_UID", see_c_uid },
- { "USERV_GROUP", see_c_group },
- { "USERV_GID", see_c_gid },
- { 0 }
+ { "USER", see_loginname },
+ { "LOGNAME", see_loginname },
+ { "HOME", see_home },
+ { "SHELL", see_shell },
+ { "PATH", defaultpath },
+ { "USERV_SERVICE", see_service },
+ { "USERV_CWD", see_c_cwd },
+ { "USERV_USER", see_c_loginname },
+ { "USERV_UID", see_c_uid },
+ { "USERV_GROUP", see_c_group },
+ { "USERV_GID", see_c_gid },
+ { 0 }
};
void execservice(const int synchsocket[], int clientfd) {