password.c | password.c | |||
---|---|---|---|---|
skipping to change at line 71 | skipping to change at line 71 | |||
struct result_info { | struct result_info { | |||
const char *username; | const char *username; | |||
const char *password; | const char *password; | |||
uid_t user_id; | uid_t user_id; | |||
gid_t group_id; | gid_t group_id; | |||
const char *gcos; | const char *gcos; | |||
const char *home_dir; | const char *home_dir; | |||
const char *login_shell; | const char *login_shell; | |||
}; | }; | |||
static void report_finding(struct result_info *res, SEXP_t *probe_out) | static void report_finding(struct result_info *res, probe_ctx *ctx) | |||
{ | { | |||
SEXP_t *item; | SEXP_t *item; | |||
item = probe_item_create(OVAL_UNIX_PASSWORD, NULL, | item = probe_item_create(OVAL_UNIX_PASSWORD, NULL, | |||
"username", OVAL_DATATYPE_STRING, res-> username, | "username", OVAL_DATATYPE_STRING, res-> username, | |||
"password", OVAL_DATATYPE_STRING, res-> password, | "password", OVAL_DATATYPE_STRING, res-> password, | |||
"user_id", OVAL_DATATYPE_INTEGER, (int 64_t)res->user_id, | "user_id", OVAL_DATATYPE_INTEGER, (int 64_t)res->user_id, | |||
"group_id", OVAL_DATATYPE_INTEGER, (int 64_t)res->group_id, | "group_id", OVAL_DATATYPE_INTEGER, (int 64_t)res->group_id, | |||
"gcos", OVAL_DATATYPE_STRING, res-> gcos, | "gcos", OVAL_DATATYPE_STRING, res-> gcos, | |||
"home_dir", OVAL_DATATYPE_STRING, res-> home_dir, | "home_dir", OVAL_DATATYPE_STRING, res-> home_dir, | |||
"login_shell", OVAL_DATATYPE_STRING, res-> login_shell, | "login_shell", OVAL_DATATYPE_STRING, res-> login_shell, | |||
NULL); | NULL); | |||
probe_cobj_add_item(probe_out, item); | probe_item_collect(ctx, item); | |||
SEXP_free(item); | ||||
} | } | |||
static int read_password(SEXP_t *un_ent, SEXP_t *probe_out) | static int read_password(SEXP_t *un_ent, probe_ctx *ctx) | |||
{ | { | |||
struct passwd *pw; | struct passwd *pw; | |||
while ((pw = getpwent())) { | while ((pw = getpwent())) { | |||
SEXP_t *un; | SEXP_t *un; | |||
_D("Have user: %s\n", pw->pw_name); | _D("Have user: %s\n", pw->pw_name); | |||
un = SEXP_string_newf("%s", pw->pw_name); | un = SEXP_string_newf("%s", pw->pw_name); | |||
if (probe_entobj_cmp(un_ent, un) == OVAL_RESULT_TRUE) { | if (probe_entobj_cmp(un_ent, un) == OVAL_RESULT_TRUE) { | |||
struct result_info r; | struct result_info r; | |||
r.username = pw->pw_name; | r.username = pw->pw_name; | |||
r.password = pw->pw_passwd; | r.password = pw->pw_passwd; | |||
r.user_id = pw->pw_uid; | r.user_id = pw->pw_uid; | |||
r.group_id = pw->pw_gid; | r.group_id = pw->pw_gid; | |||
r.gcos = pw->pw_gecos; | r.gcos = pw->pw_gecos; | |||
r.home_dir = pw->pw_dir; | r.home_dir = pw->pw_dir; | |||
r.login_shell = pw->pw_shell; | r.login_shell = pw->pw_shell; | |||
report_finding(&r, probe_out); | report_finding(&r, ctx); | |||
} | } | |||
SEXP_free(un); | SEXP_free(un); | |||
} | } | |||
endpwent(); | endpwent(); | |||
return 0; | return 0; | |||
} | } | |||
int probe_main(SEXP_t *object, SEXP_t *probe_out, void *arg, SEXP_t *filter s) | int probe_main(probe_ctx *ctx, void *arg) | |||
{ | { | |||
SEXP_t *ent; | SEXP_t *ent; | |||
(void)filters; | ent = probe_obj_getent(probe_ctx_getobject(ctx), "username", 1); | |||
if (object == NULL || probe_out == NULL) { | ||||
return (PROBE_EINVAL); | ||||
} | ||||
ent = probe_obj_getent(object, "username", 1); | ||||
if (ent == NULL) { | if (ent == NULL) { | |||
return PROBE_ENOVAL; | return PROBE_ENOVAL; | |||
} | } | |||
// Now we check the file... | // Now we check the file... | |||
read_password(ent, probe_out); | read_password(ent, ctx); | |||
SEXP_free(ent); | SEXP_free(ent); | |||
return 0; | return 0; | |||
} | } | |||
End of changes. 7 change blocks. | ||||
14 lines changed or deleted | 7 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |