This file is indexed.

/usr/include/dmraid/lib_context.h is in libdmraid-dev 1.0.0.rc16-4.2ubuntu3.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
/*
 * Copyright (C) 2004-2008  Heinz Mauelshagen, Red Hat GmbH.
 *                          All rights reserved.
 *
 * Copyright (C) 2007   Intel Corporation. All rights reserved.
 * November, 2007 - additions for Create, Delete, Rebuild & Raid 10. 
 * 
 * See file LICENSE at the top of this source tree for license information.
 */

#ifndef _LIB_CONTEXT_H_
#define _LIB_CONTEXT_H_

#include <dmraid/list.h>
#include <dmraid/locking.h>
#include <dmraid/misc.h>

enum lc_lists {
	LC_FORMATS = 0,		/* Metadata format handlers. */
	LC_DISK_INFOS,		/* Disks discovered. */
	LC_RAID_DEVS,		/* Raid devices discovered. */
	LC_RAID_SETS,		/* Raid sets grouped. */
	/* Add new lists below here ! */
	LC_LISTS_SIZE,		/* Must be the last enumerator. */
};

/* List access macros. */
#define	LC_FMT(lc)	(lc_list((lc), LC_FORMATS))
#define	LC_DI(lc)	(lc_list((lc), LC_DISK_INFOS))
#define	LC_RD(lc)	(lc_list((lc), LC_RAID_DEVS))
#define	LC_RS(lc)	(lc_list((lc), LC_RAID_SETS))

enum lc_options {
	LC_COLUMN = 0,
	LC_DEBUG,
	LC_DUMP,
	LC_FORMAT,
	LC_GROUP,
	LC_SETS,
	LC_TEST,
	LC_VERBOSE,
	LC_IGNORELOCKING,
	LC_SEPARATOR,
	LC_DEVICES,
	LC_PARTCHAR,
	LC_CREATE,
	LC_REBUILD_SET,
	LC_REBUILD_DISK,
	LC_HOT_SPARE_SET,	/* Add new options below this one ! */
	LC_OPTIONS_SIZE,	/* Must be the last enumerator. */
};

/* Options access macros. */
/* Return option counter. */
#define	OPT_COLUMN(lc)		(lc_opt(lc, LC_COLUMN))
#define	OPT_DEBUG(lc)		(lc_opt(lc, LC_DEBUG))
#define	OPT_DEVICES(lc)		(lc_opt(lc, LC_DEVICES))
#define	OPT_DUMP(lc)		(lc_opt(lc, LC_DUMP))
#define	OPT_GROUP(lc)		(lc_opt(lc, LC_GROUP))
#define	OPT_FORMAT(lc)		(lc_opt(lc, LC_FORMAT))
#define	OPT_IGNORELOCKING(lc)	(lc_opt(lc, LC_IGNORELOCKING))
#define	OPT_SEPARATOR(lc)	(lc_opt(lc, LC_SEPARATOR))
#define	OPT_SETS(lc)		(lc_opt(lc, LC_SETS))
#define	OPT_TEST(lc)		(lc_opt(lc, LC_TEST))
#define	OPT_VERBOSE(lc)		(lc_opt(lc, LC_VERBOSE))
#define	OPT_PARTCHAR(lc)	(lc_opt(lc, LC_PARTCHAR))
#define	OPT_CREATE(lc)		(lc_opt(lc, LC_CREATE))
#define OPT_HOT_SPARE_SET(lc)	(lc_opt(lc, LC_HOT_SPARE_SET))
#define OPT_REBUILD_DISK(lc)	(lc_opt(lc, LC_REBUILD_DISK))

/* Return option value. */
#define	OPT_STR(lc, o)		(lc->options[o].arg.str)
#define	OPT_STR_COLUMN(lc)	OPT_STR(lc, LC_COLUMN)
#define	OPT_STR_FORMAT(lc)	OPT_STR(lc, LC_FORMAT)
#define	OPT_STR_SEPARATOR(lc)	OPT_STR(lc, LC_SEPARATOR)
#define	OPT_STR_PARTCHAR(lc)	OPT_STR(lc, LC_PARTCHAR)
#define OPT_STR_HOT_SPARE_SET(lc)	OPT_STR(lc, LC_HOT_SPARE_SET)
#define OPT_STR_REBUILD_DISK(lc)	OPT_STR(lc, LC_REBUILD_DISK)

