%\documentclass[pdftex]{article} \usepackage{hyperref} . 
%\documentclass[pdftex,onecolumn,11pt,oneside]{article}
\documentclass[onecolumn,11pt,oneside]{article}%seminar}
%\usepackage[pdftex]{hyperref}
\usepackage{isolatin1}
%\ifx\pdfoutput\undefined

\usepackage[dvips]{graphicx}
%\else
%\usepackage[pdftex]{graphicx}
%\usepackage[pdftex]{hyperref}
%\usepackage{type1cm} 
%\fi
%\pdfoutput=1 
\usepackage{color,graphicx,shortvrb,epsfig,verbatim,tabularx}
\usepackage{url}
\usepackage{hyperref}
\urlstyle{sf}
\usepackage{fancyheadings}
\usepackage{program}
\usepackage{ulem}
\usepackage{amsfonts}
\usepackage{xspace}
\usepackage[english,francais]{babel}
\pagestyle{fancy}
\newcommand{\trtitle}{Drakfont\\ fonts importation for mandrake linux}
\DeclareGraphicsRule{.ps}{eps}{.ps}{}
\DeclareGraphicsExtensions{.ps}
\renewcommand\star{{\ttfamily*}}
\let\package\textsf
\newlength{\gxlen}
\settowidth{\gxlen}{\package{graphicx}: }
\newcommand\gs{\makebox[\gxlen][l]{\package{graphics}:}}
\newcommand\gx{\makebox[\gxlen][l]{\package{graphicx}:}}
\MakeShortVerb{\|}
\begin{document}
\title{$Drakfont$ fonts importation for mandrake linux}

\begin{figure}%[ht]
\begin{center}
%\caption{Exemple d'image}
\mbox{\epsfig{file=mandrake.ps}}\\ %,height=1in,width=2in}}\\
%\mbox{\epsfig{file=carte_.ps,height=1in,width=2in}}
\end{center}
\end{figure}
%\begin{figure}
%\begin{center}

%\end{center}
%\end{figure}
\author{Dupont Sebastien \\ sdupont@mandrakesoft.com}
\date{05/10/2001}
\pagestyle{myheadings}
\markright{\scriptsize \trtitle}
\title{\bf \trtitle}
\maketitle
\section{drakfont Future Overview}

\paragraph{Fonts import :\\}     
\begin{itemize} 
\item pfb ( Adobe Type 1 binary )
\item pfa ( Adobe Type 1 ASCII )
\item ttf ( True-Type  )    
\item pcf.gz		      
\item Speedo		      
\item pfa ( Adobe Type 1 ASCII )
\item ttf ( True-Type  )    
\item and Bitmap (PCF, BDF, and SNF)
\end{itemize}


\paragraph{Features}                
\begin{itemize} 
\item Install fonts from any directory
\item Get windows fonts on any vfat partitions
\item UN-installation of any fonts (even if not installed through drakfont)                
\end{itemize}


\paragraph{Support}                
\begin{itemize} 
\item Xfs		      
\item ghostscript \& printer 
\item Staroffice \& printer  
\item abiword		      
\item Koffice, Gnumeric, ... studying
\item all fonts supported by printer
\item ( aliases by RENDER in Xfree86 .... -> later )
\end{itemize}


\section{Window interface:}
\begin{itemize} 
\item
\item Fontselectiondialog widget
\item Command buttons under Fontselectiondialog (like the actual frontend).
\item Commands buttons:	      
\item import from windows partition.
\item import from all fat32 partitions and look for winnt/windows/font
\item and import all (delete doublon) but don't import if already exist.
\item import from directory     
\item look for if it exist before for each font and not delete the original.
\item (replace all, no, none)
\item expert options:	      
\item ask the directory, and look for if it exist before
\item if it exist ask: (replace all, no, none)
\item uninstall with list per font type
\item Expert additional switch
\item option support:   ghostscript, Staroffice, etc...
\item check-button. (by default all check)
\item Printer Application Fonts Support...
\item check-button. (by default all check)
\end{itemize}

\section{Command line}
\paragraph{Font Importation and monitoring application\\}
\-\-windows\_import : import from all available windows partitions. \\
\-\-strong         : strong verification of font.\\
\-\-install        : accept any font file and any directory.\\
\-\-uninstall      : uninstall any font or any directory of font.\\
\-\-replace        : replace all font if already exist\\
\-\-application    : 0 none application.\\
                 : 1 all application available supported.\\
                 : name\_of\_application" like  staroffice for only this one.\\
				      
\section{Graphics}

to visualize the conceptual graphics please see:\\
drakfont.jpg\\
drakfont\_install\.jpg\\
\& drakfont\_uninstall.jpg\\



%\begin{figure}%[ht]
%\begin{center}
%\caption{Exemple d'image}
%\mbox{\epsfig{file=drakfont_install.ps}}\\ %,height=1in,width=2in}}\\
%\mbox{\epsfig{file=carte_.ps,height=1in,width=2in}}
%\end{center}
%\end{figure}


%\begin{figure}%[ht]
%\begin{center}
%\caption{Exemple d'image}
%\mbox{\epsfig{file=drakfont_uninstall.eps}}\\ %,height=1in,width=2in}}\\
%\mbox{\epsfig{file=carte_.ps,height=1in,width=2in}}
%\end{center}
%\end{figure}

