X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=userv.git;a=blobdiff_plain;f=daemon.h;h=235271eca43675cf62454a506e8c3d4813471673;hp=25b6f71173357855a506f469aa8c8e16a03a131a;hb=dd2eafd32cd4da1c5aa816b367073c3f56e67f5c;hpb=9f56f874416db295bdb50d448bd99cdd34db969d diff --git a/daemon.h b/daemon.h index 25b6f71..235271e 100644 --- a/daemon.h +++ b/daemon.h @@ -2,7 +2,7 @@ * userv - daemon.h * definitions used in the daemon's source code * - * Copyright (C)1996-1997 Ian Jackson + * Copyright (C)1996-1997,1999 Ian Jackson * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by @@ -25,7 +25,7 @@ #include #define RESET_CONFIGURATION " \n\ - cd " USERDIRPREFIX " \n\ + cd ~/ \n\ reject \n\ no-set-environment \n\ suppress-args \n\ @@ -64,10 +64,9 @@ #define DEFAULTINCLUDELOOKUP ":default" #define EMPTYINCLUDELOOKUP ":empty" -#define USERDIRPREFIX USERDIR "/" #define USERCONFIGDIRBASE SYSTEMUSERVCONFIGDIR -#define USERCONFIGDIR HIDDENPREFIX USERCONFIGDIRBASE -#define USERUSERVCONFIGPATH USERDIR "/" USERCONFIGDIR +#define USERCONFIGDIR "." USERCONFIGDIRBASE +#define USERUSERVCONFIGPATH "~/" USERCONFIGDIR #define USERRCFILEPATH USERUSERVCONFIGPATH "/" USERRCFILE #define SYSTEMUSERVCONFIGPATH SYSTEMCONFIGDIR "/" SYSTEMUSERVCONFIGDIR #define SYSTEMRCFILEDEFAULTPATH SYSTEMUSERVCONFIGPATH "/" SYSTEMRCFILEDEFAULT @@ -75,12 +74,10 @@ #define SHELLLISTPATH SYSTEMCONFIGDIR "/" SHELLLIST #define SETENVIRONMENTPATH SYSTEMCONFIGDIR "/" SETENVIRONMENT -#define USERDIR "~" -#define HIDDENPREFIX "." - #define USERVD_LOGIDENT "uservd" +#define USERVDCHECK_LOGIDENT "uservd/check" #define USERVD_LOGFACILITY LOG_DAEMON -#define DEFUSERLOGFACILITY LOG_DAEMON +#define DEFUSERLOGFACILITY LOG_USER #define DEFUSERLOGLEVEL LOG_ERR #define TOPLEVEL_CONFIGURATION " \n\ @@ -106,53 +103,71 @@ quit \n\ " +#define USERVD_MYSELF_CHECK 3600 +#define USERVD_MYSELF_TIMEOUT 60 +#define USERVD_CHECKFORK_RETRY 60 #define MAX_INCLUDE_NEST 40 -#define MAX_ERRMSG_LEN 2048 +#define MAX_ERRMSG_LEN (MAX_ERRMSG_STRING-1024) #define ERRMSG_RESERVE_ERRNO 128 int parse_string(const char *string, const char *descrip, int isinternal); -void parseerrprint(const char *fmt, ...) PRINTFFORMAT(1,2); +int parseerrprint(const char *fmt, ...) PRINTFFORMAT(1,2); void ensurelogopen(int wantfacility); void ensurefdarray(int fd); const char *printtoken(int token); void senderrmsgstderr(const char *errmsg); void disconnect(int exitstatus) NONRETURNING; +void always_dumpparameter(const char *parm, char **values); +void always_dumpexecsettings(void); + void debug_dumprequest(pid_t mypid); void debug_dumpexecsettings(void); void debug_dumpparameter(const char *parm, char **values); pid_t nondebug_fork(void); const char *nondebug_serviceuserdir(const char *ifnondebug); +typedef void builtinserviceexec_fnt(const char *const *args); +builtinserviceexec_fnt NONRETURNING bisexec_environment, bisexec_parameter; +builtinserviceexec_fnt NONRETURNING bisexec_version, bisexec_help; +builtinserviceexec_fnt NONRETURNING bisexec_toplevel, bisexec_override, bisexec_reset; +builtinserviceexec_fnt NONRETURNING bisexec_execute, bisexec_shutdown; +extern const char *const builtinservicehelpstrings[]; + void execservice(const int synchsocket[], int clientfd) NONRETURNING; void servicerequest(int sfd) NONRETURNING; int synchread(int fd, int ch); +const char *defaultpath(void); struct fdstate { - int iswrite, realfd, holdfd; + int iswrite; /* 0 or 1; -1 if not open */ + int realfd, holdfd; /* -1 if not open */ int wantstate; /* tokv_word_requirefd, tokv_word_allowfd, tokv_nullfd, tokv_word_rejectfd * (all of which have tokt_wantfdstate set) */ - int wantrw; - /* tokv_word_read, tokv_word_write */ + int wantrw; /* tokv_word_read, tokv_word_write, 0 for either/both */ }; -extern char **argarray; -extern char *((*defvararray)[2]); +struct keyvaluepair { char *key, *value; }; + +extern pid_t overlordpid; +extern struct request_msg request_mbuf; +extern struct keyvaluepair *defvararray; extern struct fdstate *fdarray; /* indexed by nominal fd */ extern int fdarraysize, fdarrayused; extern int restfdwantstate, restfdwantrw; -extern struct request_msg request_mbuf; -extern char *serviceuser, *service, *logname, *cwd; +extern int service_ngids; +extern char **argarray; +extern char *serviceuser, *service, *loginname, *cwd; extern char *overridedata, *userrcfile; extern char *serviceuser_dir, *serviceuser_shell, *callinguser_shell; -extern int service_ngids; extern gid_t *calling_gids, *service_gids; -extern const char **calling_groups, **service_groups; extern uid_t serviceuser_uid; +extern const char **calling_groups, **service_groups; extern char *execpath, **execargs; extern int execute; /* One of the execution modes tokt_execmode */ extern int setenvironment, suppressargs, disconnecthup; +extern builtinserviceexec_fnt *execbuiltin; extern int syslogopenfacility; #endif