home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1992 March / Source_Code_CD-ROM_Walnut_Creek_March_1992.iso / usenet / altsrcs / 1 / 1658 < prev    next >
SHell self-extracting ARchive  |  1990-12-28  |  37.1 KB

open in: MacOS 8.1     |     Win98     |     DOS

view JSON data     |     view as text

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

You can browse this item here: 1658

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% TrID E-Mail message (Var. 2) 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| 46 72 6f 6d 3a 20 6a 66 | 68 40 72 70 70 33 38 36 |From: jf|h@rpp386|
|00000010| 2e 63 61 63 74 75 73 2e | 6f 72 67 20 28 4a 6f 68 |.cactus.|org (Joh|
|00000020| 6e 20 46 2e 20 48 61 75 | 67 68 20 49 49 29 0a 4e |n F. Hau|gh II).N|
|00000030| 65 77 73 67 72 6f 75 70 | 73 3a 20 61 6c 74 2e 73 |ewsgroup|s: alt.s|
|00000040| 6f 75 72 63 65 73 0a 53 | 75 62 6a 65 63 74 3a 20 |ources.S|ubject: |
|00000050| 63 68 73 68 28 31 29 20 | 2d 20 63 68 61 6e 67 65 |chsh(1) |- change|
|00000060| 20 75 73 65 72 27 73 20 | 6c 6f 67 69 6e 20 73 68 | user's |login sh|
|00000070| 65 6c 6c 0a 4d 65 73 73 | 61 67 65 2d 49 44 3a 20 |ell.Mess|age-ID: |
|00000080| 3c 31 38 34 39 36 40 72 | 70 70 33 38 36 2e 63 61 |<18496@r|pp386.ca|
|00000090| 63 74 75 73 2e 6f 72 67 | 3e 0a 44 61 74 65 3a 20 |ctus.org|>.Date: |
|000000a0| 31 30 20 41 75 67 20 39 | 30 20 30 34 3a 32 38 3a |10 Aug 9|0 04:28:|
|000000b0| 34 33 20 47 4d 54 0a 0a | 41 20 73 68 6f 72 74 20 |43 GMT..|A short |
|000000c0| 77 68 69 6c 65 20 62 61 | 63 6b 20 49 20 70 6f 73 |while ba|ck I pos|
|000000d0| 74 65 64 20 63 68 66 6e | 28 31 29 20 62 65 63 61 |ted chfn|(1) beca|
|000000e0| 75 73 65 20 49 20 6e 65 | 65 64 65 64 20 61 20 77 |use I ne|eded a w|
|000000f0| 6f 72 6b 69 6e 67 20 63 | 68 66 6e 20 66 6f 72 0a |orking c|hfn for.|
|00000100| 61 6e 6f 74 68 65 72 20 | 70 72 6f 6a 65 63 74 2e |another |project.|
|00000110| 20 20 57 65 6c 6c 2c 20 | 63 68 73 68 20 69 73 20 | Well, |chsh is |
|00000120| 61 20 73 68 6f 72 74 20 | 68 6f 70 2c 20 73 6b 69 |a short |hop, ski|
|00000130| 70 2c 20 61 6e 64 20 6a | 75 6d 70 20 66 72 6f 6d |p, and j|ump from|
|00000140| 20 63 68 66 6e 2c 0a 73 | 6f 20 49 20 64 65 63 69 | chfn,.s|o I deci|
|00000150| 64 65 64 20 74 6f 20 68 | 6f 70 2c 20 73 6b 69 70 |ded to h|op, skip|
|00000160| 2c 20 61 6e 64 20 6a 75 | 6d 70 2e 20 20 49 20 77 |, and ju|mp. I w|
|00000170| 69 6c 6c 20 61 6c 73 6f | 20 62 65 20 70 6f 73 74 |ill also| be post|
|00000180| 69 6e 67 20 63 68 61 67 | 65 2c 20 77 68 69 63 68 |ing chag|e, which|
|00000190| 0a 69 73 20 61 20 6e 65 | 77 20 53 79 73 74 65 6d |.is a ne|w System|
|000001a0| 20 56 20 75 74 69 6c 69 | 74 79 20 49 20 64 72 65 | V utili|ty I dre|
|000001b0| 61 6d 74 20 75 70 20 74 | 6f 20 6d 61 6e 61 67 65 |amt up t|o manage|
|000001c0| 20 74 68 65 20 70 61 73 | 73 77 6f 72 64 20 61 67 | the pas|sword ag|
|000001d0| 69 6e 67 20 66 69 65 6c | 64 73 0a 69 6e 20 74 68 |ing fiel|ds.in th|
|000001e0| 65 20 53 79 73 74 65 6d | 20 56 20 2f 65 74 63 2f |e System| V /etc/|
|000001f0| 70 61 73 73 77 64 20 61 | 6e 64 20 2f 65 74 63 2f |passwd a|nd /etc/|
|00000200| 73 68 61 64 6f 77 20 66 | 69 6c 65 73 2e 0a 0a 63 |shadow f|iles...c|
|00000210| 68 73 68 28 31 29 20 70 | 65 72 6d 69 74 73 20 74 |hsh(1) p|ermits t|
|00000220| 68 65 20 75 73 65 72 20 | 74 6f 20 63 68 61 6e 67 |he user |to chang|
|00000230| 65 20 74 68 65 69 72 20 | 6c 6f 67 69 6e 20 73 68 |e their |login sh|
|00000240| 65 6c 6c 20 66 72 6f 6d | 20 6f 6e 65 20 6f 66 20 |ell from| one of |
|00000250| 73 65 76 65 72 61 6c 0a | 6c 65 67 61 6c 20 73 65 |several.|legal se|
|00000260| 6c 65 63 74 69 6f 6e 73 | 2c 20 77 68 69 63 68 20 |lections|, which |
|00000270| 61 72 65 20 65 6e 75 6d | 65 72 61 74 65 64 20 69 |are enum|erated i|
|00000280| 6e 20 74 68 65 20 66 69 | 6c 65 20 2f 65 74 63 2f |n the fi|le /etc/|
|00000290| 73 68 65 6c 6c 73 2e 0a | 0a 54 68 69 73 20 69 6d |shells..|.This im|
|000002a0| 70 6c 65 6d 65 6e 74 61 | 74 69 6f 6e 20 69 6e 63 |plementa|tion inc|
|000002b0| 6c 75 64 65 73 20 62 6f | 74 68 20 69 6e 74 65 72 |ludes bo|th inter|
|000002c0| 61 63 74 69 76 65 20 61 | 6e 64 20 63 6f 6d 6d 61 |active a|nd comma|
|000002d0| 6e 64 20 6c 69 6e 65 20 | 69 6e 74 65 72 66 61 63 |nd line |interfac|
|000002e0| 65 73 2e 0a 49 74 20 69 | 73 20 64 65 72 69 76 65 |es..It i|s derive|
|000002f0| 64 20 66 72 6f 6d 20 74 | 68 65 20 73 68 61 64 6f |d from t|he shado|
|00000300| 77 20 6c 6f 67 69 6e 20 | 63 6f 64 65 20 77 68 69 |w login |code whi|
|00000310| 63 68 20 77 61 73 20 70 | 6f 73 74 65 64 20 68 65 |ch was p|osted he|
|00000320| 72 65 20 69 6e 20 31 39 | 38 39 0a 61 6e 64 20 69 |re in 19|89.and i|
|00000330| 73 20 66 72 65 65 6c 79 | 20 72 65 64 69 73 74 72 |s freely| redistr|
|00000340| 69 62 75 74 61 62 6c 65 | 2e 0a 0a 54 68 65 20 63 |ibutable|...The c|
|00000350| 6f 64 65 20 69 6e 63 6c | 75 64 65 73 20 61 6e 20 |ode incl|udes an |
|00000360| 6f 70 74 69 6f 6e 20 74 | 6f 20 6b 65 65 70 20 44 |option t|o keep D|
|00000370| 42 4d 20 66 69 6c 65 73 | 20 75 70 20 74 6f 20 64 |BM files| up to d|
|00000380| 61 74 65 20 77 69 74 68 | 20 74 68 65 20 6c 61 74 |ate with| the lat|
|00000390| 65 73 74 0a 63 68 61 6e | 67 65 73 20 74 6f 20 74 |est.chan|ges to t|
|000003a0| 68 65 20 2f 65 74 63 2f | 70 61 73 73 77 64 20 66 |he /etc/|passwd f|
|000003b0| 69 6c 65 2c 20 74 68 65 | 72 65 62 79 20 61 6c 6d |ile, the|reby alm|
|000003c0| 6f 73 74 20 63 6f 6d 70 | 6c 65 74 65 6c 79 20 72 |ost comp|letely r|
|000003d0| 65 6d 6f 76 69 6e 67 20 | 74 68 65 20 6e 65 65 64 |emoving |the need|
|000003e0| 0a 74 6f 20 65 76 65 72 | 20 65 78 65 63 75 74 65 |.to ever| execute|
|000003f0| 20 74 68 65 20 6d 6b 70 | 61 73 73 77 64 20 63 6f | the mkp|asswd co|
|00000400| 6d 6d 61 6e 64 2e 0a 0a | 54 68 65 20 70 72 65 76 |mmand...|The prev|
|00000410| 69 6f 75 73 20 76 65 72 | 73 69 6f 6e 20 6f 66 20 |ious ver|sion of |
|00000420| 63 68 66 6e 20 68 61 64 | 20 61 20 70 72 6f 62 6c |chfn had| a probl|
|00000430| 65 6d 20 69 6e 20 70 77 | 70 61 63 6b 2e 63 20 28 |em in pw|pack.c (|
|00000440| 61 6e 64 20 65 76 65 6e | 20 70 77 65 6e 74 2e 63 |and even| pwent.c|
|00000450| 29 0a 77 68 69 63 68 20 | 49 20 74 68 69 6e 6b 20 |).which |I think |
|00000460| 68 61 73 20 62 65 65 6e | 20 72 65 73 6f 6c 76 65 |has been| resolve|
|00000470| 64 20 62 79 20 74 68 6f | 73 65 20 72 6f 75 74 69 |d by tho|se routi|
|00000480| 6e 65 73 20 69 6e 20 74 | 68 69 73 20 73 68 61 72 |nes in t|his shar|
|00000490| 63 68 69 76 65 2e 20 20 | 59 6f 75 0a 6d 61 79 20 |chive. |You.may |
|000004a0| 77 61 6e 74 20 74 6f 20 | 73 74 61 72 74 20 61 20 |want to |start a |
|000004b0| 63 6f 6c 6c 65 63 74 69 | 6f 6e 20 6f 66 20 72 65 |collecti|on of re|
|000004c0| 6c 61 74 65 64 20 66 69 | 6c 65 73 20 61 6e 64 20 |lated fi|les and |
|000004d0| 72 65 70 6c 61 63 65 20 | 61 6e 79 20 62 61 63 6b |replace |any back|
|000004e0| 6c 65 76 65 6c 0a 6d 6f | 64 75 6c 65 73 20 79 6f |level.mo|dules yo|
|000004f0| 75 20 6d 69 67 68 74 20 | 68 61 76 65 2e 0a 0a 41 |u might |have...A|
|00000500| 73 20 61 6c 77 61 79 73 | 2c 20 75 6e 73 68 61 72 |s always|, unshar|
|00000510| 20 61 6e 64 20 65 6e 6a | 6f 79 21 0a 0a 2d 2d 2d | and enj|oy!..---|
|00000520| 2d 2d 20 63 75 74 20 68 | 65 72 65 20 2d 2d 2d 2d |-- cut h|ere ----|
|00000530| 2d 0a 23 21 20 2f 62 69 | 6e 2f 73 68 0a 23 20 54 |-.#! /bi|n/sh.# T|
|00000540| 68 69 73 20 69 73 20 61 | 20 73 68 65 6c 6c 20 61 |his is a| shell a|
|00000550| 72 63 68 69 76 65 2c 20 | 6d 65 61 6e 69 6e 67 3a |rchive, |meaning:|
|00000560| 0a 23 20 31 2e 20 52 65 | 6d 6f 76 65 20 65 76 65 |.# 1. Re|move eve|
|00000570| 72 79 74 68 69 6e 67 20 | 61 62 6f 76 65 20 74 68 |rything |above th|
|00000580| 65 20 23 21 20 2f 62 69 | 6e 2f 73 68 20 6c 69 6e |e #! /bi|n/sh lin|
|00000590| 65 2e 0a 23 20 32 2e 20 | 53 61 76 65 20 74 68 65 |e..# 2. |Save the|
|000005a0| 20 72 65 73 75 6c 74 69 | 6e 67 20 74 65 78 74 20 | resulti|ng text |
|000005b0| 69 6e 20 61 20 66 69 6c | 65 2e 0a 23 20 33 2e 20 |in a fil|e..# 3. |
|000005c0| 45 78 65 63 75 74 65 20 | 74 68 65 20 66 69 6c 65 |Execute |the file|
|000005d0| 20 77 69 74 68 20 2f 62 | 69 6e 2f 73 68 20 28 6e | with /b|in/sh (n|
|000005e0| 6f 74 20 63 73 68 29 20 | 74 6f 20 63 72 65 61 74 |ot csh) |to creat|
|000005f0| 65 3a 0a 23 09 63 68 73 | 68 2e 31 0a 23 09 4d 61 |e:.#.chs|h.1.#.Ma|
|00000600| 6b 65 66 69 6c 65 0a 23 | 09 63 68 73 68 2e 63 0a |kefile.#|.chsh.c.|
|00000610| 23 09 70 77 65 6e 74 2e | 63 0a 23 09 70 77 70 61 |#.pwent.|c.#.pwpa|
|00000620| 63 6b 2e 63 0a 23 09 63 | 6f 6e 66 69 67 2e 68 0a |ck.c.#.c|onfig.h.|
|00000630| 23 20 54 68 69 73 20 61 | 72 63 68 69 76 65 20 63 |# This a|rchive c|
|00000640| 72 65 61 74 65 64 3a 20 | 54 68 75 20 41 75 67 20 |reated: |Thu Aug |
|00000650| 20 39 20 32 33 3a 31 34 | 3a 30 31 20 31 39 39 30 | 9 23:14|:01 1990|
|00000660| 0a 23 20 42 79 3a 09 4a | 6f 68 6e 20 46 2e 20 48 |.# By:.J|ohn F. H|
|00000670| 61 75 67 68 20 49 49 20 | 28 52 69 76 65 72 20 50 |augh II |(River P|
|00000680| 61 72 69 73 68 65 73 20 | 50 72 6f 67 72 61 6d 6d |arishes |Programm|
|00000690| 69 6e 67 2c 20 41 75 73 | 74 69 6e 20 54 58 29 0a |ing, Aus|tin TX).|
|000006a0| 65 78 70 6f 72 74 20 50 | 41 54 48 3b 20 50 41 54 |export P|ATH; PAT|
|000006b0| 48 3d 2f 62 69 6e 3a 2f | 75 73 72 2f 62 69 6e 3a |H=/bin:/|usr/bin:|
|000006c0| 24 50 41 54 48 0a 65 63 | 68 6f 20 73 68 61 72 3a |$PATH.ec|ho shar:|
|000006d0| 20 22 65 78 74 72 61 63 | 74 69 6e 67 20 27 63 68 | "extrac|ting 'ch|
|000006e0| 73 68 2e 31 27 22 20 27 | 28 31 32 35 38 20 63 68 |sh.1'" '|(1258 ch|
|000006f0| 61 72 61 63 74 65 72 73 | 29 27 0a 69 66 20 74 65 |aracters|)'.if te|
|00000700| 73 74 20 2d 66 20 27 63 | 68 73 68 2e 31 27 0a 74 |st -f 'c|hsh.1'.t|
|00000710| 68 65 6e 0a 09 65 63 68 | 6f 20 73 68 61 72 3a 20 |hen..ech|o shar: |
|00000720| 22 77 69 6c 6c 20 6e 6f | 74 20 6f 76 65 72 2d 77 |"will no|t over-w|
|00000730| 72 69 74 65 20 65 78 69 | 73 74 69 6e 67 20 66 69 |rite exi|sting fi|
|00000740| 6c 65 20 27 63 68 73 68 | 2e 31 27 22 0a 65 6c 73 |le 'chsh|.1'".els|
|00000750| 65 0a 73 65 64 20 27 73 | 2f 5e 58 2f 2f 27 20 3c |e.sed 's|/^X//' <|
|00000760| 3c 20 5c 53 48 41 52 5f | 45 4f 46 20 3e 20 27 63 |< \SHAR_|EOF > 'c|
|00000770| 68 73 68 2e 31 27 0a 58 | 2e 54 48 20 43 48 53 48 |hsh.1'.X|.TH CHSH|
|00000780| 20 31 0a 58 2e 53 48 20 | 4e 41 4d 45 0a 58 63 68 | 1.X.SH |NAME.Xch|
|00000790| 73 68 20 5c 2d 20 63 68 | 61 6e 67 65 20 6c 6f 67 |sh \- ch|ange log|
|000007a0| 69 6e 20 73 68 65 6c 6c | 0a 58 2e 53 48 20 53 59 |in shell|.X.SH SY|
|000007b0| 4e 4f 50 53 49 53 0a 58 | 5c 66 42 63 68 73 68 5c |NOPSIS.X|\fBchsh\|
|000007c0| 66 52 20 5b 20 5c 66 42 | 2d 73 20 5c 66 49 6c 6f |fR [ \fB|-s \fIlo|
|000007d0| 67 69 6e 5f 73 68 65 6c | 6c 5c 66 52 20 5d 20 5b |gin_shel|l\fR ] [|
|000007e0| 20 5c 66 49 75 73 65 72 | 5c 66 52 20 5d 0a 58 2e | \fIuser|\fR ].X.|
|000007f0| 53 48 20 44 45 53 43 52 | 49 50 54 49 4f 4e 0a 58 |SH DESCR|IPTION.X|
|00000800| 5c 66 49 63 68 73 68 5c | 66 20 63 68 61 6e 67 65 |\fIchsh\|f change|
|00000810| 73 20 74 68 65 20 75 73 | 65 72 20 6c 6f 67 69 6e |s the us|er login|
|00000820| 20 73 68 65 6c 6c 2e 0a | 58 54 68 69 73 20 64 65 | shell..|XThis de|
|00000830| 74 65 72 6d 69 6e 65 73 | 20 74 68 65 20 6e 61 6d |termines| the nam|
|00000840| 65 20 6f 66 20 74 68 65 | 20 75 73 65 72 27 73 20 |e of the| user's |
|00000850| 69 6e 69 74 69 61 6c 20 | 6c 6f 67 69 6e 20 63 6f |initial |login co|
|00000860| 6d 6d 61 6e 64 2e 0a 58 | 41 20 6e 6f 72 6d 61 6c |mmand..X|A normal|
|00000870| 20 75 73 65 72 20 6d 61 | 79 20 6f 6e 6c 79 20 63 | user ma|y only c|
|00000880| 68 61 6e 67 65 20 74 68 | 65 20 6c 6f 67 69 6e 20 |hange th|e login |
|00000890| 73 68 65 6c 6c 20 66 6f | 72 20 74 68 65 69 72 20 |shell fo|r their |
|000008a0| 6f 77 6e 20 61 63 63 6f | 75 6e 74 2c 0a 58 74 68 |own acco|unt,.Xth|
|000008b0| 65 20 73 75 70 65 72 20 | 75 73 65 72 20 6d 61 79 |e super |user may|
|000008c0| 20 63 68 61 6e 67 65 20 | 74 68 65 20 6c 6f 67 69 | change |the logi|
|000008d0| 6e 20 73 68 65 6c 6c 20 | 66 6f 72 20 61 6e 79 20 |n shell |for any |
|000008e0| 61 63 63 6f 75 6e 74 2e | 0a 58 2e 50 50 0a 58 54 |account.|.X.PP.XT|
|000008f0| 68 65 20 6f 6e 6c 79 20 | 72 65 73 74 72 69 63 74 |he only |restrict|
|00000900| 69 6f 6e 73 20 70 6c 61 | 63 65 64 20 6f 6e 20 74 |ions pla|ced on t|
|00000910| 68 65 20 6c 6f 67 69 6e | 20 73 68 65 6c 6c 20 69 |he login| shell i|
|00000920| 73 20 74 68 61 74 20 74 | 68 65 0a 58 63 6f 6d 6d |s that t|he.Xcomm|
|00000930| 61 6e 64 20 6e 61 6d 65 | 20 6d 75 73 74 20 62 65 |and name| must be|
|00000940| 20 6c 69 73 74 65 64 20 | 69 6e 20 5c 66 42 2f 65 | listed |in \fB/e|
|00000950| 74 63 2f 73 68 65 6c 6c | 73 5c 66 52 2c 20 75 6e |tc/shell|s\fR, un|
|00000960| 6c 65 73 73 20 74 68 65 | 0a 58 69 6e 76 6f 6b 65 |less the|.Xinvoke|
|00000970| 72 20 69 73 20 74 68 65 | 20 73 75 70 65 72 2d 75 |r is the| super-u|
|00000980| 73 65 72 2c 20 61 6e 64 | 20 74 68 65 6e 20 61 6e |ser, and| then an|
|00000990| 79 20 76 61 6c 75 65 20 | 6d 61 79 20 62 65 20 61 |y value |may be a|
|000009a0| 64 64 65 64 2e 0a 58 41 | 6e 20 61 63 63 6f 75 6e |dded..XA|n accoun|
|000009b0| 74 20 77 69 74 68 20 61 | 20 72 65 73 74 72 69 63 |t with a| restric|
|000009c0| 74 65 64 20 6c 6f 67 69 | 6e 20 73 68 65 6c 6c 20 |ted logi|n shell |
|000009d0| 6d 61 79 20 6e 6f 74 20 | 63 68 61 6e 67 65 0a 58 |may not |change.X|
|000009e0| 74 68 65 69 72 20 6c 6f | 67 69 6e 20 73 68 65 6c |their lo|gin shel|
|000009f0| 6c 2e 0a 58 46 6f 72 20 | 74 68 69 73 20 72 65 61 |l..XFor |this rea|
|00000a00| 73 6f 6e 2c 20 70 6c 61 | 63 69 6e 67 20 5c 66 42 |son, pla|cing \fB|
|00000a10| 2f 62 69 6e 2f 72 73 68 | 5c 66 52 20 69 6e 20 5c |/bin/rsh|\fR in \|
|00000a20| 66 42 2f 65 74 63 2f 73 | 68 65 6c 6c 73 5c 66 52 |fB/etc/s|hells\fR|
|00000a30| 0a 58 69 73 20 64 69 73 | 63 6f 75 72 61 67 65 64 |.Xis dis|couraged|
|00000a40| 20 73 69 6e 63 65 20 61 | 63 63 69 64 65 6e 74 61 | since a|ccidenta|
|00000a50| 6c 6c 79 20 63 68 61 6e | 67 69 6e 67 20 74 6f 20 |lly chan|ging to |
|00000a60| 61 20 72 65 73 74 72 69 | 63 74 65 64 0a 58 73 68 |a restri|cted.Xsh|
|00000a70| 65 6c 6c 20 77 6f 75 6c | 64 20 70 72 65 76 65 6e |ell woul|d preven|
|00000a80| 74 20 74 68 65 20 75 73 | 65 72 20 66 72 6f 6d 20 |t the us|er from |
|00000a90| 65 76 65 72 79 20 63 68 | 61 6e 67 69 6e 67 20 74 |every ch|anging t|
|00000aa0| 68 65 69 72 20 6c 6f 67 | 69 6e 0a 58 73 68 65 6c |heir log|in.Xshel|
|00000ab0| 6c 20 62 61 63 6b 20 74 | 6f 20 69 74 73 20 6f 72 |l back t|o its or|
|00000ac0| 69 67 69 6e 61 6c 20 76 | 61 6c 75 65 2e 0a 58 2e |iginal v|alue..X.|
|00000ad0| 50 50 0a 58 49 66 20 74 | 68 65 20 5c 66 42 2d 73 |PP.XIf t|he \fB-s|
|00000ae0| 5c 66 52 20 6f 70 74 69 | 6f 6e 20 69 73 20 6e 6f |\fR opti|on is no|
|00000af0| 74 20 73 65 6c 65 63 74 | 65 64 2c 20 5c 66 49 63 |t select|ed, \fIc|
|00000b00| 68 73 68 5c 66 20 6f 70 | 65 72 61 74 65 73 20 69 |hsh\f op|erates i|
|00000b10| 6e 20 61 6e 20 69 6e 74 | 65 72 61 63 74 69 76 65 |n an int|eractive|
|00000b20| 0a 58 66 61 73 68 69 6f | 6e 2c 20 70 72 6f 6d 70 |.Xfashio|n, promp|
|00000b30| 74 69 6e 67 20 74 68 65 | 20 75 73 65 72 20 77 69 |ting the| user wi|
|00000b40| 74 68 20 74 68 65 20 63 | 75 72 72 65 6e 74 20 6c |th the c|urrent l|
|00000b50| 6f 67 69 6e 20 73 68 65 | 6c 6c 2e 0a 58 45 6e 74 |ogin she|ll..XEnt|
|00000b60| 65 72 20 74 68 65 20 6e | 65 77 20 76 61 6c 75 65 |er the n|ew value|
|00000b70| 20 74 6f 20 63 68 61 6e | 67 65 20 74 68 65 20 66 | to chan|ge the f|
|00000b80| 69 65 6c 64 2c 20 6f 72 | 20 6c 65 61 76 65 20 74 |ield, or| leave t|
|00000b90| 68 65 20 6c 69 6e 65 20 | 62 6c 61 6e 6b 20 74 6f |he line |blank to|
|00000ba0| 20 75 73 65 0a 58 74 68 | 65 20 63 75 72 72 65 6e | use.Xth|e curren|
|00000bb0| 74 20 76 61 6c 75 65 2e | 0a 58 54 68 65 20 63 75 |t value.|.XThe cu|
|00000bc0| 72 72 65 6e 74 20 76 61 | 6c 75 65 20 69 73 20 64 |rrent va|lue is d|
|00000bd0| 69 73 70 6c 61 79 65 64 | 20 62 65 74 77 65 65 6e |isplayed| between|
|00000be0| 20 61 20 70 61 69 72 20 | 6f 66 20 5c 66 42 5b 20 | a pair |of \fB[ |
|00000bf0| 5d 5c 66 20 6d 61 72 6b | 73 2e 0a 58 2e 53 48 20 |]\f mark|s..X.SH |
|00000c00| 46 69 6c 65 73 0a 58 2f | 65 74 63 2f 70 61 73 73 |Files.X/|etc/pass|
|00000c10| 77 64 20 5c 2d 20 75 73 | 65 72 20 61 63 63 6f 75 |wd \- us|er accou|
|00000c20| 6e 74 20 69 6e 66 6f 72 | 6d 61 74 69 6f 6e 0a 58 |nt infor|mation.X|
|00000c30| 2e 62 72 0a 58 2f 65 74 | 63 2f 73 68 65 6c 6c 73 |.br.X/et|c/shells|
|00000c40| 20 5c 2d 20 6c 69 73 74 | 20 6f 66 20 76 61 6c 69 | \- list| of vali|
|00000c50| 64 20 6c 6f 67 69 6e 20 | 73 68 65 6c 6c 73 0a 58 |d login |shells.X|
|00000c60| 2e 53 48 20 53 65 65 20 | 41 6c 73 6f 0a 58 63 68 |.SH See |Also.Xch|
|00000c70| 66 6e 28 31 29 2c 0a 58 | 70 61 73 73 77 64 28 34 |fn(1),.X|passwd(4|
|00000c80| 29 0a 53 48 41 52 5f 45 | 4f 46 0a 69 66 20 74 65 |).SHAR_E|OF.if te|
|00000c90| 73 74 20 31 32 35 38 20 | 2d 6e 65 20 22 60 77 63 |st 1258 |-ne "`wc|
|00000ca0| 20 2d 63 20 3c 20 27 63 | 68 73 68 2e 31 27 60 22 | -c < 'c|hsh.1'`"|
|00000cb0| 0a 74 68 65 6e 0a 09 65 | 63 68 6f 20 73 68 61 72 |.then..e|cho shar|
|00000cc0| 3a 20 22 65 72 72 6f 72 | 20 74 72 61 6e 73 6d 69 |: "error| transmi|
|00000cd0| 74 74 69 6e 67 20 27 63 | 68 73 68 2e 31 27 22 20 |tting 'c|hsh.1'" |
|00000ce0| 27 28 73 68 6f 75 6c 64 | 20 68 61 76 65 20 62 65 |'(should| have be|
|00000cf0| 65 6e 20 31 32 35 38 20 | 63 68 61 72 61 63 74 65 |en 1258 |characte|
|00000d00| 72 73 29 27 0a 66 69 0a | 66 69 0a 65 63 68 6f 20 |rs)'.fi.|fi.echo |
|00000d10| 73 68 61 72 3a 20 22 65 | 78 74 72 61 63 74 69 6e |shar: "e|xtractin|
|00000d20| 67 20 27 4d 61 6b 65 66 | 69 6c 65 27 22 20 27 28 |g 'Makef|ile'" '(|
|00000d30| 37 38 31 34 20 63 68 61 | 72 61 63 74 65 72 73 29 |7814 cha|racters)|
|00000d40| 27 0a 69 66 20 74 65 73 | 74 20 2d 66 20 27 4d 61 |'.if tes|t -f 'Ma|
|00000d50| 6b 65 66 69 6c 65 27 0a | 74 68 65 6e 0a 09 65 63 |kefile'.|then..ec|
|00000d60| 68 6f 20 73 68 61 72 3a | 20 22 77 69 6c 6c 20 6e |ho shar:| "will n|
|00000d70| 6f 74 20 6f 76 65 72 2d | 77 72 69 74 65 20 65 78 |ot over-|write ex|
|00000d80| 69 73 74 69 6e 67 20 66 | 69 6c 65 20 27 4d 61 6b |isting f|ile 'Mak|
|00000d90| 65 66 69 6c 65 27 22 0a | 65 6c 73 65 0a 73 65 64 |efile'".|else.sed|
|00000da0| 20 27 73 2f 5e 58 2f 2f | 27 20 3c 3c 20 5c 53 48 | 's/^X//|' << \SH|
|00000db0| 41 52 5f 45 4f 46 20 3e | 20 27 4d 61 6b 65 66 69 |AR_EOF >| 'Makefi|
|00000dc0| 6c 65 27 0a 58 23 0a 58 | 23 20 43 6f 70 79 72 69 |le'.X#.X|# Copyri|
|00000dd0| 67 68 74 20 31 39 38 38 | 2c 31 39 38 39 2c 31 39 |ght 1988|,1989,19|
|00000de0| 39 30 2c 20 4a 6f 68 6e | 20 46 2e 20 48 61 75 67 |90, John| F. Haug|
|00000df0| 68 20 49 49 0a 58 23 20 | 41 6c 6c 20 72 69 67 68 |h II.X# |All righ|
|00000e00| 74 73 20 72 65 73 65 72 | 76 65 64 2e 0a 58 23 0a |ts reser|ved..X#.|
|00000e10| 58 23 20 4e 6f 6e 2d 63 | 6f 6d 6d 65 72 63 69 61 |X# Non-c|ommercia|
|00000e20| 6c 20 64 69 73 74 72 69 | 62 75 74 69 6f 6e 20 70 |l distri|bution p|
|00000e30| 65 72 6d 69 74 74 65 64 | 2e 20 20 59 6f 75 20 6d |ermitted|. You m|
|00000e40| 75 73 74 20 70 72 6f 76 | 69 64 65 20 74 68 69 73 |ust prov|ide this|
|00000e50| 20 73 6f 75 72 63 65 0a | 58 23 20 63 6f 64 65 20 | source.|X# code |
|00000e60| 69 6e 20 61 6e 79 20 64 | 69 73 74 72 69 62 75 74 |in any d|istribut|
|00000e70| 69 6f 6e 2e 20 20 54 68 | 69 73 20 6e 6f 74 69 63 |ion. Th|is notic|
|00000e80| 65 20 6d 75 73 74 20 72 | 65 6d 61 69 6e 20 69 6e |e must r|emain in|
|00000e90| 74 61 63 74 2e 0a 58 23 | 0a 58 23 09 40 28 23 29 |tact..X#|.X#.@(#)|
|00000ea0| 4d 61 6b 65 66 69 6c 65 | 09 32 2e 31 32 09 32 33 |Makefile|.2.12.23|
|00000eb0| 3a 30 37 3a 31 34 20 20 | 2d 20 53 68 61 64 6f 77 |:07:14 |- Shadow|
|00000ec0| 20 70 61 73 73 77 6f 72 | 64 20 73 79 73 74 65 6d | passwor|d system|
|00000ed0| 0a 58 23 0a 58 23 09 40 | 28 23 29 4d 61 6b 65 66 |.X#.X#.@|(#)Makef|
|00000ee0| 69 6c 65 09 32 2e 31 32 | 09 32 33 3a 30 37 3a 31 |ile.2.12|.23:07:1|
|00000ef0| 34 09 38 2f 39 2f 39 30 | 0a 58 23 0a 58 53 48 45 |4.8/9/90|.X#.XSHE|
|00000f00| 4c 4c 20 3d 20 2f 62 69 | 6e 2f 73 68 0a 58 0a 58 |LL = /bi|n/sh.X.X|
|00000f10| 23 20 44 65 66 69 6e 65 | 20 74 68 65 20 64 69 72 |# Define| the dir|
|00000f20| 65 63 74 6f 72 79 20 6c | 6f 67 69 6e 20 69 73 20 |ectory l|ogin is |
|00000f30| 63 6f 70 69 65 64 20 74 | 6f 2e 20 20 42 45 20 56 |copied t|o. BE V|
|00000f40| 45 52 59 20 43 41 52 45 | 46 55 4c 21 21 21 0a 58 |ERY CARE|FUL!!!.X|
|00000f50| 23 20 4c 4f 47 49 4e 44 | 49 52 20 3d 20 2f 62 69 |# LOGIND|IR = /bi|
|00000f60| 6e 0a 58 4c 4f 47 49 4e | 44 49 52 20 3d 20 2f 65 |n.XLOGIN|DIR = /e|
|00000f70| 74 63 0a 58 0a 58 23 20 | 50 69 63 6b 20 79 6f 75 |tc.X.X# |Pick you|
|00000f80| 72 20 66 61 76 6f 72 69 | 74 65 20 43 20 63 6f 6d |r favori|te C com|
|00000f90| 70 69 6c 65 72 20 61 6e | 64 20 74 61 67 73 20 63 |piler an|d tags c|
|00000fa0| 6f 6d 6d 61 6e 64 0a 58 | 43 43 20 3d 20 63 63 0a |ommand.X|CC = cc.|
|00000fb0| 58 54 41 47 53 20 3d 20 | 63 74 61 67 73 0a 58 0a |XTAGS = |ctags.X.|
|00000fc0| 58 23 20 4f 53 2e 20 20 | 43 75 72 72 65 6e 74 6c |X# OS. |Currentl|
|00000fd0| 79 20 6f 6e 6c 79 20 42 | 53 44 20 61 6e 64 20 55 |y only B|SD and U|
|00000fe0| 53 47 20 61 72 65 20 64 | 65 66 69 6e 65 64 2e 20 |SG are d|efined. |
|00000ff0| 20 49 66 20 79 6f 75 20 | 64 6f 6e 27 74 20 75 73 | If you |don't us|
|00001000| 65 20 42 53 44 2c 0a 58 | 23 20 55 53 47 20 28 53 |e BSD,.X|# USG (S|
|00001010| 79 73 74 65 6d 20 56 29 | 20 69 73 20 61 73 73 75 |ystem V)| is assu|
|00001020| 6d 65 64 2e 0a 58 23 20 | 4f 53 20 3d 20 2d 44 42 |med..X# |OS = -DB|
|00001030| 53 44 0a 58 0a 58 23 20 | 44 6f 20 79 6f 75 20 68 |SD.X.X# |Do you h|
|00001040| 61 76 65 20 74 6f 20 64 | 6f 20 72 61 6e 6c 69 62 |ave to d|o ranlib|
|00001050| 3f 20 20 53 6f 72 72 79 | 20 74 6f 20 68 65 61 72 |? Sorry| to hear|
|00001060| 20 74 68 61 74 20 2e 2e | 2e 0a 58 52 41 4e 4c 49 | that ..|..XRANLI|
|00001070| 42 20 3d 20 72 61 6e 6c | 69 62 0a 58 23 20 52 41 |B = ranl|ib.X# RA|
|00001080| 4e 4c 49 42 20 3d 20 65 | 63 68 6f 0a 58 0a 58 23 |NLIB = e|cho.X.X#|
|00001090| 20 46 6c 61 67 73 20 66 | 6f 72 20 53 43 4f 20 58 | Flags f|or SCO X|
|000010a0| 65 6e 69 78 2f 33 38 36 | 0a 58 43 46 4c 41 47 53 |enix/386|.XCFLAGS|
|000010b0| 20 3d 20 2d 4f 20 2d 4d | 33 20 2d 67 20 24 28 50 | = -O -M|3 -g $(P|
|000010c0| 57 44 45 46 29 20 24 28 | 41 4c 36 34 44 45 46 29 |WDEF) $(|AL64DEF)|
|000010d0| 20 24 28 4f 53 29 0a 58 | 4c 49 42 53 20 3d 20 2d | $(OS).X|LIBS = -|
|000010e0| 6c 63 72 79 70 74 20 2d | 6c 64 62 6d 0a 58 4c 44 |lcrypt -|ldbm.XLD|
|000010f0| 46 4c 41 47 53 20 3d 20 | 2d 4d 33 20 2d 67 0a 58 |FLAGS = |-M3 -g.X|
|00001100| 4c 54 46 4c 41 47 53 20 | 3d 20 0a 58 23 20 54 68 |LTFLAGS |= .X# Th|
|00001110| 69 73 20 73 68 6f 75 6c | 64 20 62 65 20 53 6c 69 |is shoul|d be Sli|
|00001120| 62 73 65 63 2e 61 20 66 | 6f 72 20 73 6d 61 6c 6c |bsec.a f|or small|
|00001130| 20 6d 6f 64 65 6c 2c 20 | 6f 72 20 4c 6c 69 62 73 | model, |or Llibs|
|00001140| 65 63 2e 61 20 66 6f 72 | 0a 58 23 20 6c 61 72 67 |ec.a for|.X# larg|
|00001150| 65 20 6d 6f 64 65 6c 20 | 6f 72 20 77 68 61 74 65 |e model |or whate|
|00001160| 76 65 72 2e 20 20 4d 55 | 53 54 20 41 47 52 45 45 |ver. MU|ST AGREE|
|00001170| 20 57 49 54 48 20 43 46 | 4c 41 47 53 21 21 21 0a | WITH CF|LAGS!!!.|
|00001180| 58 4c 49 42 53 45 43 20 | 3d 20 53 6c 69 62 73 65 |XLIBSEC |= Slibse|
|00001190| 63 2e 61 0a 58 0a 58 23 | 20 46 6c 61 67 73 20 66 |c.a.X.X#| Flags f|
|000011a0| 6f 72 20 6e 6f 72 6d 61 | 6c 20 6d 61 63 68 69 6e |or norma|l machin|
|000011b0| 65 73 0a 58 23 20 43 46 | 4c 41 47 53 20 3d 20 2d |es.X# CF|LAGS = -|
|000011c0| 4f 20 2d 67 20 24 28 50 | 57 44 45 46 29 20 24 28 |O -g $(P|WDEF) $(|
|000011d0| 41 4c 36 34 44 45 46 29 | 20 24 28 4f 53 29 0a 58 |AL64DEF)| $(OS).X|
|000011e0| 23 20 4c 49 42 53 20 3d | 0a 58 23 20 4c 44 46 4c |# LIBS =|.X# LDFL|
|000011f0| 41 47 53 20 3d 20 2d 67 | 0a 58 23 20 4c 49 42 53 |AGS = -g|.X# LIBS|
|00001200| 45 43 20 3d 20 6c 69 62 | 73 65 63 2e 61 0a 58 0a |EC = lib|sec.a.X.|
|00001210| 58 4c 4f 42 4a 53 20 3d | 20 6c 6d 61 69 6e 2e 6f |XLOBJS =| lmain.o|
|00001220| 20 6c 6f 67 69 6e 2e 6f | 20 65 6e 76 2e 6f 20 70 | login.o| env.o p|
|00001230| 61 73 73 77 6f 72 64 2e | 6f 20 65 6e 74 72 79 2e |assword.|o entry.|
|00001240| 6f 20 76 61 6c 69 64 2e | 6f 20 73 65 74 75 70 2e |o valid.|o setup.|
|00001250| 6f 20 73 68 65 6c 6c 2e | 6f 20 61 67 65 2e 6f 20 |o shell.|o age.o |
|00001260| 5c 0a 58 09 70 77 65 6e | 74 2e 6f 20 75 74 6d 70 |\.X.pwen|t.o utmp|
|00001270| 2e 6f 20 73 75 62 2e 6f | 20 6d 61 69 6c 2e 6f 20 |.o sub.o| mail.o |
|00001280| 6d 6f 74 64 2e 6f 20 6c | 6f 67 2e 6f 20 73 68 61 |motd.o l|og.o sha|
|00001290| 64 6f 77 2e 6f 20 64 69 | 61 6c 75 70 2e 6f 20 64 |dow.o di|alup.o d|
|000012a0| 69 61 6c 63 68 6b 2e 6f | 20 5c 0a 58 09 74 74 79 |ialchk.o| \.X.tty|
|000012b0| 74 79 70 65 2e 6f 20 66 | 61 69 6c 75 72 65 2e 6f |type.o f|ailure.o|
|000012c0| 20 70 6f 72 74 2e 6f 20 | 70 77 70 61 63 6b 2e 6f | port.o |pwpack.o|
|000012d0| 0a 58 0a 58 4c 53 52 43 | 53 20 3d 20 6c 6d 61 69 |.X.XLSRC|S = lmai|
|000012e0| 6e 2e 63 20 6c 6f 67 69 | 6e 2e 63 20 65 6e 76 2e |n.c logi|n.c env.|
|000012f0| 63 20 70 61 73 73 77 6f | 72 64 2e 63 20 65 6e 74 |c passwo|rd.c ent|
|00001300| 72 79 2e 63 20 76 61 6c | 69 64 2e 63 20 73 65 74 |ry.c val|id.c set|
|00001310| 75 70 2e 63 20 73 68 65 | 6c 6c 2e 63 20 61 67 65 |up.c she|ll.c age|
|00001320| 2e 63 20 5c 0a 58 09 70 | 77 65 6e 74 2e 63 20 75 |.c \.X.p|went.c u|
|00001330| 74 6d 70 2e 63 20 73 75 | 62 2e 63 20 6d 61 69 6c |tmp.c su|b.c mail|
|00001340| 2e 63 20 6d 6f 74 64 2e | 63 20 6c 6f 67 2e 63 20 |.c motd.|c log.c |
|00001350| 73 68 61 64 6f 77 2e 63 | 20 64 69 61 6c 75 70 2e |shadow.c| dialup.|
|00001360| 63 20 64 69 61 6c 63 68 | 6b 2e 63 20 5c 0a 58 09 |c dialch|k.c \.X.|
|00001370| 74 74 79 74 79 70 65 2e | 63 20 66 61 69 6c 75 72 |ttytype.|c failur|
|00001380| 65 2e 63 20 70 6f 72 74 | 2e 63 20 70 77 70 61 63 |e.c port|.c pwpac|
|00001390| 6b 2e 63 0a 58 0a 58 53 | 4f 42 4a 53 20 3d 20 73 |k.c.X.XS|OBJS = s|
|000013a0| 6d 61 69 6e 2e 6f 20 65 | 6e 76 2e 6f 20 70 61 73 |main.o e|nv.o pas|
|000013b0| 73 77 6f 72 64 2e 6f 20 | 65 6e 74 72 79 2e 6f 20 |sword.o |entry.o |
|000013c0| 73 75 76 61 6c 69 64 2e | 6f 20 73 75 73 65 74 75 |suvalid.|o susetu|
|000013d0| 70 2e 6f 20 73 75 73 68 | 65 6c 6c 2e 6f 20 5c 0a |p.o sush|ell.o \.|
|000013e0| 58 09 70 77 65 6e 74 2e | 6f 20 73 75 73 75 62 2e |X.pwent.|o susub.|
|000013f0| 6f 20 6d 61 69 6c 2e 6f | 20 6d 6f 74 64 2e 6f 20 |o mail.o| motd.o |
|00001400| 73 75 6c 6f 67 2e 6f 20 | 73 68 61 64 6f 77 2e 6f |sulog.o |shadow.o|
|00001410| 20 61 67 65 2e 6f 20 70 | 77 70 61 63 6b 2e 6f 0a | age.o p|wpack.o.|
|00001420| 58 0a 58 53 53 52 43 53 | 20 3d 20 73 6d 61 69 6e |X.XSSRCS| = smain|
|00001430| 2e 63 20 65 6e 76 2e 63 | 20 70 61 73 73 77 6f 72 |.c env.c| passwor|
|00001440| 64 2e 63 20 65 6e 74 72 | 79 2e 63 20 76 61 6c 69 |d.c entr|y.c vali|
|00001450| 64 2e 63 20 73 65 74 75 | 70 2e 63 20 73 68 65 6c |d.c setu|p.c shel|
|00001460| 6c 2e 63 20 5c 0a 58 09 | 70 77 65 6e 74 2e 63 20 |l.c \.X.|pwent.c |
|00001470| 73 75 62 2e 63 20 6d 61 | 69 6c 2e 63 20 6d 6f 74 |sub.c ma|il.c mot|
|00001480| 64 2e 63 20 73 75 6c 6f | 67 2e 63 20 73 68 61 64 |d.c sulo|g.c shad|
|00001490| 6f 77 2e 63 20 61 67 65 | 2e 63 20 70 77 70 61 63 |ow.c age|.c pwpac|
|000014a0| 6b 2e 63 0a 58 0a 58 50 | 4f 42 4a 53 20 3d 20 70 |k.c.X.XP|OBJS = p|
|000014b0| 6d 61 69 6e 2e 6f 20 70 | 61 73 73 77 6f 72 64 2e |main.o p|assword.|
|000014c0| 6f 20 65 6e 74 72 79 2e | 6f 20 76 61 6c 69 64 2e |o entry.|o valid.|
|000014d0| 6f 20 70 77 61 67 65 2e | 6f 20 70 77 65 6e 74 2e |o pwage.|o pwent.|
|000014e0| 6f 20 6f 62 73 63 75 72 | 65 2e 6f 20 73 68 61 64 |o obscur|e.o shad|
|000014f0| 6f 77 2e 6f 20 5c 0a 58 | 09 70 77 70 61 63 6b 2e |ow.o \.X|.pwpack.|
|00001500| 6f 0a 58 0a 58 50 53 52 | 43 53 20 3d 20 70 6d 61 |o.X.XPSR|CS = pma|
|00001510| 69 6e 2e 63 20 70 61 73 | 73 77 6f 72 64 2e 63 20 |in.c pas|sword.c |
|00001520| 65 6e 74 72 79 2e 63 20 | 76 61 6c 69 64 2e 63 20 |entry.c |valid.c |
|00001530| 61 67 65 2e 63 20 70 77 | 65 6e 74 2e 63 20 6f 62 |age.c pw|ent.c ob|
|00001540| 73 63 75 72 65 2e 63 20 | 73 68 61 64 6f 77 2e 63 |scure.c |shadow.c|
|00001550| 20 5c 0a 58 09 70 77 70 | 61 63 6b 2e 63 0a 58 0a | \.X.pwp|ack.c.X.|
|00001560| 58 47 50 53 52 43 53 20 | 3d 20 67 70 6d 61 69 6e |XGPSRCS |= gpmain|
|00001570| 2e 63 20 70 61 73 73 77 | 6f 72 64 2e 63 20 67 72 |.c passw|ord.c gr|
|00001580| 65 6e 74 2e 63 0a 58 0a | 58 47 50 4f 42 4a 53 20 |ent.c.X.|XGPOBJS |
|00001590| 3d 20 67 70 6d 61 69 6e | 2e 6f 20 70 61 73 73 77 |= gpmain|.o passw|
|000015a0| 6f 72 64 2e 6f 20 67 72 | 65 6e 74 2e 6f 0a 58 0a |ord.o gr|ent.o.X.|
|000015b0| 58 50 57 4f 42 4a 53 20 | 3d 20 70 77 63 6f 6e 76 |XPWOBJS |= pwconv|
|000015c0| 2e 6f 20 70 77 65 6e 74 | 2e 6f 20 73 68 61 64 6f |.o pwent|.o shado|
|000015d0| 77 2e 6f 20 70 77 61 67 | 65 2e 6f 20 70 77 70 61 |w.o pwag|e.o pwpa|
|000015e0| 63 6b 2e 6f 0a 58 0a 58 | 50 57 53 52 43 53 20 3d |ck.o.X.X|PWSRCS =|
|000015f0| 20 70 77 63 6f 6e 76 2e | 63 20 70 77 65 6e 74 2e | pwconv.|c pwent.|
|00001600| 63 20 73 68 61 64 6f 77 | 2e 63 20 61 67 65 2e 63 |c shadow|.c age.c|
|00001610| 20 70 77 70 61 63 6b 2e | 63 0a 58 0a 58 50 57 55 | pwpack.|c.X.XPWU|
|00001620| 4e 4f 42 4a 53 20 3d 20 | 70 77 75 6e 63 6f 6e 76 |NOBJS = |pwunconv|
|00001630| 2e 6f 20 70 77 65 6e 74 | 2e 6f 20 73 68 61 64 6f |.o pwent|.o shado|
|00001640| 77 2e 6f 20 70 77 61 67 | 65 2e 6f 20 70 77 70 61 |w.o pwag|e.o pwpa|
|00001650| 63 6b 2e 6f 0a 58 0a 58 | 50 57 55 4e 53 52 43 53 |ck.o.X.X|PWUNSRCS|
|00001660| 20 3d 20 70 77 75 6e 63 | 6f 6e 76 2e 63 20 70 77 | = pwunc|onv.c pw|
|00001670| 65 6e 74 2e 63 20 73 68 | 61 64 6f 77 2e 63 20 61 |ent.c sh|adow.c a|
|00001680| 67 65 2e 63 20 70 77 70 | 61 63 6b 2e 63 0a 58 0a |ge.c pwp|ack.c.X.|
|00001690| 58 53 55 4c 4f 47 4f 42 | 4a 53 20 3d 20 73 75 6c |XSULOGOB|JS = sul|
|000016a0| 6f 67 69 6e 2e 6f 20 65 | 6e 74 72 79 2e 6f 20 65 |ogin.o e|ntry.o e|
|000016b0| 6e 76 2e 6f 20 70 61 73 | 73 77 6f 72 64 2e 6f 20 |nv.o pas|sword.o |
|000016c0| 70 77 61 67 65 2e 6f 20 | 70 77 65 6e 74 2e 6f 20 |pwage.o |pwent.o |
|000016d0| 73 65 74 75 70 2e 6f 20 | 5c 0a 58 09 73 68 61 64 |setup.o |\.X.shad|
|000016e0| 6f 77 2e 6f 20 73 68 65 | 6c 6c 2e 6f 20 76 61 6c |ow.o she|ll.o val|
|000016f0| 69 64 2e 6f 20 70 77 70 | 61 63 6b 2e 6f 0a 58 0a |id.o pwp|ack.o.X.|
|00001700| 58 53 55 4c 4f 47 53 52 | 43 53 20 3d 20 73 75 6c |XSULOGSR|CS = sul|
|00001710| 6f 67 69 6e 2e 63 20 65 | 6e 74 72 79 2e 63 20 65 |ogin.c e|ntry.c e|
|00001720| 6e 76 2e 63 20 70 61 73 | 73 77 6f 72 64 2e 63 20 |nv.c pas|sword.c |
|00001730| 61 67 65 2e 63 20 70 77 | 65 6e 74 2e 63 20 73 65 |age.c pw|ent.c se|
|00001740| 74 75 70 2e 63 20 5c 0a | 58 09 73 68 61 64 6f 77 |tup.c \.|X.shadow|
|00001750| 2e 63 20 73 68 65 6c 6c | 2e 63 20 76 61 6c 69 64 |.c shell|.c valid|
|00001760| 2e 63 20 70 77 70 61 63 | 6b 2e 63 0a 58 0a 58 44 |.c pwpac|k.c.X.XD|
|00001770| 42 4f 42 4a 53 20 3d 20 | 6d 6b 70 61 73 73 77 64 |BOBJS = |mkpasswd|
|00001780| 2e 6f 20 70 77 65 6e 74 | 2e 6f 20 70 77 70 61 63 |.o pwent|.o pwpac|
|00001790| 6b 2e 6f 0a 58 0a 58 44 | 42 53 52 43 53 20 3d 20 |k.o.X.XD|BSRCS = |
|000017a0| 6d 6b 70 61 73 73 77 64 | 2e 63 20 70 77 65 6e 74 |mkpasswd|.c pwent|
|000017b0| 2e 63 20 70 77 70 61 63 | 6b 2e 63 0a 58 0a 58 4e |.c pwpac|k.c.X.XN|
|000017c0| 47 53 52 43 53 20 3d 20 | 6e 65 77 67 72 70 2e 63 |GSRCS = |newgrp.c|
|000017d0| 20 73 68 61 64 6f 77 2e | 63 20 70 61 73 73 77 6f | shadow.|c passwo|
|000017e0| 72 64 2e 63 0a 58 0a 58 | 4e 47 4f 42 4a 53 20 3d |rd.c.X.X|NGOBJS =|
|000017f0| 20 6e 65 77 67 72 70 2e | 6f 20 73 68 61 64 6f 77 | newgrp.|o shadow|
|00001800| 2e 6f 20 70 61 73 73 77 | 6f 72 64 2e 6f 0a 58 0a |.o passw|ord.o.X.|
|00001810| 58 43 48 46 4e 53 52 43 | 53 20 3d 20 63 68 66 6e |XCHFNSRC|S = chfn|
|00001820| 2e 63 20 70 77 65 6e 74 | 2e 63 20 70 77 70 61 63 |.c pwent|.c pwpac|
|00001830| 6b 2e 63 0a 58 0a 58 43 | 48 46 4e 4f 42 4a 53 20 |k.c.X.XC|HFNOBJS |
|00001840| 3d 20 63 68 66 6e 2e 6f | 20 70 77 65 6e 74 2e 6f |= chfn.o| pwent.o|
|00001850| 20 70 77 70 61 63 6b 2e | 6f 0a 58 0a 58 43 48 53 | pwpack.|o.X.XCHS|
|00001860| 48 53 52 43 53 20 3d 20 | 63 68 73 68 2e 63 20 70 |HSRCS = |chsh.c p|
|00001870| 77 65 6e 74 2e 63 20 70 | 77 70 61 63 6b 2e 63 0a |went.c p|wpack.c.|
|00001880| 58 0a 58 43 48 53 48 4f | 42 4a 53 20 3d 20 63 68 |X.XCHSHO|BJS = ch|
|00001890| 73 68 2e 6f 20 70 77 65 | 6e 74 2e 6f 20 70 77 70 |sh.o pwe|nt.o pwp|
|000018a0| 61 63 6b 2e 6f 0a 58 0a | 58 43 48 41 47 45 4f 42 |ack.o.X.|XCHAGEOB|
|000018b0| 4a 53 20 3d 20 63 68 61 | 67 65 2e 6f 20 70 77 65 |JS = cha|ge.o pwe|
|000018c0| 6e 74 2e 6f 20 70 77 70 | 61 63 6b 2e 6f 20 70 77 |nt.o pwp|ack.o pw|
|000018d0| 61 67 65 2e 6f 20 73 68 | 61 64 6f 77 2e 6f 0a 58 |age.o sh|adow.o.X|
|000018e0| 0a 58 43 48 41 47 45 53 | 52 43 53 20 3d 20 63 68 |.XCHAGES|RCS = ch|
|000018f0| 61 67 65 2e 63 20 70 77 | 65 6e 74 2e 63 20 70 77 |age.c pw|ent.c pw|
|00001900| 70 61 63 6b 2e 63 20 61 | 67 65 2e 63 20 73 68 61 |pack.c a|ge.c sha|
|00001910| 64 6f 77 2e 63 0a 58 0a | 58 41 4c 4c 53 52 43 53 |dow.c.X.|XALLSRCS|
|00001920| 20 3d 20 61 67 65 2e 63 | 20 64 69 61 6c 63 68 6b | = age.c| dialchk|
|00001930| 2e 63 20 64 69 61 6c 75 | 70 2e 63 20 65 6e 74 72 |.c dialu|p.c entr|
|00001940| 79 2e 63 20 65 6e 76 2e | 63 20 6c 6d 61 69 6e 2e |y.c env.|c lmain.|
|00001950| 63 20 6c 6f 67 2e 63 20 | 6c 6f 67 69 6e 2e 63 20 |c log.c |login.c |
|00001960| 6d 61 69 6c 2e 63 20 5c | 0a 58 09 6d 6f 74 64 2e |mail.c \|.X.motd.|
|00001970| 63 20 6f 62 73 63 75 72 | 65 2e 63 20 70 61 73 73 |c obscur|e.c pass|
|00001980| 77 6f 72 64 2e 63 20 70 | 6d 61 69 6e 2e 63 20 70 |word.c p|main.c p|
|00001990| 77 63 6f 6e 76 2e 63 20 | 70 77 65 6e 74 2e 63 20 |wconv.c |pwent.c |
|000019a0| 70 77 75 6e 63 6f 6e 76 | 2e 63 20 5c 0a 58 09 73 |pwunconv|.c \.X.s|
|000019b0| 65 74 75 70 2e 63 20 73 | 68 61 64 6f 77 2e 63 20 |etup.c s|hadow.c |
|000019c0| 73 68 65 6c 6c 2e 63 20 | 73 6d 61 69 6e 2e 63 20 |shell.c |smain.c |
|000019d0| 73 75 62 2e 63 20 73 75 | 6c 6f 67 2e 63 20 73 75 |sub.c su|log.c su|
|000019e0| 6c 6f 67 69 6e 2e 63 20 | 74 74 79 74 79 70 65 2e |login.c |ttytype.|
|000019f0| 63 20 5c 0a 58 09 75 74 | 6d 70 2e 63 20 76 61 6c |c \.X.ut|mp.c val|
|00001a00| 69 64 2e 63 20 70 6f 72 | 74 2e 63 20 6e 65 77 67 |id.c por|t.c newg|
|00001a10| 72 70 2e 63 20 67 70 6d | 61 69 6e 2e 63 20 67 72 |rp.c gpm|ain.c gr|
|00001a20| 65 6e 74 2e 63 20 6d 6b | 70 61 73 73 77 64 2e 63 |ent.c mk|passwd.c|
|00001a30| 20 70 77 70 61 63 6b 2e | 63 20 5c 0a 58 09 63 68 | pwpack.|c \.X.ch|
|00001a40| 66 6e 2e 63 20 63 68 73 | 68 2e 63 20 63 68 61 67 |fn.c chs|h.c chag|
|00001a50| 65 2e 63 0a 58 0a 58 46 | 49 4c 45 53 31 20 3d 20 |e.c.X.XF|ILES1 = |
|00001a60| 52 45 41 44 4d 45 20 6c | 6f 67 2e 63 20 6d 61 69 |README l|og.c mai|
|00001a70| 6c 2e 63 20 73 68 61 64 | 6f 77 2e 68 20 73 75 6c |l.c shad|ow.h sul|
|00001a80| 6f 67 2e 63 20 4d 61 6b | 65 66 69 6c 65 20 65 6e |og.c Mak|efile en|
|00001a90| 74 72 79 2e 63 20 6f 62 | 73 63 75 72 65 2e 63 20 |try.c ob|scure.c |
|00001aa0| 5c 0a 58 09 73 65 74 75 | 70 2e 63 20 73 75 62 2e |\.X.setu|p.c sub.|
|00001ab0| 63 20 63 6f 6e 66 69 67 | 2e 68 20 70 6d 61 69 6e |c config|.h pmain|
|00001ac0| 2e 63 20 73 75 6c 6f 67 | 69 6e 2e 63 20 64 69 61 |.c sulog|in.c dia|
|00001ad0| 6c 75 70 2e 68 20 74 74 | 79 74 79 70 65 2e 63 20 |lup.h tt|ytype.c |
|00001ae0| 5c 0a 58 09 70 6f 72 74 | 2e 63 20 6e 65 77 67 72 |\.X.port|.c newgr|
|00001af0| 70 2e 63 20 63 68 61 67 | 65 2e 63 0a 58 0a 58 46 |p.c chag|e.c.X.XF|
|00001b00| 49 4c 45 53 32 20 3d 20 | 6c 61 73 74 6c 6f 67 2e |ILES2 = |lastlog.|
|00001b10| 68 20 6c 6f 67 69 6e 2e | 63 20 6d 6f 74 64 2e 63 |h login.|c motd.c|
|00001b20| 20 70 61 73 73 77 6f 72 | 64 2e 63 20 73 68 65 6c | passwor|d.c shel|
|00001b30| 6c 2e 63 20 75 74 6d 70 | 2e 63 20 61 67 65 2e 63 |l.c utmp|.c age.c|
|00001b40| 20 65 6e 76 2e 63 20 5c | 0a 58 09 70 77 65 6e 74 | env.c \|.X.pwent|
|00001b50| 2e 63 20 73 68 61 64 6f | 77 2e 63 20 76 61 6c 69 |.c shado|w.c vali|
|00001b60| 64 2e 63 20 6c 6d 61 69 | 6e 2e 63 20 73 6d 61 69 |d.c lmai|n.c smai|
|00001b70| 6e 2e 63 20 70 77 63 6f | 6e 76 2e 63 20 64 69 61 |n.c pwco|nv.c dia|
|00001b80| 6c 75 70 2e 63 20 64 69 | 61 6c 63 68 6b 2e 63 20 |lup.c di|alchk.c |
|00001b90| 5c 0a 58 09 70 77 75 6e | 63 6f 6e 76 2e 63 20 66 |\.X.pwun|conv.c f|
|00001ba0| 61 69 6c 75 72 65 2e 63 | 20 66 61 69 6c 6c 6f 67 |ailure.c| faillog|
|00001bb0| 2e 68 20 66 61 69 6c 6c | 6f 67 2e 63 20 70 6f 72 |.h faill|og.c por|
|00001bc0| 74 2e 68 20 67 70 6d 61 | 69 6e 2e 63 20 67 72 65 |t.h gpma|in.c gre|
|00001bd0| 6e 74 2e 63 20 5c 0a 58 | 09 6d 6b 70 61 73 73 77 |nt.c \.X|.mkpassw|
|00001be0| 64 2e 63 20 70 77 70 61 | 63 6b 2e 63 20 63 68 66 |d.c pwpa|ck.c chf|
|00001bf0| 6e 2e 63 20 63 68 73 68 | 2e 63 0a 58 0a 58 4d 41 |n.c chsh|.c.X.XMA|
|00001c00| 4e 5f 31 20 3d 20 63 68 | 66 6e 2e 31 20 63 68 73 |N_1 = ch|fn.1 chs|
|00001c10| 68 2e 31 20 6c 6f 67 69 | 6e 2e 31 20 70 61 73 73 |h.1 logi|n.1 pass|
|00001c20| 77 64 2e 31 20 73 75 2e | 31 0a 58 4d 41 4e 5f 33 |wd.1 su.|1.XMAN_3|
|00001c30| 20 3d 20 73 68 61 64 6f | 77 2e 33 0a 58 4d 41 4e | = shado|w.3.XMAN|
|00001c40| 5f 34 20 3d 20 66 61 69 | 6c 6c 6f 67 2e 34 20 70 |_4 = fai|llog.4 p|
|00001c50| 61 73 73 77 64 2e 34 20 | 73 68 61 64 6f 77 2e 34 |asswd.4 |shadow.4|
|00001c60| 0a 58 4d 41 4e 5f 38 20 | 3d 20 66 61 69 6c 6c 6f |.XMAN_8 |= faillo|
|00001c70| 67 2e 38 20 70 77 63 6f | 6e 76 2e 38 20 70 77 75 |g.8 pwco|nv.8 pwu|
|00001c80| 6e 63 6f 6e 76 2e 38 20 | 73 75 6c 6f 67 69 6e 2e |nconv.8 |sulogin.|
|00001c90| 38 0a 58 0a 58 44 4f 43 | 53 20 3d 20 24 28 4d 41 |8.X.XDOC|S = $(MA|
|00001ca0| 4e 5f 31 29 20 24 28 4d | 41 4e 5f 33 29 20 24 28 |N_1) $(M|AN_3) $(|
|00001cb0| 4d 41 4e 5f 34 29 20 24 | 28 4d 41 4e 5f 38 29 0a |MAN_4) $|(MAN_8).|
|00001cc0| 58 0a 58 42 49 4e 53 20 | 3d 20 73 75 20 6c 6f 67 |X.XBINS |= su log|
|00001cd0| 69 6e 20 70 77 63 6f 6e | 76 20 70 77 75 6e 63 6f |in pwcon|v pwunco|
|00001ce0| 6e 76 20 70 61 73 73 77 | 64 20 73 75 6c 6f 67 69 |nv passw|d sulogi|
|00001cf0| 6e 20 66 61 69 6c 6c 6f | 67 20 6e 65 77 67 72 70 |n faillo|g newgrp|
|00001d00| 20 67 70 61 73 73 77 64 | 20 5c 0a 58 09 6d 6b 70 | gpasswd| \.X.mkp|
|00001d10| 61 73 73 77 64 20 63 68 | 66 6e 20 63 68 73 68 20 |asswd ch|fn chsh |
|00001d20| 63 68 61 67 65 0a 58 0a | 58 61 6c 6c 3a 09 24 28 |chage.X.|Xall:.$(|
|00001d30| 42 49 4e 53 29 20 24 28 | 44 4f 43 53 29 0a 58 0a |BINS) $(|DOCS).X.|
|00001d40| 58 6c 69 62 73 65 63 3a | 20 73 68 61 64 6f 77 2e |Xlibsec:| shadow.|
|00001d50| 6f 0a 58 09 61 72 20 72 | 76 20 24 28 4c 49 42 53 |o.X.ar r|v $(LIBS|
|00001d60| 45 43 29 20 73 68 61 64 | 6f 77 2e 6f 0a 58 09 24 |EC) shad|ow.o.X.$|
|00001d70| 28 52 41 4e 4c 49 42 29 | 20 24 28 4c 49 42 53 45 |(RANLIB)| $(LIBSE|
|00001d80| 43 29 0a 58 0a 58 69 6e | 73 74 61 6c 6c 3a 20 61 |C).X.Xin|stall: a|
|00001d90| 6c 6c 0a 58 09 73 74 72 | 69 70 20 24 28 42 49 4e |ll.X.str|ip $(BIN|
|00001da0| 53 29 0a 58 09 63 70 20 | 6c 6f 67 69 6e 20 24 28 |S).X.cp |login $(|
|00001db0| 4c 4f 47 49 4e 44 49 52 | 29 2f 6c 6f 67 69 6e 0a |LOGINDIR|)/login.|
|00001dc0| 58 09 63 70 20 6d 6b 70 | 61 73 73 77 64 20 70 77 |X.cp mkp|asswd pw|
|00001dd0| 63 6f 6e 76 20 70 77 75 | 6e 63 6f 6e 76 20 73 75 |conv pwu|nconv su|
|00001de0| 6c 6f 67 69 6e 20 2f 65 | 74 63 0a 58 09 63 70 20 |login /e|tc.X.cp |
|00001df0| 73 75 20 70 61 73 73 77 | 64 20 67 70 61 73 73 77 |su passw|d gpassw|
|00001e00| 64 20 66 61 69 6c 6c 6f | 67 20 6e 65 77 67 72 70 |d faillo|g newgrp|
|00001e10| 20 63 68 66 6e 20 63 68 | 73 68 20 2f 62 69 6e 0a | chfn ch|sh /bin.|
|00001e20| 58 09 63 70 20 73 68 61 | 64 6f 77 2e 68 20 2f 75 |X.cp sha|dow.h /u|
|00001e30| 73 72 2f 69 6e 63 6c 75 | 64 65 0a 58 09 63 68 6f |sr/inclu|de.X.cho|
|00001e40| 77 6e 20 72 6f 6f 74 20 | 24 28 4c 4f 47 49 4e 44 |wn root |$(LOGIND|
|00001e50| 49 52 29 2f 6c 6f 67 69 | 6e 20 2f 65 74 63 2f 70 |IR)/logi|n /etc/p|
|00001e60| 77 63 6f 6e 76 20 2f 65 | 74 63 2f 70 77 75 6e 63 |wconv /e|tc/pwunc|
|00001e70| 6f 6e 76 20 2f 65 74 63 | 2f 73 75 6c 6f 67 69 6e |onv /etc|/sulogin|
|00001e80| 20 5c 0a 58 09 09 2f 62 | 69 6e 2f 73 75 20 2f 62 | \.X../b|in/su /b|
|00001e90| 69 6e 2f 70 61 73 73 77 | 64 20 2f 62 69 6e 2f 67 |in/passw|d /bin/g|
|00001ea0| 70 61 73 73 77 64 20 2f | 62 69 6e 2f 6e 65 77 67 |passwd /|bin/newg|
|00001eb0| 72 70 20 2f 65 74 63 2f | 6d 6b 70 61 73 73 77 64 |rp /etc/|mkpasswd|
|00001ec0| 0a 58 09 63 68 67 72 70 | 20 72 6f 6f 74 20 24 28 |.X.chgrp| root $(|
|00001ed0| 4c 4f 47 49 4e 44 49 52 | 29 2f 6c 6f 67 69 6e 20 |LOGINDIR|)/login |
|00001ee0| 2f 65 74 63 2f 70 77 63 | 6f 6e 76 20 2f 65 74 63 |/etc/pwc|onv /etc|
|00001ef0| 2f 70 77 75 6e 63 6f 6e | 76 20 2f 65 74 63 2f 73 |/pwuncon|v /etc/s|
|00001f00| 75 6c 6f 67 69 6e 20 5c | 0a 58 09 09 2f 62 69 6e |ulogin \|.X../bin|
|00001f10| 2f 73 75 20 2f 62 69 6e | 2f 70 61 73 73 77 64 20 |/su /bin|/passwd |
|00001f20| 2f 62 69 6e 2f 67 70 61 | 73 73 77 64 20 2f 62 69 |/bin/gpa|sswd /bi|
|00001f30| 6e 2f 6e 65 77 67 72 70 | 20 2f 65 74 63 2f 6d 6b |n/newgrp| /etc/mk|
|00001f40| 70 61 73 73 77 64 0a 58 | 09 63 68 6f 77 6e 20 62 |passwd.X|.chown b|
|00001f50| 69 6e 20 2f 62 69 6e 2f | 66 61 69 6c 6c 6f 67 20 |in /bin/|faillog |
|00001f60| 2f 75 73 72 2f 69 6e 63 | 6c 75 64 65 2f 73 68 61 |/usr/inc|lude/sha|
|00001f70| 64 6f 77 2e 68 0a 58 09 | 63 68 67 72 70 20 62 69 |dow.h.X.|chgrp bi|
|00001f80| 6e 20 2f 62 69 6e 2f 66 | 61 69 6c 6c 6f 67 20 2f |n /bin/f|aillog /|
|00001f90| 75 73 72 2f 69 6e 63 6c | 75 64 65 2f 73 68 61 64 |usr/incl|ude/shad|
|00001fa0| 6f 77 2e 68 0a 58 09 63 | 68 6d 6f 64 20 37 30 30 |ow.h.X.c|hmod 700|
|00001fb0| 20 2f 65 74 63 2f 70 77 | 63 6f 6e 76 20 2f 65 74 | /etc/pw|conv /et|
|00001fc0| 63 2f 70 77 75 6e 63 6f | 6e 76 20 2f 65 74 63 2f |c/pwunco|nv /etc/|
|00001fd0| 73 75 6c 6f 67 69 6e 20 | 2f 65 74 63 2f 6d 6b 70 |sulogin |/etc/mkp|
|00001fe0| 61 73 73 77 64 0a 58 09 | 63 68 6d 6f 64 20 34 37 |asswd.X.|chmod 47|
|00001ff0| 31 31 20 24 28 4c 4f 47 | 49 4e 44 49 52 29 2f 6c |11 $(LOG|INDIR)/l|
|00002000| 6f 67 69 6e 20 2f 62 69 | 6e 2f 73 75 20 2f 62 69 |ogin /bi|n/su /bi|
|00002010| 6e 2f 70 61 73 73 77 64 | 20 2f 62 69 6e 2f 67 70 |n/passwd| /bin/gp|
|00002020| 61 73 73 77 64 20 5c 0a | 58 09 09 2f 62 69 6e 2f |asswd \.|X../bin/|
|00002030| 6e 65 77 67 72 70 20 2f | 62 69 6e 2f 63 68 66 6e |newgrp /|bin/chfn|
|00002040| 0a 58 09 63 68 6d 6f 64 | 20 37 31 31 20 2f 62 69 |.X.chmod| 711 /bi|
|00002050| 6e 2f 66 61 69 6c 6c 6f | 67 0a 58 09 63 68 6d 6f |n/faillo|g.X.chmo|
|00002060| 64 20 34 34 34 20 2f 75 | 73 72 2f 69 6e 63 6c 75 |d 444 /u|sr/inclu|
|00002070| 64 65 2f 73 68 61 64 6f | 77 2e 68 0a 58 0a 58 6c |de/shado|w.h.X.Xl|
|00002080| 69 6e 74 3a 09 73 75 2e | 4c 20 6c 6f 67 69 6e 2e |int:.su.|L login.|
|00002090| 4c 20 70 77 63 6f 6e 76 | 2e 4c 20 70 77 75 6e 63 |L pwconv|.L pwunc|
|000020a0| 6f 6e 76 2e 4c 20 70 61 | 73 73 77 64 2e 4c 20 73 |onv.L pa|sswd.L s|
|000020b0| 75 6c 6f 67 69 6e 2e 4c | 20 66 61 69 6c 6c 6f 67 |ulogin.L| faillog|
|000020c0| 2e 4c 20 5c 0a 58 09 6e | 65 77 67 72 70 2e 4c 20 |.L \.X.n|ewgrp.L |
|000020d0| 67 70 61 73 73 77 64 2e | 4c 20 6d 6b 70 61 73 73 |gpasswd.|L mkpass|
|000020e0| 77 64 2e 4c 20 63 68 66 | 6e 2e 4c 20 63 68 73 68 |wd.L chf|n.L chsh|
|000020f0| 2e 4c 0a 58 0a 58 74 61 | 67 73 3a 09 24 28 41 4c |.L.X.Xta|gs:.$(AL|
|00002100| 4c 53 52 43 53 29 0a 58 | 09 24 28 54 41 47 53 29 |LSRCS).X|.$(TAGS)|
|00002110| 20 24 28 41 4c 4c 53 52 | 43 53 29 0a 58 0a 58 52 | $(ALLSR|CS).X.XR|
|00002120| 45 41 44 4d 45 3a 09 73 | 2e 52 45 41 44 4d 45 0a |EADME:.s|.README.|
|00002130| 58 09 67 65 74 20 73 2e | 52 45 41 44 4d 45 0a 58 |X.get s.|README.X|
|00002140| 09 0a 58 24 28 44 4f 43 | 53 29 3a 0a 58 09 67 65 |..X$(DOC|S):.X.ge|
|00002150| 74 20 73 2e 24 40 0a 58 | 0a 58 6c 6f 67 69 6e 3a |t s.$@.X|.Xlogin:|
|00002160| 09 24 28 4c 4f 42 4a 53 | 29 0a 58 09 24 28 43 43 |.$(LOBJS|).X.$(CC|
|00002170| 29 20 2d 6f 20 6c 6f 67 | 69 6e 20 24 28 4c 44 46 |) -o log|in $(LDF|
|00002180| 4c 41 47 53 29 20 24 28 | 4c 4f 42 4a 53 29 20 24 |LAGS) $(|LOBJS) $|
|00002190| 28 4c 49 42 53 29 0a 58 | 0a 58 6c 6f 67 69 6e 2e |(LIBS).X|.Xlogin.|
|000021a0| 4c 3a 20 24 28 4c 53 52 | 43 53 29 0a 58 09 6c 69 |L: $(LSR|CS).X.li|
|000021b0| 6e 74 20 24 28 4c 53 52 | 43 53 29 20 3e 20 6c 6f |nt $(LSR|CS) > lo|
|000021c0| 67 69 6e 2e 4c 0a 58 0a | 58 73 75 3a 09 24 28 53 |gin.L.X.|Xsu:.$(S|
|000021d0| 4f 42 4a 53 29 0a 58 09 | 24 28 43 43 29 20 2d 6f |OBJS).X.|$(CC) -o|
|000021e0| 20 73 75 20 24 28 4c 44 | 46 4c 41 47 53 29 20 24 | su $(LD|FLAGS) $|
|000021f0| 28 53 4f 42 4a 53 29 20 | 24 28 4c 49 42 53 29 0a |(SOBJS) |$(LIBS).|
|00002200| 58 0a 58 73 75 2e 4c 3a | 09 24 28 53 53 52 43 53 |X.Xsu.L:|.$(SSRCS|
|00002210| 29 0a 58 09 6c 69 6e 74 | 20 2d 44 53 55 20 24 28 |).X.lint| -DSU $(|
|00002220| 53 53 52 43 53 29 20 3e | 20 73 75 2e 4c 0a 58 0a |SSRCS) >| su.L.X.|
|00002230| 58 70 61 73 73 77 64 3a | 09 24 28 50 4f 42 4a 53 |Xpasswd:|.$(POBJS|
|00002240| 29 0a 58 09 24 28 43 43 | 29 20 2d 6f 20 70 61 73 |).X.$(CC|) -o pas|
|00002250| 73 77 64 20 24 28 4c 44 | 46 4c 41 47 53 29 20 24 |swd $(LD|FLAGS) $|
|00002260| 28 50 4f 42 4a 53 29 20 | 24 28 4c 49 42 53 29 0a |(POBJS) |$(LIBS).|
|00002270| 58 0a 58 70 61 73 73 77 | 64 2e 4c 3a 20 24 28 50 |X.Xpassw|d.L: $(P|
|00002280| 53 52 43 53 29 0a 58 09 | 6c 69 6e 74 20 2d 44 50 |SRCS).X.|lint -DP|
|00002290| 41 53 53 57 44 20 24 28 | 50 53 52 43 53 29 20 3e |ASSWD $(|PSRCS) >|
|000022a0| 20 70 61 73 73 77 64 2e | 4c 0a 58 0a 58 67 70 61 | passwd.|L.X.Xgpa|
|000022b0| 73 73 77 64 3a 20 24 28 | 47 50 4f 42 4a 53 29 0a |sswd: $(|GPOBJS).|
|000022c0| 58 09 24 28 43 43 29 20 | 2d 6f 20 67 70 61 73 73 |X.$(CC) |-o gpass|
|000022d0| 77 64 20 24 28 4c 44 46 | 4c 41 47 53 29 20 24 28 |wd $(LDF|LAGS) $(|
|000022e0| 47 50 4f 42 4a 53 29 20 | 24 28 4c 49 42 53 29 0a |GPOBJS) |$(LIBS).|
|000022f0| 58 0a 58 67 70 61 73 73 | 77 64 2e 4c 3a 20 24 28 |X.Xgpass|wd.L: $(|
|00002300| 47 50 53 52 43 53 29 0a | 58 09 6c 69 6e 74 20 24 |GPSRCS).|X.lint $|
|00002310| 28 47 50 53 52 43 53 29 | 20 3e 20 67 70 61 73 73 |(GPSRCS)| > gpass|
|00002320| 77 64 2e 4c 0a 58 0a 58 | 70 77 63 6f 6e 76 3a 09 |wd.L.X.X|pwconv:.|
|00002330| 24 28 50 57 4f 42 4a 53 | 29 0a 58 09 24 28 43 43 |$(PWOBJS|).X.$(CC|
|00002340| 29 20 2d 6f 20 70 77 63 | 6f 6e 76 20 24 28 4c 44 |) -o pwc|onv $(LD|
|00002350| 46 4c 41 47 53 29 20 24 | 28 50 57 4f 42 4a 53 29 |FLAGS) $|(PWOBJS)|
|00002360| 20 24 28 4c 49 42 53 29 | 0a 58 0a 58 70 77 63 6f | $(LIBS)|.X.Xpwco|
|00002370| 6e 76 2e 4c 3a 20 24 28 | 50 57 53 52 43 53 29 0a |nv.L: $(|PWSRCS).|
|00002380| 58 09 6c 69 6e 74 20 2d | 44 50 41 53 53 57 44 20 |X.lint -|DPASSWD |
|00002390| 24 28 50 57 53 52 43 53 | 29 20 3e 20 70 77 63 6f |$(PWSRCS|) > pwco|
|000023a0| 6e 76 2e 4c 0a 58 0a 58 | 70 77 75 6e 63 6f 6e 76 |nv.L.X.X|pwunconv|
|000023b0| 3a 20 24 28 50 57 55 4e | 4f 42 4a 53 29 0a 58 09 |: $(PWUN|OBJS).X.|
|000023c0| 24 28 43 43 29 20 2d 6f | 20 70 77 75 6e 63 6f 6e |$(CC) -o| pwuncon|
|000023d0| 76 20 24 28 4c 44 46 4c | 41 47 53 29 20 24 28 50 |v $(LDFL|AGS) $(P|
|000023e0| 57 55 4e 4f 42 4a 53 29 | 20 24 28 4c 49 42 53 29 |WUNOBJS)| $(LIBS)|
|000023f0| 0a 58 0a 58 70 77 75 6e | 63 6f 6e 76 2e 4c 3a 20 |.X.Xpwun|conv.L: |
|00002400| 24 28 50 57 55 4e 53 52 | 43 53 29 0a 58 09 6c 69 |$(PWUNSR|CS).X.li|
|00002410| 6e 74 20 2d 44 50 41 53 | 53 57 44 20 24 28 50 57 |nt -DPAS|SWD $(PW|
|00002420| 55 4e 53 52 43 53 29 20 | 3e 20 70 77 75 6e 63 6f |UNSRCS) |> pwunco|
|00002430| 6e 76 2e 4c 0a 58 0a 58 | 73 75 6c 6f 67 69 6e 3a |nv.L.X.X|sulogin:|
|00002440| 20 24 28 53 55 4c 4f 47 | 4f 42 4a 53 29 0a 58 09 | $(SULOG|OBJS).X.|
|00002450| 24 28 43 43 29 20 2d 6f | 20 73 75 6c 6f 67 69 6e |$(CC) -o| sulogin|
|00002460| 20 24 28 4c 44 46 4c 41 | 47 53 29 20 24 28 53 55 | $(LDFLA|GS) $(SU|
|00002470| 4c 4f 47 4f 42 4a 53 29 | 20 24 28 4c 49 42 53 29 |LOGOBJS)| $(LIBS)|
|00002480| 0a 58 0a 58 73 75 6c 6f | 67 69 6e 2e 4c 3a 20 24 |.X.Xsulo|gin.L: $|
|00002490| 28 53 55 4c 4f 47 53 52 | 43 53 29 0a 58 09 6c 69 |(SULOGSR|CS).X.li|
|000024a0| 6e 74 20 24 28 53 55 4c | 4f 47 53 52 43 53 29 20 |nt $(SUL|OGSRCS) |
|000024b0| 3e 20 73 75 6c 6f 67 69 | 6e 2e 4c 0a 58 0a 58 66 |> sulogi|n.L.X.Xf|
|000024c0| 61 69 6c 6c 6f 67 3a 20 | 66 61 69 6c 6c 6f 67 2e |aillog: |faillog.|
|000024d0| 6f 0a 58 09 24 28 43 43 | 29 20 2d 6f 20 66 61 69 |o.X.$(CC|) -o fai|
|000024e0| 6c 6c 6f 67 20 24 28 4c | 44 46 4c 41 47 53 29 20 |llog $(L|DFLAGS) |
|000024f0| 66 61 69 6c 6c 6f 67 2e | 6f 20 24 28 4c 49 42 53 |faillog.|o $(LIBS|
|00002500| 29 0a 58 0a 58 66 61 69 | 6c 6c 6f 67 2e 4c 3a 20 |).X.Xfai|llog.L: |
|00002510| 66 61 69 6c 6c 6f 67 2e | 63 20 66 61 69 6c 6c 6f |faillog.|c faillo|
|00002520| 67 2e 68 20 63 6f 6e 66 | 69 67 2e 68 0a 58 09 6c |g.h conf|ig.h.X.l|
|00002530| 69 6e 74 20 66 61 69 6c | 6c 6f 67 2e 63 20 3e 20 |int fail|log.c > |
|00002540| 66 61 69 6c 6c 6f 67 2e | 4c 0a 58 0a 58 6d 6b 70 |faillog.|L.X.Xmkp|
|00002550| 61 73 73 77 64 3a 20 24 | 28 44 42 4f 42 4a 53 29 |asswd: $|(DBOBJS)|
|00002560| 0a 58 09 24 28 43 43 29 | 20 2d 6f 20 6d 6b 70 61 |.X.$(CC)| -o mkpa|
|00002570| 73 73 77 64 20 24 28 4c | 44 46 4c 41 47 53 29 20 |sswd $(L|DFLAGS) |
|00002580| 24 28 44 42 4f 42 4a 53 | 29 20 24 28 4c 49 42 53 |$(DBOBJS|) $(LIBS|
|00002590| 29 0a 58 0a 58 6d 6b 70 | 61 73 73 77 64 2e 4c 3a |).X.Xmkp|asswd.L:|
|000025a0| 20 24 28 44 42 53 52 43 | 53 29 0a 58 09 6c 69 6e | $(DBSRC|S).X.lin|
|000025b0| 74 20 24 28 44 42 53 52 | 43 53 29 20 3e 20 6d 6b |t $(DBSR|CS) > mk|
|000025c0| 70 61 73 73 77 64 2e 4c | 0a 58 0a 58 6e 65 77 67 |passwd.L|.X.Xnewg|
|000025d0| 72 70 3a 20 24 28 4e 47 | 4f 42 4a 53 29 0a 58 09 |rp: $(NG|OBJS).X.|
|000025e0| 24 28 43 43 29 20 2d 6f | 20 6e 65 77 67 72 70 20 |$(CC) -o| newgrp |
|000025f0| 24 28 4c 44 46 4c 41 47 | 53 29 20 24 28 4e 47 4f |$(LDFLAG|S) $(NGO|
|00002600| 42 4a 53 29 20 24 28 4c | 49 42 53 29 0a 58 0a 58 |BJS) $(L|IBS).X.X|
|00002610| 6e 65 77 67 72 70 2e 4c | 3a 20 24 28 4e 47 53 52 |newgrp.L|: $(NGSR|
|00002620| 43 53 29 0a 58 09 6c 69 | 6e 74 20 24 28 4e 47 53 |CS).X.li|nt $(NGS|
|00002630| 52 43 53 29 20 3e 20 6e | 65 77 67 72 70 2e 4c 0a |RCS) > n|ewgrp.L.|
|00002640| 58 0a 58 63 68 66 6e 3a | 09 24 28 43 48 46 4e 4f |X.Xchfn:|.$(CHFNO|
|00002650| 42 4a 53 29 0a 58 09 24 | 28 43 43 29 20 2d 6f 20 |BJS).X.$|(CC) -o |
|00002660| 63 68 66 6e 20 24 28 4c | 44 46 4c 41 47 53 29 20 |chfn $(L|DFLAGS) |
|00002670| 24 28 43 48 46 4e 4f 42 | 4a 53 29 20 24 28 4c 49 |$(CHFNOB|JS) $(LI|
|00002680| 42 53 29 0a 58 0a 58 63 | 68 66 6e 2e 4c 3a 09 24 |BS).X.Xc|hfn.L:.$|
|00002690| 28 43 48 46 4e 53 52 43 | 53 29 0a 58 09 6c 69 6e |(CHFNSRC|S).X.lin|
|000026a0| 74 20 24 28 43 48 46 4e | 53 52 43 53 29 20 3e 20 |t $(CHFN|SRCS) > |
|000026b0| 63 68 66 6e 2e 4c 0a 58 | 0a 58 63 68 73 68 3a 09 |chfn.L.X|.Xchsh:.|
|000026c0| 24 28 43 48 53 48 4f 42 | 4a 53 29 0a 58 09 24 28 |$(CHSHOB|JS).X.$(|
|000026d0| 43 43 29 20 2d 6f 20 63 | 68 73 68 20 24 28 4c 44 |CC) -o c|hsh $(LD|
|000026e0| 46 4c 41 47 53 29 20 24 | 28 43 48 53 48 4f 42 4a |FLAGS) $|(CHSHOBJ|
|000026f0| 53 29 20 24 28 4c 49 42 | 53 29 0a 58 0a 58 63 68 |S) $(LIB|S).X.Xch|
|00002700| 73 68 2e 4c 3a 20 24 28 | 43 48 53 48 53 52 43 53 |sh.L: $(|CHSHSRCS|
|00002710| 29 0a 58 09 6c 69 6e 74 | 20 24 28 43 48 53 48 53 |).X.lint| $(CHSHS|
|00002720| 52 43 53 29 20 3e 20 63 | 68 73 68 2e 4c 0a 58 0a |RCS) > c|hsh.L.X.|
|00002730| 58 63 68 61 67 65 3a 09 | 24 28 43 48 41 47 45 4f |Xchage:.|$(CHAGEO|
|00002740| 42 4a 53 29 0a 58 09 24 | 28 43 43 29 20 2d 6f 20 |BJS).X.$|(CC) -o |
|00002750| 63 68 61 67 65 20 24 28 | 4c 44 46 4c 41 47 53 29 |chage $(|LDFLAGS)|
|00002760| 20 24 28 43 48 41 47 45 | 4f 42 4a 53 29 20 24 28 | $(CHAGE|OBJS) $(|
|00002770| 4c 49 42 53 29 0a 58 0a | 58 63 68 61 67 65 2e 4c |LIBS).X.|Xchage.L|
|00002780| 3a 20 24 28 43 48 41 47 | 45 53 52 43 53 29 0a 58 |: $(CHAG|ESRCS).X|
|00002790| 09 6c 69 6e 74 20 2d 44 | 50 41 53 53 57 44 20 24 |.lint -D|PASSWD $|
|000027a0| 28 43 48 41 47 45 53 52 | 43 53 29 20 3e 20 63 68 |(CHAGESR|CS) > ch|
|000027b0| 61 67 65 2e 4c 0a 58 0a | 58 73 75 73 68 65 6c 6c |age.L.X.|Xsushell|
|000027c0| 2e 63 3a 20 73 68 65 6c | 6c 2e 63 0a 58 09 63 70 |.c: shel|l.c.X.cp|
|000027d0| 20 73 68 65 6c 6c 2e 63 | 20 73 75 73 68 65 6c 6c | shell.c| sushell|
|000027e0| 2e 63 0a 58 0a 58 73 75 | 73 68 65 6c 6c 2e 6f 3a |.c.X.Xsu|shell.o:|
|000027f0| 20 63 6f 6e 66 69 67 2e | 68 20 73 75 73 68 65 6c | config.|h sushel|
|00002800| 6c 2e 63 0a 58 09 24 28 | 43 43 29 20 2d 63 20 24 |l.c.X.$(|CC) -c $|
|00002810| 28 43 46 4c 41 47 53 29 | 20 2d 44 53 55 20 73 75 |(CFLAGS)| -DSU su|
|00002820| 73 68 65 6c 6c 2e 63 0a | 58 0a 58 73 75 73 75 62 |shell.c.|X.Xsusub|
|00002830| 2e 63 3a 20 73 75 62 2e | 63 0a 58 09 63 70 20 73 |.c: sub.|c.X.cp s|
|00002840| 75 62 2e 63 20 73 75 73 | 75 62 2e 63 0a 58 0a 58 |ub.c sus|ub.c.X.X|
|00002850| 73 75 73 75 62 2e 6f 3a | 20 63 6f 6e 66 69 67 2e |susub.o:| config.|
|00002860| 68 20 73 75 73 75 62 2e | 63 0a 58 09 24 28 43 43 |h susub.|c.X.$(CC|
|00002870| 29 20 2d 63 20 24 28 43 | 46 4c 41 47 53 29 20 2d |) -c $(C|FLAGS) -|
|00002880| 44 53 55 20 73 75 73 75 | 62 2e 63 0a 58 0a 58 73 |DSU susu|b.c.X.Xs|
|00002890| 75 6c 6f 67 2e 6f 3a 20 | 63 6f 6e 66 69 67 2e 68 |ulog.o: |config.h|
|000028a0| 0a 58 0a 58 73 75 73 65 | 74 75 70 2e 63 3a 20 73 |.X.Xsuse|tup.c: s|
|000028b0| 65 74 75 70 2e 63 0a 58 | 09 63 70 20 73 65 74 75 |etup.c.X|.cp setu|
|000028c0| 70 2e 63 20 73 75 73 65 | 74 75 70 2e 63 0a 58 0a |p.c suse|tup.c.X.|
|000028d0| 58 73 75 73 65 74 75 70 | 2e 6f 3a 20 63 6f 6e 66 |Xsusetup|.o: conf|
|000028e0| 69 67 2e 68 20 73 65 74 | 75 70 2e 63 0a 58 09 24 |ig.h set|up.c.X.$|
|000028f0| 28 43 43 29 20 2d 63 20 | 24 28 43 46 4c 41 47 53 |(CC) -c |$(CFLAGS|
|00002900| 29 20 2d 44 53 55 20 73 | 75 73 65 74 75 70 2e 63 |) -DSU s|usetup.c|
|00002910| 0a 58 0a 58 73 75 76 61 | 6c 69 64 2e 63 3a 20 76 |.X.Xsuva|lid.c: v|
|00002920| 61 6c 69 64 2e 63 0a 58 | 09 63 70 20 76 61 6c 69 |alid.c.X|.cp vali|
|00002930| 64 2e 63 20 73 75 76 61 | 6c 69 64 2e 63 0a 58 0a |d.c suva|lid.c.X.|
|00002940| 58 73 75 76 61 6c 69 64 | 2e 6f 3a 20 63 6f 6e 66 |Xsuvalid|.o: conf|
|00002950| 69 67 2e 68 20 76 61 6c | 69 64 2e 63 0a 58 09 24 |ig.h val|id.c.X.$|
|00002960| 28 43 43 29 20 2d 63 20 | 24 28 43 46 4c 41 47 53 |(CC) -c |$(CFLAGS|
|00002970| 29 20 2d 44 53 55 20 73 | 75 76 61 6c 69 64 2e 63 |) -DSU s|uvalid.c|
|00002980| 0a 58 0a 58 70 6d 61 69 | 6e 2e 6f 3a 20 63 6f 6e |.X.Xpmai|n.o: con|
|00002990| 66 69 67 2e 68 20 6c 61 | 73 74 6c 6f 67 2e 68 20 |fig.h la|stlog.h |
|000029a0| 73 68 61 64 6f 77 2e 68 | 0a 58 0a 58 70 77 61 67 |shadow.h|.X.Xpwag|
|000029b0| 65 2e 6f 3a 20 61 67 65 | 2e 63 20 63 6f 6e 66 69 |e.o: age|.c confi|
|000029c0| 67 2e 68 0a 58 09 63 70 | 20 61 67 65 2e 63 20 70 |g.h.X.cp| age.c p|
|000029d0| 77 61 67 65 2e 63 0a 58 | 09 24 28 43 43 29 20 2d |wage.c.X|.$(CC) -|
|000029e0| 63 20 24 28 43 46 4c 41 | 47 53 29 20 2d 44 50 41 |c $(CFLA|GS) -DPA|
|000029f0| 53 53 57 44 20 70 77 61 | 67 65 2e 63 0a 58 09 72 |SSWD pwa|ge.c.X.r|
|00002a00| 6d 20 70 77 61 67 65 2e | 63 0a 58 0a 58 6c 6d 61 |m pwage.|c.X.Xlma|
|00002a10| 69 6e 2e 6f 3a 20 63 6f | 6e 66 69 67 2e 68 20 6c |in.o: co|nfig.h l|
|00002a20| 61 73 74 6c 6f 67 2e 68 | 20 66 61 69 6c 6c 6f 67 |astlog.h| faillog|
|00002a30| 2e 68 0a 58 0a 58 73 6d | 61 69 6e 2e 6f 3a 20 63 |.h.X.Xsm|ain.o: c|
|00002a40| 6f 6e 66 69 67 2e 68 20 | 6c 61 73 74 6c 6f 67 2e |onfig.h |lastlog.|
|00002a50| 68 0a 58 0a 58 73 65 74 | 75 70 2e 6f 3a 20 63 6f |h.X.Xset|up.o: co|
|00002a60| 6e 66 69 67 2e 68 0a 58 | 0a 58 75 74 6d 70 2e 6f |nfig.h.X|.Xutmp.o|
|00002a70| 3a 20 63 6f 6e 66 69 67 | 2e 68 0a 58 0a 58 6d 61 |: config|.h.X.Xma|
|00002a80| 69 6c 2e 6f 3a 20 63 6f | 6e 66 69 67 2e 68 0a 58 |il.o: co|nfig.h.X|
|00002a90| 0a 58 6d 6f 74 64 2e 6f | 3a 20 63 6f 6e 66 69 67 |.Xmotd.o|: config|
|00002aa0| 2e 68 0a 58 0a 58 61 67 | 65 2e 6f 3a 20 63 6f 6e |.h.X.Xag|e.o: con|
|00002ab0| 66 69 67 2e 68 0a 58 0a | 58 6c 6f 67 2e 6f 3a 20 |fig.h.X.|Xlog.o: |
|00002ac0| 63 6f 6e 66 69 67 2e 68 | 20 6c 61 73 74 6c 6f 67 |config.h| lastlog|
|00002ad0| 2e 68 0a 58 0a 58 73 68 | 65 6c 6c 2e 6f 3a 20 63 |.h.X.Xsh|ell.o: c|
|00002ae0| 6f 6e 66 69 67 2e 68 0a | 58 0a 58 65 6e 74 72 79 |onfig.h.|X.Xentry|
|00002af0| 2e 6f 3a 20 63 6f 6e 66 | 69 67 2e 68 20 73 68 61 |.o: conf|ig.h sha|
|00002b00| 64 6f 77 2e 68 0a 58 0a | 58 73 68 61 64 6f 77 2e |dow.h.X.|Xshadow.|
|00002b10| 6f 3a 20 73 68 61 64 6f | 77 2e 68 0a 58 0a 58 64 |o: shado|w.h.X.Xd|
|00002b20| 69 61 6c 75 70 2e 6f 3a | 20 64 69 61 6c 75 70 2e |ialup.o:| dialup.|
|00002b30| 68 0a 58 0a 58 64 69 61 | 6c 63 68 6b 2e 6f 3a 20 |h.X.Xdia|lchk.o: |
|00002b40| 64 69 61 6c 75 70 2e 68 | 20 63 6f 6e 66 69 67 2e |dialup.h| config.|
|00002b50| 68 0a 58 0a 58 76 61 6c | 69 64 2e 6f 3a 20 63 6f |h.X.Xval|id.o: co|
|00002b60| 6e 66 69 67 2e 68 0a 58 | 0a 58 66 61 69 6c 75 72 |nfig.h.X|.Xfailur|
|00002b70| 65 2e 6f 3a 20 66 61 69 | 6c 6c 6f 67 2e 68 20 63 |e.o: fai|llog.h c|
|00002b80| 6f 6e 66 69 67 2e 68 0a | 58 0a 58 66 61 69 6c 6c |onfig.h.|X.Xfaill|
|00002b90| 6f 67 2e 6f 3a 20 66 61 | 69 6c 6c 6f 67 2e 68 20 |og.o: fa|illog.h |
|00002ba0| 63 6f 6e 66 69 67 2e 68 | 0a 58 0a 58 70 77 65 6e |config.h|.X.Xpwen|
|00002bb0| 74 2e 6f 3a 20 63 6f 6e | 66 69 67 2e 68 0a 58 0a |t.o: con|fig.h.X.|
|00002bc0| 58 70 6f 72 74 2e 6f 3a | 20 70 6f 72 74 2e 68 0a |Xport.o:| port.h.|
|00002bd0| 58 0a 58 6e 65 77 67 72 | 70 2e 6f 3a 20 63 6f 6e |X.Xnewgr|p.o: con|
|00002be0| 66 69 67 2e 68 20 73 68 | 61 64 6f 77 2e 68 0a 58 |fig.h sh|adow.h.X|
|00002bf0| 0a 58 6d 6b 70 61 73 73 | 77 64 2e 6f 3a 20 63 6f |.Xmkpass|wd.o: co|
|00002c00| 6e 66 69 67 2e 68 0a 58 | 0a 58 67 70 6d 61 69 6e |nfig.h.X|.Xgpmain|
|00002c10| 2e 6f 3a 20 63 6f 6e 66 | 69 67 2e 68 0a 58 0a 58 |.o: conf|ig.h.X.X|
|00002c20| 63 68 66 6e 2e 6f 3a 20 | 63 6f 6e 66 69 67 2e 68 |chfn.o: |config.h|
|00002c30| 0a 58 0a 58 63 68 73 68 | 2e 6f 3a 20 63 6f 6e 66 |.X.Xchsh|.o: conf|
|00002c40| 69 67 2e 68 0a 58 0a 58 | 63 68 61 67 65 2e 6f 3a |ig.h.X.X|chage.o:|
|00002c50| 20 63 6f 6e 66 69 67 2e | 68 20 73 68 61 64 6f 77 | config.|h shadow|
|00002c60| 2e 68 0a 58 0a 58 63 6c | 65 61 6e 3a 0a 58 09 2d |.h.X.Xcl|ean:.X.-|
|00002c70| 72 6d 20 2d 66 20 2a 2e | 6f 20 61 2e 6f 75 74 20 |rm -f *.|o a.out |
|00002c80| 63 6f 72 65 20 6e 70 61 | 73 73 77 64 20 6e 73 68 |core npa|sswd nsh|
|00002c90| 61 64 6f 77 20 2a 2e 70 | 61 67 20 2a 2e 64 69 72 |adow *.p|ag *.dir|
|00002ca0| 0a 58 0a 58 63 6c 6f 62 | 62 65 72 3a 20 63 6c 65 |.X.Xclob|ber: cle|
|00002cb0| 61 6e 0a 58 09 2d 72 6d | 20 2d 66 20 24 28 42 49 |an.X.-rm| -f $(BI|
|00002cc0| 4e 53 29 20 2a 2e 4c 0a | 58 0a 58 73 68 61 72 3a |NS) *.L.|X.Xshar:|
|00002cd0| 09 6c 6f 67 69 6e 2e 73 | 68 2e 31 20 6c 6f 67 69 |.login.s|h.1 logi|
|00002ce0| 6e 2e 73 68 2e 32 20 6c | 6f 67 69 6e 2e 73 68 2e |n.sh.2 l|ogin.sh.|
|00002cf0| 33 0a 58 0a 58 6c 6f 67 | 69 6e 2e 73 68 2e 31 3a |3.X.Xlog|in.sh.1:|
|00002d00| 20 24 28 46 49 4c 45 53 | 31 29 0a 58 09 73 68 61 | $(FILES|1).X.sha|
|00002d10| 72 20 2d 61 20 24 28 46 | 49 4c 45 53 31 29 20 3e |r -a $(F|ILES1) >|
|00002d20| 20 6c 6f 67 69 6e 2e 73 | 68 2e 31 0a 58 0a 58 6c | login.s|h.1.X.Xl|
|00002d30| 6f 67 69 6e 2e 73 68 2e | 32 3a 20 24 28 46 49 4c |ogin.sh.|2: $(FIL|
|00002d40| 45 53 32 29 0a 58 09 73 | 68 61 72 20 2d 61 20 24 |ES2).X.s|har -a $|
|00002d50| 28 46 49 4c 45 53 32 29 | 20 3e 20 6c 6f 67 69 6e |(FILES2)| > login|
|00002d60| 2e 73 68 2e 32 0a 58 0a | 58 6c 6f 67 69 6e 2e 73 |.sh.2.X.|Xlogin.s|
|00002d70| 68 2e 33 3a 20 24 28 44 | 4f 43 53 29 0a 58 09 73 |h.3: $(D|OCS).X.s|
|00002d80| 68 61 72 20 2d 61 20 24 | 28 44 4f 43 53 29 20 3e |har -a $|(DOCS) >|
|00002d90| 20 6c 6f 67 69 6e 2e 73 | 68 2e 33 0a 53 48 41 52 | login.s|h.3.SHAR|
|00002da0| 5f 45 4f 46 0a 69 66 20 | 74 65 73 74 20 37 38 31 |_EOF.if |test 781|
|00002db0| 34 20 2d 6e 65 20 22 60 | 77 63 20 2d 63 20 3c 20 |4 -ne "`|wc -c < |
|00002dc0| 27 4d 61 6b 65 66 69 6c | 65 27 60 22 0a 74 68 65 |'Makefil|e'`".the|
|00002dd0| 6e 0a 09 65 63 68 6f 20 | 73 68 61 72 3a 20 22 65 |n..echo |shar: "e|
|00002de0| 72 72 6f 72 20 74 72 61 | 6e 73 6d 69 74 74 69 6e |rror tra|nsmittin|
|00002df0| 67 20 27 4d 61 6b 65 66 | 69 6c 65 27 22 20 27 28 |g 'Makef|ile'" '(|
|00002e00| 73 68 6f 75 6c 64 20 68 | 61 76 65 20 62 65 65 6e |should h|ave been|
|00002e10| 20 37 38 31 34 20 63 68 | 61 72 61 63 74 65 72 73 | 7814 ch|aracters|
|00002e20| 29 27 0a 66 69 0a 66 69 | 0a 65 63 68 6f 20 73 68 |)'.fi.fi|.echo sh|
|00002e30| 61 72 3a 20 22 65 78 74 | 72 61 63 74 69 6e 67 20 |ar: "ext|racting |
|00002e40| 27 63 68 73 68 2e 63 27 | 22 20 27 28 39 30 33 31 |'chsh.c'|" '(9031|
|00002e50| 20 63 68 61 72 61 63 74 | 65 72 73 29 27 0a 69 66 | charact|ers)'.if|
|00002e60| 20 74 65 73 74 20 2d 66 | 20 27 63 68 73 68 2e 63 | test -f| 'chsh.c|
|00002e70| 27 0a 74 68 65 6e 0a 09 | 65 63 68 6f 20 73 68 61 |'.then..|echo sha|
|00002e80| 72 3a 20 22 77 69 6c 6c | 20 6e 6f 74 20 6f 76 65 |r: "will| not ove|
|00002e90| 72 2d 77 72 69 74 65 20 | 65 78 69 73 74 69 6e 67 |r-write |existing|
|00002ea0| 20 66 69 6c 65 20 27 63 | 68 73 68 2e 63 27 22 0a | file 'c|hsh.c'".|
|00002eb0| 65 6c 73 65 0a 73 65 64 | 20 27 73 2f 5e 58 2f 2f |else.sed| 's/^X//|
|00002ec0| 27 20 3c 3c 20 5c 53 48 | 41 52 5f 45 4f 46 20 3e |' << \SH|AR_EOF >|
|00002ed0| 20 27 63 68 73 68 2e 63 | 27 0a 58 2f 2a 0a 58 20 | 'chsh.c|'.X/*.X |
|00002ee0| 2a 20 43 6f 70 79 72 69 | 67 68 74 20 31 39 38 39 |* Copyri|ght 1989|
|00002ef0| 2c 20 31 39 39 30 2c 20 | 4a 6f 68 6e 20 46 2e 20 |, 1990, |John F. |
|00002f00| 48 61 75 67 68 20 49 49 | 0a 58 20 2a 20 41 6c 6c |Haugh II|.X * All|
|00002f10| 20 72 69 67 68 74 73 20 | 72 65 73 65 72 76 65 64 | rights |reserved|
|00002f20| 2e 0a 58 20 2a 0a 58 20 | 2a 20 55 73 65 2c 20 64 |..X *.X |* Use, d|
|00002f30| 75 70 6c 69 63 61 74 69 | 6f 6e 2c 20 61 6e 64 20 |uplicati|on, and |
|00002f40| 64 69 73 63 6c 6f 73 75 | 72 65 20 70 72 6f 68 69 |disclosu|re prohi|
|00002f50| 62 69 74 65 64 20 77 69 | 74 68 6f 75 74 0a 58 20 |bited wi|thout.X |
|00002f60| 2a 20 74 68 65 20 65 78 | 70 72 65 73 73 20 77 72 |* the ex|press wr|
|00002f70| 69 74 74 65 6e 20 70 65 | 72 6d 69 73 73 69 6f 6e |itten pe|rmission|
|00002f80| 20 6f 66 20 74 68 65 20 | 61 75 74 68 6f 72 2e 0a | of the |author..|
|00002f90| 58 20 2a 2f 0a 58 0a 58 | 23 69 6e 63 6c 75 64 65 |X */.X.X|#include|
|00002fa0| 20 3c 73 79 73 2f 74 79 | 70 65 73 2e 68 3e 0a 58 | <sys/ty|pes.h>.X|
|00002fb0| 23 69 6e 63 6c 75 64 65 | 20 3c 73 74 64 69 6f 2e |#include| <stdio.|
|00002fc0| 68 3e 0a 58 23 69 6e 63 | 6c 75 64 65 20 3c 70 77 |h>.X#inc|lude <pw|
|00002fd0| 64 2e 68 3e 0a 58 23 69 | 6e 63 6c 75 64 65 20 3c |d.h>.X#i|nclude <|
|00002fe0| 66 63 6e 74 6c 2e 68 3e | 0a 58 23 69 6e 63 6c 75 |fcntl.h>|.X#inclu|
|00002ff0| 64 65 20 3c 73 69 67 6e | 61 6c 2e 68 3e 0a 58 23 |de <sign|al.h>.X#|
|00003000| 69 6e 63 6c 75 64 65 20 | 3c 65 72 72 6e 6f 2e 68 |include |<errno.h|
|00003010| 3e 0a 58 23 69 6e 63 6c | 75 64 65 20 3c 63 74 79 |>.X#incl|ude <cty|
|00003020| 70 65 2e 68 3e 0a 58 23 | 69 66 6e 64 65 66 09 42 |pe.h>.X#|ifndef.B|
|00003030| 53 44 0a 58 23 69 6e 63 | 6c 75 64 65 20 3c 73 74 |SD.X#inc|lude <st|
|00003040| 72 69 6e 67 2e 68 3e 0a | 58 23 69 6e 63 6c 75 64 |ring.h>.|X#includ|
|00003050| 65 20 3c 6d 65 6d 6f 72 | 79 2e 68 3e 0a 58 23 65 |e <memor|y.h>.X#e|
|00003060| 6c 73 65 0a 58 23 69 6e | 63 6c 75 64 65 20 3c 73 |lse.X#in|clude <s|
|00003070| 74 72 69 6e 67 73 2e 68 | 3e 0a 58 23 64 65 66 69 |trings.h|>.X#defi|
|00003080| 6e 65 09 73 74 72 63 68 | 72 09 69 6e 64 65 78 0a |ne.strch|r.index.|
|00003090| 58 23 64 65 66 69 6e 65 | 09 73 74 72 72 63 68 72 |X#define|.strrchr|
|000030a0| 09 72 69 6e 64 65 78 0a | 58 23 65 6e 64 69 66 0a |.rindex.|X#endif.|
|000030b0| 58 23 69 6e 63 6c 75 64 | 65 20 22 63 6f 6e 66 69 |X#includ|e "confi|
|000030c0| 67 2e 68 22 0a 58 0a 58 | 23 69 66 64 65 66 09 44 |g.h".X.X|#ifdef.D|
|000030d0| 42 4d 0a 58 23 69 6e 63 | 6c 75 64 65 20 3c 64 62 |BM.X#inc|lude <db|
|000030e0| 6d 2e 68 3e 0a 58 23 65 | 6e 64 69 66 0a 58 0a 58 |m.h>.X#e|ndif.X.X|
|000030f0| 23 69 66 6e 64 65 66 09 | 6c 69 6e 74 0a 58 73 74 |#ifndef.|lint.Xst|
|00003100| 61 74 69 63 09 63 68 61 | 72 09 5f 73 63 63 73 69 |atic.cha|r._sccsi|
|00003110| 64 5b 5d 20 3d 20 22 40 | 28 23 29 63 68 73 68 2e |d[] = "@|(#)chsh.|
|00003120| 63 09 32 2e 31 09 31 39 | 3a 32 31 3a 30 31 09 38 |c.2.1.19|:21:01.8|
|00003130| 2f 34 2f 39 30 22 3b 0a | 58 23 65 6e 64 69 66 0a |/4/90";.|X#endif.|
|00003140| 58 0a 58 63 68 61 72 09 | 2a 6d 79 6e 61 6d 65 3b |X.Xchar.|*myname;|
|00003150| 0a 58 69 6e 74 09 61 6d | 72 6f 6f 74 3b 0a 58 0a |.Xint.am|root;.X.|
|00003160| 58 63 68 61 72 09 75 73 | 65 72 5b 42 55 46 53 49 |Xchar.us|er[BUFSI|
|00003170| 5a 5d 3b 0a 58 63 68 61 | 72 09 6c 6f 67 69 6e 73 |Z];.Xcha|r.logins|
|00003180| 68 5b 42 55 46 53 49 5a | 5d 3b 0a 58 69 6e 74 09 |h[BUFSIZ|];.Xint.|
|00003190| 73 66 6c 67 3b 0a 58 0a | 58 73 74 72 75 63 74 09 |sflg;.X.|Xstruct.|
|000031a0| 70 61 73 73 77 64 09 70 | 77 65 6e 74 3b 0a 58 0a |passwd.p|went;.X.|
|000031b0| 58 65 78 74 65 72 6e 09 | 69 6e 74 09 65 72 72 6e |Xextern.|int.errn|
|000031c0| 6f 3b 0a 58 0a 58 63 68 | 61 72 09 55 73 61 67 65 |o;.X.Xch|ar.Usage|
|000031d0| 5b 5d 20 3d 0a 58 22 55 | 73 61 67 65 3a 20 25 73 |[] =.X"U|sage: %s|
|000031e0| 20 5b 20 2d 73 20 6c 6f | 67 69 6e 5f 73 68 65 6c | [ -s lo|gin_shel|
|000031f0| 6c 20 5d 20 5b 20 75 73 | 65 72 5f 6e 61 6d 65 20 |l ] [ us|er_name |
|00003200| 5d 5c 6e 22 3b 0a 58 0a | 58 2f 2a 0a 58 20 2a 20 |]\n";.X.|X/*.X * |
|00003210| 75 73 61 67 65 20 2d 20 | 70 72 69 6e 74 20 63 6f |usage - |print co|
|00003220| 6d 6d 61 6e 64 20 6c 69 | 6e 65 20 73 79 6e 74 61 |mmand li|ne synta|
|00003230| 78 20 61 6e 64 20 65 78 | 69 74 0a 58 20 2a 2f 0a |x and ex|it.X */.|
|00003240| 58 0a 58 76 6f 69 64 0a | 58 75 73 61 67 65 20 28 |X.Xvoid.|Xusage (|
|00003250| 29 0a 58 7b 0a 58 09 66 | 70 72 69 6e 74 66 20 28 |).X{.X.f|printf (|
|00003260| 73 74 64 65 72 72 2c 20 | 55 73 61 67 65 2c 20 6d |stderr, |Usage, m|
|00003270| 79 6e 61 6d 65 29 3b 0a | 58 09 65 78 69 74 20 28 |yname);.|X.exit (|
|00003280| 31 29 3b 0a 58 7d 0a 58 | 0a 58 2f 2a 0a 58 20 2a |1);.X}.X|.X/*.X *|
|00003290| 20 76 61 6c 69 64 5f 66 | 69 65 6c 64 20 2d 20 69 | valid_f|ield - i|
|000032a0| 6e 73 75 72 65 20 74 68 | 61 74 20 61 20 66 69 65 |nsure th|at a fie|
|000032b0| 6c 64 20 63 6f 6e 74 61 | 69 6e 73 20 61 6c 6c 20 |ld conta|ins all |
|000032c0| 6c 65 67 61 6c 20 63 68 | 61 72 61 63 74 65 72 73 |legal ch|aracters|
|000032d0| 0a 58 20 2a 0a 58 20 2a | 20 54 68 65 20 73 75 70 |.X *.X *| The sup|
|000032e0| 70 6c 69 65 64 20 66 69 | 65 6c 64 20 69 73 20 73 |plied fi|eld is s|
|000032f0| 63 61 6e 6e 65 64 20 66 | 6f 72 20 6e 6f 6e 2d 70 |canned f|or non-p|
|00003300| 72 69 6e 74 69 6e 67 20 | 61 6e 64 20 6f 74 68 65 |rinting |and othe|
|00003310| 72 20 69 6c 6c 65 67 61 | 6c 0a 58 20 2a 20 63 68 |r illega|l.X * ch|
|00003320| 61 72 61 63 74 65 72 73 | 2e 20 20 49 66 20 61 6e |aracters|. If an|
|00003330| 79 20 69 6c 6c 65 67 61 | 6c 20 63 68 61 72 61 63 |y illega|l charac|
|00003340| 74 65 72 73 20 61 72 65 | 20 66 6f 75 6e 64 2c 20 |ters are| found, |
|00003350| 76 61 6c 69 64 5f 66 69 | 65 6c 64 0a 58 20 2a 20 |valid_fi|eld.X * |
|00003360| 70 72 69 6e 74 73 20 61 | 20 6d 65 73 73 61 67 65 |prints a| message|
|00003370| 20 61 6e 64 20 65 78 69 | 74 73 2e 0a 58 20 2a 2f | and exi|ts..X */|
|00003380| 0a 58 0a 58 76 6f 69 64 | 0a 58 76 61 6c 69 64 5f |.X.Xvoid|.Xvalid_|
|00003390| 66 69 65 6c 64 20 28 66 | 69 65 6c 64 2c 20 69 6c |field (f|ield, il|
|000033a0| 6c 65 67 61 6c 29 0a 58 | 63 68 61 72 09 2a 66 69 |legal).X|char.*fi|
|000033b0| 65 6c 64 3b 0a 58 63 68 | 61 72 09 2a 69 6c 6c 65 |eld;.Xch|ar.*ille|
|000033c0| 67 61 6c 3b 0a 58 7b 0a | 58 09 63 68 61 72 09 2a |gal;.X{.|X.char.*|
|000033d0| 63 70 3b 0a 58 0a 58 09 | 66 6f 72 20 28 63 70 20 |cp;.X.X.|for (cp |
|000033e0| 3d 20 66 69 65 6c 64 3b | 2a 63 70 20 26 26 20 69 |= field;|*cp && i|
|000033f0| 73 70 72 69 6e 74 20 28 | 2a 63 70 29 20 26 26 20 |sprint (|*cp) && |
|00003400| 21 20 73 74 72 63 68 72 | 20 28 69 6c 6c 65 67 61 |! strchr| (illega|
|00003410| 6c 2c 20 2a 63 70 29 3b | 63 70 2b 2b 29 0a 58 09 |l, *cp);|cp++).X.|
|00003420| 09 3b 0a 58 0a 58 09 69 | 66 20 28 2a 63 70 29 20 |.;.X.X.i|f (*cp) |
|00003430| 7b 0a 58 09 09 66 70 72 | 69 6e 74 66 20 28 73 74 |{.X..fpr|intf (st|
|00003440| 64 65 72 72 2c 20 22 25 | 73 3a 20 69 6e 76 61 6c |derr, "%|s: inval|
|00003450| 69 64 20 66 69 65 6c 64 | 3a 20 25 73 5c 6e 22 2c |id field|: %s\n",|
|00003460| 20 6d 79 6e 61 6d 65 2c | 20 66 69 65 6c 64 29 3b | myname,| field);|
|00003470| 0a 58 09 09 65 78 69 74 | 20 28 31 29 3b 0a 58 09 |.X..exit| (1);.X.|
|00003480| 7d 0a 58 7d 0a 58 0a 58 | 2f 2a 0a 58 20 2a 20 63 |}.X}.X.X|/*.X * c|
|00003490| 68 61 6e 67 65 5f 66 69 | 65 6c 64 20 2d 20 63 68 |hange_fi|eld - ch|
|000034a0| 61 6e 67 65 20 61 20 73 | 69 6e 67 6c 65 20 66 69 |ange a s|ingle fi|
|000034b0| 65 6c 64 20 69 66 20 61 | 20 6e 65 77 20 76 61 6c |eld if a| new val|
|000034c0| 75 65 20 69 73 20 67 69 | 76 65 6e 2e 0a 58 20 2a |ue is gi|ven..X *|
|000034d0| 0a 58 20 2a 20 70 72 6f | 6d 70 74 20 74 68 65 20 |.X * pro|mpt the |
|000034e0| 75 73 65 72 20 77 69 74 | 68 20 74 68 65 20 6e 61 |user wit|h the na|
|000034f0| 6d 65 20 6f 66 20 74 68 | 65 20 66 69 65 6c 64 20 |me of th|e field |
|00003500| 62 65 69 6e 67 20 63 68 | 61 6e 67 65 64 20 61 6e |being ch|anged an|
|00003510| 64 20 74 68 65 0a 58 20 | 2a 20 63 75 72 72 65 6e |d the.X |* curren|
|00003520| 74 20 76 61 6c 75 65 2e | 0a 58 20 2a 2f 0a 58 0a |t value.|.X */.X.|
|00003530| 58 76 6f 69 64 0a 58 63 | 68 61 6e 67 65 5f 66 69 |Xvoid.Xc|hange_fi|
|00003540| 65 6c 64 20 28 62 75 66 | 2c 20 70 72 6f 6d 70 74 |eld (buf|, prompt|
|00003550| 29 0a 58 63 68 61 72 09 | 2a 62 75 66 3b 0a 58 63 |).Xchar.|*buf;.Xc|
|00003560| 68 61 72 09 2a 70 72 6f | 6d 70 74 3b 0a 58 7b 0a |har.*pro|mpt;.X{.|
|00003570| 58 09 63 68 61 72 09 6e | 65 77 5b 42 55 46 53 49 |X.char.n|ew[BUFSI|
|00003580| 5a 5d 3b 0a 58 09 63 68 | 61 72 09 2a 63 70 3b 0a |Z];.X.ch|ar.*cp;.|
|00003590| 58 0a 58 09 70 72 69 6e | 74 66 20 28 22 5c 74 25 |X.X.prin|tf ("\t%|
|000035a0| 73 20 5b 25 73 5d 3a 20 | 22 2c 20 70 72 6f 6d 70 |s [%s]: |", promp|
|000035b0| 74 2c 20 62 75 66 29 3b | 0a 58 09 66 67 65 74 73 |t, buf);|.X.fgets|
|000035c0| 20 28 6e 65 77 2c 20 42 | 55 46 53 49 5a 2c 20 73 | (new, B|UFSIZ, s|
|000035d0| 74 64 69 6e 29 3b 0a 58 | 0a 58 09 69 66 20 28 63 |tdin);.X|.X.if (c|
|000035e0| 70 20 3d 20 73 74 72 63 | 68 72 20 28 6e 65 77 2c |p = strc|hr (new,|
|000035f0| 20 27 5c 6e 27 29 29 0a | 58 09 09 2a 63 70 20 3d | '\n')).|X..*cp =|
|00003600| 20 27 5c 30 27 3b 0a 58 | 09 65 6c 73 65 0a 58 09 | '\0';.X|.else.X.|
|00003610| 09 72 65 74 75 72 6e 3b | 0a 58 0a 58 09 69 66 20 |.return;|.X.X.if |
|00003620| 28 6e 65 77 5b 30 5d 29 | 0a 58 09 09 73 74 72 63 |(new[0])|.X..strc|
|00003630| 70 79 20 28 62 75 66 2c | 20 6e 65 77 29 3b 0a 58 |py (buf,| new);.X|
|00003640| 7d 0a 58 0a 58 2f 2a 0a | 58 20 2a 20 6e 65 77 5f |}.X.X/*.|X * new_|
|00003650| 66 69 65 6c 64 73 20 2d | 20 63 68 61 6e 67 65 20 |fields -| change |
|00003660| 74 68 65 20 75 73 65 72 | 27 73 20 6c 6f 67 69 6e |the user|'s login|
|00003670| 20 73 68 65 6c 6c 20 69 | 6e 66 6f 72 6d 61 74 69 | shell i|nformati|
|00003680| 6f 6e 20 69 6e 74 65 72 | 61 63 74 69 76 65 6c 79 |on inter|actively|
|00003690| 0a 58 20 2a 0a 58 20 2a | 20 70 72 6f 6d 70 74 20 |.X *.X *| prompt |
|000036a0| 74 68 65 20 75 73 65 72 | 20 66 6f 72 20 74 68 65 |the user| for the|
|000036b0| 20 6c 6f 67 69 6e 20 73 | 68 65 6c 6c 20 61 6e 64 | login s|hell and|
|000036c0| 20 63 68 61 6e 67 65 20 | 69 74 20 61 63 63 6f 72 | change |it accor|
|000036d0| 64 69 6e 67 20 74 6f 20 | 74 68 65 0a 58 20 2a 20 |ding to |the.X * |
|000036e0| 72 65 73 70 6f 6e 73 65 | 2c 20 6f 72 20 6c 65 61 |response|, or lea|
|000036f0| 76 65 20 69 74 20 61 6c | 6f 6e 65 20 69 66 20 6e |ve it al|one if n|
|00003700| 6f 74 68 69 6e 67 20 77 | 61 73 20 65 6e 74 65 72 |othing w|as enter|
|00003710| 65 64 2e 0a 58 20 2a 2f | 0a 58 0a 58 6e 65 77 5f |ed..X */|.X.Xnew_|
|00003720| 66 69 65 6c 64 73 20 28 | 29 0a 58 7b 0a 58 09 70 |fields (|).X{.X.p|
|00003730| 72 69 6e 74 66 20 28 22 | 45 6e 74 65 72 20 74 68 |rintf ("|Enter th|
|00003740| 65 20 6e 65 77 20 76 61 | 6c 75 65 2c 20 6f 72 20 |e new va|lue, or |
|00003750| 70 72 65 73 73 20 72 65 | 74 75 72 6e 20 66 6f 72 |press re|turn for|
|00003760| 20 74 68 65 20 64 65 66 | 61 75 6c 74 5c 6e 5c 6e | the def|ault\n\n|
|00003770| 22 29 3b 0a 58 0a 58 09 | 63 68 61 6e 67 65 5f 66 |");.X.X.|change_f|
|00003780| 69 65 6c 64 20 28 6c 6f | 67 69 6e 73 68 2c 20 22 |ield (lo|ginsh, "|
|00003790| 4c 6f 67 69 6e 20 53 68 | 65 6c 6c 22 29 3b 0a 58 |Login Sh|ell");.X|
|000037a0| 7d 0a 58 0a 58 2f 2a 0a | 58 20 2a 20 63 68 65 63 |}.X.X/*.|X * chec|
|000037b0| 6b 5f 73 68 65 6c 6c 20 | 2d 20 73 65 65 20 69 66 |k_shell |- see if|
|000037c0| 20 74 68 65 20 75 73 65 | 72 27 73 20 6c 6f 67 69 | the use|r's logi|
|000037d0| 6e 20 73 68 65 6c 6c 20 | 69 73 20 6c 69 73 74 65 |n shell |is liste|
|000037e0| 64 20 69 6e 20 2f 65 74 | 63 2f 73 68 65 6c 6c 73 |d in /et|c/shells|
|000037f0| 0a 58 20 2a 0a 58 20 2a | 20 54 68 65 20 2f 65 74 |.X *.X *| The /et|
|00003800| 63 2f 73 68 65 6c 6c 73 | 20 66 69 6c 65 20 69 73 |c/shells| file is|
|00003810| 20 72 65 61 64 20 66 6f | 72 20 76 61 6c 69 64 20 | read fo|r valid |
|00003820| 6e 61 6d 65 73 20 6f 66 | 20 6c 6f 67 69 6e 20 73 |names of| login s|
|00003830| 68 65 6c 6c 73 2e 20 20 | 49 66 20 74 68 65 0a 58 |hells. |If the.X|
|00003840| 20 2a 20 2f 65 74 63 2f | 73 68 65 6c 6c 73 20 66 | * /etc/|shells f|
|00003850| 69 6c 65 20 64 6f 65 73 | 20 6e 6f 74 20 65 78 69 |ile does| not exi|
|00003860| 73 74 20 74 68 65 20 75 | 73 65 72 20 63 61 6e 6e |st the u|ser cann|
|00003870| 6f 74 20 73 65 74 20 61 | 6e 79 20 73 68 65 6c 6c |ot set a|ny shell|
|00003880| 20 75 6e 6c 65 73 73 0a | 58 20 2a 20 74 68 65 79 | unless.|X * they|
|00003890| 20 61 72 65 20 72 6f 6f | 74 2e 0a 58 20 2a 2f 0a | are roo|t..X */.|
|000038a0| 58 0a 58 63 68 65 63 6b | 5f 73 68 65 6c 6c 20 28 |X.Xcheck|_shell (|
|000038b0| 73 68 65 6c 6c 29 0a 58 | 63 68 61 72 09 2a 73 68 |shell).X|char.*sh|
|000038c0| 65 6c 6c 3b 0a 58 7b 0a | 58 09 63 68 61 72 09 62 |ell;.X{.|X.char.b|
|000038d0| 75 66 5b 42 55 46 53 49 | 5a 5d 3b 0a 58 09 63 68 |uf[BUFSI|Z];.X.ch|
|000038e0| 61 72 09 2a 63 70 3b 0a | 58 09 69 6e 74 09 66 6f |ar.*cp;.|X.int.fo|
|000038f0| 75 6e 64 20 3d 20 30 3b | 0a 58 09 46 49 4c 45 09 |und = 0;|.X.FILE.|
|00003900| 2a 66 70 3b 0a 58 0a 58 | 09 69 66 20 28 61 6d 72 |*fp;.X.X|.if (amr|
|00003910| 6f 6f 74 29 0a 58 09 09 | 72 65 74 75 72 6e 20 31 |oot).X..|return 1|
|00003920| 3b 0a 58 0a 58 09 69 66 | 20 28 28 66 70 20 3d 20 |;.X.X.if| ((fp = |
|00003930| 66 6f 70 65 6e 20 28 22 | 2f 65 74 63 2f 73 68 65 |fopen ("|/etc/she|
|00003940| 6c 6c 73 22 2c 20 22 72 | 22 29 29 20 3d 3d 20 28 |lls", "r|")) == (|
|00003950| 46 49 4c 45 20 2a 29 20 | 30 29 0a 58 09 09 72 65 |FILE *) |0).X..re|
|00003960| 74 75 72 6e 20 30 3b 0a | 58 0a 58 09 77 68 69 6c |turn 0;.|X.X.whil|
|00003970| 65 20 28 66 67 65 74 73 | 20 28 62 75 66 2c 20 42 |e (fgets| (buf, B|
|00003980| 55 46 53 49 5a 2c 20 66 | 70 29 20 26 26 20 21 20 |UFSIZ, f|p) && ! |
|00003990| 66 6f 75 6e 64 29 20 7b | 0a 58 09 09 69 66 20 28 |found) {|.X..if (|
|000039a0| 63 70 20 3d 20 73 74 72 | 72 63 68 72 20 28 62 75 |cp = str|rchr (bu|
|000039b0| 66 2c 20 27 5c 6e 27 29 | 29 0a 58 09 09 09 2a 63 |f, '\n')|).X...*c|
|000039c0| 70 20 3d 20 27 5c 30 27 | 3b 0a 58 0a 58 09 09 69 |p = '\0'|;.X.X..i|
|000039d0| 66 20 28 73 74 72 63 6d | 70 20 28 62 75 66 2c 20 |f (strcm|p (buf, |
|000039e0| 73 68 65 6c 6c 29 20 3d | 3d 20 30 29 0a 58 09 09 |shell) =|= 0).X..|
|000039f0| 09 66 6f 75 6e 64 20 3d | 20 31 3b 0a 58 09 7d 0a |.found =| 1;.X.}.|
|00003a00| 58 09 66 63 6c 6f 73 65 | 20 28 66 70 29 3b 0a 58 |X.fclose| (fp);.X|
|00003a10| 0a 58 09 72 65 74 75 72 | 6e 20 66 6f 75 6e 64 3b |.X.retur|n found;|
|00003a20| 0a 58 7d 0a 58 0a 58 2f | 2a 0a 58 20 2a 20 72 65 |.X}.X.X/|*.X * re|
|00003a30| 73 74 72 69 63 74 65 64 | 5f 73 68 65 6c 6c 20 2d |stricted|_shell -|
|00003a40| 20 72 65 74 75 72 6e 20 | 74 72 75 65 20 69 66 20 | return |true if |
|00003a50| 74 68 65 20 6e 61 6d 65 | 64 20 73 68 65 6c 6c 20 |the name|d shell |
|00003a60| 62 65 67 69 6e 73 20 77 | 69 74 68 20 27 72 27 20 |begins w|ith 'r' |
|00003a70| 6f 72 20 27 52 27 0a 58 | 20 2a 0a 58 20 2a 20 49 |or 'R'.X| *.X * I|
|00003a80| 66 20 74 68 65 20 66 69 | 72 73 74 20 6c 65 74 74 |f the fi|rst lett|
|00003a90| 65 72 20 6f 66 20 74 68 | 65 20 66 69 6c 65 6e 61 |er of th|e filena|
|00003aa0| 6d 65 20 69 73 20 27 72 | 27 20 6f 72 20 27 52 27 |me is 'r|' or 'R'|
|00003ab0| 2c 20 74 68 65 20 73 68 | 65 6c 6c 20 69 73 0a 58 |, the sh|ell is.X|
|00003ac0| 20 2a 20 63 6f 6e 73 69 | 64 65 72 65 64 20 74 6f | * consi|dered to|
|00003ad0| 20 62 65 20 72 65 73 74 | 72 69 63 74 65 64 2e 0a | be rest|ricted..|
|00003ae0| 58 20 2a 2f 0a 58 0a 58 | 69 6e 74 0a 58 72 65 73 |X */.X.X|int.Xres|
|00003af0| 74 72 69 63 74 65 64 5f | 73 68 65 6c 6c 20 28 73 |tricted_|shell (s|
|00003b00| 68 65 6c 6c 29 0a 58 63 | 68 61 72 09 2a 73 68 65 |hell).Xc|har.*she|
|00003b10| 6c 6c 3b 0a 58 7b 0a 58 | 09 63 68 61 72 09 2a 63 |ll;.X{.X|.char.*c|
|00003b20| 70 3b 0a 58 0a 58 09 69 | 66 20 28 63 70 20 3d 20 |p;.X.X.i|f (cp = |
|00003b30| 73 74 72 72 63 68 72 20 | 28 73 68 65 6c 6c 2c 20 |strrchr |(shell, |
|00003b40| 27 2f 27 29 29 0a 58 09 | 09 63 70 2b 2b 3b 0a 58 |'/')).X.|.cp++;.X|
|00003b50| 09 65 6c 73 65 0a 58 09 | 09 63 70 20 3d 20 73 68 |.else.X.|.cp = sh|
|00003b60| 65 6c 6c 3b 0a 58 0a 58 | 09 72 65 74 75 72 6e 20 |ell;.X.X|.return |
|00003b70| 2a 63 70 20 3d 3d 20 27 | 72 27 20 7c 7c 20 2a 63 |*cp == '|r' || *c|
|00003b80| 70 20 3d 3d 20 27 52 27 | 3b 0a 58 7d 0a 58 0a 58 |p == 'R'|;.X}.X.X|
|00003b90| 23 69 66 64 65 66 09 44 | 42 4d 0a 58 2f 2a 0a 58 |#ifdef.D|BM.X/*.X|
|00003ba0| 20 2a 20 75 70 64 61 74 | 65 5f 64 62 6d 0a 58 20 | * updat|e_dbm.X |
|00003bb0| 2a 0a 58 20 2a 20 55 70 | 64 61 74 65 73 20 74 68 |*.X * Up|dates th|
|00003bc0| 65 20 44 42 4d 20 70 61 | 73 73 77 6f 72 64 20 66 |e DBM pa|ssword f|
|00003bd0| 69 6c 65 73 2c 20 69 66 | 20 74 68 65 79 20 65 78 |iles, if| they ex|
|00003be0| 69 73 74 2e 0a 58 20 2a | 2f 0a 58 0a 58 75 70 64 |ist..X *|/.X.Xupd|
|00003bf0| 61 74 65 5f 64 62 6d 20 | 28 70 77 29 0a 58 73 74 |ate_dbm |(pw).Xst|
|00003c00| 72 75 63 74 09 70 61 73 | 73 77 64 09 2a 70 77 3b |ruct.pas|swd.*pw;|
|00003c10| 0a 58 7b 0a 58 09 64 61 | 74 75 6d 09 6b 65 79 3b |.X{.X.da|tum.key;|
|00003c20| 0a 58 09 64 61 74 75 6d | 09 63 6f 6e 74 65 6e 74 |.X.datum|.content|
|00003c30| 3b 0a 58 09 63 68 61 72 | 09 64 61 74 61 5b 42 55 |;.X.char|.data[BU|
|00003c40| 46 53 49 5a 5d 3b 0a 58 | 09 69 6e 74 09 6c 65 6e |FSIZ];.X|.int.len|
|00003c50| 3b 0a 58 0a 58 09 73 74 | 72 63 70 79 20 28 64 61 |;.X.X.st|rcpy (da|
|00003c60| 74 61 2c 20 50 57 44 46 | 49 4c 45 29 3b 0a 58 09 |ta, PWDF|ILE);.X.|
|00003c70| 73 74 72 63 61 74 20 28 | 64 61 74 61 2c 20 22 2e |strcat (|data, ".|
|00003c80| 70 61 67 22 29 3b 0a 58 | 09 69 66 20 28 61 63 63 |pag");.X|.if (acc|
|00003c90| 65 73 73 20 28 64 61 74 | 61 2c 20 30 29 29 0a 58 |ess (dat|a, 0)).X|
|00003ca0| 09 09 72 65 74 75 72 6e | 3b 0a 58 0a 58 09 6c 65 |..return|;.X.X.le|
|00003cb0| 6e 20 3d 20 70 77 5f 70 | 61 63 6b 20 28 70 77 2c |n = pw_p|ack (pw,|
|00003cc0| 20 64 61 74 61 29 3b 0a | 58 09 63 6f 6e 74 65 6e | data);.|X.conten|
|00003cd0| 74 2e 64 73 69 7a 65 20 | 3d 20 6c 65 6e 3b 0a 58 |t.dsize |= len;.X|
|00003ce0| 09 63 6f 6e 74 65 6e 74 | 2e 64 70 74 72 20 3d 20 |.content|.dptr = |
|00003cf0| 64 61 74 61 3b 0a 58 0a | 58 09 6b 65 79 2e 64 73 |data;.X.|X.key.ds|
|00003d00| 69 7a 65 20 3d 20 73 74 | 72 6c 65 6e 20 28 70 77 |ize = st|rlen (pw|
|00003d10| 2d 3e 70 77 5f 6e 61 6d | 65 29 3b 0a 58 09 6b 65 |->pw_nam|e);.X.ke|
|00003d20| 79 2e 64 70 74 72 20 3d | 20 70 77 2d 3e 70 77 5f |y.dptr =| pw->pw_|
|00003d30| 6e 61 6d 65 3b 0a 58 09 | 73 74 6f 72 65 20 28 6b |name;.X.|store (k|
|00003d40| 65 79 2c 20 63 6f 6e 74 | 65 6e 74 29 3b 0a 58 0a |ey, cont|ent);.X.|
|00003d50| 58 09 6b 65 79 2e 64 73 | 69 7a 65 20 3d 20 73 69 |X.key.ds|ize = si|
|00003d60| 7a 65 6f 66 20 70 77 2d | 3e 70 77 5f 75 69 64 3b |zeof pw-|>pw_uid;|
|00003d70| 0a 58 09 6b 65 79 2e 64 | 70 74 72 20 3d 20 28 63 |.X.key.d|ptr = (c|
|00003d80| 68 61 72 20 2a 29 20 26 | 70 77 2d 3e 70 77 5f 75 |har *) &|pw->pw_u|
|00003d90| 69 64 3b 0a 58 09 73 74 | 6f 72 65 20 28 6b 65 79 |id;.X.st|ore (key|
|00003da0| 2c 20 63 6f 6e 74 65 6e | 74 29 3b 0a 58 7d 0a 58 |, conten|t);.X}.X|
|00003db0| 23 65 6e 64 69 66 0a 58 | 0a 58 69 6e 74 0a 58 6d |#endif.X|.Xint.Xm|
|00003dc0| 61 69 6e 20 28 61 72 67 | 63 2c 20 61 72 67 76 29 |ain (arg|c, argv)|
|00003dd0| 0a 58 69 6e 74 09 61 72 | 67 63 3b 0a 58 63 68 61 |.Xint.ar|gc;.Xcha|
|00003de0| 72 09 2a 2a 61 72 67 76 | 3b 0a 58 7b 0a 58 09 65 |r.**argv|;.X{.X.e|
|00003df0| 78 74 65 72 6e 09 69 6e | 74 09 6f 70 74 69 6e 64 |xtern.in|t.optind|
|00003e00| 3b 0a 58 09 65 78 74 65 | 72 6e 09 63 68 61 72 09 |;.X.exte|rn.char.|
|00003e10| 2a 6f 70 74 61 72 67 3b | 0a 58 09 76 6f 69 64 09 |*optarg;|.X.void.|
|00003e20| 64 69 65 20 28 29 3b 0a | 58 09 63 68 61 72 09 2a |die ();.|X.char.*|
|00003e30| 63 70 3b 0a 58 09 63 68 | 61 72 09 2a 67 65 74 6c |cp;.X.ch|ar.*getl|
|00003e40| 6f 67 69 6e 20 28 29 3b | 0a 58 09 69 6e 74 09 6c |ogin ();|.X.int.l|
|00003e50| 6f 63 6b 66 64 20 3d 20 | 2d 31 3b 0a 58 09 69 6e |ockfd = |-1;.X.in|
|00003e60| 74 09 66 6c 61 67 3b 0a | 58 09 73 74 72 75 63 74 |t.flag;.|X.struct|
|00003e70| 09 70 61 73 73 77 64 09 | 2a 70 77 3b 0a 58 09 73 |.passwd.|*pw;.X.s|
|00003e80| 74 72 75 63 74 09 70 61 | 73 73 77 64 09 2a 67 65 |truct.pa|sswd.*ge|
|00003e90| 74 70 77 75 69 64 20 28 | 29 3b 0a 58 09 73 74 72 |tpwuid (|);.X.str|
|00003ea0| 75 63 74 09 70 61 73 73 | 77 64 09 2a 67 65 74 70 |uct.pass|wd.*getp|
|00003eb0| 77 6e 61 6d 20 28 29 3b | 0a 58 09 73 74 72 75 63 |wnam ();|.X.struc|
|00003ec0| 74 09 70 61 73 73 77 64 | 09 2a 73 67 65 74 70 77 |t.passwd|.*sgetpw|
|00003ed0| 65 6e 74 20 28 29 3b 0a | 58 09 46 49 4c 45 09 2a |ent ();.|X.FILE.*|
|00003ee0| 6e 70 77 64 3b 0a 58 09 | 46 49 4c 45 09 2a 70 77 |npwd;.X.|FILE.*pw|
|00003ef0| 64 3b 0a 58 09 63 68 61 | 72 09 62 75 66 5b 42 55 |d;.X.cha|r.buf[BU|
|00003f00| 46 53 49 5a 5d 3b 0a 58 | 09 63 68 61 72 09 74 6d |FSIZ];.X|.char.tm|
|00003f10| 70 5b 42 55 46 53 49 5a | 5d 3b 0a 58 0a 58 09 61 |p[BUFSIZ|];.X.X.a|
|00003f20| 6d 72 6f 6f 74 20 3d 20 | 67 65 74 75 69 64 20 28 |mroot = |getuid (|
|00003f30| 29 20 3d 3d 20 30 3b 0a | 58 09 69 66 20 28 6d 79 |) == 0;.|X.if (my|
|00003f40| 6e 61 6d 65 20 3d 20 73 | 74 72 63 68 72 20 28 61 |name = s|trchr (a|
|00003f50| 72 67 76 5b 30 5d 2c 20 | 27 2f 27 29 29 0a 58 09 |rgv[0], |'/')).X.|
|00003f60| 09 6d 79 6e 61 6d 65 2b | 2b 3b 0a 58 09 65 6c 73 |.myname+|+;.X.els|
|00003f70| 65 0a 58 09 09 6d 79 6e | 61 6d 65 20 3d 20 61 72 |e.X..myn|ame = ar|
|00003f80| 67 76 5b 30 5d 3b 0a 58 | 0a 58 09 77 68 69 6c 65 |gv[0];.X|.X.while|
|00003f90| 20 28 28 66 6c 61 67 20 | 3d 20 67 65 74 6f 70 74 | ((flag |= getopt|
|00003fa0| 20 28 61 72 67 63 2c 20 | 61 72 67 76 2c 20 22 73 | (argc, |argv, "s|
|00003fb0| 3a 22 29 29 20 21 3d 20 | 45 4f 46 29 20 7b 0a 58 |:")) != |EOF) {.X|
|00003fc0| 09 09 73 77 69 74 63 68 | 20 28 66 6c 61 67 29 20 |..switch| (flag) |
|00003fd0| 7b 0a 58 09 09 09 63 61 | 73 65 20 27 73 27 3a 0a |{.X...ca|se 's':.|
|00003fe0| 58 09 09 09 09 73 66 6c | 67 2b 2b 3b 0a 58 09 09 |X....sfl|g++;.X..|
|00003ff0| 09 09 73 74 72 63 70 79 | 20 28 6c 6f 67 69 6e 73 |..strcpy| (logins|
|00004000| 68 2c 20 6f 70 74 61 72 | 67 29 3b 0a 58 09 09 09 |h, optar|g);.X...|
|00004010| 09 62 72 65 61 6b 3b 0a | 58 09 09 09 64 65 66 61 |.break;.|X...defa|
|00004020| 75 6c 74 3a 0a 58 09 09 | 09 09 75 73 61 67 65 20 |ult:.X..|..usage |
|00004030| 28 29 3b 0a 58 09 09 7d | 0a 58 09 7d 0a 58 09 69 |();.X..}|.X.}.X.i|
|00004040| 66 20 28 61 72 67 63 20 | 3e 20 6f 70 74 69 6e 64 |f (argc |> optind|
|00004050| 29 20 7b 0a 58 09 09 69 | 66 20 28 61 72 67 63 20 |) {.X..i|f (argc |
|00004060| 3e 20 6f 70 74 69 6e 64 | 20 2b 20 31 29 0a 58 09 |> optind| + 1).X.|
|00004070| 09 09 75 73 61 67 65 20 | 28 29 3b 0a 58 0a 58 09 |..usage |();.X.X.|
|00004080| 09 69 66 20 28 21 20 28 | 70 77 20 3d 20 67 65 74 |.if (! (|pw = get|
|00004090| 70 77 6e 61 6d 20 28 61 | 72 67 76 5b 6f 70 74 69 |pwnam (a|rgv[opti|
|000040a0| 6e 64 5d 29 29 29 20 7b | 0a 58 09 09 09 66 70 72 |nd]))) {|.X...fpr|
|000040b0| 69 6e 74 66 20 28 73 74 | 64 65 72 72 2c 20 22 25 |intf (st|derr, "%|
|000040c0| 73 3a 20 75 6e 6b 6e 6f | 77 6e 20 75 73 65 72 3a |s: unkno|wn user:|
|000040d0| 20 25 73 5c 6e 22 2c 0a | 58 09 09 09 09 6d 79 6e | %s\n",.|X....myn|
|000040e0| 61 6d 65 2c 20 61 72 67 | 76 5b 6f 70 74 69 6e 64 |ame, arg|v[optind|
|000040f0| 5d 29 3b 0a 58 09 09 09 | 65 78 69 74 20 28 31 29 |]);.X...|exit (1)|
|00004100| 3b 0a 58 09 09 7d 0a 58 | 09 7d 20 65 6c 73 65 20 |;.X..}.X|.} else |
|00004110| 7b 0a 58 09 09 69 66 20 | 28 63 70 20 3d 20 67 65 |{.X..if |(cp = ge|
|00004120| 74 6c 6f 67 69 6e 20 28 | 29 29 20 7b 0a 58 09 09 |tlogin (|)) {.X..|
|00004130| 09 69 66 20 28 21 20 28 | 70 77 20 3d 20 67 65 74 |.if (! (|pw = get|
|00004140| 70 77 6e 61 6d 20 28 63 | 70 29 29 29 20 7b 0a 58 |pwnam (c|p))) {.X|
|00004150| 09 09 09 09 66 70 72 69 | 6e 74 66 20 28 73 74 64 |....fpri|ntf (std|
|00004160| 65 72 72 2c 20 22 25 73 | 3a 20 75 6e 6b 6e 6f 77 |err, "%s|: unknow|
|00004170| 6e 20 75 73 65 72 3a 20 | 25 73 5c 6e 22 2c 0a 58 |n user: |%s\n",.X|
|00004180| 09 09 09 09 09 6d 79 6e | 61 6d 65 2c 20 63 70 29 |.....myn|ame, cp)|
|00004190| 3b 0a 58 09 09 09 09 65 | 78 69 74 20 28 31 29 3b |;.X....e|xit (1);|
|000041a0| 0a 58 09 09 09 7d 0a 58 | 09 09 7d 20 65 6c 73 65 |.X...}.X|..} else|
|000041b0| 20 69 66 20 28 21 20 28 | 70 77 20 3d 20 67 65 74 | if (! (|pw = get|
|000041c0| 70 77 75 69 64 20 28 67 | 65 74 75 69 64 20 28 29 |pwuid (g|etuid ()|
|000041d0| 29 29 29 20 7b 0a 58 09 | 09 09 66 70 72 69 6e 74 |))) {.X.|..fprint|
|000041e0| 66 20 28 73 74 64 65 72 | 72 2c 20 22 25 73 3a 20 |f (stder|r, "%s: |
|000041f0| 77 68 6f 20 61 72 65 20 | 79 6f 75 3f 5c 6e 22 2c |who are |you?\n",|
|00004200| 0a 58 09 09 09 09 6d 79 | 6e 61 6d 65 29 3b 0a 58 |.X....my|name);.X|
|00004210| 09 09 09 65 78 69 74 20 | 28 31 29 3b 0a 58 09 09 |...exit |(1);.X..|
|00004220| 7d 0a 58 09 7d 0a 58 09 | 69 66 20 28 21 20 61 6d |}.X.}.X.|if (! am|
|00004230| 72 6f 6f 74 20 26 26 20 | 70 77 2d 3e 70 77 5f 75 |root && |pw->pw_u|
|00004240| 69 64 20 21 3d 20 67 65 | 74 75 69 64 20 28 29 29 |id != ge|tuid ())|
|00004250| 20 7b 0a 58 09 09 66 70 | 72 69 6e 74 66 20 28 73 | {.X..fp|rintf (s|
|00004260| 74 64 65 72 72 2c 20 22 | 25 73 3a 20 70 65 72 6d |tderr, "|%s: perm|
|00004270| 69 73 73 69 6f 6e 20 64 | 65 6e 69 65 64 5c 6e 22 |ission d|enied\n"|
|00004280| 2c 0a 58 09 09 09 6d 79 | 6e 61 6d 65 29 3b 0a 58 |,.X...my|name);.X|
|00004290| 09 09 65 78 69 74 20 28 | 31 29 3b 0a 58 09 7d 0a |..exit (|1);.X.}.|
|000042a0| 58 09 69 66 20 28 21 20 | 61 6d 72 6f 6f 74 20 26 |X.if (! |amroot &|
|000042b0| 26 20 72 65 73 74 72 69 | 63 74 65 64 5f 73 68 65 |& restri|cted_she|
|000042c0| 6c 6c 20 28 70 77 2d 3e | 70 77 5f 73 68 65 6c 6c |ll (pw->|pw_shell|
|000042d0| 29 29 20 7b 0a 58 09 09 | 66 70 72 69 6e 74 66 20 |)) {.X..|fprintf |
|000042e0| 28 73 74 64 65 72 72 2c | 20 22 25 73 3a 20 70 65 |(stderr,| "%s: pe|
|000042f0| 72 6d 69 73 73 69 6f 6e | 20 64 65 6e 69 65 64 5c |rmission| denied\|
|00004300| 6e 22 2c 0a 58 09 09 09 | 6d 79 6e 61 6d 65 29 3b |n",.X...|myname);|
|00004310| 0a 58 09 09 65 78 69 74 | 20 28 31 29 3b 0a 58 09 |.X..exit| (1);.X.|
|00004320| 7d 0a 58 09 73 74 72 63 | 70 79 20 28 75 73 65 72 |}.X.strc|py (user|
|00004330| 2c 20 70 77 2d 3e 70 77 | 5f 6e 61 6d 65 29 3b 0a |, pw->pw|_name);.|
|00004340| 58 0a 58 09 70 77 65 6e | 74 20 3d 20 2a 70 77 3b |X.X.pwen|t = *pw;|
|00004350| 0a 58 09 70 77 65 6e 74 | 2e 70 77 5f 6e 61 6d 65 |.X.pwent|.pw_name|
|00004360| 20 3d 20 73 74 72 64 75 | 70 20 28 70 77 2d 3e 70 | = strdu|p (pw->p|
|00004370| 77 5f 6e 61 6d 65 29 3b | 0a 58 09 70 77 65 6e 74 |w_name);|.X.pwent|
|00004380| 2e 70 77 5f 70 61 73 73 | 77 64 20 3d 20 73 74 72 |.pw_pass|wd = str|
|00004390| 64 75 70 20 28 70 77 2d | 3e 70 77 5f 70 61 73 73 |dup (pw-|>pw_pass|
|000043a0| 77 64 29 3b 0a 58 09 70 | 77 65 6e 74 2e 70 77 5f |wd);.X.p|went.pw_|
|000043b0| 64 69 72 20 3d 20 73 74 | 72 64 75 70 20 28 70 77 |dir = st|rdup (pw|
|000043c0| 2d 3e 70 77 5f 64 69 72 | 29 3b 0a 58 09 70 77 65 |->pw_dir|);.X.pwe|
|000043d0| 6e 74 2e 70 77 5f 67 65 | 63 6f 73 20 3d 20 73 74 |nt.pw_ge|cos = st|
|000043e0| 72 64 75 70 20 28 70 77 | 2d 3e 70 77 5f 67 65 63 |rdup (pw|->pw_gec|
|000043f0| 6f 73 29 3b 0a 58 0a 58 | 09 2f 2a 0a 58 09 20 2a |os);.X.X|./*.X. *|
|00004400| 20 4e 6f 77 20 67 65 74 | 20 74 68 65 20 6c 6f 67 | Now get| the log|
|00004410| 69 6e 20 73 68 65 6c 6c | 2e 20 20 45 69 74 68 65 |in shell|. Eithe|
|00004420| 72 20 67 65 74 20 69 74 | 20 66 72 6f 6d 20 74 68 |r get it| from th|
|00004430| 65 20 70 61 73 73 77 6f | 72 64 0a 58 09 20 2a 20 |e passwo|rd.X. * |
|00004440| 66 69 6c 65 2c 20 6f 72 | 20 75 73 65 20 74 68 65 |file, or| use the|
|00004450| 20 76 61 6c 75 65 20 66 | 72 6f 6d 20 74 68 65 20 | value f|rom the |
|00004460| 63 6f 6d 6d 61 6e 64 20 | 6c 69 6e 65 2e 0a 58 09 |command |line..X.|
|00004470| 20 2a 2f 0a 58 0a 58 09 | 69 66 20 28 21 20 73 66 | */.X.X.|if (! sf|
|00004480| 6c 67 29 0a 58 09 09 73 | 74 72 63 70 79 20 28 6c |lg).X..s|trcpy (l|
|00004490| 6f 67 69 6e 73 68 2c 20 | 70 77 2d 3e 70 77 5f 73 |oginsh, |pw->pw_s|
|000044a0| 68 65 6c 6c 29 3b 0a 58 | 0a 58 09 2f 2a 0a 58 09 |hell);.X|.X./*.X.|
|000044b0| 20 2a 20 49 66 20 74 68 | 65 20 6c 6f 67 69 6e 20 | * If th|e login |
|000044c0| 73 68 65 6c 6c 20 77 61 | 73 20 6e 6f 74 20 73 65 |shell wa|s not se|
|000044d0| 74 20 6f 6e 20 74 68 65 | 20 63 6f 6d 6d 61 6e 64 |t on the| command|
|000044e0| 20 6c 69 6e 65 2c 0a 58 | 09 20 2a 20 6c 65 74 20 | line,.X|. * let |
|000044f0| 74 68 65 20 75 73 65 72 | 20 69 6e 74 65 72 61 63 |the user| interac|
|00004500| 74 69 76 65 6c 79 20 63 | 68 61 6e 67 65 20 69 74 |tively c|hange it|
|00004510| 2e 0a 58 09 20 2a 2f 0a | 58 0a 58 09 69 66 20 28 |..X. */.|X.X.if (|
|00004520| 21 20 73 66 6c 67 29 20 | 7b 0a 58 09 09 70 72 69 |! sflg) |{.X..pri|
|00004530| 6e 74 66 20 28 22 43 68 | 61 6e 67 69 6e 67 20 74 |ntf ("Ch|anging t|
|00004540| 68 65 20 6c 6f 67 69 6e | 20 73 68 65 6c 6c 20 66 |he login| shell f|
|00004550| 6f 72 20 25 73 5c 6e 22 | 2c 20 75 73 65 72 29 3b |or %s\n"|, user);|
|00004560| 0a 58 09 09 6e 65 77 5f | 66 69 65 6c 64 73 20 28 |.X..new_|fields (|
|00004570| 29 3b 0a 58 09 7d 0a 58 | 0a 58 09 2f 2a 0a 58 09 |);.X.}.X|.X./*.X.|
|00004580| 20 2a 20 43 68 65 63 6b | 20 61 6c 6c 20 6f 66 20 | * Check| all of |
|00004590| 74 68 65 20 66 69 65 6c | 64 73 20 66 6f 72 20 76 |the fiel|ds for v|
|000045a0| 61 6c 69 64 20 69 6e 66 | 6f 72 6d 61 74 69 6f 6e |alid inf|ormation|
|000045b0| 0a 58 09 20 2a 2f 0a 58 | 0a 58 09 76 61 6c 69 64 |.X. */.X|.X.valid|
|000045c0| 5f 66 69 65 6c 64 20 28 | 6c 6f 67 69 6e 73 68 2c |_field (|loginsh,|
|000045d0| 20 22 3a 2c 3d 22 29 3b | 0a 58 09 69 66 20 28 21 | ":,=");|.X.if (!|
|000045e0| 20 63 68 65 63 6b 5f 73 | 68 65 6c 6c 20 28 6c 6f | check_s|hell (lo|
|000045f0| 67 69 6e 73 68 29 29 20 | 7b 0a 58 09 09 66 70 72 |ginsh)) |{.X..fpr|
|00004600| 69 6e 74 66 20 28 73 74 | 64 65 72 72 2c 20 22 25 |intf (st|derr, "%|
|00004610| 73 3a 20 25 73 20 69 73 | 20 61 6e 20 69 6e 76 61 |s: %s is| an inva|
|00004620| 6c 69 64 20 73 68 65 6c | 6c 5c 6e 22 2c 0a 58 09 |lid shel|l\n",.X.|
|00004630| 09 09 6d 79 6e 61 6d 65 | 2c 20 6c 6f 67 69 6e 73 |..myname|, logins|
|00004640| 68 29 3b 0a 58 09 09 65 | 78 69 74 20 28 31 29 3b |h);.X..e|xit (1);|
|00004650| 0a 58 09 7d 0a 58 09 70 | 77 65 6e 74 2e 70 77 5f |.X.}.X.p|went.pw_|
|00004660| 73 68 65 6c 6c 20 3d 20 | 6c 6f 67 69 6e 73 68 3b |shell = |loginsh;|
|00004670| 0a 58 0a 58 09 2f 2a 0a | 58 09 20 2a 20 4e 6f 77 |.X.X./*.|X. * Now|
|00004680| 20 77 65 20 67 65 74 20 | 74 6f 20 72 61 63 65 20 | we get |to race |
|00004690| 74 68 65 20 62 61 64 20 | 67 75 79 2e 20 20 49 20 |the bad |guy. I |
|000046a0| 64 6f 6e 27 74 20 74 68 | 69 6e 6b 20 68 65 20 63 |don't th|ink he c|
|000046b0| 61 6e 20 67 65 74 20 75 | 73 2e 0a 58 09 20 2a 0a |an get u|s..X. *.|
|000046c0| 58 09 20 2a 20 49 67 6e | 6f 72 65 20 6d 6f 73 74 |X. * Ign|ore most|
|000046d0| 20 72 65 61 73 6f 6e 61 | 62 6c 65 20 73 69 67 6e | reasona|ble sign|
|000046e0| 61 6c 73 2e 0a 58 09 20 | 2a 09 4d 61 79 62 65 20 |als..X. |*.Maybe |
|000046f0| 77 65 20 73 68 6f 75 6c | 64 20 69 67 6e 6f 72 65 |we shoul|d ignore|
|00004700| 20 6d 6f 72 65 3f 20 20 | 48 65 20 63 61 6e 27 74 | more? |He can't|
|00004710| 20 68 75 72 74 20 75 73 | 20 75 6e 74 69 6c 20 74 | hurt us| until t|
|00004720| 68 65 20 65 6e 64 2e 0a | 58 09 20 2a 0a 58 09 20 |he end..|X. *.X. |
|00004730| 2a 20 47 65 74 20 61 20 | 6c 6f 63 6b 20 66 69 6c |* Get a |lock fil|
|00004740| 65 2e 0a 58 09 20 2a 0a | 58 09 20 2a 20 43 6f 70 |e..X. *.|X. * Cop|
|00004750| 79 20 66 69 72 73 74 20 | 70 61 72 74 20 6f 66 20 |y first |part of |
|00004760| 70 61 73 73 77 6f 72 64 | 20 66 69 6c 65 20 74 6f |password| file to|
|00004770| 20 6e 65 77 20 66 69 6c | 65 2e 0a 58 09 20 2a 09 | new fil|e..X. *.|
|00004780| 49 6c 6c 65 67 61 6c 20 | 6c 69 6e 65 73 20 61 72 |Illegal |lines ar|
|00004790| 65 20 63 6f 70 69 65 64 | 20 76 65 72 62 61 74 69 |e copied| verbati|
|000047a0| 6d 2e 0a 58 09 20 2a 09 | 46 69 6c 65 20 70 65 72 |m..X. *.|File per|
|000047b0| 6d 69 73 73 69 6f 6e 73 | 20 61 72 65 20 72 2d 2d |missions| are r--|
|000047c0| 72 2d 2d 72 2d 2d 2c 20 | 6f 77 6e 65 72 20 72 6f |r--r--, |owner ro|
|000047d0| 6f 74 2c 20 67 72 6f 75 | 70 20 72 6f 6f 74 2e 0a |ot, grou|p root..|
|000047e0| 58 09 20 2a 0a 58 09 20 | 2a 20 4f 75 74 70 75 74 |X. *.X. |* Output|
|000047f0| 20 74 68 65 20 6e 65 77 | 20 65 6e 74 72 79 2e 0a | the new| entry..|
|00004800| 58 09 20 2a 09 4f 6e 6c | 79 20 66 69 65 6c 64 73 |X. *.Onl|y fields|
|00004810| 20 69 6e 20 73 74 72 75 | 63 74 20 70 61 73 73 77 | in stru|ct passw|
|00004820| 64 20 61 72 65 20 6f 75 | 74 70 75 74 2e 0a 58 09 |d are ou|tput..X.|
|00004830| 20 2a 0a 58 09 20 2a 20 | 43 6f 70 79 20 74 68 65 | *.X. * |Copy the|
|00004840| 20 72 65 73 74 20 6f 66 | 20 74 68 65 20 66 69 6c | rest of| the fil|
|00004850| 65 20 76 65 72 62 61 74 | 69 6d 2e 0a 58 09 20 2a |e verbat|im..X. *|
|00004860| 0a 58 09 20 2a 20 52 65 | 6e 61 6d 65 20 28 6c 69 |.X. * Re|name (li|
|00004870| 6e 6b 2c 20 75 6e 6c 69 | 6e 6b 29 20 70 61 73 73 |nk, unli|nk) pass|
|00004880| 77 6f 72 64 20 66 69 6c | 65 20 74 6f 20 62 61 63 |word fil|e to bac|
|00004890| 6b 75 70 2e 0a 58 09 20 | 2a 09 4b 69 6c 6c 20 6d |kup..X. |*.Kill m|
|000048a0| 65 20 6e 6f 77 20 61 6e | 64 20 6e 6f 74 68 69 6e |e now an|d nothin|
|000048b0| 67 20 63 68 61 6e 67 65 | 73 20 6f 72 20 6e 6f 20 |g change|s or no |
|000048c0| 6f 6e 65 20 67 65 74 73 | 20 69 6e 2e 0a 58 09 20 |one gets| in..X. |
|000048d0| 2a 0a 58 09 20 2a 20 52 | 65 6e 61 6d 65 20 28 6c |*.X. * R|ename (l|
|000048e0| 69 6e 6b 2c 20 75 6e 6c | 69 6e 6b 29 20 74 65 6d |ink, unl|ink) tem|
|000048f0| 70 6f 72 61 72 79 20 66 | 69 6c 65 20 74 6f 20 70 |porary f|ile to p|
|00004900| 61 73 73 77 6f 72 64 20 | 66 69 6c 65 2e 0a 58 09 |assword |file..X.|
|00004910| 20 2a 09 4b 69 6c 6c 20 | 6d 65 20 6e 6f 77 20 61 | *.Kill |me now a|
|00004920| 6e 64 20 6e 6f 20 6f 6e | 65 20 67 65 74 73 20 69 |nd no on|e gets i|
|00004930| 6e 20 6f 72 20 6c 6f 63 | 6b 20 69 73 20 6c 65 66 |n or loc|k is lef|
|00004940| 74 2e 0a 58 09 20 2a 0a | 58 09 20 2a 20 52 65 6d |t..X. *.|X. * Rem|
|00004950| 6f 76 65 20 6c 6f 63 6b | 69 6e 67 20 66 69 6c 65 |ove lock|ing file|
|00004960| 2e 0a 58 09 20 2a 0a 58 | 09 20 2a 20 54 68 61 74 |..X. *.X|. * That|
|00004970| 27 73 20 61 6c 6c 20 66 | 6f 6c 6b 73 20 2e 2e 2e |'s all f|olks ...|
|00004980| 0a 58 09 20 2a 2f 0a 58 | 0a 58 09 73 69 67 6e 61 |.X. */.X|.X.signa|
|00004990| 6c 20 28 53 49 47 48 55 | 50 2c 20 53 49 47 5f 49 |l (SIGHU|P, SIG_I|
|000049a0| 47 4e 29 3b 0a 58 09 73 | 69 67 6e 61 6c 20 28 53 |GN);.X.s|ignal (S|
|000049b0| 49 47 49 4e 54 2c 20 53 | 49 47 5f 49 47 4e 29 3b |IGINT, S|IG_IGN);|
|000049c0| 0a 58 09 73 69 67 6e 61 | 6c 20 28 53 49 47 51 55 |.X.signa|l (SIGQU|
|000049d0| 49 54 2c 20 53 49 47 5f | 49 47 4e 29 3b 0a 58 09 |IT, SIG_|IGN);.X.|
|000049e0| 73 69 67 6e 61 6c 20 28 | 53 49 47 54 45 52 4d 2c |signal (|SIGTERM,|
|000049f0| 20 53 49 47 5f 49 47 4e | 29 3b 0a 58 0a 58 09 75 | SIG_IGN|);.X.X.u|
|00004a00| 6c 69 6d 69 74 20 28 33 | 30 30 30 30 29 3b 09 09 |limit (3|0000);..|
|00004a10| 09 2f 2a 20 70 72 65 76 | 65 6e 74 20 61 6e 79 20 |./* prev|ent any |
|00004a20| 66 75 6e 6e 79 20 62 75 | 73 69 6e 65 73 73 20 2a |funny bu|siness *|
|00004a30| 2f 0a 58 09 75 6d 61 73 | 6b 20 28 30 29 3b 09 09 |/.X.umas|k (0);..|
|00004a40| 09 2f 2a 20 67 65 74 20 | 6e 65 77 20 66 69 6c 65 |./* get |new file|
|00004a50| 73 20 6d 6f 64 65 73 20 | 63 6f 72 72 65 63 74 20 |s modes |correct |
|00004a60| 2a 2f 0a 58 23 69 66 6e | 64 65 66 09 4e 44 45 42 |*/.X#ifn|def.NDEB|
|00004a70| 55 47 0a 58 09 69 66 20 | 28 28 6c 6f 63 6b 66 64 |UG.X.if |((lockfd|
|00004a80| 20 3d 20 6f 70 65 6e 20 | 28 22 2e 70 77 64 6c 6f | = open |(".pwdlo|
|00004a90| 63 6b 22 2c 20 4f 5f 52 | 44 4f 4e 4c 59 7c 4f 5f |ck", O_R|DONLY|O_|
|00004aa0| 43 52 45 41 54 7c 4f 5f | 45 58 43 4c 29 2c 20 30 |CREAT|O_|EXCL), 0|
|00004ab0| 34 34 34 29 20 3d 3d 20 | 2d 31 29 0a 58 23 65 6c |444) == |-1).X#el|
|00004ac0| 73 65 0a 58 09 69 66 20 | 28 28 6c 6f 63 6b 66 64 |se.X.if |((lockfd|
|00004ad0| 20 3d 20 6f 70 65 6e 20 | 28 50 57 44 4c 4f 43 4b | = open |(PWDLOCK|
|00004ae0| 2c 20 4f 5f 52 44 4f 4e | 4c 59 7c 4f 5f 43 52 45 |, O_RDON|LY|O_CRE|
|00004af0| 41 54 7c 4f 5f 45 58 43 | 4c 29 2c 20 30 34 34 34 |AT|O_EXC|L), 0444|
|00004b00| 29 20 3d 3d 20 2d 31 29 | 0a 58 23 65 6e 64 69 66 |) == -1)|.X#endif|
|00004b10| 09 2f 2a 20 4e 44 45 42 | 55 47 20 2a 2f 0a 58 09 |./* NDEB|UG */.X.|
|00004b20| 7b 0a 58 09 09 70 75 74 | 73 20 28 22 43 61 6e 27 |{.X..put|s ("Can'|
|00004b30| 74 20 67 65 74 20 6c 6f | 63 6b 22 29 3b 0a 58 09 |t get lo|ck");.X.|
|00004b40| 09 65 78 69 74 20 28 31 | 29 3b 0a 58 09 7d 0a 58 |.exit (1|);.X.}.X|
|00004b50| 09 75 6d 61 73 6b 20 28 | 30 37 37 29 3b 09 09 09 |.umask (|077);...|
|00004b60| 2f 2a 20 63 6c 6f 73 65 | 20 73 65 63 75 72 69 74 |/* close| securit|
|00004b70| 79 20 68 6f 6c 65 73 20 | 74 6f 20 63 6f 6d 65 20 |y holes |to come |
|00004b80| 2e 2e 2e 20 2a 2f 0a 58 | 0a 58 23 69 66 64 65 66 |... */.X|.X#ifdef|
|00004b90| 09 44 42 4d 0a 58 09 75 | 70 64 61 74 65 5f 64 62 |.DBM.X.u|pdate_db|
|00004ba0| 6d 20 28 26 70 77 65 6e | 74 29 3b 0a 58 23 65 6e |m (&pwen|t);.X#en|
|00004bb0| 64 69 66 0a 58 09 69 66 | 20 28 61 63 63 65 73 73 |dif.X.if| (access|
|00004bc0| 20 28 4e 50 57 44 46 49 | 4c 45 2c 20 30 29 20 3d | (NPWDFI|LE, 0) =|
|00004bd0| 3d 20 30 20 26 26 20 75 | 6e 6c 69 6e 6b 20 28 4e |= 0 && u|nlink (N|
|00004be0| 50 57 44 46 49 4c 45 29 | 20 3d 3d 20 2d 31 29 20 |PWDFILE)| == -1) |
|00004bf0| 7b 0a 58 09 09 70 65 72 | 72 6f 72 20 28 4e 50 57 |{.X..per|ror (NPW|
|00004c00| 44 46 49 4c 45 29 3b 0a | 58 09 09 65 78 69 74 20 |DFILE);.|X..exit |
|00004c10| 28 31 29 3b 0a 58 09 7d | 0a 58 23 69 66 6e 64 65 |(1);.X.}|.X#ifnde|
|00004c20| 66 09 4e 44 45 42 55 47 | 0a 58 09 69 66 20 28 28 |f.NDEBUG|.X.if ((|
|00004c30| 6e 70 77 64 20 3d 20 66 | 6f 70 65 6e 20 28 22 6e |npwd = f|open ("n|
|00004c40| 70 61 73 73 77 64 22 2c | 20 22 77 22 29 29 20 3d |passwd",| "w")) =|
|00004c50| 3d 20 28 46 49 4c 45 20 | 2a 29 20 30 29 0a 58 23 |= (FILE |*) 0).X#|
|00004c60| 65 6c 73 65 0a 58 09 75 | 6d 61 73 6b 20 28 30 37 |else.X.u|mask (07|
|00004c70| 37 29 3b 09 09 2f 2a 20 | 6e 6f 20 70 65 72 6d 69 |7);../* |no permi|
|00004c80| 73 73 69 6f 6e 73 20 66 | 6f 72 20 6e 6f 6e 2d 72 |ssions f|or non-r|
|00004c90| 6f 6f 74 73 20 2a 2f 0a | 58 0a 58 09 69 66 20 28 |oots */.|X.X.if (|
|00004ca0| 28 6e 70 77 64 20 3d 20 | 66 6f 70 65 6e 20 28 4e |(npwd = |fopen (N|
|00004cb0| 50 57 44 46 49 4c 45 2c | 20 22 77 22 29 29 20 3d |PWDFILE,| "w")) =|
|00004cc0| 3d 20 28 46 49 4c 45 20 | 2a 29 20 30 29 0a 58 23 |= (FILE |*) 0).X#|
|00004cd0| 65 6e 64 69 66 09 2f 2a | 20 4e 44 45 42 55 47 20 |endif./*| NDEBUG |
|00004ce0| 2a 2f 0a 58 09 7b 0a 58 | 09 09 70 65 72 72 6f 72 |*/.X.{.X|..perror|
|00004cf0| 20 28 4e 50 57 44 46 49 | 4c 45 29 3b 0a 58 09 09 | (NPWDFI|LE);.X..|
|00004d00| 65 78 69 74 20 28 31 29 | 3b 0a 58 09 7d 0a 58 23 |exit (1)|;.X.}.X#|
|00004d10| 69 66 6e 64 65 66 09 4e | 44 45 42 55 47 0a 58 09 |ifndef.N|DEBUG.X.|
|00004d20| 63 68 6d 6f 64 20 28 4e | 50 57 44 46 49 4c 45 2c |chmod (N|PWDFILE,|
|00004d30| 20 30 34 34 34 29 3b 09 | 09 2f 2a 20 6c 65 74 73 | 0444);.|./* lets|
|00004d40| 20 68 61 76 65 20 73 6f | 6d 65 20 73 65 63 75 72 | have so|me secur|
|00004d50| 69 74 79 20 68 65 72 65 | 20 2e 2e 2e 20 2a 2f 0a |ity here| ... */.|
|00004d60| 58 09 63 68 6f 77 6e 20 | 28 4e 50 57 44 46 49 4c |X.chown |(NPWDFIL|
|00004d70| 45 2c 20 30 2c 20 30 29 | 3b 09 09 2f 2a 20 2e 2e |E, 0, 0)|;../* ..|
|00004d80| 2e 20 61 6e 64 20 6b 65 | 65 70 20 74 68 65 20 62 |. and ke|ep the b|
|00004d90| 61 64 20 67 75 79 20 61 | 77 61 79 20 2a 2f 0a 58 |ad guy a|way */.X|
|00004da0| 23 65 6e 64 69 66 09 2f | 2a 20 4e 44 45 42 55 47 |#endif./|* NDEBUG|
|00004db0| 20 2a 2f 0a 58 09 69 66 | 20 28 28 70 77 64 20 3d | */.X.if| ((pwd =|
|00004dc0| 20 66 6f 70 65 6e 20 28 | 50 57 44 46 49 4c 45 2c | fopen (|PWDFILE,|
|00004dd0| 20 22 72 22 29 29 20 3d | 3d 20 28 46 49 4c 45 20 | "r")) =|= (FILE |
|00004de0| 2a 29 20 30 29 20 7b 0a | 58 09 09 70 65 72 72 6f |*) 0) {.|X..perro|
|00004df0| 72 20 28 4e 50 57 44 46 | 49 4c 45 29 3b 0a 58 09 |r (NPWDF|ILE);.X.|
|00004e00| 09 65 78 69 74 20 28 31 | 29 3b 0a 58 09 7d 0a 58 |.exit (1|);.X.}.X|
|00004e10| 09 77 68 69 6c 65 20 28 | 66 67 65 74 73 20 28 62 |.while (|fgets (b|
|00004e20| 75 66 2c 20 42 55 46 53 | 49 5a 2c 20 70 77 64 29 |uf, BUFS|IZ, pwd)|
|00004e30| 20 21 3d 20 28 63 68 61 | 72 20 2a 29 20 30 29 20 | != (cha|r *) 0) |
|00004e40| 7b 0a 58 09 09 69 66 20 | 28 62 75 66 5b 30 5d 20 |{.X..if |(buf[0] |
|00004e50| 3d 3d 20 27 23 27 20 7c | 7c 20 21 20 28 70 77 20 |== '#' ||| ! (pw |
|00004e60| 3d 20 73 67 65 74 70 77 | 65 6e 74 20 28 62 75 66 |= sgetpw|ent (buf|
|00004e70| 29 29 29 20 7b 0a 58 09 | 09 09 66 70 75 74 73 20 |))) {.X.|..fputs |
|00004e80| 28 62 75 66 2c 20 6e 70 | 77 64 29 3b 0a 58 09 09 |(buf, np|wd);.X..|
|00004e90| 7d 20 65 6c 73 65 20 69 | 66 20 28 73 74 72 63 6d |} else i|f (strcm|
|00004ea0| 70 20 28 70 77 2d 3e 70 | 77 5f 6e 61 6d 65 2c 20 |p (pw->p|w_name, |
|00004eb0| 70 77 65 6e 74 2e 70 77 | 5f 6e 61 6d 65 29 20 21 |pwent.pw|_name) !|
|00004ec0| 3d 20 30 29 0a 58 09 09 | 09 66 70 75 74 73 20 28 |= 0).X..|.fputs (|
|00004ed0| 62 75 66 2c 20 6e 70 77 | 64 29 3b 0a 58 09 09 65 |buf, npw|d);.X..e|
|00004ee0| 6c 73 65 0a 58 09 09 09 | 62 72 65 61 6b 3b 0a 58 |lse.X...|break;.X|
|00004ef0| 09 7d 0a 58 09 28 76 6f | 69 64 29 20 66 70 72 69 |.}.X.(vo|id) fpri|
|00004f00| 6e 74 66 20 28 6e 70 77 | 64 2c 20 22 25 73 3a 22 |ntf (npw|d, "%s:"|
|00004f10| 2c 20 70 77 2d 3e 70 77 | 5f 6e 61 6d 65 29 3b 0a |, pw->pw|_name);.|
|00004f20| 58 09 69 66 20 28 70 77 | 65 6e 74 2e 70 77 5f 61 |X.if (pw|ent.pw_a|
|00004f30| 67 65 29 0a 58 09 09 28 | 76 6f 69 64 29 20 66 70 |ge).X..(|void) fp|
|00004f40| 72 69 6e 74 66 20 28 6e | 70 77 64 2c 20 22 25 73 |rintf (n|pwd, "%s|
|00004f50| 2c 25 73 3a 22 2c 20 70 | 77 65 6e 74 2e 70 77 5f |,%s:", p|went.pw_|
|00004f60| 70 61 73 73 77 64 2c 20 | 70 77 65 6e 74 2e 70 77 |passwd, |pwent.pw|
|00004f70| 5f 61 67 65 29 3b 0a 58 | 09 65 6c 73 65 0a 58 09 |_age);.X|.else.X.|
|00004f80| 09 28 76 6f 69 64 29 20 | 66 70 72 69 6e 74 66 20 |.(void) |fprintf |
|00004f90| 28 6e 70 77 64 2c 20 22 | 25 73 3a 22 2c 20 70 77 |(npwd, "|%s:", pw|
|00004fa0| 65 6e 74 2e 70 77 5f 70 | 61 73 73 77 64 29 3b 0a |ent.pw_p|asswd);.|
|00004fb0| 58 0a 58 09 28 76 6f 69 | 64 29 20 66 70 72 69 6e |X.X.(voi|d) fprin|
|00004fc0| 74 66 20 28 6e 70 77 64 | 2c 20 22 25 64 3a 25 64 |tf (npwd|, "%d:%d|
|00004fd0| 3a 25 73 3a 25 73 3a 25 | 73 5c 6e 22 2c 0a 58 09 |:%s:%s:%|s\n",.X.|
|00004fe0| 09 70 77 65 6e 74 2e 70 | 77 5f 75 69 64 2c 20 70 |.pwent.p|w_uid, p|
|00004ff0| 77 65 6e 74 2e 70 77 5f | 67 69 64 2c 20 70 77 65 |went.pw_|gid, pwe|
|00005000| 6e 74 2e 70 77 5f 67 65 | 63 6f 73 2c 20 70 77 65 |nt.pw_ge|cos, pwe|
|00005010| 6e 74 2e 70 77 5f 64 69 | 72 2c 0a 58 09 09 70 77 |nt.pw_di|r,.X..pw|
|00005020| 65 6e 74 2e 70 77 5f 73 | 68 65 6c 6c 29 3b 0a 58 |ent.pw_s|hell);.X|
|00005030| 0a 58 09 77 68 69 6c 65 | 20 28 66 67 65 74 73 20 |.X.while| (fgets |
|00005040| 28 62 75 66 2c 20 42 55 | 46 53 49 5a 2c 20 70 77 |(buf, BU|FSIZ, pw|
|00005050| 64 29 20 21 3d 20 28 63 | 68 61 72 20 2a 29 20 30 |d) != (c|har *) 0|
|00005060| 29 0a 58 09 09 66 70 75 | 74 73 20 28 62 75 66 2c |).X..fpu|ts (buf,|
|00005070| 20 6e 70 77 64 29 3b 0a | 58 0a 58 09 69 66 20 28 | npwd);.|X.X.if (|
|00005080| 66 65 72 72 6f 72 20 28 | 6e 70 77 64 29 29 20 7b |ferror (|npwd)) {|
|00005090| 0a 58 09 09 70 65 72 72 | 6f 72 20 28 4e 50 57 44 |.X..perr|or (NPWD|
|000050a0| 46 49 4c 45 29 3b 0a 58 | 09 09 69 66 20 28 75 6e |FILE);.X|..if (un|
|000050b0| 6c 69 6e 6b 20 28 4e 50 | 57 44 46 49 4c 45 29 20 |link (NP|WDFILE) |
|000050c0| 7c 7c 20 75 6e 6c 69 6e | 6b 20 28 50 57 44 4c 4f ||| unlin|k (PWDLO|
|000050d0| 43 4b 29 29 0a 58 09 09 | 09 66 70 75 74 73 20 28 |CK)).X..|.fputs (|
|000050e0| 22 48 65 6c 70 21 5c 6e | 22 2c 20 73 74 64 65 72 |"Help!\n|", stder|
|000050f0| 72 29 3b 0a 58 0a 58 09 | 09 65 78 69 74 20 28 31 |r);.X.X.|.exit (1|
|00005100| 29 3b 0a 58 09 7d 0a 58 | 09 66 66 6c 75 73 68 20 |);.X.}.X|.fflush |
|00005110| 28 6e 70 77 64 29 3b 0a | 58 09 66 63 6c 6f 73 65 |(npwd);.|X.fclose|
|00005120| 20 28 6e 70 77 64 29 3b | 0a 58 23 69 66 64 65 66 | (npwd);|.X#ifdef|
|00005130| 09 4e 44 45 42 55 47 0a | 58 09 63 68 6d 6f 64 20 |.NDEBUG.|X.chmod |
|00005140| 28 4e 50 57 44 46 49 4c | 45 2c 20 30 36 34 34 29 |(NPWDFIL|E, 0644)|
|00005150| 3b 0a 58 09 69 66 20 28 | 75 6e 6c 69 6e 6b 20 28 |;.X.if (|unlink (|
|00005160| 4f 50 57 44 46 49 4c 45 | 29 20 3d 3d 20 2d 31 29 |OPWDFILE|) == -1)|
|00005170| 20 7b 0a 58 09 09 69 66 | 20 28 65 72 72 6e 6f 20 | {.X..if| (errno |
|00005180| 21 3d 20 45 4e 4f 45 4e | 54 29 20 7b 0a 58 09 09 |!= ENOEN|T) {.X..|
|00005190| 09 70 75 74 73 20 28 22 | 43 61 6e 27 74 20 75 6e |.puts ("|Can't un|
|000051a0| 6c 69 6e 6b 20 62 61 63 | 6b 75 70 20 66 69 6c 65 |link bac|kup file|
|000051b0| 22 29 3b 0a 58 09 09 09 | 67 6f 74 6f 20 75 6e 6c |");.X...|goto unl|
|000051c0| 6f 63 6b 3b 0a 58 09 09 | 7d 0a 58 09 7d 0a 58 09 |ock;.X..|}.X.}.X.|
|000051d0| 69 66 20 28 6c 69 6e 6b | 20 28 50 57 44 46 49 4c |if (link| (PWDFIL|
|000051e0| 45 2c 20 4f 50 57 44 46 | 49 4c 45 29 20 7c 7c 20 |E, OPWDF|ILE) || |
|000051f0| 75 6e 6c 69 6e 6b 20 28 | 50 57 44 46 49 4c 45 29 |unlink (|PWDFILE)|
|00005200| 29 20 7b 0a 58 09 09 70 | 75 74 73 20 28 22 43 61 |) {.X..p|uts ("Ca|
|00005210| 6e 27 74 20 73 61 76 65 | 20 62 61 63 6b 75 70 20 |n't save| backup |
|00005220| 66 69 6c 65 22 29 3b 0a | 58 09 09 67 6f 74 6f 20 |file");.|X..goto |
|00005230| 75 6e 6c 6f 63 6b 3b 0a | 58 09 7d 0a 58 23 69 66 |unlock;.|X.}.X#if|
|00005240| 6e 64 65 66 09 42 53 44 | 0a 58 09 69 66 20 28 6c |ndef.BSD|.X.if (l|
|00005250| 69 6e 6b 20 28 4e 50 57 | 44 46 49 4c 45 2c 20 50 |ink (NPW|DFILE, P|
|00005260| 57 44 46 49 4c 45 29 20 | 7c 7c 20 75 6e 6c 69 6e |WDFILE) ||| unlin|
|00005270| 6b 20 28 4e 50 57 44 46 | 49 4c 45 29 29 0a 58 23 |k (NPWDF|ILE)).X#|
|00005280| 65 6c 73 65 0a 58 09 69 | 66 20 28 72 65 6e 61 6d |else.X.i|f (renam|
|00005290| 65 20 28 4e 50 57 44 46 | 49 4c 45 2c 20 50 57 44 |e (NPWDF|ILE, PWD|
|000052a0| 46 49 4c 45 29 29 0a 58 | 23 65 6e 64 69 66 0a 58 |FILE)).X|#endif.X|
|000052b0| 09 7b 0a 58 09 09 70 75 | 74 73 20 28 22 43 61 6e |.{.X..pu|ts ("Can|
|000052c0| 27 74 20 72 65 6e 61 6d | 65 20 6e 65 77 20 66 69 |'t renam|e new fi|
|000052d0| 6c 65 22 29 3b 0a 58 09 | 09 67 6f 74 6f 20 75 6e |le");.X.|.goto un|
|000052e0| 6c 6f 63 6b 3b 0a 58 09 | 7d 0a 58 23 65 6e 64 69 |lock;.X.|}.X#endi|
|000052f0| 66 09 2f 2a 20 4e 44 45 | 42 55 47 20 2a 2f 0a 58 |f./* NDE|BUG */.X|
|00005300| 23 69 66 6e 64 65 66 09 | 4e 44 45 42 55 47 0a 58 |#ifndef.|NDEBUG.X|
|00005310| 09 28 76 6f 69 64 29 20 | 75 6e 6c 69 6e 6b 20 28 |.(void) |unlink (|
|00005320| 22 2e 70 77 64 6c 6f 63 | 6b 22 29 3b 0a 58 23 65 |".pwdloc|k");.X#e|
|00005330| 6c 73 65 0a 58 09 28 76 | 6f 69 64 29 20 75 6e 6c |lse.X.(v|oid) unl|
|00005340| 69 6e 6b 20 28 50 57 44 | 4c 4f 43 4b 29 3b 0a 58 |ink (PWD|LOCK);.X|
|00005350| 23 65 6e 64 69 66 0a 58 | 09 65 78 69 74 20 28 30 |#endif.X|.exit (0|
|00005360| 29 3b 0a 58 09 2f 2a 4e | 4f 54 52 45 41 43 48 45 |);.X./*N|OTREACHE|
|00005370| 44 2a 2f 0a 58 0a 58 75 | 6e 6c 6f 63 6b 3a 0a 58 |D*/.X.Xu|nlock:.X|
|00005380| 09 69 66 20 28 6c 6f 63 | 6b 66 64 20 3e 3d 20 30 |.if (loc|kfd >= 0|
|00005390| 29 0a 58 09 09 28 76 6f | 69 64 29 20 75 6e 6c 69 |).X..(vo|id) unli|
|000053a0| 6e 6b 20 28 50 57 44 4c | 4f 43 4b 29 3b 0a 58 0a |nk (PWDL|OCK);.X.|
|000053b0| 58 09 28 76 6f 69 64 29 | 20 75 6e 6c 69 6e 6b 20 |X.(void)| unlink |
|000053c0| 28 4e 50 57 44 46 49 4c | 45 29 3b 0a 58 09 65 78 |(NPWDFIL|E);.X.ex|
|000053d0| 69 74 20 28 31 29 3b 0a | 58 09 2f 2a 4e 4f 54 52 |it (1);.|X./*NOTR|
|000053e0| 45 41 43 48 45 44 2a 2f | 0a 58 7d 0a 53 48 41 52 |EACHED*/|.X}.SHAR|
|000053f0| 5f 45 4f 46 0a 69 66 20 | 74 65 73 74 20 39 30 33 |_EOF.if |test 903|
|00005400| 31 20 2d 6e 65 20 22 60 | 77 63 20 2d 63 20 3c 20 |1 -ne "`|wc -c < |
|00005410| 27 63 68 73 68 2e 63 27 | 60 22 0a 74 68 65 6e 0a |'chsh.c'|`".then.|
|00005420| 09 65 63 68 6f 20 73 68 | 61 72 3a 20 22 65 72 72 |.echo sh|ar: "err|
|00005430| 6f 72 20 74 72 61 6e 73 | 6d 69 74 74 69 6e 67 20 |or trans|mitting |
|00005440| 27 63 68 73 68 2e 63 27 | 22 20 27 28 73 68 6f 75 |'chsh.c'|" '(shou|
|00005450| 6c 64 20 68 61 76 65 20 | 62 65 65 6e 20 39 30 33 |ld have |been 903|
|00005460| 31 20 63 68 61 72 61 63 | 74 65 72 73 29 27 0a 66 |1 charac|ters)'.f|
|00005470| 69 0a 66 69 0a 65 63 68 | 6f 20 73 68 61 72 3a 20 |i.fi.ech|o shar: |
|00005480| 22 65 78 74 72 61 63 74 | 69 6e 67 20 27 70 77 65 |"extract|ing 'pwe|
|00005490| 6e 74 2e 63 27 22 20 27 | 28 36 37 37 39 20 63 68 |nt.c'" '|(6779 ch|
|000054a0| 61 72 61 63 74 65 72 73 | 29 27 0a 69 66 20 74 65 |aracters|)'.if te|
|000054b0| 73 74 20 2d 66 20 27 70 | 77 65 6e 74 2e 63 27 0a |st -f 'p|went.c'.|
|000054c0| 74 68 65 6e 0a 09 65 63 | 68 6f 20 73 68 61 72 3a |then..ec|ho shar:|
|000054d0| 20 22 77 69 6c 6c 20 6e | 6f 74 20 6f 76 65 72 2d | "will n|ot over-|
|000054e0| 77 72 69 74 65 20 65 78 | 69 73 74 69 6e 67 20 66 |write ex|isting f|
|000054f0| 69 6c 65 20 27 70 77 65 | 6e 74 2e 63 27 22 0a 65 |ile 'pwe|nt.c'".e|
|00005500| 6c 73 65 0a 73 65 64 20 | 27 73 2f 5e 58 2f 2f 27 |lse.sed |'s/^X//'|
|00005510| 20 3c 3c 20 5c 53 48 41 | 52 5f 45 4f 46 20 3e 20 | << \SHA|R_EOF > |
|00005520| 27 70 77 65 6e 74 2e 63 | 27 0a 58 2f 2a 0a 58 20 |'pwent.c|'.X/*.X |
|00005530| 2a 20 43 6f 70 79 72 69 | 67 68 74 20 31 39 38 39 |* Copyri|ght 1989|
|00005540| 2c 20 31 39 39 30 2c 20 | 4a 6f 68 6e 20 46 2e 20 |, 1990, |John F. |
|00005550| 48 61 75 67 68 20 49 49 | 0a 58 20 2a 20 41 6c 6c |Haugh II|.X * All|
|00005560| 20 72 69 67 68 74 73 20 | 72 65 73 65 72 76 65 64 | rights |reserved|
|00005570| 2e 0a 58 20 2a 0a 58 20 | 2a 20 55 73 65 2c 20 64 |..X *.X |* Use, d|
|00005580| 75 70 6c 69 63 61 74 69 | 6f 6e 2c 20 61 6e 64 20 |uplicati|on, and |
|00005590| 64 69 73 63 6c 6f 73 75 | 72 65 20 70 72 6f 68 69 |disclosu|re prohi|
|000055a0| 62 69 74 65 64 20 77 69 | 74 68 6f 75 74 0a 58 20 |bited wi|thout.X |
|000055b0| 2a 20 74 68 65 20 65 78 | 70 72 65 73 73 20 77 72 |* the ex|press wr|
|000055c0| 69 74 74 65 6e 20 70 65 | 72 6d 69 73 73 69 6f 6e |itten pe|rmission|
|000055d0| 20 6f 66 20 74 68 65 20 | 61 75 74 68 6f 72 2e 0a | of the |author..|
|000055e0| 58 20 2a 0a 58 20 2a 20 | 44 75 70 6c 69 63 61 74 |X *.X * |Duplicat|
|000055f0| 69 6f 6e 20 69 73 20 70 | 65 72 6d 69 74 74 65 64 |ion is p|ermitted|
|00005600| 20 66 6f 72 20 6e 6f 6e | 2d 63 6f 6d 6d 65 72 63 | for non|-commerc|
|00005610| 69 61 6c 20 5b 20 70 72 | 6f 66 69 74 20 6d 61 6b |ial [ pr|ofit mak|
|00005620| 69 6e 67 20 5d 0a 58 20 | 2a 20 70 75 72 70 6f 73 |ing ].X |* purpos|
|00005630| 65 73 20 70 72 6f 76 69 | 64 65 64 20 74 68 69 73 |es provi|ded this|
|00005640| 20 61 6e 64 20 6f 74 68 | 65 72 20 63 6f 70 79 72 | and oth|er copyr|
|00005650| 69 67 68 74 20 6e 6f 74 | 69 63 65 73 20 72 65 6d |ight not|ices rem|
|00005660| 61 69 6e 0a 58 20 2a 20 | 69 6e 74 61 63 74 2e 0a |ain.X * |intact..|
|00005670| 58 20 2a 2f 0a 58 0a 58 | 23 69 6e 63 6c 75 64 65 |X */.X.X|#include|
|00005680| 20 3c 73 74 64 69 6f 2e | 68 3e 0a 58 23 69 6e 63 | <stdio.|h>.X#inc|
|00005690| 6c 75 64 65 20 3c 70 77 | 64 2e 68 3e 0a 58 23 69 |lude <pw|d.h>.X#i|
|000056a0| 6e 63 6c 75 64 65 20 3c | 73 74 72 69 6e 67 2e 68 |nclude <|string.h|
|000056b0| 3e 0a 58 23 69 6e 63 6c | 75 64 65 20 22 63 6f 6e |>.X#incl|ude "con|
|000056c0| 66 69 67 2e 68 22 0a 58 | 0a 58 23 69 66 64 65 66 |fig.h".X|.X#ifdef|
|000056d0| 09 44 42 4d 0a 58 23 69 | 6e 63 6c 75 64 65 20 3c |.DBM.X#i|nclude <|
|000056e0| 64 62 6d 2e 68 3e 0a 58 | 23 65 6e 64 69 66 0a 58 |dbm.h>.X|#endif.X|
|000056f0| 0a 58 23 69 66 6e 64 65 | 66 09 6c 69 6e 74 0a 58 |.X#ifnde|f.lint.X|
|00005700| 73 74 61 74 69 63 09 63 | 68 61 72 09 5f 73 63 63 |static.c|har._scc|
|00005710| 73 69 64 5b 5d 20 3d 20 | 22 40 28 23 29 70 77 65 |sid[] = |"@(#)pwe|
|00005720| 6e 74 2e 63 09 32 2e 33 | 09 30 31 3a 30 38 3a 31 |nt.c.2.3|.01:08:1|
|00005730| 36 09 38 2f 33 2f 39 30 | 22 3b 0a 58 23 65 6e 64 |6.8/3/90|";.X#end|
|00005740| 69 66 0a 58 0a 58 23 64 | 65 66 69 6e 65 09 53 42 |if.X.X#d|efine.SB|
|00005750| 55 46 53 49 5a 09 36 34 | 0a 58 23 64 65 66 69 6e |UFSIZ.64|.X#defin|
|00005760| 65 09 4e 46 49 45 4c 44 | 53 09 37 0a 58 0a 58 73 |e.NFIELD|S.7.X.Xs|
|00005770| 74 61 74 69 63 09 46 49 | 4c 45 09 2a 70 77 64 66 |tatic.FI|LE.*pwdf|
|00005780| 70 3b 0a 58 73 74 61 74 | 69 63 09 63 68 61 72 09 |p;.Xstat|ic.char.|
|00005790| 70 77 64 62 75 66 5b 42 | 55 46 53 49 5a 5d 3b 0a |pwdbuf[B|UFSIZ];.|
|000057a0| 58 73 74 61 74 69 63 09 | 63 68 61 72 09 2a 70 77 |Xstatic.|char.*pw|
|000057b0| 64 66 69 6c 65 20 3d 20 | 22 2f 65 74 63 2f 70 61 |dfile = |"/etc/pa|
|000057c0| 73 73 77 64 22 3b 0a 58 | 23 69 66 64 65 66 09 44 |sswd";.X|#ifdef.D|
|000057d0| 42 4d 0a 58 73 74 61 74 | 69 63 09 69 6e 74 09 64 |BM.Xstat|ic.int.d|
|000057e0| 62 6d 6f 70 65 6e 65 64 | 3b 0a 58 73 74 61 74 69 |bmopened|;.Xstati|
|000057f0| 63 09 69 6e 74 09 64 62 | 6d 65 72 72 6f 72 3b 0a |c.int.db|merror;.|
|00005800| 58 23 65 6e 64 69 66 0a | 58 73 74 61 74 69 63 09 |X#endif.|Xstatic.|
|00005810| 63 68 61 72 09 2a 70 77 | 64 66 69 65 6c 64 73 5b |char.*pw|dfields[|
|00005820| 4e 46 49 45 4c 44 53 5d | 3b 0a 58 73 74 61 74 69 |NFIELDS]|;.Xstati|
|00005830| 63 09 73 74 72 75 63 74 | 09 70 61 73 73 77 64 09 |c.struct|.passwd.|
|00005840| 70 77 65 6e 74 3b 0a 58 | 0a 58 2f 2a 0a 58 20 2a |pwent;.X|.X/*.X *|
|00005850| 20 73 67 65 74 70 77 65 | 6e 74 20 2d 20 63 6f 6e | sgetpwe|nt - con|
|00005860| 76 65 72 74 20 61 20 73 | 74 72 69 6e 67 20 74 6f |vert a s|tring to|
|00005870| 20 61 20 28 73 74 72 75 | 63 74 20 70 61 73 73 77 | a (stru|ct passw|
|00005880| 64 29 0a 58 20 2a 0a 58 | 20 2a 20 73 67 65 74 70 |d).X *.X| * sgetp|
|00005890| 77 65 6e 74 28 29 20 70 | 61 72 73 65 73 20 61 20 |went() p|arses a |
|000058a0| 73 74 72 69 6e 67 20 69 | 6e 74 6f 20 74 68 65 20 |string i|nto the |
|000058b0| 70 61 72 74 73 20 72 65 | 71 75 69 72 65 64 20 66 |parts re|quired f|
|000058c0| 6f 72 20 61 20 70 61 73 | 73 77 6f 72 64 0a 58 20 |or a pas|sword.X |
|000058d0| 2a 20 73 74 72 75 63 74 | 75 72 65 2e 20 20 53 74 |* struct|ure. St|
|000058e0| 72 69 63 74 20 63 68 65 | 63 6b 69 6e 67 20 69 73 |rict che|cking is|
|000058f0| 20 6d 61 64 65 20 66 6f | 72 20 74 68 65 20 55 49 | made fo|r the UI|
|00005900| 44 20 61 6e 64 20 47 49 | 44 20 66 69 65 6c 64 73 |D and GI|D fields|
|00005910| 20 61 6e 64 0a 58 20 2a | 20 70 72 65 73 65 6e 63 | and.X *| presenc|
|00005920| 65 20 6f 66 20 74 68 65 | 20 63 6f 72 72 65 63 74 |e of the| correct|
|00005930| 20 6e 75 6d 62 65 72 20 | 6f 66 20 63 6f 6c 6f 6e | number |of colon|
|00005940| 73 2e 20 20 41 6e 79 20 | 66 61 69 6c 69 6e 67 20 |s. Any |failing |
|00005950| 74 65 73 74 73 20 72 65 | 73 75 6c 74 0a 58 20 2a |tests re|sult.X *|
|00005960| 20 69 6e 20 61 20 4e 55 | 4c 4c 20 70 6f 69 6e 74 | in a NU|LL point|
|00005970| 65 72 20 62 65 69 6e 67 | 20 72 65 74 75 72 6e 65 |er being| returne|
|00005980| 64 2e 0a 58 20 2a 2f 0a | 58 0a 58 73 74 72 75 63 |d..X */.|X.Xstruc|
|00005990| 74 09 70 61 73 73 77 64 | 09 2a 73 67 65 74 70 77 |t.passwd|.*sgetpw|
|000059a0| 65 6e 74 20 28 62 75 66 | 29 0a 58 63 68 61 72 09 |ent (buf|).Xchar.|
|000059b0| 2a 62 75 66 3b 0a 58 7b | 0a 58 09 69 6e 74 09 69 |*buf;.X{|.X.int.i|
|000059c0| 3b 0a 58 09 63 68 61 72 | 09 2a 63 70 3b 0a 58 0a |;.X.char|.*cp;.X.|
|000059d0| 58 09 2f 2a 0a 58 09 20 | 2a 20 43 6f 70 79 20 74 |X./*.X. |* Copy t|
|000059e0| 68 65 20 73 74 72 69 6e | 67 20 74 6f 20 61 20 73 |he strin|g to a s|
|000059f0| 74 61 74 69 63 20 62 75 | 66 66 65 72 20 73 6f 20 |tatic bu|ffer so |
|00005a00| 74 68 65 20 70 6f 69 6e | 74 65 72 73 20 69 6e 74 |the poin|ters int|
|00005a10| 6f 0a 58 09 20 2a 20 74 | 68 65 20 70 61 73 73 77 |o.X. * t|he passw|
|00005a20| 6f 72 64 20 73 74 72 75 | 63 74 75 72 65 20 72 65 |ord stru|cture re|
|00005a30| 6d 61 69 6e 20 76 61 6c | 69 64 2e 0a 58 09 20 2a |main val|id..X. *|
|00005a40| 2f 0a 58 0a 58 09 73 74 | 72 6e 63 70 79 20 28 70 |/.X.X.st|rncpy (p|
|00005a50| 77 64 62 75 66 2c 20 62 | 75 66 2c 20 42 55 46 53 |wdbuf, b|uf, BUFS|
|00005a60| 49 5a 29 3b 0a 58 09 70 | 77 64 62 75 66 5b 42 55 |IZ);.X.p|wdbuf[BU|
|00005a70| 46 53 49 5a 2d 31 5d 20 | 3d 20 27 5c 30 27 3b 0a |FSIZ-1] |= '\0';.|
|00005a80| 58 0a 58 09 2f 2a 0a 58 | 09 20 2a 20 53 61 76 65 |X.X./*.X|. * Save|
|00005a90| 20 61 20 70 6f 69 6e 74 | 65 72 20 74 6f 20 74 68 | a point|er to th|
|00005aa0| 65 20 73 74 61 72 74 20 | 6f 66 20 65 61 63 68 20 |e start |of each |
|00005ab0| 63 6f 6c 6f 6e 20 73 65 | 70 61 72 61 74 65 64 0a |colon se|parated.|
|00005ac0| 58 09 20 2a 20 66 69 65 | 6c 64 2e 20 20 54 68 65 |X. * fie|ld. The|
|00005ad0| 20 66 69 65 6c 64 73 20 | 61 72 65 20 63 6f 6e 76 | fields |are conv|
|00005ae0| 65 72 74 65 64 20 69 6e | 74 6f 20 4e 55 4c 20 74 |erted in|to NUL t|
|00005af0| 65 72 6d 69 6e 61 74 65 | 64 20 73 74 72 69 6e 67 |erminate|d string|
|00005b00| 73 2e 0a 58 09 20 2a 2f | 0a 58 0a 58 09 66 6f 72 |s..X. */|.X.X.for|
|00005b10| 20 28 63 70 20 3d 20 70 | 77 64 62 75 66 2c 20 69 | (cp = p|wdbuf, i|
|00005b20| 20 3d 20 30 3b 69 20 3c | 20 4e 46 49 45 4c 44 53 | = 0;i <| NFIELDS|
|00005b30| 20 26 26 20 63 70 3b 69 | 2b 2b 29 20 7b 0a 58 09 | && cp;i|++) {.X.|
|00005b40| 09 70 77 64 66 69 65 6c | 64 73 5b 69 5d 20 3d 20 |.pwdfiel|ds[i] = |
|00005b50| 63 70 3b 0a 58 09 09 69 | 66 20 28 63 70 20 3d 20 |cp;.X..i|f (cp = |
|00005b60| 73 74 72 63 68 72 20 28 | 63 70 2c 20 27 3a 27 29 |strchr (|cp, ':')|
|00005b70| 29 0a 58 09 09 09 2a 63 | 70 2b 2b 20 3d 20 30 3b |).X...*c|p++ = 0;|
|00005b80| 0a 58 09 7d 0a 58 0a 58 | 09 2f 2a 0a 58 09 20 2a |.X.}.X.X|./*.X. *|
|00005b90| 20 54 68 65 72 65 20 6d | 75 73 74 20 62 65 20 65 | There m|ust be e|
|00005ba0| 78 61 63 74 6c 79 20 4e | 46 49 45 4c 44 53 20 63 |xactly N|FIELDS c|
|00005bb0| 6f 6c 6f 6e 20 73 65 70 | 61 72 61 74 65 64 20 66 |olon sep|arated f|
|00005bc0| 69 65 6c 64 73 20 6f 72 | 0a 58 09 20 2a 20 74 68 |ields or|.X. * th|
|00005bd0| 65 20 65 6e 74 72 79 20 | 69 73 20 69 6e 76 61 6c |e entry |is inval|
|00005be0| 69 64 2e 20 20 41 6c 73 | 6f 2c 20 74 68 65 20 55 |id. Als|o, the U|
|00005bf0| 49 44 20 61 6e 64 20 47 | 49 44 20 6d 75 73 74 20 |ID and G|ID must |
|00005c00| 62 65 20 6e 6f 6e 2d 62 | 6c 61 6e 6b 2e 0a 58 09 |be non-b|lank..X.|
|00005c10| 20 2a 2f 0a 58 0a 58 09 | 69 66 20 28 69 20 21 3d | */.X.X.|if (i !=|
|00005c20| 20 4e 46 49 45 4c 44 53 | 20 7c 7c 20 2a 70 77 64 | NFIELDS| || *pwd|
|00005c30| 66 69 65 6c 64 73 5b 32 | 5d 20 3d 3d 20 27 5c 30 |fields[2|] == '\0|
|00005c40| 27 20 7c 7c 20 2a 70 77 | 64 66 69 65 6c 64 73 5b |' || *pw|dfields[|
|00005c50| 33 5d 20 3d 3d 20 27 5c | 30 27 29 0a 58 09 09 72 |3] == '\|0').X..r|
|00005c60| 65 74 75 72 6e 20 30 3b | 0a 58 0a 58 09 2f 2a 0a |eturn 0;|.X.X./*.|
|00005c70| 58 09 20 2a 20 45 61 63 | 68 20 6f 66 20 74 68 65 |X. * Eac|h of the|
|00005c80| 20 66 69 65 6c 64 73 20 | 69 73 20 63 6f 6e 76 65 | fields |is conve|
|00005c90| 72 74 65 64 20 74 68 65 | 20 61 70 70 72 6f 70 72 |rted the| appropr|
|00005ca0| 69 61 74 65 20 64 61 74 | 61 20 74 79 70 65 0a 58 |iate dat|a type.X|
|00005cb0| 09 20 2a 20 61 6e 64 20 | 74 68 65 20 72 65 73 75 |. * and |the resu|
|00005cc0| 6c 74 20 61 73 73 69 67 | 6e 65 64 20 74 6f 20 74 |lt assig|ned to t|
|00005cd0| 68 65 20 70 61 73 73 77 | 6f 72 64 20 73 74 72 75 |he passw|ord stru|
|00005ce0| 63 74 75 72 65 2e 20 20 | 49 66 20 74 68 65 0a 58 |cture. |If the.X|
|00005cf0| 09 20 2a 20 55 49 44 20 | 6f 72 20 47 49 44 20 64 |. * UID |or GID d|
|00005d00| 6f 65 73 20 6e 6f 74 20 | 63 6f 6e 76 65 72 74 20 |oes not |convert |
|00005d10| 74 6f 20 61 6e 20 69 6e | 74 65 67 65 72 20 76 61 |to an in|teger va|
|00005d20| 6c 75 65 2c 20 61 20 4e | 55 4c 4c 0a 58 09 20 2a |lue, a N|ULL.X. *|
|00005d30| 20 70 6f 69 6e 74 65 72 | 20 69 73 20 72 65 74 75 | pointer| is retu|
|00005d40| 72 6e 65 64 2e 0a 58 09 | 20 2a 2f 0a 58 0a 58 09 |rned..X.| */.X.X.|
|00005d50| 70 77 65 6e 74 2e 70 77 | 5f 6e 61 6d 65 20 3d 20 |pwent.pw|_name = |
|00005d60| 70 77 64 66 69 65 6c 64 | 73 5b 30 5d 3b 0a 58 09 |pwdfield|s[0];.X.|
|00005d70| 70 77 65 6e 74 2e 70 77 | 5f 70 61 73 73 77 64 20 |pwent.pw|_passwd |
|00005d80| 3d 20 70 77 64 66 69 65 | 6c 64 73 5b 31 5d 3b 0a |= pwdfie|lds[1];.|
|00005d90| 58 09 69 66 20 28 28 70 | 77 65 6e 74 2e 70 77 5f |X.if ((p|went.pw_|
|00005da0| 75 69 64 20 3d 20 73 74 | 72 74 6f 6c 20 28 70 77 |uid = st|rtol (pw|
|00005db0| 64 66 69 65 6c 64 73 5b | 32 5d 2c 20 26 63 70 2c |dfields[|2], &cp,|
|00005dc0| 20 31 30 29 29 20 3d 3d | 20 30 20 26 26 20 2a 63 | 10)) ==| 0 && *c|
|00005dd0| 70 29 0a 58 09 09 72 65 | 74 75 72 6e 20 30 3b 0a |p).X..re|turn 0;.|
|00005de0| 58 0a 58 09 69 66 20 28 | 28 70 77 65 6e 74 2e 70 |X.X.if (|(pwent.p|
|00005df0| 77 5f 67 69 64 20 3d 20 | 73 74 72 74 6f 6c 20 28 |w_gid = |strtol (|
|00005e00| 70 77 64 66 69 65 6c 64 | 73 5b 33 5d 2c 20 26 63 |pwdfield|s[3], &c|
|00005e10| 70 2c 20 31 30 29 29 20 | 3d 3d 20 30 20 26 26 20 |p, 10)) |== 0 && |
|00005e20| 2a 63 70 29 0a 58 09 09 | 72 65 74 75 72 6e 20 30 |*cp).X..|return 0|
|00005e30| 3b 0a 58 0a 58 09 69 66 | 20 28 63 70 20 3d 20 73 |;.X.X.if| (cp = s|
|00005e40| 74 72 63 68 72 20 28 70 | 77 65 6e 74 2e 70 77 5f |trchr (p|went.pw_|
|00005e50| 70 61 73 73 77 64 2c 20 | 27 2c 27 29 29 20 7b 0a |passwd, |',')) {.|
|00005e60| 58 09 09 70 77 65 6e 74 | 2e 70 77 5f 61 67 65 20 |X..pwent|.pw_age |
|00005e70| 3d 20 63 70 20 2b 20 31 | 3b 0a 58 09 09 2a 63 70 |= cp + 1|;.X..*cp|
|00005e80| 20 3d 20 27 5c 30 27 3b | 0a 58 09 7d 0a 58 09 70 | = '\0';|.X.}.X.p|
|00005e90| 77 65 6e 74 2e 70 77 5f | 67 65 63 6f 73 20 3d 20 |went.pw_|gecos = |
|00005ea0| 70 77 64 66 69 65 6c 64 | 73 5b 34 5d 3b 0a 58 09 |pwdfield|s[4];.X.|
|00005eb0| 70 77 65 6e 74 2e 70 77 | 5f 64 69 72 20 3d 20 70 |pwent.pw|_dir = p|
|00005ec0| 77 64 66 69 65 6c 64 73 | 5b 35 5d 3b 0a 58 09 70 |wdfields|[5];.X.p|
|00005ed0| 77 65 6e 74 2e 70 77 5f | 73 68 65 6c 6c 20 3d 20 |went.pw_|shell = |
|00005ee0| 70 77 64 66 69 65 6c 64 | 73 5b 36 5d 3b 0a 58 0a |pwdfield|s[6];.X.|
|00005ef0| 58 09 72 65 74 75 72 6e | 20 28 26 70 77 65 6e 74 |X.return| (&pwent|
|00005f00| 29 3b 0a 58 7d 0a 58 23 | 69 66 64 65 66 20 46 47 |);.X}.X#|ifdef FG|
|00005f10| 45 54 50 57 45 4e 54 0a | 58 2f 2a 0a 58 20 2a 20 |ETPWENT.|X/*.X * |
|00005f20| 66 67 65 74 70 77 65 6e | 74 20 2d 20 67 65 74 20 |fgetpwen|t - get |
|00005f30| 61 20 70 61 73 73 77 6f | 72 64 20 66 69 6c 65 20 |a passwo|rd file |
|00005f40| 65 6e 74 72 79 20 66 72 | 6f 6d 20 61 20 73 74 72 |entry fr|om a str|
|00005f50| 65 61 6d 0a 58 20 2a 0a | 58 20 2a 20 66 67 65 74 |eam.X *.|X * fget|
|00005f60| 70 77 65 6e 74 28 29 20 | 72 65 61 64 73 20 74 68 |pwent() |reads th|
|00005f70| 65 20 6e 65 78 74 20 6c | 69 6e 65 20 66 72 6f 6d |e next l|ine from|
|00005f80| 20 61 20 70 61 73 73 77 | 6f 72 64 20 66 69 6c 65 | a passw|ord file|
|00005f90| 20 66 6f 72 6d 61 74 74 | 65 64 20 73 74 72 65 61 | formatt|ed strea|
|00005fa0| 6d 0a 58 20 2a 20 61 6e | 64 20 72 65 74 75 72 6e |m.X * an|d return|
|00005fb0| 73 20 61 20 70 6f 69 6e | 74 65 72 20 74 6f 20 74 |s a poin|ter to t|
|00005fc0| 68 65 20 70 61 73 73 77 | 6f 72 64 20 73 74 72 75 |he passw|ord stru|
|00005fd0| 63 74 75 72 65 20 66 6f | 72 20 74 68 61 74 20 6c |cture fo|r that l|
|00005fe0| 69 6e 65 2e 0a 58 20 2a | 2f 0a 58 0a 58 73 74 72 |ine..X *|/.X.Xstr|
|00005ff0| 75 63 74 09 70 61 73 73 | 77 64 09 2a 66 67 65 74 |uct.pass|wd.*fget|
|00006000| 70 77 65 6e 74 20 28 66 | 70 29 0a 58 46 49 4c 45 |pwent (f|p).XFILE|
|00006010| 09 2a 66 70 3b 0a 58 7b | 0a 58 09 63 68 61 72 09 |.*fp;.X{|.X.char.|
|00006020| 62 75 66 5b 42 55 46 53 | 49 5a 5d 3b 0a 58 0a 58 |buf[BUFS|IZ];.X.X|
|00006030| 09 77 68 69 6c 65 20 28 | 66 67 65 74 73 20 28 62 |.while (|fgets (b|
|00006040| 75 66 2c 20 42 55 46 53 | 49 5a 2c 20 66 70 29 20 |uf, BUFS|IZ, fp) |
|00006050| 21 3d 20 28 63 68 61 72 | 20 2a 29 20 30 29 20 7b |!= (char| *) 0) {|
|00006060| 0a 58 09 09 62 75 66 5b | 73 74 72 6c 65 6e 20 28 |.X..buf[|strlen (|
|00006070| 62 75 66 29 20 2d 20 31 | 5d 20 3d 20 27 5c 30 27 |buf) - 1|] = '\0'|
|00006080| 3b 0a 58 09 09 72 65 74 | 75 72 6e 20 28 73 67 65 |;.X..ret|urn (sge|
|00006090| 74 70 77 65 6e 74 20 28 | 62 75 66 29 29 3b 0a 58 |tpwent (|buf));.X|
|000060a0| 09 7d 0a 58 09 72 65 74 | 75 72 6e 20 30 3b 0a 58 |.}.X.ret|urn 0;.X|
|000060b0| 7d 0a 58 23 65 6e 64 69 | 66 0a 58 23 69 66 64 65 |}.X#endi|f.X#ifde|
|000060c0| 66 09 47 45 54 50 57 45 | 4e 54 0a 58 0a 58 2f 2a |f.GETPWE|NT.X.X/*|
|000060d0| 0a 58 20 2a 20 65 6e 64 | 70 77 65 6e 74 20 2d 20 |.X * end|pwent - |
|000060e0| 63 6c 6f 73 65 20 61 20 | 70 61 73 73 77 6f 72 64 |close a |password|
|000060f0| 20 66 69 6c 65 0a 58 20 | 2a 0a 58 20 2a 20 65 6e | file.X |*.X * en|
|00006100| 64 70 77 65 6e 74 28 29 | 20 63 6c 6f 73 65 73 20 |dpwent()| closes |
|00006110| 74 68 65 20 70 61 73 73 | 77 6f 72 64 20 66 69 6c |the pass|word fil|
|00006120| 65 20 69 66 20 6f 70 65 | 6e 2e 0a 58 20 2a 2f 0a |e if ope|n..X */.|
|00006130| 58 0a 58 69 6e 74 09 65 | 6e 64 70 77 65 6e 74 20 |X.Xint.e|ndpwent |
|00006140| 28 29 0a 58 7b 0a 58 09 | 69 66 20 28 70 77 64 66 |().X{.X.|if (pwdf|
|00006150| 70 29 0a 58 09 09 69 66 | 20 28 66 63 6c 6f 73 65 |p).X..if| (fclose|
|00006160| 20 28 70 77 64 66 70 29 | 29 0a 58 09 09 09 72 65 | (pwdfp)|).X...re|
|00006170| 74 75 72 6e 20 2d 31 3b | 0a 58 0a 58 09 72 65 74 |turn -1;|.X.X.ret|
|00006180| 75 72 6e 20 30 3b 0a 58 | 7d 0a 58 0a 58 2f 2a 0a |urn 0;.X|}.X.X/*.|
|00006190| 58 20 2a 20 67 65 74 70 | 77 65 6e 74 20 2d 20 67 |X * getp|went - g|
|000061a0| 65 74 20 61 20 70 61 73 | 73 77 6f 72 64 20 65 6e |et a pas|sword en|
|000061b0| 74 72 79 20 66 72 6f 6d | 20 74 68 65 20 70 61 73 |try from| the pas|
|000061c0| 73 77 6f 72 64 20 66 69 | 6c 65 0a 58 20 2a 0a 58 |sword fi|le.X *.X|
|000061d0| 20 2a 20 67 65 74 70 77 | 65 6e 74 28 29 20 6f 70 | * getpw|ent() op|
|000061e0| 65 6e 73 20 74 68 65 20 | 70 61 73 73 77 6f 72 64 |ens the |password|
|000061f0| 20 66 69 6c 65 2c 20 69 | 66 20 6e 6f 74 20 61 6c | file, i|f not al|
|00006200| 72 65 61 64 79 20 6f 70 | 65 6e 65 64 2c 20 61 6e |ready op|ened, an|
|00006210| 64 20 72 65 61 64 73 0a | 58 20 2a 20 61 20 73 69 |d reads.|X * a si|
|00006220| 6e 67 6c 65 20 65 6e 74 | 72 79 2e 20 20 4e 55 4c |ngle ent|ry. NUL|
|00006230| 4c 20 69 73 20 72 65 74 | 75 72 6e 65 64 20 69 66 |L is ret|urned if|
|00006240| 20 61 6e 79 20 65 72 72 | 6f 72 73 20 61 72 65 20 | any err|ors are |
|00006250| 65 6e 63 6f 75 6e 74 65 | 72 65 64 20 72 65 61 64 |encounte|red read|
|00006260| 69 6e 67 0a 58 20 2a 20 | 74 68 65 20 70 61 73 73 |ing.X * |the pass|
|00006270| 77 6f 72 64 20 66 69 6c | 65 2e 0a 58 20 2a 2f 0a |word fil|e..X */.|
|00006280| 58 0a 58 73 74 72 75 63 | 74 09 70 61 73 73 77 64 |X.Xstruc|t.passwd|
|00006290| 09 2a 67 65 74 70 77 65 | 6e 74 20 28 29 0a 58 7b |.*getpwe|nt ().X{|
|000062a0| 0a 58 09 69 66 20 28 21 | 20 70 77 64 66 70 20 26 |.X.if (!| pwdfp &|
|000062b0| 26 20 73 65 74 70 77 65 | 6e 74 20 28 29 29 0a 58 |& setpwe|nt ()).X|
|000062c0| 09 09 72 65 74 75 72 6e | 20 30 3b 0a 58 0a 58 09 |..return| 0;.X.X.|
|000062d0| 72 65 74 75 72 6e 20 66 | 67 65 74 70 77 65 6e 74 |return f|getpwent|
|000062e0| 20 28 70 77 64 66 70 29 | 3b 0a 58 7d 0a 58 0a 58 | (pwdfp)|;.X}.X.X|
|000062f0| 2f 2a 0a 58 20 2a 20 67 | 65 74 70 77 75 69 64 20 |/*.X * g|etpwuid |
|00006300| 2d 20 6c 6f 63 61 74 65 | 20 74 68 65 20 70 61 73 |- locate| the pas|
|00006310| 73 77 6f 72 64 20 65 6e | 74 72 79 20 66 6f 72 20 |sword en|try for |
|00006320| 61 20 67 69 76 65 6e 20 | 55 49 44 0a 58 20 2a 0a |a given |UID.X *.|
|00006330| 58 20 2a 20 67 65 74 70 | 77 75 69 64 28 29 20 6c |X * getp|wuid() l|
|00006340| 6f 63 61 74 65 73 20 74 | 68 65 20 66 69 72 73 74 |ocates t|he first|
|00006350| 20 70 61 73 73 77 6f 72 | 64 20 66 69 6c 65 20 65 | passwor|d file e|
|00006360| 6e 74 72 79 20 66 6f 72 | 20 74 68 65 20 67 69 76 |ntry for| the giv|
|00006370| 65 6e 20 55 49 44 2e 0a | 58 20 2a 20 49 66 20 74 |en UID..|X * If t|
|00006380| 68 65 72 65 20 69 73 20 | 61 20 76 61 6c 69 64 20 |here is |a valid |
|00006390| 44 42 4d 20 66 69 6c 65 | 2c 20 74 68 65 20 44 42 |DBM file|, the DB|
|000063a0| 4d 20 66 69 6c 65 73 20 | 61 72 65 20 71 75 65 72 |M files |are quer|
|000063b0| 69 65 64 20 66 69 72 73 | 74 20 66 6f 72 0a 58 20 |ied firs|t for.X |
|000063c0| 2a 20 74 68 65 20 65 6e | 74 72 79 2e 20 20 4f 74 |* the en|try. Ot|
|000063d0| 68 65 72 77 69 73 65 2c | 20 61 20 6c 69 6e 65 61 |herwise,| a linea|
|000063e0| 72 20 73 65 61 72 63 68 | 20 69 73 20 62 65 67 75 |r search| is begu|
|000063f0| 6e 20 6f 66 20 74 68 65 | 20 70 61 73 73 77 6f 72 |n of the| passwor|
+--------+-------------------------+-------------------------+--------+--------+
Only 25.0 KB of data is shown above.