struct lib_version {
	const char *text;
	const char *date;
	struct {
		unsigned int major;
		unsigned int minor;
		unsigned int sub_minor;
		const char *suffix;
	} v;
};

struct lib_options {
	int opt;
	union {
		const char *str;
		uint64_t u64;
		uint64_t u32;
	} arg;
};

struct lib_context {
	struct lib_version version;
	char *cmd;

	/* Option counters used throughout the library. */
	struct lib_options options[LC_OPTIONS_SIZE];

	/*
	 * Lists for:
	 *
	 *      o metadata format handlers the library supports
	 *      o block devices discovered
	 *      o RAID devices discovered
	 *      o RAID sets grouped
	 */
	struct list_head lists[LC_LISTS_SIZE];

	char *locking_name;	/* Locking mechanism selector. */
	struct locking *lock;	/* Resource locking. */

	mode_t mode;		/* File/directrory create modes. */

	struct {
		const char *error;	/* For error mappings. */
	} path;
};


/* Options actions dmraid performs. */
enum action {
	UNDEF = 0x0,
	ACTIVATE = 0x1,
	DEACTIVATE = 0x2,
	FORMAT = 0x4,
#ifndef	DMRAID_MINI
	BLOCK_DEVICES = 0x8,
	COLUMN = 0x10,
	DBG = 0x20,
	DUMP = 0x40,
	DMERASE = 0x80,
	GROUP = 0x100,
#endif
	HELP = 0x200,
#ifndef	DMRAID_MINI
	LIST_FORMATS = 0x400,
#  ifdef	DMRAID_NATIVE_LOG
	NATIVE_LOG = 0x800,
#  endif
#endif
	NOPARTITIONS = 0x1000,
#ifndef	DMRAID_MINI
	RAID_DEVICES = 0x2000,
	RAID_SETS = 0x4000,
	TEST = 0x8000,
	VERBOSE = 0x10000,
	ACTIVE = 0x20000,
	INACTIVE = 0x40000,
	SEPARATOR = 0x80000,
#endif
	VERSION = 0x100000,
	IGNORELOCKING = 0x200000,
#ifndef DMRAID_MINI
	DEL_SETS = 0x400000,
	CREATE = 0x800000,
	REBUILD = 0x1000000,
	SPARE = 0x2000000,
	MEDIA = 0x4000000,
	END_REBUILD = 0x8000000,
	GET_MEMBERS = 0x10000000,
	PARTCHAR = 0x20000000,

#endif
	RMPARTITIONS = 0x40000000,
};

/* Arguments allowed ? */
enum args {
	NO_ARGS,
	ARGS,
};

/* Define which metadata is needed before we can call post functions. */
enum metadata_need {
	M_NONE = 0x00,
	M_DEVICE = 0x01,
	M_RAID = 0x02,
	M_SET = 0x04,
};

enum id {
	ROOT,
	ANY_ID,
};

enum lock {
	LOCK,
	NO_LOCK,
};

/* 
 * Pre and Post functions to perform for an option.
 */
struct prepost {
	enum action action;
	enum metadata_need metadata;
	enum id id;
	enum lock lock;
	int (*pre) (int arg);
	int arg;
	int (*post) (struct lib_context * lc, int arg);
};




extern struct lib_context *alloc_lib_context(char **argv);
extern void free_lib_context(struct lib_context *lc);
extern int lc_opt(struct lib_context *lc, enum lc_options o);
const char *lc_opt_arg(struct lib_context *lc, enum lc_options o);
const char *lc_stralloc_opt(struct lib_context *lc, enum lc_options o,
			    char *arg);
const char *lc_strcat_opt(struct lib_context *lc, enum lc_options o,
			  char *arg, const char delim);
extern int lc_inc_opt(struct lib_context *lc, int o);
extern struct list_head *lc_list(struct lib_context *lc, int l);

extern const char *libdmraid_date(struct lib_context *lc);
extern const char *libdmraid_version(struct lib_context *lc);


#endif