%!PS-Adobe-1.0 %%Creator: devps (Pipeline Associates, Inc.) %%CreationDate: Fri Sep 13 14:23:58 1996 %%Pages: (atend) %%DocumentFonts: (atend) /devps 180 dict def devps begin /res 10.000000 def /y_offset 843 def /X{exch}bind def /mm {transform round X round X itransform} bind def /r{rmoveto}bind def /m{moveto}bind def /l{lineto}bind def /rl{rlineto}bind def /st{stroke}bind def /gs{gsave}bind def /gr{grestore}bind def /cp{currentpoint}bind def /np{newpath}bind def /ct{curveto}bind def systemdict /setpacking known { /savepacking currentpacking def true setpacking } if /m0{0 0 moveto}bind def /xc{//res div}bind def /yc{//res neg div //y_offset add}bind def /lc{yc X xc X l st}bind def /mc{yc X xc X m}bind def /el{gs /a X def a div 1 X scale cp np a xc 2 div 0 360 arc st gr}bind def /ar{cp 7 2 roll np xc 5 1 roll atan 3 1 roll atan X arc st}bind def /sp{yc X xc X 6 2 roll yc X xc X 6 2 roll yc X xc X 6 2 roll ct}bind def /V{//res neg div //y_offset add currentpoint pop X m}bind def /H{//res div 0 transform X round X itransform pop currentpoint X pop moveto}bind def /h{//res div 0 r}bind def /v{//res neg div 0 X r}bind def /S{X H show}bind def /A{H //res div 1 index stringwidth pop sub 1 index length div 0 3 2 roll ashow}bind def /psize 10 def /height 0 def /cheight { height 0 ne { height } { psize } ifelse } bind def /slant 0 def /FF{findfont X dup 30 div 0 mm pop setlinewidth /psize X def [psize 0 cheight slant sin slant cos div mul cheight 0 0] makefont setfont}bind def /shade{gs /dy X def /dx X def np m 0 /dy rl /dx 0 rl 0 /dy neg rl /dx neg 0 rl closepath .9 setgray fill gr}bind def 1 setlinecap /resolution res 72 mul def /startFig { /SavedState save def userdict maxlength dict begin currentpoint transform DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix itransform moveto /ury exch def /urx exch def /lly exch def /llx exch def /y exch 72 mul resolution div def /x exch 72 mul resolution div def currentpoint /cy exch def /cx exch def /sx x urx llx sub div def /sy y ury lly sub div def sx sy scale cx sx div llx sub cy sy div ury sub translate /DefFigCTM matrix currentmatrix def /initmatrix { DefFigCTM setmatrix } def /defaultmatrix { DefFigCTM exch copy } def /initgraphics { DocumentInitState setmiterlimit setgray setdash setlinejoin setlinecap setlinewidth setmatrix DefFigCTM setmatrix } def /showpage { initgraphics } def }bind def /clipFig { currentpoint 6 2 roll newpath 4 copy 4 2 roll moveto 6 -1 roll exch lineto exch lineto exch lineto closepath clip newpath moveto }bind def /doclip { llx lly urx ury clipFig } def /endFig { end SavedState restore }bind def /globalstart { fontnum psize slant height resolution currentpoint pagesave restore gsave }bind def /globalend { grestore moveto /resolution exch def /height exch def /slant exch def /psize exch def /fontnum exch def F /pagesave save def }bind def /fontnum 1 def systemdict /setpacking known { savepacking setpacking} if end /BP{ save mark devps begin m0 /DocumentInitState [ matrix currentmatrix currentlinewidth currentlinecap currentlinejoin currentdash currentgray currentmiterlimit ] cvx def }bind def /EP{ end cleartomark restore showpage}def /Encoding-1 256 array def 0 1 255 {Encoding-1 exch /.notdef put} for Encoding-1 8#301 StandardEncoding 8#101 26 getinterval putinterval %A-B Encoding-1 8#341 StandardEncoding 8#141 26 getinterval putinterval %a-b Encoding-1 8#241 StandardEncoding 8#301 16 getinterval putinterval %accents Encoding-1 8#373 StandardEncoding 8#365 1 getinterval putinterval %dotlessi Encoding-1 dup 8#41 /copyright put dup 8#42 /registered put dup 8#43 /trademark put dup 8#44 /logicalnot put dup 8#45 /Eth put dup 8#46 /eth put dup 8#47 /Thorn put dup 8#50 /thorn put dup 8#51 /brokenbar put dup 8#52 /degree put dup 8#53 /divide put dup 8#54 /multiply put dup 8#55 /minus put dup 8#56 /onehalf put dup 8#57 /onequarter put dup 8#60 /threequarters put dup 8#101 /Aacute put dup 8#102 /Acircumflex put dup 8#103 /Adieresis put dup 8#104 /Agrave put dup 8#105 /Aring put dup 8#106 /Atilde put dup 8#107 /Ccedilla put dup 8#110 /Eacute put dup 8#111 /Ecircumflex put dup 8#112 /Edieresis put dup 8#113 /Egrave put dup 8#114 /Iacute put dup 8#115 /Icircumflex put dup 8#116 /Idieresis put dup 8#117 /Igrave put dup 8#120 /Ntilde put dup 8#121 /Oacute put dup 8#122 /Ocircumflex put dup 8#123 /Odieresis put dup 8#124 /Ograve put dup 8#125 /Otilde put dup 8#126 /Scaron put dup 8#127 /Uacute put dup 8#130 /Ucircumflex put dup 8#131 /Udieresis put dup 8#132 /Ugrave put dup 8#133 /Ydieresis put dup 8#134 /Zcaron put dup 8#135 /aacute put dup 8#136 /acircumflex put dup 8#137 /adieresis put dup 8#140 /agrave put dup 8#141 /aring put dup 8#142 /atilde put dup 8#143 /ccedilla put dup 8#144 /eacute put dup 8#145 /ecircumflex put dup 8#146 /edieresis put dup 8#147 /egrave put dup 8#150 /iacute put dup 8#151 /icircumflex put dup 8#152 /idieresis put dup 8#153 /igrave put dup 8#154 /ntilde put dup 8#155 /oacute put dup 8#156 /ocircumflex put dup 8#157 /odieresis put dup 8#160 /ograve put dup 8#161 /otilde put dup 8#162 /scaron put dup 8#163 /uacute put dup 8#164 /ucircumflex put dup 8#165 /udieresis put dup 8#166 /ugrave put dup 8#167 /ydieresis put dup 8#170 /zcaron put pop /Enc-dict 30 dict def Enc-dict /tmpstr1 50 string put Enc-dict /tmpstr2 50 string put Enc-dict /tmpstr3 50 string dup (Encoding-) exch cvs pop put /AEnc-def { % arguments: the original font's name, encoding nr Enc-dict begin tmpstr2 cvs /Enc-no exch def % Remember the number in a string dup /OrigName exch def % remember the name findfont dup maxlength dict /newdict exch def % get dictionary for new font { exch dup /FID ne { exch newdict 3 1 roll put } { pop pop } % Ignore FID ifelse } forall newdict begin /Encoding tmpstr3 9 Enc-no putinterval tmpstr3 0 9 Enc-no length add getinterval cvn load def % Replace encoding currentdict /UniqueID known { /UniqueID UniqueID Enc-no cvi 49999 mul add def } if % Derive New UniqueID end % newdict /FNlength OrigName tmpstr1 cvs length def % convert name, remember length FNlength 1 add Enc-no length add string dup 0 OrigName tmpstr1 cvs putinterval dup FNlength (-) putinterval dup FNlength 1 add Enc-no putinterval dup 0 tmpstr1 0 FNlength getinterval putinterval % Add old name cvn dup newdict /FontName 3 2 roll put newdict definefont end % Enc-dict } def /Times-Roman 1 AEnc-def pop /R-1{/Times-Roman-1 FF}def /R{/Times-Roman FF}def /B{/Times-Bold FF}def /I{/Times-Italic FF}def %%EndProlog %%Page: 1 1 BP /slant 0 def /height 0 def 480 V 10 R (PWDAUTH)505 720 A 1233(\()S 1283(\))S 2696(Eighth)S (Edition)296 2989 A (PWDAUTH)505 4664 A 5177(\()S 5227(\))S 960 V 9 R 720(N)S 722(NA)S 790(AM)S 858(ME)S 940(E)S 1080 V 10 R 1080(pwdauth)S 10 R-1 1451(-)S 10 R 1533(password)S 1938(authentication)S 2533(program)S 1248 V 9 R 720(S)S 722(SY)S 774(YN)S 842(NO)S 910(OP)S 978(PS)S 1030(SI)S 1082(IS)S 1115(S)S 1368 V 10 B (/usr/lib/pwdauth)717 1080 A 1536 V 9 R 720(D)S 722(DE)S 790(ES)S 848(SC)S 900(CR)S 962(RI)S 1024(IP)S 1057(PT)S 1109(TI)S 1167(IO)S 1200(ON)S 1268(N)S 1656 V 10 B 1080(Pwdauth)S 10 R 1493(is)S 1586(a)S 1657(program)S 2024(that)S 2201(is)S 2294(used)S 2504(by)S 2630(the)S 10 B 2779(crypt)S 10 R 3009(\(3\))S 3153(function)S 3514(to)S 3618(do)S 3744(the)S 3893(hard)S 4098(work.)S 4382(It)S 4471(is)S 4565(a)S 4637(setuid)S 4904(root)S (util-)168 5093 A 1776 V 1080(ity)S 1211(so)S 1325(that)S 1501(it)S 1582(is)S 1674(able)S 1867(to)S 1970(read)S 2169(the)S 2317(shadow)S 2649(password)S 3054(\256le.)S 1944 V 10 B 1080(Pwdauth)S 10 R 1492(expects)S 1819(on)S 1944(standard)S (input)206 2310 A 2541(two)S 2717(null)S 2898(terminated)S 3354(strings,)S 3672(the)S 3820(password)S 4225(typed)S 4473(by)S 4599(the)S 4748(user,)S 4967(and)S 5138(the)S 2064 V 1080(salt.)S 1307(That)S 1529(is,)S 1658(the)S 1818(two)S 2006(arguments)S 2461(of)S 2581(the)S 10 B 2740(crypt)S 10 R 3006(function.)S 3427(The)S (input)206 3620 A 3862(read)S 4072(in)S 4186(a)S 4267(single)S 4543(read)S 4753(call)S 4935(must)S 5166(be)S 2184 V (1024)200 1080 A 1305(characters)S 1740(or)S 1849(less)S 2025(including)S 2429(the)S 2577(nulls.)S 10 B 2847(Pwdauth)S 10 R 3259(takes)S 3491(one)S 3661(of)S 3770(two)S 3946(actions)S 4256(depending)S 4699(on)S 4824(the)S 4972(salt.)S 2352 V 1080(If)S 1179(the)S 1333(salt)S 1504(has)S 1669(the)S 1823(form)S 2050(")S 10 B 2091(##)S 10 I 2191(user)S 10 R 2364(")S 2436(then)S 2640(the)S 10 I 2794(user)S 10 R 2998(is)S 3097(used)S 3313(to)S 3423(index)S 3678(the)S 3833(shadow)S 4172(password)S 4584(\256le)S 4745(to)S 4855(obtain)S 5138(the)S 2472 V 1080(encrypted)S 1506(password.)S 1965(The)S (input)206 2151 A 2386(password)S 2795(is)S 2891(encrypted)S 3316(with)S 3523(the)S 3674(one-way)S 4049(encryption)S 4507(function)S 4870(contained)S 2592 V 1080(within)S 10 B 1362(pwdauth)S 10 R 1768(and)S 1938(compared)S 2360(to)S 2463(the)S 2611(encrypted)S 3033(password)S 3438(from)S 3659(the)S 3807(shadow)S 4139(password)S 4545(\256le.)S 4750(If)S 4844(equal)S 5088(then)S 2712 V 10 B 1080(pwdauth)S 10 R 1502(returns)S 1823(the)S 1987(string)S 2257(")S 10 B 2298(##)S 10 I 2398(user)S 10 R 2571(")S 2653(with)S 2873(exit)S 3064(code)S 3294(0,)S 3409(otherwise)S 3841(exit)S 4032(code)S 4262(2)S 4352(to)S 4470(signal)S 4750(failure.)S 5104(The)S 2832 V 1080(string)S 1338(")S 10 B 1379(##)S 10 I 1479(user)S 10 R 1652(")S 1722(is)S 1818(also)S 2009(returned)S 2374(if)S 2465(both)S 2672(the)S 2824(shadow)S 3161(password)S 3571(and)S 3746(the)S (input)206 3899 A 4135(password)S 4545(are)S 4699(null)S 4885(strings)S 5183(to)S 2952 V 1080(allow)S 1329(a)S 1399(password-less)S 1989(login.)S 3120 V 1080(If)S 1176(the)S 1327(salt)S 1495(is)S 1590(not)S 1746(of)S 1858(the)S 2009(form)S 2233(")S 10 B 2274(##)S 10 I 2374(user)S 10 R 2547(")S 2616(then)S 2817(the)S 2968(password)S 3376(is)S 3471(encrypted)S 3896(and)S 4069(the)S 4220(result)S 4472(of)S 4584(the)S 4735(encryption)S 5194(is)S 3240 V 1080(returned.)S 1491(If)S 1584(salt)S 1749(and)S 1919(password)S 2324(are)S 2473(null)S 2654(strings)S 2947(then)S 3145(a)S 3215(null)S 3396(string)S 3650(is)S 3742(returned.)S 3408 V 1080(The)S 1276(return)S 1556(value)S 1813(is)S (written)286 1919 A 2244(to)S 2361(standard)S 2741(output)S 3036(as)S 3159(a)S 3243(null)S 3438(terminated)S 3908(string)S 4176(of)S (1024)200 4299 A 4538(characters)S 4987(or)S 5110(less)S 3528 V 1080(including)S 1484(the)S 1632(null.)S 3696 V 1080(The)S 1262(exit)S 1438(code)S 1653(is)S 1745(1)S 1820(on)S 1945(any)S 2115(error.)S 3864 V 9 R 720(S)S 722(SE)S 774(EE)S 832(E)S 913(A)S 915(AL)S 983(LS)S 1041(SO)S 1093(O)S 3984 V 10 B 1080(crypt)S 10 R 1310(\(3\),)S 10 B 1478(passwd)S 10 R 1791(\(5\).)S 4152 V 9 R 720(N)S 722(NO)S 790(OT)S 858(TE)S 916(ES)S 974(S)S 4272 V 10 R 1080(A)S 1178(password)S 1583(must)S 1803(be)S 1923(checked)S 2278(like)S 2454(in)S 2557(this)S 2727(example:)S 4440 V (pw_ok)273 1440 A 1738(=)S 1820(\(strcmp\(crypt\(key,)S 2598(pw->pw_passwd\),)S 3365(pw->pw_passwd\))S 4107(==)S 4246(0\);)S 4608 V 1080(The)S (second)279 1262 A 1566(argument)S 1971(of)S 2080(crypt)S 2312(must)S 2532(be)S 2652(the)S 2800(entire)S 3055(encrypted)S 3477(password)S 3882(and)S 4052(not)S 4205(just)S 4375(the)S 4523(two)S 4699(character)S 5095(salt.)S 4776 V 9 R 720(A)S 722(AU)S 790(UT)S 858(TH)S 916(HO)S 984(OR)S 1052(R)S 4896 V 10 R 1080(Kees)S 1307(J.)S 1396(Bot)S 1566(\(kjb@cs.vu.nl\))S 7903 V 720(Page)S 941(1)S 4455(September)S 4911(13,)S (1996)200 5061 A 8143 V EP %%Trailer %%DocumentFonts: Times-Roman Times-Bold Times-Italic %%Pages: 1