gpt4 book ai didi

c - 如何在 net-snmp C API 中创建用户?

转载 作者:行者123 更新时间:2023-11-30 16:10:10 33 4
gpt4 key购买 nike

我正在用 C 语言编写一个 SNMP 守护进程,我想创建一个用户并授予其只读访问权限。我的配置中有以下几行:

createUser myuser SHA "12345678" AES
rouser myuser

如何在守护进程中用 C 语言执行相同的操作?

最佳答案

以下函数可以实现我想要的功能。我在头文件中找不到 vacm_parse_rouser() 的原型(prototype),因此我将其添加到我的代码中。

void vacm_parse_rouser( const char *token, char *confline );

bool create_user_and_access()
{
const char* username = "myuser";
const char* auth_type = "SHA";
char auth_pass[] = "12345678";
const char* priv_type = "AES";
char priv_pass[] = "12345678";
struct usmUser* user;
int type_nr;
const oid* auth;
netsnmp_priv_alg_info *pai;
char line[128];

user = usm_create_user();
user->engineID = snmpv3_generate_engineID( &user->engineIDLen );
user->name = strdup( username );
user->secName = strdup( user->name );

type_nr = usm_lookup_auth_type( auth_type );
if( type_nr < 0 )
{
printf( "usm_lookup_auth_type %s failed.\n", auth_type );
return false;
}
auth = sc_get_auth_oid( type_nr, &user->authProtocolLen );
if( !auth )
{
printf( "sc_get_auth_oid %d (%s) failed.\n", type_nr, auth_type );
return false;
}
user->authProtocol = snmp_duplicate_objid( auth, user->authProtocolLen );
usm_set_user_password( user, "userSetAuthPass", auth_pass );

type_nr = usm_lookup_priv_type( priv_type );
if( type_nr < 0 )
{
printf( "usm_lookup_priv_type %s failed.\n", priv_type );
return false;
}
pai = sc_get_priv_alg_bytype( type_nr );
if( !pai )
{
printf( "sc_get_priv_alg_bytype %d (%s) failed.\n",
type_nr, priv_type );
return false;
}
user->privProtocolLen = pai->oid_len;
user->privProtocol =
snmp_duplicate_objid( pai->alg_oid, user->privProtocolLen );
usm_set_user_password( user, "userSetPrivPass", priv_pass );

usm_add_user( user );

strcpy( line, username );
vacm_parse_rouser( "rouser", line );

return true;
}

关于c - 如何在 net-snmp C API 中创建用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58952153/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com