Parcourir la source

radius ldap 本机数据库认证。匹配网页

liyi il y a 9 mois
Parent
commit
b2cf8512e2

+ 227 - 47
pro/src/appweb_handle.c

@@ -96,6 +96,8 @@ static char* g_product_board_cpu[] = {
 static web_handle_t webHandle;
 static int webSetCallback(void);
 
+extern UserInfo _g_User_list;
+
 ///////////////////////////////////////////////////
 static char* getUserNamebyToken(char* Token)
 {
@@ -566,7 +568,14 @@ static void *web_thread(void *arg)
         MG_ERROR(("cannot listen on %s\n", https_addr));
         return NULL;
     }
+    //get user info message
+    INIT_LIST_HEAD(&_g_User_list.list);
 
+    //get current db user infoinfomation
+    if (0 != dev_get_user_info(__globalDeviceManage.db, &_g_User_list))
+    {
+        printf("get user db failed");
+    }
 
     webSetCallback();
     printf("_____mgHandle.cnt: %d, rootdir: %s\n", mh->cnt, mh->rootDir);
@@ -658,16 +667,73 @@ static void loginFunc(void* conn)
     bool LoginFlag = false;
 
     // 查询用户信息
-    UserInfo User_list;
-    INIT_LIST_HEAD(&User_list.list);
+     UserInfo User_list;
+     INIT_LIST_HEAD(&User_list.list);
+    UserInfo *_UserInfoTemp;
+    list_for_each_entry(_UserInfoTemp, &_g_User_list.list, list)
+    {
+        if (strcmp(_UserInfoTemp->userName,_newUserLogin->user_name)==0 && strcmp(_UserInfoTemp->userPW,_newUserLogin->user_password)==0)
+        {
+            LoginFlag=true;
+            //_GlobalUserInfoNew = *_UserInfoTemp;
+            break;
+        }
+    }
 
     if(__globalDeviceManage._globalDevInfo.misc.radius || __globalDeviceManage._globalDevInfo.ldap.ldap)        //renzeng
     {
-        UserInfo *_UserInfoTemp = (UserInfo *)malloc(sizeof(UserInfo));
-        if(_UserInfoTemp)
+        
+        //check is or not database users,if database uers not auth;
+        if(LoginFlag==true)
         {
+            char temp[256] = {0};
+            UserInfo info;
+            int ret;
+            ret = dev_get_sigle_user_info(__globalDeviceManage.db,&info,_UserInfoTemp->userName,_UserInfoTemp->userPW);
+            // auth 
+            if(ret != 0)
+            {
+                // auth  again
+                sprintf(temp,"radlogin -f /etc/radiusclient/radiusclient.conf -u %s -p %s",_newUserLogin->user_name,_newUserLogin->user_password);
+                ret = system(temp);
+                if(ret)
+                {
+                    memset(temp,0,sizeof(temp));
+                    sprintf(temp,"ldapwhoami -x -D \"%s\" -H ldap://%s -w %s",_newUserLogin->user_name,__globalDeviceManage._globalDevInfo.ldap.ldip_server,_newUserLogin->user_password);
+                    ret = system(temp); 
+                    if(ret)
+                    {
+                        // delete current 
+                        UserInfo * temp;
+                        list_for_each_entry(temp, &_g_User_list.list, list)
+                        {
+                            if(temp == _UserInfoTemp)
+                            {
+                                list_del(&temp->list);
+                                free(temp);
+                                _UserInfoTemp = NULL;
+                                LoginFlag = false;
+                            }
+                        }
+
+                    }else
+                    {
+                        _GlobalUserInfoNew = *_UserInfoTemp;
+                    }                   
+                }else
+                {
+                    _GlobalUserInfoNew = *_UserInfoTemp;
+                }
+            }else
+            {
+                _GlobalUserInfoNew = *_UserInfoTemp;
+            }
+        }
 
-            int auth_flag = 0;
+        //check current exsit user!!!
+       else 
+        {
+            _UserInfoTemp = (UserInfo *)malloc(sizeof(UserInfo));
             char temp[256] = {0};
             sprintf(temp,"radlogin -f /etc/radiusclient/radiusclient.conf -u %s -p %s",_newUserLogin->user_name,_newUserLogin->user_password);
             int ret = system(temp);
@@ -675,27 +741,23 @@ static void loginFunc(void* conn)
             {
                 memset(temp,0,sizeof(temp));
                 sprintf(temp,"ldapwhoami -x -D \"%s\" -H ldap://%s -w %s",_newUserLogin->user_name,__globalDeviceManage._globalDevInfo.ldap.ldip_server,_newUserLogin->user_password);
+
+                //printf("%s",temp);
                 ret = system(temp);
                 if(ret != 0)
                 {
-                    free(_UserInfoTemp);
-                    _UserInfoTemp = NULL;
-                    if (0 == dev_get_user_info(__globalDeviceManage.db, &User_list))
+                    // is or not new add users
+                    ret = dev_get_sigle_user_info(__globalDeviceManage.db,_UserInfoTemp,_newUserLogin->user_name,_newUserLogin->user_password);
+                    if(ret)
                     {
-                        UserInfo *_UserInfoTemp = NULL;
-                        list_for_each_entry(_UserInfoTemp, &User_list.list, list)
-                        {
-                            if (_UserInfoTemp == NULL)
-                                break;
-
-                            if (strcmp(_UserInfoTemp->userName,_newUserLogin->user_name)==0 && strcmp(_UserInfoTemp->userPW,_newUserLogin->user_password)==0)
-                            {
-                                LoginFlag=true;
-                                _GlobalUserInfoNew = *_UserInfoTemp;
-                                break;
-                            }
-                        }
-                    }                   
+                        free(_UserInfoTemp);
+                        _UserInfoTemp = NULL;
+                    }else
+                    {
+                        LoginFlag=true;
+                        list_add_tail(&_UserInfoTemp->list, &_g_User_list.list);
+                        _GlobalUserInfoNew = *_UserInfoTemp;                          
+                    }                
                 }else
                 {
                     LoginFlag=true;
@@ -705,47 +767,152 @@ static void loginFunc(void* conn)
                     memcpy(_UserInfoTemp->nickName,"ldap auth",strlen("ldap auth"));
                     memcpy(_UserInfoTemp->userName,_newUserLogin->user_name,strlen(_newUserLogin->user_name));
                     memcpy(_UserInfoTemp->userPW,_newUserLogin->user_password,strlen(_newUserLogin->user_password));
-                    _GlobalUserInfoNew = *_UserInfoTemp;
-                    
+                    list_add_tail(&_UserInfoTemp->list, &_g_User_list.list);
+                    _GlobalUserInfoNew = *_UserInfoTemp;   
                 }
+
             }else
             {
                 LoginFlag=true;
                 memset(_UserInfoTemp,0,sizeof(UserInfo));
                 _UserInfoTemp->product_id = __globalDeviceManage._globalDevInfo.product.id;
-                _UserInfoTemp->userID = 1;
                 _UserInfoTemp->roleID = 1;
-                memcpy(_UserInfoTemp->nickName,"radius auth",strlen("radius auth"));
+                memcpy(_UserInfoTemp->nickName,"ldap auth",strlen("ldap auth"));
                 memcpy(_UserInfoTemp->userName,_newUserLogin->user_name,strlen(_newUserLogin->user_name));
                 memcpy(_UserInfoTemp->userPW,_newUserLogin->user_password,strlen(_newUserLogin->user_password));
-
+                list_add_tail(&_UserInfoTemp->list, &_g_User_list.list);
                 _GlobalUserInfoNew = *_UserInfoTemp;
             }
         }
-
-
     }else
     {
-        if (0 == dev_get_user_info(__globalDeviceManage.db, &User_list))
+        // is or not new add users
+        int ret;
+        UserInfo user={0};
+        ret = dev_get_sigle_user_info(__globalDeviceManage.db,&user,_newUserLogin->user_name,_newUserLogin->user_password);
+        if(LoginFlag==true)
         {
-            UserInfo *_UserInfoTemp = NULL;
-            list_for_each_entry(_UserInfoTemp, &User_list.list, list)
+            if(ret)
             {
-                if (_UserInfoTemp == NULL)
-                    break;
-
-                if (strcmp(_UserInfoTemp->userName,_newUserLogin->user_name)==0 && strcmp(_UserInfoTemp->userPW,_newUserLogin->user_password)==0)
+                //delete 
+                UserInfo * temp;
+                list_for_each_entry(temp, &_g_User_list.list, list)
                 {
-                    LoginFlag=true;
-                    _GlobalUserInfoNew = *_UserInfoTemp;
-                    break;
+                    if(temp == _UserInfoTemp)
+                    {
+                        list_del(&temp->list);
+                        free(temp);
+                        _UserInfoTemp = NULL;
+                        LoginFlag = false;
+                    }
                 }
+            }else
+            {
+                _GlobalUserInfoNew = *_UserInfoTemp;                          
+            }       
+        }else
+        {
+            if(ret)
+            {
+
+            }else
+            {
+                _UserInfoTemp = (UserInfo *)malloc(sizeof(UserInfo));
+                memcpy(_UserInfoTemp,&user,sizeof(UserInfo));
+                LoginFlag = true;
+                list_add_tail(&_UserInfoTemp->list, &_g_User_list.list);
+                _GlobalUserInfoNew = *_UserInfoTemp;
             }
         }
-
     }
