File:  [LON-CAPA] / loncom / html / adm / help / tex / Institutional_Integration_Format_Checks.tex
Revision 1.6: download - view: text, annotated - select for diffs
Thu May 26 21:58:34 2011 UTC (13 years, 5 months ago) by raeburn
Branches: MAIN
CVS tags: version_2_12_X, version_2_11_X, version_2_11_5_msu, version_2_11_5, version_2_11_4_uiuc, version_2_11_4_msu, version_2_11_4, version_2_11_3_uiuc, version_2_11_3_msu, version_2_11_3, version_2_11_2_uiuc, version_2_11_2_msu, version_2_11_2_educog, version_2_11_2, version_2_11_1, version_2_11_0_RC3, version_2_11_0_RC2, version_2_11_0_RC1, version_2_11_0, version_2_10_X, version_2_10_1, version_2_10_0, loncapaMITrelate_1, language_hyphenation_merge, language_hyphenation, HEAD, BZ4492-merge, BZ4492-feature_horizontal_radioresponse
- Eliminate use of \textgreater and \textless to avoid errors in online manual.
- Replace with $>$ and $<$ which work in both online version and PDF.

\label{Institutional_Integration_Format_Checks}
Format restrictions for usernames and student/employeeIDs for an institution,
and formats which may \emph{not} be used for e-mail addresses used
as usernames when users self-create accounts are defined in three
subroutines in localenroll.pm: \emph{username\_rules()}, \emph{id\_rules()},
and \emph{selfcreate\_rules()}. The three routines accept a similar
set of arguments, and return 'ok' in each case, if no error occurred.

\textbf{\large username\_rules} - Incoming data: three arguments

\begin{enumerate}
\item \$dom - domain
\item \$ruleshash - reference to hash containing rules (a hash of a hash)


keys of top level hash are short names (e.g., netid, noncredit); for
each key, value is a hash.

\begin{itemize}
\item desc =$>$ long name for rule
\item rule =$>$ description of rule
\item authtype =$>$ (krb5,krb4,int, or loc) authentication type for rule
\item authparm =$>$ authentication parameter for rule
\item authparmfixed =$>$ 1 if authparm used when creating user for rule must
be authparm
\item authmsg =$>$ Message to display describing authentication to use for
this rule
\end{itemize}
\item \$rulesorder - reference to array containing rule names in order to
be displayed
\end{enumerate}
At MSU, a NetID consists of eight characters or less, and will be
authenticated by Kerberos (version 5) in the MSU.EDU realm. The rule
itself is defined in \emph{username\_rules()}, and the code which
checks for compliance is in \emph{username\_check()}:

