diff options
Diffstat (limited to 'usr.sbin/sup/lib/supmsg.c')
-rw-r--r-- | usr.sbin/sup/lib/supmsg.c | 640 |
1 files changed, 0 insertions, 640 deletions
diff --git a/usr.sbin/sup/lib/supmsg.c b/usr.sbin/sup/lib/supmsg.c deleted file mode 100644 index b12c945..0000000 --- a/usr.sbin/sup/lib/supmsg.c +++ /dev/null @@ -1,640 +0,0 @@ -/* - * Copyright (c) 1992 Carnegie Mellon University - * All Rights Reserved. - * - * Permission to use, copy, modify and distribute this software and its - * documentation is hereby granted, provided that both the copyright - * notice and this permission notice appear in all copies of the - * software, derivative works or modified versions, and any portions - * thereof, and that both notices appear in supporting documentation. - * - * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" - * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR - * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. - * - * Carnegie Mellon requests users of this software to return to - * - * Software Distribution Coordinator or Software_Distribution@CS.CMU.EDU - * School of Computer Science - * Carnegie Mellon University - * Pittsburgh PA 15213-3890 - * - * any improvements or extensions that they make and grant Carnegie Mellon - * the rights to redistribute these changes. - */ -/* - ********************************************************************** - * HISTORY - * - * 7-July-93 Nate Williams at Montana State University - * Modified SUP to use gzip based compression when sending files - * across the network to save BandWidth - * - * $Log: supmsg.c,v $ - * Revision 1.1.1.1 1995/12/26 04:54:47 peter - * Import the unmodified version of the sup that we are using. - * The heritage of this version is not clear. It appears to be NetBSD - * derived from some time ago. - * - * Revision 1.1.1.1 1993/08/21 00:46:35 jkh - * Current sup with compression support. - * - * Revision 1.1.1.1 1993/05/21 14:52:19 cgd - * initial import of CMU's SUP to NetBSD - * - * Revision 2.4 92/09/09 22:05:17 mrt - * Moved PFI definition under __STDC__ conditional since it - * is already defined in libc.h in this case. - * [92/09/01 mrt] - * - * Revision 2.3 92/08/11 12:08:12 mrt - * Added copyright - * [92/08/10 mrt] - * Brad's changes: Delinted, Incorporated updated variable - * argument list usage from old msgxfer.c - * [92/07/24 mrt] - * - * Revision 2.2 89/08/23 15:02:56 gm0w - * Created from separate message modules. - * [89/08/14 gm0w] - * - ********************************************************************** - */ -#include <stdio.h> -#include <sys/types.h> -#include <sys/stat.h> -#if __STDC__ -#include <stdarg.h> -#else -#include <varargs.h> -#endif -#include <libc.h> -#include <c.h> -#include "sup.h" -#define MSGSUBR -#define MSGFILE -#include "supmsg.h" - -/* - * signon message - */ -extern int pgmver; /* program version of partner */ -extern int pgmversion; /* my program version */ -extern char *scmver; /* scm version of partner */ -extern int fspid; /* process id of fileserver */ - -int msgsignon () -{ - register int x; - - if (server) { - x = readmsg (MSGSIGNON); - if (x == SCMOK) x = readint (&protver); - if (x == SCMOK) x = readint (&pgmver); - if (x == SCMOK) x = readstring (&scmver); - if (x == SCMOK) x = readmend (); - } else { - x = writemsg (MSGSIGNON); - if (x == SCMOK) x = writeint (PROTOVERSION); - if (x == SCMOK) x = writeint (pgmversion); - if (x == SCMOK) x = writestring (scmversion); - if (x == SCMOK) x = writemend (); - } - return (x); -} - -int msgsignonack () -{ - register int x; - - if (server) { - x = writemsg (MSGSIGNONACK); - if (x == SCMOK) x = writeint (PROTOVERSION); - if (x == SCMOK) x = writeint (pgmversion); - if (x == SCMOK) x = writestring (scmversion); - if (x == SCMOK) x = writeint (fspid); - if (x == SCMOK) x = writemend (); - } else { - x = readmsg (MSGSIGNONACK); - if (x == SCMOK) x = readint (&protver); - if (x == SCMOK) x = readint (&pgmver); - if (x == SCMOK) x = readstring (&scmver); - if (x == SCMOK) x = readint (&fspid); - if (x == SCMOK) x = readmend (); - } - return (x); -} - -/* - * setup message - */ -extern int xpatch; /* setup crosspatch to a new client */ -extern char *xuser; /* user,group,acct for crosspatch */ -extern char *collname; /* base directory */ -extern char *basedir; /* base directory */ -extern int basedev; /* base directory device */ -extern int baseino; /* base directory inode */ -extern long lasttime; /* time of last upgrade */ -extern int listonly; /* only listing files, no data xfer */ -extern int newonly; /* only send new files */ -extern char *release; /* release name */ -extern int setupack; /* ack return value for setup */ - -int msgsetup () -{ - register int x; - - if (server) { - x = readmsg (MSGSETUP); - if (x != SCMOK) return (x); - if (protver >= 7) { - x = readint (&xpatch); - if (x != SCMOK) return (x); - } else - xpatch = FALSE; - if (xpatch) { - x = readstring (&xuser); - if (x != SCMOK) return (x); - return (readmend ()); - } - x = readstring (&collname); - if (x == SCMOK) x = readint ((int *)&lasttime); - if (x == SCMOK) x = readstring (&basedir); - if (x == SCMOK) x = readint (&basedev); - if (x == SCMOK) x = readint (&baseino); - if (x == SCMOK) x = readint (&listonly); - if (x == SCMOK) x = readint (&newonly); - if (x == SCMOK) - if (protver < 6) - release = (char *)NULL; - else - x = readstring (&release); - if (x == SCMOK) x = readmend (); - } else { - x = writemsg (MSGSETUP); - if (x != SCMOK) return (x); - if (protver >= 7) { - x = writeint (xpatch); - if (x != SCMOK) return (x); - } - if (xpatch) { - x = writestring (xuser); - if (x != SCMOK) return (x); - return (writemend ()); - } - if (x == SCMOK) x = writestring (collname); - if (x == SCMOK) x = writeint ((int)lasttime); - if (x == SCMOK) x = writestring (basedir); - if (x == SCMOK) x = writeint (basedev); - if (x == SCMOK) x = writeint (baseino); - if (x == SCMOK) x = writeint (listonly); - if (x == SCMOK) x = writeint (newonly); - if (x == SCMOK && protver >= 6) x = writestring (release); - if (x == SCMOK) x = writemend (); - } - return (x); -} - -int msgsetupack () -{ - if (server) - return (writemint (MSGSETUPACK,setupack)); - return (readmint (MSGSETUPACK,&setupack)); -} - -/* - * crypt test message - */ -extern char *crypttest; /* encryption test string */ - -int msgcrypt () -{ - if (server) - return (readmstr (MSGCRYPT,&crypttest)); - return (writemstr (MSGCRYPT,crypttest)); -} - -int msgcryptok () -{ - if (server) - return (writemnull (MSGCRYPTOK)); - return (readmnull (MSGCRYPTOK)); -} - -/* - * login message - */ -extern char *logcrypt; /* login encryption test */ -extern char *loguser; /* login username */ -extern char *logpswd; /* password for login */ -extern int logack; /* login ack status */ -extern char *logerror; /* error from login */ - -int msglogin () -{ - register int x; - if (server) { - x = readmsg (MSGLOGIN); - if (x == SCMOK) x = readstring (&logcrypt); - if (x == SCMOK) x = readstring (&loguser); - if (x == SCMOK) x = readstring (&logpswd); - if (x == SCMOK) x = readmend (); - } else { - x = writemsg (MSGLOGIN); - if (x == SCMOK) x = writestring (logcrypt); - if (x == SCMOK) x = writestring (loguser); - if (x == SCMOK) x = writestring (logpswd); - if (x == SCMOK) x = writemend (); - } - return (x); -} - -int msglogack () -{ - register int x; - if (server) { - x = writemsg (MSGLOGACK); - if (x == SCMOK) x = writeint (logack); - if (x == SCMOK) x = writestring (logerror); - if (x == SCMOK) x = writemend (); - } else { - x = readmsg (MSGLOGACK); - if (x == SCMOK) x = readint (&logack); - if (x == SCMOK) x = readstring (&logerror); - if (x == SCMOK) x = readmend (); - } - return (x); -} - -/* - * refuse list message - */ -extern TREE *refuseT; /* tree of files to refuse */ - -static int refuseone (t) -register TREE *t; -{ - return (writestring (t->Tname)); -} - -int msgrefuse () -{ - register int x; - if (server) { - char *name; - x = readmsg (MSGREFUSE); - if (x == SCMOK) x = readstring (&name); - while (x == SCMOK) { - if (name == NULL) break; - (void) Tinsert (&refuseT,name,FALSE); - free (name); - x = readstring (&name); - } - if (x == SCMOK) x = readmend (); - } else { - x = writemsg (MSGREFUSE); - if (x == SCMOK) x = Tprocess (refuseT,refuseone); - if (x == SCMOK) x = writestring ((char *)NULL); - if (x == SCMOK) x = writemend (); - } - return (x); -} - -/* - * list files message - */ -extern TREE *listT; /* tree of files to list */ -extern TREE *renameT; /* tree of rename target files */ -extern long scantime; /* time that collection was scanned */ - -static int listone (t) -register TREE *t; -{ - register int x; - - x = writestring (t->Tname); - if ( protver > 8 ) - if (x == SCMOK) x = writestring (t->Tnewname); - if (x == SCMOK) x = writeint ((int)t->Tmode); - if (x == SCMOK) x = writeint ((int)t->Tflags); - if (x == SCMOK) x = writeint (t->Tmtime); - return (x); -} - -int msglist () -{ - register int x; - if (server) { - x = writemsg (MSGLIST); - if (x == SCMOK) x = Tprocess (listT,listone); - if (x == SCMOK) x = writestring ((char *)NULL); - if (x == SCMOK) x = writeint ((int)scantime); - if (x == SCMOK) x = writemend (); - } else { - char *name, *newname = NULL; - int mode,flags,mtime; - register TREE *t; - x = readmsg (MSGLIST); - if (x == SCMOK) x = readstring (&name); - while (x == SCMOK) { - if (name == NULL) break; - if (protver > 8){ - x = readstring (&newname); - if (x == SCMOK) x = readint (&mode); - } - else - x = readint (&mode); - if (x == SCMOK) x = readint (&flags); - if (x == SCMOK) x = readint (&mtime); - if (x != SCMOK) break; - t = Tinsert (&listT,name,TRUE); - free (name); - t->Tnewname = newname; - t->Tmode = mode; - t->Tflags = flags; - t->Tmtime = mtime; - x = readstring (&name); - } - if (x == SCMOK) x = readint ((int *)&scantime); - if (x == SCMOK) x = readmend (); - } - return (x); -} - -/* - * files needed message - */ -extern TREE *needT; /* tree of files to need */ - -static int needone (t) -register TREE *t; -{ - register int x; - x = writestring (t->Tname); - if (x == SCMOK) x = writeint ((t->Tflags&FUPDATE) != 0); - return (x); -} - -int msgneed () -{ - register int x; - if (server) { - char *name; - int update; - register TREE *t; - x = readmsg (MSGNEED); - if (x == SCMOK) x = readstring (&name); - while (x == SCMOK) { - if (name == NULL) break; - x = readint (&update); - if (x != SCMOK) break; - t = Tinsert (&needT,name,TRUE); - free (name); - if (update) t->Tflags |= FUPDATE; - x = readstring (&name); - } - if (x == SCMOK) x = readmend (); - } else { - x = writemsg (MSGNEED); - if (x == SCMOK) x = Tprocess (needT,needone); - if (x == SCMOK) x = writestring ((char *)NULL); - if (x == SCMOK) x = writemend (); - } - return (x); -} - -/* - * files denied message - */ -extern TREE *denyT; /* tree of files to deny */ - -static int denyone (t) -register TREE *t; -{ - return (writestring (t->Tname)); -} - -int msgdeny () -{ - register int x; - if (server) { - x = writemsg (MSGDENY); - if (x == SCMOK) x = Tprocess (denyT,denyone); - if (x == SCMOK) x = writestring ((char *)NULL); - if (x == SCMOK) x = writemend (); - } else { - char *name; - x = readmsg (MSGDENY); - if (x == SCMOK) x = readstring (&name); - while (x == SCMOK) { - if (name == NULL) break; - (void) Tinsert (&denyT,name,FALSE); - free (name); - x = readstring (&name); - } - if (x == SCMOK) x = readmend (); - } - return (x); -} - -/* - * send file message - */ -int msgsend () -{ - if (server) - return (readmnull (MSGSEND)); - return (writemnull (MSGSEND)); -} - -/* - * receive file message - */ -extern TREE *upgradeT; /* pointer to file being upgraded */ - -static int writeone (t) -register TREE *t; -{ - return (writestring (t->Tname)); -} - - -#if __STDC__ -int msgrecv (PFI xferfile,...) -#else -/*VARARGS*//*ARGSUSED*/ -int msgrecv (va_alist) -va_dcl -#endif -{ -#if !__STDC__ - typedef int (*PFI)(); - PFI xferfile; -#endif - va_list args; - register int x; - register TREE *t = upgradeT; -#if __STDC__ - va_start(args,xferfile); -#else - va_start(args); - xferfile = va_arg(args, PFI); -#endif - if (server) { - x = writemsg (MSGRECV); - if (t == NULL) { - if (x == SCMOK) x = writestring ((char *)NULL); - if (x == SCMOK) x = writemend (); - return (x); - } - if (x == SCMOK) x = writestring (t->Tname); - if (protver > 8) - if (x == SCMOK) x = writestring (t->Tnewname); - if (x == SCMOK) x = writeint (t->Tmode); - if (t->Tmode == 0) { - if (x == SCMOK) x = writemend (); - return (x); - } - if (x == SCMOK) x = writeint (t->Tflags); - if (x == SCMOK) x = writestring (t->Tuser); - if (x == SCMOK) x = writestring (t->Tgroup); - if (x == SCMOK) x = writeint (t->Tmtime); - if (x == SCMOK) x = Tprocess (t->Tlink,writeone); - if (x == SCMOK) x = writestring ((char *)NULL); - if (x == SCMOK) x = Tprocess (t->Texec,writeone); - if (x == SCMOK) x = writestring ((char *)NULL); - if (x == SCMOK) x = (*xferfile) (t,args); - if (x == SCMOK) x = writemend (); - } else { - char *linkname,*execcmd; - if (t == NULL) return (SCMERR); - x = readmsg (MSGRECV); - if (x == SCMOK) x = readstring (&t->Tname); - if (x == SCMOK && t->Tname == NULL) { - x = readmend (); - if (x == SCMOK) x = (*xferfile) (NULL,args); - return (x); - } - if (protver > 8) - if (x == SCMOK) x = readstring (&t->Tnewname); - if (x == SCMOK) x = readint (&t->Tmode); - if (t->Tmode == 0) { - x = readmend (); - if (x == SCMOK) x = (*xferfile) (t,args); - return (x); - } - if (x == SCMOK) x = readint (&t->Tflags); - if (x == SCMOK) x = readstring (&t->Tuser); - if (x == SCMOK) x = readstring (&t->Tgroup); - if (x == SCMOK) x = readint (&t->Tmtime); - t->Tlink = NULL; - if (x == SCMOK) x = readstring (&linkname); - while (x == SCMOK) { - if (linkname == NULL) break; - (void) Tinsert (&t->Tlink,linkname,FALSE); - free (linkname); - x = readstring (&linkname); - } - t->Texec = NULL; - if (x == SCMOK) x = readstring (&execcmd); - while (x == SCMOK) { - if (execcmd == NULL) break; - (void) Tinsert (&t->Texec,execcmd,FALSE); - free (execcmd); - x = readstring (&execcmd); - } - if (x == SCMOK) x = (*xferfile) (t,args); - if (x == SCMOK) x = readmend (); - } - va_end(args); - return (x); -} - -/* - * protocol done message - */ -extern int doneack; -extern char *donereason; - -int msgdone () -{ - register int x; - - if (protver < 6) { - printf ("Error, msgdone should not have been called."); - return (SCMERR); - } - if (server) { - x = readmsg (MSGDONE); - if (x == SCMOK) x = readint (&doneack); - if (x == SCMOK) x = readstring (&donereason); - if (x == SCMOK) x = readmend (); - } else { - x = writemsg (MSGDONE); - if (x == SCMOK) x = writeint (doneack); - if (x == SCMOK) x = writestring (donereason); - if (x == SCMOK) x = writemend (); - } - return (x); -} - -/* - * go away message - */ -extern char *goawayreason; /* reason for goaway */ - -int msggoaway () -{ - return (writemstr (MSGGOAWAY,goawayreason)); -} - -/* - * cross-patch protocol message - */ -extern int xargc; /* arg count for crosspatch */ -extern char **xargv; /* arg array for crosspatch */ - -int msgxpatch () -{ - register int x; - register int i; - - if (server) { - x = readmsg (MSGXPATCH); - if (x != SCMOK) return (x); - x = readint (&xargc); - if (x != SCMOK) return (x); - xargc += 2; - xargv = (char **)calloc (sizeof (char *),(unsigned)xargc+1); - if (xargv == NULL) - return (SCMERR); - for (i = 2; i < xargc; i++) { - x = readstring (&xargv[i]); - if (x != SCMOK) return (x); - } - x = readmend (); - } else { - x = writemsg (MSGXPATCH); - if (x != SCMOK) return (x); - x = writeint (xargc); - if (x != SCMOK) return (x); - for (i = 0; i < xargc; i++) { - x = writestring (xargv[i]); - if (x != SCMOK) return (x); - } - x = writemend (); - } - return (x); -} - -/* - * Compression check protocol message - */ -extern int docompress; /* Compress file before sending? */ - -int msgcompress () -{ - if (server) - return (readmint (MSGCOMPRESS,&docompress)); - return (writemint (MSGCOMPRESS, docompress)); -} |