-
-
+        
+    //     UserInfo *_UserInfoTemp = (UserInfo *)malloc(sizeof(UserInfo));
+    //     if(_UserInfoTemp)
+    //     {
+
+    //         int auth_flag = 0;
+    //         char temp[256] = {0};
+    //         sprintf(temp,"radlogin -f /etc/radiusclient/radiusclient.conf -u %s -p %s",_newUserLogin->user_name,_newUserLogin->user_password);
+    //         int ret = system(temp);
+    //         if(ret != 0)
+    //         {
+    //             memset(temp,0,sizeof(temp));
+    //             sprintf(temp,"ldapwhoami -x -D \"%s\" -H ldap://%s -w %s",_newUserLogin->user_name,__globalDeviceManage._globalDevInfo.ldap.ldip_server,_newUserLogin->user_password);
+    //             ret = system(temp);
+    //             if(ret != 0)
+    //             {
+    //                 free(_UserInfoTemp);
+    //                 _UserInfoTemp = NULL;
+    //                 if (0 == dev_get_user_info(__globalDeviceManage.db, &User_list))
+    //                 {
+    //                     UserInfo *_UserInfoTemp = NULL;
+    //                     list_for_each_entry(_UserInfoTemp, &User_list.list, list)
+    //                     {
+    //                         if (_UserInfoTemp == NULL)
+    //                             break;
+
+    //                         if (strcmp(_UserInfoTemp->userName,_newUserLogin->user_name)==0 && strcmp(_UserInfoTemp->userPW,_newUserLogin->user_password)==0)
+    //                         {
+    //                             LoginFlag=true;
+    //                             _GlobalUserInfoNew = *_UserInfoTemp;
+    //                             break;
+    //                         }
+    //                     }
+    //                 }                   
+    //             }else
+    //             {
+    //                 LoginFlag=true;
+    //                 memset(_UserInfoTemp,0,sizeof(UserInfo));
+    //                 _UserInfoTemp->product_id = __globalDeviceManage._globalDevInfo.product.id;
+    //                 _UserInfoTemp->roleID = 1;
+    //                 memcpy(_UserInfoTemp->nickName,"ldap auth",strlen("ldap auth"));
+    //                 memcpy(_UserInfoTemp->userName,_newUserLogin->user_name,strlen(_newUserLogin->user_name));
+    //                 memcpy(_UserInfoTemp->userPW,_newUserLogin->user_password,strlen(_newUserLogin->user_password));
+    //                 list_add_tail(&_UserInfoTemp->list, &User_list.list);
+    //                 _GlobalUserInfoNew = *_UserInfoTemp;
+                    
+    //             }
+    //         }else
+    //         {
+    //             LoginFlag=true;
+    //             memset(_UserInfoTemp,0,sizeof(UserInfo));
+    //             _UserInfoTemp->product_id = __globalDeviceManage._globalDevInfo.product.id;
+    //             _UserInfoTemp->userID = 1;
+    //             _UserInfoTemp->roleID = 1;
+    //             memcpy(_UserInfoTemp->nickName,"radius auth",strlen("radius auth"));
+    //             memcpy(_UserInfoTemp->userName,_newUserLogin->user_name,strlen(_newUserLogin->user_name));
+    //             memcpy(_UserInfoTemp->userPW,_newUserLogin->user_password,strlen(_newUserLogin->user_password));
+    //             list_add_tail(&_UserInfoTemp->list, &User_list.list);
+    //             _GlobalUserInfoNew = *_UserInfoTemp;
+    //         }
+    //     }
+
+
+    // }else
+    // {
+    //     if (0 == dev_get_user_info(__globalDeviceManage.db, &User_list))
+    //     {
+    //         UserInfo *_UserInfoTemp = NULL;
+    //         list_for_each_entry(_UserInfoTemp, &User_list.list, list)
+    //         {
+    //             if (_UserInfoTemp == NULL)
+    //                 break;
+
+    //             if (strcmp(_UserInfoTemp->userName,_newUserLogin->user_name)==0 && strcmp(_UserInfoTemp->userPW,_newUserLogin->user_password)==0)
+    //             {
+    //                 LoginFlag=true;
+    //                 _GlobalUserInfoNew = *_UserInfoTemp;
+    //                 break;
+    //             }
+    //         }
+    //     }
+
+    // }
+    // UserInfo *_UserInfoTemp = NULL;
+    // list_for_each_entry(_UserInfoTemp, &User_list.list, list)
+    // {
+    //     list_del(_UserInfoTemp);
+    // }
 
 
     //if (strcmp(_newUserLogin.user_name, "gowone") == 0 && strcmp(_newUserLogin.user_password,"gowone520") == 0)
