dom); } else { process_node_in_login($econf, $econf->doc->dom); } $econf->log_user(); } function get_login_document($econf, $login) { $uri = resolve_include_uri($econf, $login); if ($uri === FALSE) { return FALSE; } try { return document_factory($econf->req, $uri, $econf->work_directory(), FALSE); } catch (Exception $e) { log_error($e->getMessage(), $econf->log, LOG_DEBUG); return FALSE; } } function process_node_in_login($econf, $in_node) { for ($child = $in_node->firstChild; $child !== NULL; $child = $child->nextSibling) { if ($child->nodeType === XML_ELEMENT_NODE) { process_element_in_login($econf, $child); } } } function process_element_in_login($econf, $in_elm) { if ($in_elm->namespaceURI === W2ML_NS) { switch ($in_elm->localName) { case 'user': process_user_element($econf, $in_elm); return; case 'name': process_name_element($econf, $in_elm); return; case 'password': process_password_element($econf, $in_elm); return; case 'group': process_group_element($econf, $in_elm); return; } } process_node_in_login($econf, $in_elm); } function process_user_element($econf, $in_elm) { if ($econf->in_registering instanceof User) { log_error('user element in user element', $econf->log); $econf->in_registering->registering_error = TRUE; return; } $registered = register_groupable($econf, $in_elm, new User); if ($registered->registering_error) { return; } if ($registered->name === NULL) { if ($registered->password !== NULL) { log_error('user password without user name', $econf->log); return; } $user_name = $in_elm->textContent; $registered = $econf->registered_users[$user_name]; if ($registered === NULL) { log_error('using unregistered user "'.$user_name.'"', $econf->log); return; } } else { if (array_key_exists($registered->name, $econf->registered_users)) { log_error('user "'.$registered->name.'" defined twice', $econf->log); return; } $econf->registered_users[$registered->name] = $registered; } if ($econf->in_registering instanceof Group) { if ($econf->in_registering->name === NULL) { log_error('adding user "'.$registered->name.'" in unnamed group', $econf->log); return; } $registered->put_in_group($econf->in_registering); log_error('added user "'.$registered->name.'" to group "'. $econf->in_registering->name.'"', $econf->log); } } function process_group_element($econf, $in_elm) { $registered = register_groupable($econf, $in_elm, new Group); if ($registered->registering_error) { return; } if ($registered->name === NULL) { $group_name = $in_elm->textContent; $registered = $econf->registered_groups[$group_name]; if ($registered === NULL) { log_error('using unregistered group "'.$group_name.'"', $econf->log); return; } } else { if (array_key_exists($registered->name, $econf->registered_groups)) { log_error('group "'.$registered->name.'" defined twice', $econf->log); return; } $econf->registered_groups[$registered->name] = $registered; } if ($econf->in_registering instanceof Group) { if ($econf->in_registering->name === NULL) { log_error('adding group "'.$registered->name.'" in unnamed group', $econf->log); return; } $registered->put_in_group($econf->in_registering); log_error('added group "'.$registered->name.'" to group "'. $econf->in_registering->name.'"', $econf->log); } } function register_groupable($econf, $in_elm, $groupable) { $up_registering = $econf->in_registering; $econf->in_registering = $groupable; process_node_in_login($econf, $in_elm); $registered = $econf->in_registering; $econf->in_registering = $up_registering; return $registered; } function process_name_element($econf, $in_elm) { process_node_in_login($econf, $in_elm); if ($econf->in_registering === NULL) { log_error('name element not descendant of user or group element', $econf->log); } elseif ($econf->in_registering->name !== NULL) { log_error('several name elements for user or group', $econf->log); $econf->in_registering->registering_error = TRUE; } else { $econf->in_registering->name = $in_elm->textContent; } } function process_password_element($econf, $in_elm) { process_node_in_login($econf, $in_elm); if (!($econf->in_registering instanceof User)) { log_error('password element not descendant of user element', $econf->log); } elseif ($econf->in_registering->password !== NULL) { log_error('several password elements for user', $econf->log); $econf->in_registering->registering_error = TRUE; } else { $econf->in_registering->password = $in_elm->textContent; } } ?>