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
31 /* ========== Query/Verify/Signature source args */
32 static void rpmQVSourceArgCallback( /*@unused@*/ poptContext con,
33 /*@unused@*/ enum poptCallbackReason reason,
34 const struct poptOption * opt, /*@unused@*/ const char * arg,
35 /*@unused@*/ const void * data)
36 /*@globals rpmQVKArgs @*/
37 /*@modifies rpmQVKArgs @*/
39 QVA_t qva = &rpmQVKArgs;
42 case 'q': /* from --query, -q */
43 case 'Q': /* from --querytags */
44 case 'V': /* from --verify, -V */
45 case 'A': /* from --addsign */
46 case 'I': /* from --import */
47 case 'K': /* from --checksig, -K */
48 case 'R': /* from --resign */
49 if (qva->qva_mode == ' ') {
50 qva->qva_mode = opt->val;
54 case 'a': qva->qva_source |= RPMQV_ALL; qva->qva_sourceCount++; break;
55 case 'f': qva->qva_source |= RPMQV_PATH; qva->qva_sourceCount++; break;
56 case 'g': qva->qva_source |= RPMQV_GROUP; qva->qva_sourceCount++; break;
57 case 'p': qva->qva_source |= RPMQV_RPM; qva->qva_sourceCount++; break;
58 case POPT_WHATPROVIDES: qva->qva_source |= RPMQV_WHATPROVIDES;
59 qva->qva_sourceCount++; break;
60 case POPT_WHATREQUIRES: qva->qva_source |= RPMQV_WHATREQUIRES;
61 qva->qva_sourceCount++; break;
62 case POPT_TRIGGEREDBY: qva->qva_source |= RPMQV_TRIGGEREDBY;
63 qva->qva_sourceCount++; break;
64 case POPT_QUERYBYPKGID: qva->qva_source |= RPMQV_PKGID;
65 qva->qva_sourceCount++; break;
66 case POPT_QUERYBYHDRID: qva->qva_source |= RPMQV_HDRID;
67 qva->qva_sourceCount++; break;
68 case POPT_QUERYBYFILEID: qva->qva_source |= RPMQV_FILEID;
69 qva->qva_sourceCount++; break;
70 case POPT_QUERYBYTID: qva->qva_source |= RPMQV_TID;
71 qva->qva_sourceCount++; break;
73 /* XXX SPECFILE is not verify sources */
75 qva->qva_source |= RPMQV_SPECFILE;
76 qva->qva_sourceCount++;
78 case POPT_QUERYBYNUMBER:
79 qva->qva_source |= RPMQV_DBOFFSET;
80 qva->qva_sourceCount++;
86 * Common query/verify mode options.
89 struct poptOption rpmQVSourcePoptTable[] = {
90 /*@-type@*/ /* FIX: cast? */
91 { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA,
92 rpmQVSourceArgCallback, 0, NULL, NULL },
94 { "all", 'a', 0, 0, 'a',
95 N_("query/verify all packages"), NULL },
96 { "checksig", 'K', POPT_ARGFLAG_DOC_HIDDEN, NULL, 'K',
97 N_("rpm checksig mode"), NULL },
98 { "file", 'f', 0, 0, 'f',
99 N_("query/verify package(s) owning file"), "FILE" },
100 { "fileid", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_QUERYBYFILEID,
101 N_("query/verify package(s) with file identifier"), "MD5" },
102 { "group", 'g', 0, 0, 'g',
103 N_("query/verify package(s) in group"), "GROUP" },
104 { "hdrid", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_QUERYBYHDRID,
105 N_("query/verify package(s) with header identifier"), "SHA1" },
106 { "package", 'p', 0, 0, 'p',
107 N_("query/verify a package file (i.e. a binary *.rpm file)"), NULL },
108 { "pkgid", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_QUERYBYPKGID,
109 N_("query/verify package(s) with package identifier"), "MD5" },
110 { "query", 'q', POPT_ARGFLAG_DOC_HIDDEN, NULL, 'q',
111 N_("rpm query mode"), NULL },
112 { "querybynumber", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0,
113 POPT_QUERYBYNUMBER, NULL, NULL },
114 { "querytags", '\0', 0, 0, 'Q',
115 N_("display known query tags"), NULL },
116 { "specfile", '\0', 0, 0, POPT_SPECFILE,
117 N_("query a spec file"), N_("<spec>") },
118 { "tid", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_QUERYBYTID,
119 N_("query/verify package(s) from install transaction"), "TID" },
120 { "triggeredby", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_TRIGGEREDBY,
121 N_("query the package(s) triggered by the package"), "PACKAGE" },
122 { "verify", 'V', POPT_ARGFLAG_DOC_HIDDEN, NULL, 'V',
123 N_("rpm verify mode"), NULL },
124 { "whatrequires", '\0', 0, 0, POPT_WHATREQUIRES,
125 N_("query/verify the package(s) which require a dependency"), "CAPABILITY" },
126 { "whatprovides", '\0', 0, 0, POPT_WHATPROVIDES,
127 N_("query/verify the package(s) which provide a dependency"), "CAPABILITY" },
131 /* ========== Query specific popt args */
133 static void queryArgCallback(/*@unused@*/poptContext con,
134 /*@unused@*/enum poptCallbackReason reason,
135 const struct poptOption * opt, const char * arg,
136 /*@unused@*/ const void * data)
137 /*@globals rpmQVKArgs @*/
138 /*@modifies rpmQVKArgs @*/
140 QVA_t qva = &rpmQVKArgs;
143 case 'c': qva->qva_flags |= QUERY_FOR_CONFIG | QUERY_FOR_LIST; break;
144 case 'd': qva->qva_flags |= QUERY_FOR_DOCS | QUERY_FOR_LIST; break;
145 case 'l': qva->qva_flags |= QUERY_FOR_LIST; break;
146 case 's': qva->qva_flags |= QUERY_FOR_STATE | QUERY_FOR_LIST;
148 case POPT_DUMP: qva->qva_flags |= QUERY_FOR_DUMPFILES | QUERY_FOR_LIST;
151 /*@-internalglobs@*/ /* FIX: shrug */
152 rpmIncreaseVerbosity();
156 case POPT_QUERYFORMAT:
158 char * qf = (char *)qva->qva_queryFormat;
161 int len = strlen(qf) + strlen(arg) + 1;
162 qf = xrealloc(qf, len);
165 qf = xmalloc(strlen(arg) + 1);
169 qva->qva_queryFormat = qf;
176 * Query mode options.
179 struct poptOption rpmQueryPoptTable[] = {
180 /*@-type@*/ /* FIX: cast? */
181 { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA,
182 queryArgCallback, 0, NULL, NULL },
184 { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmQVSourcePoptTable, 0,
186 { "configfiles", 'c', 0, 0, 'c',
187 N_("list all configuration files"), NULL },
188 { "docfiles", 'd', 0, 0, 'd',
189 N_("list all documentation files"), NULL },
190 { "dump", '\0', 0, 0, POPT_DUMP,
191 N_("dump basic file information"), NULL },
192 { "list", 'l', 0, 0, 'l',
193 N_("list files in package"), NULL },
195 /* Duplicate file attr flags from packages into command line options. */
196 { "noghost", '\0', POPT_BIT_CLR|POPT_ARGFLAG_DOC_HIDDEN,
197 &rpmQVKArgs.qva_fflags, RPMFILE_GHOST,
198 N_("skip %%ghost files"), NULL },
199 #ifdef NOTEVER /* XXX there's hardly a need for these */
200 { "nolicense", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
201 &rpmQVKArgs.qva_fflags, RPMFILE_LICENSE,
202 N_("skip %%license files"), NULL },
203 { "noreadme", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
204 &rpmQVKArgs.qva_fflags, RPMFILE_README,
205 N_("skip %%readme files"), NULL },
208 { "qf", '\0', POPT_ARG_STRING | POPT_ARGFLAG_DOC_HIDDEN, 0,
209 POPT_QUERYFORMAT, NULL, NULL },
210 { "queryformat", '\0', POPT_ARG_STRING, 0, POPT_QUERYFORMAT,
211 N_("use the following query format"), "QUERYFORMAT" },
212 { "specedit", '\0', POPT_ARG_VAL|POPT_ARGFLAG_DOC_HIDDEN, &specedit, -1,
213 N_("substitute i18n sections into spec file"), NULL },
214 { "state", 's', 0, 0, 's',
215 N_("display the states of the listed files"), NULL },
216 { "verbose", 'v', 0, 0, 'v',
217 N_("display a verbose file listing"), NULL },
222 * Verify mode options.
224 struct poptOption rpmVerifyPoptTable[] = {
226 /*@-type@*/ /* FIX: cast? */
227 { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA,
228 verifyArgCallback, 0, NULL, NULL },
231 { NULL, '\0', POPT_ARG_INCLUDE_TABLE, rpmQVSourcePoptTable, 0,
234 /* Duplicate file verify flags from packages into command line options. */
235 /** @todo Add --nomd5 alias to rpmpopt, eliminate. */
236 { "nomd5", '\0', POPT_BIT_SET, &rpmQVKArgs.qva_flags, VERIFY_MD5,
237 N_("don't verify MD5 digest of files"), NULL },
238 { "nosize", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
239 &rpmQVKArgs.qva_flags, VERIFY_SIZE,
240 N_("don't verify size of files"), NULL },
241 { "nolinkto", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
242 &rpmQVKArgs.qva_flags, VERIFY_LINKTO,
243 N_("don't verify symlink path of files"), NULL },
244 { "nouser", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
245 &rpmQVKArgs.qva_flags, VERIFY_USER,
246 N_("don't verify owner of files"), NULL },
247 { "nogroup", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
248 &rpmQVKArgs.qva_flags, VERIFY_GROUP,
249 N_("don't verify group of files"), NULL },
250 { "nomtime", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
251 &rpmQVKArgs.qva_flags, VERIFY_MTIME,
252 N_("don't verify modification time of files"), NULL },
253 { "nomode", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
254 &rpmQVKArgs.qva_flags, VERIFY_MODE,
255 N_("don't verify mode of files"), NULL },
256 { "nordev", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
257 &rpmQVKArgs.qva_flags, VERIFY_RDEV,
258 N_("don't verify mode of files"), NULL },
260 { "nofiles", '\0', POPT_BIT_SET, &rpmQVKArgs.qva_flags, VERIFY_FILES,
261 N_("don't verify files in package"), NULL},
262 { "nodeps", '\0', POPT_BIT_SET, &rpmQVKArgs.qva_flags, VERIFY_DEPS,
263 N_("don't verify package dependencies"), NULL },
264 { "noscript", '\0', POPT_BIT_SET,&rpmQVKArgs.qva_flags, VERIFY_SCRIPT,
265 N_("don't execute verify script(s)"), NULL },
266 /* XXX legacy had a trailing s on --noscript */
267 { "noscripts", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
268 &rpmQVKArgs.qva_flags, VERIFY_SCRIPT,
269 N_("don't execute verify script(s)"), NULL },
270 { "nodigest", '\0', POPT_BIT_SET,
271 &rpmQVKArgs.qva_flags, VERIFY_DIGEST,
272 N_("don't verify digest(s)"), NULL },
273 { "nosignature", '\0', POPT_BIT_SET,
274 &rpmQVKArgs.qva_flags, VERIFY_SIGNATURE,
275 N_("don't verify signature(s)"), NULL },
277 /** @todo Add --nogpg/--nopgp aliases to rpmpopt, eliminate. */
278 { "nogpg", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
279 &rpmQVKArgs.qva_flags, VERIFY_SIGNATURE,
280 N_("don't verify GPG V3 DSA signature(s)"), NULL },
281 { "nopgp", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
282 &rpmQVKArgs.qva_flags, VERIFY_SIGNATURE,
283 N_("don't verify PGP V3 RSA/MD5 signature(s)"), NULL },
289 * Signature mode options.
292 struct poptOption rpmSignPoptTable[] = {
293 /*@-type@*/ /* FIX: cast? */
294 { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA,
295 rpmQVSourceArgCallback, 0, NULL, NULL },
297 { "addsign", '\0', 0, NULL, 'A',
298 N_("sign a packagei (identical to --resign)"), NULL },
299 { "checksig", 'K', 0, NULL, 'K',
300 N_("verify package signature(s)"), NULL },
301 { "import", '\0', 0, NULL, 'I',
302 N_("import an armored public key"), NULL },
303 { "resign", '\0', 0, NULL, 'R',
304 N_("sign a packagei (identical to --addsign)"), NULL },
305 { "sign", '\0', POPT_ARGFLAG_DOC_HIDDEN, &rpmQVKArgs.sign, 0,
306 N_("generate signature"), NULL },
308 { "nodigest", '\0', POPT_BIT_SET, &rpmQVKArgs.qva_flags, VERIFY_DIGEST,
309 N_("don't verify digest(s)"), NULL },
310 { "nosignature", '\0', POPT_BIT_SET, &rpmQVKArgs.qva_flags, VERIFY_SIGNATURE,
311 N_("don't verify signature(s)"), NULL },