3 * Popt tables for query/verify modes.
8 #include <rpm/rpmcli.h>
9 #include "lib/rpmgi.h" /* XXX for giFlags */
13 struct rpmQVKArguments_s rpmQVKArgs;
15 #define POPT_QUERYFORMAT -1000
16 #define POPT_WHATREQUIRES -1001
17 #define POPT_WHATPROVIDES -1002
18 #define POPT_QUERYBYNUMBER -1003
19 #define POPT_TRIGGEREDBY -1004
20 #define POPT_DUMP -1005
21 #define POPT_QUERYBYPKGID -1007
22 #define POPT_QUERYBYHDRID -1008
23 #define POPT_QUERYBYTID -1010
25 /* ========== Query/Verify/Signature source args */
26 static void rpmQVSourceArgCallback( poptContext con,
27 enum poptCallbackReason reason,
28 const struct poptOption * opt, const char * arg,
31 QVA_t qva = &rpmQVKArgs;
32 rpmQVSources sources = qva->qva_source;;
35 case 'q': /* from --query, -q */
36 case 'Q': /* from --querytags (handled by poptALL) */
37 case 'V': /* from --verify, -V */
38 if (qva->qva_mode == '\0' || strchr("qQ ", qva->qva_mode)) {
39 qva->qva_mode = opt->val;
42 case 'a': qva->qva_source |= RPMQV_ALL; break;
43 case 'f': qva->qva_source |= RPMQV_PATH; break;
44 case 'g': qva->qva_source |= RPMQV_GROUP; break;
45 case 'p': qva->qva_source |= RPMQV_RPM; break;
46 case POPT_WHATPROVIDES: qva->qva_source |= RPMQV_WHATPROVIDES; break;
47 case POPT_WHATREQUIRES: qva->qva_source |= RPMQV_WHATREQUIRES; break;
48 case POPT_TRIGGEREDBY: qva->qva_source |= RPMQV_TRIGGEREDBY; break;
49 case POPT_QUERYBYPKGID: qva->qva_source |= RPMQV_PKGID; break;
50 case POPT_QUERYBYHDRID: qva->qva_source |= RPMQV_HDRID; break;
51 case POPT_QUERYBYTID: qva->qva_source |= RPMQV_TID; break;
52 case POPT_QUERYBYNUMBER: qva->qva_source |= RPMQV_DBOFFSET; break;
55 if (sources != qva->qva_source)
56 qva->qva_sourceCount++;
60 * Common query/verify mode options.
62 struct poptOption rpmQVSourcePoptTable[] = {
64 { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA,
65 rpmQVSourceArgCallback, 0, NULL, NULL },
66 { "all", 'a', 0, 0, 'a',
67 N_("query/verify all packages"), NULL },
68 { "checksig", 'K', POPT_ARGFLAG_DOC_HIDDEN, NULL, 'K',
69 N_("rpm checksig mode"), NULL },
70 { "file", 'f', 0, 0, 'f',
71 N_("query/verify package(s) owning file"), "FILE" },
72 { "group", 'g', 0, 0, 'g',
73 N_("query/verify package(s) in group"), "GROUP" },
74 { "package", 'p', 0, 0, 'p',
75 N_("query/verify a package file"), NULL },
77 { "pkgid", '\0', 0, 0, POPT_QUERYBYPKGID,
78 N_("query/verify package(s) with package identifier"), "MD5" },
79 { "hdrid", '\0', 0, 0, POPT_QUERYBYHDRID,
80 N_("query/verify package(s) with header identifier"), "SHA1" },
82 { "query", 'q', POPT_ARGFLAG_DOC_HIDDEN, NULL, 'q',
83 N_("rpm query mode"), NULL },
84 { "querybynumber", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_QUERYBYNUMBER,
85 N_("query/verify a header instance"), "HDRNUM" },
86 { "tid", '\0', POPT_ARGFLAG_DOC_HIDDEN, 0, POPT_QUERYBYTID,
87 N_("query/verify package(s) from install transaction"), "TID" },
88 { "triggeredby", '\0', 0, 0, POPT_TRIGGEREDBY,
89 N_("query the package(s) triggered by the package"), "PACKAGE" },
90 { "verify", 'V', POPT_ARGFLAG_DOC_HIDDEN, NULL, 'V',
91 N_("rpm verify mode"), NULL },
92 { "whatrequires", '\0', 0, 0, POPT_WHATREQUIRES,
93 N_("query/verify the package(s) which require a dependency"), "CAPABILITY" },
94 { "whatprovides", '\0', 0, 0, POPT_WHATPROVIDES,
95 N_("query/verify the package(s) which provide a dependency"), "CAPABILITY" },
97 { "noglob", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN, &giFlags, RPMGI_NOGLOB,
98 N_("do not glob arguments"), NULL},
99 { "nomanifest", '\0', POPT_BIT_SET, &giFlags, RPMGI_NOMANIFEST,
100 N_("do not process non-package files as manifests"), NULL},
105 /* ========== Query specific popt args */
107 static void queryArgCallback(poptContext con,
108 enum poptCallbackReason reason,
109 const struct poptOption * opt, const char * arg,
112 QVA_t qva = &rpmQVKArgs;
115 case 'c': qva->qva_flags |= QUERY_FOR_CONFIG | QUERY_FOR_LIST; break;
116 case 'd': qva->qva_flags |= QUERY_FOR_DOCS | QUERY_FOR_LIST; break;
117 case 'L': qva->qva_flags |= QUERY_FOR_LICENSE | QUERY_FOR_LIST; break;
118 case 'l': qva->qva_flags |= QUERY_FOR_LIST; break;
119 case 's': qva->qva_flags |= QUERY_FOR_STATE | QUERY_FOR_LIST;
121 case POPT_DUMP: qva->qva_flags |= QUERY_FOR_DUMPFILES | QUERY_FOR_LIST;
124 case POPT_QUERYFORMAT:
125 rstrcat(&qva->qva_queryFormat, arg);
129 if (qva->qva_mode == 'q') {
130 const char * infoCommand[] = { "--info", NULL };
131 (void) poptStuffArgs(con, infoCommand);
135 case RPMCLI_POPT_NODEPS:
136 qva->qva_flags |= VERIFY_DEPS;
139 case RPMCLI_POPT_NOFILEDIGEST:
140 qva->qva_flags |= VERIFY_FILEDIGEST;
143 case RPMCLI_POPT_NOCONTEXTS:
144 qva->qva_flags |= VERIFY_CONTEXTS;
148 case RPMCLI_POPT_FORCE:
150 ( RPMPROB_FILTER_REPLACEPKG
151 | RPMPROB_FILTER_REPLACEOLDFILES
152 | RPMPROB_FILTER_REPLACENEWFILES
153 | RPMPROB_FILTER_OLDPACKAGE );
157 case RPMCLI_POPT_NOSCRIPTS:
158 qva->qva_flags |= VERIFY_SCRIPT;
165 * Query mode options.
167 struct poptOption rpmQueryPoptTable[] = {
169 { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA | POPT_CBFLAG_CONTINUE,
170 queryArgCallback, 0, NULL, NULL },
171 { "configfiles", 'c', 0, 0, 'c',
172 N_("list all configuration files"), NULL },
173 { "docfiles", 'd', 0, 0, 'd',
174 N_("list all documentation files"), NULL },
175 { "licensefiles", 'L', 0, 0, 'L',
176 N_("list all license files"), NULL },
177 { "dump", '\0', 0, 0, POPT_DUMP,
178 N_("dump basic file information"), NULL },
179 { NULL, 'i', POPT_ARGFLAG_DOC_HIDDEN, 0, 'i',
181 { "list", 'l', 0, 0, 'l',
182 N_("list files in package"), NULL },
184 /* Duplicate file attr flags from packages into command line options. */
185 { "noghost", '\0', POPT_BIT_CLR|POPT_ARGFLAG_DOC_HIDDEN,
186 &rpmQVKArgs.qva_fflags, RPMFILE_GHOST,
187 N_("skip %%ghost files"), NULL },
189 { "qf", '\0', POPT_ARG_STRING | POPT_ARGFLAG_DOC_HIDDEN, 0,
190 POPT_QUERYFORMAT, NULL, NULL },
191 { "queryformat", '\0', POPT_ARG_STRING, 0, POPT_QUERYFORMAT,
192 N_("use the following query format"), "QUERYFORMAT" },
193 { "state", 's', 0, 0, 's',
194 N_("display the states of the listed files"), NULL },
199 * Verify mode options.
201 struct poptOption rpmVerifyPoptTable[] = {
203 { NULL, '\0', POPT_ARG_CALLBACK | POPT_CBFLAG_INC_DATA | POPT_CBFLAG_CONTINUE,
204 queryArgCallback, 0, NULL, NULL },
206 { "nofiledigest", '\0', 0, NULL, RPMCLI_POPT_NOFILEDIGEST,
207 N_("don't verify digest of files"), NULL },
208 { "nomd5", '\0', POPT_ARGFLAG_DOC_HIDDEN, NULL, RPMCLI_POPT_NOFILEDIGEST,
209 N_("don't verify digest of files"), NULL },
210 { "nosize", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
211 &rpmQVKArgs.qva_flags, VERIFY_SIZE,
212 N_("don't verify size of files"), NULL },
213 { "nolinkto", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
214 &rpmQVKArgs.qva_flags, VERIFY_LINKTO,
215 N_("don't verify symlink path of files"), NULL },
216 { "nouser", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
217 &rpmQVKArgs.qva_flags, VERIFY_USER,
218 N_("don't verify owner of files"), NULL },
219 { "nogroup", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
220 &rpmQVKArgs.qva_flags, VERIFY_GROUP,
221 N_("don't verify group of files"), NULL },
222 { "nomtime", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
223 &rpmQVKArgs.qva_flags, VERIFY_MTIME,
224 N_("don't verify modification time of files"), NULL },
225 { "nomode", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
226 &rpmQVKArgs.qva_flags, VERIFY_MODE,
227 N_("don't verify mode of files"), NULL },
228 { "nordev", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
229 &rpmQVKArgs.qva_flags, VERIFY_RDEV,
230 N_("don't verify mode of files"), NULL },
231 { "nocaps", '\0', POPT_BIT_SET|POPT_ARGFLAG_DOC_HIDDEN,
232 &rpmQVKArgs.qva_flags, VERIFY_CAPS,
233 N_("don't verify capabilities of files"), NULL },
235 { "nocontexts", '\0', POPT_ARGFLAG_DOC_HIDDEN, NULL, RPMCLI_POPT_NOCONTEXTS,
236 N_("don't verify file security contexts"), NULL },
237 { "nofiles", '\0', POPT_BIT_SET, &rpmQVKArgs.qva_flags, VERIFY_FILES,
238 N_("don't verify files in package"), NULL},
239 { "nodeps", '\0', 0, NULL, RPMCLI_POPT_NODEPS,
240 N_("don't verify package dependencies"), NULL },
242 { "noscript", '\0', 0, NULL, RPMCLI_POPT_NOSCRIPTS,
243 N_("don't execute verify script(s)"), NULL },
244 /* XXX legacy had a trailing s on --noscript */
245 { "noscripts", '\0', POPT_ARGFLAG_DOC_HIDDEN, NULL, RPMCLI_POPT_NOSCRIPTS,
246 N_("don't execute verify script(s)"), NULL },