@@ -847,16 +1014,27 @@ static void getUserRouters(void* conn)
     char *rx_Head_buf = (char*)hm->head.buf;
 
     // 查询用户信息
-    UserInfo User_list;
-    INIT_LIST_HEAD(&User_list.list);
+    // UserInfo User_list;
+    // INIT_LIST_HEAD(&User_list.list);
     // 查询角色信息
-    RoleInfo Role_list;
-    INIT_LIST_HEAD(&Role_list.list);
+   // RoleInfo Role_list;
+   // INIT_LIST_HEAD(&Role_list.list);
 
     g_token = json_to_Token_info(rx_Head_buf);
+    char *nName = getUserNamebyToken(g_token);
     // 根据token获取用户及用户权限
     int nRoleID=3;
-    if (0 == dev_get_user_info(__globalDeviceManage.db, &User_list) )
+    UserInfo *_UserInfoTemp= NULL;
+    list_for_each_entry(_UserInfoTemp, &_g_User_list.list, list)
+    {
+        if (strcmp(nName,_UserInfoTemp->userName)==0)
+        {
+            nRoleID = _UserInfoTemp->roleID;
+        }
+    }
+    
+/*
+   if (0 == dev_get_user_info(__globalDeviceManage.db, &User_list) )
     {
         char *nName = getUserNamebyToken(g_token);
         if (nName != NULL)
@@ -864,6 +1042,7 @@ static void getUserRouters(void* conn)
                nRoleID = GetRoleIDByUserName(nName,&User_list);
         }
     }
+*/ 
     SetMenuAuthority(nRoleID);
 
 
