generate reason strings and remediation instructions for improper OS settings
This commit is contained in:
@@ -150,6 +150,7 @@ static TNC_Result receive_message(imv_state_t *state, imv_msg_t *in_msg)
|
|||||||
chunk_t os_name = chunk_empty;
|
chunk_t os_name = chunk_empty;
|
||||||
chunk_t os_version = chunk_empty;
|
chunk_t os_version = chunk_empty;
|
||||||
bool fatal_error = FALSE, assessment = FALSE;
|
bool fatal_error = FALSE, assessment = FALSE;
|
||||||
|
char non_market_apps_str[] = "install_non_market_apps";
|
||||||
|
|
||||||
os_state = (imv_os_state_t*)state;
|
os_state = (imv_os_state_t*)state;
|
||||||
|
|
||||||
@@ -241,6 +242,11 @@ static TNC_Result receive_message(imv_state_t *state, imv_msg_t *in_msg)
|
|||||||
fwd_status = attr_cast->get_status(attr_cast);
|
fwd_status = attr_cast->get_status(attr_cast);
|
||||||
DBG1(DBG_IMV, "IPv4 forwarding status: %N",
|
DBG1(DBG_IMV, "IPv4 forwarding status: %N",
|
||||||
os_fwd_status_names, fwd_status);
|
os_fwd_status_names, fwd_status);
|
||||||
|
if (fwd_status == OS_FWD_ENABLED)
|
||||||
|
{
|
||||||
|
os_state->set_os_settings(os_state,
|
||||||
|
OS_SETTINGS_FWD_ENABLED);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IETF_ATTR_FACTORY_DEFAULT_PWD_ENABLED:
|
case IETF_ATTR_FACTORY_DEFAULT_PWD_ENABLED:
|
||||||
@@ -252,6 +258,11 @@ static TNC_Result receive_message(imv_state_t *state, imv_msg_t *in_msg)
|
|||||||
default_pwd_status = attr_cast->get_status(attr_cast);
|
default_pwd_status = attr_cast->get_status(attr_cast);
|
||||||
DBG1(DBG_IMV, "factory default password: %sabled",
|
DBG1(DBG_IMV, "factory default password: %sabled",
|
||||||
default_pwd_status ? "en":"dis");
|
default_pwd_status ? "en":"dis");
|
||||||
|
if (default_pwd_status)
|
||||||
|
{
|
||||||
|
os_state->set_os_settings(os_state,
|
||||||
|
OS_SETTINGS_DEFAULT_PWD_ENABLED);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IETF_ATTR_INSTALLED_PACKAGES:
|
case IETF_ATTR_INSTALLED_PACKAGES:
|
||||||
@@ -301,6 +312,12 @@ static TNC_Result receive_message(imv_state_t *state, imv_msg_t *in_msg)
|
|||||||
e = attr_cast->create_enumerator(attr_cast);
|
e = attr_cast->create_enumerator(attr_cast);
|
||||||
while (e->enumerate(e, &name, &value))
|
while (e->enumerate(e, &name, &value))
|
||||||
{
|
{
|
||||||
|
if (streq(name, non_market_apps_str) &&
|
||||||
|
chunk_equals(value, chunk_from_chars('1')))
|
||||||
|
{
|
||||||
|
os_state->set_os_settings(os_state,
|
||||||
|
OS_SETTINGS_NON_MARKET_APPS);
|
||||||
|
}
|
||||||
DBG1(DBG_IMV, "setting '%s'", name);
|
DBG1(DBG_IMV, "setting '%s'", name);
|
||||||
dbg_imv_multi_line(value);
|
dbg_imv_multi_line(value);
|
||||||
}
|
}
|
||||||
@@ -323,58 +340,33 @@ static TNC_Result receive_message(imv_state_t *state, imv_msg_t *in_msg)
|
|||||||
if (os_name.len && os_version.len)
|
if (os_name.len && os_version.len)
|
||||||
{
|
{
|
||||||
os_type_t os_type;
|
os_type_t os_type;
|
||||||
char *product_info;
|
ita_attr_get_settings_t *attr_cast;
|
||||||
char *uri = "http://remediation.strongswan.org/fix-it/";
|
|
||||||
char *string = "use a Linux operating system instead of Windows 1.2.3";
|
|
||||||
char *lang_code = "en";
|
|
||||||
|
|
||||||
|
/* set the OS type, name and version */
|
||||||
os_type = os_type_from_name(os_name);
|
os_type = os_type_from_name(os_name);
|
||||||
os_state->set_info(os_state,os_type, os_name, os_version);
|
os_state->set_info(os_state,os_type, os_name, os_version);
|
||||||
product_info = os_state->get_info(os_state, NULL, NULL, NULL);
|
|
||||||
|
|
||||||
if (streq(product_info, "Windows 1.2.3"))
|
/* requesting installed packages */
|
||||||
|
os_state->set_package_request(os_state, TRUE);
|
||||||
|
attr = ietf_attr_attr_request_create(PEN_IETF,
|
||||||
|
IETF_ATTR_INSTALLED_PACKAGES);
|
||||||
|
out_msg->add_attribute(out_msg, attr);
|
||||||
|
|
||||||
|
/* requesting Android or Linux settings */
|
||||||
|
attr = ita_attr_get_settings_create();
|
||||||
|
attr_cast = (ita_attr_get_settings_t*)attr;
|
||||||
|
|
||||||
|
if (os_type == OS_TYPE_ANDROID)
|
||||||
{
|
{
|
||||||
DBG1(DBG_IMV, "OS '%s' is not supported", product_info);
|
attr_cast->add(attr_cast, "android_id");
|
||||||
|
attr_cast->add(attr_cast, non_market_apps_str);
|
||||||
attr = ietf_attr_remediation_instr_create_from_string(
|
|
||||||
chunk_create(string, strlen(string)),
|
|
||||||
chunk_create(lang_code, strlen(lang_code)));
|
|
||||||
out_msg->add_attribute(out_msg, attr);
|
|
||||||
attr = ietf_attr_remediation_instr_create_from_uri(
|
|
||||||
chunk_create(uri, strlen(uri)));
|
|
||||||
out_msg->add_attribute(out_msg, attr);
|
|
||||||
|
|
||||||
state->set_recommendation(state,
|
|
||||||
TNC_IMV_ACTION_RECOMMENDATION_ISOLATE,
|
|
||||||
TNC_IMV_EVALUATION_RESULT_NONCOMPLIANT_MINOR);
|
|
||||||
assessment = TRUE;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ita_attr_get_settings_t *attr_cast;
|
attr_cast->add(attr_cast, "/proc/sys/kernel/random/boot_id");
|
||||||
|
attr_cast->add(attr_cast, "/proc/sys/kernel/tainted");
|
||||||
/* requesting installed packages */
|
|
||||||
os_state->set_package_request(os_state, TRUE);
|
|
||||||
attr = ietf_attr_attr_request_create(PEN_IETF,
|
|
||||||
IETF_ATTR_INSTALLED_PACKAGES);
|
|
||||||
out_msg->add_attribute(out_msg, attr);
|
|
||||||
|
|
||||||
/* requesting Android or Linux settings */
|
|
||||||
attr = ita_attr_get_settings_create();
|
|
||||||
attr_cast = (ita_attr_get_settings_t*)attr;
|
|
||||||
|
|
||||||
if (os_type == OS_TYPE_ANDROID)
|
|
||||||
{
|
|
||||||
attr_cast->add(attr_cast, "android_id");
|
|
||||||
attr_cast->add(attr_cast, "install_non_market_apps");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
attr_cast->add(attr_cast, "/proc/sys/kernel/random/boot_id");
|
|
||||||
attr_cast->add(attr_cast, "/proc/sys/kernel/tainted");
|
|
||||||
}
|
|
||||||
out_msg->add_attribute(out_msg, attr);
|
|
||||||
}
|
}
|
||||||
|
out_msg->add_attribute(out_msg, attr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fatal_error)
|
if (fatal_error)
|
||||||
@@ -398,7 +390,8 @@ static TNC_Result receive_message(imv_state_t *state, imv_msg_t *in_msg)
|
|||||||
"%d ok, %d not found", count, count_update, count_blacklist,
|
"%d ok, %d not found", count, count_update, count_blacklist,
|
||||||
count_ok, count - count_update - count_blacklist - count_ok);
|
count_ok, count - count_update - count_blacklist - count_ok);
|
||||||
|
|
||||||
if (count_update || count_blacklist)
|
if (count_update || count_blacklist ||
|
||||||
|
os_state->get_os_settings(os_state))
|
||||||
{
|
{
|
||||||
state->set_recommendation(state,
|
state->set_recommendation(state,
|
||||||
TNC_IMV_ACTION_RECOMMENDATION_ISOLATE,
|
TNC_IMV_ACTION_RECOMMENDATION_ISOLATE,
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
|
|
||||||
typedef struct private_imv_os_state_t private_imv_os_state_t;
|
typedef struct private_imv_os_state_t private_imv_os_state_t;
|
||||||
typedef struct package_entry_t package_entry_t;
|
typedef struct package_entry_t package_entry_t;
|
||||||
typedef struct reason_entry_t reason_entry_t;
|
typedef struct entry_t entry_t;
|
||||||
typedef struct instruction_entry_t instruction_entry_t;
|
typedef struct instruction_entry_t instruction_entry_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -93,6 +93,11 @@ struct private_imv_os_state_t {
|
|||||||
*/
|
*/
|
||||||
linked_list_t *bad_packages;
|
linked_list_t *bad_packages;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Local copy of the reason string
|
||||||
|
*/
|
||||||
|
char *reasons;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Local copy of the remediation instruction string
|
* Local copy of the remediation instruction string
|
||||||
*/
|
*/
|
||||||
@@ -123,6 +128,11 @@ struct private_imv_os_state_t {
|
|||||||
*/
|
*/
|
||||||
bool package_request;
|
bool package_request;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OS Settings
|
||||||
|
*/
|
||||||
|
u_int os_settings;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Angel count
|
* Angel count
|
||||||
*/
|
*/
|
||||||
@@ -148,19 +158,51 @@ static void free_package_entry(package_entry_t *this)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define an internal reason string entry
|
* Define a language string entry
|
||||||
*/
|
*/
|
||||||
struct reason_entry_t {
|
struct entry_t {
|
||||||
char *lang;
|
char *lang;
|
||||||
char *string;
|
char *string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Table of multi-lingual improper settings reason string entries
|
||||||
|
*/
|
||||||
|
static entry_t settings_reasons[] = {
|
||||||
|
{ "en", "Improper OS settings were detected" },
|
||||||
|
{ "de", "Unzulässige OS Einstellungen wurden festgestellt" }
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Table of multi-lingual reason string entries
|
* Table of multi-lingual reason string entries
|
||||||
*/
|
*/
|
||||||
static reason_entry_t reasons[] = {
|
static entry_t reasons[] = {
|
||||||
{ "en", "Vulnerable or blacklisted software packages were found" },
|
{ "en", "Vulnerable or blacklisted software packages were found" },
|
||||||
{ "de", "Schwachstellenbehaftete oder gesperrte Softwarepakete wurden gefunden" },
|
{ "de", "Schwachstellenbehaftete oder gesperrte Softwarepakete wurden gefunden" }
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Table of multi-lingual forwarding enable string entries
|
||||||
|
*/
|
||||||
|
static entry_t instruction_fwd_enabled[] = {
|
||||||
|
{ "en", "Please disable IP forwarding" },
|
||||||
|
{ "de", "Bitte deaktivieren Sie das IP Forwarding" }
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Table of multi-lingual default password enabled string entries
|
||||||
|
*/
|
||||||
|
static entry_t instruction_default_pwd_enabled[] = {
|
||||||
|
{ "en", "Please change the default password" },
|
||||||
|
{ "de", "Bitte ändern Sie das default Passwort" }
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Table of multi-lingual defaul install non market apps string entries
|
||||||
|
*/
|
||||||
|
static entry_t instruction_non_market_apps[] = {
|
||||||
|
{ "en", "Do not allow the installation of apps from unknown sources" },
|
||||||
|
{ "de", "Erlauben Sie nicht die Installation von Apps von unbekannten Quellen" }
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -248,18 +290,14 @@ METHOD(imv_state_t, get_reason_string, bool,
|
|||||||
char **reason_string, char **reason_language)
|
char **reason_string, char **reason_language)
|
||||||
{
|
{
|
||||||
bool match = FALSE;
|
bool match = FALSE;
|
||||||
char *lang;
|
char *lang, *pos;
|
||||||
int i;
|
int i, i_chosen = 0, len = 0, nr_of_reasons = 0;
|
||||||
|
|
||||||
if (!this->count_update && !this->count_blacklist)
|
if (!this->count_update && !this->count_blacklist & !this->os_settings)
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set the default language */
|
|
||||||
*reason_language = reasons[0].lang;
|
|
||||||
*reason_string = reasons[0].string;
|
|
||||||
|
|
||||||
while (language_enumerator->enumerate(language_enumerator, &lang))
|
while (language_enumerator->enumerate(language_enumerator, &lang))
|
||||||
{
|
{
|
||||||
for (i = 0; i < countof(reasons); i++)
|
for (i = 0; i < countof(reasons); i++)
|
||||||
@@ -267,8 +305,7 @@ METHOD(imv_state_t, get_reason_string, bool,
|
|||||||
if (streq(lang, reasons[i].lang))
|
if (streq(lang, reasons[i].lang))
|
||||||
{
|
{
|
||||||
match = TRUE;
|
match = TRUE;
|
||||||
*reason_language = reasons[i].lang;
|
i_chosen = i;
|
||||||
*reason_string = reasons[i].string;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -277,9 +314,40 @@ METHOD(imv_state_t, get_reason_string, bool,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*reason_language = reasons[i_chosen].lang;
|
||||||
|
|
||||||
|
if (this->count_update || this->count_blacklist)
|
||||||
|
{
|
||||||
|
len += strlen(reasons[i_chosen].string);
|
||||||
|
nr_of_reasons++;
|
||||||
|
}
|
||||||
|
if (this->os_settings)
|
||||||
|
{
|
||||||
|
len += strlen(settings_reasons[i_chosen].string);
|
||||||
|
nr_of_reasons++;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Allocate memory for the reason string */
|
||||||
|
pos = this->reasons = malloc(len + nr_of_reasons);
|
||||||
|
|
||||||
|
if (this->count_update || this->count_blacklist)
|
||||||
|
{
|
||||||
|
strcpy(pos, reasons[i_chosen].string);
|
||||||
|
pos += strlen(reasons[i_chosen].string);
|
||||||
|
if (--nr_of_reasons)
|
||||||
|
{
|
||||||
|
*pos++ = '\n';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this->os_settings)
|
||||||
|
{
|
||||||
|
strcpy(pos, settings_reasons[i_chosen].string);
|
||||||
|
pos += strlen(settings_reasons[i_chosen].string);
|
||||||
|
}
|
||||||
|
*pos = '\0';
|
||||||
|
*reason_string = this->reasons;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
METHOD(imv_state_t, get_remediation_instructions, bool,
|
METHOD(imv_state_t, get_remediation_instructions, bool,
|
||||||
@@ -290,9 +358,9 @@ METHOD(imv_state_t, get_remediation_instructions, bool,
|
|||||||
char *lang, *pos;
|
char *lang, *pos;
|
||||||
enumerator_t *enumerator;
|
enumerator_t *enumerator;
|
||||||
package_entry_t *entry;
|
package_entry_t *entry;
|
||||||
int i, i_chosen = 0, len = 0;
|
int i, i_chosen = 0, len = 0, nr_of_instructions = 0;
|
||||||
|
|
||||||
if (!this->count_update && !this->count_blacklist)
|
if (!this->count_update && !this->count_blacklist & !this->os_settings)
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@@ -324,6 +392,21 @@ METHOD(imv_state_t, get_remediation_instructions, bool,
|
|||||||
{
|
{
|
||||||
len += strlen(instructions[i_chosen].removal_string);
|
len += strlen(instructions[i_chosen].removal_string);
|
||||||
}
|
}
|
||||||
|
if (this->os_settings & OS_SETTINGS_FWD_ENABLED)
|
||||||
|
{
|
||||||
|
len += strlen(instruction_fwd_enabled[i_chosen].string);
|
||||||
|
nr_of_instructions++;
|
||||||
|
}
|
||||||
|
if (this->os_settings & OS_SETTINGS_DEFAULT_PWD_ENABLED)
|
||||||
|
{
|
||||||
|
len += strlen(instruction_default_pwd_enabled[i_chosen].string);
|
||||||
|
nr_of_instructions++;
|
||||||
|
}
|
||||||
|
if (this->os_settings & OS_SETTINGS_NON_MARKET_APPS)
|
||||||
|
{
|
||||||
|
len += strlen(instruction_non_market_apps[i_chosen].string);
|
||||||
|
nr_of_instructions++;
|
||||||
|
}
|
||||||
|
|
||||||
enumerator = this->bad_packages->create_enumerator(this->bad_packages);
|
enumerator = this->bad_packages->create_enumerator(this->bad_packages);
|
||||||
while (enumerator->enumerate(enumerator, &entry))
|
while (enumerator->enumerate(enumerator, &entry))
|
||||||
@@ -333,7 +416,7 @@ METHOD(imv_state_t, get_remediation_instructions, bool,
|
|||||||
enumerator->destroy(enumerator);
|
enumerator->destroy(enumerator);
|
||||||
|
|
||||||
/* Allocate memory for the remediation instructions */
|
/* Allocate memory for the remediation instructions */
|
||||||
pos = this->instructions = malloc(len + 1);
|
pos = this->instructions = malloc(len + nr_of_instructions + 1);
|
||||||
|
|
||||||
/* List of blacklisted packages, if any */
|
/* List of blacklisted packages, if any */
|
||||||
if (this->count_blacklist)
|
if (this->count_blacklist)
|
||||||
@@ -373,6 +456,31 @@ METHOD(imv_state_t, get_remediation_instructions, bool,
|
|||||||
enumerator->destroy(enumerator);
|
enumerator->destroy(enumerator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Add instructions concerning improper OS settings */
|
||||||
|
if (this->os_settings & OS_SETTINGS_FWD_ENABLED)
|
||||||
|
{
|
||||||
|
strcpy(pos, instruction_fwd_enabled[i_chosen].string);
|
||||||
|
pos += strlen(instruction_fwd_enabled[i_chosen].string);
|
||||||
|
if (--nr_of_instructions)
|
||||||
|
{
|
||||||
|
*pos++ = '\n';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this->os_settings & OS_SETTINGS_DEFAULT_PWD_ENABLED)
|
||||||
|
{
|
||||||
|
strcpy(pos, instruction_default_pwd_enabled[i_chosen].string);
|
||||||
|
pos += strlen(instruction_default_pwd_enabled[i_chosen].string);
|
||||||
|
if (--nr_of_instructions)
|
||||||
|
{
|
||||||
|
*pos++ = '\n';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this->os_settings & OS_SETTINGS_NON_MARKET_APPS)
|
||||||
|
{
|
||||||
|
strcpy(pos, instruction_non_market_apps[i_chosen].string);
|
||||||
|
pos += strlen(instruction_non_market_apps[i_chosen].string);
|
||||||
|
}
|
||||||
|
|
||||||
*pos = '\0';
|
*pos = '\0';
|
||||||
*string = this->instructions;
|
*string = this->instructions;
|
||||||
*uri = lib->settings->get_str(lib->settings,
|
*uri = lib->settings->get_str(lib->settings,
|
||||||
@@ -386,6 +494,7 @@ METHOD(imv_state_t, destroy, void,
|
|||||||
{
|
{
|
||||||
this->bad_packages->destroy_function(this->bad_packages,
|
this->bad_packages->destroy_function(this->bad_packages,
|
||||||
(void*)free_package_entry);
|
(void*)free_package_entry);
|
||||||
|
free(this->reasons);
|
||||||
free(this->instructions);
|
free(this->instructions);
|
||||||
free(this->info);
|
free(this->info);
|
||||||
free(this->name.ptr);
|
free(this->name.ptr);
|
||||||
@@ -471,6 +580,18 @@ METHOD(imv_os_state_t, get_package_request, bool,
|
|||||||
return this->package_request;
|
return this->package_request;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
METHOD(imv_os_state_t, set_os_settings, void,
|
||||||
|
private_imv_os_state_t *this, u_int settings)
|
||||||
|
{
|
||||||
|
this->os_settings |= settings;
|
||||||
|
}
|
||||||
|
|
||||||
|
METHOD(imv_os_state_t, get_os_settings, u_int,
|
||||||
|
private_imv_os_state_t *this)
|
||||||
|
{
|
||||||
|
return this->os_settings;
|
||||||
|
}
|
||||||
|
|
||||||
METHOD(imv_os_state_t, set_angel_count, void,
|
METHOD(imv_os_state_t, set_angel_count, void,
|
||||||
private_imv_os_state_t *this, bool start)
|
private_imv_os_state_t *this, bool start)
|
||||||
{
|
{
|
||||||
@@ -524,6 +645,8 @@ imv_state_t *imv_os_state_create(TNC_ConnectionID connection_id)
|
|||||||
.get_count = _get_count,
|
.get_count = _get_count,
|
||||||
.set_package_request = _set_package_request,
|
.set_package_request = _set_package_request,
|
||||||
.get_package_request = _get_package_request,
|
.get_package_request = _get_package_request,
|
||||||
|
.set_os_settings = _set_os_settings,
|
||||||
|
.get_os_settings = _get_os_settings,
|
||||||
.set_angel_count = _set_angel_count,
|
.set_angel_count = _set_angel_count,
|
||||||
.get_angel_count = _get_angel_count,
|
.get_angel_count = _get_angel_count,
|
||||||
.add_bad_package = _add_bad_package,
|
.add_bad_package = _add_bad_package,
|
||||||
|
|||||||
@@ -27,6 +27,13 @@
|
|||||||
#include <library.h>
|
#include <library.h>
|
||||||
|
|
||||||
typedef struct imv_os_state_t imv_os_state_t;
|
typedef struct imv_os_state_t imv_os_state_t;
|
||||||
|
typedef enum os_settings_t os_settings_t;
|
||||||
|
|
||||||
|
enum os_settings_t {
|
||||||
|
OS_SETTINGS_FWD_ENABLED = 1,
|
||||||
|
OS_SETTINGS_DEFAULT_PWD_ENABLED = 2,
|
||||||
|
OS_SETTINGS_NON_MARKET_APPS = 4
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Internal state of an imv_os_t connection instance
|
* Internal state of an imv_os_t connection instance
|
||||||
@@ -94,6 +101,20 @@ struct imv_os_state_t {
|
|||||||
*/
|
*/
|
||||||
bool (*get_package_request)(imv_os_state_t *this);
|
bool (*get_package_request)(imv_os_state_t *this);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set OS settings
|
||||||
|
*
|
||||||
|
* @param settings OS settings
|
||||||
|
*/
|
||||||
|
void (*set_os_settings)(imv_os_state_t *this, u_int settings);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get OS settings
|
||||||
|
*
|
||||||
|
* @return OS settings
|
||||||
|
*/
|
||||||
|
u_int (*get_os_settings)(imv_os_state_t *this);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Increase/Decrease the ITA Angel count
|
* Increase/Decrease the ITA Angel count
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user