SysInfo::SysInfo() { int status; sigar_t *sigar; sigar_sys_info_t sysinfo; sigar_open(&sigar); status = sigar_sys_info_get(sigar, &sysinfo); if (status != SIGAR_OK) { printf("get sys info error: %d (%s)\n", status, sigar_strerror(sigar, status)); exit(1); } name = sysinfo.name; version = sysinfo.version; arch = sysinfo.arch; machine = sysinfo.machine; description = sysinfo.description; patch_level = sysinfo.patch_level; vendor = sysinfo.vendor; vendor_version = sysinfo.vendor_version; vendor_name = sysinfo.vendor_name; vendor_code_name = sysinfo.vendor_code_name; sigar_close(sigar); }
struct tlv_packet *sys_config_getenv(struct tlv_handler_ctx *ctx) { struct tlv_packet *p = tlv_packet_response_result(ctx, TLV_RESULT_SUCCESS); struct tlv_iterator i = { .packet = ctx->req, .value_type = TLV_TYPE_ENV_VARIABLE, }; char *env_var; while ((env_var = tlv_packet_iterate_str(&i))) { char *env_val = getenv(normalize_env_var(env_var)); if (env_val) { struct tlv_packet *env = tlv_packet_new(TLV_TYPE_ENV_GROUP, 0); env = tlv_packet_add_str(env, TLV_TYPE_ENV_VARIABLE, env_var); env = tlv_packet_add_str(env, TLV_TYPE_ENV_VALUE, env_val); p = tlv_packet_add_child(p, env); } } return p; } struct tlv_packet *sys_config_getuid(struct tlv_handler_ctx *ctx) { struct tlv_packet *p = tlv_packet_response_result(ctx, TLV_RESULT_SUCCESS); return tlv_packet_add_fmt(p, TLV_TYPE_USER_NAME, "uid=%d, gid=%d, euid=%d, egid=%d", getuid(), geteuid(), getgid(), getegid()); } struct tlv_packet *sys_config_sysinfo(struct tlv_handler_ctx *ctx) { struct mettle *m = ctx->arg; sigar_sys_info_t sys_info; if (sigar_sys_info_get(mettle_get_sigar(m), &sys_info) == -1) { return tlv_packet_response_result(ctx, errno); } struct tlv_packet *p = tlv_packet_response_result(ctx, TLV_RESULT_SUCCESS); p = tlv_packet_add_str(p, TLV_TYPE_COMPUTER_NAME, mettle_get_fqdn(m)); p = tlv_packet_add_fmt(p, TLV_TYPE_OS_NAME, "%s (%s %s)", sys_info.description, sys_info.name, sys_info.version); p = tlv_packet_add_str(p, TLV_TYPE_ARCHITECTURE, sys_info.arch); return p; }