@@ -4265,6 +4444,7 @@ static void serviceManagement(void *conn)
             memcpy(&gdm->_globalDevInfo.ldap.ldip_server,&ldap.ldip_server,sizeof(ldap.ldip_server));
         }
         paras_save();
+        ack_str = ctrl_sts_ack_to_json();
     }
     else if(strcmp(_serviceManageRequestInfo.type,"SmtpSave")==0)
     {

+ 9 - 0
pro/src/common.c

@@ -30,6 +30,8 @@ char _GlobalUserToken[64];
 MenuAuthority _GlobalMenuAuthority;
 NTPManager _globalNTPManager;
 SNMPManager _globalSNMPManager;
+UserInfo _g_User_list;                 // all user  infomation contener ldap radius
+
 
 int SMS_SEND_COUNT = 0;
 
@@ -960,7 +962,10 @@ void SetMenuAuthority(int RoleID)
         _GlobalMenuAuthority.ShfwEnabled = true;
         _GlobalMenuAuthority.GysbEnabled = true;
         _GlobalMenuAuthority.BroadcastEnable = true;
+#if (CHIP_TYPE == CHIP_T113i)
         _GlobalMenuAuthority.RadiusEnabled = false;
+        _GlobalMenuAuthority.LdapEnabled = false;
+#endif
     }
     // 管理员
     else if (RoleID == 2)
@@ -1032,7 +1037,10 @@ void SetMenuAuthority(int RoleID)
         _GlobalMenuAuthority.ShfwEnabled = false;
         _GlobalMenuAuthority.GysbEnabled = true;
         _GlobalMenuAuthority.BroadcastEnable = true;
+#if (CHIP_TYPE == CHIP_T113i)
         _GlobalMenuAuthority.RadiusEnabled = false;
+        _GlobalMenuAuthority.LdapEnabled = false;
+#endif
     }
     //普通用户
     else
@@ -1088,6 +1096,7 @@ void SetMenuAuthority(int RoleID)
         _GlobalMenuAuthority.GysbEnabled = false;
         _GlobalMenuAuthority.BroadcastEnable = false;
         _GlobalMenuAuthority.RadiusEnabled = false;
+        _GlobalMenuAuthority.LdapEnabled = false;
     }
     
 }

+ 19 - 0
pro/src/json_handle.c

@@ -794,6 +794,25 @@ char* user_routers_info_to_json(void)
     if(_GlobalMenuAuthority.RadiusEnabled)cJSON_AddItemToObject(children6_data_array, "children", children6_data9_filed);
 
 
