3 * Popt tables for query/verify modes.
14 struct rpmQVKArguments_s rpmQVKArgs;
19 #define POPT_QUERYFORMAT -1000
20 #define POPT_WHATREQUIRES -1001
21 #define POPT_WHATPROVIDES -1002
22 #define POPT_QUERYBYNUMBER -1003
23 #define POPT_TRIGGEREDBY -1004
24 #define POPT_DUMP -1005
25 #define POPT_SPECFILE -1006
26 #define POPT_QUERYBYPKGID -1007
27 #define POPT_QUERYBYHDRID -1008
28 #define POPT_QUERYBYFILEID -1009
29 #define POPT_QUERYBYTID -1010
30 #define POPT_HDLIST -1011
31 #define POPT_FTSWALK -1012
33 /* ========== Query/Verify/Signature source args */
34 static void rpmQVSourceArgCallback( /*@unused@*/ poptContext con,
35 /*@unused@*/ enum poptCallbackReason reason,
36 const struct poptOption * opt, /*@unused@*/ const char * arg,
37 /*@unused@*/ const void * data)
38 /*@globals rpmQVKArgs @*/
39 /*@modifies rpmQVKArgs @*/
41 QVA_t qva = &rpmQVKArgs;
44 case 'q': /* from --query, -q */
45 case 'Q': /* from --querytags (handled by poptALL) */
46 case 'V': /* from --verify, -V */
47 case 'A': /* from --addsign */
48 case 'I': /* from --import */
49 case 'K': /* from --checksig, -K */
50 case 'R': /* from --resign */
51 if (qva->qva_mode == '\0' || strchr("qQ ", qva->qva_mode)) {
52 qva->qva_mode = opt->val;
56 case 'a': qva->qva_source |= RPMQV_ALL; qva->qva_sourceCount++; break;
57 case 'f': qva->qva_source |= RPMQV_PATH; qva->qva_sourceCount++; break;
58 case 'g': qva->qva_source |= RPMQV_GROUP; qva->qva_sourceCount++; break;
59 case 'p': qva->qva_source |= RPMQV_RPM; qva->qva_sourceCount++; break;
60 case POPT_WHATPROVIDES: qva->qva_source |= RPMQV_WHATPROVIDES;
61 qva->qva_sourceCount++; break;
62 case POPT_WHATREQUIRES: qva->qva_source |= RPMQV_WHATREQUIRES;
63 qva->qva_sourceCount++; break;
64 case POPT_TRIGGEREDBY: qva->qva_source |= RPMQV_TRIGGEREDBY;
65 qva->qva_sourceCount++; break;
66 case POPT_QUERYBYPKGID: qva->qva_source |= RPMQV_PKGID;
67 qva->qva_sourceCount++; break;
68 case POPT_QUERYBYHDRID: qva->qva_source |= RPMQV_HDRID;
69 qva->qva_sourceCount++; break;
70 case POPT_QUERYBYFILEID: qva->qva_source |= RPMQV_FILEID;
71 qva->qva_sourceCount++; break;
72 case POPT_QUERYBYTID: qva->qva_source |= RPMQV_TID;
73 qva->qva_sourceCount++; break;
74 case POPT_HDLIST: qva->qva_source |= RPMQV_HDLIST;
75 qva->qva_sourceCount++; break;
76 case POPT_FTSWALK:qva->qva_source |= RPMQV_FTSWALK;
77 qva->qva_sourceCount++; break;
79 /* XXX SPECFILE is not verify sources */
81 qva->qva_source |= RPMQV_SPECFILE;
82 qva->qva_sourceCount++;
84 case POPT_QUERYBYNUMBER:
85 qva->qva_source |= RPMQV_DBOFFSET;
86 qva->qva_sourceCount++;
92 * Common query/verify mode options.
95 struct poptOption rpmQVSourcePoptTable[] = {
96 /*@-type@*/ /* FIX: cast? */
97 { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA,
98 rpmQVSourceArgCallback, 0, NULL, NULL },
100 { "all", 'a', 0, 0, 'a',
101 N_("query/verify all packages"), NULL },
102 { "checksig", 'K', POPT_ARGFLAG_DOC_HIDDEN, NULL, 'K',
103 N_("rpm checksig mode"), NULL },
104 { "file", 'f', 0, 0, 'f',
105 N_("query/verify package(s) owning file"), "FILE" },
106 { "fileid", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_QUERYBYFILEID,
107 N_("query/verify package(s) with file identifier"), "MD5" },
108 { "ftswalk", 'W', POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_FTSWALK,
109 N_("query/verify package(s) from TOP file tree walk"), "TOP" },
110 { "group", 'g', 0, 0, 'g',
111 N_("query/verify package(s) in group"), "GROUP" },
112 { "hdlist", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_HDLIST,
113 N_("query/verify package(s) from system hdlist"), "TOP" },
114 { "hdrid", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_QUERYBYHDRID,
115 N_("query/verify package(s) with header identifier"), "SHA1" },
116 { "package", 'p', 0, 0, 'p',
117 N_("query/verify a package file"), NULL },
118 { "pkgid", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_QUERYBYPKGID,
119 N_("query/verify package(s) with package identifier"), "MD5" },
120 { "query", 'q', POPT_ARGFLAG_DOC_HIDDEN, NULL, 'q',
121 N_("rpm query mode"), NULL },
122 { "querybynumber", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_QUERYBYNUMBER,
123 N_("query/verify a header instance"), "HDRNUM" },
124 { "specfile", '\0', 0, 0, POPT_SPECFILE,
125 N_("query a spec file"), N_("<spec>") },
126 { "tid", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_QUERYBYTID,
127 N_("query/verify package(s) from install transaction"), "TID" },
128 { "triggeredby", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_TRIGGEREDBY,
129 N_("query the package(s) triggered by the package"), "PACKAGE" },
130 { "verify", 'V', POPT_ARGFLAG_DOC_HIDDEN, NULL, 'V',
131 N_("rpm verify mode"), NULL },
132 { "whatrequires", '\0', 0, 0, POPT_WHATREQUIRES,
133 N_("query/verify the package(s) which require a dependency"), "CAPABILITY" },
134 { "whatprovides", '\0', 0, 0, POPT_WHATPROVIDES,
135 N_("query/verify the package(s) which provide a dependency"), "CAPABILITY" },
139 /* ========== Query specific popt args */
141 static void queryArgCallback(poptContext con,
142 /*@unused@*/enum poptCallbackReason reason,
143 const struct poptOption * opt, const char * arg,
144 /*@unused@*/ const void * data)
145 /*@globals rpmQVKArgs @*/
146 /*@modifies con, rpmQVKArgs @*/
148 QVA_t qva = &rpmQVKArgs;
151 case 'c': qva->qva_flags |= QUERY_FOR_CONFIG | QUERY_FOR_LIST; break;
152 case 'd': qva->qva_flags |= QUERY_FOR_DOCS | QUERY_FOR_LIST; break;
153 case 'l': qva->qva_flags |= QUERY_FOR_LIST; break;
154 case 's': qva->qva_flags |= QUERY_FOR_STATE | QUERY_FOR_LIST;
156 case POPT_DUMP: qva->qva_flags |= QUERY_FOR_DUMPFILES | QUERY_FOR_LIST;
159 case POPT_QUERYFORMAT:
161 char * qf = (char *)qva->qva_queryFormat;
164 int len = strlen(qf) + strlen(arg) + 1;
165 qf = xrealloc(qf, len);
170 qf = xmalloc(strlen(arg) + 1);
174 qva->qva_queryFormat = qf;
179 if (qva->qva_mode == 'q') {
180 /*@-nullassign -readonlytrans@*/
181 const char * infoCommand[] = { "--info", NULL };
182 /*@=nullassign =readonlytrans@*/
183 (void) poptStuffArgs(con, infoCommand);
187 case RPMCLI_POPT_NODIGEST:
188 qva->qva_flags |= VERIFY_DIGEST;
191 case RPMCLI_POPT_NOSIGNATURE:
192 qva->qva_flags |= VERIFY_SIGNATURE;
195 case RPMCLI_POPT_NOHDRCHK:
196 qva->qva_flags |= VERIFY_HDRCHK;
199 case RPMCLI_POPT_NODEPS:
200 qva->qva_flags |= VERIFY_DEPS;
203 case RPMCLI_POPT_NOMD5:
204 qva->qva_flags |= VERIFY_MD5;
207 case RPMCLI_POPT_NOCONTEXTS:
208 qva->qva_flags |= VERIFY_CONTEXTS;
212 case RPMCLI_POPT_FORCE:
214 ( RPMPROB_FILTER_REPLACEPKG
215 | RPMPROB_FILTER_REPLACEOLDFILES
216 | RPMPROB_FILTER_REPLACENEWFILES
217 | RPMPROB_FILTER_OLDPACKAGE );
221 case RPMCLI_POPT_NOSCRIPTS:
222 qva->qva_flags |= VERIFY_SCRIPT;
229 * Query mode options.
232 struct poptOption rpmQueryPoptTable[] = {
233 /*@-type@*/ /* FIX: cast? */
234 { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA | POPT_CBFLAG_CONTINUE,
235 queryArgCallback, 0, NULL, NULL },
237 { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmQVSourcePoptTable, 0,
239 { "configfiles", 'c', 0, 0, 'c',
240 N_("list all configuration files"), NULL },
241 { "docfiles", 'd', 0, 0, 'd',
242 N_("list all documentation files"), NULL },
243 { "dump", '\0', 0, 0, POPT_DUMP,
244 N_("dump basic file information"), NULL },
245 { NULL, 'i', POPT_ARGFLAG_DOC_HIDDEN, 0, 'i',
247 { "list", 'l', 0, 0, 'l',
248 N_("list files in package"), NULL },
250 /* Duplicate file attr flags from packages into command line options. */
251 { "noghost", '\0', POPT_BIT_CLR|POPT_ARGFLAG_DOC_HIDDEN,
252 &rpmQVKArgs.qva_fflags, RPMFILE_GHOST,
253 N_("skip %%ghost files"), NULL },
254 #ifdef NOTEVER /* XXX there's hardly a need for these */
255 { "nolicense", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
256 &rpmQVKArgs.qva_fflags, RPMFILE_LICENSE,
257 N_("skip %%license files"), NULL },
258 { "noreadme", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
259 &rpmQVKArgs.qva_fflags, RPMFILE_README,
260 N_("skip %%readme files"), NULL },
263 { "qf", '\0', POPT_ARG_STRING | POPT_ARGFLAG_DOC_HIDDEN, 0,
264 POPT_QUERYFORMAT, NULL, NULL },
265 { "queryformat", '\0', POPT_ARG_STRING, 0, POPT_QUERYFORMAT,
266 N_("use the following query format"), "QUERYFORMAT" },
267 { "specedit", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &specedit, -1,
268 N_("substitute i18n sections into spec file"), NULL },
269 { "state", 's', 0, 0, 's',
270 N_("display the states of the listed files"), NULL },
275 * Verify mode options.
277 struct poptOption rpmVerifyPoptTable[] = {
278 /*@-type@*/ /* FIX: cast? */
279 { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA | POPT_CBFLAG_CONTINUE,
280 queryArgCallback, 0, NULL, NULL },
282 { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmQVSourcePoptTable, 0,
285 /* Duplicate file verify flags from packages into command line options. */
286 /** @todo Add --nomd5 alias to rpmpopt, eliminate. */
288 { "nomd5", '\0', POPT_BIT_SET, &rpmQVKArgs.qva_flags, VERIFY_MD5,
289 N_("don't verify MD5 digest of files"), NULL },
291 { "nomd5", '\0', 0, NULL, RPMCLI_POPT_NOMD5,
292 N_("don't verify MD5 digest of files"), NULL },
294 { "nosize", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
295 &rpmQVKArgs.qva_flags, VERIFY_SIZE,
296 N_("don't verify size of files"), NULL },
297 { "nolinkto", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
298 &rpmQVKArgs.qva_flags, VERIFY_LINKTO,
299 N_("don't verify symlink path of files"), NULL },
300 { "nouser", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
301 &rpmQVKArgs.qva_flags, VERIFY_USER,
302 N_("don't verify owner of files"), NULL },
303 { "nogroup", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
304 &rpmQVKArgs.qva_flags, VERIFY_GROUP,
305 N_("don't verify group of files"), NULL },
306 { "nomtime", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
307 &rpmQVKArgs.qva_flags, VERIFY_MTIME,
308 N_("don't verify modification time of files"), NULL },
309 { "nomode", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
310 &rpmQVKArgs.qva_flags, VERIFY_MODE,
311 N_("don't verify mode of files"), NULL },
312 { "nordev", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
313 &rpmQVKArgs.qva_flags, VERIFY_RDEV,
314 N_("don't verify mode of files"), NULL },
316 { "nocontexts", '\0', POPT_ARGFLAG_DOC_HIDDEN, NULL, RPMCLI_POPT_NOCONTEXTS,
317 N_("don't verify file security contexts"), NULL },
318 { "nofiles", '\0', POPT_BIT_SET, &rpmQVKArgs.qva_flags, VERIFY_FILES,
319 N_("don't verify files in package"), NULL},
321 { "nodeps", '\0', POPT_BIT_SET, &rpmQVKArgs.qva_flags, VERIFY_DEPS,
322 N_("don't verify package dependencies"), NULL },
324 { "nodeps", '\0', 0, NULL, RPMCLI_POPT_NODEPS,
325 N_("don't verify package dependencies"), NULL },
329 { "noscript", '\0', POPT_BIT_SET,&rpmQVKArgs.qva_flags, VERIFY_SCRIPT,
330 N_("don't execute verify script(s)"), NULL },
331 /* XXX legacy had a trailing s on --noscript */
332 { "noscripts", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
333 &rpmQVKArgs.qva_flags, VERIFY_SCRIPT,
334 N_("don't execute verify script(s)"), NULL },
336 { "noscript", '\0', 0, NULL, RPMCLI_POPT_NOSCRIPTS,
337 N_("don't execute verify script(s)"), NULL },
338 /* XXX legacy had a trailing s on --noscript */
339 { "noscripts", '\0', POPT_ARGFLAG_DOC_HIDDEN, NULL, RPMCLI_POPT_NOSCRIPTS,
340 N_("don't execute verify script(s)"), NULL },
344 { "nodigest", '\0', POPT_BIT_SET, &rpmQVKArgs.qva_flags, VERIFY_DIGEST,
345 N_("don't verify package digest(s)"), NULL },
346 { "nohdrchk", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
347 &rpmQVKArgs.qva_flags, VERIFY_HDRCHK,
348 N_("don't verify database header(s) when retrieved"), NULL },
349 { "nosignature", '\0', POPT_BIT_SET,
350 &rpmQVKArgs.qva_flags, VERIFY_SIGNATURE,
351 N_("don't verify package signature(s)"), NULL },
353 { "nodigest", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, RPMCLI_POPT_NODIGEST,
354 N_("don't verify package digest(s)"), NULL },
355 { "nohdrchk", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, RPMCLI_POPT_NOHDRCHK,
356 N_("don't verify database header(s) when retrieved"), NULL },
357 { "nosignature", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, RPMCLI_POPT_NOSIGNATURE,
358 N_("don't verify package signature(s)"), NULL },
361 /** @todo Add --nogpg/--nopgp aliases to rpmpopt, eliminate. */
362 { "nogpg", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
363 &rpmQVKArgs.qva_flags, VERIFY_SIGNATURE,
364 N_("don't verify GPG V3 DSA signature(s)"), NULL },
365 { "nopgp", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
366 &rpmQVKArgs.qva_flags, VERIFY_SIGNATURE,
367 N_("don't verify PGP V3 RSA/MD5 signature(s)"), NULL },
373 * Signature mode options.
376 struct poptOption rpmSignPoptTable[] = {
377 /*@-type@*/ /* FIX: cast? */
378 { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA | POPT_CBFLAG_CONTINUE,
379 rpmQVSourceArgCallback, 0, NULL, NULL },
381 { "addsign", '\0', 0, NULL, 'A',
382 N_("sign package(s) (identical to --resign)"), NULL },
383 { "checksig", 'K', 0, NULL, 'K',
384 N_("verify package signature(s)"), NULL },
385 { "import", '\0', 0, NULL, 'I',
386 N_("import an armored public key"), NULL },
387 { "resign", '\0', 0, NULL, 'R',
388 N_("sign package(s) (identical to --addsign)"), NULL },
389 { "sign", '\0', POPT_ARGFLAG_DOC_HIDDEN, &rpmQVKArgs.sign, 0,
390 N_("generate signature"), NULL },
392 { "nodigest", '\0', POPT_BIT_SET, &rpmQVKArgs.qva_flags, VERIFY_DIGEST,
393 N_("don't verify package digest(s)"), NULL },
394 { "nohdrchk", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
395 &rpmQVKArgs.qva_flags, VERIFY_HDRCHK,
396 N_("don't verify database header(s) when retrieved"), NULL },
397 { "nosignature", '\0', POPT_BIT_SET, &rpmQVKArgs.qva_flags, VERIFY_SIGNATURE,
398 N_("don't verify package signature(s)"), NULL },