rsalz@uunet.uu.net (Rich Salz) (03/21/91)
Submitted-by: Kevin Braunsdorf <ksb@cc.purdue.edu> Posting-number: Volume 24, Issue 69 Archive-name: pucc-install/part07 #!/bin/sh # This is part 07 of pucc-1b # ============= instck/path.h ============== if test ! -d 'instck'; then echo 'x - creating directory instck' mkdir 'instck' fi if test -f 'instck/path.h' -a X"$1" != X"-c"; then echo 'x - skipping instck/path.h (File already exists)' else echo 'x - extracting instck/path.h (Text)' sed 's/^X//' << 'Purdue' > 'instck/path.h' && /* X * $Id: path.h,v 7.1 90/09/17 10:25:43 ksb Exp $ X * Copyright 1990 Purdue Research Foundation, West Lafayette, Indiana X * 47907. All rights reserved. X * X * Written by Kevin S Braunsdorf, ksb@cc.purdue.edu, purdue!ksb X * X * This software is not subject to any license of the American Telephone X * and Telegraph Company or the Regents of the University of California. X * X * Permission is granted to anyone to use this software for any purpose on X * any computer system, and to alter it and redistribute it freely, subject X * to the following restrictions: X * X * 1. Neither the authors nor Purdue University are responsible for any X * consequences of the use of this software. X * X * 2. The origin of this software must not be misrepresented, either by X * explicit claim or by omission. Credit to the authors and Purdue X * University must appear in documentation and sources. X * X * 3. Altered versions must be plainly marked as such, and must not be X * misrepresented as being the original software. X * X * 4. This notice may not be removed or altered. X */ X /* X * we assume that the user has somehow defined a typedef for PATH_DATA... X */ typedef struct CMnode { X struct CMnode *pCMsibling; X struct CMnode *pCMchild; X char *pccomp; X PATH_DATA user_data; X short fprint; } COMPONENT; #define nilCM ((COMPONENT *) 0) #define newCM() ((COMPONENT *) malloc(sizeof(COMPONENT))) X extern int chSep; X #if HAVE_PROTO extern int ApplyPath(COMPONENT *, int (*)()); extern PATH_DATA *AddPath(COMPONENT **, char *); #else extern int ApplyPath(); extern PATH_DATA *AddPath(); #endif Purdue chmod 0444 instck/path.h || echo 'restore of instck/path.h failed' Wc_c="`wc -c < 'instck/path.h'`" test 1580 -eq "$Wc_c" || echo 'instck/path.h: original size 1580, current size' "$Wc_c" fi # ============= instck/gen.h ============== if test -f 'instck/gen.h' -a X"$1" != X"-c"; then echo 'x - skipping instck/gen.h (File already exists)' else echo 'x - extracting instck/gen.h (Text)' sed 's/^X//' << 'Purdue' > 'instck/gen.h' && /* X * $Id: gen.h,v 7.3 90/11/28 13:08:24 ksb Exp $ X * Copyright 1990 Purdue Research Foundation, West Lafayette, Indiana X * 47907. All rights reserved. X * X * Written by Kevin S Braunsdorf, ksb@cc.purdue.edu, purdue!ksb X * X * This software is not subject to any license of the American Telephone X * and Telegraph Company or the Regents of the University of California. X * X * Permission is granted to anyone to use this software for any purpose on X * any computer system, and to alter it and redistribute it freely, subject X * to the following restrictions: X * X * 1. Neither the authors nor Purdue University are responsible for any X * consequences of the use of this software. X * X * 2. The origin of this software must not be misrepresented, either by X * explicit claim or by omission. Credit to the authors and Purdue X * University must appear in documentation and sources. X * X * 3. Altered versions must be plainly marked as such, and must not be X * misrepresented as being the original software. X * X * 4. This notice may not be removed or altered. X */ X /* X * configure parts we need (maxfreq) and export our abstraction (ksb) X */ #define MAXGROUPNAME 32 /* size for a group name */ X typedef struct MEnode { X int iuid; X int igid; X int imode; X char chstrip, chtype; } ME_ELEMENT; X X #if HAVE_PROTO extern int GenCk(int, char **); extern int MECompare(ME_ELEMENT *, ME_ELEMENT *); extern int MECopy(ME_ELEMENT *, ME_ELEMENT *); #else extern int GenCk(); extern int MECompare(); extern int MECopy(); #endif Purdue chmod 0444 instck/gen.h || echo 'restore of instck/gen.h failed' Wc_c="`wc -c < 'instck/gen.h'`" test 1520 -eq "$Wc_c" || echo 'instck/gen.h: original size 1520, current size' "$Wc_c" fi # ============= instck/README ============== if test -f 'instck/README' -a X"$1" != X"-c"; then echo 'x - skipping instck/README (File already exists)' else echo 'x - extracting instck/README (Text)' sed 's/^X//' << 'Purdue' > 'instck/README' && # $Id: README,v 7.2 90/11/28 09:30:56 ksb Exp $ X Instck is a member of the install family of sys admin tools. X Instck has 3 main functions: X X 1/ cleaning up after aborted or broken installs (wrong link count) X X 2/ generating checklist files for install X X 3/ processing a checklist to find errors in the current system X X When install or purge notifies the admin that a link count is wrong she may run instck (as directed by install). For example if install tells you that the link count is wrong for /usr/bin/OLD/cu, one might run: X instck -iS /usr/bin/OLD X which would prompt with something like: X instck: linking ../tip to ../cu (cwd=/usr/bin/OLD) X instck: rm -f ../tip {was link into OLD} [nfhqy] y X instck: ln ../cu ../tip [nfhqy] y X These commands repair the problem. Instck can not always find the link, but it will suggest stronger commands (like find(1)) when it fails. X X Instck will generate a checklist file for install: try X instck -SG /bin/ /lib/ X retry with combinations of -v and -l and -L if you like. X X Instck checks the currently installed products against install's check list (/usr/local/etc/install.cf) and reports bad modes/owners/groups. Instck can be run from crontab as often as purge(1l) is, possibly not at the same time. (Instck should take very little time to run.) X kayessbee Purdue chmod 0444 instck/README || echo 'restore of instck/README failed' Wc_c="`wc -c < 'instck/README'`" test 1307 -eq "$Wc_c" || echo 'instck/README: original size 1307, current size' "$Wc_c" fi # ============= purge/purge.m ============== if test ! -d 'purge'; then echo 'x - creating directory purge' mkdir 'purge' fi if test -f 'purge/purge.m' -a X"$1" != X"-c"; then echo 'x - skipping purge/purge.m (File already exists)' else echo 'x - extracting purge/purge.m (Text)' sed 's/^X//' << 'Purdue' > 'purge/purge.m' && # command line options for purge(8L) # $Compile: ${mkcmd-mkcmd} -n main std_help.m %f # $Id: purge.m,v 3.1 90/11/26 12:26:54 ksb Exp $ X X after { X named "Version" X update "InitAll();if (%rVn) {exit(%n());}" } X from '"configure.h"' from '"install.h"' X every { X from '"purge.h"' X named "Which" X parameter "dirs" X help "dirs to purge" } X # this puts the []'s on dirs for us, # of course we could 'Scan("/");' here if we were not so conservative zero { X update "exit(0);" } X exit { X named 'Done' X update '%n();' } X # we don't do this because it is never what we want, # we really want the last stable version -- # we don't know how to find that. #boolean '1' { # named 'f1Copy' # init '0' # help "always keep one copy as a backup" #} X boolean 'A' { X named "fAnyOwner" X help "purge for all users" } X function 'u' { X parameter "user" X named "AddHer" X update "(void)%n(%a);" X help "OLD directories may be owned by this user" } X boolean 'v' { X named "fVerbose" X help "be verbose" } X boolean 'n' { X named "fExec" X init '1' X update "%n = !%i;%rvn = !%rvi;" X help "do not really execute commands" } X integer 'd' { X verify named "iDays" X parameter "days" X init '14' X help "days to keep backup files (default %i)" } X boolean 'V' { X named "fVersion" X init "0" X help "show version information" } X boolean 'S' { X named "fSuperUser" X init "0" X help "run as if we were the superuser" } Purdue chmod 0444 purge/purge.m || echo 'restore of purge/purge.m failed' Wc_c="`wc -c < 'purge/purge.m'`" test 1367 -eq "$Wc_c" || echo 'purge/purge.m: original size 1367, current size' "$Wc_c" fi # ============= purge/purge.h ============== if test -f 'purge/purge.h' -a X"$1" != X"-c"; then echo 'x - skipping purge/purge.h (File already exists)' else echo 'x - extracting purge/purge.h (Text)' sed 's/^X//' << 'Purdue' > 'purge/purge.h' && /* X * $Id: purge.h,v 3.2 90/10/02 21:19:47 ksb Exp $ X * X * Copyright 1990 Purdue Research Foundation, West Lafayette, Indiana X * 47907. All rights reserved. X * X * Written by Kevin S Braunsdorf, ksb@cc.purdue.edu, purdue!ksb X * X * This software is not subject to any license of the American Telephone X * and Telegraph Company or the Regents of the University of California. X * X * Permission is granted to anyone to use this software for any purpose on X * any computer system, and to alter it and redistribute it freely, subject X * to the following restrictions: X * X * 1. Neither the authors nor Purdue University are responsible for any X * consequences of the use of this software. X * X * 2. The origin of this software must not be misrepresented, either by X * explicit claim or by omission. Credit to the authors and Purdue X * University must appear in documentation and sources. X * X * 3. Altered versions must be plainly marked as such, and must not be X * misrepresented as being the original software. X * X * 4. This notice may not be removed or altered. X */ X extern void InitAll(); extern int AddHer(); extern void Which(), Done(); Purdue chmod 0444 purge/purge.h || echo 'restore of purge/purge.h failed' Wc_c="`wc -c < 'purge/purge.h'`" test 1148 -eq "$Wc_c" || echo 'purge/purge.h: original size 1148, current size' "$Wc_c" fi # ============= install.d/dir.h ============== if test ! -d 'install.d'; then echo 'x - creating directory install.d' mkdir 'install.d' fi if test -f 'install.d/dir.h' -a X"$1" != X"-c"; then echo 'x - skipping install.d/dir.h (File already exists)' else echo 'x - extracting install.d/dir.h (Text)' sed 's/^X//' << 'Purdue' > 'install.d/dir.h' && /* X * $Id: dir.h,v 7.0 90/09/17 09:41:42 ksb Exp $ X * Copyright 1990 Purdue Research Foundation, West Lafayette, Indiana X * 47907. All rights reserved. X * X * Written by Kevin S Braunsdorf, ksb@cc.purdue.edu, purdue!ksb X * X * This software is not subject to any license of the American Telephone X * and Telegraph Company or the Regents of the University of California. X * X * Permission is granted to anyone to use this software for any purpose on X * any computer system, and to alter it and redistribute it freely, subject X * to the following restrictions: X * X * 1. Neither the authors nor Purdue University are responsible for any X * consequences of the use of this software. X * X * 2. The origin of this software must not be misrepresented, either by X * explicit claim or by omission. Credit to the authors and Purdue X * University must appear in documentation and sources. X * X * 3. Altered versions must be plainly marked as such, and must not be X * misrepresented as being the original software. X * X * 4. This notice may not be removed or altered. X */ X #if HAVE_PROTO extern int DirInstall(char *, char *, char *, char *, char *, char *, char *, char *, int); #else extern int DirInstall(); #endif X extern char acLs[]; extern char acLsDirArgs[]; Purdue chmod 0444 install.d/dir.h || echo 'restore of install.d/dir.h failed' Wc_c="`wc -c < 'install.d/dir.h'`" test 1262 -eq "$Wc_c" || echo 'install.d/dir.h: original size 1262, current size' "$Wc_c" fi # ============= install.d/file.h ============== if test -f 'install.d/file.h' -a X"$1" != X"-c"; then echo 'x - skipping install.d/file.h (File already exists)' else echo 'x - extracting install.d/file.h (Text)' sed 's/^X//' << 'Purdue' > 'install.d/file.h' && /* X * $Id: file.h,v 7.0 90/09/17 09:41:48 ksb Exp $ X * Copyright 1990 Purdue Research Foundation, West Lafayette, Indiana X * 47907. All rights reserved. X * X * Written by Kevin S Braunsdorf, ksb@cc.purdue.edu, purdue!ksb X * X * This software is not subject to any license of the American Telephone X * and Telegraph Company or the Regents of the University of California. X * X * Permission is granted to anyone to use this software for any purpose on X * any computer system, and to alter it and redistribute it freely, subject X * to the following restrictions: X * X * 1. Neither the authors nor Purdue University are responsible for any X * consequences of the use of this software. X * X * 2. The origin of this software must not be misrepresented, either by X * explicit claim or by omission. Credit to the authors and Purdue X * University must appear in documentation and sources. X * X * 3. Altered versions must be plainly marked as such, and must not be X * misrepresented as being the original software. X * X * 4. This notice may not be removed or altered. X */ X #if HAVE_PROTO extern void MkOld(char *); extern int DoBackup(int, char *, char *, char *); extern void MakeNames(char *, char *, char *, char *); extern int DoLinks(struct stat *, char *, char *, int, struct passwd *, struct group *); extern int LaunchLinks(struct stat *, char *, char *, char *, int, struct passwd *, struct group *); extern int Install(char *, char *, char *, char *); #else extern void MkOld(); extern int DoBackup(); extern void MakeNames(); extern int DoLinks(); extern int LaunchLinks(); extern int Install(); #endif Purdue chmod 0444 install.d/file.h || echo 'restore of install.d/file.h failed' Wc_c="`wc -c < 'install.d/file.h'`" test 1611 -eq "$Wc_c" || echo 'install.d/file.h: original size 1611, current size' "$Wc_c" fi # ============= instck/maxfreq.h ============== if test -f 'instck/maxfreq.h' -a X"$1" != X"-c"; then echo 'x - skipping instck/maxfreq.h (File already exists)' else echo 'x - extracting instck/maxfreq.h (Text)' sed 's/^X//' << 'Purdue' > 'instck/maxfreq.h' && /* X * manage a data structure that keeps the modes of a list of values X * $Id: maxfreq.h,v 7.2 90/11/28 09:09:59 ksb Exp $ X * X * Assumptions: X * there aren't many different values (usually less than 16) X * long chains of the same number are common X */ X /* X * test configuration X */ #ifdef TEST #define MAXBUF 100 X typedef union MEnode { X char ac[MAXBUF]; } ME_ELEMENT; X extern int MECopy(); extern int MECompare(); extern char *progname; extern int main(); #endif /* TEST */ X /* X * this is the data structure used for keeping the max frequency X * X * The algorithm to maintain it is O(n^2) / K; we try to keep K large X * by predicting that the input contains long repeating sequences of X * the same key. X */ typedef struct MFnode { X struct MFnode *pMFlower;/* list of nodes with lower freq's */ X struct MFnode *pMFequal;/* list of nodes with equal freq's */ X ME_ELEMENT ME; X int icount; } MAXFREQ; #define nilMF ((MAXFREQ *)0) X extern ME_ELEMENT *MFIncrement(); extern void MFFree(); extern int MFCheckMax(), MFScan(); Purdue chmod 0444 instck/maxfreq.h || echo 'restore of instck/maxfreq.h failed' Wc_c="`wc -c < 'instck/maxfreq.h'`" test 1018 -eq "$Wc_c" || echo 'instck/maxfreq.h: original size 1018, current size' "$Wc_c" fi # ============= purge/filedup.h ============== if test -f 'purge/filedup.h' -a X"$1" != X"-c"; then echo 'x - skipping purge/filedup.h (File already exists)' else echo 'x - extracting purge/filedup.h (Text)' sed 's/^X//' << 'Purdue' > 'purge/filedup.h' && /* X * $Id: filedup.h,v 3.0 90/09/17 11:38:21 ksb Exp $ X * routines to keep track of dup files (hard links) (ksb) X */ typedef struct AE { X dev_t mydev; X ino_t myino; X char *pcname; } AE_ELEMENT; #define nilAE ((AE_ELEMENT *)0) X /* X * Indices for AVsbpAVchild tag X */ #define AV_LCHILD 0 #define AV_RCHILD 1 X /* X * Balance factors (can be used to select child to traverse too) X */ #define AV_BAL_LEFT AV_LCHILD #define AV_BAL_CENTER -1 #define AV_BAL_RIGHT AV_RCHILD X typedef unsigned AVCARDINAL; /* short/normal/long unsigned */ X typedef struct AVnode { X struct AVnode *AVsbpAVchild[2]; /* AVL children */ X short int AVbtipped; /* AVL balance factor */ X AE_ELEMENT AE_data; } AVL; #define nilAV ((AVL *)0) extern void AVInit(); X typedef AVL *FILEDUPS; extern char *FDAdd(); #define FDScan AVScan #define FDInit AVInit Purdue chmod 0444 purge/filedup.h || echo 'restore of purge/filedup.h failed' Wc_c="`wc -c < 'purge/filedup.h'`" test 825 -eq "$Wc_c" || echo 'purge/filedup.h: original size 825, current size' "$Wc_c" fi exit 0 exit 0 # Just in case... -- Please send comp.sources.unix-related mail to rsalz@uunet.uu.net. Use a domain-based address or give alternate paths, or you may lose out.