1, 'markup' => "(:username:$1:)", 'filter' => 'check_username'); function check_username($pagename, $fn, &$new) { global $MessagesFmt, $EnablePost, $AuthUserSearchPatterns, $GroupDelimiter; if(!@$new[$fn]) return; if(PageTextVar($pagename,"password")){ $pages=@ListPages($AuthUserSearchPatterns); foreach ($pages as $pn) { if($pn!=$pagename and PageTextVar($pn,"username")==$new[$fn]){ $MessagesFmt[] = "

$[That username is taken. Please choose another.]

"; $EnablePost=false; return; } } if(preg_match('/('.$GroupDelimiter.'|[, ])/',$new[$fn])){ $MessagesFmt[] = "

$[$GroupDelimiter, commas, and whitespaces are not allowed in your username.]

"; $EnablePost=false; return; } } else{ $MessagesFmt[] = "

$[Enter a password using the (:password:(:encrypt MyNewPassword:):) markup.]

"; $EnablePost=false; return; } } if ( $action == 'edit' ) require_once("$FarmD/cookbook/editattr.php"); if (@$_POST['authid']) { $id=stripmagic(@$_POST['authid']); $pass=stripmagic(@$_POST['authpw']); $pw=crypt($pass,$pass); $authid=''; $pages=@ListPages($AuthUserSearchPatterns); foreach ($pages as $pn) { if(PageTextVar($pn,"username")==$id && PageTextVar($pn,"password")==$pw){ $authid = $id; $authgroup=FmtPageName('$Group', $pn); foreach((array)$authgroup as $g){ $authlist[$GroupDelimiter.$g] = true; $authlist['-'.$GroupDelimiter.$g] = false; } break; } } if (!$authid) $GLOBALS['InvalidLogin'] = true; else{ if (!isset($AuthId)) $AuthId = $authid; SessionAuth($pagename, array('authid' => $authid, 'authlist' => $authlist)); } } else SessionAuth($pagename); /* if(PageTextVar($pagename,"username")){ if(PageTextVar($pagename,"password")){ if(PageTextVar($pagename,"username")==$AuthId && in_array(PageTextVar($pagename,"password"),$AuthPw)) $HandleAuth['edit']=''; else $HandleAuth['source'] = 'admin'; } } */ $AuthFunction='UserAuth'; function UserAuth($pagename, $level, $authprompt=true, $since=0) { global $DefaultPasswords, $GroupAttributesFmt, $AllowName, $SitePrefix, $GroupDelimiter, $AuthCascade, $FmtV, $AuthPromptFmt, $PageStartFmt, $PageEndFmt, $AuthId, $AuthList, $NoHTMLCache; static $authcache; SDV($GroupAttributesFmt,'$Group/GroupAttributes'); SDV($AllowName,'@nopass'); $page = ReadPage($pagename, $since); if (!$page) { return false; } if (!isset($authcache)) SessionAuth($pagename, (@$_POST['authpw']) ? array('authpw' => array($_POST['authpw'] => 1)) : ''); if (@$AuthId) { $AuthList[$AuthId] = true; $AuthList["-$AuthId"] = false; } ## To allow @edit in GroupAttributes, we cache it first if (!isset($authcache['site'])) { foreach(array_keys($DefaultPasswords) as $k) { $page['=passwd'][$k]=$GroupDelimiter.$SitePrefix.$k; if(@$AuthList[$page['=passwd'][$k]]) $authcache['site'][$k]=$AuthList[$GroupDelimiter.$SitePrefix.$k]; elseif($DefaultPasswords[$k]==$AllowName or !$DefaultPasswords[$k]) $authcache['site'][$k]=true; else $authcache['site'][$k]=false; $page['=pwsource'][$k]='site'; } } $gn = FmtPageName($GroupAttributesFmt, $pagename); if (!isset($authcache[$gn])) { $gp = ReadPage($gn, READPAGE_CURRENT); foreach(array_keys($DefaultPasswords) as $k) { if(@$gp["passwd$k"]) { $authcache[$gn][$k] = UserIsAuthorized($gp["passwd$k"]); $page['=pwsource'][$k]='group'; $page['=passwd'][$k]=$gp["passwd$k"]; } else $authcache[$gn][$k]=$authcache['site'][$k]; } } foreach(array_keys($DefaultPasswords) as $k){ if(@$page["passwd$k"]) { $page['=auth'][$k]=UserIsAuthorized($page["passwd$k"]); $page['=pwsource'][$k]='page'; $page['=passwd'][$k]=$page["passwd$k"]; } else $page['=auth'][$k]=$authcache[$gn][$k]; if(@$AuthList[$GroupDelimiter.$SitePrefix.$k]) $page['=auth'][$k]=true; } AuthCascade($page); if (@$AuthList[$GroupDelimiter.$SitePrefix.'admin']) { foreach(array_keys($DefaultPasswords) as $k){$page['=auth'][$k]=true;} } if (@$page['=passwd']['read']) $NoHTMLCache |= 2; if ($level=='ALWAYS' || @$page['=auth'][$level] || (@$AuthId && @$AuthId==PageTextVar($pagename, "username"))) return $page; if (!$authprompt) return false; $GLOBALS['AuthNeeded'] = (@$_POST['authpw']) ? $page['=pwsource'][$level] . ' ' . $level : ''; PCache($pagename, $page); $postvars = ''; foreach($_POST as $k=>$v) { if ($k == 'authpw' || $k == 'authid') continue; $k = htmlspecialchars(stripmagic($k), ENT_QUOTES); $v = str_replace('$', '$', htmlspecialchars(stripmagic($v), ENT_COMPAT)); $postvars .= "\n"; } $FmtV['$PostVars'] = $postvars; $r = str_replace("'", '%37', stripmagic($_SERVER['REQUEST_URI'])); SDV($AuthPromptFmt,array(&$PageStartFmt, "

$[Password required]

$[Password]: \$PostVars
", &$PageEndFmt)); PrintFmt($pagename,$AuthPromptFmt); exit; } function UserIsAuthorized($args) { global $AuthList, $AllowName; foreach(preg_split("/[\s,]+/", $args) as $name) { if(@$AuthList[$name] || $name==$AllowName) {return true;} } return false; } function AuthCascade(&$page){ global $AuthCascade; foreach($AuthCascade as $k=>$v){ if (@$page['=auth'][$k]){ foreach((array)$v as $value){ if(!@$page['=auth'][$value]){ $page['=auth'][$value] = $page['=auth'][$k]; if ($page['=passwd'][$value] = $page['=passwd'][$k]) # assign $page['=pwsource'][$value] = "cascade:$k"; AuthCascade($page); } } } } }