\end{document}
'><form class='right' method='get' action='/software/drakx-backup-do-not-use/log/mdk-stage1/ppp/pppd/chap.c'>
<input type='hidden' name='h' value='V9_1_24mdk'/><input type='hidden' name='id' value='9a988dcb14af8d6af00781d73904ad82a0c9b422'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/software/drakx-backup-do-not-use/tree/?h=V9_1_24mdk&amp;id=9a988dcb14af8d6af00781d73904ad82a0c9b422'>root</a>/<a href='/software/drakx-backup-do-not-use/tree/mdk-stage1?h=V9_1_24mdk&amp;id=9a988dcb14af8d6af00781d73904ad82a0c9b422'>mdk-stage1</a>/<a href='/software/drakx-backup-do-not-use/tree/mdk-stage1/ppp?h=V9_1_24mdk&amp;id=9a988dcb14af8d6af00781d73904ad82a0c9b422'>ppp</a>/<a href='/software/drakx-backup-do-not-use/tree/mdk-stage1/ppp/pppd?h=V9_1_24mdk&amp;id=9a988dcb14af8d6af00781d73904ad82a0c9b422'>pppd</a>/<a href='/software/drakx-backup-do-not-use/tree/mdk-stage1/ppp/pppd/chap.c?h=V9_1_24mdk&amp;id=9a988dcb14af8d6af00781d73904ad82a0c9b422'>chap.c</a></div><div class='content'>blob: 54c0e009576b5dd692d31db4daa839bb61245c5c (<a href='/software/drakx-backup-do-not-use/plain/mdk-stage1/ppp/pppd/chap.c?h=V9_1_24mdk&amp;id=9a988dcb14af8d6af00781d73904ad82a0c9b422'>plain</a>)
<table summary='blob content' class='blob'>
<tr><td class='linenumbers'><pre><a id='n1' href='#n1'>1</a>
<a id='n2' href='#n2'>2</a>
<a id='n3' href='#n3'>3</a>
<a id='n4' href='#n4'>4</a>
<a id='n5' href='#n5'>5</a>
<a id='n6' href='#n6'>6</a>
<a id='n7' href='#n7'>7</a>
<a id='n8' href='#n8'>8</a>
<a id='n9' href='#n9'>9</a>
<a id='n10' href='#n10'>10</a>
<a id='n11' href='#n11'>11</a>
<a id='n12' href='#n12'>12</a>
<a id='n13' href='#n13'>13</a>
<a id='n14' href='#n14'>14</a>
<a id='n15' href='#n15'>15</a>
<a id='n16' href='#n16'>16</a>
<a id='n17' href='#n17'>17</a>
<a id='n18' href='#n18'>18</a>
<a id='n19' href='#n19'>19</a>
<a id='n20' href='#n20'>20</a>
<a id='n21' href='#n21'>21</a>
<a id='n22' href='#n22'>22</a>
<a id='n23' href='#n23'>23</a>
<a id='n24' href='#n24'>24</a>
<a id='n25' href='#n25'>25</a>
<a id='n26' href='#n26'>26</a>
<a id='n27' href='#n27'>27</a>
<a id='n28' href='#n28'>28</a>
<a id='n29' href='#n29'>29</a>
<a id='n30' href='#n30'>30</a>
<a id='n31' href='#n31'>31</a>
<a id='n32' href='#n32'>32</a>
<a id='n33' href='#n33'>33</a>
<a id='n34' href='#n34'>34</a>
<a id='n35' href='#n35'>35</a>
<a id='n36' href='#n36'>36</a>
<a id='n37' href='#n37'>37</a>
<a id='n38' href='#n38'>38</a>
<a id='n39' href='#n39'>39</a>
<a id='n40' href='#n40'>40</a>
<a id='n41' href='#n41'>41</a>
<a id='n42' href='#n42'>42</a>
<a id='n43' href='#n43'>43</a>
<a id='n44' href='#n44'>44</a>
<a id='n45' href='#n45'>45</a>
<a id='n46' href='#n46'>46</a>
<a id='n47' href='#n47'>47</a>
<a id='n48' href='#n48'>48</a>
<a id='n49' href='#n49'>49</a>
<a id='n50' href='#n50'>50</a>
<a id='n51' href='#n51'>51</a>
<a id='n52' href='#n52'>52</a>
<a id='n53' href='#n53'>53</a>
<a id='n54' href='#n54'>54</a>
<a id='n55' href='#n55'>55</a>
<a id='n56' href='#n56'>56</a>
<a id='n57' href='#n57'>57</a>
<a id='n58' href='#n58'>58</a>
<a id='n59' href='#n59'>59</a>
<a id='n60' href='#n60'>60</a>
<a id='n61' href='#n61'>61</a>
<a id='n62' href='#n62'>62</a>
<a id='n63' href='#n63'>63</a>
<a id='n64' href='#n64'>64</a>
<a id='n65' href='#n65'>65</a>
<a id='n66' href='#n66'>66</a>
<a id='n67' href='#n67'>67</a>
<a id='n68' href='#n68'>68</a>
<a id='n69' href='#n69'>69</a>
<a id='n70' href='#n70'>70</a>
<a id='n71' href='#n71'>71</a>
<a id='n72' href='#n72'>72</a>
<a id='n73' href='#n73'>73</a>
<a id='n74' href='#n74'>74</a>
<a id='n75' href='#n75'>75</a>
<a id='n76' href='#n76'>76</a>
<a id='n77' href='#n77'>77</a>
<a id='n78' href='#n78'>78</a>
<a id='n79' href='#n79'>79</a>
<a id='n80' href='#n80'>80</a>
<a id='n81' href='#n81'>81</a>
<a id='n82' href='#n82'>82</a>
<a id='n83' href='#n83'>83</a>
<a id='n84' href='#n84'>84</a>
<a id='n85' href='#n85'>85</a>
<a id='n86' href='#n86'>86</a>
<a id='n87' href='#n87'>87</a>
<a id='n88' href='#n88'>88</a>
<a id='n89' href='#n89'>89</a>
<a id='n90' href='#n90'>90</a>
<a id='n91' href='#n91'>91</a>
<a id='n92' href='#n92'>92</a>
<a id='n93' href='#n93'>93</a>
<a id='n94' href='#n94'>94</a>
<a id='n95' href='#n95'>95</a>
<a id='n96' href='#n96'>96</a>
<a id='n97' href='#n97'>97</a>
<a id='n98' href='#n98'>98</a>
<a id='n99' href='#n99'>99</a>
<a id='n100' href='#n100'>100</a>
<a id='n101' href='#n101'>101</a>
<a id='n102' href='#n102'>102</a>
<a id='n103' href='#n103'>103</a>
<a id='n104' href='#n104'>104</a>
<a id='n105' href='#n105'>105</a>
<a id='n106' href='#n106'>106</a>
<a id='n107' href='#n107'>107</a>
<a id='n108' href='#n108'>108</a>
<a id='n109' href='#n109'>109</a>
<a id='n110' href='#n110'>110</a>
<a id='n111' href='#n111'>111</a>
<a id='n112' href='#n112'>112</a>
<a id='n113' href='#n113'>113</a>
<a id='n114' href='#n114'>114</a>
<a id='n115' href='#n115'>115</a>
<a id='n116' href='#n116'>116</a>
<a id='n117' href='#n117'>117</a>
<a id='n118' href='#n118'>118</a>
<a id='n119' href='#n119'>119</a>
<a id='n120' href='#n120'>120</a>
<a id='n121' href='#n121'>121</a>
<a id='n122' href='#n122'>122</a>
<a id='n123' href='#n123'>123</a>
<a id='n124' href='#n124'>124</a>
<a id='n125' href='#n125'>125</a>
<a id='n126' href='#n126'>126</a>
<a id='n127' href='#n127'>127</a>
<a id='n128' href='#n128'>128</a>
<a id='n129' href='#n129'>129</a>
<a id='n130' href='#n130'>130</a>
<a id='n131' href='#n131'>131</a>
<a id='n132' href='#n132'>132</a>
<a id='n133' href='#n133'>133</a>
<a id='n134' href='#n134'>134</a>
<a id='n135' href='#n135'>135</a>
<a id='n136' href='#n136'>136</a>
<a id='n137' href='#n137'>137</a>
<a id='n138' href='#n138'>138</a>
<a id='n139' href='#n139'>139</a>
<a id='n140' href='#n140'>140</a>
<a id='n141' href='#n141'>141</a>
<a id='n142' href='#n142'>142</a>
<a id='n143' href='#n143'>143</a>
<a id='n144' href='#n144'>144</a>
<a id='n145' href='#n145'>145</a>
<a id='n146' href='#n146'>146</a>
<a id='n147' href='#n147'>147</a>
<a id='n148' href='#n148'>148</a>
<a id='n149' href='#n149'>149</a>
<a id='n150' href='#n150'>150</a>
<a id='n151' href='#n151'>151</a>
<a id='n152' href='#n152'>152</a>
<a id='n153' href='#n153'>153</a>
<a id='n154' href='#n154'>154</a>
<a id='n155' href='#n155'>155</a>
<a id='n156' href='#n156'>156</a>
<a id='n157' href='#n157'>157</a>
<a id='n158' href='#n158'>158</a>
<a id='n159' href='#n159'>159</a>
<a id='n160' href='#n160'>160</a>
<a id='n161' href='#n161'>161</a>
<a id='n162' href='#n162'>162</a>
<a id='n163' href='#n163'>163</a>
<a id='n164' href='#n164'>164</a>
<a id='n165' href='#n165'>165</a>
<a id='n166' href='#n166'>166</a>
<a id='n167' href='#n167'>167</a>
<a id='n168' href='#n168'>168</a>
<a id='n169' href='#n169'>169</a>
<a id='n170' href='#n170'>170</a>
<a id='n171' href='#n171'>171</a>
<a id='n172' href='#n172'>172</a>
<a id='n173' href='#n173'>173</a>
<a id='n174' href='#n174'>174</a>
<a id='n175' href='#n175'>175</a>
<a id='n176' href='#n176'>176</a>
<a id='n177' href='#n177'>177</a>
<a id='n178' href='#n178'>178</a>
<a id='n179' href='#n179'>179</a>
<a id='n180' href='#n180'>180</a>
<a id='n181' href='#n181'>181</a>
<a id='n182' href='#n182'>182</a>
<a id='n183' href='#n183'>183</a>
<a id='n184' href='#n184'>184</a>
<a id='n185' href='#n185'>185</a>
<a id='n186' href='#n186'>186</a>
<a id='n187' href='#n187'>187</a>
<a id='n188' href='#n188'>188</a>
<a id='n189' href='#n189'>189</a>
<a id='n190' href='#n190'>190</a>
<a id='n191' href='#n191'>191</a>
<a id='n192' href='#n192'>192</a>
<a id='n193' href='#n193'>193</a>
<a id='n194' href='#n194'>194</a>
<a id='n195' href='#n195'>195</a>
<a id='n196' href='#n196'>196</a>
<a id='n197' href='#n197'>197</a>
<a id='n198' href='#n198'>198</a>
<a id='n199' href='#n199'>199</a>
<a id='n200' href='#n200'>200</a>
<a id='n201' href='#n201'>201</a>
<a id='n202' href='#n202'>202</a>
<a id='n203' href='#n203'>203</a>
<a id='n204' href='#n204'>204</a>
<a id='n205' href='#n205'>205</a>
<a id='n206' href='#n206'>206</a>
<a id='n207' href='#n207'>207</a>
<a id='n208' href='#n208'>208</a>
<a id='n209' href='#n209'>209</a>
<a id='n210' href='#n210'>210</a>
<a id='n211' href='#n211'>211</a>
<a id='n212' href='#n212'>212</a>
<a id='n213' href='#n213'>213</a>
<a id='n214' href='#n214'>214</a>
<a id='n215' href='#n215'>215</a>
<a id='n216' href='#n216'>216</a>
<a id='n217' href='#n217'>217</a>
<a id='n218' href='#n218'>218</a>
<a id='n219' href='#n219'>219</a>
<a id='n220' href='#n220'>220</a>
<a id='n221' href='#n221'>221</a>
<a id='n222' href='#n222'>222</a>
<a id='n223' href='#n223'>223</a>
<a id='n224' href='#n224'>224</a>
<a id='n225' href='#n225'>225</a>
<a id='n226' href='#n226'>226</a>
<a id='n227' href='#n227'>227</a>
<a id='n228' href='#n228'>228</a>
<a id='n229' href='#n229'>229</a>
<a id='n230' href='#n230'>230</a>
<a id='n231' href='#n231'>231</a>
<a id='n232' href='#n232'>232</a>
<a id='n233' href='#n233'>233</a>
<a id='n234' href='#n234'>234</a>
<a id='n235' href='#n235'>235</a>
<a id='n236' href='#n236'>236</a>
<a id='n237' href='#n237'>237</a>
<a id='n238' href='#n238'>238</a>
<a id='n239' href='#n239'>239</a>
<a id='n240' href='#n240'>240</a>
<a id='n241' href='#n241'>241</a>
<a id='n242' href='#n242'>242</a>
<a id='n243' href='#n243'>243</a>
<a id='n244' href='#n244'>244</a>
<a id='n245' href='#n245'>245</a>
<a id='n246' href='#n246'>246</a>
<a id='n247' href='#n247'>247</a>
<a id='n248' href='#n248'>248</a>
<a id='n249' href='#n249'>249</a>
<a id='n250' href='#n250'>250</a>
<a id='n251' href='#n251'>251</a>
<a id='n252' href='#n252'>252</a>
<a id='n253' href='#n253'>253</a>
<a id='n254' href='#n254'>254</a>
<a id='n255' href='#n255'>255</a>
<a id='n256' href='#n256'>256</a>
<a id='n257' href='#n257'>257</a>
<a id='n258' href='#n258'>258</a>
<a id='n259' href='#n259'>259</a>
<a id='n260' href='#n260'>260</a>
<a id='n261' href='#n261'>261</a>
<a id='n262' href='#n262'>262</a>
<a id='n263' href='#n263'>263</a>
<a id='n264' href='#n264'>264</a>
<a id='n265' href='#n265'>265</a>
<a id='n266' href='#n266'>266</a>
<a id='n267' href='#n267'>267</a>
<a id='n268' href='#n268'>268</a>
<a id='n269' href='#n269'>269</a>
<a id='n270' href='#n270'>270</a>
<a id='n271' href='#n271'>271</a>
<a id='n272' href='#n272'>272</a>
<a id='n273' href='#n273'>273</a>
<a id='n274' href='#n274'>274</a>
<a id='n275' href='#n275'>275</a>
<a id='n276' href='#n276'>276</a>
<a id='n277' href='#n277'>277</a>
<a id='n278' href='#n278'>278</a>
<a id='n279' href='#n279'>279</a>
<a id='n280' href='#n280'>280</a>
<a id='n281' href='#n281'>281</a>
<a id='n282' href='#n282'>282</a>
<a id='n283' href='#n283'>283</a>
<a id='n284' href='#n284'>284</a>
<a id='n285' href='#n285'>285</a>
<a id='n286' href='#n286'>286</a>
<a id='n287' href='#n287'>287</a>
<a id='n288' href='#n288'>288</a>
<a id='n289' href='#n289'>289</a>
<a id='n290' href='#n290'>290</a>
<a id='n291' href='#n291'>291</a>
<a id='n292' href='#n292'>292</a>
<a id='n293' href='#n293'>293</a>
<a id='n294' href='#n294'>294</a>
<a id='n295' href='#n295'>295</a>
<a id='n296' href='#n296'>296</a>
<a id='n297' href='#n297'>297</a>
<a id='n298' href='#n298'>298</a>
<a id='n299' href='#n299'>299</a>
<a id='n300' href='#n300'>300</a>
<a id='n301' href='#n301'>301</a>
<a id='n302' href='#n302'>302</a>
<a id='n303' href='#n303'>303</a>
<a id='n304' href='#n304'>304</a>
<a id='n305' href='#n305'>305</a>
<a id='n306' href='#n306'>306</a>
<a id='n307' href='#n307'>307</a>
<a id='n308' href='#n308'>308</a>
<a id='n309' href='#n309'>309</a>
<a id='n310' href='#n310'>310</a>
<a id='n311' href='#n311'>311</a>
<a id='n312' href='#n312'>312</a>
<a id='n313' href='#n313'>313</a>
<a id='n314' href='#n314'>314</a>
<a id='n315' href='#n315'>315</a>
<a id='n316' href='#n316'>316</a>
<a id='n317' href='#n317'>317</a>
<a id='n318' href='#n318'>318</a>
<a id='n319' href='#n319'>319</a>
<a id='n320' href='#n320'>320</a>
<a id='n321' href='#n321'>321</a>
<a id='n322' href='#n322'>322</a>
<a id='n323' href='#n323'>323</a>
<a id='n324' href='#n324'>324</a>
<a id='n325' href='#n325'>325</a>
<a id='n326' href='#n326'>326</a>
<a id='n327' href='#n327'>327</a>
<a id='n328' href='#n328'>328</a>
<a id='n329' href='#n329'>329</a>
<a id='n330' href='#n330'>330</a>
<a id='n331' href='#n331'>331</a>
<a id='n332' href='#n332'>332</a>
<a id='n333' href='#n333'>333</a>
<a id='n334' href='#n334'>334</a>
<a id='n335' href='#n335'>335</a>
<a id='n336' href='#n336'>336</a>
<a id='n337' href='#n337'>337</a>
<a id='n338' href='#n338'>338</a>
<a id='n339' href='#n339'>339</a>
<a id='n340' href='#n340'>340</a>
<a id='n341' href='#n341'>341</a>
<a id='n342' href='#n342'>342</a>
<a id='n343' href='#n343'>343</a>
<a id='n344' href='#n344'>344</a>
<a id='n345' href='#n345'>345</a>
<a id='n346' href='#n346'>346</a>
<a id='n347' href='#n347'>347</a>
<a id='n348' href='#n348'>348</a>
<a id='n349' href='#n349'>349</a>
<a id='n350' href='#n350'>350</a>
<a id='n351' href='#n351'>351</a>
<a id='n352' href='#n352'>352</a>
<a id='n353' href='#n353'>353</a>
<a id='n354' href='#n354'>354</a>
<a id='n355' href='#n355'>355</a>
<a id='n356' href='#n356'>356</a>
<a id='n357' href='#n357'>357</a>
<a id='n358' href='#n358'>358</a>
<a id='n359' href='#n359'>359</a>
<a id='n360' href='#n360'>360</a>
<a id='n361' href='#n361'>361</a>
<a id='n362' href='#n362'>362</a>
<a id='n363' href='#n363'>363</a>
<a id='n364' href='#n364'>364</a>
<a id='n365' href='#n365'>365</a>
<a id='n366' href='#n366'>366</a>
<a id='n367' href='#n367'>367</a>
<a id='n368' href='#n368'>368</a>
<a id='n369' href='#n369'>369</a>
<a id='n370' href='#n370'>370</a>
<a id='n371' href='#n371'>371</a>
<a id='n372' href='#n372'>372</a>
<a id='n373' href='#n373'>373</a>
<a id='n374' href='#n374'>374</a>
<a id='n375' href='#n375'>375</a>
<a id='n376' href='#n376'>376</a>
<a id='n377' href='#n377'>377</a>
<a id='n378' href='#n378'>378</a>
<a id='n379' href='#n379'>379</a>
<a id='n380' href='#n380'>380</a>
<a id='n381' href='#n381'>381</a>
<a id='n382' href='#n382'>382</a>
<a id='n383' href='#n383'>383</a>
<a id='n384' href='#n384'>384</a>
<a id='n385' href='#n385'>385</a>
<a id='n386' href='#n386'>386</a>
<a id='n387' href='#n387'>387</a>
<a id='n388' href='#n388'>388</a>
<a id='n389' href='#n389'>389</a>
<a id='n390' href='#n390'>390</a>
<a id='n391' href='#n391'>391</a>
<a id='n392' href='#n392'>392</a>
<a id='n393' href='#n393'>393</a>
<a id='n394' href='#n394'>394</a>
<a id='n395' href='#n395'>395</a>
<a id='n396' href='#n396'>396</a>
<a id='n397' href='#n397'>397</a>
<a id='n398' href='#n398'>398</a>
<a id='n399' href='#n399'>399</a>
<a id='n400' href='#n400'>400</a>
<a id='n401' href='#n401'>401</a>
<a id='n402' href='#n402'>402</a>
<a id='n403' href='#n403'>403</a>
<a id='n404' href='#n404'>404</a>
<a id='n405' href='#n405'>405</a>
<a id='n406' href='#n406'>406</a>
<a id='n407' href='#n407'>407</a>
<a id='n408' href='#n408'>408</a>
<a id='n409' href='#n409'>409</a>
<a id='n410' href='#n410'>410</a>
<a id='n411' href='#n411'>411</a>
<a id='n412' href='#n412'>412</a>
<a id='n413' href='#n413'>413</a>
<a id='n414' href='#n414'>414</a>
<a id='n415' href='#n415'>415</a>
<a id='n416' href='#n416'>416</a>
<a id='n417' href='#n417'>417</a>
<a id='n418' href='#n418'>418</a>
<a id='n419' href='#n419'>419</a>
<a id='n420' href='#n420'>420</a>
<a id='n421' href='#n421'>421</a>
<a id='n422' href='#n422'>422</a>
<a id='n423' href='#n423'>423</a>
<a id='n424' href='#n424'>424</a>
<a id='n425' href='#n425'>425</a>
<a id='n426' href='#n426'>426</a>
<a id='n427' href='#n427'>427</a>
<a id='n428' href='#n428'>428</a>
<a id='n429' href='#n429'>429</a>
<a id='n430' href='#n430'>430</a>
<a id='n431' href='#n431'>431</a>
<a id='n432' href='#n432'>432</a>
<a id='n433' href='#n433'>433</a>
<a id='n434' href='#n434'>434</a>
<a id='n435' href='#n435'>435</a>
<a id='n436' href='#n436'>436</a>
<a id='n437' href='#n437'>437</a>
<a id='n438' href='#n438'>438</a>
<a id='n439' href='#n439'>439</a>
<a id='n440' href='#n440'>440</a>
<a id='n441' href='#n441'>441</a>
<a id='n442' href='#n442'>442</a>
<a id='n443' href='#n443'>443</a>
<a id='n444' href='#n444'>444</a>
<a id='n445' href='#n445'>445</a>
<a id='n446' href='#n446'>446</a>
<a id='n447' href='#n447'>447</a>
<a id='n448' href='#n448'>448</a>
<a id='n449' href='#n449'>449</a>
<a id='n450' href='#n450'>450</a>
<a id='n451' href='#n451'>451</a>
<a id='n452' href='#n452'>452</a>
<a id='n453' href='#n453'>453</a>
<a id='n454' href='#n454'>454</a>
<a id='n455' href='#n455'>455</a>
<a id='n456' href='#n456'>456</a>
<a id='n457' href='#n457'>457</a>
<a id='n458' href='#n458'>458</a>
<a id='n459' href='#n459'>459</a>
<a id='n460' href='#n460'>460</a>
<a id='n461' href='#n461'>461</a>
<a id='n462' href='#n462'>462</a>
<a id='n463' href='#n463'>463</a>
<a id='n464' href='#n464'>464</a>
<a id='n465' href='#n465'>465</a>
<a id='n466' href='#n466'>466</a>
<a id='n467' href='#n467'>467</a>
<a id='n468' href='#n468'>468</a>
<a id='n469' href='#n469'>469</a>
<a id='n470' href='#n470'>470</a>
<a id='n471' href='#n471'>471</a>
<a id='n472' href='#n472'>472</a>
<a id='n473' href='#n473'>473</a>
<a id='n474' href='#n474'>474</a>
<a id='n475' href='#n475'>475</a>
<a id='n476' href='#n476'>476</a>
<a id='n477' href='#n477'>477</a>
<a id='n478' href='#n478'>478</a>
<a id='n479' href='#n479'>479</a>
<a id='n480' href='#n480'>480</a>
<a id='n481' href='#n481'>481</a>
<a id='n482' href='#n482'>482</a>
<a id='n483' href='#n483'>483</a>
<a id='n484' href='#n484'>484</a>
<a id='n485' href='#n485'>485</a>
<a id='n486' href='#n486'>486</a>
<a id='n487' href='#n487'>487</a>
<a id='n488' href='#n488'>488</a>
<a id='n489' href='#n489'>489</a>
<a id='n490' href='#n490'>490</a>
<a id='n491' href='#n491'>491</a>
<a id='n492' href='#n492'>492</a>
<a id='n493' href='#n493'>493</a>
<a id='n494' href='#n494'>494</a>
<a id='n495' href='#n495'>495</a>
<a id='n496' href='#n496'>496</a>
<a id='n497' href='#n497'>497</a>
<a id='n498' href='#n498'>498</a>
<a id='n499' href='#n499'>499</a>
<a id='n500' href='#n500'>500</a>
<a id='n501' href='#n501'>501</a>
<a id='n502' href='#n502'>502</a>
<a id='n503' href='#n503'>503</a>
<a id='n504' href='#n504'>504</a>
<a id='n505' href='#n505'>505</a>
<a id='n506' href='#n506'>506</a>
<a id='n507' href='#n507'>507</a>
<a id='n508' href='#n508'>508</a>
<a id='n509' href='#n509'>509</a>
<a id='n510' href='#n510'>510</a>
<a id='n511' href='#n511'>511</a>
<a id='n512' href='#n512'>512</a>
<a id='n513' href='#n513'>513</a>
<a id='n514' href='#n514'>514</a>
<a id='n515' href='#n515'>515</a>
<a id='n516' href='#n516'>516</a>
<a id='n517' href='#n517'>517</a>
<a id='n518' href='#n518'>518</a>
<a id='n519' href='#n519'>519</a>
<a id='n520' href='#n520'>520</a>
<a id='n521' href='#n521'>521</a>
<a id='n522' href='#n522'>522</a>
<a id='n523' href='#n523'>523</a>
<a id='n524' href='#n524'>524</a>
<a id='n525' href='#n525'>525</a>
<a id='n526' href='#n526'>526</a>
<a id='n527' href='#n527'>527</a>
<a id='n528' href='#n528'>528</a>
<a id='n529' href='#n529'>529</a>
<a id='n530' href='#n530'>530</a>
<a id='n531' href='#n531'>531</a>
<a id='n532' href='#n532'>532</a>
<a id='n533' href='#n533'>533</a>
<a id='n534' href='#n534'>534</a>
<a id='n535' href='#n535'>535</a>
<a id='n536' href='#n536'>536</a>
<a id='n537' href='#n537'>537</a>
<a id='n538' href='#n538'>538</a>
<a id='n539' href='#n539'>539</a>
<a id='n540' href='#n540'>540</a>
<a id='n541' href='#n541'>541</a>
<a id='n542' href='#n542'>542</a>
<a id='n543' href='#n543'>543</a>
<a id='n544' href='#n544'>544</a>
<a id='n545' href='#n545'>545</a>
<a id='n546' href='#n546'>546</a>
<a id='n547' href='#n547'>547</a>
<a id='n548' href='#n548'>548</a>
<a id='n549' href='#n549'>549</a>
<a id='n550' href='#n550'>550</a>
<a id='n551' href='#n551'>551</a>
<a id='n552' href='#n552'>552</a>
<a id='n553' href='#n553'>553</a>
<a id='n554' href='#n554'>554</a>
<a id='n555' href='#n555'>555</a>
<a id='n556' href='#n556'>556</a>
<a id='n557' href='#n557'>557</a>
<a id='n558' href='#n558'>558</a>
<a id='n559' href='#n559'>559</a>
<a id='n560' href='#n560'>560</a>
<a id='n561' href='#n561'>561</a>
<a id='n562' href='#n562'>562</a>
<a id='n563' href='#n563'>563</a>
<a id='n564' href='#n564'>564</a>
<a id='n565' href='#n565'>565</a>
<a id='n566' href='#n566'>566</a>
<a id='n567' href='#n567'>567</a>
<a id='n568' href='#n568'>568</a>
<a id='n569' href='#n569'>569</a>
<a id='n570' href='#n570'>570</a>
<a id='n571' href='#n571'>571</a>
<a id='n572' href='#n572'>572</a>
<a id='n573' href='#n573'>573</a>
<a id='n574' href='#n574'>574</a>
<a id='n575' href='#n575'>575</a>
<a id='n576' href='#n576'>576</a>
<a id='n577' href='#n577'>577</a>
<a id='n578' href='#n578'>578</a>
<a id='n579' href='#n579'>579</a>
<a id='n580' href='#n580'>580</a>
<a id='n581' href='#n581'>581</a>
<a id='n582' href='#n582'>582</a>
<a id='n583' href='#n583'>583</a>
<a id='n584' href='#n584'>584</a>
<a id='n585' href='#n585'>585</a>
<a id='n586' href='#n586'>586</a>
<a id='n587' href='#n587'>587</a>
<a id='n588' href='#n588'>588</a>
<a id='n589' href='#n589'>589</a>
<a id='n590' href='#n590'>590</a>
<a id='n591' href='#n591'>591</a>
<a id='n592' href='#n592'>592</a>
<a id='n593' href='#n593'>593</a>
<a id='n594' href='#n594'>594</a>
<a id='n595' href='#n595'>595</a>
<a id='n596' href='#n596'>596</a>
<a id='n597' href='#n597'>597</a>
<a id='n598' href='#n598'>598</a>
<a id='n599' href='#n599'>599</a>
<a id='n600' href='#n600'>600</a>
<a id='n601' href='#n601'>601</a>
<a id='n602' href='#n602'>602</a>
<a id='n603' href='#n603'>603</a>
<a id='n604' href='#n604'>604</a>
<a id='n605' href='#n605'>605</a>
<a id='n606' href='#n606'>606</a>
<a id='n607' href='#n607'>607</a>
<a id='n608' href='#n608'>608</a>
<a id='n609' href='#n609'>609</a>
<a id='n610' href='#n610'>610</a>
<a id='n611' href='#n611'>611</a>
<a id='n612' href='#n612'>612</a>
<a id='n613' href='#n613'>613</a>
<a id='n614' href='#n614'>614</a>
<a id='n615' href='#n615'>615</a>
<a id='n616' href='#n616'>616</a>
<a id='n617' href='#n617'>617</a>
<a id='n618' href='#n618'>618</a>
<a id='n619' href='#n619'>619</a>
<a id='n620' href='#n620'>620</a>
<a id='n621' href='#n621'>621</a>
<a id='n622' href='#n622'>622</a>
<a id='n623' href='#n623'>623</a>
<a id='n624' href='#n624'>624</a>
<a id='n625' href='#n625'>625</a>
<a id='n626' href='#n626'>626</a>
<a id='n627' href='#n627'>627</a>
<a id='n628' href='#n628'>628</a>
<a id='n629' href='#n629'>629</a>
<a id='n630' href='#n630'>630</a>
<a id='n631' href='#n631'>631</a>
<a id='n632' href='#n632'>632</a>
<a id='n633' href='#n633'>633</a>
<a id='n634' href='#n634'>634</a>
<a id='n635' href='#n635'>635</a>
<a id='n636' href='#n636'>636</a>
<a id='n637' href='#n637'>637</a>
<a id='n638' href='#n638'>638</a>
<a id='n639' href='#n639'>639</a>
<a id='n640' href='#n640'>640</a>
<a id='n641' href='#n641'>641</a>
<a id='n642' href='#n642'>642</a>
<a id='n643' href='#n643'>643</a>
<a id='n644' href='#n644'>644</a>
<a id='n645' href='#n645'>645</a>
<a id='n646' href='#n646'>646</a>
<a id='n647' href='#n647'>647</a>
<a id='n648' href='#n648'>648</a>
<a id='n649' href='#n649'>649</a>
<a id='n650' href='#n650'>650</a>
<a id='n651' href='#n651'>651</a>
<a id='n652' href='#n652'>652</a>
<a id='n653' href='#n653'>653</a>
<a id='n654' href='#n654'>654</a>
<a id='n655' href='#n655'>655</a>
<a id='n656' href='#n656'>656</a>
<a id='n657' href='#n657'>657</a>
<a id='n658' href='#n658'>658</a>
<a id='n659' href='#n659'>659</a>
<a id='n660' href='#n660'>660</a>
<a id='n661' href='#n661'>661</a>
<a id='n662' href='#n662'>662</a>
<a id='n663' href='#n663'>663</a>
<a id='n664' href='#n664'>664</a>
<a id='n665' href='#n665'>665</a>
<a id='n666' href='#n666'>666</a>
<a id='n667' href='#n667'>667</a>
<a id='n668' href='#n668'>668</a>
<a id='n669' href='#n669'>669</a>
<a id='n670' href='#n670'>670</a>
<a id='n671' href='#n671'>671</a>
<a id='n672' href='#n672'>672</a>
<a id='n673' href='#n673'>673</a>
<a id='n674' href='#n674'>674</a>
<a id='n675' href='#n675'>675</a>
<a id='n676' href='#n676'>676</a>
<a id='n677' href='#n677'>677</a>
<a id='n678' href='#n678'>678</a>
<a id='n679' href='#n679'>679</a>
<a id='n680' href='#n680'>680</a>
<a id='n681' href='#n681'>681</a>
<a id='n682' href='#n682'>682</a>
<a id='n683' href='#n683'>683</a>
<a id='n684' href='#n684'>684</a>
<a id='n685' href='#n685'>685</a>
<a id='n686' href='#n686'>686</a>
<a id='n687' href='#n687'>687</a>
<a id='n688' href='#n688'>688</a>
<a id='n689' href='#n689'>689</a>
<a id='n690' href='#n690'>690</a>
<a id='n691' href='#n691'>691</a>
<a id='n692' href='#n692'>692</a>
<a id='n693' href='#n693'>693</a>
<a id='n694' href='#n694'>694</a>
<a id='n695' href='#n695'>695</a>
<a id='n696' href='#n696'>696</a>
<a id='n697' href='#n697'>697</a>
<a id='n698' href='#n698'>698</a>
<a id='n699' href='#n699'>699</a>
<a id='n700' href='#n700'>700</a>
<a id='n701' href='#n701'>701</a>
<a id='n702' href='#n702'>702</a>
<a id='n703' href='#n703'>703</a>
<a id='n704' href='#n704'>704</a>
<a id='n705' href='#n705'>705</a>
<a id='n706' href='#n706'>706</a>
<a id='n707' href='#n707'>707</a>
<a id='n708' href='#n708'>708</a>
<a id='n709' href='#n709'>709</a>
<a id='n710' href='#n710'>710</a>
<a id='n711' href='#n711'>711</a>
<a id='n712' href='#n712'>712</a>
<a id='n713' href='#n713'>713</a>
<a id='n714' href='#n714'>714</a>
<a id='n715' href='#n715'>715</a>
<a id='n716' href='#n716'>716</a>
<a id='n717' href='#n717'>717</a>
<a id='n718' href='#n718'>718</a>
<a id='n719' href='#n719'>719</a>
<a id='n720' href='#n720'>720</a>
<a id='n721' href='#n721'>721</a>
<a id='n722' href='#n722'>722</a>
<a id='n723' href='#n723'>723</a>
<a id='n724' href='#n724'>724</a>
<a id='n725' href='#n725'>725</a>
<a id='n726' href='#n726'>726</a>
<a id='n727' href='#n727'>727</a>
<a id='n728' href='#n728'>728</a>
<a id='n729' href='#n729'>729</a>
<a id='n730' href='#n730'>730</a>
<a id='n731' href='#n731'>731</a>
<a id='n732' href='#n732'>732</a>
<a id='n733' href='#n733'>733</a>
<a id='n734' href='#n734'>734</a>
<a id='n735' href='#n735'>735</a>
<a id='n736' href='#n736'>736</a>
<a id='n737' href='#n737'>737</a>
<a id='n738' href='#n738'>738</a>
<a id='n739' href='#n739'>739</a>
<a id='n740' href='#n740'>740</a>
<a id='n741' href='#n741'>741</a>
<a id='n742' href='#n742'>742</a>
<a id='n743' href='#n743'>743</a>
<a id='n744' href='#n744'>744</a>
<a id='n745' href='#n745'>745</a>
<a id='n746' href='#n746'>746</a>
<a id='n747' href='#n747'>747</a>
<a id='n748' href='#n748'>748</a>
<a id='n749' href='#n749'>749</a>
<a id='n750' href='#n750'>750</a>
<a id='n751' href='#n751'>751</a>
<a id='n752' href='#n752'>752</a>
<a id='n753' href='#n753'>753</a>
<a id='n754' href='#n754'>754</a>
<a id='n755' href='#n755'>755</a>
<a id='n756' href='#n756'>756</a>
<a id='n757' href='#n757'>757</a>
<a id='n758' href='#n758'>758</a>
<a id='n759' href='#n759'>759</a>
<a id='n760' href='#n760'>760</a>
<a id='n761' href='#n761'>761</a>
<a id='n762' href='#n762'>762</a>
<a id='n763' href='#n763'>763</a>
<a id='n764' href='#n764'>764</a>
<a id='n765' href='#n765'>765</a>
<a id='n766' href='#n766'>766</a>
<a id='n767' href='#n767'>767</a>
<a id='n768' href='#n768'>768</a>
<a id='n769' href='#n769'>769</a>
<a id='n770' href='#n770'>770</a>
<a id='n771' href='#n771'>771</a>
<a id='n772' href='#n772'>772</a>
<a id='n773' href='#n773'>773</a>
<a id='n774' href='#n774'>774</a>
<a id='n775' href='#n775'>775</a>
<a id='n776' href='#n776'>776</a>
<a id='n777' href='#n777'>777</a>
<a id='n778' href='#n778'>778</a>
<a id='n779' href='#n779'>779</a>
<a id='n780' href='#n780'>780</a>
<a id='n781' href='#n781'>781</a>
<a id='n782' href='#n782'>782</a>
<a id='n783' href='#n783'>783</a>
<a id='n784' href='#n784'>784</a>
<a id='n785' href='#n785'>785</a>
<a id='n786' href='#n786'>786</a>
<a id='n787' href='#n787'>787</a>
<a id='n788' href='#n788'>788</a>
<a id='n789' href='#n789'>789</a>
<a id='n790' href='#n790'>790</a>
<a id='n791' href='#n791'>791</a>
<a id='n792' href='#n792'>792</a>
<a id='n793' href='#n793'>793</a>
<a id='n794' href='#n794'>794</a>
<a id='n795' href='#n795'>795</a>
<a id='n796' href='#n796'>796</a>
<a id='n797' href='#n797'>797</a>
<a id='n798' href='#n798'>798</a>
<a id='n799' href='#n799'>799</a>
<a id='n800' href='#n800'>800</a>
<a id='n801' href='#n801'>801</a>
<a id='n802' href='#n802'>802</a>
<a id='n803' href='#n803'>803</a>
<a id='n804' href='#n804'>804</a>
<a id='n805' href='#n805'>805</a>
<a id='n806' href='#n806'>806</a>
<a id='n807' href='#n807'>807</a>
<a id='n808' href='#n808'>808</a>
<a id='n809' href='#n809'>809</a>
<a id='n810' href='#n810'>810</a>
<a id='n811' href='#n811'>811</a>
<a id='n812' href='#n812'>812</a>
<a id='n813' href='#n813'>813</a>
<a id='n814' href='#n814'>814</a>
<a id='n815' href='#n815'>815</a>
<a id='n816' href='#n816'>816</a>
<a id='n817' href='#n817'>817</a>
<a id='n818' href='#n818'>818</a>
<a id='n819' href='#n819'>819</a>
<a id='n820' href='#n820'>820</a>
<a id='n821' href='#n821'>821</a>
<a id='n822' href='#n822'>822</a>
<a id='n823' href='#n823'>823</a>
<a id='n824' href='#n824'>824</a>
<a id='n825' href='#n825'>825</a>
<a id='n826' href='#n826'>826</a>
<a id='n827' href='#n827'>827</a>
<a id='n828' href='#n828'>828</a>
<a id='n829' href='#n829'>829</a>
<a id='n830' href='#n830'>830</a>
<a id='n831' href='#n831'>831</a>
<a id='n832' href='#n832'>832</a>
<a id='n833' href='#n833'>833</a>
<a id='n834' href='#n834'>834</a>
<a id='n835' href='#n835'>835</a>
<a id='n836' href='#n836'>836</a>
<a id='n837' href='#n837'>837</a>
<a id='n838' href='#n838'>838</a>
<a id='n839' href='#n839'>839</a>
<a id='n840' href='#n840'>840</a>
<a id='n841' href='#n841'>841</a>
<a id='n842' href='#n842'>842</a>
<a id='n843' href='#n843'>843</a>
<a id='n844' href='#n844'>844</a>
<a id='n845' href='#n845'>845</a>
<a id='n846' href='#n846'>846</a>
<a id='n847' href='#n847'>847</a>
<a id='n848' href='#n848'>848</a>
<a id='n849' href='#n849'>849</a>
<a id='n850' href='#n850'>850</a>
<a id='n851' href='#n851'>851</a>
<a id='n852' href='#n852'>852</a>
<a id='n853' href='#n853'>853</a>
<a id='n854' href='#n854'>854</a>
<a id='n855' href='#n855'>855</a>
<a id='n856' href='#n856'>856</a>
<a id='n857' href='#n857'>857</a>
<a id='n858' href='#n858'>858</a>
<a id='n859' href='#n859'>859</a>
<a id='n860' href='#n860'>860</a>
</pre></td>
<td class='lines'><pre><code><span class="hl com">/*</span>
<span class="hl com"> * chap.c - Challenge Handshake Authentication Protocol.</span>
<span class="hl com"> *</span>
<span class="hl com"> * Copyright (c) 1993 The Australian National University.</span>
<span class="hl com"> * All rights reserved.</span>
<span class="hl com"> *</span>
<span class="hl com"> * Redistribution and use in source and binary forms are permitted</span>
<span class="hl com"> * provided that the above copyright notice and this paragraph are</span>
<span class="hl com"> * duplicated in all such forms and that any documentation,</span>
<span class="hl com"> * advertising materials, and other materials related to such</span>
<span class="hl com"> * distribution and use acknowledge that the software was developed</span>
<span class="hl com"> * by the Australian National University.  The name of the University</span>
<span class="hl com"> * may not be used to endorse or promote products derived from this</span>
<span class="hl com"> * software without specific prior written permission.</span>
<span class="hl com"> * THIS SOFTWARE IS PROVIDED ``AS IS&apos;&apos; AND WITHOUT ANY EXPRESS OR</span>
<span class="hl com"> * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED</span>
<span class="hl com"> * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.</span>
<span class="hl com"> *</span>
<span class="hl com"> * Copyright (c) 1991 Gregory M. Christy.</span>
<span class="hl com"> * All rights reserved.</span>
<span class="hl com"> *</span>
<span class="hl com"> * Redistribution and use in source and binary forms are permitted</span>
<span class="hl com"> * provided that the above copyright notice and this paragraph are</span>
<span class="hl com"> * duplicated in all such forms and that any documentation,</span>
<span class="hl com"> * advertising materials, and other materials related to such</span>
<span class="hl com"> * distribution and use acknowledge that the software was developed</span>
<span class="hl com"> * by Gregory M. Christy.  The name of the author may not be used to</span>
<span class="hl com"> * endorse or promote products derived from this software without</span>
<span class="hl com"> * specific prior written permission.</span>
<span class="hl com"> *</span>
<span class="hl com"> * THIS SOFTWARE IS PROVIDED ``AS IS&apos;&apos; AND WITHOUT ANY EXPRESS OR</span>
<span class="hl com"> * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED</span>
<span class="hl com"> * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.</span>
<span class="hl com"> */</span>