\begin{quotation}
\texttt{sub username\_rules \{}
\begin{quotation}
\texttt{my (\$dom,\$ruleshash,\$rulesorder) = @\_;}

\texttt{\%\{\$ruleshash\} = (}
\begin{quotation}
\texttt{netid => \{}
\begin{quotation}
\texttt{name     => 'MSU NetID',}

\texttt{desc     => 'Eight characters or less',}

\texttt{authtype => 'krb5',}

\texttt{authparm => 'MSU.EDU',}

\texttt{authparmfixed => '',}

\texttt{authmsg       => 'A new user with a username which matches
a valid MSU NetID will log-in using the MSU Net ID and MSU Net password.',}
\end{quotation}
\texttt{\}}
\end{quotation}
\texttt{);}

\texttt{@\{\$rulesorder\} = ('netid');}

\texttt{return 'ok';}
\end{quotation}
\texttt{\}}
\end{quotation}
\textbf{\large id\_rules} - Incoming data: three arguments

\begin{enumerate}
\item \$dom - domain
\item \$ruleshash - reference to hash containing rules (a hash of a hash)keys
of top level hash are short names (e.g., studentID, employeeID); for
each key, value is a hash

\begin{itemize}
\item desc =$>$ long name for rule
\item rule =$>$ description of rule
\end{itemize}
\item \$rulesorder - reference to array containing rule names in order to
be displayed
\end{enumerate}
At MSU, student/employee IDs are eight digits prefaced by A
or Z. The rule itself is defined in \emph{id\_rules()}, and the code
which checks for compliance is in \emph{id\_check()}:

\begin{quotation}
\texttt{sub id\_rules \{}
\begin{quotation}
\texttt{my (\$dom,\$ruleshash,\$rulesorder) = @\_;}

\texttt{\%\{\$ruleshash\} = (}
\begin{quotation}
\texttt{studentID => \{}
\begin{quotation}
\texttt{name => 'MSU student PID',}

\texttt{desc => 'Letter A or a, followed by eight digits',}
\end{quotation}
\texttt{\},}

\texttt{facstaffID =$>$ \{}
\begin{quotation}
\texttt{name => 'MSU faculty/staff ID',}

\texttt{desc => 'Letter Z or z, followed by eight digits',}
\end{quotation}
\texttt{\},}
\end{quotation}
\texttt{);}

\texttt{@\{\$rulesorder\} = ('studentID','facstaffID');}

\texttt{return 'ok';}
\end{quotation}
\texttt{\}}
\end{quotation}
\textbf{\large selfcreate\_rules} - Incoming data: three arguments

\begin{enumerate}
\item \$dom - domain
\item \$ruleshash - reference to hash containing rules (a hash of a hash)


keys of top level hash are short names (e.g., msuemail); for each
key, value is a hash

\begin{itemize}
\item desc =$>$ long name for rule
\item rule =$>$ description of rule
\end{itemize}
\item \$rulesorder - reference to array containing rule names in order to
be displayed
\end{enumerate}
At MSU all users receive a Net ID (e.g., \emph{sparty}), and a corresponding
e-mail account: \emph{sparty@msu.edu}. So, at MSU the rules for e-mail
addresses to be used as LON-CAPA usernames prohibit e-mails such as
\emph{sparty@msu.edu}. In such cases, the user should log-in with
the sparty Net ID/password and request account creation for the username:
\emph{sparty}. The rule itself is defined in \emph{selfcreate\_rules()},
and the code which checks for compliance is in \emph{selfcreate\_check()}:

\begin{quotation}
\texttt{sub selfcreate\_rules \{}
\begin{quotation}
\texttt{my (\$dom,\$ruleshash,\$rulesorder) = @\_;}

\texttt{\%\{\$ruleshash\} = (}
\begin{quotation}
\texttt{msuemail => \{}

\texttt{name => 'MSU e-mail address ',}

\texttt{desc => 'netid@msu.edu',}
\end{quotation}
\texttt{\},}

\texttt{);}

\texttt{@\{\$rulesorder\} = ('msuemail');}

\texttt{return 'ok';}
\end{quotation}
\texttt{\}}
\end{quotation}
The corresponding routines which check for compliance with rules enabled
via Domain Configuration-$>$ User Creation are \emph{username\_check()},
\emph{id\_check()}, and \emph{selfcreate\_check()}. The three routines
accept a similar set of four arguments, and return 'ok' in each case,
if no error occurred.

\begin{enumerate}
\item \$dom - domain (scalar)
\item \$uname (username\_check()), \$id (id\_check()) or \$selfcreatename
(selfcreate\_check())


- proposed username, id or self-created username being compared against
rules (scalar)

\item \$to\_check (reference to array of rule names to check)
\item \$resultshash (reference to hash of results) hash of results for rule
checked


keys are rule names - values are: 1 or 0 (for matched or unmatched)

\end{enumerate}
The routines used for checking rule compliance at MSU are as follows:

\textbf{\large username\_check} 

\begin{quotation}
\texttt{sub username\_check \{}
\begin{quotation}
\texttt{my (\$dom,\$uname,\$to\_check,\$resultshash) = @\_;}

\texttt{my \$outcome;}

\texttt{if (ref(\$to\_check) eq 'ARRAY') \{}
\begin{quotation}
\texttt{foreach my \$item (@\{\$to\_check\}) \{}
\begin{quotation}
\texttt{if (\$item eq 'netid') \{}
\begin{quotation}
\texttt{if (\$uname =\~{} /\^{}\textbackslash{}w\{2,8\}\$/)
\{}
\begin{quotation}
\texttt{\$resultshash->\{\$item\} = 1;}
\end{quotation}
\texttt{\} else \{}
\begin{quotation}
\texttt{\$resultshash->\{\$item\} = 0;}
\end{quotation}
\texttt{\}}
\end{quotation}
\end{quotation}
\texttt{\}}

\texttt{\$outcome = 'ok';}
\end{quotation}
\texttt{\}}

\texttt{return \$outcome;}
\end{quotation}
\texttt{\}}
\end{quotation}
\textbf{\large id\_check} 

\begin{quotation}
\texttt{sub id\_check \{}
\begin{quotation}
\texttt{my (\$dom,\$id,\$to\_check,\$resultshash) = @\_;}

\texttt{my \$outcome;}

\texttt{if (ref(\$to\_check) eq 'ARRAY') \{}
\begin{quotation}
\texttt{foreach my \$item (@\{\$to\_check\}) \{}
\begin{quotation}
\texttt{if (\$item eq 'facstaffID') \{}
\begin{quotation}
\texttt{if (\$id =\~{} /\^{}z\textbackslash{}d\{8\}\$/i)
\{}
\begin{quotation}
\texttt{\$resultshash->\{\$item\} = 1;}
\end{quotation}
\texttt{\} else \{}
\begin{quotation}
\texttt{\$resultshash->\{\$item\} = 0;}
\end{quotation}
\texttt{\}}
\end{quotation}
\texttt{\} elsif (\$item eq 'studentID') \{}
\begin{quotation}
\texttt{if (\$id =\~{} /\^{}a\textbackslash{}d\{8\}\$/i)
\{}
\begin{quotation}
\texttt{\$resultshash->\{\$item\} = 1;}
\end{quotation}
\texttt{\} else \{}
\begin{quotation}
\texttt{\$resultshash->\{\$item\} = 0;}
\end{quotation}
\texttt{\}}
\end{quotation}
\texttt{\}}
\end{quotation}
\texttt{\}}

\texttt{\$outcome = 'ok';}
\end{quotation}
\texttt{\}}

\texttt{return \$outcome;}
\end{quotation}
\texttt{\}}
\end{quotation}
\textbf{\large selfcreate\_check} 

\begin{quotation}
\texttt{sub selfcreate\_check \{}
\begin{quotation}
\texttt{my (\$dom,\$selfcreatename,\$to\_check,\$resultshash) = @\_;}

\texttt{my \$outcome;}

\texttt{if (ref(\$to\_check) eq 'ARRAY') \{}
\begin{quotation}
\texttt{foreach my \$item (@\{\$to\_check\}) \{}
\begin{quotation}
\texttt{if (\$item eq 'msuemail') \{}
\begin{quotation}
\texttt{if (\$selfcreatename =\~{} /\^{}\textbackslash{}w\{2,8\}\textbackslash{}@msu\textbackslash{}.edu\$/)
\{}
\begin{quotation}
\texttt{\$resultshash->\{\$item\} = 1;}
\end{quotation}
\texttt{\} else \{}
\begin{quotation}
\texttt{\$resultshash->\{\$item\} = 0;}
\end{quotation}
\texttt{\}}
\end{quotation}
\texttt{\}}
\end{quotation}
\texttt{\}}

\texttt{\$outcome = 'ok';}
\end{quotation}
\texttt{\}}

\texttt{return \$outcome;}
\end{quotation}
\texttt{\}}
\end{quotation}

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>