chiark / gitweb /
Patch from Peter Benie.
[userv.git] / common.h
index 539ecf000f3a50cbb3201a5289605f931a14f21f..e8f5b38c288af9dec5d543d0677433c80fda0db4 100644 (file)
--- a/common.h
+++ b/common.h
@@ -2,7 +2,7 @@
  * userv - common.h
  * definitions shared between client and daemon
  *
- * Copyright (C)1996-1997 Ian Jackson
+ * Copyright (C)1996-1997,1999,2012 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
 #ifndef COMMON_H
 #define COMMON_H
 
+#define COPYRIGHT(indent,nl)                                           \
+ indent "Copyright (C)1996-2012 Ian Jackson; copyright (C)2000 Ben Harris." nl \
+ indent "there is NO WARRANTY; type `userv --copyright' for details." nl
+
 #define PCSUMSIZE 16
 
 static const unsigned char protocolchecksumversion[PCSUMSIZE]= {
@@ -32,39 +36,37 @@ static const unsigned char protocolchecksumversion[PCSUMSIZE]= {
 # define VARDIR "/var/run/userv"
 #endif
 
-#define DIRSEP "/"
-
 #ifndef RENDEZVOUS
 # define RENDEZVOUS "socket"
 #endif
 
 #ifndef RENDEZVOUSPATH
-# define RENDEZVOUSPATH VARDIR DIRSEP RENDEZVOUS
+# define RENDEZVOUSPATH VARDIR "/" RENDEZVOUS
 #endif
 
 #ifndef PIPEFORMAT
-# ifdef AC_SYS_LONG_FILENAMES
-#  define PIPEFORMAT "pipe.%lu.%lu.%d"
-#  define PIPEFORMATEXTEND (sizeof(long)*3*2+sizeof(int)*3+1)
-# else
-#  define PIPEFORMAT "%lx.%lx.%x"
-#  define PIPEFORMATEXTEND (sizeof(long)*2*2+sizeof(int)*2+1)
-# endif
+# define PIPEFORMAT "%lx.%lx.%x"
+# define PIPEPATTERN "[0-9a-f]*.[0-9a-f]*.*[0-9a-f]"
+# 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 DIRSEP PIPEFORMAT
-# define PIPEPATHMAXLEN (sizeof(PIPEPATHFORMAT)+PIPEFORMATEXTEND)
+# define PIPEPATHFORMAT VARDIR "/" PIPEFORMAT
+# define PIPEPATHMAXLEN ((int)(sizeof(PIPEPATHFORMAT)+PIPEFORMATEXTEND))
 #endif
 
-#define MAX_ALLOW_FD 255
-#define MAX_INCLUDE_NEST 40
-#define MAX_OVERRIDE_LEN (1024*1024)
+#define MAX_ALLOW_FD 1024
+#define MAX_GENERAL_STRING (1024*1024)
+#define MAX_OVERRIDE_LEN MAX_GENERAL_STRING
+#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 {
@@ -79,23 +81,25 @@ enum {
 struct opening_msg {
   unsigned long magic;
   unsigned char protocolchecksumversion[PCSUMSIZE];
-  pid_t serverpid;
+  pid_t overlordpid, serverpid;
 };
 
 struct request_msg {
   unsigned long magic;
-  pid_t clientpid;
+  pid_t clientpid; /* or -1 if no service is required and this was a version check */
   int serviceuserlen;
   int servicelen;
-  int lognamelen;
-  int cwdlen;
+  int loginnamelen, spoofed; /* spoofed is 0 or 1 */
+  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)
+   *   loginnamelen 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
@@ -118,10 +122,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
    */
 };