Sei sulla pagina 1di 21

%!

% jjch (John Chew) did most of this.

/ReEncodeSmall{0 begin 3 -1 roll findfont dup maxlength dict/newFont


exch def {exch dup/FID ne{dup/Encoding eq{exch dup length array copy
}{exch}ifelse newFont 3 1 roll put}{pop pop}ifelse}forall newFont/FontName
3 index put aload length 2 idiv{newFont/Encoding get 3 1 roll put}repeat
newFont definefont pop end}def/ReEncodeSmall load 0 1 dict put/ISOEncoding
[8#005/OE 8#017/oe 8#027/quotedblright 8#030/quotesinglbase 8#031/Ydieresis
8#034/quotedblleft 8#035/quotedblbase 8#036/guilsinglright 8#037/guilsinglleft
8#177/quotesingle 8#200/fraction 8#201/endash 8#202/emdash 8#203/ellipsis
8#204/daggerdbl 8#205/dagger 8#206/bullet 8#207/zcaron 8#210/trademark
8#211/scaron 8#212/perthousand 8#213/lslash 8#214/florin 8#215/Zcaron
8#216/Scaron 8#217/Lslash 8#220/dotlessi 8#221/grave 8#222/acute 8#223
/circumflex 8#224/tilde 8#225/macron 8#226/breve 8#227/dotaccent 8#230
/dieresis 8#231/fi 8#232/ring 8#233/cedilla 8#234/fl 8#235/hungarumlaut
8#236/ogonek 8#237/caron 8#240/space 8#244/currency 8#246/brokenbar
8#250/dieresis 8#251/copyright 8#252/ordfeminine 8#254/logicalnot 8#255
/hyphen 8#256/registered 8#257/macron 8#260/degree 8#261/plusminus
8#262/twosuperior 8#263/threesuperior 8#264/acute 8#265/mu 8#267/periodcentered
8#270/cedilla 8#271/onesuperior 8#272/ordmasculine 8#274/onequarter
8#275/onehalf 8#276/threequarters 8#300/Agrave 8#301/Aacute 8#302/Acircumflex
8#303/Atilde 8#304/Adieresis 8#305/Aring 8#306/AE 8#307/Ccedilla 8#310
/Egrave 8#311/Eacute 8#312/Ecircumflex 8#313/Edieresis 8#314/Igrave
8#315/Iacute 8#316/Icircumflex 8#317/Idieresis 8#320/Eth 8#321/Ntilde
8#322/Ograve 8#323/Oacute 8#324/Ocircumflex 8#325/Otilde 8#326/Odieresis
8#327/multiply 8#330/Oslash 8#331/Ugrave 8#332/Uacute 8#333/Ucircumflex
8#334/Udieresis 8#335/Yacute 8#336/Thorn 8#337/germandbls 8#340/agrave
8#341/aacute 8#342/acircumflex 8#343/atilde 8#344/adieresis 8#345/aring
8#346/ae 8#347/ccedilla 8#350/egrave 8#351/eacute 8#352/ecircumflex
8#353/edieresis 8#354/igrave 8#355/iacute 8#356/icircumflex 8#357/idieresis
8#360/eth 8#361/ntilde 8#362/ograve 8#363/oacute 8#364/ocircumflex
8#365/otilde 8#366/odieresis 8#367/divide 8#370/oslash 8#371/ugrave
8#372/uacute 8#373/ucircumflex 8#374/udieresis 8#375/yacute 8#376/thorn
8#377/ydieresis]def systemdict/setobjectformat known{0 setobjectformat
}if/Courier/CourierISO ISOEncoding ReEncodeSmall/Courier-Oblique/Courier-ObliqueISO
ISOEncoding ReEncodeSmall/Courier-Bold/Courier-BoldISO ISOEncoding
ReEncodeSmall/Courier-BoldOblique/Courier-BoldObliqueISO ISOEncoding
ReEncodeSmall/Times-Roman/Times-RomanISO ISOEncoding ReEncodeSmall
/Times-Bold/Times-BoldISO ISOEncoding ReEncodeSmall/Xpage 26.52 def
/Ypage 22.32 def/inch{72 mul}def clippath pathbbox/ury exch def/urx
exch def/lly exch def/llx exch def newpath/Wpage 544 def/Hpage 797
def/Ln 1 def/ln 0 def/Pn 1 def/pn 0 def/Frontpage true def/Number true
def/Header true def/Landscape false def/corps 7 def/vcorps 0 def/GreyScale
.99 def/Columns 1 def/Margin 0 def/user(smith)def/username(John A. Smith)def
/fnames[(stdin)]def/date(the first day)def/owner(she)def/fname(herfile.c)def
/ctime(12 O'clock b.c.)def/mtime(some time after)def/Hleft{mtime}def
/Hcenter{fname}def/Hright{(Page )pn 4 string cvs append}bind def/append
{2 copy length exch length add string dup 4 2 roll 2 index 0 3 index
putinterval exch length exch putinterval}bind def/initpage{grestore
gsave}bind def/bs{currentpoint 3 -1 roll show moveto}bind def/ul{(_)bs
}bind def /a`{currentpoint(\301)show moveto(a)show}bind def/a^{currentpoint
(\303)show moveto(a)show}bind def/e'{currentpoint(\302)show moveto
(e)show}bind def/e`{currentpoint(\301)show moveto(e)show}bind def/e^
{currentpoint(\303)show moveto(e)show}bind def/e"{currentpoint(\310)show
moveto(e)show}bind def/i^{currentpoint(\303)show moveto(\365)show}bind
def/i"{currentpoint(\310)show moveto(\365)show}bind def/o^{currentpoint
(\303)show moveto(o)show}bind def/u^{currentpoint(\303)show moveto
(u)show}bind def/u`{currentpoint(\301)show moveto(u)show}bind def/u"
{currentpoint(\310)show moveto(u)show}bind def/c,{currentpoint(\313)show
moveto(c)show}bind def/ae{(ae)show}bind def/oe{(oe)show}bind def/o
{{CurrentFont setfont dup length 0 eq{pop exit}if currentpoint pop
Xend ge{nnonumber 64 0 rmoveto CurrentFont setfont}if dup stringwidth
pop currentpoint pop add dup Xend le {pop show exit }if currentpoint
pop sub Xend currentpoint pop sub exch div 1 index length mul round
cvi 2 copy 0 exch getinterval show 1 index length 2 copy eq/restevide
exch def 1 index sub getinterval restevide not{nnonumber 64 0 rmoveto
}if}loop}bind def/flr{0 vcorps rmoveto/Y Y vcorps add store}bind def
/hlr{0 vcorps 2 div rmoveto}bind def/hlf{0 vcorps neg 2 div rmoveto
/Y Y vcorps 2 div sub store}bind def/up{0 1 rmoveto}bind def/do{0 -1
rmoveto}bind def/le{-1 0 rmoveto}bind def/ri{1 0 rmoveto}bind def/init
{initgraphics Xpage Ypage translate vcorps 0 eq{/vcorps corps def}if
/Fn/CourierISO findfont corps scalefont def/Fi/Courier-ObliqueISO findfont
corps scalefont def/Fj/Courier-BoldObliqueISO findfont corps scalefont
def/Fg/Courier-BoldISO findfont corps scalefont def/Fh/Times-RomanISO
findfont 10 scalefont def/Fnum/Times-RomanISO findfont corps scalefont
def/setn{/CurrentFont Fn def}def/seti{/CurrentFont Fi def}def/setj
{/CurrentFont Fj def}def/setg{/CurrentFont Fg def}def setn Landscape
{/Wpage Hpage/Hpage Wpage def def 90 rotate 0 Hpage neg translate
}if/Xhead Margin def/Whead Wpage Margin sub def/Xstart Margin def/DXstart
Whead Columns div def/Yhead Hpage 12 sub def /Hhead Hpage 40 sub def
/Ystart Hpage 36 sub def/Ystop 5 def initclip gsave Frontpage{frontpage
}if}bind def/beginofcolumn{/Y Ystart vcorps sub def/Xend Xstart DXstart
add def grestore gsave newpath Xstart 0 moveto DXstart 1 add dup 0
rlineto 0 Hpage 1 add rlineto neg 0 rlineto closepath clip}readonly
def/endofcolumn{Number{newpath/x Xstart 32 add def x Ystart moveto
x Y vcorps add lineto 0 setlinewidth stroke}if}readonly def/beginofpage
{initpage Header{header}if/pn pn 1 add def/Xstart Margin def beginofcolumn
}readonly def/endofpage{showpage}readonly def/nextcolumn{endofcolumn
/Xstart Xstart DXstart add def Xstart DXstart add Xhead Whead add gt
{endofpage beginofpage}{beginofcolumn}ifelse}readonly def/nnonumber
{/Y Y vcorps sub def Y Ystop lt{nextcolumn}if Xstart Y moveto}bind
def/n{nnonumber number}bind def/number{Xstart Y moveto Number{Fnum
setfont/lnstr ln( )cvs def 30 lnstr stringwidth pop sub 0 rmoveto
lnstr show 10 0 rmoveto/ln ln 1 add def}if}bind def/sf{/Times-RomanISO
findfont 9 scalefont setfont show}bind def/rm{/Times-RomanISO findfont
13 scalefont setfont show}bind def/bf{/Times-BoldISO findfont 14 scalefont
setfont show}bind def/cprygt{/Symbol findfont 14 scalefont setfont
(\323)show}bind def/nl{/Y Y 18 sub def X Y moveto}bind def/frontpage
{initpage/Hhead Hhead localization sub def newpath Xhead Yhead moveto
Whead 0 rlineto 0 Hhead neg rlineto Whead neg 0 rlineto 0 setlinewidth
closepath stroke/X Wpage 2 div def X 102 sub Ystart 50 sub moveto(Output with the
great)rm
( cprint )bf(program)rm X 100 sub Ystart 75 sub moveto cprygt( Csar Douady &
Dominique Gascuel)rm
/X Xstart 72 add def/dX 50 def/Y Ystart 130 sub def nl(For:)rm X dX
add Y moveto username bf( \()rm user rm(\))rm nl(Date:)rm X dX add
Y moveto date bf fnames length 0 gt{nl(File)rm fnames length 1 gt{
(s)rm}if(:)rm}if X dX add Y moveto fnames{bf nl dX 0 rmoveto}forall
showpage}bind def/header{newpath Xhead Yhead moveto Whead 0 rlineto
0 12 rlineto Whead neg 0 rlineto closepath 0 setlinewidth stroke Fh
setfont Xhead 3 add Yhead 3 add moveto Hleft show/str Hcenter def str
stringwidth pop neg Whead add 2 div Xhead 3 add add Yhead 3 add moveto
str show/str Hright def Xhead Whead add 3 sub str stringwidth pop sub
Yhead 3 add moveto str show}bind def/newfile{/fname exch def/ln Ln
def/pn Pn def beginofpage number}bind def/endoffile{/Y Y vcorps sub
def endofcolumn endofpage}bind def/localization{/Y Ystop 36 add def
/X Wpage 2 div def X 109 sub Y 9 sub moveto(Laboratoire d'Informatique de l'cole
Normale Suprieure)sf
X 78 sub Y 18 sub moveto(45 rue d'Ulm. 75230 Paris Cedex 05)sf X 55
sub Y 27 sub moveto(Tl: (+33) 01 44 32 32 16)sf X 56 sub Y 36 sub
moveto(Fax: (+33) 01 44 32 20 80)sf Y}bind def
/user (beig) store
/username (Jacques Beigbeder) store
/date (Vendredi 14 mai 2004 10:10:21) store
/fnames [(syslogd.c)] store
/corps 9 store
/vcorps 9 store

/Frontpage false def


init
/owner (beig) store
/mtime (Lundi 15 mai 1995 20:03:50) store
/ctime (Vendredi 14 mai 2004 09:57:53) store

(syslogd.c) newfile
setn setg (#ifndef)o setn ( lint)o n
setg (static)o setn ( )o setg (char)o setn ( sccsid[] = "@\(#\)syslogd.c";)o n
setg (#endif)o setn ( not lint)o n
n
seti (/*)o n
( * syslogd -- log system messages)o n
( *)o n
( * This program implements a system log. It takes a series of lines.)o n
( * Each line may have a priority, signified as "<n>" as)o n
( * the first characters of the line. If this is)o n
( * not present, a default priority is used.)o n
( *)o n
( * To kill syslogd, send a signal 15 \(terminate\). A signal 1 \(hup\) will)o n
( * cause it to reread its configuration file.)o n
( *)o n
( * Defined Constants:)o n
( *)o n
( * MAXLINE -- the maximimum line length that can be handled.)o n
( * NLOGS -- the maximum number of simultaneous log files.)o n
( * DEFUPRI -- the default priority for user messages)o n
( * DEFSPRI -- the default priority for kernel messages)o n
( *)o n
( */)o setn n
n
setg (#define)o setn ( NLOGS 20 )o seti (/* max number of log files
*/)o setn n
setg (#define)o setn ( MAXLINE 1024 )o seti (/* maximum line length
*/)o setn n
setg (#define)o setn ( DEFUPRI \(LOG_USER|LOG_NOTICE\))o n
setg (#define)o setn ( DEFSPRI \(LOG_KERN|LOG_CRIT\))o n
setg (#define)o setn ( MARKCOUNT 10 )o seti (/* ratio of minor to major
marks */)o setn n
n
setg (#include)o setn ( <errno.h>)o n
setg (#include)o setn ( <stdio.h>)o n
setg (#include)o setn ( <sys/types.h>)o n
setg (#include)o setn ( <utmp.h>)o n
setg (#include)o setn ( <ctype.h>)o n
setg (#include)o setn ( <signal.h>)o n
setg (#include)o setn ( <sysexits.h>)o n
setg (#include)o setn ( <string.h>)o n
n
setg (#include)o setn ( <sys/syslog.h>)o n
setg (#include)o setn ( <sys/param.h>)o n
setg (#include)o setn ( <sys/ioctl.h>)o n
setg (#include)o setn ( <sys/stat.h>)o n
setg (#include)o setn ( <sys/file.h>)o n
setg (#include)o setn ( <sys/uio.h>)o n
setg (#include)o setn ( <sys/time.h>)o n
setg (#include)o setn ( <sys/socket.h>)o n
n
setg (typedef)o setn ( )o setg (int)o setn ( \(*sighand\)\(\);)o n
n
setg (char)o setn ( *LogName = "/dev/log";)o n
setg (char)o setn ( *ConfFile = "/etc/syslog.conf";)o n
setg (char)o setn ( *PidFile = "/etc/syslog.pid";)o n
setg (char)o setn ( ctty[] = "/dev/tty0";)o n
n
setg (#define)o setn ( FDMASK\(fd\) \(1 << \(fd\)\))o n
n
seti (/*)o n
( * defines for BSD compat....I think!)o n
( */)o setn n
n
setg (#define)o setn ( index\(a, b\) strchr\(a, b\))o n
setg (#define)o setn ( bzero\(a, b\) memset\(a, '\\0', b\))o n
n
n
setg (#define)o setn ( dprintf )o setg (if)o setn ( \(Debug\) printf)o n
n
setg (#define)o setn ( UNAMESZ 8 )o seti (/* length of a login name */)o
setn n
setg (#define)o setn ( MAXUNAMES 20 )o seti (/* maximum number of user names
*/)o setn n
setg (#define)o setn ( MAXFNAME 200 )o seti (/* max file pathname length */)o
setn n
n
setg (#define)o setn ( NOPRI 0x10 )o seti (/* the "no priority" priority
*/)o setn n
setg (#define)o setn ( LOG_MARK \(LOG_NFACILITIES << 3\) )o seti (/* mark
"facility" */)o setn n
n
seti (/*)o n
( * Flags to logmsg\(\).)o n
( */)o setn n
n
setg (#define)o setn ( IGN_CONS 0x001 )o seti (/* don't print on console */)o
setn n
setg (#define)o setn ( SYNC_FILE 0x002 )o seti (/* do fsync on file after
printing */)o setn n
setg (#define)o setn ( NOCOPY 0x004 )o seti (/* don't suppress duplicate
messages */)o setn n
setg (#define)o setn ( ADDDATE 0x008 )o seti (/* add a date to the message
*/)o setn n
setg (#define)o setn ( MARK 0x010 )o seti (/* this message is a mark */)o
setn n
n
seti (/*)o n
( * This structure represents the files that will have log)o n
( * copies printed.)o n
( */)o setn n
n
setg (struct)o setn ( filed {)o n
( )o setg (short)o setn ( f_type; )o seti (/* entry type, see below
*/)o setn n
( )o setg (short)o setn ( f_file; )o seti (/* file descriptor */)o
setn n
( time_t f_time; )o seti (/* time this was last written */)o setn n
( u_char f_pmask[LOG_NFACILITIES+1]; )o seti (/* priority mask */)o setn n
( )o setg (union)o setn ( {)o n
( )o setg (char)o setn ( f_uname[MAXUNAMES][UNAMESZ+1];)o n
( )o setg (char)o setn ( f_fname[MAXFNAME];)o n
( } f_un;)o n
(};)o n
n
seti (/* values for f_type */)o setn n
setg (#define)o setn ( F_UNUSED 0 )o seti (/* unused entry */)o setn n
setg (#define)o setn ( F_FILE 1 )o seti (/* regular file */)o setn n
setg (#define)o setn ( F_TTY 2 )o seti (/* terminal */)o setn n
setg (#define)o setn ( F_CONSOLE 3 )o seti (/* console terminal */)o setn
n
setg (#define)o setn ( F_FORW 4 )o seti (/* remote machine */)o setn n
setg (#define)o setn ( F_USERS 5 )o seti (/* list of users */)o setn n
setg (#define)o setn ( F_WALL 6 )o seti (/* everyone logged on */)o
setn n
n
seti (/* how often \(in seconds\) to check for more input */)o setn n
setg (#define)o setn ( GRANULARITY 10)o n
setg (#define)o setn ( MSG_BSIZE 1024)o n
n
setg (char)o setn ( *TypeNames[7] = {)o n
( "UNUSED", "FILE", "TTY", "CONSOLE",)o n
( "FORW", "USERS", "WALL")o n
(};)o n
n
setg (struct)o setn ( filed Files[NLOGS];)o n
n
setg (int)o setn ( Debug; )o seti (/* debug flag */)o setn n
setg (char)o setn ( LocalHostName[MAXHOSTNAMELEN+1]; )o seti (/* our
hostname */)o setn n
setg (char)o setn ( *LocalDomain; )o seti (/* our local domain name */)o
setn n
setg (int)o setn ( InetInuse = 0; )o seti (/* non-zero if INET sockets are
being used */)o setn n
setg (int)o setn ( LogPort; )o seti (/* port number for INET connections
*/)o setn n
setg (char)o setn ( PrevLine[MAXLINE + 1]; )o seti (/* copy of last line to
supress repeats */)o setn n
setg (char)o setn ( PrevHost[MAXHOSTNAMELEN+1]; )o seti (/* previous host
*/)o setn n
setg (int)o setn ( PrevFlags;)o n
setg (int)o setn ( PrevPri;)o n
setg (int)o setn ( PrevCount = 0; )o seti (/* number of times seen */)o setn
n
setg (int)o setn ( Initialized = 0; )o seti (/* set when we have initialized
ourselves */)o setn n
setg (int)o setn ( MarkInterval = 20; )o seti (/* interval between marks in
minutes */)o setn n
setg (int)o setn ( MarkSeq = 0; )o seti (/* mark sequence number */)o setn
n
setg (int)o setn ( Gran = 0;)o n
setg (static)o setn ( )o setg (int)o setn ( mask = 0;)o n
setg (int)o setn ( count;)o n
setg (int)o setn ( readfds;)o n
n
setg (extern)o setn ( )o setg (int)o setn ( errno, sys_nerr;)o n
setg (extern)o setn ( )o setg (char)o setn ( *sys_errlist[];)o n
setg (extern)o setn ( )o setg (char)o setn ( *ctime\(\);)o n
seti (/* extern char *index\(\); */)o setn n
n
(main\(argc, argv\))o n
( )o setg (int)o setn ( argc;)o n
( )o setg (char)o setn ( **argv;)o n
({)o n
( )o setg (register)o setn ( )o setg (int)o setn ( i;)o n
( )o setg (register)o setn ( )o setg (char)o setn ( *p;)o n
( )o setg (static)o setn ( )o setg (int)o setn ( funix;)o n
( )o setg (int)o setn ( len, nlen, ns, nfds;)o n
( )o setg (struct)o setn ( sockaddr afunix, fromunix;)o n
( )o setg (int)o setn ( fd;)o n
( FILE *fp;)o n
( )o setg (char)o setn ( *lp, *lpb;)o n
( )o setg (char)o setn ( errbuf[100];)o n
( )o setg (char)o setn ( line[MSG_BSIZE + 1];)o n
( )o setg (extern)o setn ( )o setg (int)o setn ( die\(\), domark\(\);)o n
n
( )o setg (while)o setn ( \(--argc > 0\) {)o n
( p = *++argv;)o n
( )o setg (if)o setn ( \(p[0] != '-'\))o n
( usage\(\);)o n
( )o setg (switch)o setn ( \(p[1]\) {)o n
( )o setg (case)o setn ( 'f': )o seti (/* configuration file */)o setn
n
( )o setg (if)o setn ( \(p[2] != '\\0'\))o n
( ConfFile = &p[2];)o n
( )o setg (break)o setn (;)o n
n
( )o setg (case)o setn ( 'd': )o seti (/* debug */)o setn n
( Debug++;)o n
( )o setg (break)o setn (;)o n
n
( )o setg (case)o setn ( 'p': )o seti (/* path */)o setn n
( )o setg (if)o setn ( \(p[2] != '\\0'\))o n
( LogName = &p[2];)o n
( )o setg (break)o setn (;)o n
n
( )o setg (case)o setn ( 'm': )o seti (/* mark interval */)o setn n
( )o setg (if)o setn ( \(p[2] != '\\0'\))o n
( MarkInterval = atoi\(&p[2]\);)o n
( )o setg (break)o setn (;)o n
n
( )o setg (default)o setn (:)o n
( usage\(\);)o n
( })o n
( })o n
n
( )o setg (if)o setn ( \(!Debug\) {)o n
( )o setg (if)o setn ( \(fork\(\)\))o n
( exit\(0\);)o n
( )o setg (for)o setn ( \(i = 0; i < 10; i++\))o n
( close\(i\);)o n
( open\("/", 0\);)o n
( dup2\(0, 1\);)o n
( dup2\(0, 2\);)o n
( untty\(\);)o n
( } )o setg (else)o setn n
setg (#ifdef)o setn ( linux)o n
( ;)o n
setg (#else)o setn n
( setlinebuf\(stdout\);)o n
setg (#endif)o setn n
( gethostname\(LocalHostName, )o setg (sizeof)o setn ( LocalHostName\);)o n
( )o setg (if)o setn ( \(p = index\(LocalHostName, '.'\)\) {)o n
( *p++ = '\\0';)o n
( LocalDomain = p;)o n
( })o n
( )o setg (else)o setn n
( LocalDomain = "";)o n
( signal\(SIGTERM, \()o setg (void)o setn ( *\) die\);)o n
( signal\(SIGINT, Debug ? \()o setg (void)o setn ( *\) die : SIG_IGN\);)o n
( signal\(SIGQUIT, Debug ? \()o setg (void)o setn ( *\) die : SIG_IGN\);)o n
( unlink\(LogName\);)o n
seti (/*)o n
( * create system logfile LogName mode 0666)o n
( * logerror and die if can't)o n
( */)o setn n
n
( funix = socket\(AF_UNIX, SOCK_STREAM, 0\);)o n
( )o setg (if)o setn ( \(funix < 0\) {)o n
( logerror\("unable to create socket"\);)o n
( die\(0\);)o n
( })o n
( afunix.sa_family = AF_UNIX;)o n
( strcpy\(afunix.sa_data, LogName\);)o n
( )o setg (if)o setn ( \(bind\(funix, &afunix, )o setg (sizeof)o setn (\
(afunix\)\) < 0\) {)o n
( logerror\("can't bind"\);)o n
( die\(0\);)o n
( })o n
( chmod\(LogName, 0666\);)o n
n
( )o seti (/* tuck my process id away */)o setn n
( fp = fopen\(PidFile, "w"\);)o n
( )o setg (if)o setn ( \(fp != NULL\) {)o n
( fprintf\(fp, "%d\\n", getpid\(\)\);)o n
( fclose\(fp\);)o n
( })o n
n
( dprintf\("off & running....\\n"\);)o n
n
( init\(\);)o n
( signal\(SIGHUP, \()o setg (void)o setn ( *\) init\);)o n
( signal\(SIGALRM, \()o setg (void)o setn ( *\) domark\);)o n
n
( )o setg (if)o setn ( \(listen\(funix, 5\) < 0\) {)o n
( perror\("listen"\);)o n
( exit\(1\);)o n
( })o n
n
( alarm\(MarkInterval * 60 / MARKCOUNT\);)o n
n
( )o setg (for)o setn ( \(;;\) {)o n
( errno = 0;)o n
seti (/*)o n
( * Change this so it only reads one line at a time)o n
( * otherwise if more than BUFSIZ messages are read)o n
( * we'll get lost---also reading char at a time would)o n
( * help us catch messages that are being written while)o n
( * we run .... oh for an atomic flock)o n
( */)o setn n
n
( readfds = FDMASK\(funix\) | mask;)o n
( errno = 0;)o n
( nfds = select\(20, \(fd_set *\) &readfds, \(fd_set *\) NULL,)o n
( \(fd_set *\) NULL, \()o setg (struct)o setn ( timeval *\) NULL\);)o n
( count++;)o n
( )o setg (if)o setn ( \(nfds == 0\))o n
( )o setg (continue)o setn (;)o n
( )o setg (if)o setn ( \(nfds < 0\) {)o n
( )o setg (if)o setn ( \(errno != EINTR\))o n
( perror\("select"\);)o n
( )o setg (continue)o setn (;)o n
( })o n
( )o setg (if)o setn ( \(readfds & \(FDMASK\(funix\) | mask\)\) {)o n
( len = )o setg (sizeof)o setn ( fromunix;)o n
( )o setg (if)o setn ( \(\(i = recvfrom\(funix, line, MSG_BSIZE, 0,)o n
( \()o setg (struct)o setn ( sockaddr *\) &fromunix, &len\)\) > 0\)
{)o n
( line[i]='\\0';)o n
( printline\(LocalHostName, line\);)o n
( } )o setg (else)o setn ( {)o n
( )o setg (if)o setn ( \(\(errno == EAGAIN\) || \(errno == 0\)\) )o
setg (continue)o setn (;)o n
( sprintf\(errbuf, "recvfrom unix %d: %s", errno, strerror\
(errno\)\);)o n
( logerror\(errbuf\);)o n
( })o n
( } )o setg (else)o setn ( {)o n
( )o setg (if)o setn ( \(errno != EINTR\) {)o n
( logerror\("accept failure"\);)o n
( die\(0\);)o n
( })o n
( })o n
( })o n
(})o n
n
(usage\(\))o n
({)o n
( fprintf\(stderr, "usage: syslogd [-d] [-mmarkinterval] [-ppath] [-
fconffile]\\n"\);)o n
( exit\(1\);)o n
(})o n
n
(untty\(\))o n
({)o n
( )o setg (int)o setn ( i;)o n
n
( )o setg (if)o setn ( \(!Debug\) {)o n
setg (#ifdef)o setn ( linux)o n
( setpgrp\(\);)o n
setg (#endif)o setn n
( i = open\("/dev/tty", O_RDWR\);)o n
( )o setg (if)o setn ( \(i >= 0\) {)o n
setg (#ifndef)o setn ( linux)o n
( ioctl\(i, \()o setg (int)o setn (\) TIOCNOTTY, \()o setg (char)o setn
( *\)0\);)o n
setg (#endif)o setn ( linux)o n
( close\(i\);)o n
( })o n
( })o n
(})o n
n
seti (/*)o n
( * Take a raw input line, decode the message, and print the message)o n
( * on the appropriate log files.)o n
( */)o setn n
n
(printline\(hname, msg\))o n
( )o setg (char)o setn ( *hname;)o n
( )o setg (char)o setn ( *msg;)o n
({)o n
( )o setg (register)o setn ( )o setg (char)o setn ( *p, *q;)o n
( )o setg (register)o setn ( )o setg (int)o setn ( c;)o n
( )o setg (char)o setn ( line[MAXLINE + 1];)o n
( )o setg (int)o setn ( pri;)o n
n
( )o seti (/* test for special codes */)o setn n
( pri = DEFUPRI;)o n
( p = msg;)o n
( )o setg (if)o setn ( \(*p == '<'\) {)o n
( pri = 0;)o n
( )o setg (while)o setn ( \(isdigit\(*++p\)\))o n
( pri = 10 * pri + \(*p - '0'\);)o n
( )o setg (if)o setn ( \(*p == '>'\))o n
( ++p;)o n
( )o setg (if)o setn ( \(pri <= 0 || pri >= \(LOG_NFACILITIES << 3\)\))o n
( pri = DEFUPRI;)o n
( })o n
n
( )o seti (/* don't allow users to log kernel messages */)o setn n
( )o setg (if)o setn ( \(\(pri & LOG_PRIMASK\) == LOG_KERN\))o n
( pri |= LOG_USER;)o n
n
( q = line;)o n
n
( )o setg (while)o setn ( \(\(c = *p++ & 0177\) != '\\0' && c != '\\n' &&)o n
( q < &line[)o setg (sizeof)o setn (\(line\) - 1]\) {)o n
( )o setg (if)o setn ( \(iscntrl\(c\)\) {)o n
( *q++ = '^';)o n
( *q++ = c ^ 0100;)o n
( } )o setg (else)o setn n
( *q++ = c;)o n
( })o n
( *q = '\\0';)o n
n
( logmsg\(pri, line, hname, 0\);)o n
(})o n
n
n
seti (/*)o n
( * Log a message to the appropriate log files, users, etc. based on)o n
( * the priority.)o n
( */)o setn n
n
(logmsg\(pri, msg, from, flags\))o n
( )o setg (int)o setn ( pri;)o n
( )o setg (char)o setn ( *msg, *from;)o n
( )o setg (int)o setn ( flags;)o n
({)o n
( )o setg (register)o setn ( )o setg (struct)o setn ( filed *f;)o n
( )o setg (register)o setn ( )o setg (int)o setn ( l;)o n
( )o setg (int)o setn ( fac, prilev;)o n
( time_t now;)o n
( )o setg (int)o setn ( omask;)o n
( sighand s1, s2;)o n
( )o setg (struct)o setn ( iovec iov[6];)o n
( )o setg (register)o setn ( )o setg (struct)o setn ( iovec *v = iov;)o n
( )o setg (char)o setn ( line[MAXLINE + 1];)o n
n
( dprintf\("logmsg: pri %o, flags %x, from %s, msg %s\\n", pri, flags, from,
msg\);)o n
n
( s1 = signal\(SIGHUP, SIG_IGN\);)o n
( s2 = signal\(SIGALRM, SIG_IGN\);)o n
n
( )o seti (/*)o n
( * Check to see if msg looks non-standard.)o n
( */)o setn n
( )o setg (if)o setn ( \(strlen\(msg\) < 16 || msg[3] != ' ' || msg[6] != ' '
||)o n
( msg[9] != ':' || msg[12] != ':' || msg[15] != ' '\))o n
( flags |= ADDDATE;)o n
n
( )o setg (if)o setn ( \(!\(flags & NOCOPY\)\) {)o n
( )o setg (if)o setn ( \(flags & \(ADDDATE|MARK\)\))o n
( flushmsg\(\);)o n
( )o setg (else)o setn ( )o setg (if)o setn ( \(!strcmp\(msg + 16, PrevLine
+ 16\)\) {)o n
( )o seti (/* we found a match, update the time */)o setn n
( strncpy\(PrevLine, msg, 15\);)o n
( PrevCount++;)o n
( signal\(SIGHUP, \()o setg (void)o setn ( *\) s1\);)o n
( signal\(SIGALRM, \()o setg (void)o setn ( *\) s2\);)o n
( )o setg (return)o setn (;)o n
( } )o setg (else)o setn ( {)o n
( )o seti (/* new line, save it */)o setn n
( flushmsg\(\);)o n
( strcpy\(PrevLine, msg\);)o n
( strcpy\(PrevHost, from\);)o n
( PrevFlags = flags;)o n
( PrevPri = pri;)o n
( })o n
( })o n
n
( time\(&now\);)o n
( )o setg (if)o setn ( \(flags & ADDDATE\))o n
( v->iov_base = ctime\(&now\) + 4;)o n
( )o setg (else)o setn n
( v->iov_base = msg;)o n
( v->iov_len = 15;)o n
( v++;)o n
( v->iov_base = " ";)o n
( v->iov_len = 1;)o n
( v++;)o n
( v->iov_base = from;)o n
( v->iov_len = strlen\(v->iov_base\);)o n
( v++;)o n
( v->iov_base = " ";)o n
( v->iov_len = 1;)o n
( v++;)o n
( )o setg (if)o setn ( \(flags & ADDDATE\))o n
( v->iov_base = msg;)o n
( )o setg (else)o setn n
( v->iov_base = msg + 16;)o n
( v->iov_len = strlen\(v->iov_base\);)o n
( v++;)o n
n
( )o seti (/* extract facility and priority level */)o setn n
( fac = \(pri & LOG_FACMASK\) >> 3;)o n
( )o setg (if)o setn ( \(flags & MARK\))o n
( fac = LOG_NFACILITIES;)o n
( prilev = pri & LOG_PRIMASK;)o n
n
( )o seti (/* log the message to the particular outputs */)o setn n
( )o setg (if)o setn ( \(!Initialized\) {)o n
( )o setg (int)o setn ( cfd = open\(ctty, O_WRONLY\);)o n
n
( )o setg (if)o setn ( \(cfd >= 0\) {)o n
( v->iov_base = "\\r\\n";)o n
( v->iov_len = 2;)o n
( writev\(cfd, iov, 6\);)o n
( close\(cfd\);)o n
( })o n
( untty\(\);)o n
( signal\(SIGHUP, \()o setg (void)o setn ( *\) s1\);)o n
( signal\(SIGALRM, \()o setg (void)o setn ( *\) s2\);)o n
( )o setg (return)o setn (;)o n
( })o n
( )o setg (for)o setn ( \(f = Files; f < &Files[NLOGS]; f++\) {)o n
( )o seti (/* skip messages that are incorrect priority */)o setn n
( )o setg (if)o setn ( \(f->f_pmask[fac] < prilev || f->f_pmask[fac] ==
NOPRI\))o n
( )o setg (continue)o setn (;)o n
n
( )o seti (/* don't output marks to recently written files */)o setn n
( )o setg (if)o setn ( \(\(flags & MARK\) && \(now - f->f_time\) < \
(MarkInterval * 60 / 2\)\))o n
( )o setg (continue)o setn (;)o n
n
( dprintf\("Logging to %s", TypeNames[f->f_type]\);)o n
( f->f_time = now;)o n
( )o setg (switch)o setn ( \(f->f_type\) {)o n
( )o setg (case)o setn ( F_UNUSED:)o n
( dprintf\("\\n"\);)o n
( )o setg (break)o setn (;)o n
n
( )o setg (case)o setn ( F_FORW:)o n
( dprintf\("Forward \(unsupported\)\\n"\);)o n
( )o setg (break)o setn (;)o n
n
( )o setg (case)o setn ( F_CONSOLE:)o n
( )o setg (if)o setn ( \(flags & IGN_CONS\) {)o n
( dprintf\(" \(ignored\)\\n"\);)o n
( )o setg (break)o setn (;)o n
( })o n
n
( )o setg (case)o setn ( F_TTY:)o n
( )o setg (case)o setn ( F_FILE:)o n
( dprintf\(" %s\\n", f->f_un.f_fname\);)o n
( )o setg (if)o setn ( \(f->f_type != F_FILE\) {)o n
( v->iov_base = "\\r\\n";)o n
( v->iov_len = 2;)o n
( } )o setg (else)o setn ( {)o n
( v->iov_base = "\\n";)o n
( v->iov_len = 1;)o n
( })o n
( )o setg (if)o setn ( \(writev\(f->f_file, iov, 6\) < 0\) {)o n
( )o setg (int)o setn ( e = errno;)o n
( close\(f->f_file\);)o n
( )o seti (/*)o n
( * Check for EBADF on TTY's due to vhangup\(\) XXX)o n
( */)o setn n
( )o setg (if)o setn ( \(e == EBADF && f->f_type != F_FILE\) {)o n
( f->f_file = open\(f->f_un.f_fname, O_WRONLY|O_APPEND\);)o n
( )o setg (if)o setn ( \(f->f_file < 0\) {)o n
( f->f_type = F_UNUSED;)o n
( logerror\(f->f_un.f_fname\);)o n
( })o n
( } )o setg (else)o setn ( {)o n
( f->f_type = F_UNUSED;)o n
( errno = e;)o n
( logerror\(f->f_un.f_fname\);)o n
( })o n
( } )o setg (else)o setn ( )o setg (if)o setn ( \(flags & SYNC_FILE\))o
n
setg (#ifndef)o setn ( linux)o n
( fsync\(f->f_file\);)o n
setg (#else)o setn n
( sync\(\);)o n
setg (#endif)o setn n
( )o setg (break)o setn (;)o n
n
( )o setg (case)o setn ( F_USERS:)o n
( )o setg (case)o setn ( F_WALL:)o n
( dprintf\("\\n"\);)o n
( v->iov_base = "\\r\\n";)o n
( v->iov_len = 2;)o n
( wallmsg\(f, iov\);)o n
( )o setg (break)o setn (;)o n
( })o n
( })o n
( signal\(SIGHUP, \()o setg (void)o setn ( *\) s1\);)o n
( signal\(SIGALRM, \()o setg (void)o setn ( *\) s2\);)o n
(})o n
n
n
seti (/*)o n
( * WALLMSG -- Write a message to the world at large)o n
( *)o n
( * Write the specified message to either the entire)o n
( * world, or a list of approved users.)o n
( */)o setn n
n
(wallmsg\(f, iov\))o n
( )o setg (register)o setn ( )o setg (struct)o setn ( filed *f;)o n
( )o setg (struct)o setn ( iovec *iov;)o n
({)o n
( )o setg (register)o setn ( )o setg (char)o setn ( *p;)o n
( )o setg (register)o setn ( )o setg (int)o setn ( i;)o n
( )o setg (int)o setn ( ttyf, len, pid, wstat, xpid;)o n
( FILE *uf;)o n
( )o setg (static)o setn ( )o setg (int)o setn ( reenter = 0;)o n
( )o setg (struct)o setn ( utmp ut;)o n
( time_t now;)o n
( )o setg (char)o setn ( greetings[200];)o n
n
( )o setg (if)o setn ( \(reenter++\))o n
( )o setg (return)o setn (;)o n
n
( )o seti (/* open the user login file */)o setn n
( )o setg (if)o setn ( \(\(uf = fopen\("/etc/utmp", "r"\)\) == NULL\) {)o n
( logerror\("/etc/utmp"\);)o n
( reenter = 0;)o n
( )o setg (return)o setn (;)o n
( })o n
n
( time\(&now\);)o n
( sprintf\(greetings,)o n
( "\\r\\n\\7Message from syslogd@%s at %.24s ...\\r\\n",)o n
( iov[2].iov_base, ctime\(&now\)\);)o n
( len = strlen\(greetings\);)o n
n
( )o seti (/* scan the user login file */)o setn n
( xpid = 0;)o n
( )o setg (while)o setn ( \(fread\(\()o setg (char)o setn ( *\) &ut, )o setg
(sizeof)o setn ( ut, 1, uf\) == 1\) {)o n
( )o seti (/* is this slot used? */)o setn n
( )o setg (if)o setn ( \(ut.ut_name[0] == '\\0'\))o n
( )o setg (continue)o setn (;)o n
n
( )o seti (/* should we send the message to this user? */)o setn n
( )o setg (if)o setn ( \(f->f_type == F_USERS\) {)o n
( )o setg (for)o setn ( \(i = 0; i < MAXUNAMES; i++\) {)o n
( )o setg (if)o setn ( \(!f->f_un.f_uname[i][0]\) {)o n
( i = MAXUNAMES;)o n
( )o setg (break)o setn (;)o n
( })o n
( )o setg (if)o setn ( \(strncmp\(f->f_un.f_uname[i], ut.ut_name,)o
n
( UNAMESZ\) == 0\))o n
( )o setg (break)o setn (;)o n
( })o n
( )o setg (if)o setn ( \(i >= MAXUNAMES\))o n
( )o setg (continue)o setn (;)o n
( })o n
n
( )o seti (/* compute the device name */)o setn n
( p = "/dev/12345678";)o n
( strncpy\(&p[5], ut.ut_line, UNAMESZ\);)o n
n
( )o seti (/*)o n
( * Might as well instead of using nonblocking I/O)o n
( * and doing notty\(\).)o n
( */)o setn n
( pid = fork\(\);)o n
seti (/* if \(pid != 0\) {)o n
( while \(\(xpid = wait\(&wstat\)\) != pid\) {)o n
( if \(xpid == -1\))o n
( break;)o n
( })o n
( } else)o n
(*/)o setn ( )o setg (if)o setn ( \(pid == 0\) {)o n
( )o setg (if)o setn ( \(f->f_type == F_WALL\) {)o n
( iov[0].iov_base = greetings;)o n
( iov[0].iov_len = len;)o n
( iov[1].iov_len = 0;)o n
( })o n
( signal\(SIGALRM, SIG_DFL\);)o n
( alarm\(30\);)o n
( )o seti (/* open the terminal */)o setn n
( ttyf = open\(p, O_WRONLY\);)o n
( )o setg (if)o setn ( \(ttyf >= 0\))o n
( writev\(ttyf, iov, 6\);)o n
( exit\(0\);)o n
( })o n
( })o n
( )o seti (/* close the user login file */)o setn n
( fclose\(uf\);)o n
( )o setg (while)o setn ( \(\(xpid = wait\(&wstat\)\) != -1\) ;)o n
( reenter = 0;)o n
(})o n
n
n
(domark\(\))o n
({)o n
( )o setg (int)o setn ( pri;)o n
n
( )o setg (if)o setn ( \(\(++MarkSeq % MARKCOUNT\) == 0\))o n
( logmsg\(LOG_INFO, "-- MARK --", LocalHostName, ADDDATE|MARK\);)o n
( )o setg (else)o setn n
( flushmsg\(\);)o n
( signal\(SIGALRM, \()o setg (void)o setn ( *\) domark\);)o n
( alarm\(MarkInterval * 60 / MARKCOUNT\);)o n
(})o n
n
(flushmsg\(\))o n
({)o n
( )o setg (if)o setn ( \(PrevCount == 0\))o n
( )o setg (return)o setn (;)o n
( )o setg (if)o setn ( \(PrevCount > 1\))o n
( sprintf\(PrevLine+16, "last message repeated %d times", PrevCount\);)o n
( PrevCount = 0;)o n
( logmsg\(PrevPri, PrevLine, PrevHost, PrevFlags|NOCOPY\);)o n
( PrevLine[0] = '\\0';)o n
(})o n
n
seti (/*)o n
( * Print syslogd errors some place.)o n
( */)o setn n
(logerror\(type\))o n
( )o setg (char)o setn ( *type;)o n
({)o n
( )o setg (char)o setn ( buf[100];)o n
n
( )o setg (if)o setn ( \(errno == 0\))o n
( sprintf\(buf, "syslogd: %s", type\);)o n
( )o setg (else)o setn ( )o setg (if)o setn ( \(\()o setg (unsigned)o setn (\)
errno > sys_nerr\))o n
( sprintf\(buf, "syslogd: %s: error %d", type, errno\);)o n
( )o setg (else)o setn n
( sprintf\(buf, "syslogd: %s: %s", type, sys_errlist[errno]\);)o n
( errno = 0;)o n
( dprintf\("%s\\n", buf\);)o n
( logmsg\(LOG_SYSLOG|LOG_ERR, buf, LocalHostName, ADDDATE\);)o n
(})o n
n
(die\(sig\))o n
({)o n
( )o setg (char)o setn ( buf[100];)o n
n
( )o setg (if)o setn ( \(sig\) {)o n
( dprintf\("syslogd: going down on signal %d\\n", sig\);)o n
( flushmsg\(\);)o n
( sprintf\(buf, "going down on signal %d", sig\);)o n
( logerror\(buf\);)o n
( })o n
( unlink\(LogName\);)o n
( exit\(0\);)o n
(})o n
n
seti (/*)o n
( * INIT -- Initialize syslogd from configuration table)o n
( */)o setn n
n
(init\(\))o n
({)o n
( )o setg (register)o setn ( )o setg (int)o setn ( i;)o n
( )o setg (register)o setn ( FILE *cf;)o n
( )o setg (register)o setn ( )o setg (struct)o setn ( filed *f;)o n
( )o setg (register)o setn ( )o setg (char)o setn ( *p;)o n
( )o setg (char)o setn ( cline[BUFSIZ];)o n
n
( dprintf\("init\\n"\);)o n
n
( )o seti (/* flush any pending output */)o setn n
( flushmsg\(\);)o n
n
( )o seti (/*)o n
( * Close all open log files.)o n
( */)o setn n
( )o setg (for)o setn ( \(f = Files; f < &Files[NLOGS]; f++\) {)o n
( )o setg (if)o setn ( \(f->f_type == F_FILE || f->f_type == F_TTY\))o n
( close\(f->f_file\);)o n
( f->f_type = F_UNUSED;)o n
( })o n
n
( )o seti (/* open the configuration file */)o setn n
( )o setg (if)o setn ( \(\(cf = fopen\(ConfFile, "r"\)\) == NULL\) {)o n
( dprintf\("cannot open %s\\n", ConfFile\);)o n
( cfline\("*.ERR\\t/dev/tty0", &Files[0]\);)o n
( cfline\("*.PANIC\\t*", &Files[1]\);)o n
( )o setg (return)o setn (;)o n
( })o n
n
( )o seti (/*)o n
( * Foreach line in the conf table, open that file.)o n
( */)o setn n
( f = Files;)o n
( )o setg (while)o setn ( \(fgets\(cline, )o setg (sizeof)o setn ( cline, cf\) !
= NULL && f < &Files[NLOGS]\) {)o n
( )o seti (/* check for end-of-section */)o setn n
( )o setg (if)o setn ( \(cline[0] == '\\n' || cline[0] == '#'\))o n
( )o setg (continue)o setn (;)o n
n
( )o seti (/* strip off newline character */)o setn n
( p = index\(cline, '\\n'\);)o n
( )o setg (if)o setn ( \(p\))o n
( *p = '\\0';)o n
n
( cfline\(cline, f++\);)o n
( })o n
n
( )o seti (/* close the configuration file */)o setn n
( fclose\(cf\);)o n
n
( Initialized = 1;)o n
n
( )o setg (if)o setn ( \(Debug\) {)o n
( )o setg (for)o setn ( \(f = Files; f < &Files[NLOGS]; f++\) {)o n
( )o setg (for)o setn ( \(i = 0; i <= LOG_NFACILITIES; i++\))o n
( )o setg (if)o setn ( \(f->f_pmask[i] == NOPRI\))o n
( printf\("X "\);)o n
( )o setg (else)o setn n
( printf\("%d ", f->f_pmask[i]\);)o n
( printf\("%s: ", TypeNames[f->f_type]\);)o n
( )o setg (switch)o setn ( \(f->f_type\) {)o n
( )o setg (case)o setn ( F_FILE:)o n
( )o setg (case)o setn ( F_TTY:)o n
( )o setg (case)o setn ( F_CONSOLE:)o n
( printf\("%s", f->f_un.f_fname\);)o n
( )o setg (break)o setn (;)o n
n
( )o setg (case)o setn ( F_FORW:)o n
( )o setg (break)o setn (;)o n
n
( )o setg (case)o setn ( F_USERS:)o n
( )o setg (for)o setn ( \(i = 0; i < MAXUNAMES && *f-
>f_un.f_uname[i]; i++\))o n
( printf\("%s, ", f->f_un.f_uname[i]\);)o n
( )o setg (break)o setn (;)o n
( })o n
( printf\("\\n"\);)o n
( })o n
( })o n
n
( logmsg\(LOG_SYSLOG|LOG_INFO, "syslogd: restart", LocalHostName, ADDDATE\);)o n
( dprintf\("syslogd: restarted\\n"\);)o n
(})o n
n
seti (/*)o n
( * Crack a configuration file line)o n
( */)o setn n
n
setg (struct)o setn ( code {)o n
( )o setg (char)o setn ( *c_name;)o n
( )o setg (int)o setn ( c_val;)o n
(};)o n
n
setg (struct)o setn ( code PriNames[] = {)o n
( "panic", LOG_EMERG,)o n
( "emerg", LOG_EMERG,)o n
( "alert", LOG_ALERT,)o n
( "crit", LOG_CRIT,)o n
( "err", LOG_ERR,)o n
( "error", LOG_ERR,)o n
( "warn", LOG_WARNING,)o n
( "warning", LOG_WARNING,)o n
( "notice", LOG_NOTICE,)o n
( "info", LOG_INFO,)o n
( "debug", LOG_DEBUG,)o n
( "none", NOPRI,)o n
( NULL, -1)o n
(};)o n
n
setg (struct)o setn ( code FacNames[] = {)o n
( "kern", LOG_KERN,)o n
( "user", LOG_USER,)o n
( "mail", LOG_MAIL,)o n
( "daemon", LOG_DAEMON,)o n
( "auth", LOG_AUTH,)o n
( "security", LOG_AUTH,)o n
( "mark", LOG_MARK,)o n
( "syslog", LOG_SYSLOG,)o n
( "lpr", LOG_LPR,)o n
( "local0", LOG_LOCAL0,)o n
( "local1", LOG_LOCAL1,)o n
( "local2", LOG_LOCAL2,)o n
( "local3", LOG_LOCAL3,)o n
( "local4", LOG_LOCAL4,)o n
( "local5", LOG_LOCAL5,)o n
( "local6", LOG_LOCAL6,)o n
( "local7", LOG_LOCAL7,)o n
( NULL, -1)o n
(};)o n
n
(cfline\(line, f\))o n
( )o setg (char)o setn ( *line;)o n
( )o setg (register)o setn ( )o setg (struct)o setn ( filed *f;)o n
({)o n
( )o setg (register)o setn ( )o setg (char)o setn ( *p;)o n
( )o setg (register)o setn ( )o setg (char)o setn ( *q;)o n
( )o setg (register)o setn ( )o setg (int)o setn ( i;)o n
( )o setg (char)o setn ( *bp;)o n
( )o setg (int)o setn ( pri;)o n
( )o setg (struct)o setn ( hostent *hp;)o n
( )o setg (char)o setn ( buf[MAXLINE];)o n
n
( dprintf\("cfline\(%s\)\\n", line\);)o n
n
( )o seti (/* clear out file entry */)o setn n
( bzero\(\()o setg (char)o setn ( *\) f, )o setg (sizeof)o setn ( *f\);)o n
( )o setg (for)o setn ( \(i = 0; i <= LOG_NFACILITIES; i++\))o n
( f->f_pmask[i] = NOPRI;)o n
n
( )o seti (/* scan through the list of selectors */)o setn n
( )o setg (for)o setn ( \(p = line; *p && *p != '\\t';\) {)o n
n
( )o seti (/* find the end of this facility name list */)o setn n
( )o setg (for)o setn ( \(q = p; *q && *q != '\\t' && *q++ != '.'; \))o n
( )o setg (continue)o setn (;)o n
n
( )o seti (/* collect priority name */)o setn n
( )o setg (for)o setn ( \(bp = buf; *q && !index\("\\t,;", *q\); \))o n
( *bp++ = *q++;)o n
( *bp = '\\0';)o n
n
( )o seti (/* skip cruft */)o setn n
( )o setg (while)o setn ( \(index\(", ;", *q\)\))o n
( q++;)o n
n
( )o seti (/* decode priority name */)o setn n
( pri = decode\(buf, PriNames\);)o n
( )o setg (if)o setn ( \(pri < 0\) {)o n
( )o setg (char)o setn ( xbuf[200];)o n
n
( sprintf\(xbuf, "unknown priority name \"%s\"", buf\);)o n
( logerror\(xbuf\);)o n
( )o setg (return)o setn (;)o n
( })o n
n
( )o seti (/* scan facilities */)o setn n
( )o setg (while)o setn ( \(*p && !index\("\\t.;", *p\)\) {)o n
( )o setg (int)o setn ( i;)o n
n
( )o setg (for)o setn ( \(bp = buf; *p && !index\("\\t,;.", *p\); \))o n
( *bp++ = *p++;)o n
( *bp = '\\0';)o n
( )o setg (if)o setn ( \(*buf == '*'\))o n
( )o setg (for)o setn ( \(i = 0; i < LOG_NFACILITIES; i++\))o n
( f->f_pmask[i] = pri;)o n
( )o setg (else)o setn ( {)o n
( i = decode\(buf, FacNames\);)o n
( )o setg (if)o setn ( \(i < 0\) {)o n
( )o setg (char)o setn ( xbuf[200];)o n
n
( sprintf\(xbuf, "unknown facility name \"%s\"", buf\);)o n
( logerror\(xbuf\);)o n
( )o setg (return)o setn (;)o n
( })o n
( f->f_pmask[i >> 3] = pri;)o n
( })o n
( )o setg (while)o setn ( \(*p == ',' || *p == ' '\))o n
( p++;)o n
( })o n
n
( p = q;)o n
( })o n
n
( )o seti (/* skip to action part */)o setn n
( )o setg (while)o setn ( \(*p == '\\t'\))o n
( p++;)o n
n
(fprintf\(stderr, "syslogd: cfline on %s\\n", p\);)o n
n
( )o setg (switch)o setn ( \(*p\))o n
( {)o n
( )o setg (case)o setn ( '@':)o n
( )o setg (if)o setn ( \(!InetInuse\))o n
( )o setg (break)o setn (;)o n
( strcpy\(f->f_un.f_uname, ++p\);)o n
n
( f->f_type = F_FORW;)o n
( )o setg (break)o setn (;)o n
n
( )o setg (case)o setn ( '/':)o n
( strcpy\(f->f_un.f_fname, p\);)o n
( )o setg (if)o setn ( \(\(f->f_file = open\(p, O_WRONLY|O_APPEND\)\) < 0\)
{)o n
( logerror\(p\);)o n
( )o setg (break)o setn (;)o n
( })o n
n
( )o setg (if)o setn ( \(isatty\(f->f_file\)\) {)o n
( f->f_type = F_TTY;)o n
( untty\(\);)o n
( })o n
( )o setg (else)o setn n
( f->f_type = F_FILE;)o n
( )o setg (if)o setn ( \(strcmp\(p, ctty\) == 0\))o n
( f->f_type = F_CONSOLE;)o n
( )o setg (break)o setn (;)o n
n
( )o setg (case)o setn ( '*':)o n
( f->f_type = F_WALL;)o n
( )o setg (break)o setn (;)o n
n
( )o setg (default)o setn (:)o n
( )o setg (for)o setn ( \(i = 0; i < MAXUNAMES && *p; i++\) {)o n
( )o setg (for)o setn ( \(q = p; *q && *q != ','; \))o n
( q++;)o n
( strncpy\(f->f_un.f_uname[i], p, UNAMESZ\);)o n
( )o setg (if)o setn ( \(\(q - p\) > UNAMESZ\))o n
( f->f_un.f_uname[i][UNAMESZ] = '\\0';)o n
( )o setg (else)o setn n
( f->f_un.f_uname[i][q - p] = '\\0';)o n
( )o setg (while)o setn ( \(*q == ',' || *q == ' '\))o n
( q++;)o n
( p = q;)o n
( })o n
( f->f_type = F_USERS;)o n
( )o setg (break)o setn (;)o n
( })o n
(})o n
n
n
seti (/*)o n
( * Decode a symbolic name to a numeric value)o n
( */)o setn n
n
(decode\(name, codetab\))o n
( )o setg (char)o setn ( *name;)o n
( )o setg (struct)o setn ( code *codetab;)o n
({)o n
( )o setg (register)o setn ( )o setg (struct)o setn ( code *c;)o n
( )o setg (register)o setn ( )o setg (char)o setn ( *p;)o n
( )o setg (char)o setn ( buf[40];)o n
n
( )o setg (if)o setn ( \(isdigit\(*name\)\))o n
( )o setg (return)o setn ( \(atoi\(name\)\);)o n
n
( strcpy\(buf, name\);)o n
( )o setg (for)o setn ( \(p = buf; *p; p++\))o n
( )o setg (if)o setn ( \(isupper\(*p\)\))o n
( *p = tolower\(*p\);)o n
( )o setg (for)o setn ( \(c = codetab; c->c_name; c++\))o n
( )o setg (if)o setn ( \(!strcmp\(buf, c->c_name\)\))o n
( )o setg (return)o setn ( \(c->c_val\);)o n
n
( )o setg (return)o setn ( \(-1\);)o n
(})o n
n
(readline\(fd, s, size\))o n
setg (int)o setn ( fd;)o n
setg (char)o setn ( *s;)o n
setg (int)o setn ( size;)o n
({)o n
( )o setg (int)o setn ( c, i, j;)o n
( )o setg (static)o setn ( )o setg (long)o setn ( cur_pos;)o n
( )o setg (struct)o setn ( stat st;)o n
n
( fstat\(fd, &st\);)o n
( )o setg (if)o setn ( \(cur_pos < st.st_size\) {)o n
( i = 0; j = 0;)o n
( )o setg (do)o setn ( {)o n
( j = read\(fd, &c, 1\);)o n
( *s++ = c;)o n
( i++;)o n
( } )o setg (while)o setn ( \(j > 0 && c != '\\n'\);)o n
( cur_pos = lseek\(fd, 0L, 1\);)o n
( )o setg (return)o setn (\(i\);)o n
( })o n
( )o setg (return)o setn (\(0\);)o n
(})o n
n
setg (int)o setn n
(recvfrom\(s, buf, buflen, flags, sock, socklen\))o n
setg (int)o setn ( s, buflen, flags;)o n
setg (char)o setn ( *buf;)o n
setg (struct)o setn ( sockaddr *sock;)o n
setg (int)o setn ( *socklen;)o n
({)o n
( )o setg (int)o setn ( i, fd, nfds, cc;)o n
( )o setg (long)o setn ( newmask;)o n
n
( )o seti (/* check for dead connections */)o setn n
n
( )o seti (/* I think this is done below now */)o setn n
n
( )o seti (/* check for data on current connections and return */)o setn n
n
( )o setg (if)o setn ( \(mask | FDMASK\(s\)\) {)o n
( newmask = mask | FDMASK\(s\);)o n
( nfds = select\(20, \(fd_set *\) &newmask, \(fd_set *\) NULL,)o n
( \(fd_set *\) NULL, \()o setg (struct)o setn ( timeval *\) NULL\);)o n
( )o n
( fd = 0;)o n
( )o setg (while)o setn ( \(nfds > 0\) {)o n
( )o seti (/* accept new connection and read data */)o setn n
n
( )o setg (if)o setn ( \(newmask & FDMASK\(s\)\) {)o n
( listen\(s, 5\);)o n
( fd = accept\(s, sock, socklen\);)o n
( )o setg (if)o setn ( \(fd < 0\) {)o n
( )o setg (return)o setn ( -1;)o n
( })o n
( mask |= FDMASK\(fd\);)o n
( fcntl\(fd, F_SETFL, O_NONBLOCK\);)o n
( cc = read\(fd, buf, buflen\);)o n
( )o setg (return)o setn (\(cc\);)o n
( } )o setg (else)o setn ( {)o n
( )o setg (while)o setn ( \(!\(newmask & 1\)\) {)o n
( newmask = newmask >> 1;)o n
( fd++;)o n
( })o n
( cc = read\(fd, buf, buflen\);)o n
( )o setg (if)o setn ( \(cc <= 0\) {)o n
( mask ^= FDMASK\(fd\);)o n
( newmask = newmask >> 1;)o n
( close\(fd\);)o n
( fd++;)o n
( nfds--;)o n
( } )o setg (else)o setn ( {)o n
( )o setg (return)o setn (\(cc\);)o n
( })o n
( })o n
( })o n
( })o n
(})o n

endoffile

Potrebbero piacerti anche