+
+
+    cJSON* children6_data10_filed = cJSON_CreateObject(); 
+    cJSON_AddStringToObject(children6_data10_filed,"name","Ldapsz");    
+    cJSON_AddStringToObject(children6_data10_filed,"path","Ldapsz");  
+    cJSON_AddBoolToObject(children6_data10_filed,"hidden",false); 
+    cJSON_AddStringToObject(children6_data10_filed,"component","fwgl/ldapsz/index");  
+    cJSON* children6_meta10_data1_filed = cJSON_CreateObject(); 
+    cJSON_AddStringToObject(children6_meta10_data1_filed,"title",language_Ldap_setting[dm->_globalDevInfo.product.language]);   
+    cJSON_AddStringToObject(children6_meta10_data1_filed,"icon","date-range");   
+    cJSON_AddBoolToObject(children6_meta10_data1_filed,"noCache",false); 
+    cJSON_AddStringToObject(children6_meta10_data1_filed,"link","");    
+    cJSON_AddItemToObject(children6_data10_filed, "meta", children6_meta10_data1_filed);
+    if(_GlobalMenuAuthority.LdapEnabled)cJSON_AddItemToObject(children6_data_array, "children", children6_data10_filed);
+
+    
+
+
+
     cJSON_AddItemToObject(data6_filed, "children", children6_data_array);
     if(_GlobalMenuAuthority.ServiceEnabled)cJSON_AddItemToObject(data_array, "data", data6_filed);
 

+ 12 - 0
pro/src/language_common.c

@@ -477,6 +477,18 @@ const char * language_Radius_setting[LANG_MAX] =
     "Radius設定",
 };
 
+const char * language_Ldap_setting[LANG_MAX] =
+{
+    "Ldap",   
+    "Ldap settings",
+    "РНастройка радиуса",
+    "Réglage du rayon",
+    "LdapEinstellung",
+    "Ajuste de Ldap",
+    "Configuração de Ldap",
+    "Impostazione del Ldap",
+    "Ldap設定",
+};
 
 
 

+ 3 - 0
pro/src/language_common.h

@@ -107,4 +107,7 @@ extern const char* language_Operation_Failed[LANG_MAX];
 extern const char * language_alarm_immerse[LANG_MAX];
 extern const char * language_Radius_setting[LANG_MAX];
 
+extern const char * language_Ldap_setting[LANG_MAX];
+
+
 #endif

+ 35 - 0
pro/src/sqlite_handle.c

@@ -3678,6 +3678,41 @@ int dev_insert_user_info(sqlite3 *db,UserInfo* _globaluserInfo)
     return 0;
 }
 
+int dev_get_sigle_user_info(sqlite3 *db, UserInfo* _globaluserInfo,char *name,char* password)
+{
+    int res = 0 ;
+    int rowIndex = 1 ;
+    char *errorMsg = NULL;
+    int nrow = 0;               //满足条件的记录数目
+    int ncolumn = 0;            //每条记录包含的字段数据
+    char** pResult = NULL;  //用来指向sql执行结果的指针
+    char* err_msg=NULL;
+    char select_sql[1024] = {0};
+
+    sprintf(select_sql, "SELECT * from Table_Userinfo WHERE userName=\"%s\" AND userPW=\"%s\";",name,password);
+    res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
+    if(res != SQLITE_OK) {
+        log_e("sqlite handle error: %s\n%s\n", err_msg,select_sql); sqlite3_free(err_msg);
+        return -1 ; 
+    }
+    if(nrow == 0)
+    {
+        return -1;
+    }
+
+    _globaluserInfo->product_id = __globalDeviceManage._globalDevInfo.product.id;
+    _globaluserInfo->userID =  atoi(pResult[1]);
+    strcpy(_globaluserInfo->userName,pResult[2]);
+    strcpy(_globaluserInfo->userPW,pResult[3]);
+    strcpy(_globaluserInfo->nickName,pResult[4]);
+    _globaluserInfo->roleID =  atoi(pResult[5]);
+    strcpy(_globaluserInfo->createTime,pResult[6]); 
+    sqlite3_free_table(pResult); 
+    return 0;
+}
+
+
+
 int dev_get_user_info(sqlite3 *db, UserInfo* _globaluserInfo)
 {
     int res = 0 ;

+ 2 - 0
pro/src/sqlite_handle.h

@@ -174,6 +174,8 @@ int dev_SMS_update_recv(sqlite3 *db, CellInfo_t *recv);
 int dev_sql_VACCUM(sqlite3 *db);
 int dev_sql_set_overwrite(int flag);
 
+int dev_get_sigle_user_info(sqlite3 *db, UserInfo* _globaluserInfo,char *name,char* password);
+
 
 enum {
     IO_IMPORT=0,