PageRenderTime 53ms CodeModel.GetById 25ms RepoModel.GetById 1ms app.codeStats 0ms

/include/login_check.php

https://github.com/OmIkRoNiXz/nconf-1.2.6-1
PHP | 230 lines | 122 code | 53 blank | 55 comment | 28 complexity | a112cf8953f57d88041bf9bd3d01cea0 MD5 | raw file
  1. <?php
  2. // USER login default
  3. // for other methods, expand this file and configure it in the config part
  4. // --> AUTH_TYPE
  5. // information what is needed after this script:
  6. // - check username and pw
  7. // - set $_SESSION['group'] to GROUP_USER or GROUP_ADMIN
  8. // - optional parameters
  9. // - $_SESSION['username'] for "welcome message"
  10. // Handle loginname and password (also made encryption)
  11. $user_loginname = $_POST["username"];
  12. $user_pwd = encrypt_password($_POST["password"]);
  13. // remove pw in $_POST
  14. unset($_POST["password"]);
  15. // authentication type
  16. message($debug, "Authentication type: ".AUTH_TYPE);
  17. message($debug, "Encryption type: ".PASSWD_ENC);
  18. function prepare_password ($password){
  19. # if encryption is also in password, it has to be in UPPERCASE ( {crypt} -> {CRYPT}, {MD5} etc...
  20. if ( preg_match('/(^\{.*\})(.*)/', $password, $matched) ){
  21. # will find [0]:whole string, [1]:crypt type, [2]:password
  22. $crypt = strtoupper($matched[1]);
  23. $pw = $matched[2];
  24. if ($crypt == "{CLEAR}"){
  25. // {Clear} info is not needed. cut away!
  26. $password = $pw;
  27. }else{
  28. $password = $crypt.$pw;
  29. }
  30. }
  31. return $password;
  32. }
  33. ##
  34. ##
  35. ##
  36. ##############################################################################################
  37. if (AUTH_TYPE == "file"){
  38. //Read file
  39. $filename = "config/.file_accounts.php";
  40. if ( (file_exists($filename)) AND ( $file = fopen($filename, "r") ) ){
  41. while ( $row = fgets($file) ) {
  42. # Do not use commented rows(#) or blank rows
  43. if ( $row != "" AND !preg_match("/^\s*(#|\/\*|\*\/|<\?|\?>)/", $row) ){
  44. $user = explode("::", $row);
  45. # check uppercase crypt part, remove {CLEAR} if exists
  46. $password = prepare_password($user[1]);
  47. $user_array[$user[0]] = array("password" => $password, "group" => $user[2], "name" => $user[3]);
  48. }
  49. }
  50. fclose($file);
  51. // Authentification
  52. if ( isset($user_array["$user_loginname"]) ){
  53. if ( $user_array[$user_loginname]["password"] == $user_pwd ){
  54. //pw ok, set group
  55. $_SESSION['group'] = $user_array[$user_loginname]["group"];
  56. // get Welcome name
  57. if ( (AUTH_FEEDBACK_AS_WELCOME_NAME == 1) AND !empty($user_array[$user_loginname]["name"]) ){
  58. $_SESSION["userinfos"]['username'] = $user_array[$user_loginname]["name"];
  59. }else{
  60. $_SESSION["userinfos"]['username'] = $user_loginname;
  61. }
  62. }else{
  63. //PW not ok, login failed
  64. message($error, TXT_LOGIN_FAILED);
  65. }
  66. }else{
  67. //User not found
  68. message($error, TXT_LOGIN_FAILED);
  69. }
  70. }else{
  71. //FILE not found
  72. message($error, "Account-file not found : $filename");
  73. }
  74. ##############################################################################################
  75. }elseif (AUTH_TYPE == "sql"){
  76. // login check function
  77. ##########
  78. function auth_by_sql($username, $passwd, $sqlquery){
  79. // Connect to the database
  80. $auth_db_link = mysql_connect(AUTH_DBHOST,AUTH_DBUSER, AUTH_DBPASS, TRUE);
  81. mysql_select_db(AUTH_DBNAME, $auth_db_link);
  82. $result = db_handler($sqlquery, 'getOne', "Authentication by sql");
  83. mysql_close($auth_db_link);
  84. if ($result) {
  85. // get Welcome name
  86. if ( (AUTH_FEEDBACK_AS_WELCOME_NAME == 1) AND !empty($result) ){
  87. $_SESSION["userinfos"]['username'] = $result;
  88. }else{
  89. $_SESSION["userinfos"]['username'] = $user_loginname;
  90. }
  91. return TRUE;
  92. }else{
  93. message($error, TXT_LOGIN_FAILED);
  94. return FALSE;
  95. }
  96. }
  97. ##########
  98. // Prepare querys
  99. $auth_sqlquery_USER = AUTH_SQLQUERY_USER;
  100. $auth_sqlquery_USER = str_replace("!!!USERNAME!!!", $user_loginname, $auth_sqlquery_USER);
  101. $auth_sqlquery_USER = str_replace("!!!PASSWORD!!!", $user_pwd, $auth_sqlquery_USER);
  102. if ( defined("AUTH_SQLQUERY_ADMIN") ){
  103. $auth_sqlquery_ADMIN = AUTH_SQLQUERY_ADMIN;
  104. $auth_sqlquery_ADMIN = str_replace("!!!USERNAME!!!", $user_loginname, $auth_sqlquery_ADMIN);
  105. $auth_sqlquery_ADMIN = str_replace("!!!PASSWORD!!!", $user_pwd, $auth_sqlquery_ADMIN);
  106. }
  107. // Authentification
  108. if ( ( defined("AUTH_SQLQUERY_ADMIN") ) AND auth_by_sql($user_loginname, $user_pwd, $auth_sqlquery_ADMIN) ){
  109. $_SESSION['group'] = GROUP_ADMIN;
  110. }elseif ( auth_by_sql($user_loginname, $user_pwd, $auth_sqlquery_USER) ){
  111. $_SESSION['group'] = GROUP_USER;
  112. }else{
  113. message($error, TXT_LOGIN_FAILED);
  114. }
  115. # needed database reload, otherwise the connection is lost
  116. relaod_nconf_db_connection();
  117. ##############################################################################################
  118. }elseif (AUTH_TYPE == "ldap") {
  119. $ldapconnection = ldap_connect(LDAP_SERVER, LDAP_PORT);
  120. ldap_set_option($ldapconnection, LDAP_OPT_PROTOCOL_VERSION, 3);
  121. # Check ldap connection
  122. if($ldapconnection) {
  123. # Try to logon user to ldap
  124. $ldap_user_dn = str_replace(USER_REPLACEMENT,$user_loginname,BASE_DN);
  125. $ldap_response = @ldap_bind($ldapconnection, $ldap_user_dn, $user_pwd);
  126. if($ldap_response and $user_loginname and $user_pwd) {
  127. # If user login was successfull, look for group
  128. # admins are in group : ADMIN_GROUP
  129. # normal nconf user are in group : USER_GROUP
  130. # all other do not have access
  131. // AdminUsers
  132. $sr = ldap_search($ldapconnection, GROUP_DN, ADMIN_GROUP);
  133. $results = ldap_get_entries($ldapconnection,$sr);
  134. $Admin_user_array = $results[0]["memberuid"];
  135. // remove field count
  136. unset($Admin_user_array["count"]);
  137. // BasicUsers
  138. $sr = ldap_search($ldapconnection, GROUP_DN, USER_GROUP);
  139. $results = ldap_get_entries($ldapconnection,$sr);
  140. $Basic_user_array = $results[0]["memberuid"];
  141. // remove field count
  142. unset($Basic_user_array["count"]);
  143. // Users Infos
  144. $justthese = array("cn");
  145. //$justthese = array("cn", "description", "uid");
  146. $sr = ldap_read($ldapconnection, $ldap_user_dn, "(objectclass=*)", $justthese);
  147. $results = ldap_get_entries($ldapconnection,$sr);
  148. // get Welcome name
  149. if ( (AUTH_FEEDBACK_AS_WELCOME_NAME == 1) AND !empty($results[0]["cn"][0]) ){
  150. $_SESSION["userinfos"]["username"] = $results[0]["cn"][0];
  151. }else{
  152. $_SESSION["userinfos"]['username'] = $user_loginname;
  153. }
  154. //$_SESSION["userinfos"]["useremail"] = $results[0]["description"][0];
  155. //$_SESSION["userinfos"]["uid"] = $results[0]["uid"][0];
  156. #Check if user is in Basic userlist
  157. #or in Admin userlist
  158. if (in_array($user_loginname, $Admin_user_array) ){
  159. $_SESSION['group'] = GROUP_ADMIN;
  160. message($info, $_SESSION["group"].' access granted', "yes");
  161. }elseif (in_array($user_loginname, $Basic_user_array) ){
  162. $_SESSION['group'] = GROUP_USER;
  163. message($info, $_SESSION["group"].' access granted', "yes");
  164. }else{
  165. message($error, TXT_LOGIN_NOT_AUTHORIZED);
  166. }
  167. } else {
  168. message($error, TXT_LOGIN_FAILED);
  169. }
  170. } else {
  171. message($error, "Can not connect to ldap server");
  172. }
  173. }else{
  174. // no AUTH TYPE matched.. cant login :
  175. message($error, "No authentication type set in config, login restricted");
  176. }
  177. ?>