home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume23 / vixie-cron / part03 < prev    next >
SHell self-extracting ARchive  |  1990-10-09  |  31.3 KB

open in: MacOS 8.1     |     Win98     |     DOS

browse contents    |     view JSON data     |     view as text


This file was processed as: SHell self-extracting ARchive (archive/shar).

ConfidenceProgramDetectionMatch TypeSupport
100% dexvert Newsgroup Content (archive/news) magic Supported
100% dexvert SHell self-extracting ARchive (archive/shar) magic Supported
100% dexvert Internet Message Format (text/imf) magic Supported
1% dexvert Text File (text/txt) fallback Supported
100% file news or mail, ASCII text default
100% checkBytes Printable ASCII default
100% perlTextCheck Likely Text (Perl) default
100% siegfried fmt/329 Shell Archive Format default
100% detectItEasy Format: plain text[LF] default (weak)
100% xdgMime message/rfc822 default



hex view
+--------+-------------------------+-------------------------+--------+--------+
|00000000| 53 75 62 6a 65 63 74 3a | 20 20 76 32 33 69 30 33 |Subject:| v23i03|
|00000010| 30 3a 20 20 41 20 63 72 | 6f 6e 2f 63 72 6f 6e 74 |0: A cr|on/cront|
|00000020| 61 62 20 72 65 70 6c 61 | 63 65 6d 65 6e 74 2c 20 |ab repla|cement, |
|00000030| 50 61 72 74 30 33 2f 30 | 33 0a 4e 65 77 73 67 72 |Part03/0|3.Newsgr|
|00000040| 6f 75 70 73 3a 20 63 6f | 6d 70 2e 73 6f 75 72 63 |oups: co|mp.sourc|
|00000050| 65 73 2e 75 6e 69 78 0a | 41 70 70 72 6f 76 65 64 |es.unix.|Approved|
|00000060| 3a 20 72 73 61 6c 7a 40 | 75 75 6e 65 74 2e 55 55 |: rsalz@|uunet.UU|
|00000070| 2e 4e 45 54 0a 58 2d 43 | 68 65 63 6b 73 75 6d 2d |.NET.X-C|hecksum-|
|00000080| 53 6e 65 66 72 75 3a 20 | 62 33 38 39 32 37 37 62 |Snefru: |b389277b|
|00000090| 20 30 63 62 62 33 34 34 | 61 20 38 66 36 38 34 33 | 0cbb344|a 8f6843|
|000000a0| 32 62 20 30 65 61 36 38 | 64 65 37 0a 0a 53 75 62 |2b 0ea68|de7..Sub|
|000000b0| 6d 69 74 74 65 64 2d 62 | 79 3a 20 50 61 75 6c 20 |mitted-b|y: Paul |
|000000c0| 41 20 56 69 78 69 65 20 | 3c 76 69 78 69 65 40 76 |A Vixie |<vixie@v|
|000000d0| 69 78 69 65 2e 73 66 2e | 63 61 2e 75 73 3e 0a 50 |ixie.sf.|ca.us>.P|
|000000e0| 6f 73 74 69 6e 67 2d 6e | 75 6d 62 65 72 3a 20 56 |osting-n|umber: V|
|000000f0| 6f 6c 75 6d 65 20 32 33 | 2c 20 49 73 73 75 65 20 |olume 23|, Issue |
|00000100| 33 30 0a 41 72 63 68 69 | 76 65 2d 6e 61 6d 65 3a |30.Archi|ve-name:|
|00000110| 20 76 69 78 69 65 2d 63 | 72 6f 6e 2f 70 61 72 74 | vixie-c|ron/part|
|00000120| 30 33 0a 0a 23 21 20 2f | 62 69 6e 2f 73 68 0a 23 |03..#! /|bin/sh.#|
|00000130| 20 54 68 69 73 20 69 73 | 20 61 20 73 68 65 6c 6c | This is| a shell|
|00000140| 20 61 72 63 68 69 76 65 | 2e 20 20 52 65 6d 6f 76 | archive|. Remov|
|00000150| 65 20 61 6e 79 74 68 69 | 6e 67 20 62 65 66 6f 72 |e anythi|ng befor|
|00000160| 65 20 74 68 69 73 20 6c | 69 6e 65 2c 20 74 68 65 |e this l|ine, the|
|00000170| 6e 20 75 6e 70 61 63 6b | 0a 23 20 69 74 20 62 79 |n unpack|.# it by|
|00000180| 20 73 61 76 69 6e 67 20 | 69 74 20 69 6e 74 6f 20 | saving |it into |
|00000190| 61 20 66 69 6c 65 20 61 | 6e 64 20 74 79 70 69 6e |a file a|nd typin|
|000001a0| 67 20 22 73 68 20 66 69 | 6c 65 22 2e 20 20 54 6f |g "sh fi|le". To|
|000001b0| 20 6f 76 65 72 77 72 69 | 74 65 20 65 78 69 73 74 | overwri|te exist|
|000001c0| 69 6e 67 0a 23 20 66 69 | 6c 65 73 2c 20 74 79 70 |ing.# fi|les, typ|
|000001d0| 65 20 22 73 68 20 66 69 | 6c 65 20 2d 63 22 2e 20 |e "sh fi|le -c". |
|000001e0| 20 59 6f 75 20 63 61 6e | 20 61 6c 73 6f 20 66 65 | You can| also fe|
|000001f0| 65 64 20 74 68 69 73 20 | 61 73 20 73 74 61 6e 64 |ed this |as stand|
|00000200| 61 72 64 20 69 6e 70 75 | 74 20 76 69 61 0a 23 20 |ard inpu|t via.# |
|00000210| 75 6e 73 68 61 72 2c 20 | 6f 72 20 62 79 20 74 79 |unshar, |or by ty|
|00000220| 70 69 6e 67 20 22 73 68 | 20 3c 66 69 6c 65 22 2c |ping "sh| <file",|
|00000230| 20 65 2e 67 2e 2e 20 20 | 49 66 20 74 68 69 73 20 | e.g.. |If this |
|00000240| 61 72 63 68 69 76 65 20 | 69 73 20 63 6f 6d 70 6c |archive |is compl|
|00000250| 65 74 65 2c 20 79 6f 75 | 0a 23 20 77 69 6c 6c 20 |ete, you|.# will |
|00000260| 73 65 65 20 74 68 65 20 | 66 6f 6c 6c 6f 77 69 6e |see the |followin|
|00000270| 67 20 6d 65 73 73 61 67 | 65 20 61 74 20 74 68 65 |g messag|e at the|
|00000280| 20 65 6e 64 3a 0a 23 09 | 09 22 45 6e 64 20 6f 66 | end:.#.|."End of|
|00000290| 20 61 72 63 68 69 76 65 | 20 33 20 28 6f 66 20 33 | archive| 3 (of 3|
|000002a0| 29 2e 22 0a 23 20 43 6f | 6e 74 65 6e 74 73 3a 20 |).".# Co|ntents: |
|000002b0| 20 64 6f 5f 63 6f 6d 6d | 61 6e 64 2e 63 20 6d 69 | do_comm|and.c mi|
|000002c0| 73 63 2e 63 0a 23 20 57 | 72 61 70 70 65 64 20 62 |sc.c.# W|rapped b|
|000002d0| 79 20 76 69 78 69 65 40 | 76 6f 6c 69 74 69 6f 6e |y vixie@|volition|
|000002e0| 2e 70 61 2e 64 65 63 2e | 63 6f 6d 20 6f 6e 20 57 |.pa.dec.|com on W|
|000002f0| 65 64 20 4a 75 6c 20 31 | 38 20 30 30 3a 33 32 3a |ed Jul 1|8 00:32:|
|00000300| 34 39 20 31 39 39 30 0a | 50 41 54 48 3d 2f 62 69 |49 1990.|PATH=/bi|
|00000310| 6e 3a 2f 75 73 72 2f 62 | 69 6e 3a 2f 75 73 72 2f |n:/usr/b|in:/usr/|
|00000320| 75 63 62 20 3b 20 65 78 | 70 6f 72 74 20 50 41 54 |ucb ; ex|port PAT|
|00000330| 48 0a 69 66 20 74 65 73 | 74 20 2d 66 20 27 64 6f |H.if tes|t -f 'do|
|00000340| 5f 63 6f 6d 6d 61 6e 64 | 2e 63 27 20 2d 61 20 22 |_command|.c' -a "|
|00000350| 24 7b 31 7d 22 20 21 3d | 20 22 2d 63 22 20 3b 20 |${1}" !=| "-c" ; |
|00000360| 74 68 65 6e 20 0a 20 20 | 65 63 68 6f 20 73 68 61 |then . |echo sha|
|00000370| 72 3a 20 57 69 6c 6c 20 | 6e 6f 74 20 63 6c 6f 62 |r: Will |not clob|
|00000380| 62 65 72 20 65 78 69 73 | 74 69 6e 67 20 66 69 6c |ber exis|ting fil|
|00000390| 65 20 5c 22 27 64 6f 5f | 63 6f 6d 6d 61 6e 64 2e |e \"'do_|command.|
|000003a0| 63 27 5c 22 0a 65 6c 73 | 65 0a 65 63 68 6f 20 73 |c'\".els|e.echo s|
|000003b0| 68 61 72 3a 20 45 78 74 | 72 61 63 74 69 6e 67 20 |har: Ext|racting |
|000003c0| 5c 22 27 64 6f 5f 63 6f | 6d 6d 61 6e 64 2e 63 27 |\"'do_co|mmand.c'|
|000003d0| 5c 22 20 5c 28 31 34 39 | 36 31 20 63 68 61 72 61 |\" \(149|61 chara|
|000003e0| 63 74 65 72 73 5c 29 0a | 73 65 64 20 22 73 2f 5e |cters\).|sed "s/^|
|000003f0| 58 2f 2f 22 20 3e 27 64 | 6f 5f 63 6f 6d 6d 61 6e |X//" >'d|o_comman|
|00000400| 64 2e 63 27 20 3c 3c 27 | 45 4e 44 5f 4f 46 5f 46 |d.c' <<'|END_OF_F|
|00000410| 49 4c 45 27 0a 58 23 69 | 66 20 21 64 65 66 69 6e |ILE'.X#i|f !defin|
|00000420| 65 64 28 6c 69 6e 74 29 | 20 26 26 20 21 64 65 66 |ed(lint)| && !def|
|00000430| 69 6e 65 64 28 4c 49 4e | 54 29 0a 73 74 61 74 69 |ined(LIN|T).stati|
|00000440| 63 20 63 68 61 72 20 72 | 63 73 69 64 5b 5d 20 3d |c char r|csid[] =|
|00000450| 20 22 24 48 65 61 64 65 | 72 3a 20 64 6f 5f 63 6f | "$Heade|r: do_co|
|00000460| 6d 6d 61 6e 64 2e 63 2c | 76 20 32 2e 31 20 39 30 |mmand.c,|v 2.1 90|
|00000470| 2f 30 37 2f 31 38 20 30 | 30 3a 32 33 3a 33 38 20 |/07/18 0|0:23:38 |
|00000480| 76 69 78 69 65 20 45 78 | 70 20 24 22 3b 0a 58 23 |vixie Ex|p $";.X#|
|00000490| 65 6e 64 69 66 0a 58 0a | 58 2f 2a 20 24 53 6f 75 |endif.X.|X/* $Sou|
|000004a0| 72 63 65 3a 20 2f 6a 6f | 76 65 5f 75 33 2f 76 69 |rce: /jo|ve_u3/vi|
|000004b0| 78 69 65 2f 73 72 63 2f | 63 72 6f 6e 2f 52 43 53 |xie/src/|cron/RCS|
|000004c0| 2f 64 6f 5f 63 6f 6d 6d | 61 6e 64 2e 63 2c 76 20 |/do_comm|and.c,v |
|000004d0| 24 0a 58 20 2a 20 24 52 | 65 76 69 73 69 6f 6e 3a |$.X * $R|evision:|
|000004e0| 20 32 2e 31 20 24 0a 58 | 20 2a 20 24 4c 6f 67 3a | 2.1 $.X| * $Log:|
|000004f0| 09 64 6f 5f 63 6f 6d 6d | 61 6e 64 2e 63 2c 76 20 |.do_comm|and.c,v |
|00000500| 24 0a 58 20 2a 20 52 65 | 76 69 73 69 6f 6e 20 32 |$.X * Re|vision 2|
|00000510| 2e 31 20 20 39 30 2f 30 | 37 2f 31 38 20 20 30 30 |.1 90/0|7/18 00|
|00000520| 3a 32 33 3a 33 38 20 20 | 76 69 78 69 65 0a 58 20 |:23:38 |vixie.X |
|00000530| 2a 20 42 61 73 65 6c 69 | 6e 65 20 66 6f 72 20 34 |* Baseli|ne for 4|
|00000540| 2e 34 42 53 44 20 72 65 | 6c 65 61 73 65 0a 58 20 |.4BSD re|lease.X |
|00000550| 2a 20 0a 58 20 2a 20 52 | 65 76 69 73 69 6f 6e 20 |* .X * R|evision |
|00000560| 32 2e 30 20 20 38 38 2f | 31 32 2f 31 30 20 20 30 |2.0 88/|12/10 0|
|00000570| 34 3a 35 37 3a 34 34 20 | 20 76 69 78 69 65 0a 58 |4:57:44 | vixie.X|
|00000580| 20 2a 20 56 32 20 42 65 | 74 61 0a 58 20 2a 20 0a | * V2 Be|ta.X * .|
|00000590| 58 20 2a 20 52 65 76 69 | 73 69 6f 6e 20 31 2e 35 |X * Revi|sion 1.5|
|000005a0| 20 20 38 38 2f 31 31 2f | 32 39 20 20 31 33 3a 30 | 88/11/|29 13:0|
|000005b0| 36 3a 30 36 20 20 76 69 | 78 69 65 0a 58 20 2a 20 |6:06 vi|xie.X * |
|000005c0| 73 65 65 6d 73 20 74 6f | 20 77 6f 72 6b 20 6f 6e |seems to| work on|
|000005d0| 20 55 6c 74 72 69 78 20 | 33 2e 30 20 46 54 31 0a | Ultrix |3.0 FT1.|
|000005e0| 58 20 2a 20 0a 58 20 2a | 20 52 65 76 69 73 69 6f |X * .X *| Revisio|
|000005f0| 6e 20 31 2e 34 20 20 38 | 37 2f 30 35 2f 30 32 20 |n 1.4 8|7/05/02 |
|00000600| 20 31 37 3a 33 33 3a 33 | 35 20 20 70 61 75 6c 0a | 17:33:3|5 paul.|
|00000610| 58 20 2a 20 62 61 73 65 | 6c 69 6e 65 20 66 6f 72 |X * base|line for|
|00000620| 20 6d 6f 64 2e 73 6f 75 | 72 63 65 73 20 72 65 6c | mod.sou|rces rel|
|00000630| 65 61 73 65 0a 58 20 2a | 20 0a 58 20 2a 20 52 65 |ease.X *| .X * Re|
|00000640| 76 69 73 69 6f 6e 20 31 | 2e 33 20 20 38 37 2f 30 |vision 1|.3 87/0|
|00000650| 34 2f 30 39 20 20 30 30 | 3a 30 33 3a 35 38 20 20 |4/09 00|:03:58 |
|00000660| 70 61 75 6c 0a 58 20 2a | 20 69 6d 70 72 6f 76 65 |paul.X *| improve|
|00000670| 64 20 64 61 74 61 20 68 | 69 64 69 6e 67 2c 20 6c |d data h|iding, l|
|00000680| 6f 63 61 6c 69 74 79 20 | 6f 66 20 64 65 63 6c 61 |ocality |of decla|
|00000690| 72 61 74 69 6f 6e 2f 72 | 65 66 65 72 65 6e 63 65 |ration/r|eference|
|000006a0| 73 0a 58 20 2a 20 66 69 | 78 65 64 20 61 20 72 73 |s.X * fi|xed a rs|
|000006b0| 40 6d 69 72 72 6f 72 20 | 62 75 67 20 62 79 20 72 |@mirror |bug by r|
|000006c0| 65 64 65 73 69 67 6e 69 | 6e 67 20 74 68 65 20 6d |edesigni|ng the m|
|000006d0| 61 69 6c 74 6f 20 73 74 | 75 66 66 20 63 6f 6d 70 |ailto st|uff comp|
|000006e0| 6c 65 74 65 6c 79 0a 58 | 20 2a 20 0a 58 20 2a 20 |letely.X| * .X * |
|000006f0| 52 65 76 69 73 69 6f 6e | 20 31 2e 32 20 20 38 37 |Revision| 1.2 87|
|00000700| 2f 30 33 2f 31 39 20 20 | 31 32 3a 34 36 3a 32 34 |/03/19 |12:46:24|
|00000710| 20 20 70 61 75 6c 0a 58 | 20 2a 20 69 6d 70 6c 65 | paul.X| * imple|
|00000720| 6d 65 6e 74 65 64 20 73 | 75 67 67 65 73 74 69 6f |mented s|uggestio|
|00000730| 6e 73 20 66 72 6f 6d 20 | 72 73 40 6d 69 72 72 6f |ns from |rs@mirro|
|00000740| 72 20 28 52 69 63 68 20 | 24 61 6c 7a 29 3a 0a 58 |r (Rich |$alz):.X|
|00000750| 20 2a 20 20 20 20 4d 41 | 49 4c 54 4f 3d 22 22 20 | * MA|ILTO="" |
|00000760| 6d 65 61 6e 73 20 6e 6f | 20 6d 61 69 6c 20 73 68 |means no| mail sh|
|00000770| 6f 75 6c 64 20 62 65 20 | 73 65 6e 74 0a 58 20 2a |ould be |sent.X *|
|00000780| 20 20 20 20 76 61 72 69 | 6f 75 73 20 66 69 78 65 | vari|ous fixe|
|00000790| 73 20 6f 66 20 62 75 67 | 73 20 6f 72 20 6c 69 6e |s of bug|s or lin|
|000007a0| 74 20 63 6f 6d 70 6c 61 | 69 6e 74 73 0a 58 20 2a |t compla|ints.X *|
|000007b0| 20 20 20 20 70 75 74 20 | 61 20 54 6f 3a 20 6c 69 | put |a To: li|
|000007c0| 6e 65 20 69 6e 20 74 68 | 65 20 6d 61 69 6c 20 6d |ne in th|e mail m|
|000007d0| 65 73 73 61 67 65 0a 58 | 20 2a 20 0a 58 20 2a 20 |essage.X| * .X * |
|000007e0| 52 65 76 69 73 69 6f 6e | 20 31 2e 31 20 20 38 37 |Revision| 1.1 87|
|000007f0| 2f 30 31 2f 32 36 20 20 | 32 33 3a 34 37 3a 30 30 |/01/26 |23:47:00|
|00000800| 20 20 70 61 75 6c 0a 58 | 20 2a 20 49 6e 69 74 69 | paul.X| * Initi|
|00000810| 61 6c 20 72 65 76 69 73 | 69 6f 6e 0a 58 20 2a 2f |al revis|ion.X */|
|00000820| 0a 58 0a 58 2f 2a 20 43 | 6f 70 79 72 69 67 68 74 |.X.X/* C|opyright|
|00000830| 20 31 39 38 38 2c 31 39 | 39 30 20 62 79 20 50 61 | 1988,19|90 by Pa|
|00000840| 75 6c 20 56 69 78 69 65 | 0a 58 20 2a 20 41 6c 6c |ul Vixie|.X * All|
|00000850| 20 72 69 67 68 74 73 20 | 72 65 73 65 72 76 65 64 | rights |reserved|
|00000860| 0a 58 20 2a 0a 58 20 2a | 20 44 69 73 74 72 69 62 |.X *.X *| Distrib|
|00000870| 75 74 65 20 66 72 65 65 | 6c 79 2c 20 65 78 63 65 |ute free|ly, exce|
|00000880| 70 74 3a 20 64 6f 6e 27 | 74 20 72 65 6d 6f 76 65 |pt: don'|t remove|
|00000890| 20 6d 79 20 6e 61 6d 65 | 20 66 72 6f 6d 20 74 68 | my name| from th|
|000008a0| 65 20 73 6f 75 72 63 65 | 20 6f 72 0a 58 20 2a 20 |e source| or.X * |
|000008b0| 64 6f 63 75 6d 65 6e 74 | 61 74 69 6f 6e 20 28 64 |document|ation (d|
|000008c0| 6f 6e 27 74 20 74 61 6b | 65 20 63 72 65 64 69 74 |on't tak|e credit|
|000008d0| 20 66 6f 72 20 6d 79 20 | 77 6f 72 6b 29 2c 20 6d | for my |work), m|
|000008e0| 61 72 6b 20 79 6f 75 72 | 20 63 68 61 6e 67 65 73 |ark your| changes|
|000008f0| 20 28 64 6f 6e 27 74 0a | 58 20 2a 20 67 65 74 20 | (don't.|X * get |
|00000900| 6d 65 20 62 6c 61 6d 65 | 64 20 66 6f 72 20 79 6f |me blame|d for yo|
|00000910| 75 72 20 70 6f 73 73 69 | 62 6c 65 20 62 75 67 73 |ur possi|ble bugs|
|00000920| 29 2c 20 64 6f 6e 27 74 | 20 61 6c 74 65 72 20 6f |), don't| alter o|
|00000930| 72 20 72 65 6d 6f 76 65 | 20 74 68 69 73 0a 58 20 |r remove| this.X |
|00000940| 2a 20 6e 6f 74 69 63 65 | 2e 20 20 4d 61 79 20 62 |* notice|. May b|
|00000950| 65 20 73 6f 6c 64 20 69 | 66 20 62 75 69 6c 64 61 |e sold i|f builda|
|00000960| 62 6c 65 20 73 6f 75 72 | 63 65 20 69 73 20 70 72 |ble sour|ce is pr|
|00000970| 6f 76 69 64 65 64 20 74 | 6f 20 62 75 79 65 72 2e |ovided t|o buyer.|
|00000980| 20 20 4e 6f 0a 58 20 2a | 20 77 61 72 72 61 6e 74 | No.X *| warrant|
|00000990| 65 65 20 6f 66 20 61 6e | 79 20 6b 69 6e 64 2c 20 |ee of an|y kind, |
|000009a0| 65 78 70 72 65 73 73 20 | 6f 72 20 69 6d 70 6c 69 |express |or impli|
|000009b0| 65 64 2c 20 69 73 20 69 | 6e 63 6c 75 64 65 64 20 |ed, is i|ncluded |
|000009c0| 77 69 74 68 20 74 68 69 | 73 0a 58 20 2a 20 73 6f |with thi|s.X * so|
|000009d0| 66 74 77 61 72 65 3b 20 | 75 73 65 20 61 74 20 79 |ftware; |use at y|
|000009e0| 6f 75 72 20 6f 77 6e 20 | 72 69 73 6b 2c 20 72 65 |our own |risk, re|
|000009f0| 73 70 6f 6e 73 69 62 69 | 6c 69 74 79 20 66 6f 72 |sponsibi|lity for|
|00000a00| 20 64 61 6d 61 67 65 73 | 20 28 69 66 20 61 6e 79 | damages| (if any|
|00000a10| 29 20 74 6f 0a 58 20 2a | 20 61 6e 79 6f 6e 65 20 |) to.X *| anyone |
|00000a20| 72 65 73 75 6c 74 69 6e | 67 20 66 72 6f 6d 20 74 |resultin|g from t|
|00000a30| 68 65 20 75 73 65 20 6f | 66 20 74 68 69 73 20 73 |he use o|f this s|
|00000a40| 6f 66 74 77 61 72 65 20 | 72 65 73 74 73 20 65 6e |oftware |rests en|
|00000a50| 74 69 72 65 6c 79 20 77 | 69 74 68 20 74 68 65 0a |tirely w|ith the.|
|00000a60| 58 20 2a 20 75 73 65 72 | 2e 0a 58 20 2a 0a 58 20 |X * user|..X *.X |
|00000a70| 2a 20 53 65 6e 64 20 62 | 75 67 20 72 65 70 6f 72 |* Send b|ug repor|
|00000a80| 74 73 2c 20 62 75 67 20 | 66 69 78 65 73 2c 20 65 |ts, bug |fixes, e|
|00000a90| 6e 68 61 6e 63 65 6d 65 | 6e 74 73 2c 20 72 65 71 |nhanceme|nts, req|
|00000aa0| 75 65 73 74 73 2c 20 66 | 6c 61 6d 65 73 2c 20 65 |uests, f|lames, e|
|00000ab0| 74 63 2e 2c 20 61 6e 64 | 0a 58 20 2a 20 49 27 6c |tc., and|.X * I'l|
|00000ac0| 6c 20 74 72 79 20 74 6f | 20 6b 65 65 70 20 61 20 |l try to| keep a |
|00000ad0| 76 65 72 73 69 6f 6e 20 | 75 70 20 74 6f 20 64 61 |version |up to da|
|00000ae0| 74 65 2e 20 20 49 20 63 | 61 6e 20 62 65 20 72 65 |te. I c|an be re|
|00000af0| 61 63 68 65 64 20 61 73 | 20 66 6f 6c 6c 6f 77 73 |ached as| follows|
|00000b00| 3a 0a 58 20 2a 20 50 61 | 75 6c 20 56 69 78 69 65 |:.X * Pa|ul Vixie|
|00000b10| 2c 20 33 32 39 20 4e 6f | 65 20 53 74 72 65 65 74 |, 329 No|e Street|
|00000b20| 2c 20 53 61 6e 20 46 72 | 61 6e 63 69 73 63 6f 2c |, San Fr|ancisco,|
|00000b30| 20 43 41 2c 20 39 34 31 | 31 34 2c 20 28 34 31 35 | CA, 941|14, (415|
|00000b40| 29 20 38 36 34 2d 37 30 | 31 33 2c 0a 58 20 2a 20 |) 864-70|13,.X * |
|00000b50| 70 61 75 6c 40 76 69 78 | 69 65 2e 73 66 2e 63 61 |paul@vix|ie.sf.ca|
|00000b60| 2e 75 73 20 7c 7c 20 7b | 68 6f 70 74 6f 61 64 2c |.us || {|hoptoad,|
|00000b70| 70 61 63 62 65 6c 6c 2c | 64 65 63 77 72 6c 2c 63 |pacbell,|decwrl,c|
|00000b80| 72 61 73 68 7d 21 76 69 | 78 69 65 21 70 61 75 6c |rash}!vi|xie!paul|
|00000b90| 0a 58 20 2a 2f 0a 58 0a | 58 0a 58 23 69 6e 63 6c |.X */.X.|X.X#incl|
|00000ba0| 75 64 65 20 22 63 72 6f | 6e 2e 68 22 0a 58 23 69 |ude "cro|n.h".X#i|
|00000bb0| 6e 63 6c 75 64 65 20 3c | 73 69 67 6e 61 6c 2e 68 |nclude <|signal.h|
|00000bc0| 3e 0a 58 23 69 6e 63 6c | 75 64 65 20 3c 70 77 64 |>.X#incl|ude <pwd|
|00000bd0| 2e 68 3e 0a 58 23 69 66 | 20 64 65 66 69 6e 65 64 |.h>.X#if| defined|
|00000be0| 28 42 53 44 29 0a 58 23 | 20 69 6e 63 6c 75 64 65 |(BSD).X#| include|
|00000bf0| 20 3c 73 79 73 2f 77 61 | 69 74 2e 68 3e 0a 58 23 | <sys/wa|it.h>.X#|
|00000c00| 65 6e 64 69 66 20 2f 2a | 42 53 44 2a 2f 0a 58 23 |endif /*|BSD*/.X#|
|00000c10| 69 66 20 64 65 66 69 6e | 65 64 28 73 65 71 75 65 |if defin|ed(seque|
|00000c20| 6e 74 29 0a 58 23 20 69 | 6e 63 6c 75 64 65 20 3c |nt).X# i|nclude <|
|00000c30| 73 74 72 69 6e 67 73 2e | 68 3e 0a 58 23 20 69 6e |strings.|h>.X# in|
|00000c40| 63 6c 75 64 65 20 3c 73 | 79 73 2f 75 6e 69 76 65 |clude <s|ys/unive|
|00000c50| 72 73 65 2e 68 3e 0a 58 | 23 65 6e 64 69 66 0a 58 |rse.h>.X|#endif.X|
|00000c60| 0a 58 0a 76 6f 69 64 0a | 64 6f 5f 63 6f 6d 6d 61 |.X.void.|do_comma|
|00000c70| 6e 64 28 63 6d 64 2c 20 | 75 29 0a 58 09 63 68 61 |nd(cmd, |u).X.cha|
|00000c80| 72 09 2a 63 6d 64 3b 0a | 58 09 75 73 65 72 09 2a |r.*cmd;.|X.user.*|
|00000c90| 75 3b 0a 58 7b 0a 58 09 | 65 78 74 65 72 6e 20 69 |u;.X{.X.|extern i|
|00000ca0| 6e 74 09 66 6f 72 6b 28 | 29 2c 20 5f 65 78 69 74 |nt.fork(|), _exit|
|00000cb0| 28 29 3b 0a 58 09 65 78 | 74 65 72 6e 20 76 6f 69 |();.X.ex|tern voi|
|00000cc0| 64 09 63 68 69 6c 64 5f | 70 72 6f 63 65 73 73 28 |d.child_|process(|
|00000cd0| 29 2c 20 6c 6f 67 5f 69 | 74 28 29 3b 0a 58 09 65 |), log_i|t();.X.e|
|00000ce0| 78 74 65 72 6e 20 63 68 | 61 72 09 2a 65 6e 76 5f |xtern ch|ar.*env_|
|00000cf0| 67 65 74 28 29 3b 0a 58 | 0a 58 09 44 65 62 75 67 |get();.X|.X.Debug|
|00000d00| 28 44 50 52 4f 43 2c 20 | 28 22 5b 25 64 5d 20 64 |(DPROC, |("[%d] d|
|00000d10| 6f 5f 63 6f 6d 6d 61 6e | 64 28 25 73 2c 20 28 25 |o_comman|d(%s, (%|
|00000d20| 73 2c 25 64 2c 25 64 29 | 29 5c 6e 22 2c 0a 58 09 |s,%d,%d)|)\n",.X.|
|00000d30| 09 67 65 74 70 69 64 28 | 29 2c 20 63 6d 64 2c 20 |.getpid(|), cmd, |
|00000d40| 65 6e 76 5f 67 65 74 28 | 55 53 45 52 45 4e 56 2c |env_get(|USERENV,|
|00000d50| 20 75 2d 3e 65 6e 76 70 | 29 2c 20 75 2d 3e 75 69 | u->envp|), u->ui|
|00000d60| 64 2c 20 75 2d 3e 67 69 | 64 29 29 0a 58 0a 58 09 |d, u->gi|d)).X.X.|
|00000d70| 2f 2a 20 66 6f 72 6b 20 | 74 6f 20 62 65 63 6f 6d |/* fork |to becom|
|00000d80| 65 20 61 73 79 6e 63 68 | 72 6f 6e 6f 75 73 20 2d |e asynch|ronous -|
|00000d90| 2d 20 70 61 72 65 6e 74 | 20 70 72 6f 63 65 73 73 |- parent| process|
|00000da0| 20 69 73 20 64 6f 6e 65 | 20 69 6d 6d 65 64 69 61 | is done| immedia|
|00000db0| 74 65 6c 79 2c 0a 58 09 | 20 2a 20 61 6e 64 20 63 |tely,.X.| * and c|
|00000dc0| 6f 6e 74 69 6e 75 65 73 | 20 74 6f 20 72 75 6e 20 |ontinues| to run |
|00000dd0| 74 68 65 20 6e 6f 72 6d | 61 6c 20 63 72 6f 6e 20 |the norm|al cron |
|00000de0| 63 6f 64 65 2c 20 77 68 | 69 63 68 20 6d 65 61 6e |code, wh|ich mean|
|00000df0| 73 20 72 65 74 75 72 6e | 20 74 6f 0a 58 09 20 2a |s return| to.X. *|
|00000e00| 20 74 69 63 6b 28 29 2e | 20 20 74 68 65 20 63 68 | tick().| the ch|
|00000e10| 69 6c 64 20 61 6e 64 20 | 67 72 61 6e 64 63 68 69 |ild and |grandchi|
|00000e20| 6c 64 20 64 6f 6e 27 74 | 20 6c 65 61 76 65 20 74 |ld don't| leave t|
|00000e30| 68 69 73 20 66 75 6e 63 | 74 69 6f 6e 2c 20 61 6c |his func|tion, al|
|00000e40| 69 76 65 2e 0a 58 09 20 | 2a 0a 58 09 20 2a 20 76 |ive..X. |*.X. * v|
|00000e50| 66 6f 72 6b 28 29 20 69 | 73 20 75 6e 73 75 69 74 |fork() i|s unsuit|
|00000e60| 61 62 6c 65 2c 20 73 69 | 6e 63 65 20 77 65 20 68 |able, si|nce we h|
|00000e70| 61 76 65 20 6d 75 63 68 | 20 74 6f 20 64 6f 2c 20 |ave much| to do, |
|00000e80| 61 6e 64 20 74 68 65 20 | 70 61 72 65 6e 74 0a 58 |and the |parent.X|
|00000e90| 09 20 2a 20 6e 65 65 64 | 73 20 74 6f 20 62 65 20 |. * need|s to be |
|00000ea0| 61 62 6c 65 20 74 6f 20 | 72 75 6e 20 6f 66 66 20 |able to |run off |
|00000eb0| 61 6e 64 20 66 6f 72 6b | 20 6f 74 68 65 72 20 70 |and fork| other p|
|00000ec0| 72 6f 63 65 73 73 65 73 | 2e 0a 58 09 20 2a 2f 0a |rocesses|..X. */.|
|00000ed0| 58 09 73 77 69 74 63 68 | 20 28 66 6f 72 6b 28 29 |X.switch| (fork()|
|00000ee0| 29 0a 58 09 7b 0a 58 09 | 63 61 73 65 20 2d 31 3a |).X.{.X.|case -1:|
|00000ef0| 0a 58 09 09 6c 6f 67 5f | 69 74 28 22 43 52 4f 4e |.X..log_|it("CRON|
|00000f00| 44 22 2c 67 65 74 70 69 | 64 28 29 2c 22 65 72 72 |D",getpi|d(),"err|
|00000f10| 6f 72 22 2c 22 63 61 6e | 27 74 20 66 6f 72 6b 22 |or","can|'t fork"|
|00000f20| 29 3b 0a 58 09 09 62 72 | 65 61 6b 3b 0a 58 09 63 |);.X..br|eak;.X.c|
|00000f30| 61 73 65 20 30 3a 0a 58 | 09 09 2f 2a 20 63 68 69 |ase 0:.X|../* chi|
|00000f40| 6c 64 20 70 72 6f 63 65 | 73 73 20 2a 2f 0a 58 09 |ld proce|ss */.X.|
|00000f50| 09 63 68 69 6c 64 5f 70 | 72 6f 63 65 73 73 28 63 |.child_p|rocess(c|
|00000f60| 6d 64 2c 20 75 29 3b 0a | 58 09 09 44 65 62 75 67 |md, u);.|X..Debug|
|00000f70| 28 44 50 52 4f 43 2c 20 | 28 22 5b 25 64 5d 20 63 |(DPROC, |("[%d] c|
|00000f80| 68 69 6c 64 20 70 72 6f | 63 65 73 73 20 64 6f 6e |hild pro|cess don|
|00000f90| 65 2c 20 65 78 69 74 69 | 6e 67 5c 6e 22 2c 20 67 |e, exiti|ng\n", g|
|00000fa0| 65 74 70 69 64 28 29 29 | 29 0a 58 09 09 5f 65 78 |etpid())|).X.._ex|
|00000fb0| 69 74 28 4f 4b 5f 45 58 | 49 54 29 3b 0a 58 09 09 |it(OK_EX|IT);.X..|
|00000fc0| 62 72 65 61 6b 3b 0a 58 | 09 7d 0a 58 09 44 65 62 |break;.X|.}.X.Deb|
|00000fd0| 75 67 28 44 50 52 4f 43 | 2c 20 28 22 5b 25 64 5d |ug(DPROC|, ("[%d]|
|00000fe0| 20 6d 61 69 6e 20 70 72 | 6f 63 65 73 73 20 72 65 | main pr|ocess re|
|00000ff0| 74 75 72 6e 69 6e 67 20 | 74 6f 20 77 6f 72 6b 5c |turning |to work\|
|00001000| 6e 22 2c 20 67 65 74 70 | 69 64 28 29 29 29 0a 58 |n", getp|id())).X|
|00001010| 7d 0a 58 0a 58 0a 73 74 | 61 74 69 63 20 76 6f 69 |}.X.X.st|atic voi|
|00001020| 64 0a 63 68 69 6c 64 5f | 70 72 6f 63 65 73 73 28 |d.child_|process(|
|00001030| 63 6d 64 2c 20 75 29 0a | 58 09 63 68 61 72 09 2a |cmd, u).|X.char.*|
|00001040| 63 6d 64 3b 0a 58 09 75 | 73 65 72 09 2a 75 3b 0a |cmd;.X.u|ser.*u;.|
|00001050| 58 7b 0a 58 09 65 78 74 | 65 72 6e 20 73 74 72 75 |X{.X.ext|ern stru|
|00001060| 63 74 20 70 61 73 73 77 | 64 09 2a 67 65 74 70 77 |ct passw|d.*getpw|
|00001070| 6e 61 6d 28 29 3b 0a 58 | 09 65 78 74 65 72 6e 20 |nam();.X|.extern |
|00001080| 76 6f 69 64 09 73 69 67 | 70 69 70 65 5f 66 75 6e |void.sig|pipe_fun|
|00001090| 63 28 29 2c 20 62 65 5f | 64 69 66 66 65 72 65 6e |c(), be_|differen|
|000010a0| 74 28 29 2c 20 6c 6f 67 | 5f 69 74 28 29 3b 0a 58 |t(), log|_it();.X|
|000010b0| 09 65 78 74 65 72 6e 20 | 69 6e 74 09 56 46 4f 52 |.extern |int.VFOR|
|000010c0| 4b 28 29 3b 0a 58 09 65 | 78 74 65 72 6e 20 63 68 |K();.X.e|xtern ch|
|000010d0| 61 72 09 2a 69 6e 64 65 | 78 28 29 2c 20 2a 65 6e |ar.*inde|x(), *en|
|000010e0| 76 5f 67 65 74 28 29 3b | 0a 58 0a 58 09 61 75 74 |v_get();|.X.X.aut|
|000010f0| 6f 20 69 6e 74 09 73 74 | 64 69 6e 5f 70 69 70 65 |o int.st|din_pipe|
|00001100| 5b 32 5d 2c 20 73 74 64 | 6f 75 74 5f 70 69 70 65 |[2], std|out_pipe|
|00001110| 5b 32 5d 3b 0a 58 09 72 | 65 67 69 73 74 65 72 20 |[2];.X.r|egister |
|00001120| 63 68 61 72 09 2a 69 6e | 70 75 74 5f 64 61 74 61 |char.*in|put_data|
|00001130| 2c 20 2a 75 73 65 72 6e | 6d 2c 20 2a 6d 61 69 6c |, *usern|m, *mail|
|00001140| 74 6f 3b 0a 58 09 61 75 | 74 6f 20 69 6e 74 09 63 |to;.X.au|to int.c|
|00001150| 68 69 6c 64 72 65 6e 20 | 3d 20 30 3b 0a 58 23 69 |hildren |= 0;.X#i|
|00001160| 66 20 64 65 66 69 6e 65 | 64 28 73 65 71 75 65 6e |f define|d(sequen|
|00001170| 74 29 0a 58 09 65 78 74 | 65 72 6e 20 76 6f 69 64 |t).X.ext|ern void|
|00001180| 09 64 6f 5f 75 6e 69 76 | 28 29 3b 0a 58 23 65 6e |.do_univ|();.X#en|
|00001190| 64 69 66 0a 58 0a 58 09 | 44 65 62 75 67 28 44 50 |dif.X.X.|Debug(DP|
|000011a0| 52 4f 43 2c 20 28 22 5b | 25 64 5d 20 63 68 69 6c |ROC, ("[|%d] chil|
|000011b0| 64 5f 70 72 6f 63 65 73 | 73 28 27 25 73 27 29 5c |d_proces|s('%s')\|
|000011c0| 6e 22 2c 20 67 65 74 70 | 69 64 28 29 2c 20 63 6d |n", getp|id(), cm|
|000011d0| 64 29 29 0a 58 0a 58 09 | 2f 2a 20 6d 61 72 6b 20 |d)).X.X.|/* mark |
|000011e0| 6f 75 72 73 65 6c 76 65 | 73 20 61 73 20 64 69 66 |ourselve|s as dif|
|000011f0| 66 65 72 65 6e 74 20 74 | 6f 20 50 53 20 63 6f 6d |ferent t|o PS com|
|00001200| 6d 61 6e 64 20 77 61 74 | 63 68 65 72 73 20 62 79 |mand wat|chers by|
|00001210| 20 75 70 73 68 69 66 74 | 69 6e 67 0a 58 09 20 2a | upshift|ing.X. *|
|00001220| 20 6f 75 72 20 70 72 6f | 67 72 61 6d 20 6e 61 6d | our pro|gram nam|
|00001230| 65 2e 20 20 54 68 69 73 | 20 68 61 73 20 6e 6f 20 |e. This| has no |
|00001240| 65 66 66 65 63 74 20 6f | 6e 20 73 6f 6d 65 20 6b |effect o|n some k|
|00001250| 65 72 6e 65 6c 73 2e 0a | 58 09 20 2a 2f 0a 58 09 |ernels..|X. */.X.|
|00001260| 7b 0a 58 09 09 72 65 67 | 69 73 74 65 72 20 63 68 |{.X..reg|ister ch|
|00001270| 61 72 09 2a 70 63 68 3b | 0a 58 0a 58 09 09 66 6f |ar.*pch;|.X.X..fo|
|00001280| 72 20 28 70 63 68 20 3d | 20 50 72 6f 67 72 61 6d |r (pch =| Program|
|00001290| 4e 61 6d 65 3b 20 20 2a | 70 63 68 3b 20 20 70 63 |Name; *|pch; pc|
|000012a0| 68 2b 2b 29 0a 58 09 09 | 09 2a 70 63 68 20 3d 20 |h++).X..|.*pch = |
|000012b0| 4d 6b 55 70 70 65 72 28 | 2a 70 63 68 29 3b 0a 58 |MkUpper(|*pch);.X|
|000012c0| 09 7d 0a 58 0a 58 09 2f | 2a 20 64 69 73 63 6f 76 |.}.X.X./|* discov|
|000012d0| 65 72 20 73 6f 6d 65 20 | 75 73 65 66 75 6c 20 61 |er some |useful a|
|000012e0| 6e 64 20 69 6d 70 6f 72 | 74 61 6e 74 20 65 6e 76 |nd impor|tant env|
|000012f0| 69 72 6f 6e 6d 65 6e 74 | 20 73 65 74 74 69 6e 67 |ironment| setting|
|00001300| 73 0a 58 09 20 2a 2f 0a | 58 09 75 73 65 72 6e 6d |s.X. */.|X.usernm|
|00001310| 20 3d 20 65 6e 76 5f 67 | 65 74 28 55 53 45 52 45 | = env_g|et(USERE|
|00001320| 4e 56 2c 20 75 2d 3e 65 | 6e 76 70 29 3b 0a 58 09 |NV, u->e|nvp);.X.|
|00001330| 6d 61 69 6c 74 6f 20 3d | 20 65 6e 76 5f 67 65 74 |mailto =| env_get|
|00001340| 28 22 4d 41 49 4c 54 4f | 22 2c 20 75 2d 3e 65 6e |("MAILTO|", u->en|
|00001350| 76 70 29 3b 0a 58 0a 58 | 23 69 66 20 64 65 66 69 |vp);.X.X|#if defi|
|00001360| 6e 65 64 28 42 53 44 29 | 0a 58 09 2f 2a 20 6f 75 |ned(BSD)|.X./* ou|
|00001370| 72 20 70 61 72 65 6e 74 | 20 69 73 20 77 61 74 63 |r parent| is watc|
|00001380| 68 69 6e 67 20 66 6f 72 | 20 6f 75 72 20 64 65 61 |hing for| our dea|
|00001390| 74 68 20 62 79 20 63 61 | 74 63 68 69 6e 67 20 53 |th by ca|tching S|
|000013a0| 49 47 43 48 4c 44 2e 20 | 20 77 65 0a 58 09 20 2a |IGCHLD. | we.X. *|
|000013b0| 20 64 6f 20 6e 6f 74 20 | 63 61 72 65 20 74 6f 20 | do not |care to |
|000013c0| 77 61 74 63 68 20 66 6f | 72 20 6f 75 72 20 63 68 |watch fo|r our ch|
|000013d0| 69 6c 64 72 65 6e 27 73 | 20 64 65 61 74 68 73 20 |ildren's| deaths |
|000013e0| 74 68 69 73 20 77 61 79 | 20 2d 2d 20 77 65 0a 58 |this way| -- we.X|
|000013f0| 09 20 2a 20 75 73 65 20 | 77 61 69 74 28 29 20 65 |. * use |wait() e|
|00001400| 78 70 6c 69 63 74 6c 79 | 2e 20 20 73 6f 20 77 65 |xplictly|. so we|
|00001410| 20 68 61 76 65 20 74 6f | 20 64 69 73 61 62 6c 65 | have to| disable|
|00001420| 20 74 68 65 20 73 69 67 | 6e 61 6c 20 28 77 68 69 | the sig|nal (whi|
|00001430| 63 68 0a 58 09 20 2a 20 | 77 61 73 20 69 6e 68 65 |ch.X. * |was inhe|
|00001440| 72 69 74 65 64 20 66 72 | 6f 6d 20 74 68 65 20 70 |rited fr|om the p|
|00001450| 61 72 65 6e 74 29 2e 0a | 58 09 20 2a 0a 58 09 20 |arent)..|X. *.X. |
|00001460| 2a 20 74 68 69 73 20 69 | 73 6e 27 74 20 6e 65 65 |* this i|sn't nee|
|00001470| 64 65 64 20 66 6f 72 20 | 73 79 73 74 65 6d 20 56 |ded for |system V|
|00001480| 2c 20 73 69 6e 63 65 20 | 6f 75 72 20 70 61 72 65 |, since |our pare|
|00001490| 6e 74 20 69 73 20 61 6c | 72 65 61 64 79 0a 58 09 |nt is al|ready.X.|
|000014a0| 20 2a 20 53 49 47 5f 49 | 47 4e 20 6f 6e 20 53 49 | * SIG_I|GN on SI|
|000014b0| 47 43 4c 44 20 2d 2d 20 | 77 68 69 63 68 2c 20 68 |GCLD -- |which, h|
|000014c0| 6f 70 65 66 75 6c 6c 79 | 2c 20 77 69 6c 6c 20 63 |opefully|, will c|
|000014d0| 61 75 73 65 20 63 68 69 | 6c 64 72 65 6e 20 74 6f |ause chi|ldren to|
|000014e0| 0a 58 09 20 2a 20 73 69 | 6d 70 6c 79 20 76 61 6e |.X. * si|mply van|
|000014f0| 69 73 68 20 77 68 65 6e | 20 74 68 65 79 20 64 69 |ish when| they di|
|00001500| 65 2e 0a 58 09 20 2a 2f | 0a 58 09 28 76 6f 69 64 |e..X. */|.X.(void|
|00001510| 29 20 73 69 67 6e 61 6c | 28 53 49 47 43 48 4c 44 |) signal|(SIGCHLD|
|00001520| 2c 20 53 49 47 5f 49 47 | 4e 29 3b 0a 58 23 65 6e |, SIG_IG|N);.X#en|
|00001530| 64 69 66 20 2f 2a 42 53 | 44 2a 2f 0a 58 0a 58 09 |dif /*BS|D*/.X.X.|
|00001540| 2f 2a 20 63 72 65 61 74 | 65 20 73 6f 6d 65 20 70 |/* creat|e some p|
|00001550| 69 70 65 73 20 74 6f 20 | 74 61 6c 6b 20 74 6f 20 |ipes to |talk to |
|00001560| 6f 75 72 20 66 75 74 75 | 72 65 20 63 68 69 6c 64 |our futu|re child|
|00001570| 0a 58 09 20 2a 2f 0a 58 | 09 70 69 70 65 28 73 74 |.X. */.X|.pipe(st|
|00001580| 64 69 6e 5f 70 69 70 65 | 29 3b 09 2f 2a 20 63 68 |din_pipe|);./* ch|
|00001590| 69 6c 64 27 73 20 73 74 | 64 69 6e 20 2a 2f 0a 58 |ild's st|din */.X|
|000015a0| 09 70 69 70 65 28 73 74 | 64 6f 75 74 5f 70 69 70 |.pipe(st|dout_pip|
|000015b0| 65 29 3b 09 2f 2a 20 63 | 68 69 6c 64 27 73 20 73 |e);./* c|hild's s|
|000015c0| 74 64 6f 75 74 20 2a 2f | 0a 58 09 0a 58 09 2f 2a |tdout */|.X..X./*|
|000015d0| 20 73 69 6e 63 65 20 77 | 65 20 61 72 65 20 61 20 | since w|e are a |
|000015e0| 66 6f 72 6b 65 64 20 70 | 72 6f 63 65 73 73 2c 20 |forked p|rocess, |
|000015f0| 77 65 20 63 61 6e 20 64 | 69 64 64 6c 65 20 74 68 |we can d|iddle th|
|00001600| 65 20 63 6f 6d 6d 61 6e | 64 20 73 74 72 69 6e 67 |e comman|d string|
|00001610| 0a 58 09 20 2a 20 77 65 | 20 77 65 72 65 20 70 61 |.X. * we| were pa|
|00001620| 73 73 65 64 20 2d 2d 20 | 6e 6f 62 6f 64 79 20 65 |ssed -- |nobody e|
|00001630| 6c 73 65 20 69 73 20 67 | 6f 69 6e 67 20 74 6f 20 |lse is g|oing to |
|00001640| 75 73 65 20 69 74 20 61 | 67 61 69 6e 2c 20 72 69 |use it a|gain, ri|
|00001650| 67 68 74 3f 0a 58 09 20 | 2a 0a 58 09 20 2a 20 69 |ght?.X. |*.X. * i|
|00001660| 66 20 61 20 25 20 69 73 | 20 70 72 65 73 65 6e 74 |f a % is| present|
|00001670| 20 69 6e 20 74 68 65 20 | 63 6f 6d 6d 61 6e 64 2c | in the |command,|
|00001680| 20 70 72 65 76 69 6f 75 | 73 20 63 68 61 72 61 63 | previou|s charac|
|00001690| 74 65 72 73 20 61 72 65 | 20 74 68 65 0a 58 09 20 |ters are| the.X. |
|000016a0| 2a 20 63 6f 6d 6d 61 6e | 64 2c 20 61 6e 64 20 73 |* comman|d, and s|
|000016b0| 75 62 73 65 71 75 65 6e | 74 20 63 68 61 72 61 63 |ubsequen|t charac|
|000016c0| 74 65 72 73 20 61 72 65 | 20 74 68 65 20 61 64 64 |ters are| the add|
|000016d0| 69 74 69 6f 6e 61 6c 20 | 69 6e 70 75 74 20 74 6f |itional |input to|
|000016e0| 0a 58 09 20 2a 20 74 68 | 65 20 63 6f 6d 6d 61 6e |.X. * th|e comman|
|000016f0| 64 2e 20 20 53 75 62 73 | 65 71 75 65 6e 74 20 25 |d. Subs|equent %|
|00001700| 27 73 20 77 69 6c 6c 20 | 62 65 20 74 72 61 6e 73 |'s will |be trans|
|00001710| 66 6f 72 6d 65 64 20 69 | 6e 74 6f 20 6e 65 77 6c |formed i|nto newl|
|00001720| 69 6e 65 73 2c 0a 58 09 | 20 2a 20 62 75 74 20 74 |ines,.X.| * but t|
|00001730| 68 61 74 20 68 61 70 70 | 65 6e 73 20 6c 61 74 65 |hat happ|ens late|
|00001740| 72 2e 0a 58 09 20 2a 2f | 0a 58 09 69 66 20 28 4e |r..X. */|.X.if (N|
|00001750| 55 4c 4c 20 3d 3d 20 28 | 69 6e 70 75 74 5f 64 61 |ULL == (|input_da|
|00001760| 74 61 20 3d 20 69 6e 64 | 65 78 28 63 6d 64 2c 20 |ta = ind|ex(cmd, |
|00001770| 27 25 27 29 29 29 0a 58 | 09 7b 0a 58 09 09 2f 2a |'%'))).X|.{.X../*|
|00001780| 20 6e 6f 20 25 2e 20 20 | 70 6f 69 6e 74 20 69 6e | no %. |point in|
|00001790| 70 75 74 5f 64 61 74 61 | 20 61 74 20 61 20 6e 75 |put_data| at a nu|
|000017a0| 6c 6c 20 73 74 72 69 6e | 67 2e 0a 58 09 09 20 2a |ll strin|g..X.. *|
|000017b0| 2f 0a 58 09 09 69 6e 70 | 75 74 5f 64 61 74 61 20 |/.X..inp|ut_data |
|000017c0| 3d 20 22 22 3b 0a 58 09 | 7d 0a 58 09 65 6c 73 65 |= "";.X.|}.X.else|
|000017d0| 0a 58 09 7b 0a 58 09 09 | 2f 2a 20 25 20 66 6f 75 |.X.{.X..|/* % fou|
|000017e0| 6e 64 2e 20 20 72 65 70 | 6c 61 63 65 20 77 69 74 |nd. rep|lace wit|
|000017f0| 68 20 61 20 6e 75 6c 6c | 20 28 72 65 6d 65 6d 62 |h a null| (rememb|
|00001800| 65 72 2c 20 77 65 27 72 | 65 20 61 20 66 6f 72 6b |er, we'r|e a fork|
|00001810| 65 64 0a 58 09 09 20 2a | 20 70 72 6f 63 65 73 73 |ed.X.. *| process|
|00001820| 20 61 6e 64 20 74 68 65 | 20 73 74 72 69 6e 67 20 | and the| string |
|00001830| 77 6f 6e 27 74 20 62 65 | 20 72 65 75 73 65 64 29 |won't be| reused)|
|00001840| 2c 20 61 6e 64 20 69 6e | 63 72 65 6d 65 6e 74 0a |, and in|crement.|
|00001850| 58 09 09 20 2a 20 69 6e | 70 75 74 5f 64 61 74 61 |X.. * in|put_data|
|00001860| 20 74 6f 20 70 6f 69 6e | 74 20 61 74 20 74 68 65 | to poin|t at the|
|00001870| 20 66 6f 6c 6c 6f 77 69 | 6e 67 20 63 68 61 72 61 | followi|ng chara|
|00001880| 63 74 65 72 2e 0a 58 09 | 09 20 2a 2f 0a 58 09 09 |cter..X.|. */.X..|
|00001890| 2a 69 6e 70 75 74 5f 64 | 61 74 61 2b 2b 20 3d 20 |*input_d|ata++ = |
|000018a0| 27 5c 30 27 3b 0a 58 09 | 7d 0a 58 0a 58 09 2f 2a |'\0';.X.|}.X.X./*|
|000018b0| 20 66 6f 72 6b 20 61 67 | 61 69 6e 2c 20 74 68 69 | fork ag|ain, thi|
|000018c0| 73 20 74 69 6d 65 20 73 | 6f 20 77 65 20 63 61 6e |s time s|o we can|
|000018d0| 20 65 78 65 63 20 74 68 | 65 20 75 73 65 72 27 73 | exec th|e user's|
|000018e0| 20 63 6f 6d 6d 61 6e 64 | 2e 20 20 56 66 6f 72 6b | command|. Vfork|
|000018f0| 28 29 0a 58 09 20 2a 20 | 69 73 20 6f 6b 61 79 20 |().X. * |is okay |
|00001900| 74 68 69 73 20 74 69 6d | 65 2c 20 73 69 6e 63 65 |this tim|e, since|
|00001910| 20 77 65 20 61 72 65 20 | 67 6f 69 6e 67 20 74 6f | we are |going to|
|00001920| 20 65 78 65 63 28 29 20 | 70 72 65 74 74 79 20 71 | exec() |pretty q|
|00001930| 75 69 63 6b 6c 79 2e 0a | 58 09 20 2a 20 49 27 6d |uickly..|X. * I'm|
|00001940| 20 61 73 73 75 6d 69 6e | 67 20 74 68 61 74 20 63 | assumin|g that c|
|00001950| 6c 6f 73 69 6e 67 20 70 | 69 70 65 20 65 6e 64 73 |losing p|ipe ends|
|00001960| 20 26 77 68 61 74 6e 6f | 74 20 77 69 6c 6c 20 6e | &whatno|t will n|
|00001970| 6f 74 20 61 66 66 65 63 | 74 20 6f 75 72 0a 58 09 |ot affec|t our.X.|
|00001980| 20 2a 20 73 75 73 70 65 | 6e 64 65 64 20 70 73 65 | * suspe|nded pse|
|00001990| 75 64 6f 2d 70 61 72 65 | 6e 74 2f 61 6c 74 65 72 |udo-pare|nt/alter|
|000019a0| 2d 65 67 6f 2e 0a 58 09 | 20 2a 2f 0a 58 09 69 66 |-ego..X.| */.X.if|
|000019b0| 20 28 56 46 4f 52 4b 28 | 29 20 3d 3d 20 30 29 0a | (VFORK(|) == 0).|
|000019c0| 58 09 7b 0a 58 09 09 44 | 65 62 75 67 28 44 50 52 |X.{.X..D|ebug(DPR|
|000019d0| 4f 43 2c 20 28 22 5b 25 | 64 5d 20 67 72 61 6e 64 |OC, ("[%|d] grand|
|000019e0| 63 68 69 6c 64 20 70 72 | 6f 63 65 73 73 20 56 46 |child pr|ocess VF|
|000019f0| 4f 52 4b 28 29 27 65 64 | 5c 6e 22 2c 20 67 65 74 |ORK()'ed|\n", get|
|00001a00| 70 69 64 28 29 29 29 0a | 58 0a 58 09 09 2f 2a 20 |pid())).|X.X../* |
|00001a10| 77 72 69 74 65 20 61 20 | 6c 6f 67 20 6d 65 73 73 |write a |log mess|
|00001a20| 61 67 65 2e 20 20 77 65 | 27 76 65 20 77 61 69 74 |age. we|'ve wait|
|00001a30| 65 64 20 74 68 69 73 20 | 6c 6f 6e 67 20 74 6f 20 |ed this |long to |
|00001a40| 64 6f 20 69 74 0a 58 09 | 09 20 2a 20 62 65 63 61 |do it.X.|. * beca|
|00001a50| 75 73 65 20 69 74 20 77 | 61 73 20 6e 6f 74 20 75 |use it w|as not u|
|00001a60| 6e 74 69 6c 20 6e 6f 77 | 20 74 68 61 74 20 77 65 |ntil now| that we|
|00001a70| 20 6b 6e 65 77 20 74 68 | 65 20 50 49 44 20 74 68 | knew th|e PID th|
|00001a80| 61 74 0a 58 09 09 20 2a | 20 74 68 65 20 61 63 74 |at.X.. *| the act|
|00001a90| 75 61 6c 20 75 73 65 72 | 20 63 6f 6d 6d 61 6e 64 |ual user| command|
|00001aa0| 20 73 68 65 6c 6c 20 77 | 61 73 20 67 6f 69 6e 67 | shell w|as going|
|00001ab0| 20 74 6f 20 67 65 74 20 | 61 6e 64 20 74 68 65 0a | to get |and the.|
|00001ac0| 58 09 09 20 2a 20 50 49 | 44 20 69 73 20 70 61 72 |X.. * PI|D is par|
|00001ad0| 74 20 6f 66 20 74 68 65 | 20 6c 6f 67 20 6d 65 73 |t of the| log mes|
|00001ae0| 73 61 67 65 2e 0a 58 09 | 09 20 2a 2f 0a 58 23 69 |sage..X.|. */.X#i|
|00001af0| 66 64 65 66 20 4c 4f 47 | 5f 46 49 4c 45 0a 58 09 |fdef LOG|_FILE.X.|
|00001b00| 09 7b 0a 58 09 09 09 65 | 78 74 65 72 6e 20 63 68 |.{.X...e|xtern ch|
|00001b10| 61 72 20 2a 6d 6b 70 72 | 69 6e 74 73 28 29 3b 0a |ar *mkpr|ints();.|
|00001b20| 58 09 09 09 63 68 61 72 | 20 2a 78 20 3d 20 6d 6b |X...char| *x = mk|
|00001b30| 70 72 69 6e 74 73 28 63 | 6d 64 2c 20 73 74 72 6c |prints(c|md, strl|
|00001b40| 65 6e 28 63 6d 64 29 29 | 3b 0a 58 0a 58 09 09 09 |en(cmd))|;.X.X...|
|00001b50| 6c 6f 67 5f 69 74 28 75 | 73 65 72 6e 6d 2c 20 67 |log_it(u|sernm, g|
|00001b60| 65 74 70 69 64 28 29 2c | 20 22 43 4d 44 22 2c 20 |etpid(),| "CMD", |
|00001b70| 78 29 3b 0a 58 09 09 09 | 66 72 65 65 28 78 29 3b |x);.X...|free(x);|
|00001b80| 0a 58 09 09 7d 0a 58 23 | 65 6e 64 69 66 0a 58 0a |.X..}.X#|endif.X.|
|00001b90| 58 09 09 2f 2a 20 67 65 | 74 20 6e 65 77 20 70 67 |X../* ge|t new pg|
|00001ba0| 72 70 2c 20 76 6f 69 64 | 20 74 74 79 2c 20 65 74 |rp, void| tty, et|
|00001bb0| 63 2e 0a 58 09 09 20 2a | 2f 0a 58 09 09 62 65 5f |c..X.. *|/.X..be_|
|00001bc0| 64 69 66 66 65 72 65 6e | 74 28 29 3b 0a 58 0a 58 |differen|t();.X.X|
|00001bd0| 09 09 2f 2a 20 63 6c 6f | 73 65 20 74 68 65 20 70 |../* clo|se the p|
|00001be0| 69 70 65 20 65 6e 64 73 | 20 74 68 61 74 20 77 65 |ipe ends| that we|
|00001bf0| 20 77 6f 6e 27 74 20 75 | 73 65 2e 20 20 74 68 69 | won't u|se. thi|
|00001c00| 73 20 64 6f 65 73 6e 27 | 74 20 61 66 66 65 63 74 |s doesn'|t affect|
|00001c10| 0a 58 09 09 20 2a 20 74 | 68 65 20 70 61 72 65 6e |.X.. * t|he paren|
|00001c20| 74 2c 20 77 68 6f 20 68 | 61 73 20 74 6f 20 72 65 |t, who h|as to re|
|00001c30| 61 64 20 61 6e 64 20 77 | 72 69 74 65 20 74 68 65 |ad and w|rite the|
|00001c40| 6d 3b 20 69 74 20 6b 65 | 65 70 73 20 74 68 65 0a |m; it ke|eps the.|
|00001c50| 58 09 09 20 2a 20 6b 65 | 72 6e 65 6c 20 66 72 6f |X.. * ke|rnel fro|
|00001c60| 6d 20 72 65 63 6f 72 64 | 69 6e 67 20 75 73 20 61 |m record|ing us a|
|00001c70| 73 20 61 20 70 6f 74 65 | 6e 74 69 61 6c 20 63 6c |s a pote|ntial cl|
|00001c80| 69 65 6e 74 20 54 57 49 | 43 45 20 2d 2d 0a 58 09 |ient TWI|CE --.X.|
|00001c90| 09 20 2a 20 77 68 69 63 | 68 20 77 6f 75 6c 64 20 |. * whic|h would |
|00001ca0| 6b 65 65 70 20 69 74 20 | 66 72 6f 6d 20 73 65 6e |keep it |from sen|
|00001cb0| 64 69 6e 67 20 53 49 47 | 50 49 50 45 20 69 6e 20 |ding SIG|PIPE in |
|00001cc0| 6f 74 68 65 72 77 69 73 | 65 0a 58 09 09 20 2a 20 |otherwis|e.X.. * |
|00001cd0| 61 70 70 72 6f 70 72 69 | 61 74 65 20 63 69 72 63 |appropri|ate circ|
|00001ce0| 75 6d 73 74 61 6e 63 65 | 73 2e 0a 58 09 09 20 2a |umstance|s..X.. *|
|00001cf0| 2f 0a 58 09 09 63 6c 6f | 73 65 28 73 74 64 69 6e |/.X..clo|se(stdin|
|00001d00| 5f 70 69 70 65 5b 57 52 | 49 54 45 5f 50 49 50 45 |_pipe[WR|ITE_PIPE|
|00001d10| 5d 29 3b 0a 58 09 09 63 | 6c 6f 73 65 28 73 74 64 |]);.X..c|lose(std|
|00001d20| 6f 75 74 5f 70 69 70 65 | 5b 52 45 41 44 5f 50 49 |out_pipe|[READ_PI|
|00001d30| 50 45 5d 29 3b 0a 58 0a | 58 09 09 2f 2a 20 67 72 |PE]);.X.|X../* gr|
|00001d40| 61 6e 64 63 68 69 6c 64 | 20 70 72 6f 63 65 73 73 |andchild| process|
|00001d50| 2e 20 20 6d 61 6b 65 20 | 73 74 64 7b 69 6e 2c 6f |. make |std{in,o|
|00001d60| 75 74 7d 20 62 65 20 74 | 68 65 20 65 6e 64 73 20 |ut} be t|he ends |
|00001d70| 6f 66 0a 58 09 09 20 2a | 20 70 69 70 65 73 20 6f |of.X.. *| pipes o|
|00001d80| 70 65 6e 65 64 20 62 79 | 20 6f 75 72 20 64 61 64 |pened by| our dad|
|00001d90| 64 79 3b 20 6d 61 6b 65 | 20 73 74 64 65 72 72 20 |dy; make| stderr |
|00001da0| 67 6f 20 74 6f 20 73 74 | 64 6f 75 74 2e 0a 58 09 |go to st|dout..X.|
|00001db0| 09 20 2a 2f 0a 58 09 09 | 63 6c 6f 73 65 28 53 54 |. */.X..|close(ST|
|00001dc0| 44 49 4e 29 3b 09 64 75 | 70 32 28 73 74 64 69 6e |DIN);.du|p2(stdin|
|00001dd0| 5f 70 69 70 65 5b 52 45 | 41 44 5f 50 49 50 45 5d |_pipe[RE|AD_PIPE]|
|00001de0| 2c 20 53 54 44 49 4e 29 | 3b 0a 58 09 09 63 6c 6f |, STDIN)|;.X..clo|
|00001df0| 73 65 28 53 54 44 4f 55 | 54 29 3b 09 64 75 70 32 |se(STDOU|T);.dup2|
|00001e00| 28 73 74 64 6f 75 74 5f | 70 69 70 65 5b 57 52 49 |(stdout_|pipe[WRI|
|00001e10| 54 45 5f 50 49 50 45 5d | 2c 20 53 54 44 4f 55 54 |TE_PIPE]|, STDOUT|
|00001e20| 29 3b 0a 58 09 09 63 6c | 6f 73 65 28 53 54 44 45 |);.X..cl|ose(STDE|
|00001e30| 52 52 29 3b 09 64 75 70 | 32 28 53 54 44 4f 55 54 |RR);.dup|2(STDOUT|
|00001e40| 2c 20 53 54 44 45 52 52 | 29 3b 0a 58 0a 58 09 09 |, STDERR|);.X.X..|
|00001e50| 2f 2a 20 63 6c 6f 73 65 | 20 74 68 65 20 70 69 70 |/* close| the pip|
|00001e60| 65 73 20 77 65 20 6a 75 | 73 74 20 64 75 70 27 65 |es we ju|st dup'e|
|00001e70| 64 2e 20 20 54 68 65 20 | 72 65 73 6f 75 72 63 65 |d. The |resource|
|00001e80| 73 20 77 69 6c 6c 20 72 | 65 6d 61 69 6e 2c 0a 58 |s will r|emain,.X|
|00001e90| 09 09 20 2a 20 73 69 6e | 63 65 20 74 68 65 79 27 |.. * sin|ce they'|
|00001ea0| 76 65 20 62 65 65 6e 20 | 64 75 70 27 65 64 2e 2e |ve been |dup'ed..|
|00001eb0| 2e 20 3a 2d 29 2e 2e 2e | 0a 58 09 09 20 2a 2f 0a |. :-)...|.X.. */.|
|00001ec0| 58 09 09 63 6c 6f 73 65 | 28 73 74 64 69 6e 5f 70 |X..close|(stdin_p|
|00001ed0| 69 70 65 5b 52 45 41 44 | 5f 50 49 50 45 5d 29 3b |ipe[READ|_PIPE]);|
|00001ee0| 0a 58 09 09 63 6c 6f 73 | 65 28 73 74 64 6f 75 74 |.X..clos|e(stdout|
|00001ef0| 5f 70 69 70 65 5b 57 52 | 49 54 45 5f 50 49 50 45 |_pipe[WR|ITE_PIPE|
|00001f00| 5d 29 3b 0a 58 0a 58 23 | 20 69 66 20 64 65 66 69 |]);.X.X#| if defi|
|00001f10| 6e 65 64 28 73 65 71 75 | 65 6e 74 29 0a 58 09 09 |ned(sequ|ent).X..|
|00001f20| 2f 2a 20 73 65 74 20 6f | 75 72 20 6c 6f 67 69 6e |/* set o|ur login|
|00001f30| 20 75 6e 69 76 65 72 73 | 65 2e 20 20 44 6f 20 74 | univers|e. Do t|
|00001f40| 68 69 73 20 69 6e 20 74 | 68 65 20 67 72 61 6e 64 |his in t|he grand|
|00001f50| 63 68 69 6c 64 0a 58 09 | 09 20 2a 20 73 6f 20 74 |child.X.|. * so t|
|00001f60| 68 61 74 20 74 68 65 20 | 63 68 69 6c 64 20 63 61 |hat the |child ca|
|00001f70| 6e 20 69 6e 76 6f 6b 65 | 20 2f 75 73 72 2f 6c 69 |n invoke| /usr/li|
|00001f80| 62 2f 73 65 6e 64 6d 61 | 69 6c 0a 58 09 09 20 2a |b/sendma|il.X.. *|
|00001f90| 20 77 69 74 68 6f 75 74 | 20 73 75 72 70 72 69 73 | without| surpris|
|00001fa0| 65 73 2e 0a 58 09 09 20 | 2a 2f 0a 58 09 09 64 6f |es..X.. |*/.X..do|
|00001fb0| 5f 75 6e 69 76 28 75 29 | 3b 0a 58 23 20 65 6e 64 |_univ(u)|;.X# end|
|00001fc0| 69 66 0a 58 0a 58 09 09 | 2f 2a 20 73 65 74 20 6f |if.X.X..|/* set o|
|00001fd0| 75 72 20 64 69 72 65 63 | 74 6f 72 79 2c 20 75 69 |ur direc|tory, ui|
|00001fe0| 64 20 61 6e 64 20 67 69 | 64 2e 20 20 53 65 74 20 |d and gi|d. Set |
|00001ff0| 67 69 64 20 66 69 72 73 | 74 2c 20 73 69 6e 63 65 |gid firs|t, since|
|00002000| 20 6f 6e 63 65 0a 58 09 | 09 20 2a 20 77 65 20 73 | once.X.|. * we s|
|00002010| 65 74 20 75 69 64 2c 20 | 77 65 27 76 65 20 6c 6f |et uid, |we've lo|
|00002020| 73 74 20 72 6f 6f 74 20 | 70 72 69 76 6c 65 64 67 |st root |privledg|
|00002030| 65 73 2e 20 20 28 6f 6f | 70 73 21 29 0a 58 09 09 |es. (oo|ps!).X..|
|00002040| 20 2a 2f 0a 58 09 09 73 | 65 74 67 69 64 28 75 2d | */.X..s|etgid(u-|
|00002050| 3e 67 69 64 29 3b 0a 58 | 23 20 69 66 20 64 65 66 |>gid);.X|# if def|
|00002060| 69 6e 65 64 28 42 53 44 | 29 0a 58 09 09 69 6e 69 |ined(BSD|).X..ini|
|00002070| 74 67 72 6f 75 70 73 28 | 65 6e 76 5f 67 65 74 28 |tgroups(|env_get(|
|00002080| 55 53 45 52 45 4e 56 2c | 20 75 2d 3e 65 6e 76 70 |USERENV,| u->envp|
|00002090| 29 2c 20 75 2d 3e 67 69 | 64 29 3b 0a 58 23 20 65 |), u->gi|d);.X# e|
|000020a0| 6e 64 69 66 0a 58 09 09 | 73 65 74 75 69 64 28 75 |ndif.X..|setuid(u|
|000020b0| 2d 3e 75 69 64 29 3b 09 | 09 2f 2a 20 79 6f 75 20 |->uid);.|./* you |
|000020c0| 61 72 65 6e 27 74 20 72 | 6f 6f 74 20 61 66 74 65 |aren't r|oot afte|
|000020d0| 72 20 74 68 69 73 2e 2e | 2e 20 2a 2f 0a 58 09 09 |r this..|. */.X..|
|000020e0| 63 68 64 69 72 28 65 6e | 76 5f 67 65 74 28 22 48 |chdir(en|v_get("H|
|000020f0| 4f 4d 45 22 2c 20 75 2d | 3e 65 6e 76 70 29 29 3b |OME", u-|>envp));|
|00002100| 0a 58 0a 58 09 09 2f 2a | 20 65 78 65 63 20 74 68 |.X.X../*| exec th|
|00002110| 65 20 63 6f 6d 6d 61 6e | 64 2e 0a 58 09 09 20 2a |e comman|d..X.. *|
|00002120| 2f 0a 58 09 09 7b 0a 58 | 09 09 09 63 68 61 72 09 |/.X..{.X|...char.|
|00002130| 2a 73 68 65 6c 6c 20 3d | 20 65 6e 76 5f 67 65 74 |*shell =| env_get|
|00002140| 28 22 53 48 45 4c 4c 22 | 2c 20 75 2d 3e 65 6e 76 |("SHELL"|, u->env|
|00002150| 70 29 3b 0a 58 0a 58 23 | 20 69 66 20 44 45 42 55 |p);.X.X#| if DEBU|
|00002160| 47 47 49 4e 47 0a 58 09 | 09 09 69 66 20 28 44 65 |GGING.X.|..if (De|
|00002170| 62 75 67 46 6c 61 67 73 | 20 26 20 44 54 45 53 54 |bugFlags| & DTEST|
|00002180| 29 20 7b 0a 58 09 09 09 | 09 66 70 72 69 6e 74 66 |) {.X...|.fprintf|
|00002190| 28 73 74 64 65 72 72 2c | 0a 58 09 09 09 09 22 64 |(stderr,|.X...."d|
|000021a0| 65 62 75 67 20 44 54 45 | 53 54 20 69 73 20 6f 6e |ebug DTE|ST is on|
|000021b0| 2c 20 6e 6f 74 20 65 78 | 65 63 27 69 6e 67 20 63 |, not ex|ec'ing c|
|000021c0| 6f 6d 6d 61 6e 64 2e 5c | 6e 22 29 3b 0a 58 09 09 |ommand.\|n");.X..|
|000021d0| 09 09 66 70 72 69 6e 74 | 66 28 73 74 64 65 72 72 |..fprint|f(stderr|
|000021e0| 2c 0a 58 09 09 09 09 22 | 5c 74 63 6d 64 3d 27 25 |,.X...."|\tcmd='%|
|000021f0| 73 27 20 73 68 65 6c 6c | 3d 27 25 73 27 5c 6e 22 |s' shell|='%s'\n"|
|00002200| 2c 20 63 6d 64 2c 20 73 | 68 65 6c 6c 29 3b 0a 58 |, cmd, s|hell);.X|
|00002210| 09 09 09 09 5f 65 78 69 | 74 28 4f 4b 5f 45 58 49 |...._exi|t(OK_EXI|
|00002220| 54 29 3b 0a 58 09 09 09 | 7d 0a 58 23 20 65 6e 64 |T);.X...|}.X# end|
|00002230| 69 66 20 2f 2a 44 45 42 | 55 47 47 49 4e 47 2a 2f |if /*DEB|UGGING*/|
|00002240| 0a 58 09 09 09 2f 2a 20 | 6e 6f 72 6d 61 6c 6c 79 |.X.../* |normally|
|00002250| 20 79 6f 75 20 63 61 6e | 27 74 20 70 75 74 20 64 | you can|'t put d|
|00002260| 65 62 75 67 67 69 6e 67 | 20 73 74 75 66 66 20 68 |ebugging| stuff h|
|00002270| 65 72 65 20 62 65 63 61 | 75 73 65 0a 58 09 09 09 |ere beca|use.X...|
|00002280| 20 2a 20 69 74 20 67 65 | 74 73 20 6d 61 69 6c 65 | * it ge|ts maile|
|00002290| 64 20 77 69 74 68 20 74 | 68 65 20 63 6f 6d 6d 61 |d with t|he comma|
|000022a0| 6e 64 20 6f 75 74 70 75 | 74 2e 0a 58 09 09 09 20 |nd outpu|t..X... |
|000022b0| 2a 2f 0a 58 09 09 09 2f | 2a 0a 58 09 09 09 44 65 |*/.X.../|*.X...De|
|000022c0| 62 75 67 28 44 50 52 4f | 43 2c 20 28 22 5b 25 64 |bug(DPRO|C, ("[%d|
|000022d0| 5d 20 65 78 65 63 6c 65 | 28 27 25 73 27 2c 20 27 |] execle|('%s', '|
|000022e0| 25 73 27 2c 20 2d 63 2c | 20 27 25 73 27 29 5c 6e |%s', -c,| '%s')\n|
|000022f0| 22 2c 0a 58 09 09 09 09 | 09 67 65 74 70 69 64 28 |",.X....|.getpid(|
|00002300| 29 2c 20 73 68 65 6c 6c | 2c 20 73 68 65 6c 6c 2c |), shell|, shell,|
|00002310| 20 63 6d 64 29 29 0a 58 | 09 09 09 20 2a 2f 0a 58 | cmd)).X|... */.X|
|00002320| 0a 58 23 20 69 66 64 65 | 66 20 62 61 64 5f 69 64 |.X# ifde|f bad_id|
|00002330| 65 61 0a 58 09 09 09 2f | 2a 20 66 69 6c 65 73 20 |ea.X.../|* files |
|00002340| 77 72 69 74 61 62 6c 65 | 20 62 79 20 6e 6f 6e 2d |writable| by non-|
|00002350| 6f 77 6e 65 72 20 61 72 | 65 20 61 20 6e 6f 2d 6e |owner ar|e a no-n|
|00002360| 6f 0a 58 09 09 09 20 2a | 2f 0a 58 09 09 09 7b 0a |o.X... *|/.X...{.|
|00002370| 58 09 09 09 09 73 74 72 | 75 63 74 20 73 74 61 74 |X....str|uct stat|
|00002380| 20 73 62 3b 0a 58 0a 58 | 09 09 09 09 69 66 20 28 | sb;.X.X|....if (|
|00002390| 30 20 21 3d 20 73 74 61 | 74 28 63 6d 64 2c 20 26 |0 != sta|t(cmd, &|
|000023a0| 73 62 29 29 20 7b 0a 58 | 09 09 09 09 09 66 70 75 |sb)) {.X|.....fpu|
|000023b0| 74 73 28 22 63 72 6f 6e | 64 3a 20 73 74 61 74 28 |ts("cron|d: stat(|
|000023c0| 32 29 3a 20 22 2c 20 73 | 74 64 65 72 72 29 3b 0a |2): ", s|tderr);.|
|000023d0| 58 09 09 09 09 09 70 65 | 72 72 6f 72 28 63 6d 64 |X.....pe|rror(cmd|
|000023e0| 29 3b 0a 58 09 09 09 09 | 09 5f 65 78 69 74 28 45 |);.X....|._exit(E|
|000023f0| 52 52 4f 52 5f 45 58 49 | 54 29 3b 0a 58 09 09 09 |RROR_EXI|T);.X...|
|00002400| 09 7d 20 65 6c 73 65 20 | 69 66 20 28 73 62 2e 73 |.} else |if (sb.s|
|00002410| 74 5f 6d 6f 64 65 20 26 | 20 30 32 32 29 20 7b 0a |t_mode &| 022) {.|
|00002420| 58 09 09 09 09 09 66 70 | 72 69 6e 74 66 28 73 74 |X.....fp|rintf(st|
|00002430| 64 65 72 72 2c 0a 58 09 | 09 09 09 09 22 63 72 6f |derr,.X.|...."cro|
|00002440| 6e 64 3a 20 25 73 20 77 | 72 69 74 61 62 6c 65 20 |nd: %s w|ritable |
|00002450| 62 79 20 6e 6f 6e 6f 77 | 6e 65 72 5c 6e 22 2c 0a |by nonow|ner\n",.|
|00002460| 58 09 09 09 09 09 09 63 | 6d 64 29 3b 0a 58 09 09 |X......c|md);.X..|
|00002470| 09 09 09 5f 65 78 69 74 | 28 45 52 52 4f 52 5f 45 |..._exit|(ERROR_E|
|00002480| 58 49 54 29 3b 0a 58 09 | 09 09 09 7d 20 65 6c 73 |XIT);.X.|...} els|
|00002490| 65 20 69 66 20 28 73 62 | 2e 73 74 5f 75 69 64 20 |e if (sb|.st_uid |
|000024a0| 26 20 30 32 32 29 20 7b | 0a 58 09 09 09 09 09 66 |& 022) {|.X.....f|
|000024b0| 70 72 69 6e 74 66 28 73 | 74 64 65 72 72 2c 0a 58 |printf(s|tderr,.X|
|000024c0| 09 09 09 09 09 22 63 72 | 6f 6e 64 3a 20 25 73 20 |....."cr|ond: %s |
|000024d0| 6f 77 6e 65 64 20 62 79 | 20 75 69 64 20 25 64 5c |owned by| uid %d\|
|000024e0| 6e 22 2c 0a 58 09 09 09 | 09 09 09 63 6d 64 2c 20 |n",.X...|...cmd, |
|000024f0| 73 62 2e 73 74 5f 75 69 | 64 29 3b 0a 58 09 09 09 |sb.st_ui|d);.X...|
|00002500| 09 09 5f 65 78 69 74 28 | 45 52 52 4f 52 5f 45 58 |.._exit(|ERROR_EX|
|00002510| 49 54 29 3b 0a 58 09 09 | 09 09 7d 0a 58 09 09 09 |IT);.X..|..}.X...|
|00002520| 7d 0a 58 23 20 65 6e 64 | 69 66 20 2f 2a 62 61 64 |}.X# end|if /*bad|
|00002530| 5f 69 64 65 61 2a 2f 0a | 58 0a 58 09 09 09 65 78 |_idea*/.|X.X...ex|
|00002540| 65 63 6c 65 28 73 68 65 | 6c 6c 2c 20 73 68 65 6c |ecle(she|ll, shel|
|00002550| 6c 2c 20 22 2d 63 22 2c | 20 63 6d 64 2c 20 28 63 |l, "-c",| cmd, (c|
|00002560| 68 61 72 20 2a 29 30 2c | 20 75 2d 3e 65 6e 76 70 |har *)0,| u->envp|
|00002570| 29 3b 0a 58 09 09 09 66 | 70 72 69 6e 74 66 28 73 |);.X...f|printf(s|
|00002580| 74 64 65 72 72 2c 20 22 | 65 78 65 63 6c 3a 20 63 |tderr, "|execl: c|
|00002590| 6f 75 6c 64 6e 27 74 20 | 65 78 65 63 20 60 25 73 |ouldn't |exec `%s|
|000025a0| 27 5c 6e 22 2c 20 73 68 | 65 6c 6c 29 3b 0a 58 09 |'\n", sh|ell);.X.|
|000025b0| 09 09 70 65 72 72 6f 72 | 28 22 65 78 65 63 6c 22 |..perror|("execl"|
|000025c0| 29 3b 0a 58 09 09 09 5f | 65 78 69 74 28 45 52 52 |);.X..._|exit(ERR|
|000025d0| 4f 52 5f 45 58 49 54 29 | 3b 0a 58 09 09 7d 0a 58 |OR_EXIT)|;.X..}.X|
|000025e0| 09 7d 0a 58 0a 58 09 63 | 68 69 6c 64 72 65 6e 2b |.}.X.X.c|hildren+|
|000025f0| 2b 3b 0a 58 0a 58 09 2f | 2a 20 6d 69 64 64 6c 65 |+;.X.X./|* middle|
|00002600| 20 70 72 6f 63 65 73 73 | 2c 20 63 68 69 6c 64 20 | process|, child |
|00002610| 6f 66 20 6f 72 69 67 69 | 6e 61 6c 20 63 72 6f 6e |of origi|nal cron|
|00002620| 2c 20 70 61 72 65 6e 74 | 20 6f 66 20 70 72 6f 63 |, parent| of proc|
|00002630| 65 73 73 20 72 75 6e 6e | 69 6e 67 0a 58 09 20 2a |ess runn|ing.X. *|
|00002640| 20 74 68 65 20 75 73 65 | 72 27 73 20 63 6f 6d 6d | the use|r's comm|
|00002650| 61 6e 64 2e 0a 58 09 20 | 2a 2f 0a 58 0a 58 09 44 |and..X. |*/.X.X.D|
|00002660| 65 62 75 67 28 44 50 52 | 4f 43 2c 20 28 22 5b 25 |ebug(DPR|OC, ("[%|
|00002670| 64 5d 20 63 68 69 6c 64 | 20 63 6f 6e 74 69 6e 75 |d] child| continu|
|00002680| 65 73 2c 20 63 6c 6f 73 | 69 6e 67 20 70 69 70 65 |es, clos|ing pipe|
|00002690| 73 5c 6e 22 2c 20 67 65 | 74 70 69 64 28 29 29 29 |s\n", ge|tpid()))|
|000026a0| 0a 58 0a 58 09 2f 2a 20 | 63 6c 6f 73 65 20 74 68 |.X.X./* |close th|
|000026b0| 65 20 65 6e 64 73 20 6f | 66 20 74 68 65 20 70 69 |e ends o|f the pi|
|000026c0| 70 65 20 74 68 61 74 20 | 77 69 6c 6c 20 6f 6e 6c |pe that |will onl|
|000026d0| 79 20 62 65 20 72 65 66 | 65 72 65 6e 63 65 64 20 |y be ref|erenced |
|000026e0| 69 6e 20 74 68 65 0a 58 | 09 20 2a 20 67 72 61 6e |in the.X|. * gran|
|000026f0| 64 63 68 69 6c 64 20 70 | 72 6f 63 65 73 73 2e 2e |dchild p|rocess..|
|00002700| 2e 0a 58 09 20 2a 2f 0a | 58 09 63 6c 6f 73 65 28 |..X. */.|X.close(|
|00002710| 73 74 64 69 6e 5f 70 69 | 70 65 5b 52 45 41 44 5f |stdin_pi|pe[READ_|
|00002720| 50 49 50 45 5d 29 3b 0a | 58 09 63 6c 6f 73 65 28 |PIPE]);.|X.close(|
|00002730| 73 74 64 6f 75 74 5f 70 | 69 70 65 5b 57 52 49 54 |stdout_p|ipe[WRIT|
|00002740| 45 5f 50 49 50 45 5d 29 | 3b 0a 58 0a 58 09 2f 2a |E_PIPE])|;.X.X./*|
|00002750| 0a 58 09 20 2a 20 77 72 | 69 74 65 2c 20 74 6f 20 |.X. * wr|ite, to |
|00002760| 74 68 65 20 70 69 70 65 | 20 63 6f 6e 6e 65 63 74 |the pipe| connect|
|00002770| 65 64 20 74 6f 20 63 68 | 69 6c 64 27 73 20 73 74 |ed to ch|ild's st|
|00002780| 64 69 6e 2c 20 61 6e 79 | 20 69 6e 70 75 74 20 73 |din, any| input s|
|00002790| 70 65 63 69 66 69 65 64 | 0a 58 09 20 2a 20 61 66 |pecified|.X. * af|
|000027a0| 74 65 72 20 61 20 25 20 | 69 6e 20 74 68 65 20 63 |ter a % |in the c|
|000027b0| 72 6f 6e 74 61 62 20 65 | 6e 74 72 79 2e 20 20 77 |rontab e|ntry. w|
|000027c0| 68 69 6c 65 20 77 65 20 | 63 6f 70 79 2c 20 63 6f |hile we |copy, co|
|000027d0| 6e 76 65 72 74 20 61 6e | 79 0a 58 09 20 2a 20 61 |nvert an|y.X. * a|
|000027e0| 64 64 69 74 69 6f 6e 61 | 6c 20 25 27 73 20 74 6f |dditiona|l %'s to|
|000027f0| 20 6e 65 77 6c 69 6e 65 | 73 2e 20 20 77 68 65 6e | newline|s. when|
|00002800| 20 64 6f 6e 65 2c 20 69 | 66 20 73 6f 6d 65 20 63 | done, i|f some c|
|00002810| 68 61 72 61 63 74 65 72 | 73 20 77 65 72 65 0a 58 |haracter|s were.X|
|00002820| 09 20 2a 20 77 72 69 74 | 74 65 6e 20 61 6e 64 20 |. * writ|ten and |
|00002830| 74 68 65 20 6c 61 73 74 | 20 6f 6e 65 20 77 61 73 |the last| one was|
|00002840| 6e 27 74 20 61 20 6e 65 | 77 6c 69 6e 65 2c 20 77 |n't a ne|wline, w|
|00002850| 72 69 74 65 20 61 20 6e | 65 77 6c 69 6e 65 2e 0a |rite a n|ewline..|
|00002860| 58 09 20 2a 0a 58 09 20 | 2a 20 4e 6f 74 65 20 74 |X. *.X. |* Note t|
|00002870| 68 61 74 20 69 66 20 74 | 68 65 20 69 6e 70 75 74 |hat if t|he input|
|00002880| 20 64 61 74 61 20 77 6f | 6e 27 74 20 66 69 74 20 | data wo|n't fit |
|00002890| 69 6e 74 6f 20 6f 6e 65 | 20 70 69 70 65 20 62 75 |into one| pipe bu|
|000028a0| 66 66 65 72 20 28 32 4b | 0a 58 09 20 2a 20 6f 72 |ffer (2K|.X. * or|
|000028b0| 20 34 4b 20 6f 6e 20 6d | 6f 73 74 20 42 53 44 20 | 4K on m|ost BSD |
|000028c0| 73 79 73 74 65 6d 73 29 | 2c 20 61 6e 64 20 74 68 |systems)|, and th|
|000028d0| 65 20 63 68 69 6c 64 20 | 64 6f 65 73 6e 27 74 20 |e child |doesn't |
|000028e0| 72 65 61 64 20 69 74 73 | 20 73 74 64 69 6e 2c 0a |read its| stdin,.|
|000028f0| 58 09 20 2a 20 77 65 20 | 77 6f 75 6c 64 20 62 6c |X. * we |would bl|
|00002900| 6f 63 6b 20 68 65 72 65 | 2e 20 20 74 68 65 20 73 |ock here|. the s|
|00002910| 6f 6c 75 74 69 6f 6e 2c | 20 6f 66 20 63 6f 75 72 |olution,| of cour|
|00002920| 73 65 2c 20 69 73 20 74 | 6f 20 66 6f 72 6b 20 61 |se, is t|o fork a|
|00002930| 67 61 69 6e 2e 0a 58 09 | 20 2a 2f 0a 58 0a 58 09 |gain..X.| */.X.X.|
|00002940| 69 66 20 28 2a 69 6e 70 | 75 74 5f 64 61 74 61 20 |if (*inp|ut_data |
|00002950| 26 26 20 66 6f 72 6b 28 | 29 20 3d 3d 20 30 29 20 |&& fork(|) == 0) |
|00002960| 7b 0a 58 09 09 72 65 67 | 69 73 74 65 72 20 46 49 |{.X..reg|ister FI|
|00002970| 4c 45 09 2a 6f 75 74 20 | 3d 20 66 64 6f 70 65 6e |LE.*out |= fdopen|
|00002980| 28 73 74 64 69 6e 5f 70 | 69 70 65 5b 57 52 49 54 |(stdin_p|ipe[WRIT|
|00002990| 45 5f 50 49 50 45 5d 2c | 20 22 77 22 29 3b 0a 58 |E_PIPE],| "w");.X|
|000029a0| 09 09 72 65 67 69 73 74 | 65 72 20 69 6e 74 09 6e |..regist|er int.n|
|000029b0| 65 65 64 5f 6e 65 77 6c | 69 6e 65 20 3d 20 46 41 |eed_newl|ine = FA|
|000029c0| 4c 53 45 3b 0a 58 09 09 | 72 65 67 69 73 74 65 72 |LSE;.X..|register|
|000029d0| 20 69 6e 74 09 65 73 63 | 61 70 65 64 20 3d 20 46 | int.esc|aped = F|
|000029e0| 41 4c 53 45 3b 0a 58 09 | 09 72 65 67 69 73 74 65 |ALSE;.X.|.registe|
|000029f0| 72 20 69 6e 74 09 63 68 | 3b 0a 58 0a 58 09 09 44 |r int.ch|;.X.X..D|
|00002a00| 65 62 75 67 28 44 50 52 | 4f 43 2c 20 28 22 5b 25 |ebug(DPR|OC, ("[%|
|00002a10| 64 5d 20 63 68 69 6c 64 | 32 20 73 65 6e 64 69 6e |d] child|2 sendin|
|00002a20| 67 20 64 61 74 61 20 74 | 6f 20 67 72 61 6e 64 63 |g data t|o grandc|
|00002a30| 68 69 6c 64 5c 6e 22 2c | 20 67 65 74 70 69 64 28 |hild\n",| getpid(|
|00002a40| 29 29 29 0a 58 0a 58 09 | 09 2f 2a 20 63 6c 6f 73 |))).X.X.|./* clos|
|00002a50| 65 20 74 68 65 20 70 69 | 70 65 20 77 65 20 64 6f |e the pi|pe we do|
|00002a60| 6e 27 74 20 75 73 65 2c | 20 73 69 6e 63 65 20 77 |n't use,| since w|
|00002a70| 65 20 69 6e 68 65 72 69 | 74 65 64 20 69 74 20 61 |e inheri|ted it a|
|00002a80| 6e 64 0a 58 09 09 20 2a | 20 61 72 65 20 70 61 72 |nd.X.. *| are par|
|00002a90| 74 20 6f 66 20 69 74 73 | 20 72 65 66 65 72 65 6e |t of its| referen|
|00002aa0| 63 65 20 63 6f 75 6e 74 | 20 6e 6f 77 2e 0a 58 09 |ce count| now..X.|
|00002ab0| 09 20 2a 2f 0a 58 09 09 | 63 6c 6f 73 65 28 73 74 |. */.X..|close(st|
|00002ac0| 64 6f 75 74 5f 70 69 70 | 65 5b 52 45 41 44 5f 50 |dout_pip|e[READ_P|
|00002ad0| 49 50 45 5d 29 3b 0a 58 | 0a 58 09 09 2f 2a 20 74 |IPE]);.X|.X../* t|
|00002ae0| 72 61 6e 73 6c 61 74 69 | 6f 6e 3a 0a 58 09 09 20 |ranslati|on:.X.. |
|00002af0| 2a 09 5c 25 20 2d 3e 20 | 25 0a 58 09 09 20 2a 09 |*.\% -> |%.X.. *.|
|00002b00| 25 20 20 2d 3e 20 5c 6e | 0a 58 09 09 20 2a 09 5c |% -> \n|.X.. *.\|
|00002b10| 78 20 2d 3e 20 5c 78 09 | 66 6f 72 20 61 6c 6c 20 |x -> \x.|for all |
|00002b20| 78 20 21 3d 20 25 0a 58 | 09 09 20 2a 2f 0a 58 09 |x != %.X|.. */.X.|
|00002b30| 09 77 68 69 6c 65 20 28 | 63 68 20 3d 20 2a 69 6e |.while (|ch = *in|
|00002b40| 70 75 74 5f 64 61 74 61 | 2b 2b 29 0a 58 09 09 7b |put_data|++).X..{|
|00002b50| 0a 58 09 09 09 69 66 20 | 28 65 73 63 61 70 65 64 |.X...if |(escaped|
|00002b60| 29 20 7b 0a 58 09 09 09 | 09 69 66 20 28 63 68 20 |) {.X...|.if (ch |
|00002b70| 21 3d 20 27 25 27 29 0a | 58 09 09 09 09 09 70 75 |!= '%').|X.....pu|
|00002b80| 74 63 28 27 5c 5c 27 2c | 20 6f 75 74 29 3b 0a 58 |tc('\\',| out);.X|
|00002b90| 09 09 09 7d 20 65 6c 73 | 65 20 7b 0a 58 09 09 09 |...} els|e {.X...|
|00002ba0| 09 69 66 20 28 63 68 20 | 3d 3d 20 27 25 27 29 0a |.if (ch |== '%').|
|00002bb0| 58 09 09 09 09 09 63 68 | 20 3d 20 27 5c 6e 27 3b |X.....ch| = '\n';|
|00002bc0| 0a 58 09 09 09 7d 0a 58 | 0a 58 09 09 09 69 66 20 |.X...}.X|.X...if |
|00002bd0| 28 21 28 65 73 63 61 70 | 65 64 20 3d 20 28 63 68 |(!(escap|ed = (ch|
|00002be0| 20 3d 3d 20 27 5c 5c 27 | 29 29 29 20 7b 0a 58 09 | == '\\'|))) {.X.|
|00002bf0| 09 09 09 70 75 74 63 28 | 63 68 2c 20 6f 75 74 29 |...putc(|ch, out)|
|00002c00| 3b 0a 58 09 09 09 09 6e | 65 65 64 5f 6e 65 77 6c |;.X....n|eed_newl|
|00002c10| 69 6e 65 20 3d 20 28 63 | 68 20 21 3d 20 27 5c 6e |ine = (c|h != '\n|
|00002c20| 27 29 3b 0a 58 09 09 09 | 7d 0a 58 09 09 7d 0a 58 |');.X...|}.X..}.X|
|00002c30| 09 09 69 66 20 28 65 73 | 63 61 70 65 64 29 0a 58 |..if (es|caped).X|
|00002c40| 09 09 09 70 75 74 63 28 | 27 5c 5c 27 2c 20 6f 75 |...putc(|'\\', ou|
|00002c50| 74 29 3b 0a 58 09 09 69 | 66 20 28 6e 65 65 64 5f |t);.X..i|f (need_|
|00002c60| 6e 65 77 6c 69 6e 65 29 | 0a 58 09 09 09 70 75 74 |newline)|.X...put|
|00002c70| 63 28 27 5c 6e 27 2c 20 | 6f 75 74 29 3b 0a 58 0a |c('\n', |out);.X.|
|00002c80| 58 09 09 2f 2a 20 63 6c | 6f 73 65 20 74 68 65 20 |X../* cl|ose the |
|00002c90| 70 69 70 65 2c 20 63 61 | 75 73 69 6e 67 20 61 6e |pipe, ca|using an|
|00002ca0| 20 45 4f 46 20 63 6f 6e | 64 69 74 69 6f 6e 2e 20 | EOF con|dition. |
|00002cb0| 20 66 63 6c 6f 73 65 20 | 63 61 75 73 65 73 0a 58 | fclose |causes.X|
|00002cc0| 09 09 20 2a 20 73 74 64 | 69 6e 5f 70 69 70 65 5b |.. * std|in_pipe[|
|00002cd0| 57 52 49 54 45 5f 50 49 | 50 45 5d 20 74 6f 20 62 |WRITE_PI|PE] to b|
|00002ce0| 65 20 63 6c 6f 73 65 64 | 2c 20 74 6f 6f 2e 0a 58 |e closed|, too..X|
|00002cf0| 09 09 20 2a 2f 0a 58 09 | 09 66 63 6c 6f 73 65 28 |.. */.X.|.fclose(|
|00002d00| 6f 75 74 29 3b 0a 58 0a | 58 09 09 44 65 62 75 67 |out);.X.|X..Debug|
|00002d10| 28 44 50 52 4f 43 2c 20 | 28 22 5b 25 64 5d 20 63 |(DPROC, |("[%d] c|
|00002d20| 68 69 6c 64 32 20 64 6f | 6e 65 20 73 65 6e 64 69 |hild2 do|ne sendi|
|00002d30| 6e 67 20 74 6f 20 67 72 | 61 6e 64 63 68 69 6c 64 |ng to gr|andchild|
|00002d40| 5c 6e 22 2c 20 67 65 74 | 70 69 64 28 29 29 29 0a |\n", get|pid())).|
|00002d50| 58 09 09 65 78 69 74 28 | 30 29 3b 0a 58 09 7d 0a |X..exit(|0);.X.}.|
|00002d60| 58 0a 58 09 2f 2a 20 63 | 6c 6f 73 65 20 74 68 65 |X.X./* c|lose the|
|00002d70| 20 70 69 70 65 20 74 6f | 20 74 68 65 20 67 72 61 | pipe to| the gra|
|00002d80| 6e 64 6b 69 64 64 69 65 | 27 73 20 73 74 64 69 6e |ndkiddie|'s stdin|
|00002d90| 2c 20 73 69 6e 63 65 20 | 69 74 73 20 77 69 63 6b |, since |its wick|
|00002da0| 65 64 20 75 6e 63 6c 65 | 0a 58 09 20 2a 20 65 72 |ed uncle|.X. * er|
|00002db0| 6e 69 65 20 62 61 63 6b | 20 74 68 65 72 65 20 68 |nie back| there h|
|00002dc0| 61 73 20 69 74 20 6f 70 | 65 6e 20 61 6e 64 20 77 |as it op|en and w|
|00002dd0| 69 6c 6c 20 63 6c 6f 73 | 65 20 69 74 20 77 68 65 |ill clos|e it whe|
|00002de0| 6e 20 68 65 27 73 20 64 | 6f 6e 65 2e 0a 58 09 20 |n he's d|one..X. |
|00002df0| 2a 2f 0a 58 09 63 6c 6f | 73 65 28 73 74 64 69 6e |*/.X.clo|se(stdin|
|00002e00| 5f 70 69 70 65 5b 57 52 | 49 54 45 5f 50 49 50 45 |_pipe[WR|ITE_PIPE|
|00002e10| 5d 29 3b 0a 58 0a 58 09 | 63 68 69 6c 64 72 65 6e |]);.X.X.|children|
|00002e20| 2b 2b 3b 0a 58 0a 58 09 | 2f 2a 0a 58 09 20 2a 20 |++;.X.X.|/*.X. * |
|00002e30| 72 65 61 64 20 6f 75 74 | 70 75 74 20 66 72 6f 6d |read out|put from|
|00002e40| 20 74 68 65 20 67 72 61 | 6e 64 63 68 69 6c 64 2e | the gra|ndchild.|
|00002e50| 20 20 69 74 27 73 20 73 | 74 64 65 72 72 20 68 61 | it's s|tderr ha|
|00002e60| 73 20 62 65 65 6e 20 72 | 65 64 69 72 65 63 74 65 |s been r|edirecte|
|00002e70| 64 20 74 6f 0a 58 09 20 | 2a 20 69 74 27 73 20 73 |d to.X. |* it's s|
|00002e80| 74 64 6f 75 74 2c 20 77 | 68 69 63 68 20 68 61 73 |tdout, w|hich has|
|00002e90| 20 62 65 65 6e 20 72 65 | 64 69 72 65 63 74 65 64 | been re|directed|
|00002ea0| 20 74 6f 20 6f 75 72 20 | 70 69 70 65 2e 20 20 69 | to our |pipe. i|
|00002eb0| 66 20 74 68 65 72 65 20 | 69 73 20 61 6e 79 0a 58 |f there |is any.X|
|00002ec0| 09 20 2a 20 6f 75 74 70 | 75 74 2c 20 77 65 27 6c |. * outp|ut, we'l|
|00002ed0| 6c 20 62 65 20 6d 61 69 | 6c 69 6e 67 20 69 74 20 |l be mai|ling it |
|00002ee0| 74 6f 20 74 68 65 20 75 | 73 65 72 20 77 68 6f 73 |to the u|ser whos|
|00002ef0| 65 20 63 72 6f 6e 74 61 | 62 20 74 68 69 73 20 69 |e cronta|b this i|
|00002f00| 73 2e 2e 2e 0a 58 09 20 | 2a 20 77 68 65 6e 20 74 |s....X. |* when t|
|00002f10| 68 65 20 67 72 61 6e 64 | 63 68 69 6c 64 20 65 78 |he grand|child ex|
|00002f20| 69 74 73 2c 20 77 65 27 | 6c 6c 20 67 65 74 20 45 |its, we'|ll get E|
|00002f30| 4f 46 2e 0a 58 09 20 2a | 2f 0a 58 0a 58 09 44 65 |OF..X. *|/.X.X.De|
|00002f40| 62 75 67 28 44 50 52 4f | 43 2c 20 28 22 5b 25 64 |bug(DPRO|C, ("[%d|
|00002f50| 5d 20 63 68 69 6c 64 20 | 72 65 61 64 69 6e 67 20 |] child |reading |
|00002f60| 6f 75 74 70 75 74 20 66 | 72 6f 6d 20 67 72 61 6e |output f|rom gran|
|00002f70| 64 63 68 69 6c 64 5c 6e | 22 2c 20 67 65 74 70 69 |dchild\n|", getpi|
|00002f80| 64 28 29 29 29 0a 58 0a | 58 09 7b 0a 58 09 09 72 |d())).X.|X.{.X..r|
|00002f90| 65 67 69 73 74 65 72 20 | 46 49 4c 45 09 2a 69 6e |egister |FILE.*in|
|00002fa0| 20 3d 20 66 64 6f 70 65 | 6e 28 73 74 64 6f 75 74 | = fdope|n(stdout|
|00002fb0| 5f 70 69 70 65 5b 52 45 | 41 44 5f 50 49 50 45 5d |_pipe[RE|AD_PIPE]|
|00002fc0| 2c 20 22 72 22 29 3b 0a | 58 09 09 72 65 67 69 73 |, "r");.|X..regis|
|00002fd0| 74 65 72 20 69 6e 74 09 | 63 68 20 3d 20 67 65 74 |ter int.|ch = get|
|00002fe0| 63 28 69 6e 29 3b 0a 58 | 0a 58 09 09 69 66 20 28 |c(in);.X|.X..if (|
|00002ff0| 63 68 20 21 3d 20 45 4f | 46 29 0a 58 09 09 7b 0a |ch != EO|F).X..{.|
|00003000| 58 09 09 09 72 65 67 69 | 73 74 65 72 20 46 49 4c |X...regi|ster FIL|
|00003010| 45 09 2a 6d 61 69 6c 3b | 0a 58 09 09 09 72 65 67 |E.*mail;|.X...reg|
|00003020| 69 73 74 65 72 20 69 6e | 74 09 62 79 74 65 73 20 |ister in|t.bytes |
|00003030| 3d 20 31 3b 0a 58 09 09 | 09 75 6e 69 6f 6e 20 77 |= 1;.X..|.union w|
|00003040| 61 69 74 09 73 74 61 74 | 75 73 3b 0a 58 0a 58 09 |ait.stat|us;.X.X.|
|00003050| 09 09 44 65 62 75 67 28 | 44 50 52 4f 43 7c 44 45 |..Debug(|DPROC|DE|
|00003060| 58 54 2c 0a 58 09 09 09 | 09 28 22 5b 25 64 5d 20 |XT,.X...|.("[%d] |
|00003070| 67 6f 74 20 64 61 74 61 | 20 28 25 78 3a 25 63 29 |got data| (%x:%c)|
|00003080| 20 66 72 6f 6d 20 67 72 | 61 6e 64 63 68 69 6c 64 | from gr|andchild|
|00003090| 5c 6e 22 2c 0a 58 09 09 | 09 09 09 67 65 74 70 69 |\n",.X..|...getpi|
|000030a0| 64 28 29 2c 20 63 68 2c | 20 63 68 29 29 0a 58 0a |d(), ch,| ch)).X.|
|000030b0| 58 09 09 09 2f 2a 20 67 | 65 74 20 6e 61 6d 65 20 |X.../* g|et name |
|000030c0| 6f 66 20 72 65 63 69 70 | 69 65 6e 74 2e 20 20 74 |of recip|ient. t|
|000030d0| 68 69 73 20 69 73 20 4d | 41 49 4c 54 4f 20 69 66 |his is M|AILTO if|
|000030e0| 20 73 65 74 20 74 6f 20 | 61 0a 58 09 09 09 20 2a | set to |a.X... *|
|000030f0| 20 76 61 6c 69 64 20 6c | 6f 63 61 6c 20 75 73 65 | valid l|ocal use|
|00003100| 72 6e 61 6d 65 3b 20 55 | 53 45 52 20 6f 74 68 65 |rname; U|SER othe|
|00003110| 72 77 69 73 65 2e 0a 58 | 09 09 09 20 2a 2f 0a 58 |rwise..X|... */.X|
|00003120| 09 09 09 69 66 20 28 6d | 61 69 6c 74 6f 29 0a 58 |...if (m|ailto).X|
|00003130| 09 09 09 7b 0a 58 09 09 | 09 09 2f 2a 20 4d 41 49 |...{.X..|../* MAI|
|00003140| 4c 54 4f 20 77 61 73 20 | 70 72 65 73 65 6e 74 20 |LTO was |present |
|00003150| 69 6e 20 74 68 65 20 65 | 6e 76 69 72 6f 6e 6d 65 |in the e|nvironme|
|00003160| 6e 74 0a 58 09 09 09 09 | 20 2a 2f 0a 58 09 09 09 |nt.X....| */.X...|
|00003170| 09 69 66 20 28 21 2a 6d | 61 69 6c 74 6f 29 0a 58 |.if (!*m|ailto).X|
|00003180| 09 09 09 09 7b 0a 58 09 | 09 09 09 09 2f 2a 20 2e |....{.X.|..../* .|
|00003190| 2e 2e 20 62 75 74 20 69 | 74 27 73 20 65 6d 70 74 |.. but i|t's empt|
|000031a0| 79 2e 20 73 65 74 20 74 | 6f 20 4e 55 4c 4c 0a 58 |y. set t|o NULL.X|
|000031b0| 09 09 09 09 09 20 2a 2f | 0a 58 09 09 09 09 09 6d |..... */|.X.....m|
|000031c0| 61 69 6c 74 6f 20 3d 20 | 4e 55 4c 4c 3b 0a 58 09 |ailto = |NULL;.X.|
|000031d0| 09 09 09 7d 0a 58 09 09 | 09 7d 0a 58 09 09 09 65 |...}.X..|.}.X...e|
|000031e0| 6c 73 65 0a 58 09 09 09 | 7b 0a 58 09 09 09 09 2f |lse.X...|{.X..../|
|000031f0| 2a 20 4d 41 49 4c 54 4f | 20 6e 6f 74 20 70 72 65 |* MAILTO| not pre|
|00003200| 73 65 6e 74 2c 20 73 65 | 74 20 74 6f 20 55 53 45 |sent, se|t to USE|
|00003210| 52 2e 0a 58 09 09 09 09 | 20 2a 2f 0a 58 09 09 09 |R..X....| */.X...|
|00003220| 09 6d 61 69 6c 74 6f 20 | 3d 20 75 73 65 72 6e 6d |.mailto |= usernm|
|00003230| 3b 0a 58 09 09 09 7d 0a | 58 09 09 0a 58 09 09 09 |;.X...}.|X...X...|
|00003240| 2f 2a 20 69 66 20 77 65 | 20 61 72 65 20 73 75 70 |/* if we| are sup|
|00003250| 70 6f 73 65 64 20 74 6f | 20 62 65 20 6d 61 69 6c |posed to| be mail|
|00003260| 69 6e 67 2c 20 4d 41 49 | 4c 54 4f 20 77 69 6c 6c |ing, MAI|LTO will|
|00003270| 0a 58 09 09 09 20 2a 20 | 62 65 20 6e 6f 6e 2d 4e |.X... * |be non-N|
|00003280| 55 4c 4c 2e 20 20 6f 6e | 6c 79 20 69 6e 20 74 68 |ULL. on|ly in th|
|00003290| 69 73 20 63 61 73 65 20 | 73 68 6f 75 6c 64 20 77 |is case |should w|
|000032a0| 65 20 73 65 74 0a 58 09 | 09 09 20 2a 20 75 70 20 |e set.X.|.. * up |
|000032b0| 74 68 65 20 6d 61 69 6c | 20 63 6f 6d 6d 61 6e 64 |the mail| command|
|000032c0| 20 61 6e 64 20 73 75 62 | 6a 65 63 74 73 20 61 6e | and sub|jects an|
|000032d0| 64 20 73 74 75 66 66 2e | 2e 2e 0a 58 09 09 09 20 |d stuff.|...X... |
|000032e0| 2a 2f 0a 58 0a 58 09 09 | 09 69 66 20 28 6d 61 69 |*/.X.X..|.if (mai|
|000032f0| 6c 74 6f 29 0a 58 09 09 | 09 7b 0a 58 09 09 09 09 |lto).X..|.{.X....|
|00003300| 65 78 74 65 72 6e 20 46 | 49 4c 45 09 2a 70 6f 70 |extern F|ILE.*pop|
|00003310| 65 6e 28 29 3b 0a 58 09 | 09 09 09 65 78 74 65 72 |en();.X.|...exter|
|00003320| 6e 20 63 68 61 72 09 2a | 73 70 72 69 6e 74 66 28 |n char.*|sprintf(|
|00003330| 29 2c 20 2a 70 72 69 6e | 74 5f 63 6d 64 28 29 3b |), *prin|t_cmd();|
|00003340| 0a 58 09 09 09 09 72 65 | 67 69 73 74 65 72 20 63 |.X....re|gister c|
|00003350| 68 61 72 09 2a 2a 65 6e | 76 3b 0a 58 09 09 09 09 |har.**en|v;.X....|
|00003360| 61 75 74 6f 20 63 68 61 | 72 09 6d 61 69 6c 63 6d |auto cha|r.mailcm|
|00003370| 64 5b 4d 41 58 5f 43 4f | 4d 4d 41 4e 44 5d 3b 0a |d[MAX_CO|MMAND];.|
|00003380| 58 09 09 09 09 61 75 74 | 6f 20 63 68 61 72 09 68 |X....aut|o char.h|
|00003390| 6f 73 74 6e 61 6d 65 5b | 4d 41 58 48 4f 53 54 4e |ostname[|MAXHOSTN|
|000033a0| 41 4d 45 4c 45 4e 5d 3b | 0a 58 0a 58 09 09 09 09 |AMELEN];|.X.X....|
|000033b0| 28 76 6f 69 64 29 20 67 | 65 74 68 6f 73 74 6e 61 |(void) g|ethostna|
|000033c0| 6d 65 28 68 6f 73 74 6e | 61 6d 65 2c 20 4d 41 58 |me(hostn|ame, MAX|
|000033d0| 48 4f 53 54 4e 41 4d 45 | 4c 45 4e 29 3b 0a 58 09 |HOSTNAME|LEN);.X.|
|000033e0| 09 09 09 28 76 6f 69 64 | 29 20 73 70 72 69 6e 74 |...(void|) sprint|
|000033f0| 66 28 6d 61 69 6c 63 6d | 64 2c 20 4d 41 49 4c 43 |f(mailcm|d, MAILC|
|00003400| 4d 44 2c 20 6d 61 69 6c | 74 6f 29 3b 0a 58 09 09 |MD, mail|to);.X..|
|00003410| 09 09 69 66 20 28 21 28 | 6d 61 69 6c 20 3d 20 70 |..if (!(|mail = p|
|00003420| 6f 70 65 6e 28 6d 61 69 | 6c 63 6d 64 2c 20 22 77 |open(mai|lcmd, "w|
|00003430| 22 29 29 29 0a 58 09 09 | 09 09 7b 0a 58 09 09 09 |"))).X..|..{.X...|
|00003440| 09 09 70 65 72 72 6f 72 | 28 4d 41 49 4c 43 4d 44 |..perror|(MAILCMD|
|00003450| 29 3b 0a 58 09 09 09 09 | 09 28 76 6f 69 64 29 20 |);.X....|.(void) |
|00003460| 5f 65 78 69 74 28 45 52 | 52 4f 52 5f 45 58 49 54 |_exit(ER|ROR_EXIT|
|00003470| 29 3b 0a 58 09 09 09 09 | 7d 0a 58 09 09 09 09 66 |);.X....|}.X....f|
|00003480| 70 72 69 6e 74 66 28 6d | 61 69 6c 2c 20 22 46 72 |printf(m|ail, "Fr|
|00003490| 6f 6d 3a 20 72 6f 6f 74 | 20 28 43 72 6f 6e 20 44 |om: root| (Cron D|
|000034a0| 61 65 6d 6f 6e 29 5c 6e | 22 29 3b 0a 58 09 09 09 |aemon)\n|");.X...|
|000034b0| 09 66 70 72 69 6e 74 66 | 28 6d 61 69 6c 2c 20 22 |.fprintf|(mail, "|
|000034c0| 54 6f 3a 20 25 73 5c 6e | 22 2c 20 6d 61 69 6c 74 |To: %s\n|", mailt|
|000034d0| 6f 29 3b 0a 58 09 09 09 | 09 66 70 72 69 6e 74 66 |o);.X...|.fprintf|
|000034e0| 28 6d 61 69 6c 2c 0a 58 | 09 09 09 09 22 53 75 62 |(mail,.X|...."Sub|
|000034f0| 6a 65 63 74 3a 20 63 72 | 6f 6e 20 66 6f 72 20 25 |ject: cr|on for %|
|00003500| 73 40 25 73 20 73 61 69 | 64 20 74 68 69 73 5c 6e |s@%s sai|d this\n|
|00003510| 22 2c 0a 58 09 09 09 09 | 09 75 73 65 72 6e 6d 2c |",.X....|.usernm,|
|00003520| 20 66 69 72 73 74 5f 77 | 6f 72 64 28 68 6f 73 74 | first_w|ord(host|
|00003530| 6e 61 6d 65 2c 20 22 2e | 22 29 0a 58 09 09 09 09 |name, ".|").X....|
|00003540| 29 3b 0a 58 09 09 09 09 | 66 70 72 69 6e 74 66 28 |);.X....|fprintf(|
|00003550| 6d 61 69 6c 2c 20 22 44 | 61 74 65 3a 20 25 73 22 |mail, "D|ate: %s"|
|00003560| 2c 20 63 74 69 6d 65 28 | 26 54 61 72 67 65 74 54 |, ctime(|&TargetT|
|00003570| 69 6d 65 29 29 3b 0a 58 | 09 09 09 09 66 70 72 69 |ime));.X|....fpri|
|00003580| 6e 74 66 28 6d 61 69 6c | 2c 20 22 58 2d 43 72 6f |ntf(mail|, "X-Cro|
|00003590| 6e 2d 43 6d 64 3a 20 3c | 25 73 3e 5c 6e 22 2c 20 |n-Cmd: <|%s>\n", |
|000035a0| 63 6d 64 29 3b 0a 58 09 | 09 09 09 66 6f 72 20 28 |cmd);.X.|...for (|
|000035b0| 65 6e 76 20 3d 20 75 2d | 3e 65 6e 76 70 3b 20 20 |env = u-|>envp; |
|000035c0| 2a 65 6e 76 3b 20 20 65 | 6e 76 2b 2b 29 0a 58 09 |*env; e|nv++).X.|
|000035d0| 09 09 09 09 66 70 72 69 | 6e 74 66 28 6d 61 69 6c |....fpri|ntf(mail|
|000035e0| 2c 20 22 58 2d 43 72 6f | 6e 2d 45 6e 76 3a 20 3c |, "X-Cro|n-Env: <|
|000035f0| 25 73 3e 5c 6e 22 2c 0a | 58 09 09 09 09 09 09 2a |%s>\n",.|X......*|
|00003600| 65 6e 76 29 3b 0a 58 09 | 09 09 09 66 70 72 69 6e |env);.X.|...fprin|
|00003610| 74 66 28 6d 61 69 6c 2c | 20 22 5c 6e 22 29 3b 0a |tf(mail,| "\n");.|
|00003620| 58 0a 58 09 09 09 09 2f | 2a 20 74 68 69 73 20 77 |X.X..../|* this w|
|00003630| 61 73 20 74 68 65 20 66 | 69 72 73 74 20 63 68 61 |as the f|irst cha|
|00003640| 72 20 66 72 6f 6d 20 74 | 68 65 20 70 69 70 65 0a |r from t|he pipe.|
|00003650| 58 09 09 09 09 20 2a 2f | 0a 58 09 09 09 09 70 75 |X.... */|.X....pu|
|00003660| 74 63 28 63 68 2c 20 6d | 61 69 6c 29 3b 0a 58 09 |tc(ch, m|ail);.X.|
|00003670| 09 09 7d 0a 58 0a 58 09 | 09 09 2f 2a 20 77 65 20 |..}.X.X.|../* we |
|00003680| 68 61 76 65 20 74 6f 20 | 72 65 61 64 20 74 68 65 |have to |read the|
|00003690| 20 69 6e 70 75 74 20 70 | 69 70 65 20 6e 6f 20 6d | input p|ipe no m|
|000036a0| 61 74 74 65 72 20 77 68 | 65 74 68 65 72 0a 58 09 |atter wh|ether.X.|
|000036b0| 09 09 20 2a 20 77 65 20 | 6d 61 69 6c 20 6f 72 20 |.. * we |mail or |
|000036c0| 6e 6f 74 2c 20 62 75 74 | 20 6f 62 76 69 6f 75 73 |not, but| obvious|
|000036d0| 6c 79 20 77 65 20 6f 6e | 6c 79 20 77 72 69 74 65 |ly we on|ly write|
|000036e0| 20 74 6f 0a 58 09 09 09 | 20 2a 20 6d 61 69 6c 20 | to.X...| * mail |
|000036f0| 70 69 70 65 20 69 66 20 | 77 65 20 41 52 45 20 6d |pipe if |we ARE m|
|00003700| 61 69 6c 69 6e 67 2e 0a | 58 09 09 09 20 2a 2f 0a |ailing..|X... */.|
|00003710| 58 0a 58 09 09 09 77 68 | 69 6c 65 20 28 45 4f 46 |X.X...wh|ile (EOF|
|00003720| 20 21 3d 20 28 63 68 20 | 3d 20 67 65 74 63 28 69 | != (ch |= getc(i|
|00003730| 6e 29 29 29 0a 58 09 09 | 09 7b 0a 58 09 09 09 09 |n))).X..|.{.X....|
|00003740| 62 79 74 65 73 2b 2b 3b | 0a 58 09 09 09 09 69 66 |bytes++;|.X....if|
|00003750| 20 28 6d 61 69 6c 74 6f | 29 0a 58 09 09 09 09 09 | (mailto|).X.....|
|00003760| 70 75 74 63 28 63 68 2c | 20 6d 61 69 6c 29 3b 0a |putc(ch,| mail);.|
|00003770| 58 09 09 09 7d 0a 58 0a | 58 09 09 09 2f 2a 20 6f |X...}.X.|X.../* o|
|00003780| 6e 6c 79 20 63 6c 6f 73 | 65 20 70 69 70 65 20 69 |nly clos|e pipe i|
|00003790| 66 20 77 65 20 6f 70 65 | 6e 65 64 20 69 74 20 2d |f we ope|ned it -|
|000037a0| 2d 20 69 2e 65 2e 2c 20 | 77 65 27 72 65 0a 58 09 |- i.e., |we're.X.|
|000037b0| 09 09 20 2a 20 6d 61 69 | 6c 69 6e 67 2e 2e 2e 0a |.. * mai|ling....|
|000037c0| 58 09 09 09 20 2a 2f 0a | 58 0a 58 09 09 09 69 66 |X... */.|X.X...if|
|000037d0| 20 28 6d 61 69 6c 74 6f | 29 20 7b 0a 58 09 09 09 | (mailto|) {.X...|
|000037e0| 09 44 65 62 75 67 28 44 | 50 52 4f 43 2c 20 28 22 |.Debug(D|PROC, ("|
|000037f0| 5b 25 64 5d 20 63 6c 6f | 73 69 6e 67 20 70 69 70 |[%d] clo|sing pip|
|00003800| 65 20 74 6f 20 6d 61 69 | 6c 5c 6e 22 2c 0a 58 09 |e to mai|l\n",.X.|
|00003810| 09 09 09 09 67 65 74 70 | 69 64 28 29 29 29 0a 58 |....getp|id())).X|
|00003820| 09 09 09 09 2f 2a 20 4e | 6f 74 65 3a 20 74 68 65 |..../* N|ote: the|
|00003830| 20 70 63 6c 6f 73 65 20 | 77 69 6c 6c 20 70 72 6f | pclose |will pro|
|00003840| 62 61 62 6c 79 20 73 65 | 65 0a 58 09 09 09 09 20 |bably se|e.X.... |
|00003850| 2a 20 74 68 65 20 74 65 | 72 6d 69 6e 61 74 69 6f |* the te|rminatio|
|00003860| 6e 20 6f 66 20 74 68 65 | 20 67 72 61 6e 64 63 68 |n of the| grandch|
|00003870| 69 6c 64 0a 58 09 09 09 | 09 20 2a 20 69 6e 20 61 |ild.X...|. * in a|
|00003880| 64 64 69 74 69 6f 6e 20 | 74 6f 20 74 68 65 20 6d |ddition |to the m|
|00003890| 61 69 6c 20 70 72 6f 63 | 65 73 73 2c 20 73 69 6e |ail proc|ess, sin|
|000038a0| 63 65 0a 58 09 09 09 09 | 20 2a 20 69 74 20 28 74 |ce.X....| * it (t|
|000038b0| 68 65 20 67 72 61 6e 64 | 63 68 69 6c 64 29 20 69 |he grand|child) i|
|000038c0| 73 20 6c 69 6b 65 6c 79 | 20 74 6f 20 65 78 69 74 |s likely| to exit|
|000038d0| 0a 58 09 09 09 09 20 2a | 20 61 66 74 65 72 20 63 |.X.... *| after c|
|000038e0| 6c 6f 73 69 6e 67 20 69 | 74 73 20 73 74 64 6f 75 |losing i|ts stdou|
|000038f0| 74 2e 0a 58 09 09 09 09 | 20 2a 2f 0a 58 09 09 09 |t..X....| */.X...|
|00003900| 09 73 74 61 74 75 73 2e | 77 5f 73 74 61 74 75 73 |.status.|w_status|
|00003910| 20 3d 20 70 63 6c 6f 73 | 65 28 6d 61 69 6c 29 3b | = pclos|e(mail);|
|00003920| 0a 58 09 09 09 7d 0a 58 | 0a 58 09 09 09 2f 2a 20 |.X...}.X|.X.../* |
|00003930| 69 66 20 74 68 65 72 65 | 20 77 61 73 20 6f 75 74 |if there| was out|
|00003940| 70 75 74 20 61 6e 64 20 | 77 65 20 63 6f 75 6c 64 |put and |we could|
|00003950| 20 6e 6f 74 20 6d 61 69 | 6c 20 69 74 2c 0a 58 09 | not mai|l it,.X.|
|00003960| 09 09 20 2a 20 6c 6f 67 | 20 74 68 65 20 66 61 63 |.. * log| the fac|
|00003970| 74 73 20 73 6f 20 74 68 | 65 20 70 6f 6f 72 20 75 |ts so th|e poor u|
|00003980| 73 65 72 20 63 61 6e 20 | 66 69 67 75 72 65 20 6f |ser can |figure o|
|00003990| 75 74 0a 58 09 09 09 20 | 2a 20 77 68 61 74 27 73 |ut.X... |* what's|
|000039a0| 20 67 6f 69 6e 67 20 6f | 6e 2e 0a 58 09 09 09 20 | going o|n..X... |
|000039b0| 2a 2f 0a 58 09 09 09 69 | 66 20 28 6d 61 69 6c 74 |*/.X...i|f (mailt|
|000039c0| 6f 20 26 26 20 73 74 61 | 74 75 73 2e 77 5f 73 74 |o && sta|tus.w_st|
|000039d0| 61 74 75 73 29 20 7b 0a | 58 09 09 09 09 63 68 61 |atus) {.|X....cha|
|000039e0| 72 20 62 75 66 5b 4d 41 | 58 5f 54 45 4d 50 53 54 |r buf[MA|X_TEMPST|
|000039f0| 52 5d 3b 0a 58 0a 58 09 | 09 09 09 73 70 72 69 6e |R];.X.X.|...sprin|
|00003a00| 74 66 28 62 75 66 2c 0a | 58 09 09 09 22 6d 61 69 |tf(buf,.|X..."mai|
|00003a10| 6c 65 64 20 25 64 20 62 | 79 74 65 25 73 20 6f 66 |led %d b|yte%s of|
|00003a20| 20 6f 75 74 70 75 74 20 | 62 75 74 20 67 6f 74 20 | output |but got |
|00003a30| 73 74 61 74 75 73 20 30 | 78 25 30 34 78 5c 6e 22 |status 0|x%04x\n"|
|00003a40| 2c 0a 58 09 09 09 09 09 | 62 79 74 65 73 2c 20 28 |,.X.....|bytes, (|
|00003a50| 62 79 74 65 73 3d 3d 31 | 29 3f 22 22 3a 22 73 22 |bytes==1|)?"":"s"|
|00003a60| 2c 0a 58 09 09 09 09 09 | 73 74 61 74 75 73 2e 77 |,.X.....|status.w|
|00003a70| 5f 73 74 61 74 75 73 29 | 3b 0a 58 09 09 09 09 6c |_status)|;.X....l|
|00003a80| 6f 67 5f 69 74 28 75 73 | 65 72 6e 6d 2c 20 67 65 |og_it(us|ernm, ge|
|00003a90| 74 70 69 64 28 29 2c 20 | 22 4d 41 49 4c 22 2c 20 |tpid(), |"MAIL", |
|00003aa0| 62 75 66 29 3b 0a 58 09 | 09 09 7d 0a 58 0a 58 09 |buf);.X.|..}.X.X.|
|00003ab0| 09 7d 20 2f 2a 69 66 20 | 64 61 74 61 20 66 72 6f |.} /*if |data fro|
|00003ac0| 6d 20 67 72 61 6e 64 63 | 68 69 6c 64 2a 2f 0a 58 |m grandc|hild*/.X|
|00003ad0| 0a 58 09 09 44 65 62 75 | 67 28 44 50 52 4f 43 2c |.X..Debu|g(DPROC,|
|00003ae0| 20 28 22 5b 25 64 5d 20 | 67 6f 74 20 45 4f 46 20 | ("[%d] |got EOF |
|00003af0| 66 72 6f 6d 20 67 72 61 | 6e 64 63 68 69 6c 64 5c |from gra|ndchild\|
|00003b00| 6e 22 2c 20 67 65 74 70 | 69 64 28 29 29 29 0a 58 |n", getp|id())).X|
|00003b10| 0a 58 09 09 66 63 6c 6f | 73 65 28 69 6e 29 3b 09 |.X..fclo|se(in);.|
|00003b20| 2f 2a 20 61 6c 73 6f 20 | 63 6c 6f 73 65 73 20 73 |/* also |closes s|
|00003b30| 74 64 6f 75 74 5f 70 69 | 70 65 5b 52 45 41 44 5f |tdout_pi|pe[READ_|
|00003b40| 50 49 50 45 5d 20 2a 2f | 0a 58 09 7d 0a 58 0a 58 |PIPE] */|.X.}.X.X|
|00003b50| 23 69 66 20 64 65 66 69 | 6e 65 64 28 42 53 44 29 |#if defi|ned(BSD)|
|00003b60| 0a 58 09 2f 2a 20 77 61 | 69 74 20 66 6f 72 20 63 |.X./* wa|it for c|
|00003b70| 68 69 6c 64 72 65 6e 20 | 74 6f 20 64 69 65 2e 0a |hildren |to die..|
|00003b80| 58 09 20 2a 2f 0a 58 09 | 66 6f 72 20 28 3b 20 20 |X. */.X.|for (; |
|00003b90| 63 68 69 6c 64 72 65 6e | 20 3e 20 30 3b 20 20 63 |children| > 0; c|
|00003ba0| 68 69 6c 64 72 65 6e 2d | 2d 29 0a 58 09 7b 0a 58 |hildren-|-).X.{.X|
|00003bb0| 09 09 69 6e 74 09 09 70 | 69 64 3b 0a 58 09 09 75 |..int..p|id;.X..u|
|00003bc0| 6e 69 6f 6e 20 77 61 69 | 74 09 77 61 69 74 65 72 |nion wai|t.waiter|
|00003bd0| 3b 0a 58 0a 58 09 09 44 | 65 62 75 67 28 44 50 52 |;.X.X..D|ebug(DPR|
|00003be0| 4f 43 2c 20 28 22 5b 25 | 64 5d 20 77 61 69 74 69 |OC, ("[%|d] waiti|
|00003bf0| 6e 67 20 66 6f 72 20 67 | 72 61 6e 64 63 68 69 6c |ng for g|randchil|
|00003c00| 64 20 23 25 64 20 74 6f | 20 66 69 6e 69 73 68 5c |d #%d to| finish\|
|00003c10| 6e 22 2c 0a 58 09 09 09 | 67 65 74 70 69 64 28 29 |n",.X...|getpid()|
|00003c20| 2c 20 63 68 69 6c 64 72 | 65 6e 29 29 0a 58 09 09 |, childr|en)).X..|
|00003c30| 70 69 64 20 3d 20 77 61 | 69 74 28 26 77 61 69 74 |pid = wa|it(&wait|
|00003c40| 65 72 29 3b 0a 58 09 09 | 69 66 20 28 70 69 64 20 |er);.X..|if (pid |
|00003c50| 3c 20 4f 4b 29 20 7b 0a | 58 09 09 09 44 65 62 75 |< OK) {.|X...Debu|
|00003c60| 67 28 44 50 52 4f 43 2c | 20 28 22 5b 25 64 5d 20 |g(DPROC,| ("[%d] |
|00003c70| 6e 6f 20 6d 6f 72 65 20 | 67 72 61 6e 64 63 68 69 |no more |grandchi|
|00003c80| 6c 64 72 65 6e 2d 2d 6d | 61 69 6c 20 77 72 69 74 |ldren--m|ail writ|
|00003c90| 74 65 6e 3f 5c 6e 22 2c | 0a 58 09 09 09 09 67 65 |ten?\n",|.X....ge|
|00003ca0| 74 70 69 64 28 29 29 29 | 0a 58 09 09 09 62 72 65 |tpid()))|.X...bre|
|00003cb0| 61 6b 3b 0a 58 09 09 7d | 0a 58 09 09 44 65 62 75 |ak;.X..}|.X..Debu|
|00003cc0| 67 28 44 50 52 4f 43 2c | 20 28 22 5b 25 64 5d 20 |g(DPROC,| ("[%d] |
|00003cd0| 67 72 61 6e 64 63 68 69 | 6c 64 20 23 25 64 20 66 |grandchi|ld #%d f|
|00003ce0| 69 6e 69 73 68 65 64 2c | 20 73 74 61 74 75 73 3d |inished,| status=|
|00003cf0| 25 30 34 78 22 2c 0a 58 | 09 09 09 67 65 74 70 69 |%04x",.X|...getpi|
|00003d00| 64 28 29 2c 20 70 69 64 | 2c 20 77 61 69 74 65 72 |d(), pid|, waiter|
|00003d10| 2e 77 5f 73 74 61 74 75 | 73 29 29 0a 58 09 09 69 |.w_statu|s)).X..i|
|00003d20| 66 20 28 77 61 69 74 65 | 72 2e 77 5f 63 6f 72 65 |f (waite|r.w_core|
|00003d30| 64 75 6d 70 29 0a 58 09 | 09 09 44 65 62 75 67 28 |dump).X.|..Debug(|
|00003d40| 44 50 52 4f 43 2c 20 28 | 22 2c 20 64 75 6d 70 65 |DPROC, (|", dumpe|
|00003d50| 64 20 63 6f 72 65 22 29 | 29 0a 58 09 09 44 65 62 |d core")|).X..Deb|
|00003d60| 75 67 28 44 50 52 4f 43 | 2c 20 28 22 5c 6e 22 29 |ug(DPROC|, ("\n")|
|00003d70| 29 0a 58 09 7d 0a 58 23 | 65 6e 64 69 66 20 2f 2a |).X.}.X#|endif /*|
|00003d80| 42 53 44 2a 2f 0a 58 7d | 0a 58 0a 58 0a 58 23 69 |BSD*/.X}|.X.X.X#i|
|00003d90| 66 20 64 65 66 69 6e 65 | 64 28 73 65 71 75 65 6e |f define|d(sequen|
|00003da0| 74 29 0a 58 2f 2a 20 44 | 79 6e 69 78 20 28 53 65 |t).X/* D|ynix (Se|
|00003db0| 71 75 65 6e 74 29 20 68 | 61 63 6b 20 74 6f 20 70 |quent) h|ack to p|
|00003dc0| 75 74 20 74 68 65 20 75 | 73 65 72 20 61 73 73 6f |ut the u|ser asso|
|00003dd0| 63 69 61 74 65 64 20 77 | 69 74 68 0a 58 20 2a 20 |ciated w|ith.X * |
|00003de0| 74 68 65 20 70 61 73 73 | 65 64 20 75 73 65 72 20 |the pass|ed user |
|00003df0| 73 74 72 75 63 74 75 72 | 65 20 69 6e 74 6f 20 74 |structur|e into t|
|00003e00| 68 65 20 41 54 54 20 75 | 6e 69 76 65 72 73 65 20 |he ATT u|niverse |
|00003e10| 69 66 0a 58 20 2a 20 6e | 65 63 65 73 73 61 72 79 |if.X * n|ecessary|
|00003e20| 2e 20 20 57 65 20 68 61 | 76 65 20 74 6f 20 64 69 |. We ha|ve to di|
|00003e30| 67 20 74 68 65 20 67 65 | 63 6f 73 20 69 6e 66 6f |g the ge|cos info|
|00003e40| 20 6f 75 74 20 6f 66 0a | 58 20 2a 20 74 68 65 20 | out of.|X * the |
|00003e50| 75 73 65 72 27 73 20 70 | 61 73 73 77 6f 72 64 20 |user's p|assword |
|00003e60| 65 6e 74 72 79 20 74 6f | 20 73 65 65 20 69 66 20 |entry to| see if |
|00003e70| 74 68 65 20 6d 61 67 69 | 63 0a 58 20 2a 20 22 75 |the magi|c.X * "u|
|00003e80| 6e 69 76 65 72 73 65 28 | 61 74 74 29 22 20 73 74 |niverse(|att)" st|
|00003e90| 72 69 6e 67 20 69 73 20 | 70 72 65 73 65 6e 74 2e |ring is |present.|
|00003ea0| 20 20 49 66 20 77 65 20 | 64 6f 20 63 68 61 6e 67 | If we |do chang|
|00003eb0| 65 0a 58 20 2a 20 74 68 | 65 20 75 6e 69 76 65 72 |e.X * th|e univer|
|00003ec0| 73 65 2c 20 61 6c 73 6f | 20 73 65 74 20 22 4c 4f |se, also| set "LO|
|00003ed0| 47 4e 41 4d 45 22 2e 0a | 58 20 2a 2f 0a 58 0a 76 |GNAME"..|X */.X.v|
|00003ee0| 6f 69 64 0a 64 6f 5f 75 | 6e 69 76 28 75 29 0a 58 |oid.do_u|niv(u).X|
|00003ef0| 09 75 73 65 72 09 2a 75 | 3b 0a 58 7b 0a 58 09 73 |.user.*u|;.X{.X.s|
|00003f00| 74 72 75 63 74 09 70 61 | 73 73 77 64 09 2a 70 3b |truct.pa|sswd.*p;|
|00003f10| 0a 58 09 63 68 61 72 09 | 2a 73 3b 0a 58 09 69 6e |.X.char.|*s;.X.in|
|00003f20| 74 09 69 3b 0a 58 09 63 | 68 61 72 09 65 6e 76 73 |t.i;.X.c|har.envs|
|00003f30| 74 72 5b 4d 41 58 5f 45 | 4e 56 53 54 52 5d 2c 20 |tr[MAX_E|NVSTR], |
|00003f40| 2a 2a 65 6e 76 5f 73 65 | 74 28 29 3b 0a 58 0a 58 |**env_se|t();.X.X|
|00003f50| 09 70 20 3d 20 67 65 74 | 70 77 75 69 64 28 75 2d |.p = get|pwuid(u-|
|00003f60| 3e 75 69 64 29 3b 0a 58 | 09 28 76 6f 69 64 29 20 |>uid);.X|.(void) |
|00003f70| 65 6e 64 70 77 65 6e 74 | 28 29 3b 0a 58 0a 58 09 |endpwent|();.X.X.|
|00003f80| 69 66 20 28 70 20 3d 3d | 20 4e 55 4c 4c 29 0a 58 |if (p ==| NULL).X|
|00003f90| 09 09 72 65 74 75 72 6e | 3b 0a 58 0a 58 09 73 20 |..return|;.X.X.s |
|00003fa0| 3d 20 70 2d 3e 70 77 5f | 67 65 63 6f 73 3b 0a 58 |= p->pw_|gecos;.X|
|00003fb0| 0a 58 09 66 6f 72 20 28 | 69 20 3d 20 30 3b 20 69 |.X.for (|i = 0; i|
|00003fc0| 20 3c 20 34 3b 20 69 2b | 2b 29 0a 58 09 7b 0a 58 | < 4; i+|+).X.{.X|
|00003fd0| 09 09 69 66 20 28 28 73 | 20 3d 20 69 6e 64 65 78 |..if ((s| = index|
|00003fe0| 28 73 2c 20 27 2c 27 29 | 29 20 3d 3d 20 4e 55 4c |(s, ',')|) == NUL|
|00003ff0| 4c 29 0a 58 09 09 09 72 | 65 74 75 72 6e 3b 0a 58 |L).X...r|eturn;.X|
|00004000| 09 09 73 2b 2b 3b 0a 58 | 09 7d 0a 58 09 69 66 20 |..s++;.X|.}.X.if |
|00004010| 28 73 74 72 63 6d 70 28 | 73 2c 20 22 75 6e 69 76 |(strcmp(|s, "univ|
|00004020| 65 72 73 65 28 61 74 74 | 29 22 29 29 0a 58 09 09 |erse(att|)")).X..|
|00004030| 72 65 74 75 72 6e 3b 0a | 58 0a 58 09 28 76 6f 69 |return;.|X.X.(voi|
|00004040| 64 29 20 73 70 72 69 6e | 74 66 28 65 6e 76 73 74 |d) sprin|tf(envst|
|00004050| 72 2c 20 22 4c 4f 47 4e | 41 4d 45 3d 25 73 22 2c |r, "LOGN|AME=%s",|
|00004060| 20 70 2d 3e 70 77 5f 6e | 61 6d 65 29 3b 0a 58 09 | p->pw_n|ame);.X.|
|00004070| 75 2d 3e 65 6e 76 70 20 | 3d 20 65 6e 76 5f 73 65 |u->envp |= env_se|
|00004080| 74 28 75 2d 3e 65 6e 76 | 70 2c 20 65 6e 76 73 74 |t(u->env|p, envst|
|00004090| 72 29 3b 0a 58 0a 58 09 | 28 76 6f 69 64 29 20 75 |r);.X.X.|(void) u|
|000040a0| 6e 69 76 65 72 73 65 28 | 55 5f 41 54 54 29 3b 0a |niverse(|U_ATT);.|
|000040b0| 58 7d 0a 58 23 65 6e 64 | 69 66 0a 45 4e 44 5f 4f |X}.X#end|if.END_O|
|000040c0| 46 5f 46 49 4c 45 0a 69 | 66 20 74 65 73 74 20 31 |F_FILE.i|f test 1|
|000040d0| 34 39 36 31 20 2d 6e 65 | 20 60 77 63 20 2d 63 20 |4961 -ne| `wc -c |
|000040e0| 3c 27 64 6f 5f 63 6f 6d | 6d 61 6e 64 2e 63 27 60 |<'do_com|mand.c'`|
|000040f0| 3b 20 74 68 65 6e 0a 20 | 20 20 20 65 63 68 6f 20 |; then. | echo |
|00004100| 73 68 61 72 3a 20 5c 22 | 27 64 6f 5f 63 6f 6d 6d |shar: \"|'do_comm|
|00004110| 61 6e 64 2e 63 27 5c 22 | 20 75 6e 70 61 63 6b 65 |and.c'\"| unpacke|
|00004120| 64 20 77 69 74 68 20 77 | 72 6f 6e 67 20 73 69 7a |d with w|rong siz|
|00004130| 65 21 0a 66 69 0a 23 20 | 65 6e 64 20 6f 66 20 27 |e!.fi.# |end of '|
|00004140| 64 6f 5f 63 6f 6d 6d 61 | 6e 64 2e 63 27 0a 66 69 |do_comma|nd.c'.fi|
|00004150| 0a 69 66 20 74 65 73 74 | 20 2d 66 20 27 6d 69 73 |.if test| -f 'mis|
|00004160| 63 2e 63 27 20 2d 61 20 | 22 24 7b 31 7d 22 20 21 |c.c' -a |"${1}" !|
|00004170| 3d 20 22 2d 63 22 20 3b | 20 74 68 65 6e 20 0a 20 |= "-c" ;| then . |
|00004180| 20 65 63 68 6f 20 73 68 | 61 72 3a 20 57 69 6c 6c | echo sh|ar: Will|
|00004190| 20 6e 6f 74 20 63 6c 6f | 62 62 65 72 20 65 78 69 | not clo|bber exi|
|000041a0| 73 74 69 6e 67 20 66 69 | 6c 65 20 5c 22 27 6d 69 |sting fi|le \"'mi|
|000041b0| 73 63 2e 63 27 5c 22 0a | 65 6c 73 65 0a 65 63 68 |sc.c'\".|else.ech|
|000041c0| 6f 20 73 68 61 72 3a 20 | 45 78 74 72 61 63 74 69 |o shar: |Extracti|
|000041d0| 6e 67 20 5c 22 27 6d 69 | 73 63 2e 63 27 5c 22 20 |ng \"'mi|sc.c'\" |
|000041e0| 5c 28 31 33 39 33 32 20 | 63 68 61 72 61 63 74 65 |\(13932 |characte|
|000041f0| 72 73 5c 29 0a 73 65 64 | 20 22 73 2f 5e 58 2f 2f |rs\).sed| "s/^X//|
|00004200| 22 20 3e 27 6d 69 73 63 | 2e 63 27 20 3c 3c 27 45 |" >'misc|.c' <<'E|
|00004210| 4e 44 5f 4f 46 5f 46 49 | 4c 45 27 0a 58 23 69 66 |ND_OF_FI|LE'.X#if|
|00004220| 20 21 64 65 66 69 6e 65 | 64 28 6c 69 6e 74 29 20 | !define|d(lint) |
|00004230| 26 26 20 21 64 65 66 69 | 6e 65 64 28 4c 49 4e 54 |&& !defi|ned(LINT|
|00004240| 29 0a 73 74 61 74 69 63 | 20 63 68 61 72 20 72 63 |).static| char rc|
|00004250| 73 69 64 5b 5d 20 3d 20 | 22 24 48 65 61 64 65 72 |sid[] = |"$Header|
|00004260| 3a 20 6d 69 73 63 2e 63 | 2c 76 20 32 2e 31 20 39 |: misc.c|,v 2.1 9|
|00004270| 30 2f 30 37 2f 31 38 20 | 30 30 3a 32 34 3a 33 33 |0/07/18 |00:24:33|
|00004280| 20 76 69 78 69 65 20 45 | 78 70 20 24 22 3b 0a 58 | vixie E|xp $";.X|
|00004290| 23 65 6e 64 69 66 0a 58 | 0a 58 2f 2a 20 76 69 78 |#endif.X|.X/* vix|
|000042a0| 20 32 36 6a 61 6e 38 37 | 20 5b 52 43 53 20 68 61 | 26jan87| [RCS ha|
|000042b0| 73 20 74 68 65 20 72 65 | 73 74 20 6f 66 20 74 68 |s the re|st of th|
|000042c0| 65 20 6c 6f 67 5d 0a 58 | 20 2a 20 76 69 78 20 31 |e log].X| * vix 1|
|000042d0| 35 6a 61 6e 38 37 20 5b | 61 64 64 65 64 20 54 49 |5jan87 [|added TI|
|000042e0| 4f 43 4e 4f 54 54 59 2c | 20 74 68 61 6e 6b 73 20 |OCNOTTY,| thanks |
|000042f0| 63 73 67 40 70 79 72 61 | 6d 69 64 5d 0a 58 20 2a |csg@pyra|mid].X *|
|00004300| 20 76 69 78 20 33 30 64 | 65 63 38 36 20 5b 77 72 | vix 30d|ec86 [wr|
|00004310| 69 74 74 65 6e 5d 0a 58 | 20 2a 2f 0a 58 0a 58 2f |itten].X| */.X.X/|
|00004320| 2a 20 43 6f 70 79 72 69 | 67 68 74 20 31 39 38 38 |* Copyri|ght 1988|
|00004330| 2c 31 39 39 30 20 62 79 | 20 50 61 75 6c 20 56 69 |,1990 by| Paul Vi|
|00004340| 78 69 65 0a 58 20 2a 20 | 41 6c 6c 20 72 69 67 68 |xie.X * |All righ|
|00004350| 74 73 20 72 65 73 65 72 | 76 65 64 0a 58 20 2a 0a |ts reser|ved.X *.|
|00004360| 58 20 2a 20 44 69 73 74 | 72 69 62 75 74 65 20 66 |X * Dist|ribute f|
|00004370| 72 65 65 6c 79 2c 20 65 | 78 63 65 70 74 3a 20 64 |reely, e|xcept: d|
|00004380| 6f 6e 27 74 20 72 65 6d | 6f 76 65 20 6d 79 20 6e |on't rem|ove my n|
|00004390| 61 6d 65 20 66 72 6f 6d | 20 74 68 65 20 73 6f 75 |ame from| the sou|
|000043a0| 72 63 65 20 6f 72 0a 58 | 20 2a 20 64 6f 63 75 6d |rce or.X| * docum|
|000043b0| 65 6e 74 61 74 69 6f 6e | 20 28 64 6f 6e 27 74 20 |entation| (don't |
|000043c0| 74 61 6b 65 20 63 72 65 | 64 69 74 20 66 6f 72 20 |take cre|dit for |
|000043d0| 6d 79 20 77 6f 72 6b 29 | 2c 20 6d 61 72 6b 20 79 |my work)|, mark y|
|000043e0| 6f 75 72 20 63 68 61 6e | 67 65 73 20 28 64 6f 6e |our chan|ges (don|
|000043f0| 27 74 0a 58 20 2a 20 67 | 65 74 20 6d 65 20 62 6c |'t.X * g|et me bl|
|00004400| 61 6d 65 64 20 66 6f 72 | 20 79 6f 75 72 20 70 6f |amed for| your po|
|00004410| 73 73 69 62 6c 65 20 62 | 75 67 73 29 2c 20 64 6f |ssible b|ugs), do|
|00004420| 6e 27 74 20 61 6c 74 65 | 72 20 6f 72 20 72 65 6d |n't alte|r or rem|
|00004430| 6f 76 65 20 74 68 69 73 | 0a 58 20 2a 20 6e 6f 74 |ove this|.X * not|
|00004440| 69 63 65 2e 20 20 4d 61 | 79 20 62 65 20 73 6f 6c |ice. Ma|y be sol|
|00004450| 64 20 69 66 20 62 75 69 | 6c 64 61 62 6c 65 20 73 |d if bui|ldable s|
|00004460| 6f 75 72 63 65 20 69 73 | 20 70 72 6f 76 69 64 65 |ource is| provide|
|00004470| 64 20 74 6f 20 62 75 79 | 65 72 2e 20 20 4e 6f 0a |d to buy|er. No.|
|00004480| 58 20 2a 20 77 61 72 72 | 61 6e 74 65 65 20 6f 66 |X * warr|antee of|
|00004490| 20 61 6e 79 20 6b 69 6e | 64 2c 20 65 78 70 72 65 | any kin|d, expre|
|000044a0| 73 73 20 6f 72 20 69 6d | 70 6c 69 65 64 2c 20 69 |ss or im|plied, i|
|000044b0| 73 20 69 6e 63 6c 75 64 | 65 64 20 77 69 74 68 20 |s includ|ed with |
|000044c0| 74 68 69 73 0a 58 20 2a | 20 73 6f 66 74 77 61 72 |this.X *| softwar|
|000044d0| 65 3b 20 75 73 65 20 61 | 74 20 79 6f 75 72 20 6f |e; use a|t your o|
|000044e0| 77 6e 20 72 69 73 6b 2c | 20 72 65 73 70 6f 6e 73 |wn risk,| respons|
|000044f0| 69 62 69 6c 69 74 79 20 | 66 6f 72 20 64 61 6d 61 |ibility |for dama|
|00004500| 67 65 73 20 28 69 66 20 | 61 6e 79 29 20 74 6f 0a |ges (if |any) to.|
|00004510| 58 20 2a 20 61 6e 79 6f | 6e 65 20 72 65 73 75 6c |X * anyo|ne resul|
|00004520| 74 69 6e 67 20 66 72 6f | 6d 20 74 68 65 20 75 73 |ting fro|m the us|
|00004530| 65 20 6f 66 20 74 68 69 | 73 20 73 6f 66 74 77 61 |e of thi|s softwa|
|00004540| 72 65 20 72 65 73 74 73 | 20 65 6e 74 69 72 65 6c |re rests| entirel|
|00004550| 79 20 77 69 74 68 20 74 | 68 65 0a 58 20 2a 20 75 |y with t|he.X * u|
|00004560| 73 65 72 2e 0a 58 20 2a | 0a 58 20 2a 20 53 65 6e |ser..X *|.X * Sen|
|00004570| 64 20 62 75 67 20 72 65 | 70 6f 72 74 73 2c 20 62 |d bug re|ports, b|
|00004580| 75 67 20 66 69 78 65 73 | 2c 20 65 6e 68 61 6e 63 |ug fixes|, enhanc|
|00004590| 65 6d 65 6e 74 73 2c 20 | 72 65 71 75 65 73 74 73 |ements, |requests|
|000045a0| 2c 20 66 6c 61 6d 65 73 | 2c 20 65 74 63 2e 2c 20 |, flames|, etc., |
|000045b0| 61 6e 64 0a 58 20 2a 20 | 49 27 6c 6c 20 74 72 79 |and.X * |I'll try|
|000045c0| 20 74 6f 20 6b 65 65 70 | 20 61 20 76 65 72 73 69 | to keep| a versi|
|000045d0| 6f 6e 20 75 70 20 74 6f | 20 64 61 74 65 2e 20 20 |on up to| date. |
|000045e0| 49 20 63 61 6e 20 62 65 | 20 72 65 61 63 68 65 64 |I can be| reached|
|000045f0| 20 61 73 20 66 6f 6c 6c | 6f 77 73 3a 0a 58 20 2a | as foll|ows:.X *|
|00004600| 20 50 61 75 6c 20 56 69 | 78 69 65 2c 20 33 32 39 | Paul Vi|xie, 329|
|00004610| 20 4e 6f 65 20 53 74 72 | 65 65 74 2c 20 53 61 6e | Noe Str|eet, San|
|00004620| 20 46 72 61 6e 63 69 73 | 63 6f 2c 20 43 41 2c 20 | Francis|co, CA, |
|00004630| 39 34 31 31 34 2c 20 28 | 34 31 35 29 20 38 36 34 |94114, (|415) 864|
|00004640| 2d 37 30 31 33 2c 0a 58 | 20 2a 20 70 61 75 6c 40 |-7013,.X| * paul@|
|00004650| 76 69 78 69 65 2e 73 66 | 2e 63 61 2e 75 73 20 7c |vixie.sf|.ca.us ||
|00004660| 7c 20 7b 68 6f 70 74 6f | 61 64 2c 70 61 63 62 65 || {hopto|ad,pacbe|
|00004670| 6c 6c 2c 64 65 63 77 72 | 6c 2c 63 72 61 73 68 7d |ll,decwr|l,crash}|
|00004680| 21 76 69 78 69 65 21 70 | 61 75 6c 0a 58 20 2a 2f |!vixie!p|aul.X */|
|00004690| 0a 58 0a 58 0a 58 23 69 | 6e 63 6c 75 64 65 20 22 |.X.X.X#i|nclude "|
|000046a0| 63 72 6f 6e 2e 68 22 0a | 58 23 69 6e 63 6c 75 64 |cron.h".|X#includ|
|000046b0| 65 20 3c 73 79 73 2f 74 | 69 6d 65 2e 68 3e 0a 58 |e <sys/t|ime.h>.X|
|000046c0| 23 69 6e 63 6c 75 64 65 | 20 3c 73 79 73 2f 72 65 |#include| <sys/re|
|000046d0| 73 6f 75 72 63 65 2e 68 | 3e 0a 58 23 69 6e 63 6c |source.h|>.X#incl|
|000046e0| 75 64 65 20 3c 73 79 73 | 2f 69 6f 63 74 6c 2e 68 |ude <sys|/ioctl.h|
|000046f0| 3e 0a 58 23 69 6e 63 6c | 75 64 65 20 3c 73 79 73 |>.X#incl|ude <sys|
|00004700| 2f 66 69 6c 65 2e 68 3e | 0a 58 23 69 6e 63 6c 75 |/file.h>|.X#inclu|
|00004710| 64 65 20 3c 65 72 72 6e | 6f 2e 68 3e 0a 58 23 69 |de <errn|o.h>.X#i|
|00004720| 66 20 64 65 66 69 6e 65 | 64 28 41 54 54 29 0a 58 |f define|d(ATT).X|
|00004730| 23 20 69 6e 63 6c 75 64 | 65 20 3c 66 63 6e 74 6c |# includ|e <fcntl|
|00004740| 2e 68 3e 0a 58 23 65 6e | 64 69 66 0a 58 0a 58 0a |.h>.X#en|dif.X.X.|
|00004750| 76 6f 69 64 20 6c 6f 67 | 5f 69 74 28 29 2c 20 62 |void log|_it(), b|
|00004760| 65 5f 64 69 66 66 65 72 | 65 6e 74 28 29 2c 20 61 |e_differ|ent(), a|
|00004770| 63 71 75 69 72 65 5f 64 | 61 65 6d 6f 6e 6c 6f 63 |cquire_d|aemonloc|
|00004780| 6b 28 29 3b 0a 58 0a 58 | 0a 63 68 61 72 20 2a 0a |k();.X.X|.char *.|
|00004790| 73 61 76 65 73 74 72 28 | 73 74 72 29 0a 58 09 63 |savestr(|str).X.c|
|000047a0| 68 61 72 09 2a 73 74 72 | 3b 0a 58 7b 0a 58 09 65 |har.*str|;.X{.X.e|
|000047b0| 78 74 65 72 6e 09 69 6e | 74 09 73 74 72 6c 65 6e |xtern.in|t.strlen|
|000047c0| 28 29 3b 0a 58 09 65 78 | 74 65 72 6e 09 63 68 61 |();.X.ex|tern.cha|
|000047d0| 72 09 2a 6d 61 6c 6c 6f | 63 28 29 2c 20 2a 73 74 |r.*mallo|c(), *st|
|000047e0| 72 63 70 79 28 29 3b 0a | 58 09 2f 2a 2a 2f 09 63 |rcpy();.|X./**/.c|
|000047f0| 68 61 72 09 2a 74 65 6d | 70 3b 0a 58 0a 58 09 74 |har.*tem|p;.X.X.t|
|00004800| 65 6d 70 20 3d 20 6d 61 | 6c 6c 6f 63 28 28 75 6e |emp = ma|lloc((un|
|00004810| 73 69 67 6e 65 64 29 20 | 28 73 74 72 6c 65 6e 28 |signed) |(strlen(|
|00004820| 73 74 72 29 20 2b 20 31 | 29 29 3b 0a 58 09 28 76 |str) + 1|));.X.(v|
|00004830| 6f 69 64 29 20 73 74 72 | 63 70 79 28 74 65 6d 70 |oid) str|cpy(temp|
|00004840| 2c 20 73 74 72 29 3b 0a | 58 09 72 65 74 75 72 6e |, str);.|X.return|
|00004850| 20 74 65 6d 70 3b 0a 58 | 7d 0a 58 0a 58 0a 69 6e | temp;.X|}.X.X.in|
|00004860| 74 0a 6e 6f 63 61 73 65 | 5f 73 74 72 63 6d 70 28 |t.nocase|_strcmp(|
|00004870| 6c 65 66 74 2c 20 72 69 | 67 68 74 29 0a 58 09 63 |left, ri|ght).X.c|
|00004880| 68 61 72 09 2a 6c 65 66 | 74 3b 0a 58 09 63 68 61 |har.*lef|t;.X.cha|
|00004890| 72 09 2a 72 69 67 68 74 | 3b 0a 58 7b 0a 58 09 77 |r.*right|;.X{.X.w|
|000048a0| 68 69 6c 65 20 28 2a 6c | 65 66 74 20 26 26 20 28 |hile (*l|eft && (|
|000048b0| 4d 6b 4c 6f 77 65 72 28 | 2a 6c 65 66 74 29 20 3d |MkLower(|*left) =|
|000048c0| 3d 20 4d 6b 4c 6f 77 65 | 72 28 2a 72 69 67 68 74 |= MkLowe|r(*right|
|000048d0| 29 29 29 0a 58 09 7b 0a | 58 09 09 6c 65 66 74 2b |))).X.{.|X..left+|
|000048e0| 2b 3b 0a 58 09 09 72 69 | 67 68 74 2b 2b 3b 0a 58 |+;.X..ri|ght++;.X|
|000048f0| 09 7d 0a 58 09 72 65 74 | 75 72 6e 20 4d 6b 4c 6f |.}.X.ret|urn MkLo|
|00004900| 77 65 72 28 2a 6c 65 66 | 74 29 20 2d 20 4d 6b 4c |wer(*lef|t) - MkL|
|00004910| 6f 77 65 72 28 2a 72 69 | 67 68 74 29 3b 0a 58 7d |ower(*ri|ght);.X}|
|00004920| 0a 58 0a 58 0a 69 6e 74 | 0a 73 74 72 63 6d 70 5f |.X.X.int|.strcmp_|
|00004930| 75 6e 74 69 6c 28 6c 65 | 66 74 2c 20 72 69 67 68 |until(le|ft, righ|
|00004940| 74 2c 20 75 6e 74 69 6c | 29 0a 58 09 63 68 61 72 |t, until|).X.char|
|00004950| 09 2a 6c 65 66 74 3b 0a | 58 09 63 68 61 72 09 2a |.*left;.|X.char.*|
|00004960| 72 69 67 68 74 3b 0a 58 | 09 63 68 61 72 09 75 6e |right;.X|.char.un|
|00004970| 74 69 6c 3b 0a 58 7b 0a | 58 09 72 65 67 69 73 74 |til;.X{.|X.regist|
|00004980| 65 72 20 69 6e 74 09 64 | 69 66 66 3b 0a 58 0a 58 |er int.d|iff;.X.X|
|00004990| 09 44 65 62 75 67 28 44 | 50 41 52 53 7c 44 45 58 |.Debug(D|PARS|DEX|
|000049a0| 54 2c 20 28 22 73 74 72 | 63 6d 70 5f 75 6e 74 69 |T, ("str|cmp_unti|
|000049b0| 6c 28 25 73 2c 25 73 2c | 25 63 29 20 2e 2e 2e 20 |l(%s,%s,|%c) ... |
|000049c0| 22 2c 20 6c 65 66 74 2c | 20 72 69 67 68 74 2c 20 |", left,| right, |
|000049d0| 75 6e 74 69 6c 29 29 0a | 58 0a 58 09 77 68 69 6c |until)).|X.X.whil|
|000049e0| 65 20 28 2a 6c 65 66 74 | 20 26 26 20 2a 6c 65 66 |e (*left| && *lef|
|000049f0| 74 20 21 3d 20 75 6e 74 | 69 6c 20 26 26 20 2a 6c |t != unt|il && *l|
|00004a00| 65 66 74 20 3d 3d 20 2a | 72 69 67 68 74 29 0a 58 |eft == *|right).X|
|00004a10| 09 7b 0a 58 09 09 6c 65 | 66 74 2b 2b 3b 0a 58 09 |.{.X..le|ft++;.X.|
|00004a20| 09 72 69 67 68 74 2b 2b | 3b 0a 58 09 7d 0a 58 0a |.right++|;.X.}.X.|
|00004a30| 58 09 69 66 20 28 09 28 | 2a 6c 65 66 74 3d 3d 27 |X.if (.(|*left=='|
|00004a40| 5c 30 27 20 7c 7c 20 2a | 6c 65 66 74 20 3d 3d 20 |\0' || *|left == |
|00004a50| 75 6e 74 69 6c 29 20 0a | 58 09 20 20 20 20 26 26 |until) .|X. &&|
|00004a60| 09 28 2a 72 69 67 68 74 | 3d 3d 27 5c 30 27 20 7c |.(*right|=='\0' ||
|00004a70| 7c 20 2a 72 69 67 68 74 | 20 3d 3d 20 75 6e 74 69 || *right| == unti|
|00004a80| 6c 29 0a 58 09 20 20 20 | 29 0a 58 09 09 64 69 66 |l).X. |).X..dif|
|00004a90| 66 20 3d 20 30 3b 0a 58 | 09 65 6c 73 65 0a 58 09 |f = 0;.X|.else.X.|
|00004aa0| 09 64 69 66 66 20 3d 20 | 2a 6c 65 66 74 20 2d 20 |.diff = |*left - |
|00004ab0| 2a 72 69 67 68 74 3b 0a | 58 0a 58 09 44 65 62 75 |*right;.|X.X.Debu|
|00004ac0| 67 28 44 50 41 52 53 7c | 44 45 58 54 2c 20 28 22 |g(DPARS||DEXT, ("|
|00004ad0| 25 64 5c 6e 22 2c 20 64 | 69 66 66 29 29 0a 58 0a |%d\n", d|iff)).X.|
|00004ae0| 58 09 72 65 74 75 72 6e | 20 64 69 66 66 3b 0a 58 |X.return| diff;.X|
|00004af0| 7d 0a 58 0a 58 0a 58 2f | 2a 20 73 74 72 64 74 62 |}.X.X.X/|* strdtb|
|00004b00| 28 73 29 20 2d 20 64 65 | 6c 65 74 65 20 74 72 61 |(s) - de|lete tra|
|00004b10| 69 6c 69 6e 67 20 62 6c | 61 6e 6b 73 20 69 6e 20 |iling bl|anks in |
|00004b20| 73 74 72 69 6e 67 20 27 | 73 27 20 61 6e 64 20 72 |string '|s' and r|
|00004b30| 65 74 75 72 6e 20 6e 65 | 77 20 6c 65 6e 67 74 68 |eturn ne|w length|
|00004b40| 0a 58 20 2a 2f 0a 69 6e | 74 0a 73 74 72 64 74 62 |.X */.in|t.strdtb|
|00004b50| 28 73 29 0a 58 09 72 65 | 67 69 73 74 65 72 20 63 |(s).X.re|gister c|
|00004b60| 68 61 72 09 2a 73 3b 0a | 58 7b 0a 58 09 72 65 67 |har.*s;.|X{.X.reg|
|00004b70| 69 73 74 65 72 20 63 68 | 61 72 09 2a 78 20 3d 20 |ister ch|ar.*x = |
|00004b80| 73 3b 0a 58 0a 58 09 2f | 2a 20 73 63 61 6e 20 66 |s;.X.X./|* scan f|
|00004b90| 6f 72 77 61 72 64 20 74 | 6f 20 74 68 65 20 6e 75 |orward t|o the nu|
|00004ba0| 6c 6c 0a 58 09 20 2a 2f | 0a 58 09 77 68 69 6c 65 |ll.X. */|.X.while|
|00004bb0| 20 28 2a 78 29 0a 58 09 | 09 78 2b 2b 3b 0a 58 0a | (*x).X.|.x++;.X.|
|00004bc0| 58 09 2f 2a 20 73 63 61 | 6e 20 62 61 63 6b 77 61 |X./* sca|n backwa|
|00004bd0| 72 64 20 74 6f 20 65 69 | 74 68 65 72 20 74 68 65 |rd to ei|ther the|
|00004be0| 20 66 69 72 73 74 20 63 | 68 61 72 61 63 74 65 72 | first c|haracter|
|00004bf0| 20 62 65 66 6f 72 65 20 | 74 68 65 20 73 74 72 69 | before |the stri|
|00004c00| 6e 67 2c 0a 58 09 20 2a | 20 6f 72 20 74 68 65 20 |ng,.X. *| or the |
|00004c10| 6c 61 73 74 20 6e 6f 6e | 2d 62 6c 61 6e 6b 20 69 |last non|-blank i|
|00004c20| 6e 20 74 68 65 20 73 74 | 72 69 6e 67 2c 20 77 68 |n the st|ring, wh|
|00004c30| 69 63 68 65 76 65 72 20 | 63 6f 6d 65 73 20 66 69 |ichever |comes fi|
|00004c40| 72 73 74 2e 0a 58 09 20 | 2a 2f 0a 58 09 64 6f 09 |rst..X. |*/.X.do.|
|00004c50| 7b 78 2d 2d 3b 7d 0a 58 | 09 77 68 69 6c 65 20 28 |{x--;}.X|.while (|
|00004c60| 78 20 3e 3d 20 73 20 26 | 26 20 69 73 73 70 61 63 |x >= s &|& isspac|
|00004c70| 65 28 2a 78 29 29 3b 0a | 58 0a 58 09 2f 2a 20 6f |e(*x));.|X.X./* o|
|00004c80| 6e 65 20 63 68 61 72 61 | 63 74 65 72 20 62 65 79 |ne chara|cter bey|
|00004c90| 6f 6e 64 20 77 68 65 72 | 65 20 77 65 20 73 74 6f |ond wher|e we sto|
|00004ca0| 70 70 65 64 20 61 62 6f | 76 65 20 69 73 20 77 68 |pped abo|ve is wh|
|00004cb0| 65 72 65 20 74 68 65 20 | 6e 75 6c 6c 0a 58 09 20 |ere the |null.X. |
|00004cc0| 2a 20 67 6f 65 73 2e 0a | 58 09 20 2a 2f 0a 58 09 |* goes..|X. */.X.|
|00004cd0| 2a 2b 2b 78 20 3d 20 27 | 5c 30 27 3b 0a 58 0a 58 |*++x = '|\0';.X.X|
|00004ce0| 09 2f 2a 20 74 68 65 20 | 64 69 66 66 65 72 65 6e |./* the |differen|
|00004cf0| 63 65 20 62 65 74 77 65 | 65 6e 20 74 68 65 20 70 |ce betwe|en the p|
|00004d00| 6f 73 69 74 69 6f 6e 20 | 6f 66 20 74 68 65 20 6e |osition |of the n|
|00004d10| 75 6c 6c 20 63 68 61 72 | 61 63 74 65 72 20 61 6e |ull char|acter an|
|00004d20| 64 0a 58 09 20 2a 20 74 | 68 65 20 70 6f 73 69 74 |d.X. * t|he posit|
|00004d30| 69 6f 6e 20 6f 66 20 74 | 68 65 20 66 69 72 73 74 |ion of t|he first|
|00004d40| 20 63 68 61 72 61 63 74 | 65 72 20 6f 66 20 74 68 | charact|er of th|
|00004d50| 65 20 73 74 72 69 6e 67 | 20 69 73 20 74 68 65 20 |e string| is the |
|00004d60| 6c 65 6e 67 74 68 2e 0a | 58 09 20 2a 2f 0a 58 09 |length..|X. */.X.|
|00004d70| 72 65 74 75 72 6e 20 78 | 20 2d 20 73 3b 0a 58 7d |return x| - s;.X}|
|00004d80| 0a 58 0a 58 0a 69 6e 74 | 0a 73 65 74 5f 64 65 62 |.X.X.int|.set_deb|
|00004d90| 75 67 5f 66 6c 61 67 73 | 28 66 6c 61 67 73 29 0a |ug_flags|(flags).|
|00004da0| 58 09 63 68 61 72 09 2a | 66 6c 61 67 73 3b 0a 58 |X.char.*|flags;.X|
|00004db0| 7b 0a 58 09 2f 2a 20 64 | 65 62 75 67 20 66 6c 61 |{.X./* d|ebug fla|
|00004dc0| 67 73 20 61 72 65 20 6f | 66 20 74 68 65 20 66 6f |gs are o|f the fo|
|00004dd0| 72 6d 20 20 20 20 66 6c | 61 67 5b 2c 66 6c 61 67 |rm fl|ag[,flag|
|00004de0| 20 2e 2e 2e 5d 0a 58 09 | 20 2a 0a 58 09 20 2a 20 | ...].X.| *.X. * |
|00004df0| 69 66 20 61 6e 20 65 72 | 72 6f 72 20 6f 63 63 75 |if an er|ror occu|
|00004e00| 72 73 2c 20 70 72 69 6e | 74 20 61 20 6d 65 73 73 |rs, prin|t a mess|
|00004e10| 61 67 65 20 74 6f 20 73 | 74 64 6f 75 74 20 61 6e |age to s|tdout an|
|00004e20| 64 20 72 65 74 75 72 6e | 20 46 41 4c 53 45 2e 0a |d return| FALSE..|
|00004e30| 58 09 20 2a 20 6f 74 68 | 65 72 77 69 73 65 20 72 |X. * oth|erwise r|
|00004e40| 65 74 75 72 6e 20 54 52 | 55 45 20 61 66 74 65 72 |eturn TR|UE after|
|00004e50| 20 73 65 74 74 69 6e 67 | 20 45 52 52 4f 52 5f 46 | setting| ERROR_F|
|00004e60| 4c 41 47 53 2e 0a 58 09 | 20 2a 2f 0a 58 0a 58 23 |LAGS..X.| */.X.X#|
|00004e70| 69 66 20 21 44 45 42 55 | 47 47 49 4e 47 0a 58 0a |if !DEBU|GGING.X.|
|00004e80| 58 09 70 72 69 6e 74 66 | 28 22 74 68 69 73 20 70 |X.printf|("this p|
|00004e90| 72 6f 67 72 61 6d 20 77 | 61 73 20 63 6f 6d 70 69 |rogram w|as compi|
|00004ea0| 6c 65 64 20 77 69 74 68 | 6f 75 74 20 64 65 62 75 |led with|out debu|
|00004eb0| 67 67 69 6e 67 20 65 6e | 61 62 6c 65 64 5c 6e 22 |gging en|abled\n"|
|00004ec0| 29 3b 0a 58 09 72 65 74 | 75 72 6e 20 46 41 4c 53 |);.X.ret|urn FALS|
|00004ed0| 45 3b 0a 58 0a 58 23 65 | 6c 73 65 20 2f 2a 20 44 |E;.X.X#e|lse /* D|
|00004ee0| 45 42 55 47 47 49 4e 47 | 20 2a 2f 0a 58 0a 58 09 |EBUGGING| */.X.X.|
|00004ef0| 63 68 61 72 09 2a 70 63 | 20 3d 20 66 6c 61 67 73 |char.*pc| = flags|
|00004f00| 3b 0a 58 0a 58 09 44 65 | 62 75 67 46 6c 61 67 73 |;.X.X.De|bugFlags|
|00004f10| 20 3d 20 30 3b 0a 58 0a | 58 09 77 68 69 6c 65 20 | = 0;.X.|X.while |
|00004f20| 28 2a 70 63 29 0a 58 09 | 7b 0a 58 09 09 63 68 61 |(*pc).X.|{.X..cha|
|00004f30| 72 09 2a 2a 74 65 73 74 | 3b 0a 58 09 09 69 6e 74 |r.**test|;.X..int|
|00004f40| 09 6d 61 73 6b 3b 0a 58 | 0a 58 09 09 2f 2a 20 74 |.mask;.X|.X../* t|
|00004f50| 72 79 20 74 6f 20 66 69 | 6e 64 20 64 65 62 75 67 |ry to fi|nd debug|
|00004f60| 20 66 6c 61 67 20 6e 61 | 6d 65 20 69 6e 20 6f 75 | flag na|me in ou|
|00004f70| 72 20 6c 69 73 74 2e 0a | 58 09 09 20 2a 2f 0a 58 |r list..|X.. */.X|
|00004f80| 09 09 66 6f 72 20 28 09 | 74 65 73 74 20 3d 20 44 |..for (.|test = D|
|00004f90| 65 62 75 67 46 6c 61 67 | 4e 61 6d 65 73 2c 20 6d |ebugFlag|Names, m|
|00004fa0| 61 73 6b 20 3d 20 31 3b | 0a 58 09 09 09 2a 74 65 |ask = 1;|.X...*te|
|00004fb0| 73 74 20 26 26 20 73 74 | 72 63 6d 70 5f 75 6e 74 |st && st|rcmp_unt|
|00004fc0| 69 6c 28 2a 74 65 73 74 | 2c 20 70 63 2c 20 27 2c |il(*test|, pc, ',|
|00004fd0| 27 29 3b 0a 58 09 09 09 | 74 65 73 74 2b 2b 2c 20 |');.X...|test++, |
|00004fe0| 6d 61 73 6b 20 3c 3c 3d | 20 31 0a 58 09 09 20 20 |mask <<=| 1.X.. |
|00004ff0| 20 20 29 0a 58 09 09 09 | 3b 0a 58 0a 58 09 09 69 | ).X...|;.X.X..i|
|00005000| 66 20 28 21 2a 74 65 73 | 74 29 0a 58 09 09 7b 0a |f (!*tes|t).X..{.|
|00005010| 58 09 09 09 66 70 72 69 | 6e 74 66 28 73 74 64 65 |X...fpri|ntf(stde|
|00005020| 72 72 2c 0a 58 09 09 09 | 09 22 75 6e 72 65 63 6f |rr,.X...|."unreco|
|00005030| 67 6e 69 7a 65 64 20 64 | 65 62 75 67 20 66 6c 61 |gnized d|ebug fla|
|00005040| 67 20 3c 25 73 3e 20 3c | 25 73 3e 5c 6e 22 2c 0a |g <%s> <|%s>\n",.|
|00005050| 58 09 09 09 09 66 6c 61 | 67 73 2c 20 70 63 29 3b |X....fla|gs, pc);|
|00005060| 0a 58 09 09 09 72 65 74 | 75 72 6e 20 46 41 4c 53 |.X...ret|urn FALS|
|00005070| 45 3b 0a 58 09 09 7d 0a | 58 0a 58 09 09 44 65 62 |E;.X..}.|X.X..Deb|
|00005080| 75 67 46 6c 61 67 73 20 | 7c 3d 20 6d 61 73 6b 3b |ugFlags ||= mask;|
|00005090| 0a 58 0a 58 09 09 2f 2a | 20 73 6b 69 70 20 74 6f |.X.X../*| skip to|
|000050a0| 20 74 68 65 20 6e 65 78 | 74 20 66 6c 61 67 0a 58 | the nex|t flag.X|
|000050b0| 09 09 20 2a 2f 0a 58 09 | 09 77 68 69 6c 65 20 28 |.. */.X.|.while (|
|000050c0| 2a 70 63 20 26 26 20 2a | 70 63 20 21 3d 20 27 2c |*pc && *|pc != ',|
|000050d0| 27 29 0a 58 09 09 09 70 | 63 2b 2b 3b 0a 58 09 09 |').X...p|c++;.X..|
|000050e0| 69 66 20 28 2a 70 63 20 | 3d 3d 20 27 2c 27 29 0a |if (*pc |== ',').|
|000050f0| 58 09 09 09 70 63 2b 2b | 3b 0a 58 09 7d 0a 58 0a |X...pc++|;.X.}.X.|
|00005100| 58 09 69 66 20 28 44 65 | 62 75 67 46 6c 61 67 73 |X.if (De|bugFlags|
|00005110| 29 0a 58 09 7b 0a 58 09 | 09 69 6e 74 09 66 6c 61 |).X.{.X.|.int.fla|
|00005120| 67 3b 0a 58 0a 58 09 09 | 66 70 72 69 6e 74 66 28 |g;.X.X..|fprintf(|
|00005130| 73 74 64 65 72 72 2c 20 | 22 64 65 62 75 67 20 66 |stderr, |"debug f|
|00005140| 6c 61 67 73 20 65 6e 61 | 62 6c 65 64 3a 22 29 3b |lags ena|bled:");|
|00005150| 0a 58 0a 58 09 09 66 6f | 72 20 28 66 6c 61 67 20 |.X.X..fo|r (flag |
|00005160| 3d 20 30 3b 20 20 44 65 | 62 75 67 46 6c 61 67 4e |= 0; De|bugFlagN|
|00005170| 61 6d 65 73 5b 66 6c 61 | 67 5d 3b 20 20 66 6c 61 |ames[fla|g]; fla|
|00005180| 67 2b 2b 29 0a 58 09 09 | 09 69 66 20 28 44 65 62 |g++).X..|.if (Deb|
|00005190| 75 67 46 6c 61 67 73 20 | 26 20 28 31 20 3c 3c 20 |ugFlags |& (1 << |
|000051a0| 66 6c 61 67 29 29 0a 58 | 09 09 09 09 66 70 72 69 |flag)).X|....fpri|
|000051b0| 6e 74 66 28 73 74 64 65 | 72 72 2c 20 22 20 25 73 |ntf(stde|rr, " %s|
|000051c0| 22 2c 20 44 65 62 75 67 | 46 6c 61 67 4e 61 6d 65 |", Debug|FlagName|
|000051d0| 73 5b 66 6c 61 67 5d 29 | 3b 0a 58 09 09 66 70 72 |s[flag])|;.X..fpr|
|000051e0| 69 6e 74 66 28 73 74 64 | 65 72 72 2c 20 22 5c 6e |intf(std|err, "\n|
|000051f0| 22 29 3b 0a 58 09 7d 0a | 58 0a 58 09 72 65 74 75 |");.X.}.|X.X.retu|
|00005200| 72 6e 20 54 52 55 45 3b | 0a 58 0a 58 23 65 6e 64 |rn TRUE;|.X.X#end|
|00005210| 69 66 20 2f 2a 20 44 45 | 42 55 47 47 49 4e 47 20 |if /* DE|BUGGING |
|00005220| 2a 2f 0a 58 7d 0a 58 0a | 58 0a 58 23 69 66 20 64 |*/.X}.X.|X.X#if d|
|00005230| 65 66 69 6e 65 64 28 42 | 53 44 29 0a 76 6f 69 64 |efined(B|SD).void|
|00005240| 0a 73 65 74 5f 63 72 6f | 6e 5f 75 69 64 28 29 0a |.set_cro|n_uid().|
|00005250| 58 7b 0a 58 09 69 6e 74 | 09 73 65 74 65 75 69 64 |X{.X.int|.seteuid|
|00005260| 28 29 3b 0a 58 0a 58 09 | 69 66 20 28 73 65 74 65 |();.X.X.|if (sete|
|00005270| 75 69 64 28 52 4f 4f 54 | 5f 55 49 44 29 20 3c 20 |uid(ROOT|_UID) < |
|00005280| 4f 4b 29 0a 58 09 7b 0a | 58 09 09 70 65 72 72 6f |OK).X.{.|X..perro|
|00005290| 72 28 22 73 65 74 65 75 | 69 64 22 29 3b 0a 58 09 |r("seteu|id");.X.|
|000052a0| 09 65 78 69 74 28 45 52 | 52 4f 52 5f 45 58 49 54 |.exit(ER|ROR_EXIT|
|000052b0| 29 3b 0a 58 09 7d 0a 58 | 7d 0a 58 23 65 6e 64 69 |);.X.}.X|}.X#endi|
|000052c0| 66 0a 58 0a 58 23 69 66 | 20 64 65 66 69 6e 65 64 |f.X.X#if| defined|
|000052d0| 28 41 54 54 29 0a 76 6f | 69 64 0a 73 65 74 5f 63 |(ATT).vo|id.set_c|
|000052e0| 72 6f 6e 5f 75 69 64 28 | 29 0a 58 7b 0a 58 09 69 |ron_uid(|).X{.X.i|
|000052f0| 6e 74 09 73 65 74 75 69 | 64 28 29 3b 0a 58 0a 58 |nt.setui|d();.X.X|
|00005300| 09 69 66 20 28 73 65 74 | 75 69 64 28 52 4f 4f 54 |.if (set|uid(ROOT|
|00005310| 5f 55 49 44 29 20 3c 20 | 4f 4b 29 0a 58 09 7b 0a |_UID) < |OK).X.{.|
|00005320| 58 09 09 70 65 72 72 6f | 72 28 22 73 65 74 75 69 |X..perro|r("setui|
|00005330| 64 22 29 3b 0a 58 09 09 | 65 78 69 74 28 45 52 52 |d");.X..|exit(ERR|
|00005340| 4f 52 5f 45 58 49 54 29 | 3b 0a 58 09 7d 0a 58 7d |OR_EXIT)|;.X.}.X}|
|00005350| 0a 58 23 65 6e 64 69 66 | 0a 58 0a 76 6f 69 64 0a |.X#endif|.X.void.|
|00005360| 73 65 74 5f 63 72 6f 6e | 5f 63 77 64 28 29 0a 58 |set_cron|_cwd().X|
|00005370| 7b 0a 58 09 65 78 74 65 | 72 6e 20 69 6e 74 09 65 |{.X.exte|rn int.e|
|00005380| 72 72 6e 6f 3b 0a 58 09 | 73 74 72 75 63 74 20 73 |rrno;.X.|struct s|
|00005390| 74 61 74 09 73 62 3b 0a | 58 0a 58 09 2f 2a 20 66 |tat.sb;.|X.X./* f|
|000053a0| 69 72 73 74 20 63 68 65 | 63 6b 20 66 6f 72 20 43 |irst che|ck for C|
|000053b0| 52 4f 4e 44 49 52 20 28 | 22 2f 76 61 72 2f 63 72 |RONDIR (|"/var/cr|
|000053c0| 6f 6e 22 20 6f 72 20 73 | 6f 6d 65 20 73 75 63 68 |on" or s|ome such|
|000053d0| 29 0a 58 09 20 2a 2f 0a | 58 09 69 66 20 28 73 74 |).X. */.|X.if (st|
|000053e0| 61 74 28 43 52 4f 4e 44 | 49 52 2c 20 26 73 62 29 |at(CROND|IR, &sb)|
|000053f0| 20 3c 20 4f 4b 20 26 26 | 20 65 72 72 6e 6f 20 3d | < OK &&| errno =|
|00005400| 3d 20 45 4e 4f 45 4e 54 | 29 20 7b 0a 58 09 09 70 |= ENOENT|) {.X..p|
|00005410| 65 72 72 6f 72 28 43 52 | 4f 4e 44 49 52 29 3b 0a |error(CR|ONDIR);.|
|00005420| 58 09 09 69 66 20 28 4f | 4b 20 3d 3d 20 6d 6b 64 |X..if (O|K == mkd|
|00005430| 69 72 28 43 52 4f 4e 44 | 49 52 2c 20 30 37 30 30 |ir(CROND|IR, 0700|
|00005440| 29 29 20 7b 0a 58 09 09 | 09 66 70 72 69 6e 74 66 |)) {.X..|.fprintf|
|00005450| 28 73 74 64 65 72 72 2c | 20 22 25 73 3a 20 63 72 |(stderr,| "%s: cr|
|00005460| 65 61 74 65 64 5c 6e 22 | 2c 20 43 52 4f 4e 44 49 |eated\n"|, CRONDI|
|00005470| 52 29 3b 0a 58 09 09 09 | 73 74 61 74 28 43 52 4f |R);.X...|stat(CRO|
|00005480| 4e 44 49 52 2c 20 26 73 | 62 29 3b 0a 58 09 09 7d |NDIR, &s|b);.X..}|
|00005490| 20 65 6c 73 65 20 7b 0a | 58 09 09 09 66 70 72 69 | else {.|X...fpri|
|000054a0| 6e 74 66 28 73 74 64 65 | 72 72 2c 20 22 25 73 3a |ntf(stde|rr, "%s:|
|000054b0| 20 22 2c 20 43 52 4f 4e | 44 49 52 29 3b 0a 58 09 | ", CRON|DIR);.X.|
|000054c0| 09 09 70 65 72 72 6f 72 | 28 22 6d 6b 64 69 72 22 |..perror|("mkdir"|
|000054d0| 29 3b 0a 58 09 09 09 65 | 78 69 74 28 45 52 52 4f |);.X...e|xit(ERRO|
|000054e0| 52 5f 45 58 49 54 29 3b | 0a 58 09 09 7d 0a 58 09 |R_EXIT);|.X..}.X.|
|000054f0| 7d 0a 58 09 69 66 20 28 | 21 28 73 62 2e 73 74 5f |}.X.if (|!(sb.st_|
|00005500| 6d 6f 64 65 20 26 20 53 | 5f 49 46 44 49 52 29 29 |mode & S|_IFDIR))|
|00005510| 20 7b 0a 58 09 09 66 70 | 72 69 6e 74 66 28 73 74 | {.X..fp|rintf(st|
|00005520| 64 65 72 72 2c 20 22 27 | 25 73 27 20 69 73 20 6e |derr, "'|%s' is n|
|00005530| 6f 74 20 61 20 64 69 72 | 65 63 74 6f 72 79 2c 20 |ot a dir|ectory, |
|00005540| 62 61 69 6c 69 6e 67 20 | 6f 75 74 2e 5c 6e 22 2c |bailing |out.\n",|
|00005550| 0a 58 09 09 09 43 52 4f | 4e 44 49 52 29 3b 0a 58 |.X...CRO|NDIR);.X|
|00005560| 09 09 65 78 69 74 28 45 | 52 52 4f 52 5f 45 58 49 |..exit(E|RROR_EXI|
|00005570| 54 29 3b 0a 58 09 7d 0a | 58 09 69 66 20 28 63 68 |T);.X.}.|X.if (ch|
|00005580| 64 69 72 28 43 52 4f 4e | 44 49 52 29 20 3c 20 4f |dir(CRON|DIR) < O|
|00005590| 4b 29 20 7b 0a 58 09 09 | 66 70 72 69 6e 74 66 28 |K) {.X..|fprintf(|
|000055a0| 73 74 64 65 72 72 2c 20 | 22 63 61 6e 6e 6f 74 20 |stderr, |"cannot |
|000055b0| 63 68 64 69 72 28 25 73 | 29 2c 20 62 61 69 6c 69 |chdir(%s|), baili|
|000055c0| 6e 67 20 6f 75 74 2e 5c | 6e 22 2c 20 43 52 4f 4e |ng out.\|n", CRON|
|000055d0| 44 49 52 29 3b 0a 58 09 | 09 70 65 72 72 6f 72 28 |DIR);.X.|.perror(|
|000055e0| 43 52 4f 4e 44 49 52 29 | 3b 0a 58 09 09 65 78 69 |CRONDIR)|;.X..exi|
|000055f0| 74 28 45 52 52 4f 52 5f | 45 58 49 54 29 3b 0a 58 |t(ERROR_|EXIT);.X|
|00005600| 09 7d 0a 58 0a 58 09 2f | 2a 20 43 52 4f 4e 44 49 |.}.X.X./|* CRONDI|
|00005610| 52 20 6f 6b 61 79 20 28 | 6e 6f 77 3d 3d 43 57 44 |R okay (|now==CWD|
|00005620| 29 2c 20 6e 6f 77 20 6c | 6f 6f 6b 20 61 74 20 53 |), now l|ook at S|
|00005630| 50 4f 4f 4c 5f 44 49 52 | 20 28 22 74 61 62 73 22 |POOL_DIR| ("tabs"|
|00005640| 20 6f 72 20 73 6f 6d 65 | 20 73 75 63 68 29 0a 58 | or some| such).X|
|00005650| 09 20 2a 2f 0a 58 09 69 | 66 20 28 73 74 61 74 28 |. */.X.i|f (stat(|
|00005660| 53 50 4f 4f 4c 5f 44 49 | 52 2c 20 26 73 62 29 20 |SPOOL_DI|R, &sb) |
|00005670| 3c 20 4f 4b 20 26 26 20 | 65 72 72 6e 6f 20 3d 3d |< OK && |errno ==|
|00005680| 20 45 4e 4f 45 4e 54 29 | 20 7b 0a 58 09 09 70 65 | ENOENT)| {.X..pe|
|00005690| 72 72 6f 72 28 53 50 4f | 4f 4c 5f 44 49 52 29 3b |rror(SPO|OL_DIR);|
|000056a0| 0a 58 09 09 69 66 20 28 | 4f 4b 20 3d 3d 20 6d 6b |.X..if (|OK == mk|
|000056b0| 64 69 72 28 53 50 4f 4f | 4c 5f 44 49 52 2c 20 30 |dir(SPOO|L_DIR, 0|
|000056c0| 37 30 30 29 29 20 7b 0a | 58 09 09 09 66 70 72 69 |700)) {.|X...fpri|
|000056d0| 6e 74 66 28 73 74 64 65 | 72 72 2c 20 22 25 73 3a |ntf(stde|rr, "%s:|
|000056e0| 20 63 72 65 61 74 65 64 | 5c 6e 22 2c 20 53 50 4f | created|\n", SPO|
|000056f0| 4f 4c 5f 44 49 52 29 3b | 0a 58 09 09 09 73 74 61 |OL_DIR);|.X...sta|
|00005700| 74 28 53 50 4f 4f 4c 5f | 44 49 52 2c 20 26 73 62 |t(SPOOL_|DIR, &sb|
|00005710| 29 3b 0a 58 09 09 7d 20 | 65 6c 73 65 20 7b 0a 58 |);.X..} |else {.X|
|00005720| 09 09 09 66 70 72 69 6e | 74 66 28 73 74 64 65 72 |...fprin|tf(stder|
|00005730| 72 2c 20 22 25 73 3a 20 | 22 2c 20 53 50 4f 4f 4c |r, "%s: |", SPOOL|
|00005740| 5f 44 49 52 29 3b 0a 58 | 09 09 09 70 65 72 72 6f |_DIR);.X|...perro|
|00005750| 72 28 22 6d 6b 64 69 72 | 22 29 3b 0a 58 09 09 09 |r("mkdir|");.X...|
|00005760| 65 78 69 74 28 45 52 52 | 4f 52 5f 45 58 49 54 29 |exit(ERR|OR_EXIT)|
|00005770| 3b 0a 58 09 09 7d 0a 58 | 09 7d 0a 58 09 69 66 20 |;.X..}.X|.}.X.if |
|00005780| 28 21 28 73 62 2e 73 74 | 5f 6d 6f 64 65 20 26 20 |(!(sb.st|_mode & |
|00005790| 53 5f 49 46 44 49 52 29 | 29 20 7b 0a 58 09 09 66 |S_IFDIR)|) {.X..f|
|000057a0| 70 72 69 6e 74 66 28 73 | 74 64 65 72 72 2c 20 22 |printf(s|tderr, "|
|000057b0| 27 25 73 27 20 69 73 20 | 6e 6f 74 20 61 20 64 69 |'%s' is |not a di|
|000057c0| 72 65 63 74 6f 72 79 2c | 20 62 61 69 6c 69 6e 67 |rectory,| bailing|
|000057d0| 20 6f 75 74 2e 5c 6e 22 | 2c 0a 58 09 09 09 53 50 | out.\n"|,.X...SP|
|000057e0| 4f 4f 4c 5f 44 49 52 29 | 3b 0a 58 09 09 65 78 69 |OOL_DIR)|;.X..exi|
|000057f0| 74 28 45 52 52 4f 52 5f | 45 58 49 54 29 3b 0a 58 |t(ERROR_|EXIT);.X|
|00005800| 09 7d 0a 58 7d 0a 58 0a | 58 0a 58 23 69 66 20 64 |.}.X}.X.|X.X#if d|
|00005810| 65 66 69 6e 65 64 28 42 | 53 44 29 0a 76 6f 69 64 |efined(B|SD).void|
|00005820| 0a 62 65 5f 64 69 66 66 | 65 72 65 6e 74 28 29 0a |.be_diff|erent().|
|00005830| 58 7b 0a 58 09 2f 2a 20 | 72 65 6c 65 61 73 65 20 |X{.X./* |release |
|00005840| 74 68 65 20 63 6f 6e 74 | 72 6f 6c 20 74 65 72 6d |the cont|rol term|
|00005850| 69 6e 61 6c 3a 0a 58 09 | 20 2a 20 20 67 65 74 20 |inal:.X.| * get |
|00005860| 6e 65 77 20 70 67 72 70 | 20 28 6e 61 6d 65 20 61 |new pgrp| (name a|
|00005870| 66 74 65 72 20 6f 75 72 | 20 50 49 44 29 0a 58 09 |fter our| PID).X.|
|00005880| 20 2a 20 20 64 6f 20 61 | 6e 20 49 4f 43 54 4c 20 | * do a|n IOCTL |
|00005890| 74 6f 20 76 6f 69 64 20 | 74 74 79 20 61 73 73 6f |to void |tty asso|
|000058a0| 63 69 61 74 69 6f 6e 0a | 58 09 20 2a 2f 0a 58 0a |ciation.|X. */.X.|
|000058b0| 58 09 65 78 74 65 72 6e | 20 69 6e 74 09 67 65 74 |X.extern| int.get|
|000058c0| 70 69 64 28 29 2c 20 73 | 65 74 70 67 72 70 28 29 |pid(), s|etpgrp()|
|000058d0| 2c 20 6f 70 65 6e 28 29 | 2c 20 69 6f 63 74 6c 28 |, open()|, ioctl(|
|000058e0| 29 2c 20 63 6c 6f 73 65 | 28 29 3b 0a 58 09 61 75 |), close|();.X.au|
|000058f0| 74 6f 20 69 6e 74 09 66 | 64 3b 0a 58 0a 58 09 28 |to int.f|d;.X.X.(|
|00005900| 76 6f 69 64 29 20 73 65 | 74 70 67 72 70 28 30 2c |void) se|tpgrp(0,|
|00005910| 20 67 65 74 70 69 64 28 | 29 29 3b 0a 58 0a 58 09 | getpid(|));.X.X.|
|00005920| 69 66 20 28 28 66 64 20 | 3d 20 6f 70 65 6e 28 22 |if ((fd |= open("|
|00005930| 2f 64 65 76 2f 74 74 79 | 22 2c 20 32 29 29 20 3e |/dev/tty|", 2)) >|
|00005940| 3d 20 30 29 0a 58 09 7b | 0a 58 09 09 28 76 6f 69 |= 0).X.{|.X..(voi|
|00005950| 64 29 20 69 6f 63 74 6c | 28 66 64 2c 20 54 49 4f |d) ioctl|(fd, TIO|
|00005960| 43 4e 4f 54 54 59 2c 20 | 28 63 68 61 72 2a 29 30 |CNOTTY, |(char*)0|
|00005970| 29 3b 0a 58 09 09 28 76 | 6f 69 64 29 20 63 6c 6f |);.X..(v|oid) clo|
|00005980| 73 65 28 66 64 29 3b 0a | 58 09 7d 0a 58 7d 0a 58 |se(fd);.|X.}.X}.X|
|00005990| 23 65 6e 64 69 66 20 2f | 2a 42 53 44 2a 2f 0a 58 |#endif /|*BSD*/.X|
|000059a0| 0a 58 23 69 66 20 64 65 | 66 69 6e 65 64 28 41 54 |.X#if de|fined(AT|
|000059b0| 54 29 0a 76 6f 69 64 0a | 62 65 5f 64 69 66 66 65 |T).void.|be_diffe|
|000059c0| 72 65 6e 74 28 29 0a 58 | 7b 0a 58 09 2f 2a 20 6e |rent().X|{.X./* n|
|000059d0| 6f 74 20 62 65 69 6e 67 | 20 61 20 73 79 73 74 65 |ot being| a syste|
|000059e0| 6d 20 56 20 77 69 7a 2c | 20 49 20 64 6f 6e 27 74 |m V wiz,| I don't|
|000059f0| 20 6b 6e 6f 77 20 69 66 | 20 74 68 69 73 20 69 73 | know if| this is|
|00005a00| 20 77 68 61 74 20 79 6f | 75 20 68 61 76 65 0a 58 | what yo|u have.X|
|00005a10| 09 20 2a 20 74 6f 20 64 | 6f 20 74 6f 20 72 65 6c |. * to d|o to rel|
|00005a20| 65 61 73 65 20 79 6f 75 | 72 20 63 6f 6e 74 72 6f |ease you|r contro|
|00005a30| 6c 20 74 65 72 6d 69 6e | 61 6c 2e 20 20 77 68 61 |l termin|al. wha|
|00005a40| 74 20 49 20 77 61 6e 74 | 20 74 6f 20 61 63 63 6f |t I want| to acco|
|00005a50| 6d 70 6c 69 73 68 0a 58 | 09 20 2a 20 69 73 20 74 |mplish.X|. * is t|
|00005a60| 6f 20 6b 65 65 70 20 74 | 68 69 73 20 70 72 6f 63 |o keep t|his proc|
|00005a70| 65 73 73 20 66 72 6f 6d | 20 67 65 74 74 69 6e 67 |ess from| getting|
|00005a80| 20 61 6e 79 20 73 69 67 | 6e 61 6c 73 20 66 72 6f | any sig|nals fro|
|00005a90| 6d 20 74 68 65 20 74 74 | 79 2e 0a 58 09 20 2a 0a |m the tt|y..X. *.|
|00005aa0| 58 09 20 2a 20 73 6f 6d | 65 20 73 79 73 74 65 6d |X. * som|e system|
|00005ab0| 20 56 20 70 65 72 73 6f | 6e 20 73 68 6f 75 6c 64 | V perso|n should|
|00005ac0| 20 6c 65 74 20 6d 65 20 | 6b 6e 6f 77 20 69 66 20 | let me |know if |
|00005ad0| 74 68 69 73 20 77 6f 72 | 6b 73 2e 2e 2e 20 28 76 |this wor|ks... (v|
|00005ae0| 69 78 69 65 29 0a 58 09 | 20 2a 2f 0a 58 09 69 6e |ixie).X.| */.X.in|
|00005af0| 74 09 73 65 74 70 67 72 | 70 28 29 2c 20 63 6c 6f |t.setpgr|p(), clo|
|00005b00| 73 65 28 29 2c 20 6f 70 | 65 6e 28 29 3b 0a 58 0a |se(), op|en();.X.|
|00005b10| 58 09 28 76 6f 69 64 29 | 20 73 65 74 70 67 72 70 |X.(void)| setpgrp|
|00005b20| 28 29 3b 0a 58 0a 58 09 | 28 76 6f 69 64 29 20 63 |();.X.X.|(void) c|
|00005b30| 6c 6f 73 65 28 53 54 44 | 49 4e 29 3b 09 28 76 6f |lose(STD|IN);.(vo|
|00005b40| 69 64 29 20 6f 70 65 6e | 28 22 2f 64 65 76 2f 6e |id) open|("/dev/n|
|00005b50| 75 6c 6c 22 2c 20 30 29 | 3b 0a 58 09 28 76 6f 69 |ull", 0)|;.X.(voi|
|00005b60| 64 29 20 63 6c 6f 73 65 | 28 53 54 44 4f 55 54 29 |d) close|(STDOUT)|
|00005b70| 3b 09 28 76 6f 69 64 29 | 20 6f 70 65 6e 28 22 2f |;.(void)| open("/|
|00005b80| 64 65 76 2f 6e 75 6c 6c | 22 2c 20 31 29 3b 0a 58 |dev/null|", 1);.X|
|00005b90| 09 28 76 6f 69 64 29 20 | 63 6c 6f 73 65 28 53 54 |.(void) |close(ST|
|00005ba0| 44 45 52 52 29 3b 09 28 | 76 6f 69 64 29 20 6f 70 |DERR);.(|void) op|
|00005bb0| 65 6e 28 22 2f 64 65 76 | 2f 6e 75 6c 6c 22 2c 20 |en("/dev|/null", |
|00005bc0| 32 29 3b 0a 58 7d 0a 58 | 23 65 6e 64 69 66 20 2f |2);.X}.X|#endif /|
|00005bd0| 2a 41 54 54 2a 2f 0a 58 | 0a 58 0a 58 2f 2a 20 61 |*ATT*/.X|.X.X/* a|
|00005be0| 63 71 75 69 72 65 5f 64 | 61 65 6d 6f 6e 6c 6f 63 |cquire_d|aemonloc|
|00005bf0| 6b 28 29 20 2d 20 77 72 | 69 74 65 20 6f 75 72 20 |k() - wr|ite our |
|00005c00| 50 49 44 20 69 6e 74 6f | 20 2f 65 74 63 2f 63 72 |PID into| /etc/cr|
|00005c10| 6f 6e 64 2e 70 69 64 2c | 20 75 6e 6c 65 73 73 0a |ond.pid,| unless.|
|00005c20| 58 20 2a 09 61 6e 6f 74 | 68 65 72 20 64 61 65 6d |X *.anot|her daem|
|00005c30| 6f 6e 20 69 73 20 61 6c | 72 65 61 64 79 20 72 75 |on is al|ready ru|
|00005c40| 6e 6e 69 6e 67 2c 20 77 | 68 69 63 68 20 77 65 20 |nning, w|hich we |
|00005c50| 64 65 74 65 63 74 20 68 | 65 72 65 2e 0a 58 20 2a |detect h|ere..X *|
|00005c60| 2f 0a 76 6f 69 64 0a 61 | 63 71 75 69 72 65 5f 64 |/.void.a|cquire_d|
|00005c70| 61 65 6d 6f 6e 6c 6f 63 | 6b 28 29 0a 58 7b 0a 58 |aemonloc|k().X{.X|
|00005c80| 09 69 6e 74 09 66 64 20 | 3d 20 6f 70 65 6e 28 50 |.int.fd |= open(P|
|00005c90| 49 44 46 49 4c 45 2c 20 | 4f 5f 52 44 57 52 7c 4f |IDFILE, |O_RDWR|O|
|00005ca0| 5f 43 52 45 41 54 2c 20 | 30 36 34 34 29 3b 0a 58 |_CREAT, |0644);.X|
|00005cb0| 09 46 49 4c 45 09 2a 66 | 70 20 3d 20 66 64 6f 70 |.FILE.*f|p = fdop|
|00005cc0| 65 6e 28 66 64 2c 20 22 | 72 2b 22 29 3b 0a 58 09 |en(fd, "|r+");.X.|
|00005cd0| 69 6e 74 09 70 69 64 20 | 3d 20 67 65 74 70 69 64 |int.pid |= getpid|
|00005ce0| 28 29 2c 20 6f 74 68 65 | 72 70 69 64 3b 0a 58 09 |(), othe|rpid;.X.|
|00005cf0| 63 68 61 72 09 62 75 66 | 5b 4d 41 58 5f 54 45 4d |char.buf|[MAX_TEM|
|00005d00| 50 53 54 52 5d 3b 0a 58 | 0a 58 09 69 66 20 28 66 |PSTR];.X|.X.if (f|
|00005d10| 64 20 3c 20 30 20 7c 7c | 20 66 70 20 3d 3d 20 4e |d < 0 ||| fp == N|
|00005d20| 55 4c 4c 29 20 7b 0a 58 | 09 09 73 70 72 69 6e 74 |ULL) {.X|..sprint|
|00005d30| 66 28 62 75 66 2c 20 22 | 63 61 6e 27 74 20 6f 70 |f(buf, "|can't op|
|00005d40| 65 6e 20 6f 72 20 63 72 | 65 61 74 65 20 25 73 2c |en or cr|eate %s,|
|00005d50| 20 65 72 72 6e 6f 20 25 | 64 22 2c 20 50 49 44 46 | errno %|d", PIDF|
|00005d60| 49 4c 45 2c 20 65 72 72 | 6e 6f 29 3b 0a 58 09 09 |ILE, err|no);.X..|
|00005d70| 6c 6f 67 5f 69 74 28 22 | 43 52 4f 4e 44 22 2c 20 |log_it("|CROND", |
|00005d80| 70 69 64 2c 20 22 44 45 | 41 54 48 22 2c 20 62 75 |pid, "DE|ATH", bu|
|00005d90| 66 29 3b 0a 58 09 09 65 | 78 69 74 28 45 52 52 4f |f);.X..e|xit(ERRO|
|00005da0| 52 5f 45 58 49 54 29 3b | 0a 58 09 7d 0a 58 0a 58 |R_EXIT);|.X.}.X.X|
|00005db0| 09 69 66 20 28 66 6c 6f | 63 6b 28 66 64 2c 20 4c |.if (flo|ck(fd, L|
|00005dc0| 4f 43 4b 5f 45 58 7c 4c | 4f 43 4b 5f 4e 42 29 20 |OCK_EX|L|OCK_NB) |
|00005dd0| 3c 20 4f 4b 29 20 7b 0a | 58 09 09 69 6e 74 20 73 |< OK) {.|X..int s|
|00005de0| 61 76 65 5f 65 72 72 6e | 6f 20 3d 20 65 72 72 6e |ave_errn|o = errn|
|00005df0| 6f 3b 0a 58 0a 58 09 09 | 66 73 63 61 6e 66 28 66 |o;.X.X..|fscanf(f|
|00005e00| 70 2c 20 22 25 64 22 2c | 20 26 6f 74 68 65 72 70 |p, "%d",| &otherp|
|00005e10| 69 64 29 3b 0a 58 09 09 | 73 70 72 69 6e 74 66 28 |id);.X..|sprintf(|
|00005e20| 62 75 66 2c 20 22 63 61 | 6e 27 74 20 6c 6f 63 6b |buf, "ca|n't lock|
|00005e30| 20 25 73 2c 20 6f 74 68 | 65 72 70 69 64 20 6d 61 | %s, oth|erpid ma|
|00005e40| 79 20 62 65 20 25 64 2c | 20 65 72 72 6e 6f 20 25 |y be %d,| errno %|
|00005e50| 64 22 2c 0a 58 09 09 09 | 50 49 44 46 49 4c 45 2c |d",.X...|PIDFILE,|
|00005e60| 20 6f 74 68 65 72 70 69 | 64 2c 20 73 61 76 65 5f | otherpi|d, save_|
|00005e70| 65 72 72 6e 6f 29 3b 0a | 58 09 09 6c 6f 67 5f 69 |errno);.|X..log_i|
|00005e80| 74 28 22 43 52 4f 4e 44 | 22 2c 20 70 69 64 2c 20 |t("CROND|", pid, |
|00005e90| 22 44 45 41 54 48 22 2c | 20 62 75 66 29 3b 0a 58 |"DEATH",| buf);.X|
|00005ea0| 09 09 65 78 69 74 28 45 | 52 52 4f 52 5f 45 58 49 |..exit(E|RROR_EXI|
|00005eb0| 54 29 3b 0a 58 09 7d 0a | 58 0a 58 09 72 65 77 69 |T);.X.}.|X.X.rewi|
|00005ec0| 6e 64 28 66 70 29 3b 0a | 58 09 66 70 72 69 6e 74 |nd(fp);.|X.fprint|
|00005ed0| 66 28 66 70 2c 20 22 25 | 64 5c 6e 22 2c 20 70 69 |f(fp, "%|d\n", pi|
|00005ee0| 64 29 3b 0a 58 09 66 66 | 6c 75 73 68 28 66 70 29 |d);.X.ff|lush(fp)|
|00005ef0| 3b 0a 58 09 66 74 72 75 | 6e 63 61 74 65 28 66 64 |;.X.ftru|ncate(fd|
|00005f00| 2c 20 66 74 65 6c 6c 28 | 66 70 29 29 3b 0a 58 0a |, ftell(|fp));.X.|
|00005f10| 58 09 2f 2a 20 61 62 61 | 6e 64 6f 6e 20 66 64 20 |X./* aba|ndon fd |
|00005f20| 61 6e 64 20 66 70 20 65 | 76 65 6e 20 74 68 6f 75 |and fp e|ven thou|
|00005f30| 67 68 20 74 68 65 20 66 | 69 6c 65 20 69 73 20 6f |gh the f|ile is o|
|00005f40| 70 65 6e 2e 20 77 65 20 | 6e 65 65 64 20 74 6f 0a |pen. we |need to.|
|00005f50| 58 09 20 2a 20 6b 65 65 | 70 20 69 74 20 6f 70 65 |X. * kee|p it ope|
|00005f60| 6e 20 61 6e 64 20 6c 6f | 63 6b 65 64 2c 20 62 75 |n and lo|cked, bu|
|00005f70| 74 20 77 65 20 64 6f 6e | 27 74 20 6e 65 65 64 20 |t we don|'t need |
|00005f80| 74 68 65 20 68 61 6e 64 | 6c 65 73 20 65 6c 73 65 |the hand|les else|
|00005f90| 77 68 65 72 65 2e 0a 58 | 09 20 2a 2f 0a 58 7d 0a |where..X|. */.X}.|
|00005fa0| 58 0a 58 2f 2a 20 67 65 | 74 5f 63 68 61 72 28 66 |X.X/* ge|t_char(f|
|00005fb0| 69 6c 65 29 20 3a 20 6c | 69 6b 65 20 67 65 74 63 |ile) : l|ike getc|
|00005fc0| 28 29 20 62 75 74 20 69 | 6e 63 72 65 6d 65 6e 74 |() but i|ncrement|
|00005fd0| 20 4c 69 6e 65 4e 75 6d | 62 65 72 20 6f 6e 20 6e | LineNum|ber on n|
|00005fe0| 65 77 6c 69 6e 65 73 0a | 58 20 2a 2f 0a 69 6e 74 |ewlines.|X */.int|
|00005ff0| 0a 67 65 74 5f 63 68 61 | 72 28 66 69 6c 65 29 0a |.get_cha|r(file).|
|00006000| 58 09 46 49 4c 45 09 2a | 66 69 6c 65 3b 0a 58 7b |X.FILE.*|file;.X{|
|00006010| 0a 58 09 69 6e 74 09 63 | 68 3b 0a 58 0a 58 09 63 |.X.int.c|h;.X.X.c|
|00006020| 68 20 3d 20 67 65 74 63 | 28 66 69 6c 65 29 3b 0a |h = getc|(file);.|
|00006030| 58 09 69 66 20 28 63 68 | 20 3d 3d 20 27 5c 6e 27 |X.if (ch| == '\n'|
|00006040| 29 0a 58 09 09 53 65 74 | 5f 4c 69 6e 65 4e 75 6d |).X..Set|_LineNum|
|00006050| 28 4c 69 6e 65 4e 75 6d | 62 65 72 20 2b 20 31 29 |(LineNum|ber + 1)|
|00006060| 0a 58 09 72 65 74 75 72 | 6e 20 63 68 3b 0a 58 7d |.X.retur|n ch;.X}|
|00006070| 0a 58 0a 58 0a 58 2f 2a | 20 75 6e 67 65 74 5f 63 |.X.X.X/*| unget_c|
|00006080| 68 61 72 28 63 68 2c 20 | 66 69 6c 65 29 20 3a 20 |har(ch, |file) : |
|00006090| 6c 69 6b 65 20 75 6e 67 | 65 74 63 20 62 75 74 20 |like ung|etc but |
|000060a0| 64 6f 20 4c 69 6e 65 4e | 75 6d 62 65 72 20 70 72 |do LineN|umber pr|
|000060b0| 6f 63 65 73 73 69 6e 67 | 0a 58 20 2a 2f 0a 76 6f |ocessing|.X */.vo|
|000060c0| 69 64 0a 75 6e 67 65 74 | 5f 63 68 61 72 28 63 68 |id.unget|_char(ch|
|000060d0| 2c 20 66 69 6c 65 29 0a | 58 09 69 6e 74 09 63 68 |, file).|X.int.ch|
|000060e0| 3b 0a 58 09 46 49 4c 45 | 09 2a 66 69 6c 65 3b 0a |;.X.FILE|.*file;.|
|000060f0| 58 7b 0a 58 09 75 6e 67 | 65 74 63 28 63 68 2c 20 |X{.X.ung|etc(ch, |
|00006100| 66 69 6c 65 29 3b 0a 58 | 09 69 66 20 28 63 68 20 |file);.X|.if (ch |
|00006110| 3d 3d 20 27 5c 6e 27 29 | 0a 58 09 09 53 65 74 5f |== '\n')|.X..Set_|
|00006120| 4c 69 6e 65 4e 75 6d 28 | 4c 69 6e 65 4e 75 6d 62 |LineNum(|LineNumb|
|00006130| 65 72 20 2d 20 31 29 0a | 58 7d 0a 58 0a 58 0a 58 |er - 1).|X}.X.X.X|
|00006140| 2f 2a 20 67 65 74 5f 73 | 74 72 69 6e 67 28 73 74 |/* get_s|tring(st|
|00006150| 72 2c 20 6d 61 78 2c 20 | 66 69 6c 65 2c 20 74 65 |r, max, |file, te|
|00006160| 72 6d 73 74 72 29 20 3a | 20 6c 69 6b 65 20 66 67 |rmstr) :| like fg|
|00006170| 65 74 73 28 29 20 62 75 | 74 0a 58 20 2a 09 09 28 |ets() bu|t.X *..(|
|00006180| 31 29 20 68 61 73 20 74 | 65 72 6d 69 6e 61 74 6f |1) has t|erminato|
|00006190| 72 20 73 74 72 69 6e 67 | 20 77 68 69 63 68 20 73 |r string| which s|
|000061a0| 68 6f 75 6c 64 20 69 6e | 63 6c 75 64 65 20 5c 6e |hould in|clude \n|
|000061b0| 0a 58 20 2a 09 09 28 32 | 29 20 77 69 6c 6c 20 61 |.X *..(2|) will a|
|000061c0| 6c 77 61 79 73 20 6c 65 | 61 76 65 20 72 6f 6f 6d |lways le|ave room|
|000061d0| 20 66 6f 72 20 74 68 65 | 20 6e 75 6c 6c 0a 58 20 | for the| null.X |
|000061e0| 2a 09 09 28 33 29 20 75 | 73 65 73 20 67 65 74 5f |*..(3) u|ses get_|
|000061f0| 63 68 61 72 28 29 20 73 | 6f 20 4c 69 6e 65 4e 75 |char() s|o LineNu|
|00006200| 6d 62 65 72 20 77 69 6c | 6c 20 62 65 20 61 63 63 |mber wil|l be acc|
|00006210| 75 72 61 74 65 0a 58 20 | 2a 09 09 28 34 29 20 72 |urate.X |*..(4) r|
|00006220| 65 74 75 72 6e 73 20 45 | 4f 46 20 6f 72 20 74 65 |eturns E|OF or te|
|00006230| 72 6d 69 6e 61 74 69 6e | 67 20 63 68 61 72 61 63 |rminatin|g charac|
|00006240| 74 65 72 2c 20 77 68 69 | 63 68 65 76 65 72 0a 58 |ter, whi|chever.X|
|00006250| 20 2a 2f 0a 69 6e 74 0a | 67 65 74 5f 73 74 72 69 | */.int.|get_stri|
|00006260| 6e 67 28 73 74 72 69 6e | 67 2c 20 73 69 7a 65 2c |ng(strin|g, size,|
|00006270| 20 66 69 6c 65 2c 20 74 | 65 72 6d 73 29 0a 58 09 | file, t|erms).X.|
|00006280| 63 68 61 72 09 2a 73 74 | 72 69 6e 67 3b 0a 58 09 |char.*st|ring;.X.|
|00006290| 69 6e 74 09 73 69 7a 65 | 3b 0a 58 09 46 49 4c 45 |int.size|;.X.FILE|
|000062a0| 09 2a 66 69 6c 65 3b 0a | 58 09 63 68 61 72 09 2a |.*file;.|X.char.*|
|000062b0| 74 65 72 6d 73 3b 0a 58 | 7b 0a 58 09 69 6e 74 09 |terms;.X|{.X.int.|
|000062c0| 63 68 3b 0a 58 09 63 68 | 61 72 09 2a 69 6e 64 65 |ch;.X.ch|ar.*inde|
|000062d0| 78 28 29 3b 0a 58 0a 58 | 09 77 68 69 6c 65 20 28 |x();.X.X|.while (|
|000062e0| 45 4f 46 20 21 3d 20 28 | 63 68 20 3d 20 67 65 74 |EOF != (|ch = get|
|000062f0| 5f 63 68 61 72 28 66 69 | 6c 65 29 29 20 26 26 20 |_char(fi|le)) && |
|00006300| 21 69 6e 64 65 78 28 74 | 65 72 6d 73 2c 20 63 68 |!index(t|erms, ch|
|00006310| 29 29 0a 58 09 09 69 66 | 20 28 73 69 7a 65 20 3e |)).X..if| (size >|
|00006320| 20 31 29 0a 58 09 09 7b | 0a 58 09 09 09 2a 73 74 | 1).X..{|.X...*st|
|00006330| 72 69 6e 67 2b 2b 20 3d | 20 28 63 68 61 72 29 20 |ring++ =| (char) |
|00006340| 63 68 3b 0a 58 09 09 09 | 73 69 7a 65 2d 2d 3b 0a |ch;.X...|size--;.|
|00006350| 58 09 09 7d 0a 58 0a 58 | 09 69 66 20 28 73 69 7a |X..}.X.X|.if (siz|
|00006360| 65 20 3e 20 30 29 0a 58 | 09 09 2a 73 74 72 69 6e |e > 0).X|..*strin|
|00006370| 67 20 3d 20 27 5c 30 27 | 3b 0a 58 0a 58 09 72 65 |g = '\0'|;.X.X.re|
|00006380| 74 75 72 6e 20 63 68 3b | 0a 58 7d 0a 58 0a 58 0a |turn ch;|.X}.X.X.|
|00006390| 58 2f 2a 20 73 6b 69 70 | 5f 63 6f 6d 6d 65 6e 74 |X/* skip|_comment|
|000063a0| 73 28 66 69 6c 65 29 20 | 3a 20 72 65 61 64 20 70 |s(file) |: read p|
|000063b0| 61 73 74 20 63 6f 6d 6d | 65 6e 74 20 28 69 66 20 |ast comm|ent (if |
|000063c0| 61 6e 79 29 0a 58 20 2a | 2f 0a 76 6f 69 64 0a 73 |any).X *|/.void.s|
|000063d0| 6b 69 70 5f 63 6f 6d 6d | 65 6e 74 73 28 66 69 6c |kip_comm|ents(fil|
|000063e0| 65 29 0a 58 09 46 49 4c | 45 09 2a 66 69 6c 65 3b |e).X.FIL|E.*file;|
|000063f0| 0a 58 7b 0a 58 09 69 6e | 74 09 63 68 3b 0a 58 0a |.X{.X.in|t.ch;.X.|
+--------+-------------------------+-------------------------+--------+--------+
Only 25.0 KB of data is shown above.