这操作数据库的添加landns函数,我是不是可以使用,就不用在CLI中去管ID的重复问题?
APPL_ERRCODE dmDnsServerRuleAdd(const CFG_DNSSERVER_RULE_T *ent)
{
APPL_ERRCODE ret = ERR_NO_ERROR;
TPCONFIG_SET_INPUT st = {0};
INT64 maxScore = 0;
unsigned id;
char key[TPDATA_KEY_MAX_LEN] = {0};
char id_buf[16];
PFM_ENSURE_RET_VAL(ent, ERR_APPL_C_PARAM_INVALID);
PFM_IF_FAIL_DONE(ret, tpConfig_setResourceInit(&st, TPCONFIG_INIT_ENTRY));
/* 分配/确定 id(与 IPS 范式一致) */
tpConfig_getMaxScore(TPZSET_DNSPROXY_DNSSERVER, &maxScore);
id = (ent->id && ent->id[0] != '\0') ? (unsigned)atoi(ent->id) : (unsigned)maxScore + 1;
/* id→key,score=id */
dmDnsServerRuleKeyGetById(id, key, sizeof(key));
PFM_IF_FAIL_DONE(ret, tpConfig_objAddKeyScoreForSet(&st, TPCONFIG_INIT_ENTRY, key, id));
/* 字段写入(确保 id 字段非空) */
snprintf(id_buf, sizeof(id_buf), "%u", id);
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_ID, id_buf));
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_NAME, ent->name));
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_TYPE, ent->type));
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_DOMAIN, ent->domain));
// PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_ALIASES, ent->aliases));
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_STATUS, ent->status));
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_LANS, ent->lan_networks));
// PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_DNSSERVER, ent->dns_server));
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldNumU32ForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_TTL, ent->ttl));
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_CNAME, ent->cname));
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_IPV4S, ent->ipv4_addrs));
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_IPV6S, ent->ipv6_addrs));
if (ent->dns_server1[0])
{
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_DNSSERVER1, ent->dns_server1));
}
if (ent->dns_server2[0])
{
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_DNSSERVER2, ent->dns_server2));
}
PFM_IF_FAIL_DONE(ret, tpConfig_set(&st));
/* 解析并保存Alias映射 */
if (ent->aliases[0])
{
char *dup = strdup(ent->aliases);
char *save = NULL;
char *tok = strtok_r(dup, ",", &save);
uint32_t index = 0;
while (tok && index < 7)
{ // 最多7个aliases
while (*tok == ' ' || *tok == '\t')
{
tok++;
}
char *e = tok + strlen(tok);
while (e > tok && (e[-1] == ' ' || e[-1] == '\t'))
{
e[-1] = '\0';
--e;
}
if (*tok)
{
dmDnsServerAliasMapAdd(id_buf, tok, index++);
}
tok = strtok_r(NULL, ",", &save);
}
free(dup);
}
/* 解析并保存LAN映射 */
if (ent->lan_networks[0])
{
char *dup = strdup(ent->lan_networks);
char *save = NULL;
char *tok = strtok_r(dup, ",", &save);
uint32_t index = 0;
while (tok)
{
while (*tok == ' ' || *tok == '\t')
{
tok++;
}
char *e = tok + strlen(tok);
while (e > tok && (e[-1] == ' ' || e[-1] == '\t'))
{
e[-1] = '\0';
--e;
}
if (*tok)
{
dmDnsServerLanMapAdd(id_buf, tok, index++);
}
tok = strtok_r(NULL, ",", &save);
}
free(dup);
}
// // tpConfig_addOperAndSubForSet(&st, TPCONFIG_OPER_ADD | TPCONFIG_OPER_PUB, CFG_DNSPROXYSHELL_M_NAME);
// // tpConfig_addOperAndSubForSet(&st, TPCONFIG_OPER_ADD | TPCONFIG_OPER_PUB, "dnsProxyShell");
tpConfig_addOperAndSubForSet(&st, TPCONFIG_OPER_ADD | TPCONFIG_OPER_PUB, DNSPROXYSHELL_SUB_NAME);
tpConfig_addZsetNameForSet(&st, TPZSET_DNSPROXY_DNSSERVER);
PFM_IF_FAIL_DONE(ret, tpConfig_set(&st));
done:
tpConfig_setResourceFree(&st);
return (ret == PFM_ERR_C_OK) ? ERR_NO_ERROR : ret;
}
APPL_ERRCODE dmDnsServerRuleSet(const CFG_DNSSERVER_RULE_T *ent)
{
APPL_ERRCODE ret = ERR_NO_ERROR;
TPCONFIG_SET_INPUT st = {0};
char key[TPDATA_KEY_MAX_LEN] = {0};
unsigned id;
PFM_ENSURE_RET_VAL(ent, ERR_APPL_C_PARAM_INVALID);
PFM_ENSURE_RET_VAL(ent->id && ent->id[0] != '\0', ERR_APPL_C_PARAM_INVALID);
id = (unsigned)atoi(ent->id);
dmDnsServerRuleKeyGetById(id, key, sizeof(key));
PFM_IF_FAIL_DONE(ret, tpConfig_setResourceInit(&st, TPCONFIG_INIT_ENTRY));
PFM_IF_FAIL_DONE(ret, tpConfig_objAddKeyScoreForSet(&st, TPCONFIG_INIT_ENTRY, key, id));
/* 全量/按需写字段,保持你原有风格 */
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_ID, ent->id));
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_NAME, ent->name));
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_TYPE, ent->type));
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_DOMAIN, ent->domain));
// PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_ALIASES, ent->aliases));
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_STATUS, ent->status));
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_LANS, ent->lan_networks));
// PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_DNSSERVER, ent->dns_server));
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldNumU32ForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_TTL, ent->ttl));
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_CNAME, ent->cname));
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_IPV4S, ent->ipv4_addrs));
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_IPV6S, ent->ipv6_addrs));
if (ent->dns_server1)
{
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_DNSSERVER1, ent->dns_server1));
}
if (ent->dns_server2)
{
PFM_IF_FAIL_DONE(ret, tpConfig_objAddFieldStrForSet(&st, TPCONFIG_INIT_ENTRY, CFG_PROTO_DNSSERVER_F_DNSSERVER2, ent->dns_server2));
}
PFM_IF_FAIL_DONE(ret, tpConfig_set(&st));
dmDnsServerAliasMapDelByRuleId(ent->id);
dmDnsServerLanMapDelByRuleId(ent->id);
/* 解析并保存Alias映射 */
if (ent->aliases[0])
{
char *dup = strdup(ent->aliases);
char *save = NULL;
char *tok = strtok_r(dup, ",", &save);
uint32_t index = 0;
while (tok && index < 7)
{ // 最多7个aliases
while (*tok == ' ' || *tok == '\t')
{
tok++;
}
char *e = tok + strlen(tok);
while (e > tok && (e[-1] == ' ' || e[-1] == '\t'))
{
e[-1] = '\0';
--e;
}
if (*tok)
{
dmDnsServerAliasMapAdd(ent->id, tok, index++);
}
tok = strtok_r(NULL, ",", &save);
}
free(dup);
}
/* 解析并保存LAN映射 */
if (ent->lan_networks[0])
{
char *dup = strdup(ent->lan_networks);
char *save = NULL;
char *tok = strtok_r(dup, ",", &save);
uint32_t index = 0;
while (tok)
{
while (*tok == ' ' || *tok == '\t')
{
tok++;
}
char *e = tok + strlen(tok);
while (e > tok && (e[-1] == ' ' || e[-1] == '\t'))
{
e[-1] = '\0';
--e;
}
if (*tok)
{
dmDnsServerLanMapAdd(ent->id, tok, index++);
}
tok = strtok_r(NULL, ",", &save);
}
free(dup);
}
tpConfig_addOperAndSubForSet(&st, TPCONFIG_OPER_MOD | TPCONFIG_OPER_PUB, DNSPROXYSHELL_SUB_NAME);
tpConfig_addZsetNameForSet(&st, TPZSET_DNSPROXY_DNSSERVER);
PFM_IF_FAIL_DONE(ret, tpConfig_set(&st));
done:
tpConfig_setResourceFree(&st);
return (ret == PFM_ERR_C_OK) ? ERR_NO_ERROR : ret;
}
最新发布