- verify signatures/digests retrieved through rpmdbNextIterator().
[platform/upstream/rpm.git] / lib / rpmcli.h
1 #ifndef H_RPMCLI
2 #define H_RPMCLI
3
4 /** \ingroup rpmcli rpmbuild
5  * \file lib/rpmcli.h
6  */
7
8 #include "rpmlib.h"
9 #include "rpmurl.h"
10 #include "rpmmacro.h"
11
12 /** \ingroup rpmcli
13  * Should version 3 packages be produced?
14  */
15 /*@-redecl@*/
16 /*@unchecked@*/
17 extern int _noDirTokens;
18 /*@=redecl@*/
19
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23
24 /** \ingroup rpmcli
25  * Popt option table for options shared by all modes and executables.
26  */
27 /*@unchecked@*/
28 extern struct poptOption                rpmcliAllPoptTable[];
29
30 /**
31  * Initialize most everything needed by an rpm CLI executable context.
32  * @param argc                  no. of args
33  * @param argv                  arg array
34  * @param optionsTable          popt option table
35  * @return                      popt context (or NULL)
36  */
37 /*@null@*/
38 poptContext
39 rpmcliInit(int argc, char *const argv[], struct poptOption * optionsTable)
40         /*@globals rpmCLIMacroContext, rpmGlobalMacroContext, stderr, 
41                 fileSystem, internalState @*/
42         /*@modifies rpmCLIMacroContext, rpmGlobalMacroContext, stderr, 
43                 fileSystem, internalState @*/;
44
45 /**
46  * Destroy most everything needed by an rpm CLI executable context.
47  * @param optCon                popt context
48  * @return                      NULL always
49  */
50 poptContext
51 rpmcliFini(/*@only@*/ /*@null@*/ poptContext optCon)
52         /*@modifies optCon @*/;
53
54 /* ==================================================================== */
55 /** \name RPMBT */
56 /*@{*/
57
58 /** \ingroup rpmcli
59  * Describe build command line request.
60  */
61 struct rpmBuildArguments_s {
62     int buildAmount;            /*!< Bit(s) to control operation. */
63 /*@null@*/
64     const char * buildRootOverride; /*!< from --buildroot */
65 /*@null@*/
66     char * targets;             /*!< Target platform(s), comma separated. */
67 /*@observer@*/
68     const char * passPhrase;    /*!< Pass phrase. */
69 /*@only@*/ /*@null@*/
70     const char * cookie;        /*!< NULL for binary, ??? for source, rpm's */
71     int force;                  /*!< from --force */
72     int noBuild;                /*!< from --nobuild */
73     int noDeps;                 /*!< from --nodeps */
74     int noLang;                 /*!< from --nolang */
75     int shortCircuit;           /*!< from --short-circuit */
76     int sign;                   /*!< from --sign */
77     int useCatalog;             /*!< from --usecatalog */
78     char buildMode;             /*!< Build mode (one of "btBC") */
79     char buildChar;             /*!< Build stage (one of "abcilps ") */
80 /*@observer@*/ /*@null@*/
81     const char * rootdir;
82 };
83
84 /** \ingroup rpmcli
85  */
86 typedef struct rpmBuildArguments_s *    BTA_t;
87
88 /** \ingroup rpmcli
89  */
90 /*@unchecked@*/
91 extern struct rpmBuildArguments_s       rpmBTArgs;
92
93 /** \ingroup rpmcli
94  */
95 /*@unchecked@*/
96 extern struct poptOption                rpmBuildPoptTable[];
97
98 /*@}*/
99 /* ==================================================================== */
100 /** \name RPMQV */
101 /*@{*/
102
103 /** \ingroup rpmcli
104  * Query/Verify argument qualifiers.
105  * @todo Reassign to tag values.
106  */
107 typedef enum rpmQVSources_e {
108     RPMQV_PACKAGE = 0,  /*!< ... from package name db search. */
109     RPMQV_PATH,         /*!< ... from file path db search. */
110     RPMQV_ALL,          /*!< ... from each installed package. */
111     RPMQV_RPM,          /*!< ... from reading binary rpm package. */
112     RPMQV_GROUP,        /*!< ... from group db search. */
113     RPMQV_WHATPROVIDES, /*!< ... from provides db search. */
114     RPMQV_WHATREQUIRES, /*!< ... from requires db search. */
115     RPMQV_TRIGGEREDBY,  /*!< ... from trigger db search. */
116     RPMQV_DBOFFSET,     /*!< ... from database header instance. */
117     RPMQV_SPECFILE,     /*!< ... from spec file parse (query only). */
118     RPMQV_PKGID,        /*!< ... from package id (header+payload MD5). */
119     RPMQV_HDRID,        /*!< ... from header id (immutable header SHA1). */
120     RPMQV_FILEID,       /*!< ... from file id (file MD5). */
121     RPMQV_TID           /*!< ... from install transaction id (time stamp). */
122 } rpmQVSources;
123
124 /** \ingroup rpmcli
125  * Bit(s) for rpmVerifyFile() attributes and result.
126  */
127 typedef enum rpmVerifyAttrs_e {
128     RPMVERIFY_NONE      = 0,            /*!< */
129     RPMVERIFY_MD5       = (1 << 0),     /*!< from %verify(md5) */
130     RPMVERIFY_FILESIZE  = (1 << 1),     /*!< from %verify(size) */
131     RPMVERIFY_LINKTO    = (1 << 2),     /*!< from %verify(link) */
132     RPMVERIFY_USER      = (1 << 3),     /*!< from %verify(user) */
133     RPMVERIFY_GROUP     = (1 << 4),     /*!< from %verify(group) */
134     RPMVERIFY_MTIME     = (1 << 5),     /*!< from %verify(mtime) */
135     RPMVERIFY_MODE      = (1 << 6),     /*!< from %verify(mode) */
136     RPMVERIFY_RDEV      = (1 << 7),     /*!< from %verify(rdev) */
137         /* bits 8-15 unused, reserved for rpmVerifyAttrs */
138         /* bits 16-20 used in rpmVerifyFlags */
139         /* bits 21-22 unused */
140         /* bits 23-27 used in rpmQueryFlags */
141     RPMVERIFY_READLINKFAIL= (1 << 28),  /*!< */
142     RPMVERIFY_READFAIL  = (1 << 29),    /*!< */
143     RPMVERIFY_LSTATFAIL = (1 << 30)     /*!< */
144         /* bit 31 unused */
145 } rpmVerifyAttrs;
146 #define RPMVERIFY_ALL           ~(RPMVERIFY_NONE)
147
148 /** \ingroup rpmcli
149  * Bit(s) to control rpmQuery() operation, stored in qva_flags.
150  * @todo Merge rpmQueryFlags, rpmVerifyFlags, and rpmVerifyAttrs?.
151  */
152 typedef enum rpmQueryFlags_e {
153 /*@-enummemuse@*/
154     QUERY_FOR_DEFAULT   = 0,            /*!< */
155     QUERY_MD5           = (1 << 0),     /*!< from --nomd5 */
156     QUERY_SIZE          = (1 << 1),     /*!< from --nosize */
157     QUERY_LINKTO        = (1 << 2),     /*!< from --nolink */
158     QUERY_USER          = (1 << 3),     /*!< from --nouser) */
159     QUERY_GROUP         = (1 << 4),     /*!< from --nogroup) */
160     QUERY_MTIME         = (1 << 5),     /*!< from --nomtime) */
161     QUERY_MODE          = (1 << 6),     /*!< from --nomode) */
162     QUERY_RDEV          = (1 << 7),     /*!< from --nodev */
163         /* bits 8-15 unused, reserved for rpmVerifyAttrs */
164     QUERY_FILES         = (1 << 16),    /*!< verify: from --nofiles */
165     QUERY_DEPS          = (1 << 17),    /*!< verify: from --nodeps */
166     QUERY_SCRIPT        = (1 << 18),    /*!< verify: from --noscripts */
167     QUERY_DIGEST        = (1 << 19),    /*!< verify: from --nodigest */
168     QUERY_SIGNATURE     = (1 << 20),    /*!< verify: from --nosignature */
169     QUERY_PATCHES       = (1 << 21),    /*!< placeholder (SuSE) */
170     QUERY_HDRCHK        = (1 << 22),    /*!< verify: from --nohdrchk */
171 /*@=enummemuse@*/
172     QUERY_FOR_LIST      = (1 << 23),    /*!< query:  from --list */
173     QUERY_FOR_STATE     = (1 << 24),    /*!< query:  from --state */
174     QUERY_FOR_DOCS      = (1 << 25),    /*!< query:  from --docfiles */
175     QUERY_FOR_CONFIG    = (1 << 26),    /*!< query:  from --configfiles */
176     QUERY_FOR_DUMPFILES = (1 << 27)     /*!< query:  from --dump */
177 } rpmQueryFlags;
178
179 #define _QUERY_FOR_BITS \
180    (QUERY_FOR_LIST|QUERY_FOR_STATE|QUERY_FOR_DOCS|QUERY_FOR_CONFIG|\
181     QUERY_FOR_DUMPFILES)
182
183 /** \ingroup rpmcli
184  * Bit(s) to control rpmVerify() operation, stored in qva_flags.
185  * @todo Merge rpmQueryFlags, rpmVerifyFlags, and rpmVerifyAttrs values?.
186  */
187 typedef enum rpmVerifyFlags_e {
188 /*@-enummemuse@*/
189     VERIFY_DEFAULT      = 0,            /*!< */
190 /*@=enummemuse@*/
191     VERIFY_MD5          = (1 << 0),     /*!< from --nomd5 */
192     VERIFY_SIZE         = (1 << 1),     /*!< from --nosize */
193     VERIFY_LINKTO       = (1 << 2),     /*!< from --nolinkto */
194     VERIFY_USER         = (1 << 3),     /*!< from --nouser */
195     VERIFY_GROUP        = (1 << 4),     /*!< from --nogroup */
196     VERIFY_MTIME        = (1 << 5),     /*!< from --nomtime */
197     VERIFY_MODE         = (1 << 6),     /*!< from --nomode */
198     VERIFY_RDEV         = (1 << 7),     /*!< from --nodev */
199         /* bits 8-15 unused, reserved for rpmVerifyAttrs */
200     VERIFY_FILES        = (1 << 16),    /*!< verify: from --nofiles */
201     VERIFY_DEPS         = (1 << 17),    /*!< verify: from --nodeps */
202     VERIFY_SCRIPT       = (1 << 18),    /*!< verify: from --noscripts */
203     VERIFY_DIGEST       = (1 << 19),    /*!< verify: from --nodigest */
204     VERIFY_SIGNATURE    = (1 << 20),    /*!< verify: from --nosignature */
205     VERIFY_PATCHES      = (1 << 21),    /*!< placeholder (SuSE) */
206     VERIFY_HDRCHK       = (1 << 22),    /*!< verify: from --nohdrchk */
207 /*@-enummemuse@*/
208     VERIFY_FOR_LIST     = (1 << 23),    /*!< query:  from --list */
209     VERIFY_FOR_STATE    = (1 << 24),    /*!< query:  from --state */
210     VERIFY_FOR_DOCS     = (1 << 25),    /*!< query:  from --docfiles */
211     VERIFY_FOR_CONFIG   = (1 << 26),    /*!< query:  from --configfiles */
212     VERIFY_FOR_DUMPFILES= (1 << 27)     /*!< query:  from --dump */
213 /*@=enummemuse@*/
214         /* bits 28-30 used in rpmVerifyAttrs */
215 } rpmVerifyFlags;
216
217 #define VERIFY_ATTRS    \
218   ( VERIFY_MD5 | VERIFY_SIZE | VERIFY_LINKTO | VERIFY_USER | VERIFY_GROUP | \
219     VERIFY_MTIME | VERIFY_MODE | VERIFY_RDEV )
220 #define VERIFY_ALL      \
221   ( VERIFY_ATTRS | VERIFY_FILES | VERIFY_DEPS | VERIFY_SCRIPT | VERIFY_DIGEST |\
222     VERIFY_SIGNATURE | VERIFY_HDRCHK )
223
224 /** \ingroup rpmcli
225  */
226 typedef struct rpmQVKArguments_s * QVA_t;
227
228 /** \ingroup rpmcli
229  * Function to display iterator matches.
230  *
231  * @param qva           parsed query/verify options
232  * @param ts            transaction set
233  * @param h             header to use for query/verify
234  */
235 typedef int (*QVF_t) (QVA_t qva, rpmts ts, Header h)
236         /*@globals fileSystem@*/
237         /*@modifies qva, ts, fileSystem @*/;
238
239 /** \ingroup rpmcli
240  * Describe query/verify/signature command line operation.
241  */
242 struct rpmQVKArguments_s {
243     rpmQVSources qva_source;    /*!< Identify CLI arg type. */
244     int         qva_sourceCount;/*!< Exclusive option check (>1 is error). */
245     rpmQueryFlags qva_flags;    /*!< Bit(s) to control operation. */
246     rpmfileAttrs qva_fflags;    /*!< Bit(s) to filter on attribute. */
247 /*@only@*/ /*@null@*/
248     rpmdbMatchIterator qva_mi;  /*!< Match iterator on selected headers. */
249 /*@null@*/
250     QVF_t qva_showPackage;      /*!< Function to display iterator matches. */
251 /*@unused@*/
252     int qva_verbose;            /*!< (unused) */
253 /*@only@*/ /*@null@*/
254     const char * qva_queryFormat;/*!< Format for headerSprintf(). */
255     int sign;                   /*!< Is a passphrase needed? */
256 /*@observer@*/
257     const char * passPhrase;    /*!< Pass phrase. */
258 /*@observer@*/ /*@null@*/
259     const char * qva_prefix;    /*!< Path to top of install tree. */
260     char        qva_mode;
261                 /*!<
262                 - 'q'   from --query, -q
263                 - 'Q'   from --querytags
264                 - 'V'   from --verify, -V
265                 - 'A'   from --addsign
266                 - 'I'   from --import
267                 - 'K'   from --checksig, -K
268                 - 'R'   from --resign
269                 */
270     char        qva_char;       /*!< (unused) always ' ' */
271 };
272
273 /** \ingroup rpmcli
274  */
275 /*@unchecked@*/
276 extern struct rpmQVKArguments_s rpmQVKArgs;
277
278 /** \ingroup rpmcli
279  */
280 /*@unchecked@*/
281 extern struct poptOption rpmQVSourcePoptTable[];
282
283 /** \ingroup rpmcli
284  */
285 /*@unchecked@*/
286 extern int specedit;
287
288 /** \ingroup rpmcli
289  */
290 /*@unchecked@*/
291 extern struct poptOption rpmQueryPoptTable[];
292
293 /** \ingroup rpmcli
294  */
295 /*@unchecked@*/
296 extern struct poptOption rpmVerifyPoptTable[];
297
298 /** \ingroup rpmcli
299  * Display query/verify information for each header in iterator.
300  *
301  * This routine uses:
302  *      - qva->qva_mi           rpm database iterator
303  *      - qva->qva_showPackage  query/verify display routine
304  *
305  * @param qva           parsed query/verify options
306  * @param ts            transaction set
307  * @return              result of last non-zero showPackage() return
308  */
309 int showMatches(QVA_t qva, rpmts ts)
310         /*@globals fileSystem@*/
311         /*@modifies qva, fileSystem @*/;
312
313 /** \ingroup rpmcli
314  * Display list of tags that can be used in --queryformat.
315  * @param fp    file handle to use for display
316  */
317 void rpmDisplayQueryTags(FILE * fp)
318         /*@globals fileSystem@*/
319         /*@modifies *fp, fileSystem @*/;
320
321 /** \ingroup rpmcli
322  * Common query/verify source interface, called once for each CLI arg.
323  *
324  * This routine uses:
325  *      - qva->qva_mi           rpm database iterator
326  *      - qva->qva_showPackage  query/verify display routine
327  *
328  * @param qva           parsed query/verify options
329  * @param ts            transaction set
330  * @param arg           name of source to query/verify
331  * @return              showPackage() result, 1 if rpmdbInitIterator() is NULL
332  */
333 int rpmQueryVerify(QVA_t qva, rpmts ts, const char * arg)
334         /*@globals rpmGlobalMacroContext,
335                 fileSystem, internalState @*/
336         /*@modifies qva, ts, rpmGlobalMacroContext,
337                 fileSystem, internalState @*/;
338
339 /** \ingroup rpmcli
340  * Display results of package query.
341  * @todo Devise a meaningful return code.
342  * @param qva           parsed query/verify options
343  * @param ts            transaction set
344  * @param h             header to use for query
345  * @return              0 always
346  */
347 int showQueryPackage(QVA_t qva, rpmts ts, Header h)
348         /*@globals internalState @*/
349         /*@modifies ts, h, internalState @*/;
350
351 /** \ingroup rpmcli
352  * Display package information.
353  * @todo hack: RPMQV_ALL can pass char ** arglist = NULL, not char * arg. Union?
354  * @param ts            transaction set
355  * @param qva           parsed query/verify options
356  * @param argv          query argument(s) (or NULL)
357  * @return              0 on success, else no. of failures
358  */
359 int rpmcliQuery(rpmts ts, QVA_t qva, /*@null@*/ const char ** argv)
360         /*@globals rpmGlobalMacroContext,
361                 fileSystem, internalState @*/
362         /*@modifies ts, qva, rpmGlobalMacroContext,
363                 fileSystem, internalState @*/;
364
365 /** \ingroup rpmcli
366  * Verify file attributes (including MD5 sum).
367  * @todo gnorpm and python bindings prevent this from being static.
368  * @param ts            transaction set
369  * @param fi            file info (with linked header and current file index)
370  * @retval res          address of bit(s) returned to indicate failure
371  * @param omitMask      bit(s) to disable verify checks
372  * @return              0 on success (or not installed), 1 on error
373  */
374 /*@-incondefs@*/
375 int rpmVerifyFile(const rpmts ts, rpmfi fi,
376                 /*@out@*/ rpmVerifyAttrs * res, rpmVerifyAttrs omitMask)
377         /*@globals fileSystem, internalState @*/
378         /*@modifies fi, *res, fileSystem, internalState @*/
379         /*@requires maxSet(res) >= 0 @*/;
380 /*@=incondefs@*/
381
382 /** \ingroup rpmcli
383  * Display results of package verify.
384  * @param qva           parsed query/verify options
385  * @param ts            transaction set
386  * @param h             header to use for verify
387  * @return              result of last non-zero verify return
388  */
389 int showVerifyPackage(QVA_t qva, rpmts ts, Header h)
390         /*@globals rpmGlobalMacroContext, fileSystem, internalState @*/
391         /*@modifies ts, h, rpmGlobalMacroContext, fileSystem, internalState @*/;
392
393 /**
394  * Check package and header signatures.
395  * @param qva           parsed query/verify options
396  * @param ts            transaction set
397  * @param fd            package file handle
398  * @param fn            package file name
399  * @return              0 on success, 1 on failure
400  */
401 int rpmVerifySignatures(QVA_t qva, rpmts ts, FD_t fd, const char * fn)
402         /*@globals rpmGlobalMacroContext, fileSystem, internalState @*/
403         /*@modifies qva, ts, fd, rpmGlobalMacroContext,
404                 fileSystem, internalState @*/;
405
406 /** \ingroup rpmcli
407  * Verify package install.
408  * @todo hack: RPMQV_ALL can pass char ** arglist = NULL, not char * arg. Union?
409  * @param ts            transaction set
410  * @param qva           parsed query/verify options
411  * @param argv          verify argument(s) (or NULL)
412  * @return              0 on success, else no. of failures
413  */
414 int rpmcliVerify(rpmts ts, QVA_t qva, /*@null@*/ const char ** argv)
415         /*@globals rpmGlobalMacroContext,
416                 fileSystem, internalState @*/
417         /*@modifies ts, qva, rpmGlobalMacroContext,
418                 fileSystem, internalState @*/;
419
420 /*@}*/
421 /* ==================================================================== */
422 /** \name RPMEIU */
423 /*@{*/
424 /* --- install/upgrade/erase modes */
425
426 /*@unchecked@*/
427 extern int packagesTotal;
428
429 /** \ingroup rpmcli
430  * The rpm CLI generic transaction callback.
431  * @deprecated Transaction callback arguments need to change, so don't rely on
432  * this routine in the rpmcli API.
433  *
434  * @param arg           per-callback private data (e.g. an rpm header)
435  * @param what          callback identifier
436  * @param amount        per-callback progress info
437  * @param total         per-callback progress info
438  * @param key           opaque header key (e.g. file name or PyObject)
439  * @param data          private data (e.g. rpmInstallInterfaceFlags)
440  * @return              per-callback data (e.g. an opened FD_t)
441  */
442 /*@null@*/ void * rpmShowProgress(/*@null@*/ const void * arg,
443                 const rpmCallbackType what,
444                 const unsigned long amount,
445                 const unsigned long total,
446                 /*@null@*/ fnpyKey key,
447                 /*@null@*/ void * data)
448         /*@globals fileSystem, internalState @*/
449         /*@modifies fileSystem, internalState @*/;
450
451 /** \ingroup rpmcli
452  * Install source rpm package.
453  * @param ts            transaction set
454  * @param arg           source rpm file name
455  * @retval specFilePtr  address of (installed) spec file name
456  * @retval cookie
457  * @return              0 on success
458  */
459 int rpmInstallSource(rpmts ts, const char * arg,
460                 /*@null@*/ /*@out@*/ const char ** specFilePtr,
461                 /*@null@*/ /*@out@*/ const char ** cookie)
462         /*@globals rpmGlobalMacroContext,
463                 fileSystem, internalState@*/
464         /*@modifies ts, *specFilePtr, *cookie, rpmGlobalMacroContext,
465                 fileSystem, internalState @*/;
466
467 /** \ingroup rpmcli
468  * Describe database command line requests.
469  */
470 struct rpmInstallArguments_s {
471     rpmtransFlags transFlags;
472     rpmprobFilterFlags probFilter;
473     rpmInstallInterfaceFlags installInterfaceFlags;
474     rpmEraseInterfaceFlags eraseInterfaceFlags;
475 /*@owned@*/ /*@null@*/
476     rpmRelocation * relocations;
477     int numRelocations;
478     int noDeps;
479     int incldocs;
480     rpmQueryFlags qva_flags;    /*!< from --nodigest/--nosignature */
481 /*@null@*/
482     const char * prefix;
483 /*@observer@*/ /*@null@*/
484     const char * rootdir;
485     uint_32 rbtid;              /*!< from --rollback */
486 };
487
488 /** \ingroup rpmcli
489  * Install/upgrade/freshen binary rpm package.
490  * @param ts            transaction set
491  * @param ia            mode flags and parameters
492  * @param fileArgv      array of package file names (NULL terminated)
493  * @return              0 on success
494  */
495 int rpmInstall(rpmts ts, struct rpmInstallArguments_s * ia,
496                 /*@null@*/ const char ** fileArgv)
497         /*@globals packagesTotal, rpmGlobalMacroContext,
498                 fileSystem, internalState@*/
499         /*@modifies ts, ia, packagesTotal, rpmGlobalMacroContext,
500                 fileSystem, internalState @*/;
501
502 /** \ingroup rpmcli
503  * Erase binary rpm package.
504  * @param ts            transaction set
505  * @param ia            control args/bits
506  * @param argv          array of package file names (NULL terminated)
507  * @return              0 on success
508  */
509 int rpmErase(rpmts ts, const struct rpmInstallArguments_s * ia,
510                 /*@null@*/ const char ** argv)
511         /*@globals rpmGlobalMacroContext, fileSystem, internalState @*/
512         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
513
514 /**
515  * A rollback transaction id element.
516  */
517 /*@-fielduse@*/
518 typedef /*@abstract@*/ struct IDT_s {
519     unsigned int instance;      /*!< installed package transaction id. */
520 /*@owned@*/ /*@null@*/
521     const char * key;           /*! removed package file name. */
522     Header h;                   /*!< removed package header. */
523     union {
524         uint_32 u32;            /*!< install/remove transaction id */
525     } val;
526 } * IDT;
527 /*@=fielduse@*/
528
529 /**
530  * A rollback transaction id index.
531  */
532 typedef /*@abstract@*/ struct IDTindex_s {
533     int delta;                  /*!< no. elements to realloc as a chunk. */
534     int size;                   /*!< size of id index element. */
535     int alloced;                /*!< current number of elements allocated. */
536     int nidt;                   /*!< current number of elements initialized. */
537 /*@only@*/ /*@null@*/
538     IDT idt;                    /*!< id index elements. */
539 } * IDTX;
540
541 /**
542  * Destroy id index.
543  * @param idtx          id index
544  * @return              NULL always
545  */
546 /*@null@*/ IDTX IDTXfree(/*@only@*/ /*@null@*/ IDTX idtx)
547         /*@modifies idtx @*/;
548
549 /**
550  * Create id index.
551  * @return              new id index
552  */
553 /*@only@*/ IDTX IDTXnew(void)
554         /*@*/;
555
556 /**
557  * Insure that index has room for "need" elements.
558  * @param idtx          id index
559  * @param need          additional no. of elements needed
560  * @return              id index (with room for "need" elements)
561  */
562 /*@only@*/ /*@null@*/ IDTX IDTXgrow(/*@only@*/ /*@null@*/ IDTX idtx, int need)
563         /*@modifies idtx @*/;
564
565 /**
566  * Sort tag (instance,value) pairs.
567  * @param idtx          id index
568  * @return              id index
569  */
570 /*@only@*/ /*@null@*/ IDTX IDTXsort(/*@only@*/ /*@null@*/ IDTX idtx)
571         /*@modifies idtx @*/;
572
573 /**
574  * Load tag (instance,value) pairs from rpm databse, and return sorted id index.
575  * @param ts            transaction set
576  * @param tag           rpm tag
577  * @return              id index
578  */
579 /*@only@*/ /*@null@*/ IDTX IDTXload(rpmts ts, rpmTag tag)
580         /*@globals rpmGlobalMacroContext, fileSystem, internalState @*/
581         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState  @*/;
582
583 /**
584  * Load tag (instance,value) pairs from packages, and return sorted id index.
585  * @param ts            transaction set
586  * @param globstr       glob expression
587  * @param tag           rpm tag
588  * @return              id index
589  */
590 /*@only@*/ /*@null@*/ IDTX IDTXglob(rpmts ts,
591                 const char * globstr, rpmTag tag)
592         /*@globals rpmGlobalMacroContext, fileSystem, internalState @*/
593         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
594
595 /** \ingroup rpmcli
596  * Rollback transactions, erasing new, reinstalling old, package(s).
597  * @param ts            transaction set
598  * @param ia            mode flags and parameters
599  * @param argv          array of arguments (NULL terminated)
600  * @return              0 on success
601  */
602 int rpmRollback(rpmts ts, struct rpmInstallArguments_s * ia,
603                 /*@null@*/ const char ** argv)
604         /*@globals rpmGlobalMacroContext, fileSystem, internalState @*/
605         /*@modifies ts, rpmGlobalMacroContext, fileSystem, internalState @*/;
606
607 /** \ingroup rpmcli
608  */
609 /*@unchecked@*/
610 extern struct rpmInstallArguments_s rpmIArgs;
611
612 /** \ingroup rpmcli
613  */
614 /*@unchecked@*/
615 extern struct poptOption rpmInstallPoptTable[];
616
617 /*@}*/
618 /* ==================================================================== */
619 /** \name RPMDB */
620 /*@{*/
621 /* --- database modes */
622
623 /** \ingroup rpmcli
624  * Describe database command line requests.
625  */
626 struct rpmDatabaseArguments_s {
627     int init;                   /*!< from --initdb */
628     int rebuild;                /*!< from --rebuilddb */
629     int verify;                 /*!< from --verifydb */
630 };
631
632 /** \ingroup rpmcli
633  */
634 /*@unchecked@*/
635 extern struct rpmDatabaseArguments_s rpmDBArgs;
636
637 /** \ingroup rpmcli
638  */
639 /*@unchecked@*/
640 extern struct poptOption rpmDatabasePoptTable[];
641
642 /*@}*/
643 /* ==================================================================== */
644 /** \name RPMK */
645 /*@{*/
646
647 /** \ingroup rpmcli
648  * Bit(s) to control rpmReSign() operation.
649  */
650 /*@-typeuse@*/
651 typedef enum rpmSignFlags_e {
652     RPMSIGN_NONE                = 0,
653     RPMSIGN_CHK_SIGNATURE       = 'K',  /*!< from --checksig */
654     RPMSIGN_NEW_SIGNATURE       = 'R',  /*!< from --resign */
655     RPMSIGN_ADD_SIGNATURE       = 'A',  /*!< from --addsign */
656     RPMSIGN_IMPORT_PUBKEY       = 'I',  /*!< from --import */
657 } rpmSignFlags;
658 /*@=typeuse@*/
659
660 /** \ingroup rpmcli
661  */
662 /*@unchecked@*/
663 extern struct poptOption rpmSignPoptTable[];
664
665 /** \ingroup rpmcli
666  * Create/Modify/Check elements from signature header.
667  * @param ts            transaction set
668  * @param qva           mode flags and parameters
669  * @param argv          array of arguments (NULL terminated)
670  * @return              0 on success
671  */
672 int rpmcliSign(rpmts ts, QVA_t qva, /*@null@*/ const char ** argv)
673         /*@globals RPMVERSION, rpmGlobalMacroContext,
674                 fileSystem, internalState @*/
675         /*@modifies ts, qva, rpmGlobalMacroContext,
676                 fileSystem, internalState @*/;
677
678 /*@}*/
679
680 #ifdef __cplusplus
681 }
682 #endif
683
684 #endif  /* H_RPMCLI */