static void account_tuntab_fn(const char *token, char *value, void *setting, FILE *f) { TUNTAB *ttab = setting; if (value) { if (strlen(value) == 0) { clear_tuntab(ttab); } else { chk_tuntab(value, ttab); } return; } if (ttab->bt_caidfrom[0] || cfg.http_full_cfg) { value = mk_t_tuntab(ttab); fprintf_conf(f, token, "%s\n", value); free_mk_t(value); } }
static void monitor_set_account(char *args){ struct s_auth *account; char delimiter[] = " ="; char *ptr, *saveptr1 = NULL; int32_t argidx, i, found; char *argarray[3]; static const char *token[]={"au", "sleep", "uniq", "monlevel", "group", "services", "betatunnel", "ident", "caid", "chid", "class", "hostname", "expdate", "keepalive", "disabled"}; int32_t tokencnt = sizeof(token)/sizeof(char *); char buf[256], tmp[64]; argidx = 0; found = 0; snprintf(tmp, sizeof(tmp), "%s",args); snprintf(buf, sizeof(buf), "[S-0000]setuser: %s check\n", tmp); monitor_send_info(buf, 0); ptr = strtok_r(args, delimiter, &saveptr1); // resolve arguments while(ptr != NULL) { argarray[argidx]=trim(ptr); ptr = strtok_r(NULL, delimiter, &saveptr1); argidx++; } if(argidx != 3) { snprintf(buf, sizeof(buf), "[S-0000]setuser: %s failed - wrong number of parameters (%d)\n",tmp, argidx); monitor_send_info(buf, 0); snprintf(buf, sizeof(buf), "[S-0000]setuser: %s end\n", tmp); monitor_send_info(buf, 1); return; } //search account for (account=cfg.account; (account) ; account=account->next){ if (!strcmp(argarray[0], account->usr)){ found = 1; break; } } if (found != 1){ snprintf(buf, sizeof(buf), "[S-0000]setuser: %s failed - user %s not found\n",tmp , argarray[0]); monitor_send_info(buf, 0); snprintf(buf, sizeof(buf), "[S-0000]setuser: %s end\n", tmp); monitor_send_info(buf, 1); return; } found = -1; for (i = 0; i < tokencnt; i++){ if (!strcmp(argarray[1], token[i])){ // preparing the parameters before re-load switch(i) { case 6: clear_tuntab(&account->ttab); break; //betatunnel case 8: clear_caidtab(&account->ctab); break; //Caid } found = i; } } if (found < 0){ snprintf(buf, sizeof(buf), "[S-0000]setuser: parameter %s not exist. possible values:\n", argarray[1]); monitor_send_info(buf, 0); for (i = 0; i < tokencnt; i++){ snprintf(buf, sizeof(buf), "[S-0000]%s\n", token[i]); monitor_send_info(buf, 0); } snprintf(buf, sizeof(buf),"[S-0000]setuser: %s end\n", tmp); monitor_send_info(buf, 1); return; } else { chk_account(token[found], argarray[2], account); } if (write_userdb()==0) cs_reinit_clients(cfg.account); snprintf(buf, sizeof(buf),"[S-0000]setuser: %s done - param %s set to %s\n", tmp, argarray[1], argarray[2]); monitor_send_info(buf, 1); }