X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=common.h;h=ee243b1ac3aeb7ba0f358b056da48987c4e57b87;hb=a038503244f2a71833bd8a6c2d6bdd73d4aea416;hp=5fdfd76670a356105e03710135dace489bb4c17a;hpb=9f56f874416db295bdb50d448bd99cdd34db969d;p=userv.git diff --git a/common.h b/common.h index 5fdfd76..ee243b1 100644 --- a/common.h +++ b/common.h @@ -43,26 +43,26 @@ static const unsigned char protocolchecksumversion[PCSUMSIZE]= { #ifndef PIPEFORMAT # define PIPEFORMAT "%lx.%lx.%x" # define PIPEPATTERN "[0-9a-f]*.[0-9a-f]*.*[0-9a-f]" -# define PIPEFORMATEXTEND (sizeof(long)*2*2+sizeof(int)*2+1) -# define PIPEMAXLEN (sizeof(PIPEFORMAT)+PIPEFORMATEXTEND) +# define PIPEFORMATEXTEND ((int)(sizeof(unsigned long)*2*2+(int)sizeof(int)*2+3)) +# define PIPEMAXLEN ((int)(sizeof(PIPEFORMAT)+PIPEFORMATEXTEND)) #endif #ifndef PIPEPATHFORMAT # define PIPEPATHFORMAT VARDIR "/" PIPEFORMAT -# define PIPEPATHMAXLEN (sizeof(PIPEPATHFORMAT)+PIPEFORMATEXTEND) +# define PIPEPATHMAXLEN ((int)(sizeof(PIPEPATHFORMAT)+PIPEFORMATEXTEND)) #endif #define MAX_ALLOW_FD 1024 -#define MAX_INCLUDE_NEST 40 #define MAX_GENERAL_STRING (1024*1024) #define MAX_OVERRIDE_LEN MAX_GENERAL_STRING -#define MAX_ARGSDEFVARS 4096 +#define MAX_ERRMSG_STRING 4096 +#define MAX_ARGSDEFVAR 4096 #define MAX_GIDS 1024 #ifdef DEBUG -# define BASE_MAGIC 0x5deb7567 /* "\x5d\xebug" */ +# define BASE_MAGIC 0x5deb7567UL /* "\x5d\xebug" */ #else -# define BASE_MAGIC 0x755e7276 /* "u\x5erv" */ +# define BASE_MAGIC 0x755e7276UL /* "u\x5erv" */ #endif enum { @@ -77,7 +77,7 @@ enum { struct opening_msg { unsigned long magic; unsigned char protocolchecksumversion[PCSUMSIZE]; - pid_t serverpid; + pid_t overlordpid, serverpid; }; struct request_msg { @@ -86,14 +86,16 @@ struct request_msg { int serviceuserlen; int servicelen; int lognamelen; - int cwdlen; + int cwdlen, overridelen; uid_t callinguid; - int ngids, nreadfds, nwritefds, nargs, nvars, overridelen; + int ngids, nreadfds, nwritefds, nargs, nvars; /* Followed by: * serviceuserlen bytes for the service user (unterminated) * servicelen bytes for the service (unterminated) * lognamelen bytes for the login name (unterminated) * cwdlen bytes for the cwd (unterminated) + * overridelen bytes for the override data (with extra \n but unterminated), + * or nothing if overridelen==-1 * ngids gid_ts for the primary group and supplementary groups * nreadfds and then nwritefds ints for the file descriptors * for each of the nargs arguments @@ -116,10 +118,9 @@ struct progress_msg { struct { int status; } terminated; } data; /* follwed by variable-length part: - * for ok: nothing - * for errmsg: messagelen bytes for the error message (unterminated) - * unsigned long PROGRESS_MAGIC - * for terminated: nothing + * for ok, failed, terminated: nothing + * for errmsg: messagelen bytes for the error message (unterminated, no \n) + * unsigned long PROGRESS_ERRMSG_END_MAGIC */ };