guohui преди 1 година
родител
ревизия
604b00c285
променени са 1 файла, в които са добавени 165 реда и са изтрити 9 реда
  1. 165 9
      pro/src/paras.c

+ 165 - 9
pro/src/paras.c

@@ -1190,11 +1190,13 @@ static int proc_mail(char *path, int op, mail_info_t *mail)
                 mail_recv_t *recv=&pmail->recv[i];
 
                 recv->idx = i;
-                sprintf(token, "mail:recv%d.use", i+1);
-                r = ini_rw(dic, token, &recv->use, sizeof(recv->use), TYPE_INT, op); if(r) goto quit;
+                if(op==PARAS_READ || (op==PARAS_WRITE && recv->use)) {
+                    sprintf(token, "mail:recv%d.use", i+1);
+                    r = ini_rw(dic, token, &recv->use, sizeof(recv->use), TYPE_INT, op); if(r) goto quit;
 
-                sprintf(token, "mail:recv%d.account", i+1);
-                r = ini_rw(dic, token, recv->account, sizeof(recv->account), TYPE_STR, op); if(r) goto quit;
+                    sprintf(token, "mail:recv%d.account", i+1);
+                    r = ini_rw(dic, token, recv->account, sizeof(recv->account), TYPE_STR, op); if(r) goto quit;
+                }
             }
 
             if(op==PARAS_READ) {
@@ -1331,16 +1333,16 @@ static int proc_role(char *path, int op, RoleInfo *role)
                 r = proc_role(path, PARAS_CHECK, tmp); if(r) break;
 
                 sprintf(token, "role:role%d.name", i);
-                r = ini_rw(dic, token, prole->roleName, sizeof(prole->roleName), TYPE_STR, op);    if(r) break;
+                r = ini_rw(dic, token, tmp->roleName, sizeof(tmp->roleName), TYPE_STR, op);    if(r) break;
 
                 sprintf(token, "role:role%d.level", i);
-                r = ini_rw(dic, token, &prole->roleLevel, sizeof(prole->roleLevel), TYPE_STR, op);  if(r) break;
+                r = ini_rw(dic, token, &tmp->roleLevel, sizeof(tmp->roleLevel), TYPE_INT, op);  if(r) break;
 
                 sprintf(token, "role:role%d.auth", i);
-                r = ini_rw(dic, token, prole->roleAuthority, sizeof(prole->roleAuthority), TYPE_STR, op); if(r) break;
+                r = ini_rw(dic, token, tmp->roleAuthority, sizeof(tmp->roleAuthority), TYPE_STR, op); if(r) break;
 
                 sprintf(token, "role:role%d.sort", i);
-                r = ini_rw(dic, token, &prole->roleSort, sizeof(prole->roleAuthority), TYPE_INT, op); if(r) break;
+                r = ini_rw(dic, token, &tmp->roleSort, sizeof(tmp->roleAuthority), TYPE_INT, op); if(r) break;
 
                 sprintf(token, "role:role%d.time", i);
                 get_curtime_str(temp, sizeof(temp));
@@ -1365,6 +1367,158 @@ static int proc_role(char *path, int op, RoleInfo *role)
 
     return r;
 }
+static int proc_user(char *path, int op, UserInfo *user)
+{
+    int i=1,r=0;
+    char temp[100];
+    char *p,token[100];
+    dictionary *dic=NULL;
+    UserInfo user2,*puser=user;
+    GlobalDeviceManager *dm=get_dm();
+
+    switch(op) {
+        case PARAS_CHECK:
+        {
+            if(!puser->userName[0]) {
+                LOGE("___ check user, userName is null\n");
+                r = -1; 
+            }
+
+            if(!puser->userPW[0]) {
+                LOGE("___ check user, userPW is invalid\n");
+                r = -1; 
+            }
+
+            if(!puser->nickName[0]) {
+                LOGE("___ check user, nickName is null\n");
+                r = -1; 
+            }
+
+            if(puser->roleID>3) {
+                LOGE("___ check user, roleID is invalid, correct value is 1/2/3\n");
+                r = -1; 
+            }
+
+            if(!puser->createTime[0]) {
+                LOGE("___ check user, createTime is null\n");
+                r = -1; 
+            }
+
+            return r;
+        }
+        break;
+
+        case PARAS_CREATE:
+        {
+            FILE *fp=fopen(path, "a+");
+            if(!fp) {
+                LOGE("___ %s open failed\n", path);
+                return -1;
+            }
+
+            get_time_str(temp, sizeof(temp), time(NULL));
+            fprintf(fp, "[user]\n");
+            fprintf(fp, "user1.userName    = \"admin\"\n");
+            fprintf(fp, "user1.userPW      = \"admin\"\n");
+            fprintf(fp, "user1.nickName    = \"administer\"\n");
+            fprintf(fp, "user1.roleID      = \"1\"\n");
+            fprintf(fp, "user1.createTime  = \"%s\"\n", temp);
+            fprintf(fp, "\n");
+
+            fprintf(fp, "user2.userName    = \"user\"\n");
+            fprintf(fp, "user2.userPW      = \"123456\"\n");
+            fprintf(fp, "user2.nickName    = \"users\"\n");
+            fprintf(fp, "user2.roleID      = \"3\"\n");
+            fprintf(fp, "user2.createTime  = \"%s\"\n", temp);
+            fprintf(fp, "\n");
+
+            fclose(fp);
+            return 0;
+        }
+        break;
+
+        case PARAS_READ:
+        {
+            puser = &user2;
+            dic = iniparser_load(path); if(!dic) return -1;
+
+            while(1) {
+                sprintf(token, "role:role%d.name", i);
+                r = ini_rw(dic, token, puser->userName, sizeof(puser->userName), TYPE_STR, op); if(r) break;
+
+                sprintf(token, "role:role%d.password", i);
+                r = ini_rw(dic, token, &puser->userPW, sizeof(puser->userPW), TYPE_STR, op); if(r) break;
+
+                sprintf(token, "role:role%d.nick_name", i);
+                r = ini_rw(dic, token, puser->nickName, sizeof(puser->nickName), TYPE_STR, op); if(r) break;
+
+                sprintf(token, "role:role%d.role_id", i);
+                r = ini_rw(dic, token, &puser->roleID, sizeof(puser->roleID), TYPE_INT, op); if(r) break;
+
+                sprintf(token, "role:role%d.time", i);
+                r = ini_rw(dic, token, puser->createTime, sizeof(puser->createTime), TYPE_STR, op); if(r) break;
+
+                r = proc_user(path, PARAS_CHECK, puser);
+                if(r==0) {
+                    r = dev_update_user_info(dm->db, puser);
+                }
+                if(r) break;
+
+                i++;
+            }
+        }
+        break;
+
+        case PARAS_WRITE:
+        {
+            UserInfo *tmp,*node,*next;
+            
+            puser = &user2;
+            INIT_LIST_HEAD(&puser->list);
+            r = dev_get_user_info(dm->db, puser);    if(r) return -1;
+            dic = dictionary_new(0);                 if(!dic) return -1;
+
+            list_for_each_entry(tmp, &puser->list, list) {
+                if(!tmp) break;
+
+                r = proc_user(path, PARAS_CHECK, tmp); if(r) break;
+
+                sprintf(token, "role:role%d.name", i);
+                r = ini_rw(dic, token, tmp->userName, sizeof(tmp->userName), TYPE_STR, op); if(r) break;
+
+                sprintf(token, "role:role%d.password", i);
+                r = ini_rw(dic, token, &tmp->userPW, sizeof(tmp->userPW), TYPE_STR, op); if(r) break;
+
+                sprintf(token, "role:role%d.nick_name", i);
+                r = ini_rw(dic, token, tmp->nickName, sizeof(tmp->nickName), TYPE_STR, op); if(r) break;
+
+                sprintf(token, "role:role%d.role_id", i);
+                r = ini_rw(dic, token, &tmp->roleID, sizeof(tmp->roleID), TYPE_INT, op); if(r) break;
+
+                sprintf(token, "role:role%d.time", i);
+                get_curtime_str(temp, sizeof(temp));
+                r = ini_rw(dic, token, temp, sizeof(temp), TYPE_STR, op); if(r) break;
+
+                i++;
+            }
+
+            list_for_each_entry_safe(node,next,&puser->list,list) {
+                list_del(&node->list); free(node);
+            }
+
+            if(r==0) {
+                r = ini_dump(path, dic);
+            }
+        }
+        break;
+
+        default:
+        return -1;
+    }
+    iniparser_freedict(dic);
+
+    return r;
+}
 static int proc_group(char *path, int op, GroupInfo *group)
 {
     int i=1,r=0;
@@ -2735,6 +2889,7 @@ int paras_serv_xport(char *path, int io)
         r = proc_mail(path,  PARAS_READ, NULL);
         r = proc_snmp(path,  PARAS_READ, NULL);
         r = proc_role(path,  PARAS_READ, NULL);
+        r = proc_user(path,  PARAS_READ, NULL);
         r = proc_group(path, PARAS_READ, NULL);
         //r = proc_timer(path, PARAS_READ, NULL);
     }
@@ -2744,11 +2899,12 @@ int paras_serv_xport(char *path, int io)
         r = proc_mail(path,  PARAS_WRITE, NULL);
         r = proc_snmp(path,  PARAS_WRITE, NULL);
         r = proc_role(path,  PARAS_WRITE, NULL);
+        r = proc_user(path,  PARAS_WRITE, NULL);
         r = proc_group(path, PARAS_WRITE, NULL);
         //r = proc_timer(path, PARAS_WRITE, NULL);
     }
 
-    return r;
+    return 0;
 }
 
 int paras_alarm_xport(char *path, int io)