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/