<span class="hl ppc">#define RCSID</span>	<span class="hl pps">&quot;$Id$&quot;</span><span class="hl ppc"></span>

<span class="hl com">/*</span>
<span class="hl com"> * TODO:</span>
<span class="hl com"> */</span>

<span class="hl ppc">#include &lt;stdio.h&gt;</span>
<span class="hl ppc">#include &lt;string.h&gt;</span>
<span class="hl ppc">#include &lt;sys/types.h&gt;</span>
<span class="hl ppc">#include &lt;sys/time.h&gt;</span>

<span class="hl ppc">#include</span> <span class="hl pps">&quot;pppd.h&quot;</span><span class="hl ppc"></span>
<span class="hl ppc">#include</span> <span class="hl pps">&quot;chap.h&quot;</span><span class="hl ppc"></span>
<span class="hl ppc">#include</span> <span class="hl pps">&quot;md5.h&quot;</span><span class="hl ppc"></span>
<span class="hl ppc">#ifdef CHAPMS</span>
<span class="hl ppc">#include</span> <span class="hl pps">&quot;chap_ms.h&quot;</span><span class="hl ppc"></span>
<span class="hl ppc">#endif</span>

<span class="hl kwb">static const char</span> rcsid<span class="hl opt">[] =</span> RCSID<span class="hl opt">;</span>

