21 #ifndef LIBREPORT_DUMP_DIR_H_
22 #define LIBREPORT_DUMP_DIR_H_
27 #include <sys/types.h>
38 int create_symlink_lockfile(
const char *filename,
const char *pid_str);
39 int create_symlink_lockfile_at(
int dir_fd,
const char *filename,
const char *pid_str);
44 int secure_openat_read(
int dir_fd,
const char *filename);
56 extern uid_t dd_g_super_user_uid;
66 extern gid_t dd_g_fs_group_gid;
73 DD_FAIL_QUIETLY_ENOENT = (1 << 0),
74 DD_FAIL_QUIETLY_EACCES = (1 << 1),
76 DD_OPEN_FOLLOW = (1 << 2),
77 DD_OPEN_READONLY = (1 << 3),
78 DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE = (1 << 4),
79 DD_DONT_WAIT_FOR_LOCK = (1 << 5),
81 DD_CREATE_PARENTS = (1 << 6),
86 DD_OPEN_FD_ONLY = (1 << 7),
116 struct dump_dir *dd_opendir(
const char *dir,
int flags);
129 struct dump_dir *dd_create_skeleton(
const char *dir, uid_t uid, mode_t mode,
int flags);
130 int dd_reset_ownership(
struct dump_dir *dd);
134 struct dump_dir *dd_create(
const char *dir, uid_t uid, mode_t mode);
157 void dd_create_basic_files(
struct dump_dir *dd, uid_t uid,
const char *chroot_dir);
158 int dd_exist(
const struct dump_dir *dd,
const char *path);
159 void dd_sanitize_mode_and_owner(
struct dump_dir *dd);
161 DIR *dd_init_next_file(
struct dump_dir *dd);
162 int dd_get_next_file(
struct dump_dir *dd,
char **short_name,
char **full_name);
164 char *load_text_file(
const char *path,
unsigned flags);
166 char* dd_load_text_ext(
const struct dump_dir *dd,
const char *name,
unsigned flags);
167 char* dd_load_text(
const struct dump_dir *dd,
const char *name);
168 int dd_load_int32(
const struct dump_dir *dd,
const char *name, int32_t *value);
169 int dd_load_uint32(
const struct dump_dir *dd,
const char *name, uint32_t *value);
170 int dd_load_int64(
const struct dump_dir *dd,
const char *name, int64_t *value);
171 int dd_load_uint64(
const struct dump_dir *dd,
const char *name, uint64_t *value);
172 void dd_save_text(
struct dump_dir *dd,
const char *name,
const char *data);
173 void dd_save_binary(
struct dump_dir *dd,
const char *name,
const char *data,
unsigned size);
174 int dd_copy_file(
struct dump_dir *dd,
const char *name,
const char *source_path);
175 int dd_copy_file_unpack(
struct dump_dir *dd,
const char *name,
const char *source_path);
180 long dd_get_item_size(
struct dump_dir *dd,
const char *name);
185 int dd_delete_item(
struct dump_dir *dd,
const char *name);
188 int dd_rename(
struct dump_dir *dd,
const char *new_path);
197 int dd_chown(
struct dump_dir *dd, uid_t new_uid);
204 int dd_set_owner(
struct dump_dir *dd, uid_t owner);
211 int dd_set_no_owner(
struct dump_dir *dd);
218 uid_t dd_get_owner(
struct dump_dir *dd);
221 #define add_reported_to_data libreport_add_reported_to_data
222 int add_reported_to_data(
char **reported_to,
const char *line);
223 #define add_reported_to libreport_add_reported_to
224 void add_reported_to(
struct dump_dir *dd,
const char *line);
235 #define free_report_result libreport_free_report_result
237 #define find_in_reported_to_data libreport_find_in_reported_to_data
238 report_result_t *find_in_reported_to_data(
const char *reported_to,
const char *report_label);
239 #define find_in_reported_to libreport_find_in_reported_to
241 #define read_entire_reported_to_data libreport_read_entire_reported_to_data
242 GList *read_entire_reported_to_data(
const char* reported_to);
243 #define read_entire_reported_to libreport_read_entire_reported_to
244 GList *read_entire_reported_to(
struct dump_dir *dd);
247 void delete_dump_dir(
const char *dirname);
255 int dump_dir_accessible_by_uid(
const char *dirname, uid_t uid);
260 int dd_accessible_by_uid(
struct dump_dir *dd, uid_t uid);
263 DD_STAT_ACCESSIBLE_BY_UID = 1,
264 DD_STAT_OWNED_BY_UID = DD_STAT_ACCESSIBLE_BY_UID << 1,
265 DD_STAT_NO_OWNER = DD_STAT_OWNED_BY_UID << 1,
275 int dump_dir_stat_for_uid(
const char *dirname, uid_t uid);
280 int dd_stat_for_uid(
struct dump_dir *dd, uid_t uid);
288 int dd_mark_as_notreportable(
struct dump_dir *dd,
const char *reason);
290 typedef int (*save_data_call_back)(
struct dump_dir *,
void *args);
299 struct dump_dir *create_dump_dir(
const char *base_dir_name,
const char *type,
300 uid_t uid, save_data_call_back save_data,
void *args);