<span class="hl com">/*</span>
<span class="hl com"> * Command-line options.</span>
<span class="hl com"> */</span>
<span class="hl kwb">static</span> option_t chap_option_list<span class="hl opt">[] = {</span>
    <span class="hl opt">{</span> <span class="hl str">&quot;chap-restart&quot;</span><span class="hl opt">,</span> o_int<span class="hl opt">, &amp;</span>chap<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">].</span>timeouttime<span class="hl opt">,</span>
      <span class="hl str">&quot;Set timeout for CHAP&quot;</span><span class="hl opt">,</span> OPT_PRIO <span class="hl opt">},</span>
    <span class="hl opt">{</span> <span class="hl str">&quot;chap-max-challenge&quot;</span><span class="hl opt">,</span> o_int<span class="hl opt">, &amp;</span>chap<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">].</span>max_transmits<span class="hl opt">,</span>
      <span class="hl str">&quot;Set max #xmits for challenge&quot;</span><span class="hl opt">,</span> OPT_PRIO <span class="hl opt">},</span>
    <span class="hl opt">{</span> <span class="hl str">&quot;chap-interval&quot;</span><span class="hl opt">,</span> o_int<span class="hl opt">, &amp;</span>chap<span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">].</span>chal_interval<span class="hl opt">,</span>
      <span class="hl str">&quot;Set interval for rechallenge&quot;</span><span class="hl opt">,</span> OPT_PRIO <span class="hl opt">},</span>
<span class="hl ppc">#ifdef MSLANMAN</span>
    <span class="hl opt">{</span> <span class="hl str">&quot;ms-lanman&quot;</span><span class="hl opt">,</span> o_bool<span class="hl opt">, &amp;</span>ms_lanman<span class="hl opt">,</span>
      <span class="hl str">&quot;Use LanMan passwd when using MS-CHAP&quot;</span><span class="hl opt">,</span> <span class="hl num">1</span> <span class="hl opt">},</span>
<span class="hl ppc">#endif</span>
    <span class="hl opt">{</span> NULL <span class="hl opt">}</span>
<span class="hl opt">};</span>

<span class="hl com">/*</span>
<span class="hl com"> * Protocol entry points.</span>
<span class="hl com"> */</span>
<span class="hl kwb">static void</span> ChapInit <span class="hl kwd">__P</span><span class="hl opt">((</span><span class="hl kwb">int</span><span class="hl opt">));</span>
<span class="hl kwb">static void</span> ChapLowerUp <span class="hl kwd">__P</span><span class="hl opt">((</span><span class="hl kwb">int</span><span class="hl opt">));</span>
<span class="hl kwb">static void</span> ChapLowerDown <span class="hl kwd">__P</span><span class="hl opt">((</span><span class="hl kwb">int</span><span class="hl opt">));</span>
<span class="hl kwb">static void</span> ChapInput <span class="hl kwd">__P</span><span class="hl opt">((</span><span class="hl kwb">int</span><span class="hl opt">,</span> u_char <span class="hl opt">*,</span> <span class="hl kwb">int</span><span class="hl opt">));</span>
<span class="hl kwb">static void</span> ChapProtocolReject <span class="hl kwd">__P</span><span class="hl opt">((</span><span class="hl kwb">int</span><span class="hl opt">));</span>
<span class="hl kwb">static int</span>  ChapPrintPkt <span class="hl kwd">__P</span><span class="hl opt">((</span>u_char <span class="hl opt">*,</span> <span class="hl kwb">int</span><span class="hl opt">,</span>
			      <span class="hl kwb">void</span> <span class="hl opt">(*)</span> <span class="hl kwd">__P</span><span class="hl opt">((</span><span class="hl kwb">void</span> <span class="hl opt">*,</span> <span class="hl kwb">char</span> <span class="hl opt">*, ...)),</span> <span class="hl kwb">void</span> <span class="hl opt">*));</span>

<span class="hl kwb">struct</span> protent chap_protent <span class="hl opt">= {</span>
    PPP_CHAP<span class="hl opt">,</span>
    ChapInit<span class="hl opt">,</span>
    ChapInput<span class="hl opt">,</span>
    ChapProtocolReject<span class="hl opt">,</span>
    ChapLowerUp<span class="hl opt">,</span>
    ChapLowerDown<span class="hl opt">,</span>
    NULL<span class="hl opt">,</span>
    NULL<span class="hl opt">,</span>
    ChapPrintPkt<span class="hl opt">,</span>
    NULL<span class="hl opt">,</span>
    <span class="hl num">1</span><span class="hl opt">,</span>
    <span class="hl str">&quot;CHAP&quot;</span><span class="hl opt">,</span>
    NULL<span class="hl opt">,</span>
    chap_option_list<span class="hl opt">,</span>
    NULL<span class="hl opt">,</span>
    NULL<span class="hl opt">,</span>
    NULL
<span class="hl opt">};</span>

chap_state chap<span class="hl opt">[</span>NUM_PPP<span class="hl opt">];</span>		<span class="hl com">/* CHAP state; one for each unit */</span>

<span class="hl kwb">static void</span> ChapChallengeTimeout <span class="hl kwd">__P</span><span class="hl opt">((</span><span class="hl kwb">void</span> <span class="hl opt">*));</span>
<span class="hl kwb">static void</span> ChapResponseTimeout <span class="hl kwd">__P</span><span class="hl opt">((</span><span class="hl kwb">void</span> <span class="hl opt">*));</span>
<span class="hl kwb">static void</span> ChapReceiveChallenge <span class="hl kwd">__P</span><span class="hl opt">((</span>chap_state <span class="hl opt">*,</span> u_char <span class="hl opt">*,</span> <span class="hl kwb">int</span><span class="hl opt">,</span> <span class="hl kwb">int</span><span class="hl opt">));</span>
<span class="hl kwb">static void</span> ChapRechallenge <span class="hl kwd">__P</span><span class="hl opt">((</span><span class="hl kwb">void</span> <span class="hl opt">*));</span>
<span class="hl kwb">static void</span> ChapReceiveResponse <span class="hl kwd">__P</span><span class="hl opt">((</span>chap_state <span class="hl opt">*,</span> u_char <span class="hl opt">*,</span> <span class="hl kwb">int</span><span class="hl opt">,</span> <span class="hl kwb">int</span><span class="hl opt">));</span>
<span class="hl kwb">static void</span> ChapReceiveSuccess <span class="hl kwd">__P</span><span class="hl opt">((</span>chap_state <span class="hl opt">*,</span> u_char <span class="hl opt">*,</span> <span class="hl kwb">int</span><span class="hl opt">,</span> <span class="hl kwb">int</span><span class="hl opt">));</span>
<span class="hl kwb">static void</span> ChapReceiveFailure <span class="hl kwd">__P</span><span class="hl opt">((</span>chap_state <span class="hl opt">*,</span> u_char <span class="hl opt">*,</span> <span class="hl kwb">int</span><span class="hl opt">,</span> <span class="hl kwb">int</span><span class="hl opt">));</span>
<span class="hl kwb">static void</span> ChapSendStatus <span class="hl kwd">__P</span><span class="hl opt">((</span>chap_state <span class="hl opt">*,</span> <span class="hl kwb">int</span><span class="hl opt">));</span>
<span class="hl kwb">static void</span> ChapSendChallenge <span class="hl kwd">__P</span><span class="hl opt">((</span>chap_state <span class="hl opt">*));</span>
<span class="hl kwb">static void</span> ChapSendResponse <span class="hl kwd">__P</span><span class="hl opt">((</span>chap_state <span class="hl opt">*));</span>
<span class="hl kwb">static void</span> ChapGenChallenge <span class="hl kwd">__P</span><span class="hl opt">((</span>chap_state <span class="hl opt">*));</span>

<span class="hl kwc">extern</span> <span class="hl kwb">double</span> drand48 <span class="hl kwd">__P</span><span class="hl opt">((</span><span class="hl kwb">void</span><span class="hl opt">));</span>
<span class="hl kwc">extern</span> <span class="hl kwb">void</span> srand48 <span class="hl kwd">__P</span><span class="hl opt">((</span><span class="hl kwb">long</span><span class="hl opt">));</span>

<span class="hl com">/*</span>
<span class="hl com"> * ChapInit - Initialize a CHAP unit.</span>
<span class="hl com"> */</span>
<span class="hl kwb">static void</span>
<span class="hl kwd">ChapInit</span><span class="hl opt">(</span>unit<span class="hl opt">)</span>
    <span class="hl kwb">int</span> unit<span class="hl opt">;</span>
<span class="hl opt">{</span>
    chap_state <span class="hl opt">*</span>cstate <span class="hl opt">= &amp;</span>chap<span class="hl opt">[</span>unit<span class="hl opt">];</span>

    <span class="hl kwd">BZERO</span><span class="hl opt">(</span>cstate<span class="hl opt">,</span> <span class="hl kwa">sizeof</span><span class="hl opt">(*</span>cstate<span class="hl opt">));</span>
    cstate<span class="hl opt">-&gt;</span>unit <span class="hl opt">=</span> unit<span class="hl opt">;</span>
    cstate<span class="hl opt">-&gt;</span>clientstate <span class="hl opt">=</span> CHAPCS_INITIAL<span class="hl opt">;</span>
    cstate<span class="hl opt">-&gt;</span>serverstate <span class="hl opt">=</span> CHAPSS_INITIAL<span class="hl opt">;</span>
    cstate<span class="hl opt">-&gt;</span>timeouttime <span class="hl opt">=</span> CHAP_DEFTIMEOUT<span class="hl opt">;</span>
    cstate<span class="hl opt">-&gt;</span>max_transmits <span class="hl opt">=</span> CHAP_DEFTRANSMITS<span class="hl opt">;</span>
    <span class="hl com">/* random number generator is initialized in magic_init */</span>
<span class="hl opt">}</span>


<span class="hl com">/*</span>
<span class="hl com"> * ChapAuthWithPeer - Authenticate us with our peer (start client).</span>
<span class="hl com"> *</span>
<span class="hl com"> */</span>
<span class="hl kwb">void</span>
<span class="hl kwd">ChapAuthWithPeer</span><span class="hl opt">(</span>unit<span class="hl opt">,</span> our_name<span class="hl opt">,</span> digest<span class="hl opt">)</span>
    <span class="hl kwb">int</span> unit<span class="hl opt">;</span>
    <span class="hl kwb">char</span> <span class="hl opt">*</span>our_name<span class="hl opt">;</span>
    <span class="hl kwb">int</span> digest<span class="hl opt">;</span>
<span class="hl opt">{</span>
    chap_state <span class="hl opt">*</span>cstate <span class="hl opt">= &amp;</span>chap<span class="hl opt">[</span>unit<span class="hl opt">];</span>

    cstate<span class="hl opt">-&gt;</span>resp_name <span class="hl opt">=</span> our_name<span class="hl opt">;</span>
    cstate<span class="hl opt">-&gt;</span>resp_type <span class="hl opt">=</span> digest<span class="hl opt">;</span>

    <span class="hl kwa">if</span> <span class="hl opt">(</span>cstate<span class="hl opt">-&gt;</span>clientstate <span class="hl opt">==</span> CHAPCS_INITIAL <span class="hl opt">||</span>
	cstate<span class="hl opt">-&gt;</span>clientstate <span class="hl opt">==</span> CHAPCS_PENDING<span class="hl opt">) {</span>
	<span class="hl com">/* lower layer isn&apos;t up - wait until later */</span>
	cstate<span class="hl opt">-&gt;</span>clientstate <span class="hl opt">=</span> CHAPCS_PENDING<span class="hl opt">;</span>
	<span class="hl kwa">return</span><span class="hl opt">;</span>
    <span class="hl opt">}</span>

    <span class="hl com">/*</span>
<span class="hl com">     * We get here as a result of LCP coming up.</span>
<span class="hl com">     * So even if CHAP was open before, we will </span>
<span class="hl com">     * have to re-authenticate ourselves.</span>
<span class="hl com">     */</span>
    cstate<span class="hl opt">-&gt;</span>clientstate <span class="hl opt">=</span> CHAPCS_LISTEN<span class="hl opt">;</span>
<span class="hl opt">}</span>


<span class="hl com">/*</span>
<span class="hl com"> * ChapAuthPeer - Authenticate our peer (start server).</span>
<span class="hl com"> */</span>
<span class="hl kwb">void</span>
<span class="hl kwd">ChapAuthPeer</span><span class="hl opt">(</span>unit<span class="hl opt">,</span> our_name<span class="hl opt">,</span> digest<span class="hl opt">)</span>
    <span class="hl kwb">int</span> unit<span class="hl opt">;</span>
    <span class="hl kwb">char</span> <span class="hl opt">*</span>our_name<span class="hl opt">;</span>
    <span class="hl kwb">int</span> digest<span class="hl opt">;</span>
<span class="hl opt">{</span>
    chap_state <span class="hl opt">*</span>cstate <span class="hl opt">= &amp;</span>chap<span class="hl opt">[</span>unit<span class="hl opt">];</span>
  
    cstate<span class="hl opt">-&gt;</span>chal_name <span class="hl opt">=</span> our_name<span class="hl opt">;</span>
    cstate<span class="hl opt">-&gt;</span>chal_type <span class="hl opt">=</span> digest<span class="hl opt">;</span>

    <span class="hl kwa">if</span> <span class="hl opt">(</span>cstate<span class="hl opt">-&gt;</span>serverstate <span class="hl opt">==</span> CHAPSS_INITIAL <span class="hl opt">||</span>
	cstate<span class="hl opt">-&gt;</span>serverstate <span class="hl opt">==</span> CHAPSS_PENDING<span class="hl opt">) {</span>
	<span class="hl com">/* lower layer isn&apos;t up - wait until later */</span>
	cstate<span class="hl opt">-&gt;</span>serverstate <span class="hl opt">=</span> CHAPSS_PENDING<span class="hl opt">;</span>
	<span class="hl kwa">return</span><span class="hl opt">;</span>
    <span class="hl opt">}</span>

    <span class="hl kwd">ChapGenChallenge</span><span class="hl opt">(</span>cstate<span class="hl opt">);</span>
    <span class="hl kwd">ChapSendChallenge</span><span class="hl opt">(</span>cstate<span class="hl opt">);</span>		<span class="hl com">/* crank it up dude! */</span>
    cstate<span class="hl opt">-&gt;</span>serverstate <span class="hl opt">=</span> CHAPSS_INITIAL_CHAL<span class="hl opt">;</span>
<span class="hl opt">}</span>


<span class="hl com">/*</span>
<span class="hl com"> * ChapChallengeTimeout - Timeout expired on sending challenge.</span>
<span class="hl com"> */</span>
<span class="hl kwb">static void</span>
<span class="hl kwd">ChapChallengeTimeout</span><span class="hl opt">(</span>arg<span class="hl opt">)</span>
    <span class="hl kwb">void</span> <span class="hl opt">*</span>arg<span class="hl opt">;</span>
<span class="hl opt">{</span>
    chap_state <span class="hl opt">*</span>cstate <span class="hl opt">= (</span>chap_state <span class="hl opt">*)</span> arg<span class="hl opt">;</span>
  
    <span class="hl com">/* if we aren&apos;t sending challenges, don&apos;t worry.  then again we */</span>
    <span class="hl com">/* probably shouldn&apos;t be here either */</span>
    <span class="hl kwa">if</span> <span class="hl opt">(</span>cstate<span class="hl opt">-&gt;</span>serverstate <span class="hl opt">!=</span> CHAPSS_INITIAL_CHAL <span class="hl opt">&amp;&amp;</span>
	cstate<span class="hl opt">-&gt;</span>serverstate <span class="hl opt">!=</span> CHAPSS_RECHALLENGE<span class="hl opt">)</span>
	<span class="hl kwa">return</span><span class="hl opt">;</span>

    <span class="hl kwa">if</span> <span class="hl opt">(</span>cstate<span class="hl opt">-&gt;</span>chal_transmits <span class="hl opt">&gt;=</span> cstate<span class="hl opt">-&gt;</span>max_transmits<span class="hl opt">) {</span>
	<span class="hl com">/* give up on peer */</span>
	<span class="hl kwd">error</span><span class="hl opt">(</span><span class="hl str">&quot;Peer failed to respond to CHAP challenge&quot;</span><span class="hl opt">);</span>
	cstate<span class="hl opt">-&gt;</span>serverstate <span class="hl opt">=</span> CHAPSS_BADAUTH<span class="hl opt">;</span>
	<span class="hl kwd">auth_peer_fail</span><span class="hl opt">(</span>cstate<span class="hl opt">-&gt;</span>unit<span class="hl opt">,</span> PPP_CHAP<span class="hl opt">);</span>
	<span class="hl kwa">return</span><span class="hl opt">;</span>
    <span class="hl opt">}</span>

    <span class="hl kwd">ChapSendChallenge</span><span class="hl opt">(</span>cstate<span class="hl opt">);</span>		<span class="hl com">/* Re-send challenge */</span>
<span class="hl opt">}</span>


<span class="hl com">/*</span>
<span class="hl com"> * ChapResponseTimeout - Timeout expired on sending response.</span>
<span class="hl com"> */</span>
<span class="hl kwb">static void</span>
<span class="hl kwd">ChapResponseTimeout</span><span class="hl opt">(</span>arg<span class="hl opt">)</span>
    <span class="hl kwb">void</span> <span class="hl opt">*</span>arg<span class="hl opt">;</span>
<span class="hl opt">{</span>
    chap_state <span class="hl opt">*</span>cstate <span class="hl opt">= (</span>chap_state <span class="hl opt">*)</span> arg<span class="hl opt">;</span>

    <span class="hl com">/* if we aren&apos;t sending a response, don&apos;t worry. */</span>
    <span class="hl kwa">if</span> <span class="hl opt">(</span>cstate<span class="hl opt">-&gt;</span>clientstate <span class="hl opt">!=</span> CHAPCS_RESPONSE<span class="hl opt">)</span>
	<span class="hl kwa">return</span><span class="hl opt">;</span>

    <span class="hl kwd">ChapSendResponse</span><span class="hl opt">(</span>cstate<span class="hl opt">);</span>		<span class="hl com">/* re-send response */</span>
<span class="hl opt">}</span>


<span class="hl com">/*</span>
<span class="hl com"> * ChapRechallenge - Time to challenge the peer again.</span>
<span class="hl com"> */</span>
<span class="hl kwb">static void</span>
<span class="hl kwd">ChapRechallenge</span><span class="hl opt">(</span>arg<span class="hl opt">)</span>
    <span class="hl kwb">void</span> <span class="hl opt">*</span>arg<span class="hl opt">;</span>
<span class="hl opt">{</span>
    chap_state <span class="hl opt">*</span>cstate <span class="hl opt">= (</span>chap_state <span class="hl opt">*)</span> arg<span class="hl opt">;</span>

    <span class="hl com">/* if we aren&apos;t sending a response, don&apos;t worry. */</span>
    <span class="hl kwa">if</span> <span class="hl opt">(</span>cstate<span class="hl opt">-&gt;</span>serverstate <span class="hl opt">!=</span> CHAPSS_OPEN<span class="hl opt">)</span>
	<span class="hl kwa">return</span><span class="hl opt">;</span>

    <span class="hl kwd">ChapGenChallenge</span><span class="hl opt">(</span>cstate<span class="hl opt">);</span>
    <span class="hl kwd">ChapSendChallenge</span><span class="hl opt">(</span>cstate<span class="hl opt">);</span>
    cstate<span class="hl opt">-&gt;</span>serverstate <span class="hl opt">=</span> CHAPSS_RECHALLENGE<span class="hl opt">;</span>
<span class="hl opt">}</span>


<span class="hl com">/*</span>
<span class="hl com"> * ChapLowerUp - The lower layer is up.</span>
<span class="hl com"> *</span>
<span class="hl com"> * Start up if we have pending requests.</span>
<span class="hl com"> */</span>
<span class="hl kwb">static void</span>
<span class="hl kwd">ChapLowerUp</span><span class="hl opt">(</span>unit<span class="hl opt">)</span>
    <span class="hl kwb">int</span> unit<span class="hl opt">;</span>
<span class="hl opt">{</span>
    chap_state <span class="hl opt">*</span>cstate <span class="hl opt">= &amp;</span>chap<span class="hl opt">[</span>unit<span class="hl opt">];</span>
  
    <span class="hl kwa">if</span> <span class="hl opt">(</span>cstate<span class="hl opt">-&gt;</span>clientstate <span class="hl opt">==</span> CHAPCS_INITIAL<span class="hl opt">)</span>
	cstate<span class="hl opt">-&gt;</span>clientstate <span class="hl opt">=</span> CHAPCS_CLOSED<span class="hl opt">;</span>
    <span class="hl kwa">else if</span> <span class="hl opt">(</span>cstate<span class="hl opt">-&gt;</span>clientstate <span class="hl opt">==</span> CHAPCS_PENDING<span class="hl opt">)</span>
	cstate<span class="hl opt">-&gt;</span>clientstate <span class="hl opt">=</span> CHAPCS_LISTEN<span class="hl opt">;</span>

    <span class="hl kwa">if</span> <span class="hl opt">(</span>cstate<span class="hl opt">-&gt;</span>serverstate <span class="hl opt">==</span> CHAPSS_INITIAL<span class="hl opt">)</span>
	cstate<span class="hl opt">-&gt;</span>serverstate <span class="hl opt">=</span> CHAPSS_CLOSED<span class="hl opt">;</span>
    <span class="hl kwa">else if</span> <span class="hl opt">(</span>cstate<span class="hl opt">-&gt;</span>serverstate <span class="hl opt">==</span> CHAPSS_PENDING<span class="hl opt">) {</span>
	<span class="hl kwd">ChapGenChallenge</span><span class="hl opt">(</span>cstate<span class="hl opt">);</span>
	<span class="hl kwd">ChapSendChallenge</span><span class="hl opt">(</span>cstate<span class="hl opt">);